From 033879320477a9dc8afc11f805b0bf77a0a3eb2f Mon Sep 17 00:00:00 2001 From: James Saunders Date: Mon, 20 May 2024 14:41:04 +0100 Subject: [PATCH 1/5] chore: restore creditTag and title components. --- src/component/creditTag.js | 63 +++++++++++++++++++++++ src/component/title.js | 103 +++++++++++++++++++++++++++++++++++++ 2 files changed, 166 insertions(+) create mode 100644 src/component/creditTag.js create mode 100644 src/component/title.js diff --git a/src/component/creditTag.js b/src/component/creditTag.js new file mode 100644 index 00000000..296ca2ed --- /dev/null +++ b/src/component/creditTag.js @@ -0,0 +1,63 @@ +import * as d3 from "d3"; + +/** + * Reusable Credit Tag Component + * + * @module + */ +export default function() { + + /* Default Properties */ + let text = "d3-ez.net"; + let href = "http://d3-ez.net"; + + /** + * Constructor + * + * @constructor + * @alias creditTag + * @param {d3.selection} selection - The chart holder D3 selection. + */ + function my(selection) { + const creditTag = selection.selectAll("#creditTag") + .data([0]) + .enter() + .append("g") + .attr("id", "creditTag"); + + const creditText = creditTag.append("text") + .text(text) + .style("text-anchor", "end") + .attr("baseline", "middle") + .attr("xlink:href", href) + .on("click", function() { + window.open(href); + }); + } + + /** + * Text Getter / Setter + * + * @param {string} _v - Credit tag text. + * @returns {*} + */ + my.text = function(_v) { + if (!arguments.length) return text; + text = _v; + return this; + }; + + /** + * Link Getter / Setter + * + * @param {string} _v - Credit tag link. + * @returns {*} + */ + my.href = function(_v) { + if (!arguments.length) return href; + href = _v; + return this; + }; + + return my; +} diff --git a/src/component/title.js b/src/component/title.js new file mode 100644 index 00000000..0363ea17 --- /dev/null +++ b/src/component/title.js @@ -0,0 +1,103 @@ +import * as d3 from "d3"; + +/** + * Reusable Title Component + * + * @module + */ +export default function() { + + /* Default Properties */ + let mainText = "Title"; + let subText = "Sub Title"; + let height = 40; + let width = 200; + + /** + * Constructor + * + * @constructor + * @alias title + * @param {d3.selection} selection - The chart holder D3 selection. + */ + function my(selection) { + selection.selectAll("#titleGroup") + .data([0]) + .enter() + .append("g") + .attr("id", "titleGroup"); + const titleGroup = selection.select("#titleGroup"); + + titleGroup.selectAll(".title").data([mainText]) + .enter() + .append("text") + .classed("title", true) + .text((d) => d); + const title = titleGroup.select(".title").text(mainText); + + titleGroup.selectAll(".subTitle").data([subText]) + .enter() + .append("text") + .classed("subTitle", true) + .text((d) => d); + const subTitle = titleGroup.select(".subTitle").text(subText); + + // Centre Text + // const titleOffset = 0 - (title.node().getBBox().width / 2); + title.style("text-anchor", "middle") + .attr("transform", "translate(0, 15)"); + // const subTitleOffset = 0 - (subTitle.node().getBBox().width / 2); + subTitle.style("text-anchor", "middle") + .attr("transform", "translate(0, 30)"); + } + + /** + * Width Getter / Setter + * + * @param {number} _v - Width in px. + * @returns {*} + */ + my.width = function(_v) { + if (!arguments.length) return width; + width = _v; + return this; + }; + + /** + * Height Getter / Setter + * + * @param {number} _v - Height in px. + * @returns {*} + */ + my.height = function(_v) { + if (!arguments.length) return height; + height = _v; + return this; + }; + + /** + * Main Text Getter / Setter + * + * @param {string} _v - Main text title. + * @returns {*} + */ + my.mainText = function(_v) { + if (!arguments.length) return mainText; + mainText = _v; + return this; + }; + + /** + * Sub Text Getter / Setter + * + * @param {string} _v - Sub text description. + * @returns {*} + */ + my.subText = function(_v) { + if (!arguments.length) return subText; + subText = _v; + return this; + }; + + return my; +} From fdd7b3ded458a12d4f2b45492bca034fb80d802f Mon Sep 17 00:00:00 2001 From: James Saunders Date: Tue, 21 May 2024 11:52:56 +0100 Subject: [PATCH 2/5] feat: showAxis, showLegend support. --- dist/d3-ez.js | 969 +++++++++++++++++++++----- dist/d3-ez.min.js | 2 +- dist/d3-ez.zip | Bin 52025 -> 53819 bytes examples/BarChartVerticalExample.html | 3 + examples/RoseChartExample.html | 2 - src/chart/barChartCircular.js | 103 ++- src/chart/barChartHorizontal.js | 119 +++- src/chart/barChartVertical.js | 157 +++-- src/chart/bubbleChart.js | 122 +++- src/chart/candlestickChart.js | 162 +++-- src/chart/donutChart.js | 103 ++- src/chart/heatMap.js | 126 +++- src/chart/heatMapRadial.js | 102 ++- src/chart/lineChart.js | 141 ++-- src/chart/polarAreaChart.js | 102 ++- src/chart/punchCard.js | 123 +++- src/chart/radarChart.js | 115 ++- src/chart/roseChart.js | 116 ++- src/component.js | 4 +- src/component/creditTag.js | 63 -- src/component/title.js | 6 +- 21 files changed, 2025 insertions(+), 615 deletions(-) delete mode 100644 src/component/creditTag.js diff --git a/dist/d3-ez.js b/dist/d3-ez.js index ef64b77b..46c6c281 100644 --- a/dist/d3-ez.js +++ b/dist/d3-ez.js @@ -4928,6 +4928,94 @@ return my; } + /** + * Reusable Title Component + * + * @module + */ + function componentTitle () { + /* Default Properties */ + var mainText = "Title"; + var subText = "Sub Title"; + var height = 40; + var width = 200; + + /** + * Constructor + * + * @constructor + * @alias title + * @param {d3.selection} selection - The chart holder D3 selection. + */ + function my(selection) { + selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id", "titleGroup"); + var titleGroup = selection.select("#titleGroup"); + titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title", true).text(function (d) { + return d; + }).attr("fill", "currentColor"); + var title = titleGroup.select(".title").text(mainText); + titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle", true).text(function (d) { + return d; + }).attr("fill", "currentColor"); + var subTitle = titleGroup.select(".subTitle").text(subText); + + // Centre Text + // const titleOffset = 0 - (title.node().getBBox().width / 2); + title.style("text-anchor", "middle").attr("transform", "translate(0, 15)"); + // const subTitleOffset = 0 - (subTitle.node().getBBox().width / 2); + subTitle.style("text-anchor", "middle").attr("transform", "translate(0, 30)"); + } + + /** + * Width Getter / Setter + * + * @param {number} _v - Width in px. + * @returns {*} + */ + my.width = function (_v) { + if (!arguments.length) return width; + width = _v; + return this; + }; + + /** + * Height Getter / Setter + * + * @param {number} _v - Height in px. + * @returns {*} + */ + my.height = function (_v) { + if (!arguments.length) return height; + height = _v; + return this; + }; + + /** + * Main Text Getter / Setter + * + * @param {string} _v - Main text title. + * @returns {*} + */ + my.mainText = function (_v) { + if (!arguments.length) return mainText; + mainText = _v; + return this; + }; + + /** + * Sub Text Getter / Setter + * + * @param {string} _v - Sub text description. + * @returns {*} + */ + my.subText = function (_v) { + if (!arguments.length) return subText; + subText = _v; + return this; + }; + return my; + } + var component = { barsCircular: componentBarsCircular, barsHorizontal: componentBarsHorizontal, @@ -4955,7 +5043,8 @@ proportionalAreaCircles: componentProportionalAreaCircles, radarArea: componentRadarArea, roseChartSector: componentRoseChartSector, - scatterPlot: componentScatterPlot + scatterPlot: componentScatterPlot, + title: componentTitle }; /** @@ -5078,7 +5167,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var startAngle = 0; var endAngle = 270; @@ -5104,10 +5196,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); var radius = Math.min(chartW, chartH) / data.length / 2; var innerRadius = radius / 4; @@ -5149,7 +5242,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "legend"]; + var layers = ["chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -5171,13 +5264,25 @@ return d; }); seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); }).call(circularAxis).call(barsCircular).call(circularSectorLabels).call(circularRingLabels); seriesGroup.exit().remove(); + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -5229,6 +5334,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -5303,7 +5444,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var yAxisLabel = null; var stacked = false; @@ -5330,10 +5474,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -5365,7 +5510,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -5379,27 +5524,51 @@ return d; }); seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d) { - return "translate(".concat(xScale2(d.key), ",").concat(chartH - yScale(valueMin), ")"); + return "translate(".concat(xScale2(d.key), ",").concat(chartH - yScale(valueMin) + titleH, ")"); }).call(bars); seriesGroup.exit().remove(); - // X-Axis - var xAxis = d3__namespace.axisBottom(xScale2); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); + // Axis + if (showAxis) { + // X-Axis + var xAxis = d3__namespace.axisBottom(xScale2); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); + // Y-Axis + var yAxis = d3__namespace.axisLeft(yScale); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); - // Y Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { - return d; - }); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis Label + containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { + return d; + }); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + + // Title + if (title) { + var _titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(_titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -5488,7 +5657,43 @@ }; /** - * Y Axix Label Getter / Setter + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} @@ -5561,7 +5766,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var yAxisLabel = null; var stacked = false; @@ -5588,10 +5796,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -5623,7 +5832,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -5636,22 +5845,38 @@ return d; }); seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d) { - return "translate(".concat(xScale(valueMin), ",").concat(yScale2(d.key), ")"); + return "translate(".concat(xScale(valueMin), ",").concat(yScale2(d.key) + titleH, ")"); }).call(bars); seriesGroup.exit().remove(); - // X-Axis - var xAxis = d3__namespace.axisBottom(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); + // Axis + if (showAxis) { + // X-Axis + var xAxis = d3__namespace.axisBottom(xScale); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale2); - containerEnter.select(".yAxis").call(yAxis); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis + var yAxis = d3__namespace.axisLeft(yScale2); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -5702,6 +5927,41 @@ colors = _v; return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; /** * Opacity Getter / Setter @@ -5740,7 +6000,7 @@ }; /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} @@ -5813,7 +6073,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var yAxisLabel = null; var minRadius = 3; @@ -5841,10 +6104,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -5862,7 +6126,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend", "zoomArea", "clipArea"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -5877,18 +6141,34 @@ seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(bubbles); seriesGroup.exit().remove(); - // X-Axis - var xAxis = d3__namespace.axisBottom(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + // Axis + if (showAxis) { + // X-Axis + var _xAxis = d3__namespace.axisBottom(xScale); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(_xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis + var _yAxis = d3__namespace.axisLeft(yScale); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(_yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Zoom Clip Path var clipPath = containerEnter.select(".clipArea").selectAll("defs").data([0]); @@ -5962,6 +6242,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -5975,7 +6291,7 @@ }; /** - * Y Axis Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {string} _v - Label text. * @returns {*} @@ -6060,7 +6376,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var yAxisLabel = null; @@ -6085,10 +6404,11 @@ } }(selection); selection.each(function (data) { - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); data = data[0]; // FIXME: Convert input data to support multi-series. @@ -6121,7 +6441,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["zoomArea", "xAxis axis", "yAxis axis", "chart", "legend"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -6137,23 +6457,39 @@ seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).call(candleSticks); seriesGroup.exit().remove(); - // X Axis - var xAxis = d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y")); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + // Axis + if (showAxis) { + // X Axis + var xAxis = d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y")); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); + // Y-Axis + var yAxis = d3__namespace.axisLeft(yScale); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); - // Y-Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { - return d; - }); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis Label + containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { + return d; + }); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Experimental Brush var brush = d3__namespace.brushX().extent([[0, 0], [chartW, chartH]]).on("brush start", brushStart).on("brush end", brushEnd); @@ -6215,6 +6551,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -6240,7 +6612,7 @@ }; /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} @@ -6313,7 +6685,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var startAngle = 0; var endAngle = 360; @@ -6339,10 +6714,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); var radius = Math.min(chartW, chartH) / data.length / 2; var innerRadius = radius / 2; @@ -6383,7 +6759,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "legend"]; + var layers = ["chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -6399,13 +6775,25 @@ return d; }); seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); }).call(donut).call(donutLabels); seriesGroup.exit().remove(); + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -6457,6 +6845,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -6530,7 +6954,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var startAngle = 0; var endAngle = 270; var thresholds; @@ -6557,11 +6984,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var radius = Math.min(chartW, chartH) / 2; var innerRadius = radius / 4; var _dataTransform$summar = dataTransform(data).summary(), @@ -6580,7 +7007,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["axis", "chart", "legend"]; + var layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -6598,15 +7025,27 @@ var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { return d; }); - seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(heatMapRing).call(circularRingLabels); + seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(heatMapRing).call(circularRingLabels); seriesGroup.exit().remove(); // Outer Ring Labels containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels); + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -6658,6 +7097,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -6744,7 +7219,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var thresholds; @@ -6770,10 +7248,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -6791,7 +7270,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -6802,22 +7281,38 @@ // Series Group var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(data); seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", function (d) { - return "translate(0,".concat(yScale(d.key), ")"); + return "translate(0,".concat(yScale(d.key) + titleH, ")"); }).call(heatMapRow); seriesGroup.exit().remove(); - // X-Axis - var xAxis = d3__namespace.axisTop(xScale); - containerEnter.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + // Axis + if (showAxis) { + // X-Axis + var xAxis = d3__namespace.axisTop(xScale); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis + var yAxis = d3__namespace.axisLeft(yScale); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -6869,6 +7364,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -6967,7 +7498,10 @@ var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var yAxisLabel = null; @@ -6993,10 +7527,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -7029,7 +7564,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend", "zoomArea", "clipArea"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -7047,23 +7582,41 @@ seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot); seriesGroup.exit().remove(); - // X-Axis + // Axis var xAxis = d3__namespace.axisBottom(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); - - // Y-Axis var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); + if (showAxis) { + // X-Axis - // Y-Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").text(function (d) { - return d; - }); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); + + // Y-Axis + + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + + // Y-Axis Label + containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").text(function (d) { + return d; + }); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Zoom Clip Path var clipPath = containerEnter.select(".clipArea").selectAll("defs").data([0]); @@ -7138,6 +7691,42 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -7163,7 +7752,7 @@ }; /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} @@ -7233,8 +7822,6 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); - - /* Other Customisation Options */ var opacity = 1; var startAngle = 0; var endAngle = 360; @@ -7261,11 +7848,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var legendW = 0; + var legendPad = 0; + var titleH = 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var radius = Math.min(chartW, chartH) / data.length / 2; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, @@ -7305,7 +7892,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "legend"]; + var layers = ["chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -7324,13 +7911,19 @@ return d; }); seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); }).call(circularAxis).call(circularSectorLabels).call(polarArea); seriesGroup.exit().remove(); + // Title + { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -7453,8 +8046,6 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); - - /* Other Customisation Options */ var opacity = 1; var showAxis = true; var minRadius = 2; @@ -7483,11 +8074,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var legendW = 0; + var legendPad = 0; + var titleH = 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, columnKeys = _dataTransform$summar.columnKeys, @@ -7505,7 +8096,7 @@ var container = svg.selectAll(".container").data([data]); container.exit().remove(); var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -7516,22 +8107,32 @@ // Series Group var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(data); seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", function (d) { - return "translate(0,".concat(yScale(d.key), ")"); + return "translate(0,".concat(yScale(d.key) + titleH, ")"); }).call(proportionalAreaCircles); seriesGroup.exit().remove(); - // X-Axis - var xAxis = d3__namespace.axisTop(xScale); - containerEnter.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + // Axis + if (showAxis) { + // X-Axis + var xAxis = d3__namespace.axisTop(xScale); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); - // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").call(yAxis); - containerEnter.selectAll(".axis").attr("opacity", showAxis ? 1 : 0); + // Y-Axis + var yAxis = d3__namespace.axisLeft(yScale); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -7702,8 +8303,6 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); - - /* Other Customisation Options */ var opacity = 1; var startAngle = 0; var endAngle = 360; @@ -7730,11 +8329,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var legendW = 0; + var legendPad = 0; + var titleH = 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var radius = Math.min(chartW, chartH) / 2.5; var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -7752,7 +8351,7 @@ var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); // Update the chart dimensions and container and layer groups - var layers = ["axis", "chart", "legend"]; + var layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -7774,12 +8373,18 @@ return colorScale(d.key); }).style("stroke", function (d) { return colorScale(d.key); - }).merge(seriesGroup).call(radarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")); + }).merge(seriesGroup).call(radarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")); containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels).call(circularAxis); + // Title + { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -7902,8 +8507,6 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); - - /* Other Customisation Options */ var opacity = 1; var stacked = true; @@ -7929,11 +8532,11 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 120; - var legendPad = 15; - var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); - var chartH = Math.max(height - margin.top - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var legendW = 0; + var legendPad = 0; + var titleH = 0; + var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); var radius = Math.min(chartW, chartH) / 2; var innerRadius = 0; var _dataTransform$summar = dataTransform(data).summary(), @@ -7956,7 +8559,7 @@ var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); // Update the chart dimensions and container and layer groups - var layers = ["axis", "chart", "legend"]; + var layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { return d; }); @@ -7974,7 +8577,7 @@ var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { return d; }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).each(function () { + seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).each(function () { d3__namespace.select(this).call(roseChartSector); }); seriesGroup.exit().remove(); @@ -7982,9 +8585,15 @@ // Outer Ring Labels containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels).call(circularAxis); + // Title + { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } diff --git a/dist/d3-ez.min.js b/dist/d3-ez.min.js index aba2eeb1..ac1a9519 100644 --- a/dist/d3-ez.min.js +++ b/dist/d3-ez.min.js @@ -1 +1 @@ -(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(require("d3")):typeof define==="function"&&define.amd?define(["d3"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.d3=global.d3||{},global.d3.ez=factory(global.d3))})(this,function(d3){"use strict";function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n.default=e;return Object.freeze(n)}var d3__namespace=_interopNamespaceDefault(d3);var name="d3-ez";var version$1="4.0.3";var description="D3 Easy Reusable Chart Library";var license$1="GPL-2.0";var keywords=["d3","d3-module","visualization","chart","graph","data","svg","dataviz"];var homepage="http://d3-ez.net";var author$1="James Saunders (james@saunders-family.net)";var repository={type:"git",url:"https://github.com/jamesleesaunders/d3-ez.git"};var bugs={url:"https://github.com/jamesleesaunders/d3-ez/issues"};var type="module";var files=["dist/**/*.js","src/**/*.js"];var module="src/index.js";var main="src/index.js";var jsdelivr="dist/d3-ez.min.js";var unpkg="dist/d3-ez.min.js";var exports$1={umd:"./dist/d3-ez.min.js",default:"./src/index.js"};var scripts={build:"make",pretest:"make",test:"tape 'test/**/*Test.js' | tap-arc","build:docs":"jsdoc -c config/jsdoc.conf.json","deploy:docs":"npm run build:docs && gh-pages -d docs"};var devDependencies={"@babel/core":"^7.24.5","@babel/plugin-external-helpers":"^7.24.1","@babel/plugin-transform-object-assign":"^7.24.1","@babel/plugin-syntax-import-attributes":"^7.24.1","@babel/preset-env":"^7.24.5","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3",eslint:"^9.3.0","gh-pages":"^6.1.1",jsdoc:"^4.0.3",jsdom:"^24.0.0",rollup:"^4.17.2","tap-arc":"^1.2.2",tape:"^5.7.5","toast-jsdoc":"^1.0.2","uglify-js":"^3.17.4",vows:"^0.8.3"};var dependencies={d3:"^7.9.0"};var peerDependencies={d3:"^7.9.0"};var packageJson={name:name,version:version$1,description:description,license:license$1,keywords:keywords,homepage:homepage,author:author$1,repository:repository,bugs:bugs,type:type,files:files,module:module,main:main,jsdelivr:jsdelivr,unpkg:unpkg,exports:exports$1,scripts:scripts,devDependencies:devDependencies,dependencies:dependencies,peerDependencies:peerDependencies};function componentBarsCircular(){var classed="barsCircular";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var startAngle=d3__namespace.min(yScale.range());var arc=d3__namespace.arc().startAngle(startAngle*Math.PI/180).endAngle(function(d){return yScale(d.value)*Math.PI/180}).outerRadius(function(d){return xScale(d.key)+xScale.bandwidth()}).innerRadius(function(d){return xScale(d.key)}).cornerRadius(cornerRadius);var arcTween=function arcTween(d,j){this._current||(this._current={key:d.key,value:0});var i=d3__namespace.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("path").classed("bar",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("stroke-width","1px");bars.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentBarsHorizontal(){var classed="bars";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("rect").classed("bar",true).attr("stroke-width","1px").attr("rx",cornerRadius).attr("ry",cornerRadius).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("x",0).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("width",yScale.bandwidth()).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).attr("width",function(d){return xScale(d.value)});bars.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return my};my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l);else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity/2);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin),")")}).call(bars);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale2);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d});containerEnter.selectAll(".axis").attr("opacity",showAxis?1:0);var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key),")")}).call(bars);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);containerEnter.select(".yAxis").call(yAxis);containerEnter.selectAll(".axis").attr("opacity",showAxis?1:0);var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(bubbles);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").call(yAxis);containerEnter.selectAll(".axis").attr("opacity",showAxis?1:0);var legend=component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend);var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);containerEnter.select(".yAxis").call(yAxis);bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles)}var zoomArea=containerEnter.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["zoomArea","xAxis axis","yAxis axis","chart","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var candleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return[d]});seriesGroup.enter().append("g").attr("class","seriesGroup").merge(seriesGroup).call(candleSticks);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d});containerEnter.selectAll(".axis").attr("opacity",showAxis?1:0);var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend);var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);containerEnter.select(".zoomArea").call(brush);function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var lineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var scatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d});containerEnter.selectAll(".axis").attr("opacity",showAxis?1:0);var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend);var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis);lineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});scatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot)}var zoomArea=containerEnter.select(".zoomArea").selectAll(".rect").data([0]);zoomArea.enter().append("rect").classed("zoomArea",true).attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=120;var legendPad=15;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity/2);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(title){var _titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(_titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(bubbles);seriesGroup.exit().remove();if(showAxis){var _xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(_xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var _yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(_yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);containerEnter.select(".yAxis").call(yAxis);bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles)}var zoomArea=containerEnter.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var candleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return[d]});seriesGroup.enter().append("g").attr("class","seriesGroup").merge(seriesGroup).call(candleSticks);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);containerEnter.select(".zoomArea").call(brush);function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var lineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var scatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis);lineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});scatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot)}var zoomArea=containerEnter.select(".zoomArea").selectAll(".rect").data([0]);zoomArea.enter().append("rect").classed("zoomArea",true).attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=0;var legendPad=0;var titleH=0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i;MxJ8f0o zBQr8GZW+0C=gxQD9k0LB3_imT{QXydoSnsq_cwnKq~3u)9`=JI^$tJa_g_=~-8}IJ zVKi+GgY1ZE_2SVq2~W>5Z(shZ?bp5S_V!(?Eh-;{yhPNsG5-{0NJrlTM}@q)=HPO{W{`0$~3J3jsp^s?LD|M@>2 z&mP46aTIvpV=i`g5)Om@ZSN7!XvylL?OGE2YaAv)?RJ0XcD?R(WlyX!>qrcZx?&kE zf6#|^*+=aVs~>42hITj@&=+r!eZM;kQ^x?c%r5`%{(tzxOM~d7A!el2-+|WDZ^-}m zmxfAc1)nv@WOBV;-}~-My_P}a(3YBK$nyRTvnN4nH34 zd0$w$FT7v+WFPo**y6yz=mSjTb@}K{k|6jDQ-6o$zrYd@pgZs155>$wwXHipynp}Z zx3|yUzrV9pxHPb&d%OXx4D~i>dvENq#80pT0f0YsFz0To-P#d3eLjB(9^^gU@t*nV z)O#C@Q=AQN|IAM^?`3$L_{mgM;`^922b;OM-D-EmWQ1c+fA8x8ii$#x_A z{C^atV?PQ%``9x}>S0&x=V{`P&UigP^VzTT)2T}O6n@_L?$#0S^ei3(Bma~DKg+UF zcWaB_M^YsQ#z-6+vqk4>g>`dcX!v@I1Sm5$4S&>eW%blq@InB zTfKO&MNLORAR6Zb!+Nmly!GSpY0BGOuz#VgFiponsX#xOsGZYNkkLYRoXF{lUOP%AVZjy|5w zEWrskEgDVEpbwMN+R9g8h{3kQ29+^}rKX3WyO{0caTsBf1OFpK%n@wSAkFk7{(qhM zFt4}qgJ$X-{D78kdw+P4)AW-b8v|>xANNum2Fyd;^O`-c7Y|Ru(=GaL;RnNWcwl~f@0gHKO`Q2?+Gdto3z+xY9Te;h%ev%wqiB2@4x7OQ$bZVvkD6ye1e7vW#XGLzS>g{j;ah1HTE4YFo1{FEPk5=YT^BwD8OROlX%w!6+UG~295 z2Z)uc$T02)P3Sa^KCubw?6$UBjC{e)1KNv;4_Z5-zE~33E(3tp7?T*G6@N(sOxngY zR-JXu%5?xb)~3KE>L0pi$%uQHvfKJm%t03WY1X8^c;U8aV|*HgCsW9yj2 P0FYE zJjJAT>pl!jN1z<`^mo{#KY-Dyf}@M*zbLW>G@kqM+=t2v#Cob6pe-*N?mn2 zVXAf@b@kH;^Z2>bRR<8JihmQQE6*NG6-Po>9uAnw4uP&b3}_)FY42)ezCqOC6k5gq zHYCNz|Kb-B)Gni|_|0f#m(xs20s7b_D#=lRC}LOAMmjc-1a=uEBs^mTud65@rgECq z6~v3pld|JYaV`&eM3DYeOu<20RaOsuuyR36LAyIM(Xp zdBF-y4tjnR$j_lwlU$0 zY!MEpk)QR>pgpq*k$+L!=#A4X9{k;p#=)x?81dJz1vVO9K7E{7$@_r%A642xkiY~v z+R!ufMp!y)r7njY!}!7sS(}bFSIIC)-unG;jQe~WF##9o4uO9MR(uHJ!x*Iwmcr9P zDzq{{yo^FW_4E}JIU_&u2j0IyiUFA?AQbuH$)8@+dv_Li#D5vWK8}Fz@qk5@`7PEA zp@+nZ~IBndXkV)9+ zYW>zHM3uVT(0`t&@TK00;ppXyJFnG=Xcfq7-P`2ftz&=KKM(uaS*@-&91e#|HLSOx zqh3w_$WQpY^B@>nlTB$T5{vFdTCLykJ{TiG;kfm_H%=0uNGMs?%#??EVGj=&pbI$O zhMr8*&FO#uVo!bGu)-V$kSsTfBb1(vPC-J|Yuf_~YkzG$o6n`1>a1>#nHNBW3n5dl z`$bK!dGL@@ds)l}t;0n*4=wO?fPgL}8|6UYbSgC_n*YRpazMf2ooR3(3$P)eS{2uF zhw)cHHRA*?XrHYPf?sbb-UKEA8IYPvp>LRH&VPmIIU)@v4y3HwMjv{E?aw|LArxu! zCCULW8yQeJS55Iy4$7?>YI2?e8sxu3E-(i%iq>oBh&9!uV+eVi&SDfUTTw7P&CcrPnaY8X4ZZ)w zQ+TPtbdU3_CV2n62=JyWfH&2_n=T68K4R2LAQDcN1ymvMa==>Bisu;(mIeAX=k3b? zJRA>>gM@=CDz?35XFjk>gjfPnUYP@=nt!rkM4IV_@|_anO0KM;2pnG3#C&KCsc{K_ zRecVi(O`M7p9)#CB+%km5*RJ20}}(h%o(usQIO0BUlVbc0A9+$g4k-!l?VOx(0fLs z{>1@tF`AkSCPz$G5lc@H<$0WhpW|WXM=R@Bw5FESuvD6rtD;#^YwbA2zPWCtk}4~y@{&rG33O5ms8v04GdvVjt7_^4xT`EO!>5{}41Y&FL4vid1~{q+Nl3t_ix3 zRWOH9R=dlT(Z$=*A)qg_s>=)Y|9?P$7MG7$wQ%T-Ci6LFnzZHEWva>{5Y3cllb_Rq zE)E^9R}wsiHp{`s>T-BwL**g7ky1SYotA?4agz8`4lMol;uGq03=NEt*FT;vF$L)g z;HNt1=>lL^`nRjBf4k|bDDU^*iB|eCYWNU3m#~LBG4+hV*gY@V=Lh@CVbuaU7v9V{*uTx2TUSPL9y@o*Zuc^{*mj zgUO+|bkry|V@yvVE$~D6E0n*+@|TZJuSfFp1U|oS%g-1;I}+=sijT#f(P&>o7&9g! zCBOp@gGmOwB~30&#hw>LX@B6Iz~Ncj^S-ZP`!!s)kX6Z0@CKQ-j&Rrf)@Yob)dJ2F z!vb<_B-i(-zQ@NW8CI`Hiw8Zck;M!Ia>7q!L6~mnPXoY!hHrus9EF_E7GHcE+1OJF zH5eFkQLl~bG_rABY!}7G=X+$G#C6yvNqp{UW%(ct9Q8Rbj-K)g>wi*o?dx-#tN95a zT*zVP_1^oK^^Y(+dmcwYie>7EK5m2+EntE1FddK3tuE-lFv}XnhVf8jzYWr?#@zF@ zF=jDp=*9yqA*&Y+G9G8M$Eh-Ak1sd4gHaOr{rvC>y8gG=Pt;;7OjXNubJ#D#k4DFZ z9W2;7eArFdbAjJlV}B;)Kupw03*ar5&l8jHIaPuQqXGt95xH_$Y{Vx?JYe11W1O)p zal;#g!!-5eSE;8#5+dH7j+-+Kro05@#_s*~;PrYKxJY7-V4F zJ+=D{V3X>KezI;^ZJM>XrD>Au)V7h-Ld~mP|CK-5z!~MAaDTFIxTY}9b^KTyQdE8G zziW@WzlDFis1Gyvb^njfy+3xg>+o|w@&}`!Uw=fc{b{R(zV@}@EbKHUDvzTUBE#8b ztW<ZS_(l%q+Ymmwebv2w(%GY&e=3zvp~p0?vy1VCx}t&Q9g zT&(*e3{qD2;RUzQ6M)yeULps209Zvha@X$9UFvF%QAxy ziJS63z)^9s-z+K>4hsyrSHv=W*-WXGeda3LXKth=wK7UoMybjub*YU~#k!b-%%qmSB^@j22eUg%{!F>UBkf>G(qhPpC6nD$MoQ|&6}O# z$x$ChWCDKBGEkIQS*buP6{z=3RG^Yfb5-aJT}P!0o!7@#)rGb%P_4PtEt6?yh7ywg zmexD6XlDI>IK*&;J9z?HTdzv84!OL)Yk#httTc_4rm@mAIsmRTjg_Xc(lma1P2)?9 zEgST`U*mqTgl>^nr`k*C6eCq#sTLXKBS+F8h>igumFH5Rv6FmX)cT=K|2C}re{hwN zs+S0r+kKft<1rMBkv}EnXA}dgDRWNZVRjIH#`Wv8ueOS_zPi3qTSdpQ_Eq(asDCHJ zb$HzC1!*d@WJ)Urc_OR!USsdXhG&k;0u#`iSJd5rEydEYVwe9GJRAE{sO7Y@aD;6r z7VE>IGKRXc7bZPNTuwvFP$1@N(kN?1$fJk&-y_uz%gsrbvJ#VU*yq}0oMb+mZBESs z+&t&7B|A^l!%CJiu|^7H5iW1AdVj`xWWgk_I9_lyu#KX%z`Wc_@Cs}l@WYaeHh82= zqIXihhmCkT#G|5l4670WalxX4u-~Uu<)C77O@G)si-|-)e;aF9V{ElXG(ZOAL!q{r z$j>SN~Ek^eG`3A>)ac@nBtl7GKmfwk7T z>c#kuWm#&bsl!Vdtc6R@R&xW`!hrI6CGYXeGk*yfjT1mNR31X&l@>=)R*h)IT<~ZY zE(e`reLPPzvzTartkS~JJ%9J=rDU||X^&daI&FEkiQ~FmFC`r?CT&UK04i&e0c)x} z;6DSEVl2qQnEP`GRgu`uUw>DP-&_JpQJcf0HC7(Z13Ebu1Cm*3-GM}GTwtV;5#(_R zip)-Ob3UlQ25+n6+#G5wK|>cMgu%g-9^UK0N=(7yy-w*XEkdP5xItQkC*x!M^CpUy za!{h$=~7Nftm+DWNl1VzPo>$ON;a##utO4CrTpIhMovhUcwSwZnt#(t=h{2dpXIc%I%| z<=9cFWGa=+^;F61(<*oe88BB%=ww)Rs=btArl-}fZjG&`i+^ErDOAwPTjgSIlj$qz zIMcrQH8Q*clX}06yr=$Dq*3^?^taJd(=f!7iX_Nh6sLjr7x)FZtwnb&6cCH1}advs+VlLoKZJZNa(l&?+AqIUpo- zRXh^Z7}l*jPg5v%fU#J6DS|2Qy=~c2qB#Zw>)2YyrZ*h9&U!X=^;OB4*(> zp`0ha87|$(s4)tXLn^${f*K&oHLwb+H)%IEOI)ofgMU`o*W4>LR=4Kunpxpz@&RaQ zg@6v~qXn&seu(1|UpUT>D!>uh0J7!v2M3I@+1XgGb)&$<$Y-9+H+t+Wq+Lysyi>cew3Ygu@E~4>M zdZ!X6nIgZ^xmP;(YpHYRO0A1{(9Bf2ECaD>K!1R2G+8O%E9HBoe7~m3_b|a|%PUW7S#pg8nfN6e|25V5GYfIudn!mXk zo#LfQZ1@woJ_7VIML0w15z?&Ut~hB{5sa3$H=~8awjH5NU9`!SwF0K?CjqJod|bAi zjDLu!2Q&?{^#rBlVHl<9&*n2!QJpLz1YeBMrp9IoD`Px#*o99Wq!`op#f?;~ZK`Nh zw!GfRmP(r%tx)leQ>A{@nlu#zTFyn@N$u;iXxe|1V-G4*J z?h(yars-od34^<}!a+FtFTOdy0CA8%wbqLX-h4_@c+J})G#x9w@26+zKR?rK;i*E(V^=M*(xsrLEV}=;y%*F9H@5&=m7+3Mv!xB$ToQfyo6-rQH2^ zOd)041%y@c*{hLO>~KJ_WUVVIK!54^i@RIHF*FelB(|zqqo(=j9KA00P%q0~nX`ziS}7K#v}W~v#|r_m1K|E(LsXAfeEmSag9=#(#2D=e)c= z{#=-4bqhs}%sK({A$=D+1mg_&^{xg@Ei~O0${cZ2TbwSrV~ujlo@g3TC_K_sch8W% zi*;pZ$;?xX55+Ql$;ysyQloY1PY14y%gwCAiuI8jG;en8=h1d!d-i$6#V35H4P ziUb@nl#;&&!EN!|6p(~@5r5?7!)Zfd1YW2Ga)-tz9&VlM49q==SotzI$!e0_)3+Jn zEXj0wBig9hj{+mkTiU}HVd~JR#q#kpboGs?w zJBZ4qP}!ol>o0+U%RI>u<2f;zR@0M^^q5I6e|jZ7I1Wh#$NcVUNxc;ghuWvr3Jw6~ z{KT^!4oEYYmdC@>2!Al54U_o_%C+9SfGyv-Z@vfsj0i8cb1zp?V+tJ|A7lt64q6NY zB<@iJXZqIRLg6xc|>y2D!E@g6|3*+e9^0`GiDoqsiJMsTt0YjNK#R?lo1 zP>jplGbJQ44FxB%^BjW)XcH?iUq5$M^4Nw|E$o7?qG*R zeALuXNJ6Qor+v8nv)-vKqMOB>ywi-AoFDV&$4$TEaHq9 z{#fqK#M*bdvilCoTMqgsN6T7h7!em~h!o^;5qpUqz;bQqom-bnFf$i`AQsv$;^eo_ zIH(1J51Qh{zU08f5iys;b}?FBW6+hJOjm?~ulF4te3=jJzJQH6;Wq zofTh3u#)wKV5K)$d6KOxQXT{-=&UYOvUXM%EA@81y_3?n7B%(RxQxQ42|nYd_Rvo9 z^NZhKJ?jFY0W?YcB#fqL&FP{3f=eoRbpy+L0B&{`Ouf?}gJH+OZ1uhP|&#&Y}Badv`MO>PLrfu2X2ux z`(2Yk(&NA1#37OIeD7t9lln|5Czss(eaR!*f|f_w(SnA@LeHBO?T#^tSX~7QFxxPt zOw-h9w~bXPV}dNF1k%XDZ^Q6k61UK#^M^nWuXi%c9wF#wetspltwH)aK!UPzP^ zQhe{2@iONaFB_jeC5GUUKAvx;V_Mx~XjP@uEZbp@pfW^2^e-Zi-@9G}afy#x-nMli zy2v)kIxUJdC)H^hwrD(ox0u!}?~%Eh+N`wt$0Z@p(nj&Sp1v1_Sq8LaWc#}b?R6iw zXn(7H*D=w9wuji>Oi+94`S_dtRKMC@r_u46?N+%}A;NtGBq4mepQDE8EA4Riwr> zzM3KDYTXeTX{j7Xz&F|fUfICc9t1;c2$ZIuAAcgvAu@!y@rEdvj$(@J-`Ccp0TU)>+@TUxlbu-_ zP*n~33Tv6E>*dvPmJFXirN?weU1LNpA5pA|x^~^8t}!;^07;vnc_d;tJJK2op)D#` zQhkGTNd#PTdcCkti-N*()eM42eqOxi>lJd1O@XEHn62Az>qC?V5r_f%WPemkq|w*X zq1`AXCVPd*tzr zCDI|7kXO;eu3z*pT?4eVw;naJypvvERWGX)TB8QYrrb+uNG`80U8N_f^dxfPFS(w? z5iG2*N2>m~RJR=8@Y=-#SAV}e$LRf4*!O4}^gain!~wN2d0Np_YYVyw>!DO9O(W9` z4)s+uBsWQ~K&Gv{GZVAf322J-3a88`#1YJ+1Q>e-J(`|o#Zf#gC4(G^?zQCz<00MX z>@Mw#ZVUOl%vG2a_|0+e7Z)tf3ssi)3*DL9XzlE3X)~QPxHH=#N`H$|*UY5UZwvig zlTjvg2=2btdp>M*0W`k<_(O9l;yPTVv7M>SH5xLMIr&cYdhLbOy<{KTwwkb%zI49D zh<$=Cw|dZT5{La-f7>hz<=|-LZo@=|9)%hxMU4)m}oIcc!W%tU#w<;H} znF>s8!5qZk+bA%RbFq||rhZYp`j@lG8kc76Qr@P}B5D_^Or_&Rs7g(x;|xuyu5`@n zN;PJB38f=b6@PXN-CvO+vSz9o-Kxl3p*3p~U5-_S+QpI{SJjh`H{AIs4NmEZp7rLV zEHm@bM_y{4*o6%ODWY3Fx>|`JQtXDlTPX7=yLA#L&n#-0zom>N55uDt>&ooN^)M=y zcd^t0_PNhw3-HYgZie$ufuGFRbf2QN_}V^H`A!7lv46Q+SUg?c8H!Nm0^OmC`V;H! zz#}G@t$v-3-GkJkJ6F=4cLSuo%C)L;t-219ya{>bT6O(gtE3+09euuy&sR{!K;;#5 zG4XkI+wLl$?)AnKf(xdATsxYDDu#FZ`$i1^?4AUo@L5mt4P&?WyJ%< z6Gu_4+kZ+-zu{s!;>t`JofViVpkt9T(mCtmSHPeGA)OT9XmY zCCKx4*)YJhp>h)$(_F@NxjDrHs>~OmCqjI7Uwm(J!LYRQ;{x>_xvuQpR4F(r1xKae_<9PCp-aKhMjw;;Qe&mxxZ3&+rYU${ z={LTee&Zkky7&`JMnFDYQn$&oF4K|xDeJM`@{$(dM;4E8+xw@C2{!E9OUrsj z6nY_a*7Gn16x%)_k7LT(?=PXgM61==TFqdKES!Kb+%cgEFr$f(Wyb~9^Tz`Cy z1{Qh!eX*Gz+|RNF-K!CyJ9zQyFE5|HKX~@`#j^v$vheD+m+xMvjBU;25GVa`=x4!y z1XI)i9+HlR^hO(>H;!_AH-P|q+*}OY_0m$TEr)PH!Wua3+;5V|f}{#CjpoR^#&~n_ zW#e-X23vp)a@zDEB=Pxw1XDL!Ab%38A;P$fv1ps0uPWE4GK$JpK)td;9e=6iSTr2- zyEyZs1xHPF)-!I4HjNqfa5$C^iaZNqM5)D>DJ==Fjw23m5jgAZjRiQ4xeK`{V64(= zpixuw=)=F&b(I1azAy_0IZK4x2bgP}n3Tk@!OYh!E=f&{D)a8KKrtLNq+VHv- zy`zY4gl%e>4mxb_#myO;kuT_i>l&G(UNKRFIT9a96{@bC#y5Cx1!Jo9tr zeCXFMWL^37yrF>Qr z!)HP7Bd%nAq<>-RrCAt7a<6!`VJt`JaVySA3{uhp>ogp#i`iy zVqIuniElBmbWu4=Vd)$$_8Vd8`WWCFkEM*4z6@BpIFGF%>MTy%fvXEnq&9_zCJpBk zXKoovlz*1F^17er@j0x@aOyn`df@=hv^Nn5@%))`Wm`|ePtcM4G<`|ouh;Z`j$%K{ zo7vs+YM=GSI@71n$f!YOV@e0yX|1+_juV*MqNLhZ?NRr?TDAY`Z`SLN;P+wh?5K9Q z**tp0lK!++*GR_qR4K2>XghI9B5k`NSpjDK^?%U$BRma(1xV=H7Jl=2r0{rbI=mY7 zhdlNpPyFN_1YTG0FLYVw!#K@=(?JL15RfZ8347iUA10TsXI>rVnm4$O4Q|Tc&=e;h zIqw1_s>TWz;Jkaa0Qjfcy39lQb`f=6Oa@zK2ZLLF!~!*nF^XiCZjq3}rJ0e#27T#&vY zCOeU;Wb~fD`$`j}btnz?0+1v9#D9Yk9Gv?j>JgcCyi}@pMU%`TVo7+k>bm1#nm;@9 z1l7Y{azs<~#P^`QAOFQ(IB~YJwG&8v%kGEM^{)8AJ7U$k{I957bW?+3P<*$@RSg!k zV#&K2R9RitIOo^=@3-4B?WSGe5G!ywZg4mPY`!;~RsY1WjT0%$hqWbn4Sx;m4HD^W ztfh+V={;wJYGp5wQ0dk0kWe$?5($0eAF<#)$sl+Ao#3;Ka941>#Ju->&h9+3%NEq0 z8ig8x>hUb_`x~>1oWyZ9r^s>Kp9;L?gb|}CuzAKV!r`eAw*%9}H0ZZpA9rq3;g)Kv-x?3ov+x8a$++Jk&T1FpffQFXF_>jf z!6;qeYK}-7A?uF*8Uy>Ni@vOUfSCm-1sfD8quxha7 zMw9s<3TAf+0I4d6MSnDNbMIftNO}k1=fHazoWg!yB7`2RNNtprX2jfgGVRzRn?ExevF4Mb3lOENdvML)$*RB5`QOJtV&I{h-xj7k+`@e ze=@(NaM*(*keTpms@bL*EWRr#QPQYO4+*5gwZ0|`)ms=esaCf&;&zO2*~S6B6o5oR zPSB<{usdG3=cx2-*q>3Q7D7VD!4@2<9viYDQ^a$w=`^>T(}OG+DZJbA)C|A?w#|8- zKBa+@Nui-_@qeagy;(bb%ioPSr1l%4`6lbnDlDSpSaL6>vJH>X!r9965!Crh6s#W; z+S~s%-fnm9-i8K)0ib(&=H33^|M|bSMG>KHqII9Qx_MQX=S{kb-YIM|z1)E9*sI=XKD34e``DqG_u9juNDC5eyDi9=+V z!RUo{kUTdjM`m~rHEO0u5wyxlNf`foq|+O#pbS@GCeMtMxM6oTQ^#P%RXa1{!dWfp z14VRB^CQbi4;=It8NJClLyWLQ(J#5q#9YuvnHiuyP2lH0yvc{5y%E`N$k>+s*3@_< zQVx=j$$u$dsKLv@_QIqWsR!+fUy+n7c_Moh(r$5-Jy~gDR}#=1eQ9PtdWjptowyyIH%W-EUrAco`8hq}kW;m|vRP;wCV``Uz-nH!|nKoxe? z9L)%PA**4TLJTF%rNq!RMN|B$C`%(&nj5x0%YV*;qeTnR3j!-T#mZ|SbQQ&|Qt!mEplOTcTh^?Gwv+{JQn7mKj?iUwW0RYIAv568-BoP@A5R@JHKO|4zE;&_R` z#FG~=4FX*ElO`}Bf9Dopno0!u++2C_D#5n8y)M`#*3S~cGYH0=HmW()c#v(qZagxFn^eC*5p? zzj!d``G+#|z2dVEODt*UD{eJoX{&`=<3j0s?~8VxEvoEXSkJbg2K26?t@HJvIeL~; z8k^c!;~>ARf2z)vHJdBVU!~T(UTV!7`Nj(AHc45su!k2_rJ%vJ|NWo;7tf>r{h$A@ z;lXca7J#pMIejNr)-0*+#M&CU;*C|x&Pv%?pzM^FQA?>hy}zbG;GJdJDD7@-9Y?LW z_c3k7$?4YMI8HP8+Pb^@JF3{4E{$SqMZ)LFHp9d+9LoE%sKM0ILiY z(2iT%e`&K1c3FBJE;-ekD~ku@@Q%YXZk6!PrOcy0dZ?`+u{~u}uUuj#EU>_2sAzjP zQp>gx0x!jwmBZmDpxo?EGq0n}5!!1i7|<^F<_t^qCUU0LI|NqkjY#b*5iXfX2^= z>5$+Q&&{X-8(QnyNT0+BZZkPjvkzM|vLt?1c`0$Q&bzuohDSQdoH{IZ%Bx*P6IWwImI7bm0o=la)Z668af{B~dYua;HF<4Nl!jAU z6=sKW-7x?()TE0}I_{KGQ!eeZ8VFFJflV42Fj{86f0eH$Eo8#K z1b35eq|*X11dBT?uxfZ#m(U+@v2+>L0ag`S1K!NnamO&W=vzGdU?ox3oeSPYd0kXm zuS)Bsv|fOj-ae@}me71bWmb2I=%bOStTap$Qw=qptEjpd9n?(uC^irzzM`#$5|>#fPWNNp2t4zypvZB6IZ zoQj%7FE=s(0HMy_QG9=mTF6AJY0{A9zztE39K}rdZg_q1{DV7Ej~aI7cG;%c>$m6~ zwHij%sbzKZ{Q?Dx5$EQ&QJ=ga2t&QoBp#1+NLl(Xn4EWM(L>5!f17BLxd@Sx`Em_wd1MJRxHt!qqk zaJBgDr4>R5V;?!VFwvop)UQg}3O|r~ErruC){6J%he72ViN(uwM2o~hS>7G<{Wus| zDAT=0L|kJid6Oe2e>6B~q3s)F1RYUp!mc73@N%7?p?|gRDi%2T|9%lB`pF7n)Nhw4?0Tx=-Rz!z~^xd zR}f}g3s)<8f4D(Qx?v!xA%ia>rRMZ*b0e3!wSL~FMh5j@B*xu!jjC?xaYQ64R?=@J z{Ys{zl71`cw~~G<>GzULzi;9Q2J<)x{H1Ni)C9G#ga|wml`9E&jS{e&t96G+mCNNg zzrML-OfP9N?DZbSz%H!cFI~|RN z4%G)kULhI$m{LXeOfU)I_@*-_vn|vE>@~$zLu*vHcp%b*l@9Fux0i4Ue zo>STAD=m#vOOpnt#5B0oG%|Olo`#nysi;AMu6l^orncw6SB6@59lobBqHZQAV^x-$dN8Je+$tkw@1K=K_nOK&2r$_=!_;CE+nfI zF_j`lvbdEZW+uSDx)d=Ho{NY9AOib{dAZWo4vRdXD6-&|```7>0K^0$(dM{%K;3|U6x5C0gT>Hiw{ ze^K|Al+tEtFZMcgSwtD4x$5JMt=S`!ZMx!@yA(!#qYb`SudFC>Nc;02GEm`j4fhRif3x6H7w1rTdF9KISJ%2CZ%oX18|E_!x^4%N zZ*7X5t2Ya@+BgZh{pirkEEP7V(&bdToSUM{xpA>JDlei+cU9@Gu9oiVt>2ekL<=jc zsPeM@Ly4$d`43$p^^;r`$LaKK6i#G^HIz;V=v ze!(lsApol2H+cM_z#C8e6otyUfjRc07?nVkKCaToDe&0lpb!#~h_B_9j4Q!CNxo88 ziDHy0t7dTrf!J=h4bKdRFU4Awe?7~N!o2Y^E55}F0{x7x%ZKEUG_=4Y$&GS3Qrw@X zuVg318g!L?m#R{>Ze3)f;qIH6h>v%RCb8YRFBS_ssw?n~Wz&+K3#jGKTuM<+jN7`2 zRdCK&N0snK?Zs(LJAUuLdDPVWRJR>E!`^h24%2X0y2DD*R4JOSm7=NAf4fwAmrCz) z#q=&9MDcrD2LTtuODbKUCRJqhmQuZ#O;ie))f6yk=J!6*%%1pBIy)lj`Y(1_i|IJv zE{)y>=gEBsiA`amZ(E*Zw_~{-(Y+!MNSa5Nl{}_lVf!&vb(9tYx;RuqB)=jw)YqhK z5As8 zOs&hVV4}6Ox>Z~ouPm;m)%DU}jFB6#J(PRnkr)>cOMMEz=+2?U zwU^K)rmFf1n#Ah)pmjeVq^*nNWd7#22hI5(_>1w99^mlWS$=S3~s*JWcfkY$KWtDpWZ39=xQe+-_RlI4)ZQaVP)106^U7ONZE204uA0O?X8o1t4p~r{4MKr7()FIr!WPYtHK?~K?#V=af#Ft zLz6{U9NkV^jLv4%SzL&Pc^+0R9D1Y4{3B41yd};*s>&xrG*kZE<3TJIhK|=O37(|# zOTfqKa(HAzLpnU<@Si1K7d*u^&T%{VN;&Vr#_?(r=2GPqf)d%yOC&~PG$TwRBD2+-)Dx8^CMhkMrN(HCDMCfFF zV~`+0x9skYZQHi(nH}5Kj(2SI*tWf6?bx<$+cw{R_uaS=_q~XY?&|8F9Z_{MD>Dxm zrO;U4F=>mJ%={=K5KB{!K(R^o$O%P(_l<&RS~`W=$jSe4Ft*O_g?Yq7B-^;ZN3J#2KXBsmoT4as-JS- zOJQ#3w)KrMarDf$o_F>O;l6y++_!0Qq5ud8vmHsb3^vI2)8S>R!qf9n#w3(N6`D;| z6Fpl}+{b`0(${@LdKSqA*5s%n!h3MR84!db%>FtSfr3OPEtZiG1O$qE+9`h_XjpOd zF*PB~N#Wz{m7L*nkx1g7+V7}b2#Pw5!GVH>eoH6e@|TDNk(2&;PmXrc5Zjtwmq3S+ z@mrF>$TMlQ0JiG!7E0peO4rhP3+nrmw0~9O{go`|`!G!VeKzS0*Pkvd3SZR3*ZPMk z!th)H1k#62^DjxzV!ulMhA8jN{zY z_|wl#CTxvvnMwP_VwTWzCEl?}J|P{^2LE8(&GIyoDhR!(N|T$5zw->Q>X;u4{tv^wZwOrYAK;p3uxrUk`u}h;l7_tzAY_7K&QQ6 zp_(;`wr|b;B@k0);EBlt!SoX5mU5Q{!=}*c=SFBxAjNm%$4#NMt(nB0XOD;2jtTR= z6KpTUxrQUuJ$g=N!&M}3zcHnZZ&+G3bc8i?+2XmD|FM+5adqLc3RpWw%U`-SV!b}f z8~ouU--5Y(TGr!S8Tc|@+a2mgSe|;j(Cb>t%i(E5@M)hK7HxC9+WcLEY2)_xjIo6H zCU9Bb1nfWCR|6>s;OxsC@LN$rZ=ZkHqlT#D7C?@z=v`EeRmsVidPNraf2C*7(BC^gGg^{ysvg-SBCjnh7`g+|% zFw}Dtav|VxGZtcl5$lGSlX(rbvBAF+X#Vth0~L_Bb#;;bPU**sv{vHk;H7TevMnKZ zAb+{h)iwdlB3&)>griKe#|+|k|8;xiO=bPJ7xu|)i9^%^v5o{$@pju3MCa)C)DV66 zHI0j%yKN;DQ+nnvUo+B-Abe~m6r$a)tIzos0T;}L+S5Z=)(y!@K}1(SSYoL2)Xb)S z0td$9a*EsV0rD{YRN+A)RSHJV<2r`#wVA4nNiWQXnK76_*Q+Gk%NQ39^pX`>q!LnuupYQjvY>-_X9F-x*^b-06p0kl4V>!q;QvqrCJ`mKAtBZyAzwGKvcedZcNpdR ztjnf$89B`g)}9Uf?0)r}8RzWQRO<#LoZb1+WA^6cwBtP+(?&_K`EkhxVD!mM%5n3{ z)fGN|C()iUcGWw|_OU3X@Ynx7#(iFQrpu`J*_V@h`8Q;WQUv51)cn@wM&**W=6K44 zb#y=j@G@O)^G&ro+?gpjd%D`Z&P_U&s(<9aY@iw_&RN+dn2ajFd`7|IZmzfBs3|*8lHpGT` zXk(4mf?--9F`5B7EQ$C2fq_svBl=xwH4MWa6|;{VXD|&zrkC~Z9a8GC*x7mTPmUa1 zhD4_~zg3)J7BI!CZdcL$1>g+LKW#xM!t~z~`t9)U75LTtP-6MISMS!jg;?>8=E!_f z5+evV64u>@r5i2>DD!w5u~_88Y((Ntgm(x6EtdDpL}LI*DZ z6V?Y!nRuwNzm>ULLpJBV9a`Hf?U3aHF*_z0-Gai}M| zTsa!S7_;IuL68v{J0!5lK7|Ei?s(g^a#&Y0I{KZ`tG&fHR>H zeBKE_P$^>ezcP>=@2>0g1u_`5o^Um1G6JjoFOQtl4 zOh(R;W&YL23#uoD%ELS=`wOy4{@dTA<3qLxZypeK`lym$WL$_yfq?$&oExl?G@{rWr6&ib z_WX9HLbOD5Njr@moD-RS6GkA?p6?t$rgi50wh~Lq&p|Vizlq*pu0FlBhy0sCV^UFu z|HheoleA~E!oQzM8_7wB7({hK67Dxu+F$}o;tfHzMa57KFB_E$)x!@M=xOL(**mdh zK6N@1b78#*d7%5(O&{$!fwnR^#8L3BdqNe5#ePDu?iBoEz?ZpVt7Ty{u{B@oYRx(G zVAx18e6fw=oYYr7U`enl@3YNJco(1GH@{dl9ZFZ+6OKNXyzQ&@Y4@L#TeL1=(5l=n z;yBr!;PqcsR;IVt3-YGO{xdJcs6<5u*WbH_Z8{w&0BOELrc-=?S-$ms2VlD;feC%X zTYP{kk1!kVo;Ib_v{^LPEc0YiWvMn8*>%KS+=pX|!eY$9P&(rDG#l0?N(k@L}oupLjd|0_%T-O4WcsJuCo?Fv3s*a4+lqu&+v0#0-$%l{t6 zhK{cQP+O|fo}ZuM?vho`xSm>HvwaVqNjze>-p;6kN8S@r#{&Ul!@xJb_5eq4xRN+j zQ1~!{-8{Z!3;Jyg&ryZ%9D;8)<>8lJz;Tp1y>iaPWw}_GQPdJ@enf+xp3<9blVAqG(;4zl*Vl8-{?-QT>U`<^>;xc zacRa4mY_SUWJzKQVo8@o1Dnb@86Ho#pRh=pMVcB_I@4#gXKz?i`^;)*-DZ*t4$j;| zq*C2@TlgDWo9n*QKcbEJ89&>%GF^>s5O3#{<4sI>*JmRB7>GA6@ZJ>Fb&BKld;Gf< zkdUK{hN^7Og`4E^Hfb~T*CN#}m9s*=6gmDbvq?dw^u%HLBReKsu-6W zr6VKSARQUAZf|1}d8}K$wU&ZKKT=i~am&2^gtBPhpKFZ4pFjRZI@fA|X6VuCa9OVP zHHc{cK}wjC?uRs2y|FHQjCBcb;M=$zpa9-GB)Kck<$J#tAscj|uDjD( z8QWzl0^@d5KtsGlnC$l%hV=q%<%k__#y?L62SC~S^ikIYigZ;lsMLD|!07albsYDq zV`{MNpGmE^93;n^R;?MS!iSsx%EQ5y_NTB)4p3l$pmXOC2~f7O_LFYl;7d&dP?VNz zZi;zY9};*)%B}VsyQ{0Bs=rp74`GO^C>L6^1IJeja=J)AkFCXyAm=EA7o=PE>T~i4 zab868ZOS&h}jM z{*?mmlt1bYYARvNxn=)J2xVfRvb*RxU``mB`sVzT?3Z{IkkXIX>_vNjkw$ao>N|XdMq2GVr3*#mD-=OsR6dW1wUI+J3wS~n2mOVAHt@oRJ zSV6v_IA^aJ(LvYOz1$OYpwfv8xns&oa!TMt9dI99KaDbfya%#4BhF1I0Y9-Odq#4A zo7I}HHGeiAG zfl8LTF0pr?XWo%ZOf<`X+jaHTv9deax>I!^)ZcmjcZeYtw$7^Xp&zZ(n1-vQx%a+) zpYbUtjRrx;rJBE?*PN@h75eDQ4l$(BG*@XULNZbM9rO^ADm%JM!_4cn+(uSLC|`j4TPpgGYvi9f%Oqst0=jnh(L(YO5EGf^qcOr;;!-R`G1N&a z#MaqrTfE6|gbAD?kQoTm{F5*StOtj>SU_9M7EUDrPmdtF{m>i@B-oJ5q4@nF7SVgA zQ%^1|443Tl<9IS~omSGWuy_%qCWjppJ@ z*}eSVLdd48ruTksx-i;fsqvQL-YUL$RD%Vl7Hws^Q;iEOQ4ckg?>86q#;I3XC7o#< zv?do%|JPHkrAqa`r~VD;j$0cui&GBUe${j7Zs1+EU?rEeyJ}(CHlN_ya`Hf{9ki&q zSE*)OiJGF{>#%f8B_d|r36$$hVrn+G)0>TEjIZM<_Yqx;dZg>xNYp9$I9T1Y(wG3w z)B+{amk_Ei=PLX>NmFtMb;>X2&ELCJTR2oM;g-fb@@{#{d8eu}jx-Nym0QkL=y}u^ zOhfdVII=f)C7%hO%J8}8XXE9#Jr0yUxm2=2Y6Fd<%k*9jRXVvab~9KYLvCL(@!(R( znVmiHY`v()Cld}w)r)TzO1+$`Vyb~?wa;BX`^GoZm{E^NfEtBADz~p*gBUE9@Yxk2lYL(x0?WVvbMM% zox<;>^mo-3yHuJM!$+yKCM554Ml`dgyl&1gOMys1TJgXiFUBfccC8+aPtc797-xnz zpYg34HTGB$<0A9p;mCdeRujfQE3MT*nLCE&+-+LvEQu2x8?B$&DtT5zZ)2#U$KD5P ziZ3p9TksS+*?TMY%D7zhFQ0%s=Pe)U$R-ZqA~*wBSStG&Br>nRQ0{AwB=rg>pMQ}# zlWWm6_O5bbLLD};Yd!&?mc?aY9po12GUukeu5jT4ZG5u14+BS!%w1H#k{RYoCGJ7L zXllBz#^)-Ll)yznu&a5er3dH_m=TyMw-&j+HlV)+UbMyR?hM3C7#ARb#r*=sUX(2I zGo8OBjlv80l3e*FG990a04YK8wqb8V?QWws0dUK~aYJAYvvpjF!JAB2++^UDNZl`f zOQ(mNR)HAizT@oy%Xp`^UElW*%O5Pq)~Z)(wR@bJ4Rw@K22XwQs>q;wH?k#L*JBAy zLj4_C_53)ALZiqlQ31gE6AC}W?cB$O6>#=*%ht{!g}{FM8LiGbzSBGPr?7JrsoJ5x z9QTI4fg~Hs?I29ueOEQxO??2x*6@hdShYIeadE<_w_InII;GxfH@;CmA?KIjRl!cm zBL}dL5WqSObM9W9)3u%w_h)y6dwtQP?8DT1X;%{Ef!FkXkrgmccF{Z2w9(;4XzYuc zBZUkul!WX*I2m<~Vz^7X)ny5r+PySquR64FJV;P`DXi?HsJx|rliD=poLY~Aoxy6F zpJMR&$6`n9e>)~DD-qv|Od2yHR4Pz}Ed}8m>m{EHZ-fQeKP#?o+qCs?F90aL3lW03tpCuJ+>Z-~1!JrxJ2L$=$I(`C*HRAIQH*HyJmw1$pv#rB zP&iXg$CvI&6-lixu84NO-8QkbnR>#``wi_06>_Q9yMyiN{&80KBv0^l_YtAL)#Y(> zdk_&|_ErsedwlEI?1JzTX|o~bVgDnH2N&R&-k6SQRR@%Gc=Ra;z1-WNqw}w7|FBy2 z3z%yJ`vi1sUhVs!dOZxGo6jdxr8iw-t+)YG=@{AKl6|m3$`i5gmf1o3n>jt2Yd}S?tr|_ z+NSba(bN1R@lBUY*|UDiLHx@J^Et(-7`-Z*E1l9v31n`Ch!_EHfY;DtJM1AzfRGqV(jE*^kbHD!d zP?&;MW2z_8I8(FkD;hZ8py9J6@Blcmw7w$zZYT14_G)KfiuD9BH+({?xU+ENW*fP; z$0mmS9TEje=F2d>CE{JP{{ce5WT`bA{{@761D5l3zu$fJv@kSAX>v*YJ@O~o<8g@a zsDlpf^I?oTV$LBYG-4Yqgnhn4DL)O$$UwhHHWjF;CCH_X8hVSR8H)xe7Wd?{(^1<{ zhxE;_L2&o};iHSDPLT(#;iSNJ^c-K=k3Q9yN((Dixhcz*Jh#olGg<7HeT$_G?s$v; z4Ucw){vUYc@(&(8qJWfE>gLVJ?t~?}@|Cqu{BCVpQFVuj4SR%m{!zXLghh%%_BqH> zjkQKqQbpt9uq%(EA!OXny>Dy2>L6ByzO6O^@zakPM<9+iBI0T@#y&>BMUt4Zp0J53 z^FA{wk9K|Rlhnr>9>PmEOUrRNehH~_{Z2(xi^fUX6F+EHUqKuPP&XA;QMOE;Td?Iwuh6EF)Is>-F{&n1(&G4lXPS;XE# z5CB`AvarEfcAsyYUxl-6svXnkYI}c-q2}U|_D7xAKRGS(0ExNludiKHUwj?a0>~;J zOe?PboL{&uS=#EqhgF%<-LDwj%P9@^mT}+AKk_@k6V91wfiwdPLw!DWKaTXa)~`L7 z>hzmbZNVUXo0uZ=hQ+tAUq1NpuP)Sz+vR;%3SQ#TuO?5N6xP>xpT2PklxedCsh&rU zrk5()n@(inQ0&EPvi&i*Lw5=DWAUHxcj~*&{ez)R@GApm$z(NA3A4@;Yk9a1{>MH6 z-lDAfcTpSPQCu1TWkSYIVdFlvsu_ev7(;KuZzdBB0lLl%R?>87{IWRu62h=6W{|?s zh%>}PRkkVu{8MB2Q#9I_n@9oP|I!T;yEg)pq$NpfJs(;aKUNZ=2(>aqpIBqyM-4V% ztBZ)~x6VcI?a@u`6;B#ZThpt`^A7Iuq>d)o#D6!^5)NQsv)oBqI)VC+4wYYPE4>xg zdxNvScmVr)fQ9LSOOL*0OLbJz8nf-(5ziN9XwDOALzE!G^HDnNCZ#e*P^o8J`PsUt z-r+7cM{2bJb(a%@kBay$%`Z|0w{QD2seO0%jm&}S!PldRK4h>v5qjFywCh`oy*9j0 zxofGeOUA&g+J!*QijQf3RpfHY!S_&UtL5ma4GjGtU4&cR$BXB8oUQc^#5=kyBniF=l6g;P5<2^g3SREKOwRT>j?gXnqe4t>cOta>lg-h z)~hKGf^B?01V)nfFEsDEyx6H~J=7AJqok8|<}5(H=x)?WFKv=$&fS!|`aiQ?Saa@Z zYg<|uqo%nISk3tKAm(gpewTCf($8c!5@w#8J(Te)G#=0fBGSPv>Z)VSFx$^5@Qwsw zqbZA~f-w$TrMO^Kp#{D-`Os(Gq%;w4Fh5l$64pkIb8j(Ac)_b;hI||GjgJ0#)#*a2 zfWj^^KkZ}@o35pbU$Y54t6t92hlrX?1M zAPE9ryA9vBR{iTd(BPw-S&i=rM&ri56JQOPz0kIY^%<%yS_m~-VmEGf_`J5BeSoWs z>pXH#es}V30%aKu{8A7&AzAn)_8xpY1<;-vNOT0nTX!l;oa_ZZ5n;^ZX%B`rRV?m= zkg$U7#$jf9$}2ki$Tarw{mW#=jzTa}&P~pAjaV{7*i_1~nKAo&qO_844=d(9sny~t zh_%pL8aJWC*_UFv@Pvwa(f#CoR!P*FQ1zVbe=w=klDgkkq9cRu!sMraD`rlM0R)k} zdXMPHv(7A^xDj*N%~4V*b=j+cVSmhVN^b;&d_=!Sa41^C>q|3$cVqtrn^L{aXt}O| zNOZ?h?1WObcfo;~&$cJX!_h`F5kHipbk zMD}j)wCKP$$(C8{G8mL#IteNa)NgoNhJ~lMPEoA5z2EXIVDnLt~dS6 zR?+glQ*q_OU?YfijdPH(+)S#H^nTwo|5%0suN{`e6qCtHAZ0|Xy`6lN%eSMt8#wLE zurF^9puWmA)mIaY_YBZen@-*q@RPo~7QNl<)-lQZa9#4;%*05S{X@f(~Q zGn!Hhq}zj^Q4jVjg8LOtkBZgOyTboMmeX+B{_i?>JUj3|buQQbdTDqVBb!bwpQvB0 z_xv^dgjnUsKDYu8}!Na@z`AV|~QP)#p23BWkiNu^;JXIA+4Mkdrjq?gJuhoh*D zM&|?h*YW^y#m-pshn8wi-!E2;7yaa*uG_A5_Rkbsqew4VqILE*ZHt%CO$HDOzh1uMn8MPH82gBw&vzU+H2kR(aUgCy;q_uCYQ&f%@555E_*ihKCyLhJUQMYZY^jc6H|*T4fjWSb_&maT6rAe@K+Dfjc1E%xn~G)q3of5y%G@pF->BDHE8tr{pWjFn<5mLRC%v=pOa)t!2f(5~-r)VbzEc zaJN)CSHgA9>p`$L1EASt()%Nsf zk=RLD9Cvul!?9&w?HHy6at?Q9$32ONmg_$!5#-}bwjcvWd*0uO;$Y)?4KEh#1R zTXX7@O~q9ePk+|GJb*(rfPr9byz?d&!IpgFJIR$>i=k0G$iMOe<4$I%SW}++FKvr0 zy6Zb@`vU88XBEOydvsZiICiuu_`_(f4;UyTrQMAl1g2QS?VRYeRL~>EL?f2}a+)%xASWXdP8EpQF`Q%NJ91c1bnaE9mt3 zNIPb1rRW=g$+&w8U>)*nD%2M>EuTezIVe&(PlH`tJlX+7>zfRl4_D4@iB-wnMG3R8 zig@VReSWBj7ZFmQAeAmQkp!t)f4z3|7_HSn>{=5!pj)W{y>tZ^?~m4rg%BUAA-oVk zN@jMH!T(bU%buD<&a}TYk~0a(%v&5c@@+WDE5ev*{$R5fFlEx5W1$Zi&u{HEt85Wt zzc6u+&Aap`w33?t^LW({s%cflJ1q0tj7XKrNN}qJ1(S6}OHFLrh%#|XW!gWfjXfxDPO{rLc z1g~GU#dUy7TuaATNBwO#3CZ12?h5Kh^bq1MKDBxI45X-(r+>HbM*<*o1{%G7kxIK*nOwVC>A}H4DFRV z!qFI9Spt{neb4b=Cb3>i`lWj+EYx;10`qKVil`w+YmRBR4u9Ps1l3g)R@(Mv&gdl5 zKeZL>KgXa)8DzLDeMzynlg+Tz$J_rf_%V&D0ee7o>cqkAs)isYb`aL}K@P|!wv9;2 z$pN@Tr*@1@-=QYlx5|VtS)4NQz>9%(iH8;xroBbHVL!q2%^$NGoEliV)CJO54|=9f zrIGYWGY8!IH^{=L$m+Uo6R9j+&7H!=io3lLsL?4cS4N>@Wu>FbDp(o6BmYX4K?I@g z0jX^-Ff9dRwK*Cia2@}e6+j7)M4)K?Q4Lo7yfQ~RJ&=kpQFHO~!ezo&Lsh0y$(MMJ z7fy=t`0GuRHv0H44`xo9F9|9U0B0Vf0s2{T>KOP!28=oGG_jN78MyC|83s5G(h-=P zb*lsZIuP?`Q4)7jsq6L}ue$nabZ)=20m-`XY98`+G>@+7Jx5oChSLOQgnRCQh(#~Y z^-v!_HSYi4bVK!Qpnz(Q?`llH;iI)_W3$tWZID{jkO6bIW153Ozy^>A77h0C`i9T} zSBI?yD!GFZ%kK7Hb(B*{lU%_0kv-~1f|GZ9A~pgmU;-~GMkhp**|bAN74Sf}`V88^ zj16hFE%C+rtPPzJTYSs>1GWxU{=l?fgseW#?VkZs$ZFvA;>4 zW_DHh?o{XWsw@Y#G!?Jz-^@pDd3@U;g#?Bi6(suer~jtQm%#sSd~#pJN0#Ow`0bmN zz>jaR|I_)z#^U$?)BU6_PJb2yAd&d|dPCK^EDA>@f-V%*1W!>kHKlObb=INL$1lFt zA^a|-BLdnNBBnJ~_J;Tbb(OH*UTntr?R$74rF$(EOs2$?XVDu6-v+soN2!NjxD$p1 zOoahWhKhl5oKr$PenG}2r1zA@+aIA)Ju76-U5^yhRm*OA=5UB*#f=0l07k4ac6IF6 zq|N^95+#@TD}4TzrX|Ym$w**KfNK}j$H~+uWcmB4|7b(xkH@q>fwht?2igOjf5c2F zIqlaFaKZh;IX!gPPI}uKEb`!`l%dk(q?E-=>1EUNYZY|k+{TgButpWgv81IH1b;IV z&6U>9Ll3X|_iKZM_0iP60H&II1{N~sAmn~(QW+Y53VGlb)s>gSXc0I#PaURvTGj%O z{^ij|cbl`6Z%SpzwMU2Rfd(2Y^Cnrtr;}&ZVR>oA?gohSHA#To~~x2vWa zp@WeNnTQfsJy|h*G4lLOEajTxH$-_4!Q;xpoiUl{b{_S^fLrXc_iam!PHk?=GPI@C z2mwv(k-NwY@Ga=jDTQUnEpn`r?ct!RWRZki^us%m zhwzEwUtVz!q-xdt%PcKSlCqGx$B&n$Yw^i0#$@m z60yjI5;WMc7QC;F;^m*=mvv&gs=mcQ=2;KJ=dV7(bCNhhfHEw+d7o&FR%>9i)}>&B z?p8u{3l5ec1N=hM1fMnxR4kysW;<7>AkKWw^^iQSvoiUyy+cX$#<}9Y!=88Nw-8P` z6LAZ7q&(_0!yB0$VXgYCHNq&cJq=5jZO_rD!MjZG!pG;k#jx4=HP^P3L$CLB`}hEs zaOm?nQ+@s40~89OYa$L)p41>D-8!>AUZw{%WCgQ=Ja8AtKTTru;|Azw_nWadX?hM$80@ z-T9Inf0AK61!sE(Qt9q*WT|GF*G*$(cIv&GWc<7!fVt~nvVsCXkkEQ@e)GG870QC} za(Br)=hf}ErmbNXna{da@)0p0tR?c3G$VMU3*)?}AIHKu8gdp*MBb?S_KA8j=ZGdc zykP}})N!ytD6LyE>|%m)tt1eGq#w+?I zI9}-vaBvc4vYlzheWh&^h_)T=yLP!E&P-?+O;;Ny{yqFc?3;lS8u9VBLngt z8)f*J*3oUs1@?u$$mfb>pEXSZb1OLES14$WjUm_= z#gmGbBW^^A`@69>(`7c}j5NWG14f@Ey(C1DnoyD1vmB8PYUKng#DN`Z&=HMvEU6st zQJjQ}{I?%jv1V9mj8V&IlWfmGm)aUQ5+pg3xI#wzsa8sNIFfcomapxCx+h9GW z88l3WVzh?x&+Tw^bQ|Qe=_|tOc&12}xZgiW`@>LKz!*O%W(k~~O4u&VfPlT$ z5X}np)y!5X)$O@2+QE^7UFuN4z;SiLex7gLGn~PurT@s zU6wS8_1X!m?>d^Y5HN`a_qr3C`)e!iUz&|ELB6qWu}pj}-D@PkXgBCc13_Cm!&QFE zfI2S2nD<^Sm?VpLR%M@wz9$QyqKjS#4aXeM?LEOgRqS{eC=@O2**V}z^oZL2WK5Ou zK4*(^B!SiH^LFApsyK;{KI8jxvj|oDg*YLj#Zcvg9h?Ty}B&hh%15oI5 zdj#;?OnldHeOOl~{{qOIU9abJR{3{I1+w~s56FaZZIs+rZ6zj6<$ahzz~&oMGFitL zF%nat+T%d9lzn;7SVvM&QgG|Bz}O-(^K9eVnILFy3+b#%50Q4Pp-COdQ3-!m3R!-C zz4i~&G@2!@n4^+XKs*RrKDhelT^(FUjzGw`z{PBJ@OLN$JLdv-; zq7gtAx_bXzs;{=>UB%&x9RF2l@E|ZB;P#$8!l;e_Mb zPvqG%@!K@7r(sH{iS2F5_t6Fax(YDng(&T^#-2#OmwvNmS`~ChyjP(STwoz)&q7Lt z10Man7Z$}lfVI~M^H0Tnv|Fn))f*-qYv%0pC7i^xT)yNzf4n@0J+Hvj8gYiwbAyGB z|Ee`-3;uoa@=LJ7>R@nJ6$)FgkOy4VpB}dPH8-N7jT7YL@6H*2tIdJ*xA5^TbUDLw z5?rCTP;#b+xcrKST}!v4df-FjYj^Q468viZj8qEPA=0lmP6G2<^#t^}%GEuy1P_TI zjwcHTEjhS3#$}5&#yLV`qaV4yr7@bD2HwTu_bat0B=+UZ*V|#Lr`_~nJ8wZ!7i%Zs zwaRdosyI&M-wAasxs3k?r*HGIAA{P?$3m1td^n1Kx$VOh=l7}q6Ryd8@{xS?s@!9i z4mUBj+KG;TH~wb1A49Q2P=LvkEJ^s0k5PzaDxProbcFR1=aiBT5Khp*C_&^aC5g=J zoExrRL;v+dMMqLh!d4TcRc94~6F5dnqrWDpYb4ac`zbOWe|u(VAftq@a<==YjP&SQ zCKE?PN2U)6=dXxn*9QO|;Ui|=#GotDk5|*=7@$NycY>Of@($$;YJPAn050Bs72(K$^IIkQ-pD88)GI1(Qr%XmMs~arO0i1UyMC zFkq(pl2->2;>Llw<0BN8aGoY=q#|`qEK;D->$CP*!om4ek#Y#4!^ z(HDtM#Ako0xs9TD4Di)eIVxnFH9B@(z4X{W6Teh!;l|mmo6Z~XTVrPAr7}x$Xc;vs z^x|g?m@7XhP6G7Y$e|BELfR09)$YV)w`^51G&cn;=h3S(@kJSp=8Q$Sk8x5N3)RAP zcV)697AZy4Y}C@6XHqhD4N@;zc`_YQ3Qn|XwP&9&w-jJF2~fPk#xrwiR+8484*Y0X z1nd`X7RI-^(ks+&FnMan`cN$8w^Z=KzKHF(yp8IZ*a4=mg1V4>+_hSU!UAY6M{~sc zQop^;ZfGg=s~RGuX%1UBbx6lVIqJ245njJl<2P;35stYope)ZrA5Ex3<~Km96*}$k z2OTJ;GI-L~;Tg?Gmn;veLeTM?znx-5dku6?x5MiN(4A5pv1Y8py=+#*#m7gc?sl>e z^hAcJeh0ic5{;CT>ew7lcI){=P&xpT;clq74VUG-I?QouAj7$zvQ>Ml4c18R?)noDkts z*ez>ad+`J4TQSh$O|jN~j`gC8W(=BM`%h2q`vA243WI4xF&HBZBUczk#XH{W}*6*J><Vf3816aa-mX2)!Ux-zdg2eG5M??aVd-L+dRYlD*nL2Au#)kK5r$UvZ;TnoDL#{-EH z&QRR$Zj4zI>}tzsrBDrwF?CfdsQy^w8w(iNJNOTfafVcHs5H8iL|lDc)4u}#dw`IS zaQ0!bTlNS_-ZScN$N@oq$dBdQxxGxE@Sz@V>x7egySc|NRFQo?a^bPy z-;mOZJn5`8f@`zf)7`E<{cYm^qVqvr>M<5Jps(@AO`LpOjGOn8RSV|HB8WgHo5eFR z8jZ8O5v2El+Ugtf8Ifk0&jAFAYv56{&(kEyJAtlV$q>Ri?Zo^#(LCn>>I7YzYF6FN z;qaL1yS48r7p0gOj6@PqGsGTXfn`Vkr;;mG2VcO!lURSeUpM1jkSqq>v^GU95L49^ zTZxlcVDv!?<;vXo`?A8H=MvIQ;oHj8zr9+w z7VHTQg35xrxs1sKIENwBDk&x0-pQs3JNCeyMX0yPIeS4Q45a~`i?a0|ix*nYMLwLfjR0;SR{hGebV;d3e2rtyWl7TN zdZ6_gIx$9(==y#jho%fKO5BOkpsmc&bQUC9Z*JVJPVBo2(1LV^OIw zRI$eH6cNHaHc8jEKH&u;;?;D@#>8!?S{2TwhnZD{Rpl|xzqyiWNWKx+$V>03+r)e5 z-yI3@2d&P&4AV^Zn{)*RT(Ep4lCo95Q%Y3oZ1ME-x7oCSywJam`#@CV{?aad#m+Mx zzx+w!6f2&5f{DfS$dFZ}4u4F#Kcfgz?vR-7Odn`AqM4OX{T#xMMu_z`Hnl3$eywP0 z*Zj=Awp!Lzrq!fvSqC*bwL+1m;Mn;yntv)tGDl5&56T`KKOvUgdx-tC1o_kS(UXXrWPLABIOZvaCP|$Qkmtjk9Ap^$dLlUF_lPu0C{pZ3a5phB z8;t8vX}I%{3%9REsAe|`-#AI`Yti<}26QUssMqXU50THfDjHA+Oo*z%GH0MCa!2nv zs6~eC`z}$H^#HS(VvKM5Wz^Rg8+&Vr7nWrBPGJX}>P}hxbM%cR*LJp%Szi5zvHU~- z{@-$|@H+EZGu;NoSp4M=>DLH?RHR|1m>S4^a!gr^sfD58HLzghHQ2;8TU=q5$8JJM ztU%Xa&J?iuNR{_aXaZ%S zuslPnGm1Y^KgnZE7ile7%9AmGDcou zaP+yBKfC)Mti*etow-V<-Fs;_?4?+&irZO0dacqc=KVIr*V2zaL>aOZ56J5UIJcY7 z;YOsN&;c<@Iq*KG@GVYbGpw2{gYIc6N!EUbY5(XUD0Z2s#&Jx8LGpExbOKqKvb(1? z!em?=Iy2bJxan`HfhzEA<)j?Rx8U`%`kDS2DyT*-@FMIisfe*VlUJ!$=VL;}HZ?c0 zpWK8QH8L~-)bN!4Ljk#?wP0g5b#na1^E0?eEI{_6>Bx}3zK>&Rj{b41oBdbikec$h zg?b(fw>E3ub3y-uQJV8_V6H=c%_wr1 z2{%#l2Y8}*!fit{4J2V~rB>Wp&pPF__LW68$04|Y=!wS7*h%U#CTPAJ_E}yvMEEAO zCIItE)1(vAyI6GU?Fl+e*q2nRoBX2oyOIZ@;wutK8SW}+th9{^tVDF7O}g+sf!7uG z#HHfx4x6ADeu0#V-@)*N5{KA8Sg|zjFKh98$Ze&SaoLXLqhVb1R#`>}FO=qQ5z!&m z4p4G5`l%e7x&wBG?D%a`O0sZ0-p5;6&jF*w4UnDjUqeh_TEElmy<8utAREW7!ggS4 zZ-n=xupSe@zq9j$I7k{BygMn5%|Kg>5R7)p`itSYNnn=sqG|*-a|EFWDG}IK)=1LA zrIVFGoQjv+mHlZ1jY*lsWcTG-C9eIQ%axh@S1dQW5LQiWk-XFFS0^ef4v9lnhX+vS z|B$2!^;F;-C@W|)E*`CMl~Ef{0vY~K-9kDwgRBW>@-jQca4_?aRAJgkj_Ac`ylVY) z^S^5U6&I7GUvr%!SQ3!X9ySzEy?k#`NFKjKy0X=KgPIYojB=wu2KCfzEi>ZH;A*z< z8&yt_7<>EvohV%bV>yvFln)|LE(TcmLb&@b^FvrHULU-VCg05BC*_`~g9l4o^7lb* zA>K?`({%M`3b^^Yu6Vym=VN)`QKH#AZ957U6>4|Q#LMfNE{i0nZW^wm)u*7IRH#zQ8WEkM2n6i`wE4T$9r3AcF$!rizXIuq=)%7E&k05XD^94Tgy`)ZCaQ;_;$JE8Ak3EuG=Utb81Z8A3 zVCJm#xqQt{)As&kDI(!F2mpW?Rs-|JC+Wo##_!I!+h0<6yQ0R`L@=kWZA1L_6N`MO zU^__mvx_io9poena8Q0enC&Ki&Kt0uQ0r$*eR$wvTEXxP^XUzRf#5BUl zQt29uhx5Dhyw}TaqEoxJ0GCB@@Flz+Zc7wKy(~o!6IuA{WuY7omy>*3dqP{F$~E)( z9OD;E}eI6gFR>tJ-u!i zvkUIPaKF4#6c53@22sUdW(R&{=Zy&XqUZ!C&9HWPpiE}r+k;C@m`(f+Wsv*zj`z_& zc%XUggW#6Ys~BLo#+Pg1hM81wn;Ka?=kRAhP--UcKJ`JV9*CL9r|RSptB_CA0~WLc z2-f&cEi1Lq9)91=js-|XuvL09;q8?U_!#|lLCvF1LSXn><8wP9xaSE`2Pqb{S*=xx z)PKGybQl_`=?cB7#^yg8oC1F*ZSQAnALy6bQr;pwu%kW=0yvYQjKF{m+ii-0hXko|i3L!ky>JcF+b~`5X#^m;xlga5DdzRhE^GP( zw2_JNA`vG`rCft9ecp-Eg(~Lxs1H z2z=w;RrAeSXLA!LQ0@Fatrx!eoYY0#8jkpY4)PahO2h)CW)wu~Q)OeoW>6ABioY34 zLanI>ni+q%4HnbTipozr82O-ezR^co-dr%^>c3yeSCi~wyf$qqEYEj&#CYJ~oQcm% z-^yjo<&zs~o?!6KTYsf13@@4-?0>HWT@)N)B*Z7JpiRkLs9ewzN)-6=)Q;}e?AYiJiflCXd&T1NX6r;JC4n!-Pl5-`!Y(YL2of!|Amwl(m zd?bv&?mH{_8o#j>!V2Zpq|F8Ez04uA>zG2C^N+1B*W& z5O>!M-)zQu!zb{veD&?f!(=7$;w9+(K1IPM*mxdHdJw_yP zdHf_OAT--60f_ky<+8^aZEGlu(7H=R~pH0g1^-=s~&vdTwsiPZA^40_bCi#V z^11GMsFaV99W7A)Av?CVaqA9unjcsdUd!#*3n;j@GA#eJ)(DcP5JeR3>0n&~s`*aJ zB^`y!5WQsAvF~rWTux8uvudl1#CB!ZlGR(IADcE^+uv4F4eQ)e$dHGt(E|Z+TBRZn zE#x6$vUq2!9(sof1@2NvP{D&FCphq8o?ZjjbjL@Q8_aZFV|op*zZBDm-Jom%J?Bh` z1f>TChnl5n!U#VS!CM(yt#eHQTBL$^fRGT-G?4b!JjYAJz$uH7R=(Sqw0Gsqd>tJRx`GI-Z|T>1Fm({38>6>x4Opjt*Mf zm<%1=flfB`^9;p?psy1rlp>0!=Q%6l44ms;+2f6hUO|K0=T7l3UvL0uNAMkM8MmpB za?S4(M+;KlpuWUjrEmB(P9gW2O%e`b_(qni5B*p4;)73tP1W`YUA(%KkgW2{bJ{y zE_p&QcI15km75$^i&+mq{Sn6br2BswJI|n|yKakzUZMdDkq{!G2^v5^X+oqIMM?l6 z^xm7G6hrw77&;Q^ReDD{h@cNrLz7}8gepy%fCADLF3;R~XWskmemFDx>~qd<&gV62 z_R8xeQBP>yLuCFc&6{?H^7cNBl>J`vQ-AUO&3XmFILp~$MQ1wh23trT0?fFXrszbh z;BIKak1#7Z2@;;9r@7~ebDlnU6`)}9JjfwL0$k}%i#26{z=`i*SoRoUNQM|vh(@a5 zrqw$5w94l3jTAzY@l9=sdN45HY{1T^PGN$DT-MG0Db9RXEb8 z0$ah1?nOG+N~-v3zrzGOl|$msnLFc)@{Gat{;J64eSQ{+1w!1I0w3IeE-JH%mQl9l zg0C5Ty35WuZVs-k4?D`!BGctFwmjnWBVmhG|M6uw%2>RU(yXn%bPf1L6tS{dKr}>0 zIdkCbFVeUg$UViOt&8xsBwFi>QkruvbnZ;|c?p7G9vkIPZ?J-iDcYZC$kl;4Z_`+L zkPNc!pyfUmgcY@?3rsG^iIa$ z{OddHt1zvZO85IwSr@eSlL?tQtNaMB6T{bPBU?JHQ@?bewvFsRNJQ+r5K)g`u(nXT zMEz>k%dzKjk0DqL-b*biboN90bqQUaY2|ZeY<-}g-KawhAZgk#k^dR$-sH4PKf3Ir zV9F##^V=_oavYa0+{%m@3Ng7|hjFbUxVAfhCFSo@Dnok+tt1~IVVe(LUD$>8a+b?< z+QAy7{^Nv&3#&L~-P&#?VIHST?Iod%CK?-XqKYt2vuq@?mQe-SMtfDTK#1e8Vf0gG zI{{sUwh03yRy-gZa8EE~OHSG;*1eD#FGgitJpYpW>F#;X2qsfDW`j1yCel`s)2-@b zAH7Rzr(%482wf7l1Wpfj`3s6s-x&!fmiCIX-G`3{z7+8lP~Xr*fC04g;lRzHxJCE^ zj^3hRQ+T|TBr=U$^|0%}G%2B>y?kx)i%dE6rBA$kw_Mk(uy8)tGG zm+E#>+LrRAvw8De6s*T<9W0&kSZ~(c zxB=sMrgtiT6~z(5R(5u?Nve*HbR)?cRsr|{PgKvP(L-v3z}FQEV60d1pCO2Dvbpt3 zgJL`bwIQ#(Rf0v?SY?Fw$n7J8?wDIX&fqHDya6)aY*NnH#umB zx`oQo^l_&iAymaP4|#}(64O5ev%Q8bA9MQf0n_4U3qhmYC-%hh&ilhBFBn>BUueI| z9ec$3Vaw+Q)vAsey&QB$M`!Xx;mkSh{>J;at8dAoYx4Qdam(cyzR~+)02Fg<{^VEd zR{Kw=6SX`c|A*}i4Hk8Q%pCTS?|s{{*uMXMgG78^(Z0XrXp!CJ{di6zD)u3PsIt!Z z1m$3}IZyTnLoPcb@}CWvgTk7G>D7D2P3XEK^(TAx}&jWIjYon2}w zM>aX3A0LtRllKhvK8P+7C6g4SrCx{-zWt#7bYSq8USwmBgGpU`VsFy<;|{`aUF8@S zY)X72Oa0aO3Kg`u?o+bQV8a#UNaje+=|+4oH-ycHbCpBQ1HlY1(_1QKos~~3n6fm{ z8~J7zcfXYUzMPfhjfP;zf@#>uUL_S7WIo&BFmyW2b2ef5x5IDD;7QVwm9^Ckb}<(( zu1ct!r=y0`&jKxaFEu};THZe&u2ppf=EE_$ji2Sp<0p6Dn-7P{M5ztr+f`#fHqCSk z`gRrbI*N?M(&zzD#?PC20rkF!pFgNgr70Hk1sUanZXGoH4;iN7SyHZk?Lr~fu1j9f zj)lPKC8R_f$-hmr$$qCU{0)JP;bRiVQ%#JY_gOi>y;y}FYH?GL9ba`;+g<{KVS;}< z6W@&^cjNSQ-@MI~Z#W!Uwlp-6BQD735Ig4UY261!3V|P}8QJRjZ@j6y7h?wGFlG*Z zGoDZSWd4yrN^EcPuBE!Mjv=Qe$cnL#0Qg)o$B&QCayaUKNc~pYww0S~m}sXSzR|P>ofjnIIDZ{{fNdsrpbtU=D&wlmJ6?-kwhfemZZrOP zxVWaEK?bB#yI;Q%d&OtoQ{2WB2C=w9I@&dCI-sOb@DrL110C1x7 zP{KWM($+XtOk@RDpslf+uV-+KH<+Va5*Be+fo#FMN0-JWPFcHa43T#~T9~LdxNJda zn*(N5yK?Kl<+j#aw+R*M?20A81@v>fBE&Qt;)30YtEr8~yW*Ir1UA&xW=SU+P~In8@qCRPA`iN}ZphgArx{!F?_ckl4a3slzV)Je zfe7gx;>#dW^YGXttgD76T#9EBA0ZKSP;tQzj^Q|l@P#S2fMBimcdq#%>Yp_wNl z^VfgI897xiD^kqI?!J+*cGRL6U-6X%EO#jVJ)xe|bLor$e2;BUp{b(Z`%)*Qo85x9 zv;D7~=6VkLZLl4_${Y;qOy6V7REv@U(t}`6xy&Y9BJYcf+iWJHTVmsa&2vr`k=z!$ zk(r|ttkWec?rbq$xbSTtvZ<%E2mqJ=(l?>uG77K&*%0%kGm z-uG!>XalZ#%aH+GlQ=h8ijopN&~NT(EH--6M%lZ|@N2E!n#hBq))Q&pyRX!@+0~CP zg`B+ZWyR}eX+Ef}5<=YwFb>>I;F-A+pqVKy-Fi}!vL+1hvbZL`of+&jL8X}1nz=U; z9_&bEIXd?Z_MB#2D;}(GuydfX2ecmbYgv3A|I$lwOl@Vt=RTi{k1MCQy<|Ifp)w-` zf72KHITz!)#gS2K&h~O_81}9@*ox~A?dW8s{siRB=z2ir*;xB#3cg3f$QGS!Y>L;N32{Q%56(?2C`5~FV zbxPH2I3sx}#}AlOxJeK1cB~;mL`VZ{(H1mrf30T4Eg8r6M?m=NeBUh6`2b~sf1RNl z9#aT_iTXmY3a00!q->woOEbe*X4u?sRyYU#O48094X-NvxxNNuX(@&pExhYAyXZd> zl2mX=XO!oFK@R}54!pj_GVO8srH*b7f5<1Ws0=biKs0KxK*fli3*TZEpcxB z?HDMyVSY#v81z@d#L+EOP1$?w)#*Mj5S&tELM51n#qxD?bDq>)vwhbcOQ2=ma z)O7-7Vk3#Cdf^HC@w`~J^X-M$ZHlG(>sq<*saTpq@6|tl;?EfVk0~;d{S6mGSgxkS z`KrJF#ufz$&1=Ax7Lls1*nvQprNrt!Zs6Z@AAc~2igu3*1fsnP0)ccjsi?2h{97@C z{(W)ot^6-*CHr|F1UkP9Dhzpi&at~AY>yN9kI|A2MDzb3j;HJAEYX2L`E2|k5EJOX qkr#{pgS376^s&MJ@)Do*-=n@;kyz8OMZM6Nc-DWHK6T{ZZ~PB@4NVk4w6$6Ovg!@XXMeNN91;L@_R7IZXc}7Q87i~Av;9rw44H~!oz1z(u>C2v2W!8}x8tsZ@bi9!d z?Xr)?5mrCeMhxxnX+U4RMfUw}7-o(EYMFihLH_uIWPd?)+7b}y_4b4%vG592&Ylkv~Eeq(PC zJPS^}Nt8DNx+1qedMSya!(Zq!bOveQsEM5M9Evc$cJE-L0acDNuPUz zp*EBcyni6A^?||1XWiWvS+ql6b$Ax!znsT!V1z-M&z=R@APvVb^+wPlALtNN&kWL{ zY$JveE#hMnxQGC9-o>pTo{WOjJBflm$~XH&Ykbxzkl=V+vo4! z-`Oc$8d%bYyaB8X^|t8t-g?LqKf(@#34GtfoV%TFXHVq#9DX=G$a}U&o_pDhybUH9 zLW3L(y)-AU!jsfXXQC3{$E-Qn%|fWyJA1jQg1xu^}O6;zp{^KD(PeRY3rL?$Gp>FG784t8J+kr&&U0p9Xfv` zRbpU_#IZ43bgofK=bEB+8jO=H#2p6p5o>UF_sP~-$c8*gqdx09gU%s!I63JIlF<%r zItl{OI3F0+gH`9PpG?j&-tLkO?Sxr234b!JEgTrmkwcrOo`zAN)+EgGojZ4S?sR_7 zIBe5_Oi*CubQK!I{1CdGVgZrsg>hNl@0lM&;m4F>BKF2+Jqly3&?FvzIGbC76K=X_ z6gVRvfYaG2R$z$1w!;=JV+>1yhoQTG_Q@oSu*s44fg$D?wrG&$dJ_N6J%HG68UwR!f5{$lF2uu{ioPiK59^v`ov>Lid2Q-F23s&}Kz?K&)Iv;=~Wy z&}kBVWB}{!cXm6Be8J8G+KY(~I(wqNSQ6PTn*d#7Ok#vqB#kg>7t>gE)_*xG*Mr%y zHU%!x{-Jx8jJSs>`<)*I4D!Uw@;2>@7w(ESCTCH2I)gl#v4^cQpnOcuGfe7s?!&-z z1S(*UzsG?707k0{j)Nd|pjt^`Z}0)Y^S6v1Em#iEranEP=xErX)K{kyrfLULUq78N zkDohzbpTuVB!Bef;ee^^5a`RpfG&h2?R|~Rw0lDU51Y;4K*mYM}XZSoTnk2YeOu<1_(i%8bm;A0^|m_PPF=XUa$hw!+{qC z@^fZ>4w5KI%_K_9LeBrtF%S}Xh-3yU*1@z_z)X6$Zdk~lq#nc4E+%}IEyCe6_VU3H z+B2IF8I7&MB+HZ0-+#Sm61+};5&s3Yz*dVC( z1#FszBC+URq&55&`P~=^3df!IgGrhKMMBBCVWvFN3lltGfG*&8TY54DH>U$)5)ah} z4l68R0F~v&Nrcj~(J4r%dTo0^VWX>Ob66@+=S_3Wyng^9TnL$Z-Omc>24H_3gNPNt zouwo#~>m<*)WpFoB)#sG!CREIEJ&%7K#G{FK_U( zt=a6LfPcGa^BnodIs^j5CZH(Z7>{pgcMG-=Yfv=YqMD6nXB4DBytMHYr-zi9YIB|f8sxu3E-(iPiq;$Gh&9!w#}M*3z43I*#-VALH!M(Q`3xG}QX_;jHVsCA zIr1#ysQB4pdVV8xKyc3IfSPcu9?~Bs1EldZSokw}{}C7&rQ@M@E_q!mJp2CGi`7tY&PnQ%NAodhYLuBg~0 z?cUj$%Mnw!Wp3BcF73*TB!3M* zC2{UWYwK6ErdHIj)S8v6qFGUE?Ks80x^AVGDr>3ol1h~+bW$c&&Ji5-DS$? z^6lsl&{tX2)rIAg%~WTTU(f|zes;WG#pyA$ zS#5r-E}xHVsQL_Vq*PBQomHCelQi{ae6sX6Nls~}6KG(9y#C2-1rTIwOh417o-Hx$ zTK{&H^=~&_6-9pgt!yc4ZB(s|x(wPV%?&(f4$j1N7( zp(~O?7xZ_ZY)K#YE%L2&gg=~(PLc?H8Pg;7yF>fPlk^x(@9ELjU;ipnwwN4>OGg{U zW(@EI(gGjLU!nXpk-t22dOen(r||i0SAHh=*^^j5Q+zD;j7Iwg&M{{qQVKk9987cI zEh%sT6c0%dWdS*b!?W>_e1F@(_8YitA*+(3;0-cu6X)IVI^#(;Yy_Mqh6UuAsXaNgM;%qWTx4OW8X_hsL#Yrr(-v(LUVD9-uKz9e6K$~*W~$|;IqX;A2czTC4wh^kKJ2D! zSm3wTm`OPh6Lr!8cz=uKi^SwxPL%*)w17cZM6Mhb8}VtHj9B;f80RcY(jucUeig*p zn7>Voy`oJcp+o~U0%3f%H3#UbS*bJDZrqI1Bu}u(PM#dnwiu~NKnBL$)41OPHmRxT zC+n8grcg^dnkKnP+cuIqsCl*PzxKvk2vPnCC;OHQgh`>}Co|%ZqSbf)yYaaHYxu{@ zW}L&X`+xNA{js;(gr5hIHyQ_i^D%Ah`<)K@+Bf2P*l7T&h?AiW6@LY^6go3X>V->J z7ti2y7mvZa8 zk~X$p#&Dj5KJkF{7>#qPW2LnSw9^)Q3}pE%_u@g&`LFmTFuEyf{GsScKtz!it>7^s zk>X26Mw1MAv5x^9rGJI32E!T!KxzEWR$&PWbac5H_yI%5Ng7=IG#qBRzoV&aumPi- zY^XNLU2~J1SZRmkei;mMZ`mbSA9oLo68*As*lWQVEH&&CoPj8fFnaIreUCSVs28e* zFEm+rNBaq0dT2D8nv<-mjKtDn^HgSw?CP~BoBWzyGt(M4>VF;=%6L<&OivlI=nX-k zSG0V(z3E(^?%HNq+blJkWf22v%jFfcTuLKX*S2XD?>6Yx&QyH#5L$ zC#BP)H?Yk%C*2{7b%Vk+*5F&9~9tb!pPWIbnrNX$xpnF9u!Hyi?bWK88={)w3+_1BzPg5HS+#{$ zO}L58xvG6NH9DdYNau9r+!yXMx~Qp6#&}W#<#2<^R%#q-D1K<>%(|%Lw-bA=#MoIh zw#(uG9Ffp`W#<(C@PyDr9V?f@;AMV0Bc7qM0~|dM$bY#9YZ_8L`dLE!*&gT01Mr{=x$J!UwGoqdh*Wt-v5M-Iqk}0hi0Y5CcXp2Y6r1Vb8_plMqVmvC^C$K6J5Em>u3VolhDxWGg z*Y@JUFrg#@`rF#T8e^*sN&{p-J``%(sek;O@lQSsPFEq3|59rKbhVABfCwXK>^9lb z!rqmLON{(iVNBTd1kRJtY8CnGHCSt%t6q-pSe2z_nmW9c!CJWVY&AE4Ej>|Qui`y^ zdFHP$N8<#L4OO2Z<&~C4QC5x8iiOjoyKuGHDb|M&(adt90kTR<&+f&$*RLd_MSq|6 zXat?J4!KP^uG`H@(g9=ARum4PvL+d@rm9c;N1#%S1z8$%e+;2261&Cgs_~mE%u>|m zbJ7~CKF>pXaxOPXW~Frp60vcCkw!+4Clx3%JIPIW(EeJyt%|TY(pZ9)E=mZ4gDE|{ z*MpUqg2#KE($`vqT8nUlv)^xs%!WqApx#EmF9aY*{t@` z4oPg4ihKJjIU!l%d3|MSK_|7pfIdBr&2wD_7(IOCRFuL%(n{}#NYdoIbwX)bLpM*N z=M`Egn@kQ^d>so4>n(Erx3Lw&kO4%T1~fEX3o<;79?*{SVVDP|_CWn?Du2QzewdmS z0mAuS6|~SM?v}CM=Ar>VNmhDpp?r_?524g4=s&n#S$A1l+oghydScr9H#T5~8k-_7 z)!jJcn|zB^iL5MrcSe#Ac{6OECGPO$Pda7g&=qixI9GI&WbTX_u zt-X?BW}wxtZ;h>|i(#-7Drn`caxu5b^p$j+XFHweb$_aJ>$An>b;;cr z;EV8VNM0r9bfiXrqaox#22Iz&qNg+G_M&rmKEx{2&smqzv1&U?&fC=GV1cOaRL@v9 zc4$uvA4W90HFY<%g^j)~xNtsnm5+=Z5EA+-9tmm;o7SDDnHEz7=hM`)Key~VSIaa9 zkTF|3ZkEBD&j1&;1b^Xwfh8aZbZb1dB4*(>p*c@IGhDin(O?v$fK+&+1vNl4*T5>Q z-ln^;UEyj?6|};>7G9~bx;1at%nLtL3_wFy2=R;940FiP(?mnp&-Qjd^k6?er+ zvx;D}w1;zAIO^IF%G5=hLRl+d+Cdtis=&i#E69kLdPu=AUr$g;9)?kx{%jsY71hZy zLh!{1ZE9?murk3zhh6y8r<7p&fw+;1wM`YR%9hs~*-~ks(F&E{I92Lbtw~cspygcT zom5|kqJMc?RJcewBQNb1WLfLdrm+Ah^^s=)KzFP^w7bzaIUxGNu zpIYnX1aC1VDZS=x5t^Qr?t9sgz6wRdzqNX@p5~F+*>?c%LaC~_go}YEi&4Pbu(b7B z8h`yf9OFg6asrxRzD+@8Vv&T>EJ0uj0aI!2K{BBsWxFMWRq@&Dkyh+*L}STXS5$z~ z>7B^%wFS%Gh(?($UT|4l+n8u!Mz9##lW_$Ay^II2RxIvr1IN(Dc_6V>%^Ee$N9XA4 za*y<~?3Fo-xT=+6QA!(D-*-p|h@JcxPJe-lbj|7M5kr?ad<^7p0kIs0s;UcgS}uJ; zb<4OE@Y#WcLU(2{vkH?MO);vYZc7`>ag+1%`uGcBmenm3H8Sf2EQa)5?hs6J;Me=w zY#O2Iwov7WqqW89QaILVZq*Y_BMPNQn(FR3(s!}0>@1mkit(XXrY~99(M@KwPJjE; zCs)PgX5L}N`X~&VH@orkXt%XH|2$&jS>=`l!z6V@0*)A(QoIJiZSlJ_APMs#D8R#M zLtzA7s09j##z!7*o$CzDJ&9QPDmcv>lHJp{8O2#D)9H<9qh>!!j5u%U9=-@uhej<{ zkDsBdp9nFVtf~-yi|qVGOjxYeiht8JG;4(D%~if*0Qkmqi1hwo=A7V3l0<>0RN#{U z0P-VhttwnD(DYm@+%4d>`DC=ls!s4Gsr_#)qd2BW&K7+Q{V}$}8(Bk(tXi3`OWwTZ zc;Jo0+>63b0iT6b$BHh4Y5s%;w88=NcvqWK)~cC1h{~l<*`l}WPl18UJb%d%<2f~% zR@0M^>M_$n@$^aua2!$<9P_(tq|Htk$J(dW3Jw5ZeoCx|1F{^z@+3Zs03*5p%-2w^ z^X4UN`QCl=MF3z#c)7iMg_0Um=;-(`$64Z_#V|nP9!GGd?;Jg8|L5_JgT>u?y#>-J zuYJ@z#*kxA^rT&lA2j$hSbwFF>v<7fr)*T1yrf%e68dfIfKKc*N|LnE>vp>$1vV0} z?y%N($OA|=n~20#;GM6ivu4c*E|z^Q@4Ln7nJoi~ad~^LghWk4!Kv)Lz~Dlr;BR@8 zsxssi2FuD@KI4qz3oSoxTXYeKAfX5A1l(gA8)>U6wxNTWoaZ6Vn}1b1vZ$AbL2u&b zEx)&IOnT*!eL0w!nmHCEca$=?K@rBeFx<&2mOLWHG|1yJ_7XjS<$uP|yRa^o05TVVAQsv$c|BxnDhO6OE53?gCF={pN^h|CBwJggJPc6K zSzoAR?W`|W>g{}eC#A0~YUOfe+Dv8D0nxvVKz{3b5yT}v?vP#ULUfsJl7Dqt7Hdwb(==?+cmlGV)~x7} zxt`jrviip*Ar}o&u>PBc>}d}*U-hKTwzzMsB3*~ zt*@2(+Gj~T$;koL>MgINWwlq(%KBKbj?}opSAR1ktTr8ykuH_v2>9wcVydv6n%dfF zsj5~l=+e{b`KYAT>T2#sSkY+dsC%rHOiK#&lnR25dS;G#Ryyk0f>F=PN3Hyyu->eE z(8B$xSj^HdzX=1kW_cVI6?BkBU!)gq1`&t>`(#v0q|vXHL%Y$CnCulIw?@Ymif!e?T&b*EucKxD<=^CJwz4d4#tA9J` z`Ko$VrO*a7KsM!GNkejZed%gFNv$W5fWPE=5=XGG(jIB`CzZP8_=eXm9=Q7DIY#fV zL!VGE=zWeti34h5^0YEgYYVy!>!DO9Z6nhR4)sMeBsWQ~KuudkXC`K|6SFDTE1WT( z5JxbN3e$L4(xd5VRvyK}QZmSq=zm^YjxZk5jn3}UzUa1;zso{}Nr~Sa_kMBB#d)F1 z@_wOr=C(R}`&!yuCk^h*wv5uE(ls+F_1i)}*JM-)9fG^B^PUeIT>y>mKmO31intC} zX>8|ebB%@!WlphEyUD!{0T_LVr0pTDjXW zrM?YCM0cCy&+<@vOnM#kb!@{Qr;^$AW-T;tc|01rXYN5Imd|jby1@%51ckDN;I}Yf zF}7fTZxXWvtvY6=(sT~ z{gcFiE8B01vi&A0WN%ea>AeWN9CqNC zd3G+Z&BOXooz`AKn>SR|l{U}e#C2f`zFW16*IWgrwqOoo@O2cJ$bY$5N=#F~C|><5 z*kp}Mvvw)6EwqT*g(_3&coC{nQ|UNIQ>rT+i@H*cnO;HZ$W(4+4#4Ypd1~Y_OVX0CWfWxHAz&B5j=kKy%fNMkLCNgG)jO%i9iU(9# zEJ9C(`0TzRQA)qS>rN|gk3d?gCxs^t7T+xj^vA6z&mYc)M%8v`wdlb5|cT=t4 zs1+Qwg5%36IAWKAql-Q!i>1a|zj3wo8%$I1qSkMGJ%9biVK^G2cH`aaSL9WgEuqTD zM-f(7Ns+5{rl zo^_Ru6t`s+;Um|qp%cZSmx5W;(`SnfMf#XOQTt}6@L{wMq8{qTaJa8|9b8LQlaJJEYfq9 zQm_iVygV>hVdPn5!Ntp_ZZ4-opUZeBE_k{49Bo?E>+iG8{NR3;E$Cj2IJ?7_KmYXV z`TN7?Z(lw?G%O3Re|`1trOMdVOb$uvhq0Fj{}Iek19(JrG*oZ2^=a$4z<1Lrz#caj z1AlkDv=nR0AzYBK27;aYO;WNTsRDq}9C_auZy~;Ha!z2dCD zn=zu)^2?M}oUe`}j_Km$thYCo;5Zg8Unlred1=V&FfLi1 z*h!+~`n(QH4v%HAukf~zNj7AM&FTn8UVGCOXGLEu+W4%z=~}a*?Dr}(g4w^8pnnwA zC^~G1Os9$3qr*1qSyB;dIO>*w;2?=6qj>504`{W`O;qOCBiI)@#|NQB&b&aJfVe4HP?4g~XYn zr&#BTon3OWd|r3K=A0)B7ww`>6ur-dAA9ab{BNAEHyiJuq?|1(4MNV)>7Oy zF4r>L_V#>sTW;Jhx@S}4c`^JjbvYomX}b-DHoUGy-%-Rj!nU&BzyY zN%n^=Xc>Z<5L{+?p*=QJZ_0HC_~|?^mONY?%ib(wL8`L-E3x(Fx_?_(cQJp*N&_Bj zyNIxxz5iU59y1hpKFtIEYGg%XMF+vEx$!{Q2E_JnNxV6(G8S@}dxH;wzv7s9?Q#^2 zlJg+Te-2RD_%S$~jG*Yt7=IQ*8IG~oFgzPVxi<-F+eNvyRj?{eEr-+8u12$7C%7>x?o*F$BH<#z-$_<*q=$a&rUtr2@Ci{61&l{Li!gIO^lKNguKW@b8-GaQXw|&>OQUUs z^DAfp6NwY`B#AF%w)FAnI&mjzN&-^MZRz7ICmHBFJPZaOa3zZ)4KtGEVHC-|LK<-* zM@YC8=QIJT)@)%DS<)i-ZdjP3Q)pN1EU4~9uNTnghyX#v5i&=19_*l@8fG_S?C7=Kv0temB=bO9Ipm9TVk z4DgM|QpQVP1}t5k$JP*a9;fZV)g=L`f$+$r;T&-0mZ6E#GFM&q^CCHiRf%WhSuhAk zaHhS9K#1qhlq=hM8h(V1_?A{GDl)oGT#`uJ zZAn&uS$_#Se}rctumCB&wuRpujx;XF2Q;CYQf~6Y3s5G<-29n zc{v$uW8%Fj!J8PSi}Q;~j9jTa`7xY=EIY#WItk$abNb9!7Z^dG>~`(#2a?xr7Zz(5 znanxc@!b%3N_0D1N^zdcTIEaQhgt5$1F4TjjA%~MfKEL5}Y4-Sw4-#qftrCcO3 zRz(LEPb%n23?xNF?#o|N-ekt!KL4vHQzdR+{<3OhqDoe%lc`FMOaNft_;M8SrhVf} zFQSZ!ee+WmQkJ*A_S?!9Bh|m0Md)~~1b0CkwSSc$3kuxn%U@O&Ru;d^EOu1)^$%A8 zuA%BX(zM~~XK~;9b{1ok(!X8B#25=nvaq!``gVdWsOUjo`^`6!`+#_hhfF|So|f53 zDXXS!B$i^*9>b2iz*)s%dzA#(^qVoQ&}%h`L-v_Ak1}UwTYO(*?#tK@rj{*NxXEhM zw0|0q8A2UsH^X!!$#_PU3qs+MCL{Wt0CPe04GFaqsY*ug#k;Q*Kw5{=U@sm}yB=W}-FnO(M^?Ws|y5vU%Af#+|{FLIhB`GO)RiGM#6 zc*_YRMp0mJ#xBD6%!u28X#x!Ttrs~WV*zAr`6IQU8X?9SrMDGCZvyhHunl;)kEy|EoX^PZC%xOW za7VS}cP4Q*3{L?_#{CX)R=W@nq<^?Fz+jdQhM@!lA`w!NLMU_Y-ALXTCXZB&(J1nhg7yfPGF&3gMP5d)x^(ehBkdyq`1RpqWsb%l?+L~ocz z5=0j*ph&3lACJY4K6?kp2!9sTw6+HO`!X z4hR69ETGn+M$vOr;zWm4Y3LSFttDzCE^o=3E^aA|2XF*36JA3#+g5|ccO@lC8g=PI z0-12FZ^%N;4hBtXG;NKz9b;U!afmMkAd!#&+SUekhlCFum7d4`oPR2f5E6P0w%|zh z*pdyIBA#~N;y_m{2JVpy=E6+#Jk+rk8E!{ys{1_1S&;^J*C^E zH_h4X=ymgtXna)J8Yk&sbyO%xd~{A6B5@9*7urGUxk+6@H$#0X0i{aolw zz=D2MfdK8(oc!X4H~BEMHzK<&8QaqD%#2qem8Nzj@todw1JA!3{NQ*|&z&PfHumO+$iwG|=ScruaosmX26y zZrJ*)3I|7v7NVB~R&{#807Pnn>epG5&E8HSB zP%#vtJDY;&_R`#CVaygVnIG)fc64k%QdylP)kJe;3xo zG?fVQxrOrLRf1i0dtIfCZFK6c=s{I>+O6#{-fW(q5D)jXgJ~|{#<9+#QPmhm3>&>wd zYZ8v!^=hYUlJs=9S}VGkU^FnRf7rnMVJwVAueC&XczGjI#y8$v-;gLPhV$dL5e^}1*_H7~KEYnZus%B!o`0Cf&4dW0>} zKzc?8QRWtQhjcqVty-}^rytUhnqb@Ls-=y5+sHW9tfM%uD%guqKNX5}#c2$Y-M zY36m5IYN6)1q0d@-kf2nWGW%8-XXAR_nftRR&CAou%JN}!(tFCd*PKo8A{7+?9EWA zjZm^7L=)GnlmmdaV|>iUhi*i_PW*$dQl?IB@c0+$VecBB})QFzAUu zVJAtRCnGH(3QlRh0)hJ;l*4@|4|7ThNnT3{z8^mX8z5 z)1wvfqoJxa8BZ=xJ@awIvf0U_9$(Znc|Wab$;cNUO)P6zn=Ul1`TS_jN{y@Xz)(F2 zaB9MyI5--Tf3?+Q0`=1&ygyA?tW<4BL(&3)9ZJj<)gj*$(jmbqo|{nvwzSr@kv>gQ z+-7p5W*@d_WJ&z2@=D^qQ+DW<^7@5)9NbtpFpPBy9viYUo9jX+yVNv`DDe)d{ajEx zG%K{y9M2`qTnHypuiM;e+GbiI^r4;hT#Rz-gzngRe`eRA7sI)Dw&>~#H9XRj%&Egt zr@Y!#6mShjWNF|_Jb*iRkdkeF9Czrs+iY^7q#>^jiqddOtHSJ1ZaM~lhMH_ypyN)d z1afJg)usRiTG*tK0i$L1Tdwe7{S=Y6j3yK+*~0I$Acu-vd@8a5Kx;Bn9~ zYe?>rf7`uW2e3L7GIk*RTTv|3N-=?Kkc?;Q#uy$ZQg_;GkzJ(?WnYb6XP+G{J%@Fi z#nFql#Nnr2Ll7q~*GaJhO$>F*WoVZNSFy4AL*!j(BgG$u4kF5Vt=D=OvuK(yvuA*D zu4#m$!0Mw=CQfpaO~&IS%>y-E7arA0lq;)5e_8u#(o!b;OK>;oMmjA}hG2Pz1y&8u z>I(V;E|#vMI>4$zYrvcNGVU107JZ9nAFL$Gx(lawQC=6d)~nWfDXkY^COM$$jTJOs zP?^3~O(+)hwy*E44MUmR3+#G1Xg4>xbsyP!i%U*6|699x7zN7K| zHEJOft){7lv@qQe<;Zcugzpyd#q$sDNIh!Ux!Yx%LeKBechnjfRi}|R&G!q`T#Pt3 zzm9$C4M8!KoTbTRtk0CC|Afg!mli#wf9$o17Fmc8DM>DQ6?_aL@{W6Dqf@mklI7UtFAx0lukA&h+#=7ot4 zeWZR>%2xP+)N3i6;zTR%FAjssHxi4N>4+AIgR;Ck7W;89vQVXajfl9$Q1K>5e?e$) z&_dfc$Ot;3)`VR}H0H~7f`B)My)F z=rL6WUSSy2!Kc=kHPn<&v8)KXGIbQKrN3JG6VqcGLzDmXsfoSoNM7~e?^bB=#p+3 zNNUL7%SfpOz1zabrEaYs+1ALQ9*o4eyRK2y9X*bSM8#VAt)*Ydbkx#sE&bNgZ!P^^ za_RR?62V}eq=C1x&6qYpTUbE^9*fGg1iV2BSi)-4AyVaXInJ-IE*aC8G#U1MpYq2* zrpDD{EhMK=a2JUIHHZ4|e-id6i;<6UlL9Bw8cNv^LYaZOJC2aZS=L4#;K*rf-}lA zxYaZ=cdnj>m#V0!L4xG6K+B(^(=w~QycHq(71RBK%9f7#it3lqxD-1P3&;SnvCt3b zEdV5<;6WfrTGhyre=ao(rB7~;fHi|iF4>#qz_HaEPq$o1Rx4s^MT}%|Yemf53IFU; z#6);5)|!}F6Jt)l*2H{CO-!2LtvMK<7jcCQ4e*(*qLR_t!lpz^t0-vPO|7A>DF&>l z6*!xAVJKNO$6@!?wKlasLoF$PElGKtl#0oaWkmk)PGC0vf6s}Jy0^5FHcNZ4*P+Xz zlyOlL3(VaSj;f*?g2o z4S0vp?&gORRo$(kYbYlMRHeJkx{R9$8}-DD*SN6(GaUKCiV}yk zzxW{o6+YK+f8QY6C6~H5hr-J%Uyh=>))jeUYR20zpGnYlJBWN6Q|w$lDA3hLAQbka zLoc&Z*qmCIQ|oeWiZ18I#oDO7h-%$ct-HEfx~sRIFTIGCR#wrDvNi4t}Qg;Xf^Fad31^nos(X_1hLDIvd@WKjt_1fa`9fhO%2BGSn#COiVz=8h zJTn}=e-s;4_N+Pz^Tx}(_!esj^mDqd9+E@S&=QX%H_8=AvA;-P$xez5=qi1es#3OY zU1X!fJuov7AMcg{vD>*X77IISs_7fcrX@QUP|KgYl%kv%w{;V%_?mBdagV{PAW?@{p!&=c)E1IsAf1;_@yVQD@TJLhj^e!Mo@q1f`0T;t7 zDqWx^t;p)Fq#{GHXf3U271zcq zi)(33z4T{eKhk3xzJtO+5oraAYY#hIcw-OyG+!`s-qN~eVUrLv7kGDX zJ=f#HZTB=w{2<+Q{859UBv^bV1zT$St;|JVRKQ$|Gd2 zsrz7b%N!(@^c=iiQoO&(i(0m?f6KzC!$o0w&Ba;xNRMB33#%5!YhnDx2;;S*OD&t$ zvgxIkO$|m!qQ zN{aJbR%>zsf_0{sWGOUvKr!nOYJJd)9B9d`9G~2iX=s$wl8th2!}yGbf2(knR+&Z} z=JiopOV6hD{3M>_TES=dt#S$tJyWT))G+Y!*WMUMqm_E0QjJo{xuZ~W&dTJY=vA2M zgL%P|Wd1wUZ&(Fr8Z8m2&>mVDE#L<$6`TS8trwsPS{~liE#zaOR)!w9g+d1)l%4@% z3T$I#-wo3sLjk%_UgogUf8v2(y_`s+CDemPS`qbh6)htpJ8MN`WN%i&9aBgz?=C@W z%PV18d3p1Xl`vh9^m1knEv@M#w33Iqwt|vJq2@x!Pg3#*cm*hdPCW&+7Wr#1^+sd< z0VhN7sWWEfLBNnp)L?J!+9muDB$_io-IDw)_}2tRh*!9_zB@hbf5Jatv>!OjMw8Lu zFg(p0^9F&={mdmDDLK0&L(2(*sTJ=l`mQ$;#(prB^q#sz$xO;zO=P1Pkof?Po`59u z3D}{R)07G7@2J%pPgL}!%7alx!Z=T4t3dwq5V~g?7iz~4qX;r~vXbmP!~?<_5>6ru zNUyKtAnF1ZjE6x?e|`+k(L^##&dF;wwx9VUL{F3CgHeV4dy3}~`}YeA5RU(TO3}H5 z{(BR~A9#UR=nRlT3o{p#PEStmdI6jH-oOv`=+D6*I2r5v@+2>GsaKFni>i)@K?=C~R z2ZP-oIG&xJ1}A$b^k;X^dvMC(diU<$9)oMQ`{3SvhMqq>*ni)@dtXA3@{OO_F)yf{ zMp+aEEYOu_BFjltC=EFUWc}B~0}7dYITUApk>uBG;ziMnax! zSmyybO_LGv;84VK7h|KJ{{diQ|pu@-vXgZum41sn5V2rKDzet*x@rab%LbG00Cq(=A zPfpn!e1EWi`h%S0sn|w?)04Ym%LPAhDt~(K{@q>vlOFMoy`wk*ZS!dC0UV2GFM??c z@Np97`hPY$l!cu8Xq<*4FAZV0h*LR;2f)Bu`-<D#LhOpH-N@7Ib1t5=3&Yj*vBmK39QL03NJ8XVh=qXVwM1iym>(1(!xkBAz znP)JSS?};>D_~9-H;#H7hR02A4?1Gaw|L9PO@FOz;HlA2sd;uI*=Pu#(%wV(^XEsb zLHNDBZ9P2#P4d|>zi89A@^>!^sqqQD%;O{-!8ag1tTO|5N0jBO4^18BDH2njfEw8` zFd9K)=jgw??FU}_^myki1XR<)Z=sTbm**M=@@I0-&?Bq%`LCnyG1+#1^h!T=%@3u9 z)_>=Gki% zQ2D)-x^lP|+A6L1+|43Kfi8(mi14dWsu>l`LLP@O+&uDNhVp+o=YfoW=yqk=Py|B0t0ls*e->)~EqOBTlie|dr{szNHNm@IiSP8|3n}gO$H!costlww*)pv zoa7{!hFMO$2uk|1raGIlk7tIFqS!u%T0~t^#OU5LjT0OP@c+i~^6j@l)PDhSI!IwS z&-rM8#zSiEo&5|LM=cjy(D9b@28HNDQ97s#9Gyk6q5h!+ram;yUxfBC-(AG%9#eAh zP3y7XKEk@S>Qftcqlb4fGE$z;sQQbx~3KLikGbU#RO9I?t^p{aWNAGkes z6`QAW-grnbd;2D1h^_oXoPTk6o-wl7=G}LYx}h*3n`q09WEn~#;o$6co5jXo=#6vw zD{BI&RUeG9I@)0!8V&KLcks|IluyOIGI?6FX}0)?nj-!fXOHywy~WF@ytN&2*C_NJ zTX-h|41b?ZMlcPexq32N-44r~8E+`U0WlfH{}Ifv4`*W?Rivfw3xA}}R2X#E5(SLW z(!}S}oS6iVfN2rMj*W8DITGSiz(ge z;w(pj8I5Rp*HvifN`K<+AP6JIYG(gRwbq+fwQD1Uu5Qb!TC9(`?Cb{XS{ z1eL;J~3NH)o$h+-hMwJS7Y%W1Hp#j+(hQPs^ze=qoCU5ylXBI#d| z$Uv|qx0%ahS)P{qF-oOP^koP|^a2=s!0!l|52(mekLVb6UsahWSdb(9uSR}k0pU7m zc?MctJV%a$`hVHVYV+P9!Tua0jP!ropZw#J1;vX`9W zOh5&tqb-_^LtzKLuH!ZUWVlKT$g_6bKF_AR?;@{ah1(`Nu^6H#Ive<*yVmF~(j7gc z(bOFH8tP}0`)4+${Il?y2=`f?@%$y85Yg2wVtnZEVt-(s<_Kd9UeDlRQ@zL>3aU4Z z!5dxvLW6-Yw-r~9x?7C1XT3nf(VKHj_z=gFcrZ+0y+@(%N5Pi0h-gPEAC+?PagIr4 zTQHec?Vkz2#j644^$91wR3AkYDX8!d#-G_g8*DxkM}OgQ$9g?OWt6?6q2n-5()XlQO2;=VOD%f|ylmR8EjaT!DvC1(ezBx-BEcwV zg9}2<4hxII1+iua-A3Nc#sIYxCgFIKXg(nYU~`IF^17U#$-HQ>{%+bfGfC_(yDw0qM7RMq<@@GTzYoAUd8E2h2{$LV|Dp_WJA?w z_?qcWm!2W7S8;|?JG;URSzSIK*--Tv9xx?tl^H%sQ*Xv6NPm;$RQNNm$+ z$jZ2D9;ygdiyAmILSJ!cS%b*%c?kbqLWLyVqDQ^2tP#BC0-GuY)TG21su${+B!`o9 zJBIP$WJKcNjQQ=Md^HaVVy{pPD_;4W>+MAoCb_S`hRxT zryxxb1o#Pu;3%Q@ki3{?I0q+x{)Kdb3GE6V^mQ29l!~9EK9HTa_7eCzUV74tIR z1k%jg6-EWanB29D$!nOeX%~Eedg$S~{Vij>=5UhTF)Gv|-7jygu1#w<-Ly8PJg^7< z!ST$DuS;%rLwlPMQccc}#&y&KoPV3PH|th;!?LyQHc7vvhFw&F6-$*V=`BlL!IHO{ z>8>^ym5s{z!a7@89wo@!S)A=_i!eaqv}%@^k8rJ*xA*+kw)w>=mp`qD^^o|KGOZFH z7g}j(ON)#&-Ii&lc_HWsofK`t9PvL3Bc7Fx_!ZDAf#C~>JLAKp9nTycQ-9W)S!1iV zr6aPE;pG{jl8%cs35~NlVruox^U#27n&b%9_5(C;@d6m;seM-l2J`WItMfxI7|9|$ zD%#dylH#pPYD(CW(V}oDZI2p?u@JMp8DXWc#7g_JoM_V(+$zSpk~)&dq=%0~)CSDj zfLR+b%V$^{Flz%QpW|0HV1F(X8~v#>Ho6Lnj=U`sBNk8lLIR}EnKni(p(oY~6UVxE z5YiJLYEmtKg()jT!YXs-wZ)`WW7TI(*`+CCmzF15tQv9^6@n`2#*tM5E6VzOZbpN( zeZIEO*Y^4AXrEUB0&5F>ZK1C%^olms7W&#k&sVy((AO4vZ5z}U`hVI&f7vYbs~NO4 z6TQPozLwShg?WX%x)HvL(SNqU=x^UxuMPCIfxb4-D^y!(pf`=|N=Pi2*=x%>qXw7P zvThj7wM{Xz?e3Srpnk>d=@sn%PJ{YFQc#7VXK!Cib6y_3x8K~_h?Vdv8ws7ec!7!V@>m45Y5yls zXo5S4yn(%CoOqCkY4a$CAn67g`oU=?4_iGXh-k4u0(cGaDay&2hx9Pf_q$e_+gq18 z-Na$b`)SGjMWfl?J%Rn}jfTT@mw&aB7(M2Md7Lz^Ujhjr0NYq#h zLpf1NHGjzdSqeh-?{k&OEM`00r}$@kE8+H5Eo5q9|*q87vck9^L@*@HP|>-q^Y%U zL+#tJ3Ezg=OF@)Jz;K5I#6R2vKfe6!_47XNUm!RrM2{yqE0-rEn~cW^q>kXw2-{3= z(|^(RpYMKo_Di4q3TS3JIW)002yOT(T~0IMKh!dvJ=O=q4F6dNDm}N>(0+Ok_bVSH zw2dvQJgq5wXODLGh&+Qo9Uv!J(C}%Re$&fwmpP#>f_T-=MU;h05^~+bUULHO__d;D)*7sSZT($1 z3X}tfT9=CV)>pd=ziCgFBV-#|OwK*7Z;{uYCi+RGJWX`hkt=+ooXJ|`kja)VAAb`@ z!)O8PrCu##Rc{lAA4$R2n_EsvBkPZNE`R&X~d1ple(ZqmUXe}t_I zyU{G01CiqyTYvJ~e>!RZX$CvA_D{K(sPOGNDtsLk-V6^Ah161fDV>3yPsc#3P_N)c zpBQQZK;}k3Fquj30+fL?fV6TG5io;CGjaMX*=LBG{B29>tg^@fp>-t0e`|NhI#w+dyamgw6tp;OpD$ zv3x4xiLl}rs@YJ#G@%}~QZhCJTQTZ~F<`a~O2S*S3#}Wz;DSQSSGK1v45_U_rNx1= zhGo@t<6e>RmZaTZ{uOPx6@LNA0ys^BSKcg{ zf?@0jQ+bebAOY2B&`g>EfBwv>l5l(5BDS*Z@2u?aP?nB|{9Y)_&VLiuh5eP}=VVaFy})bJWeZS4w;ZVGF5(R^KdEZlUD zg-h;Y;`K9w;miLOtVPXEo8ae0@DI`VsMeXOmIwe_*KK3+cSV{MhHty0&- zDuo&%FM`v<%Ynd-xn=4gO!1mRD%01rNTsxw_7GYdd1GpnDt{Q0uq)_^4`>B@(ok>U z(wda~@MD1eoHcfVr$&*c(QT3a+PHLK#--gKRB}E{gA8pw+4}Y-1OJLdur@i>Ca2ou zbahNlm5fYxH)>?MxEGJ}(fFMteWg`(>ZomQJkmi*$+ZS>FHd4WIE4erH+QsN%=d`qy_qNC;CgG#HRUoV{9o8y*o$e_W{uQ}YCL~LY{RPAYbTE>AMObM#HSku`*G~oDTZz zKA{(qfW@HKPt1W)n3WF-v*!#+WjD<3XO8Yip%22k)qlU>Jg=&qVc8p#ODVf42cqwP zoiouc9cp+k?qn7gXn8XN$XY-Y9SBmk3|@uXldDeAwFxfX>QNgxY9q(O`PD{_+Q@Ok zjT}mDTX~I@;8MZ3q05P@7&mOW(rD10_h?p|c3ktXO*_}dv}4(H=;u4{BnlpqXDG=7 zJ>Z`kvVZa*2iq3*on7{O1?20Ttx*mok zv?Zv(by=S!{FHj*;X`sbj%4P6DG53z-$mM{m zKU?-D3FEw~DNDAh(S$Xh5#+D`Rd_)VN`IEWH+a$_zZZhE(T5VlWAU`$@5iVq#xqR3 ze0M@s#}D;d1}!r_C_ezTB-|~gf<3XpA7@F-Nskkmv^r#Vt`%BDR-q<-ZKV|4V-l7BpN z4<5ET>Id)bZ-B5EED9uI z+B|Y8&R_#={opi{_}bN3Bi>>GZ-03W@hQs5nTPcB*NL50ng@bhh8+>y5$~rdXQcHk zl2&NG2wr$o^Iq}ecspd+yp4h=f8-wITpu!DjPyrH+Cms!HgMyn-HIFqm7&425hgCVn3 z(k8QimQJ}qqlnHOeZ^6%&f8RH6+YW&jHo?_P-t&P>fQ6bRiqT6e1TH%8uEnGBm(_> z6K7MLP|C{^$EXxKCz&SE5}!7Ht|a5szC5)rPwmT7`|?~iU!I%k(^9`b zS$px+UOZRSi|0*(p{posseeC0d5}y&NIwy8P`*vF%{cRnvAebh-Dxg81y3A0C@O}o z>W(uuTDY`ff9sbdukcHfCXN-UUhR}qJLS|)IhW&d_qwl1e$|H}mvW|YxVm&#@o`xv zsIJk;x(*ZFl7}kmS0w9KBB@BngMt`<~5lmFRba&E^OnqH?c7jjX1VMBHD+Zj@3GD!R>{IVLt%W>eO)vRKF6FC6RGZhw&tt%7~dwxLn75r2MCK(&s7#|F&%)H-SQ zjOaygg!dNT2$%Q46|cuA%W+{qOH5OZU&2$Kel2z69oJ@#+RSkc;yXLU9V(I-n50WD z)ai*8F)btRGOOB2KYs+IX)PLn}uT?Qw)9|f=%%Zx$XRWzqHtlrvDMQ^Qr>vnCt{&*n(3X0klpkTJaXI*HxzD8LaRBMB(`!u^| z234Se!kv;^R1e1?8ejNz!hZzvX5nEDC28P`Z`LxdrhnLF+Yh}nzz?@Am5yrV8-=N? zUEe0WS@zJ2xlO3>t4Qi<+h%RstZkc@!?s!FCgEXi}X za6#`H_J8^2>j|*7Z-zZHcG)w#q}{vp=FHl}QJXlfi-|)K)6MPz`g9oU6H9vuD&~LDqa4 zb>6Ks9y7ArLW}ttmK#1)X|>U?@Zw@c*0!74c5{<#Hz@BgJ*+Vk$=b0z(|lv*t$YoP z5r4D>|9i!(I+xdq1H#id%z;Dy6!6yQ?sGn7esiPit!Kutm{wz6);YwWg&GuL)G@bD zbK(5w+`9vD5eU&+z!eMiYO_vl)~U@pwOOY&>wImq&K16zSwD#y0y3PDHm8MZ`DFRTo71_I)OnFMq^^ zzGeA?m42vMF8#fB@aY?Adh{kaNQLBYD2R|lZxZ{cnK=3#zyF%?@Aj!T3Zq#k4)SAG zZIFy-RDTVJyZF^OXp-IT?p>=fRv`)pL5z1>-@N*``wcZ!GW6pEctp0$YG`w$n!$jo zjpN{)JVWNW**OdHA16`tPpTB;rGM0TpdoWeD$)ts`N$Sg0t)L}wDA#oWi$}Zzz^P8 z@V5*$Ay4IH#5Bw@Je8Lbucpuq#jE$l54u*Y-#-7#&{>SRuYPjeqHXuZ4^~=RXkMMm zKz;R-Ar-Tf_QemjA9S5_-~8n0!YKuv3w(b@SHS-tP)h>@6aWAK2mq&rvI|&KfLm*7 zJ^%n%Ad_um7Y7N=NM;DlNVAJ%(ieXlN&f%)6bh5AB29<}DN&ZeU{#6jti9_vuE@99 zJuc4$5}?EwBDj25k`-3nhqzC8pXBB}J%a%VP^3i3v)Qu1dGx$zx_{HtZ6c+Ysu!q8 zcS(GW6>MdbN^B~UZd%e~bh8_w?-^^qG^jKiZDLPc?~+nm4cJ8{$p|~Ddr*ICq0AQ2 zc-}6!jdTNzl4GRrAo{(fHX$CKOn5(d_vYy~0lIf&0Wt8f&q$w&3H5G}+EMZll3}uqBv;-yO zCKEE9DNC(@tSv~qHIO(uBb$F;o;41Z#>75g5@@CP#407-X|TSU!cOFQxWQ4~Q4i<# z3D3_rR2+fPW>&qGHl27K6}<=u$7Xmc*&H-YI%hNZv>?R?jdnt5uBQ~#thvtH9N4T8 zW`hET)>>k;xb;_nTXS|Wxy<4QlS``zu~kKgK@`WYscX6n)()rmEzf@+on=L~#fspr z&$kMO5@azUl-fHq7=Ra{fn;jVxRTvWJmvb8&_|Z4vOj| z4d&ucmdR-*O9GzYhGZE+)G!m;q_4u2T1nTxy2mxKGIi5{a#0JQ2oJ!$xGXMH*D@U1 zHkdO`lh0SnhFLc3YhZuF<`?nX(JZBidd|Wt4~9otiv@~N6ARiWTjX3rf@@PmklmM} zuhg+eh~&OLN4e6hm7uCx8d+s$1TZuDeUK8DGDKq1&lgvc^fnTlh0)anv4tj1M%_PG zkdz}x3DTn#4ahv1yq}^~e@6G&vaTw?(?8Dj;1_?3aTpDeNDzNkL`7WkkZlpKVr5yo z(e4%p6Qb`1hL=qPe-WDpOCmw>C^alNsL*Jn+VqXNNu+P<|2&9>DLXZ{Gdo?W>QcuYP^= z>Xb=yKmX_34{v{XP>TsB$ut~|gL(9~=z8XNG2?|9!OE9PPe6+w&=l}FK#yjCm;fhA zDITOxA^zkNk%fJNy=!xdzOQ5#lZgocbpFyNb=}@_$%H{f^g}Wa;<9A5$+Mun#fr&& zSObeD-IQ4}>;Xv!7h|^2$2X-^;|iBSGDUO$W|;x`j^=;S1xrRp0|yXkjeOANr?XK; z6<4!M^Ywi2{l_2V87BW(_epZmUt%t!Kk24n_wOZpF!e@Sog;#D&CrwBtNg8s3$BV4 zN5$Iw36eYG(V)!Wq{Q}SlxP|RC2E{8tL9!`^s>NvXGJB{YmZjZwyD4X+fp1erLXk7>Wm>P_$qI|Vl zO`DHOC*>}-Z_M*!S#Zr2X|Jpafl)-O$?B33bn$`Td;x->+(l?;^yZf#q+ZjfkQ${CEk=t;0f#~5^@fe6;?n1G%% zC296L=^+tIEENTdtaS{dCFWf^4%Vf{b`F0uvO)YdRe^Msd@)Z>TrU;f5wu>Xt7NF9 zFJ~1ZmrlS{*UZ&(GD_;ny`Re$`gsEm(cG;^l~B?X8?y+6P5p#Cv2@U%0DM8J?A*lg8#y&*Hx=xiOL0j|*|6t&Z=hpUFWUF^l z=U*t8nP5WsUxF%|I@Vp|I4#GUC@g=7+JlfE(Wl3sTkc8A^}wLa&!^GsJc+}Z-jHxK zn+Moy8s|jzId4KT;v4mu-)*$oP6Pe_S=&L!9V>~%scY`D7>##}i+(h%Ryno$=O?@< zY1>QdWYQ3Rb-%c{2&TX@A`1{a)D7=>kAFB6Rq*H^hfCWY|6uVmmS84Q%tVt>gDoK` z7SrP&4&X68@D0Nm@9Cw39Cdf_)Sucu;i*5J)Q07ylb?ede^CHhQ-C`aG%1!7mmKi1JMA@;9I4 z;-XO=O92i7+H4Lv->_BdvA^8XKK--IxbgddPj}OmABmuMewWlQtLr}28$b!ke^jvg z?`T*01^~YyfA&bQ?fAy*4Vi!*5V&UxUNw@mMQ$5OLVDduKGW|W86}|^93DhpxLRA z(L%#1jql!Y1nnf6MDHW{bQ8z(^V}ENl)}$V;}SL&f8*KtXgJ5tH-yqQHvDy-su2#- zYj7?NuA$z>3o+|Xm#_?|+l+lh`_tT4Wd3$=3S%GP2--(9iK&kiWvvxg!#k(#$NCqy zj*W2Wi$*J57Me$x?c;o)$zDxbOt)%}pH1o=72e$E>1jDPOv7-eZNtpNoQVm5x-DJc zUY7G0e@T*eE;S#KJE3v&HabJ&eLDKW4`5o$COc@UZk*q2)1UZ3y3}&UVhuIHduY%J z-l!oDRuB5;g#Pi!8%{-suf{r={Ch(Fg{kN3Cbm54Y1I7TkpW*~NmPsM~ zq8FqYWk!?c53X|ZBk3+P|45ow7Nqt?rD{(_e}}V&apN<@22xl=MAaHt0kK-s1U3Ai zM`Sw1kIZ~QxIU7Gm?h;`%KANNvFMkCw%>If z5x39Y&RzdX9`AJt35Sx{CqH^X@xF*y^F#`=9^atJFVZXabtN7J_h07UYX$JV(W0e^G*8 zR4mr2sRRpx|LqwGF*PtXFy950UPum0rfSljD;mEVnVQ%;W_ooDmU&5nH*;d_B2T+a z(4_4opG8_nNUyX^E!|E@3lFXXd{137e|yp$RDpY@v~QjWWf8q7~y#%3s{OtOuZm@SmBM`sDzR0EW=kB$Uly};q_1M=0p zQPZEa>g_ylAPs7ZS56Ni7_sTGAszG$Oc+ut#V&EK&LeA-A*(j4%)02yO>rR5(aj#(oC5!j8B~s8gZ!K2{bCgad z+j8wS-MS?Gr1fM(&uLFkV@I?ne^WW6?jCrB@|p86mOFXe+{x^6gh5ljR%u_a`_frY({BkQLurx9eeZJPH!i6W<=<3bsyXQ)skg8ZaGyG|!<_KGL+ z?L*3rAY6yR!f#&JWgNDdf7351GPn;yUI@&d;(x^%t5-GRxsKei9Jurc)fmbiPNV2? z>!X9*ui=U*x3a8QapnQ*08+qTEe$cIgbbV3E@pl&rQniGne^;y8AjvJ(R5A~gjhoO zZWdeBR3Dgd$oO;Wfg0uj)GRwx_n+PQJv}AaRx$dONj$iJ*o zCf>}GiFeR;rsQ;Qx=uft&yx%M6-PrHvNT+C>$bf{b2Mg^zeU#-a58Na+0;?fJKKQoRV2hA<Mqgv^#pN{+9ts@NaF@gP4TPxE7PmCF;M_zZ3c#Xvp?{Vd`N zK@#n#Wb|WBrr|nllj-zuv-bZCL*xS{Ld%A32uo2rf0{I~MBB1D(7<WOROZW4PmzRin};iy;TjI7gfpwqu=t4@=~Kvaj(b(L=aO{>2X` z@b=ljdt{w`lP$DXV+U-N>1gnjXrJW?=@wfn(^q(M7U(GfY=G)HC`C;RN0lMC2jhQf z8E`ITtvQ%ne;z+_dm>-V#GOxmppqxoRkD}Pgc#LyT2eS7KdQ|}8}DdM0oYKb__!k8 zLh`McvBKY|PT@JsBQ`{lFRxfeOO%fOa7r;bh{}^0jp-W?RMnSgOk~YQ7f}V;B&dv& z`QB_XnIzMBgndKoHlw$#JLoMUP?Rqz&VJ$K9hzy&e`wZYWIfS(d2t?0Q-wqbV4>Ar5>f?YJ>%m7KYRZXw`MFlh&Gb%(`tuw|FS??A)@;-Q2e@#CNM+ z6QdJWf90xJgKdOWtTpel7068jj!L^OR2cT+{J1NuCCse7wfU74xVm z2s0D`dR){MJxt&Uakdu3JN*!jb;t&;p)!>~f4UXY{gs}k-?Hj_=Uj7fQ|)!JP=PYd zHMGo*Um=J&V0i<}8$2-H;60K7r$0=iKxYjmJi>AYTlF&Yc-#Y)alkHI1G>fi0_FiC zs_!u9InZ6{FA$Za!6!VV2zuf=O6ey21SarDz-2LRV`w3i9d}#E5eCic@w(myH^;i& zf4LLE^_7XBb47{c@O8FY5h(2_PyuT;=YLQkYx1#_?~2f}dzRhXX?Aa#;0sR_7Q~pj zdqJM(&Qi>uIavu-P}NxanixY189h4wVUo;&T2|0UwF%!PA!d)KnY<~m)FC-jvPw*; z%|Jzr%gQw=L{>tKgaLjVlhXI1hgh|le^Rm$Ylwg3>W1M?$mO6WsFvralO&Ia0>Bxe zm#-i%DHdX#R@sizHJ4b=VXdV&Aq#me;EYyi0ac!FRT(;t8+NCd@j8n>y#OFrU4g&o z9`8f6tCM=rC6?orqU$7{cCkf;hkIk}Q?2Vqtnk{owseTM*_#j=WYV{&cFnegZ?5Fw45n$MnVH%e-ctT?5>jB zSjrnvpT0N+H>oJZ>>P${W-uWj!=2wT*Vx@r&o|ikCVw4}O<1OtK{W>y!Q(+tZP|h4 z`mB>r7s5GrZn|C95^VL#TWO)Ae>5QD{#%(-_5%E_S#;FRxzH_&&*9$0UIVy7OmXGKHzun* zn>5|0?yxE&ZseWafR|BZG+a`b%w!gS*s$7r?K0q`?j&_3G)Xgbct*<=?<7}@hI@{- zxA$?9dQv%)QT9>gW*$|h4U1hXnvfR6+b)M-LU`6VkyImI1#g1Oe?UT%sDOeFAj;#K z0h$~vdUsimaFe&C8IBtCC&wi_FYB3Pm~|;?c?gSx?aqm>Y{&jhKbX!i)VzoTY;&H4 z{|G`IoaA*f9eu$T2V*sn3@6F{9!=-iVw0MPhbl?9qf=u_?(($1==bAj1`^Q#XAq3T zI6B1^96{_05b6wAfBk>B8o?wWR3!OzG(IEhO@@RrP9&#*U{(eg>x9X8F_&px;-557 z&;C*dI_FU^|2df8qGf{DGEgK)F4OVJrGp)^y&cU!!LM0}BfNR4aU{rzrHYql())6# z4IU6jezRa~eoT+TVGcJ~N!=P`S@~kggyk?jsfcidX%CQue+N18X|Ifx4}l%=yhp~0 zr$A1I`X@+gPT+_udzn;R?>ich>}3Ja4&bjn6F^o2L@xW}_hJI9rauI zD~txigCR}Ve?D#>;;+LH|5xb|Gxd8dSB;>L>$1N;@W!{dHP!oo0!NZ7E2|KkN6$bt@r?PkAC2|Pb`N$rpOgM&lTw&#P^ zGuoozFzO%l@t1oLJRj1+4-XFxNa3#g{OFkU!L#S>fA-;VrMFx<;Rta**p8R%a1m6j zyN?I$rb{Z)A09Vbq)p)v)rq$5C^{aHo*B0Bf25C|ML|Tqj@>~xXyUJf_VZ`Qq~qP@ z(NQ}xba(jdz->LFZ8{1MDN)pSM@`zvk$c?do!lp+!spSDh6P9A^CLPFj?hdXd7HuW zj*oy#_sm0fttky@pi||E2E#-d@~DuG64QuaMWn*yZbZ^ z52Kt)5u?maTCTLoMJYOz9I4&?iz+6^be{&wA7-SF8o zezxEzVH?KLB_>w+mP-Ev|8p`5_gvAm-+j09`}YT(-*Kx3)b-+<@m$nvw&>3g@BI6d ze-?hU*F36q22>FTiCswcA)nYNH~m1euo-SL2SNw4;NnjZK-r(+6C%MbAB ziWp0B%5nxxhqd}zJoIz^Of_SB=%&rswp?b$wk6EiwwM{)mT-_o40p4Wy8+MWgW6XB zi=|;eaB1nPx0J1CZWfG2GJZajl9Cn|#lU{+$1@D(%+SJMHpsvECW;%$>8Cu@Y%7*f$k+PfV|3`EH=&`#-i)Z#d z;Hw~$_AgXXHK!5Ws=wR|&>V@-))&1Eu9F2ioufD=2Cb=KU~UPRPI{7r>x3XmY~~E2 zQA`h`*}tcN1cTY9$t6rEqMu?4`fD^&Dv1#hsslkxjZH;#TKTSavXW?WxT@?Ep-4C= zv}cj5-^+Tkmma@A5%qwUe_Gf(kI@rZnY!}mgZ2yMhi8OjfgZ49dR~{ZjUrL*@X2U8RnIM7?fgfb~I~+&{C7S0w zh2Se<%X?7Fo5?`;W0H6OAQErdpt90+w7>PfQe@2d_yG*wt;#{Md z&6h9At%d3OgIx$g*iqiUG+=PH)prKqU$LL5mwybizh?2}-upq=5Y!9?GtK`XR?ESB ztWq`jZ-bWfI44%PcX4N!f z6C&RVKb`P~Fn9Suf0CJ3eR;3vq#mVm&?@ZFeh z9)5$q?8I%$rfif8f=nJPOpvDUuxti`Okyl|;WlHy#KX7vfBiVF+RQKnzvIe+Axgpz zha7%56!60#gC7o8!w=1`6n;2QF3ACpPYlX71^|7rlgOYH)=QOX6!4 zk-vsN?h{WC52jQ+LDMO!YWP8`=9$y$32Pl3nLY^0;D)lR>@o0%Vqd$JGrhu1lR55>{pZwm9yc7m ze<-w+e?x5Ssqw5CU9511$Mj}ZYw;9bQ1ojv?WHd>x`#dff}<*wbGc-2()3)5u2^*C z{?L^TKCqHBx!hZvD9h0iSq)@?@LXK$T;%D1>=tF(5XvMKvn|eKaVCp1S)9q@OphIB zS_iI?Koh`y)(5O!D>_E2u%rTb)pb5z#nqTBf6QcIrn`cfRJaH-TDoS6#fmnL6+t8j znkm+Rr0sx2JA)DBpjCxIB8!4p6vUz+76o~fCLIL}YW1uNPl_#2Q5MlQIj!XgCuG0#=vgbW$scr4%LtSvt{@5#A2r zx&et9x>9^U<|hLyMEY$5#qyxi#7TeQja!?MI0&2iBgb{Mi#QXv=X8~Kqdmk`e~^Rz z6-(4~j(cqT!z1@BdoNUEKd9RL|4 zHbKa6Dx>C_wna9Z{NN-ef8p(cP~%<}vaGGrulg{$h$QGJdm~@L z>UIz7Zh@|L@doD*Mbn;De|_3r929_?yQc*Ojc-G{G9Y+e7}Nl8ra;j9LOkhFc^k+x z3(JH(w<$ogfvNq3W-ywTYT7y4vRFjrPvQQb`ul&nMsw97p!Uh#qknRTO~>D}vKhTU znl5I#j6}lzQ2++TP$o%C&8Su!^5YbL!$@*XMm}GSbHF+PVNn1Kf9C+`s3eXNQbc8z z#1Uev&d|@LnhKR;NMm89orRgKCfs9(nTT5vBfu1j7;EtQJ`G+U99b1Ni!N=$;B{+l zWx1`r3tWMwtb7n=GHP8CSFv`i18c|H+Od9Ic-ehHVT6eSf-3pFF8FmzbwA)%POp(L z^PFF=oz^9NoM%|mhZe^F1R_v|AVfeSC>CTG#jqq=R%MBmC4@~xhGE7*SW1APiO3Eh z1V}1jN}#Mr01=rAEs;nVGGr-W4Iq_O!f5E1d+(R~?X2g0&*$^}o-^S@dRL6Y&ot_d z2U9sqbpv7GML0+|qSBf>_Z7Zom^{%e5A&3GF`)LO-|@O@LPJ~bQeJ_ag7o0iG&%O>x@9SDlirb{i3f#vE<|ri|-3VxK{jS}(Zv5j* z#VU-{<=<2cW@2xZM9_Fo&22QJvZN{pPG-MINER$f1kZEG*YI@+m`l~7{i|k+084l2 zxT=>ypFK%0werZbe^r0VH^Ev%A3t`^@^Z{#NfkAQrgSI0i#n`CXX1jpKOb*2;h}`Q z>h~!_XP=H}*SfvktH?$xmtSp(Y2NqPvN|i_5PB!d7D-ji66w`{5iX!T@=3$4G@vy= zJ4lmve^*XWIn(+E@ATi~9kZ_QT;;hB^n868z z0o=?B$>1wAf9xNp=(u&Tdjnq0Pj)gqKtoZ?-DGrBQn=HU_(4D zFX}A=5+|Y(=tmdwCHr`O^vZvbk9C0|z5(p`82ud0Ed_O5ob~*IS9LeL*iw98?Lon7 zxA*~WG#bKw-gMEbXZb@g1kZ}aFUP85JyxW0B6rllbcjGu)UX@Hv-2;mMQ|^+3mdH8 z*Ic^mR8tX_wG3Noo-h2Vv37k-J%sDT?aI`^^J*BNp!298%A8hv+|=pY+Ny*yQ4xxI z?eJBC-XQKq#`L6Ff=&Jxrc4m@;cG96{&2BQW@F@1z1e<+2=mKxtTFw8WDvD;Y+*F2 zeESt=NJtorIw6g5R#Tr=R} zrBn>!tHh({iPrlZn7+|#V?9X|)g9Gq+uW^U1(+L(olrQW*rJ6mEG5`2ALYMtdZ=Uu z0p#xy2I({oI2HttE;sVugirdv8kYabdQ{E5uZcm=T@Tqs`A$#9{GpepM)FNMh3DUY zbxs(XuLl-p%w|M4#j1z3!7aLtgvK)nsKfm!49Kep=dGMf%hgBU&m7PDFiJ(1X#5+Q zxXL{GfrR`Xt_$B#7!L(0-BJ>Aq-}Rx?{XOeS2m;CiIbpH&Uq#w4G|Lcqt$Mme~zHX zk?5KghLR3|dH3GPFqP4Qk>2=*Tj>BBxTr3tEKNrCOkUu?4bp|@pml^gj|uY?vX?57fN8A1Cp(=)|Xj&XK=4&F*7p=Varf- zE!hdppbn(8%GD$=AoM0wf0U4>l*y`FiYsrdpt@I+*J9(a*=qHHh$JV^n_k*Jaz4;E z+6b75$!D2z2HUW-rLcz8+`;)fOoU-j^dOdnCPHefh^;m%`f|vmDI=Y|CjkvUG3Z*) zxAJ?xP(9DKp%ifmmK`{b*>MV2FSDv`I$W_*)Q@Sky?G1q<_?pbPC)FMwKO7SEN}7_a=PsF2HBx8M*B=*|rq+bbR`mECA0oyDXkVNr zmWfif6WcQkwkX(<72;s0qkwFZvCtDkMD1>$_v+vE5x8S0s@R}Hw_UaL!ZNbSu*Yrg z40*qSIEOp(h_YHk3Q|FCXUpx}{cXGG#p&=l?M3?!B!UPm-G4thsY45>ny_tmT^ms# zKRA<2k)xUFQp~Sh5)(X(4s$u0wi|v+T4{HVh=`v3{l?`>8&Bbt4LIm+L=-caX_A52LS#oP#o{>O_FBI zI2?d;|3~A%btKP``UwmGMGycG{T~f63IO=(!2F`m-n@I)={gt?__JXqEr~ diff --git a/examples/BarChartVerticalExample.html b/examples/BarChartVerticalExample.html index dca81de2..300c05be 100644 --- a/examples/BarChartVerticalExample.html +++ b/examples/BarChartVerticalExample.html @@ -24,6 +24,9 @@ .height(600) .colors(colors) .stacked(false) + .title("UK Election Results") + .subTitle("Seats 1992 - 2015") + .showLegend(true) .yAxisLabel("Seats") .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); diff --git a/examples/RoseChartExample.html b/examples/RoseChartExample.html index d8062023..cfe98a52 100644 --- a/examples/RoseChartExample.html +++ b/examples/RoseChartExample.html @@ -17,8 +17,6 @@ d3.json("data/nightingale_rose.json").then(function(json) { // Florence Nightingale Data Source: https://pointedanalytics.wordpress.com/2013/07/14/plotting-coxcombs-using-ggplot2/ - - var monthNames = [ "January", "February", "March", "April", "May", "June", diff --git a/src/chart/barChartCircular.js b/src/chart/barChartCircular.js index a86931d3..abeb73c4 100644 --- a/src/chart/barChartCircular.js +++ b/src/chart/barChartCircular.js @@ -21,7 +21,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let startAngle = 0; let endAngle = 270; @@ -46,10 +50,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const radius = (Math.min(chartW, chartH) / data.length) / 2; const innerRadius = radius / 4; @@ -114,7 +119,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["chart", "legend"]; + const layers = ["chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -155,7 +160,7 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) .call(circularAxis) .call(barsCircular) .call(circularSectorLabels) @@ -164,17 +169,34 @@ export default function() { seriesGroup.exit() .remove(); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -226,6 +248,55 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * diff --git a/src/chart/barChartHorizontal.js b/src/chart/barChartHorizontal.js index fd0bc2b7..ef0010b6 100644 --- a/src/chart/barChartHorizontal.js +++ b/src/chart/barChartHorizontal.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let yAxisLabel = null; let stacked = false; @@ -48,10 +51,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -104,7 +108,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -129,39 +133,57 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", (d) => `translate(${xScale(valueMin)},${yScale2(d.key)})`) + .attr("transform", (d) => `translate(${xScale(valueMin)},${yScale2(d.key) + titleH})`) .call(bars); seriesGroup.exit() .remove(); - // X-Axis - const xAxis = d3.axisBottom(xScale); - - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) - .call(xAxis); - - // Y-Axis - const yAxis = d3.axisLeft(yScale2); + // Axis + if (showAxis) { + // X-Axis + const xAxis = d3.axisBottom(xScale); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH + titleH})`) + .call(xAxis); + + // Y-Axis + const yAxis = d3.axisLeft(yScale2); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - containerEnter.select(".yAxis") - .call(yAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -213,6 +235,43 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * @@ -250,7 +309,7 @@ export default function() { }; /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} diff --git a/src/chart/barChartVertical.js b/src/chart/barChartVertical.js index 03b10452..ffd5b449 100644 --- a/src/chart/barChartVertical.js +++ b/src/chart/barChartVertical.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let yAxisLabel = null; let stacked = false; @@ -48,10 +51,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -104,7 +108,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -128,54 +132,85 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", (d) => `translate(${xScale2(d.key)},${chartH - yScale(valueMin)})`) + .attr("transform", (d) => `translate(${xScale2(d.key)},${chartH - yScale(valueMin) + titleH})`) .call(bars); seriesGroup.exit() .remove(); - // X-Axis - const xAxis = d3.axisBottom(xScale2); + // Axis + if (showAxis) { + // X-Axis + const xAxis = d3.axisBottom(xScale2); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH + titleH})`) + .call(xAxis); + + // Y-Axis + const yAxis = d3.axisLeft(yScale); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + + // Y-Axis Label + containerEnter.select(".yAxis") + .selectAll(".yAxisLabel") + .data([yAxisLabel]) + .enter() + .append("text") + .classed("yAxisLabel", true) + .attr("transform", "rotate(-90)") + .attr("y", -40) + .attr("dy", ".71em") + .attr("fill", "currentColor") + .style("text-anchor", "end") + .transition() + .text((d) => d); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) - .call(xAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - // Y-Axis - const yAxis = d3.axisLeft(yScale); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } - containerEnter.select(".yAxis") - .call(yAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - // Y Axis Label - containerEnter.select(".yAxis") - .selectAll(".yAxisLabel") - .data([yAxisLabel]) - .enter() - .append("text") - .classed("yAxisLabel", true) - .attr("transform", "rotate(-90)") - .attr("y", -40) - .attr("dy", ".71em") - .attr("fill", "currentColor") - .style("text-anchor", "end") - .transition() - .text((d) => d); - - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -264,7 +299,43 @@ export default function() { }; /** - * Y Axix Label Getter / Setter + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} diff --git a/src/chart/bubbleChart.js b/src/chart/bubbleChart.js index d0f10f3c..1a5f49ab 100644 --- a/src/chart/bubbleChart.js +++ b/src/chart/bubbleChart.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let yAxisLabel = null; let minRadius = 3; @@ -49,10 +52,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const { rowKeys, coordinatesExtent: { x: xExtent, y: yExtent }, valueExtent } = dataTransform(data).summary(); @@ -95,7 +99,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend", "zoomArea", "clipArea"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -127,37 +131,56 @@ export default function() { seriesGroup.exit() .remove(); - // X-Axis - const xAxis = d3.axisBottom(xScale); + // Axis + if (showAxis) { + // X-Axis + const xAxis = d3.axisBottom(xScale); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH + titleH})`) + .call(xAxis) + .selectAll("text") + .style("text-anchor", "end") + .attr("dx", "-.8em") + .attr("dy", ".15em") + .attr("transform", "rotate(-65)"); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) - .call(xAxis) - .selectAll("text") - .style("text-anchor", "end") - .attr("dx", "-.8em") - .attr("dy", ".15em") - .attr("transform", "rotate(-65)"); + // Y-Axis + const yAxis = d3.axisLeft(yScale); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - // Y-Axis - const yAxis = d3.axisLeft(yScale); - containerEnter.select(".yAxis") - .call(yAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .sizeScale(sizeScale) - .height(legendH) - .width(legendW) - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .sizeScale(sizeScale) + .height(legendH) + .width(legendW) + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Zoom Clip Path const clipPath = containerEnter.select(".clipArea") @@ -274,6 +297,43 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * @@ -287,7 +347,7 @@ export default function() { }; /** - * Y Axis Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {string} _v - Label text. * @returns {*} diff --git a/src/chart/candlestickChart.js b/src/chart/candlestickChart.js index a1bd18fb..c9d7dfee 100644 --- a/src/chart/candlestickChart.js +++ b/src/chart/candlestickChart.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let yAxisLabel = null; @@ -46,10 +49,11 @@ export default function() { })(selection); selection.each(function(data) { - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); data = data[0]; // FIXME: Convert input data to support multi-series. @@ -106,7 +110,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["zoomArea", "xAxis axis", "yAxis axis", "chart", "legend"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -136,54 +140,71 @@ export default function() { seriesGroup.exit() .remove(); - // X Axis - const xAxis = d3.axisBottom(xScale) - .tickFormat(d3.timeFormat("%d-%b-%y")); - - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) - .call(xAxis) - .selectAll("text") - .style("text-anchor", "end") - .attr("dx", "-.8em") - .attr("dy", ".15em") - .attr("transform", "rotate(-65)"); - - // Y-Axis - const yAxis = d3.axisLeft(yScale); - - containerEnter.select(".yAxis") - .call(yAxis); - - // Y-Axis Label - containerEnter.select(".yAxis") - .selectAll(".yAxisLabel") - .data([yAxisLabel]) - .enter() - .append("text") - .classed("yAxisLabel", true) - .attr("transform", "rotate(-90)") - .attr("y", -40) - .attr("dy", ".71em") - .attr("fill", "currentColor") - .style("text-anchor", "end") - .transition() - .text((d) => d); - - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + // Axis + if (showAxis) { + // X Axis + const xAxis = d3.axisBottom(xScale).tickFormat(d3.timeFormat("%d-%b-%y")); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH + titleH})`) + .call(xAxis) + .selectAll("text") + .style("text-anchor", "end") + .attr("dx", "-.8em") + .attr("dy", ".15em") + .attr("transform", "rotate(-65)"); + + // Y-Axis + const yAxis = d3.axisLeft(yScale); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + + // Y-Axis Label + containerEnter.select(".yAxis") + .selectAll(".yAxisLabel") + .data([yAxisLabel]) + .enter() + .append("text") + .classed("yAxisLabel", true) + .attr("transform", "rotate(-90)") + .attr("y", -40) + .attr("dy", ".71em") + .attr("fill", "currentColor") + .style("text-anchor", "end") + .transition() + .text((d) => d); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("line") - .opacity(opacity); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + + // Legend + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("line") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Experimental Brush const brush = d3.brushX() @@ -252,6 +273,43 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * @@ -277,7 +335,7 @@ export default function() { }; /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} diff --git a/src/chart/donutChart.js b/src/chart/donutChart.js index 5c95bc9f..6eb30a41 100644 --- a/src/chart/donutChart.js +++ b/src/chart/donutChart.js @@ -22,7 +22,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let startAngle = 0; let endAngle = 360; @@ -47,10 +51,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const radius = (Math.min(chartW, chartH) / data.length) / 2; const innerRadius = radius / 2; @@ -113,7 +118,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["chart", "legend"]; + const layers = ["chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -144,24 +149,41 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) .call(donut) .call(donutLabels); seriesGroup.exit() .remove(); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -213,6 +235,55 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * diff --git a/src/chart/heatMap.js b/src/chart/heatMap.js index d17f8eea..cb8e254a 100644 --- a/src/chart/heatMap.js +++ b/src/chart/heatMap.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let thresholds; @@ -47,10 +50,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const { rowKeys, columnKeys, thresholds: tmpThresholds } = dataTransform(data).summary(); @@ -93,7 +97,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -118,42 +122,61 @@ export default function() { .append("g") .attr("class", "seriesGroup") .merge(seriesGroup) - .attr("transform", (d) => `translate(0,${yScale(d.key)})`) + .attr("transform", (d) => `translate(0,${yScale(d.key) + titleH})`) .call(heatMapRow); seriesGroup.exit() .remove(); - // X-Axis - const xAxis = d3.axisTop(xScale); - - containerEnter.select(".xAxis") - .call(xAxis) - .selectAll("text") - .attr("y", 0) - .attr("x", -8) - .attr("transform", "rotate(60)") - .style("text-anchor", "end"); - - // Y-Axis - const yAxis = d3.axisLeft(yScale); + // Axis + if (showAxis) { + // X-Axis + const xAxis = d3.axisTop(xScale); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${titleH})`) + .call(xAxis) + .selectAll("text") + .attr("y", 0) + .attr("x", -8) + .attr("transform", "rotate(60)") + .style("text-anchor", "end"); + + // Y-Axis + const yAxis = d3.axisLeft(yScale); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - containerEnter.select(".yAxis") - .call(yAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -205,6 +228,43 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * @@ -241,6 +301,8 @@ export default function() { return this; }; + + /** * Transition Getter / Setter * diff --git a/src/chart/heatMapRadial.js b/src/chart/heatMapRadial.js index 1f7076e2..564f5cd7 100644 --- a/src/chart/heatMapRadial.js +++ b/src/chart/heatMapRadial.js @@ -21,7 +21,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let startAngle = 0; let endAngle = 270; let thresholds; @@ -47,11 +51,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const radius = Math.min(chartW, chartH) / 2; const innerRadius = radius / 4; @@ -95,7 +99,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["axis", "chart", "legend"]; + const layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -131,7 +135,7 @@ export default function() { .append("g") .attr("class", "seriesGroup") .merge(seriesGroup) - .attr("transform", `translate(${chartW / 2},${chartH / 2})`) + .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) .call(heatMapRing) .call(circularRingLabels); @@ -143,16 +147,33 @@ export default function() { .attr("transform", `translate(${chartW / 2},${chartH / 2})`) .call(circularSectorLabels); - // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .opacity(opacity); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + // Legend + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -204,6 +225,55 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + + /** * Opacity Getter / Setter * diff --git a/src/chart/lineChart.js b/src/chart/lineChart.js index b511846e..a361f8ae 100644 --- a/src/chart/lineChart.js +++ b/src/chart/lineChart.js @@ -22,7 +22,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let yAxisLabel = null; @@ -47,10 +50,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); // Create Scales and Axis @@ -109,7 +113,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend", "zoomArea", "clipArea"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -150,47 +154,65 @@ export default function() { seriesGroup.exit() .remove(); - // X-Axis + // Axis const xAxis = d3.axisBottom(xScale); - - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) - .call(xAxis); - - // Y-Axis const yAxis = d3.axisLeft(yScale); + if (showAxis) { + // X-Axis + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH + titleH})`) + .call(xAxis); - containerEnter.select(".yAxis") - .call(yAxis); + // Y-Axis + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${titleH})`) + .call(yAxis); + + // Y-Axis Label + containerEnter.select(".yAxis") + .selectAll(".yAxisLabel") + .data([yAxisLabel]) + .enter() + .append("text") + .classed("yAxisLabel", true) + .attr("transform", "rotate(-90)") + .attr("y", -40) + .attr("dy", ".71em") + .attr("fill", "currentColor") + .style("text-anchor", "end") + .text((d) => d); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - // Y-Axis Label - containerEnter.select(".yAxis") - .selectAll(".yAxisLabel") - .data([yAxisLabel]) - .enter() - .append("text") - .classed("yAxisLabel", true) - .attr("transform", "rotate(-90)") - .attr("y", -40) - .attr("dy", ".71em") - .attr("fill", "currentColor") - .style("text-anchor", "end") - .text((d) => d); - - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("line") - .opacity(opacity); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + // Legend + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("line") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } // Zoom Clip Path const clipPath = containerEnter.select(".clipArea") @@ -302,6 +324,42 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -326,8 +384,9 @@ export default function() { return this; }; + /** - * Y Axix Label Getter / Setter + * Y-Axis Label Getter / Setter * * @param {number} _v - Label text. * @returns {*} diff --git a/src/chart/polarAreaChart.js b/src/chart/polarAreaChart.js index c5a93220..d94fe0f5 100644 --- a/src/chart/polarAreaChart.js +++ b/src/chart/polarAreaChart.js @@ -21,7 +21,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let startAngle = 0; let endAngle = 360; @@ -46,10 +50,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const radius = (Math.min(chartW, chartH) / data.length) / 2; @@ -112,7 +117,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["chart", "legend"]; + const layers = ["chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -148,7 +153,7 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) .call(circularAxis) .call(circularSectorLabels) .call(polarArea); @@ -156,17 +161,34 @@ export default function() { seriesGroup.exit() .remove(); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } + // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -218,6 +240,54 @@ export default function() { return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * diff --git a/src/chart/punchCard.js b/src/chart/punchCard.js index 02936d29..35701179 100644 --- a/src/chart/punchCard.js +++ b/src/chart/punchCard.js @@ -21,7 +21,10 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; let showAxis = true; let minRadius = 2; let maxRadius = 20; @@ -48,10 +51,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const { rowKeys, columnKeys, valueExtent } = dataTransform(data).summary(); @@ -96,7 +100,7 @@ export default function() { .attr("width", chartW) .attr("height", chartH); - const layers = ["xAxis axis", "yAxis axis", "chart", "legend"]; + const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -122,42 +126,61 @@ export default function() { .append("g") .attr("class", "seriesGroup") .merge(seriesGroup) - .attr("transform", (d) => `translate(0,${yScale(d.key)})`) + .attr("transform", (d) => `translate(0,${yScale(d.key) + titleH})`) .call(proportionalAreaCircles); seriesGroup.exit() .remove(); - // X-Axis - const xAxis = d3.axisTop(xScale); - - containerEnter.select(".xAxis") - .call(xAxis) - .selectAll("text") - .attr("y", 0) - .attr("x", -8) - .attr("transform", "rotate(60)") - .style("text-anchor", "end"); - - // Y-Axis - const yAxis = d3.axisLeft(yScale); + // Axis + if (showAxis) { + // X-Axis + const xAxis = d3.axisTop(xScale); + containerEnter.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) + .call(xAxis) + .selectAll("text") + .attr("y", 0) + .attr("x", -8) + .attr("transform", "rotate(60)") + .style("text-anchor", "end"); + + // Y-Axis + const yAxis = d3.axisLeft(yScale); + containerEnter.select(".yAxis") + .attr("transform", `translate(0,${chartH})`) + .call(yAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } - containerEnter.select(".yAxis") - .call(yAxis); + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); - containerEnter.selectAll(".axis") - .attr("opacity", showAxis ? 1 : 0); + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .sizeScale(sizeScale) - .height(legendH) - .width(legendW) - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .sizeScale(sizeScale) + .height(legendH) + .width(legendW) + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -209,6 +232,30 @@ export default function() { return this; }; + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -269,6 +316,18 @@ export default function() { return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + /** * Transition Getter / Setter * diff --git a/src/chart/radarChart.js b/src/chart/radarChart.js index 70a06798..7dbdfb3b 100644 --- a/src/chart/radarChart.js +++ b/src/chart/radarChart.js @@ -21,7 +21,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let startAngle = 0; let endAngle = 360; @@ -46,10 +50,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const radius = Math.min(chartW, chartH) / 2.5; @@ -90,7 +95,7 @@ export default function() { .attr("height", chartH); // Update the chart dimensions and container and layer groups - const layers = ["axis", "chart", "legend"]; + const layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -130,24 +135,46 @@ export default function() { .style("stroke", (d) => colorScale(d.key)) .merge(seriesGroup) .call(radarArea) - .attr("transform", `translate(${chartW / 2},${chartH / 2})`); + .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`); - containerEnter.select(".axis") - .attr("transform", `translate(${chartW / 2},${chartH / 2})`) - .call(circularSectorLabels) - .call(circularAxis); + // Axis + if (showAxis) { + containerEnter.select(".axis") + .attr("transform", `translate(${chartW / 2},${chartH / 2 + titleH})`) + .call(circularSectorLabels) + .call(circularAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -199,6 +226,54 @@ export default function() { return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * diff --git a/src/chart/roseChart.js b/src/chart/roseChart.js index 0283e6be..c10de313 100644 --- a/src/chart/roseChart.js +++ b/src/chart/roseChart.js @@ -21,7 +21,11 @@ export default function() { let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); /* Other Customisation Options */ + let title = null; + let subTitle = null; let opacity = 1; + let showLegend = false; + let showAxis = true; let stacked = true; /** @@ -45,10 +49,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart - const legendW = 120; - const legendPad = 15; - const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); - const chartH = Math.max((height - margin.top - margin.bottom), 100); + const legendW = showLegend ? 120 : 0; + const legendPad = showLegend ? 15 : 0; + const titleH = title ? 40 : 0; + const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); const legendH = Math.max(chartH / 2, 100); const radius = Math.min(chartW, chartH) / 2; const innerRadius = 0; @@ -92,7 +97,7 @@ export default function() { .attr("height", chartH); // Update the chart dimensions and container and layer groups - const layers = ["axis", "chart", "legend"]; + const layers = ["axis", "chart", "title", "legend"]; containerEnter.selectAll("g") .data(layers) .enter() @@ -130,7 +135,7 @@ export default function() { .append("g") .classed("seriesGroup", true) .merge(seriesGroup) - .attr("transform", `translate(${chartW / 2},${chartH / 2})`) + .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) .each(function() { d3.select(this).call(roseChartSector); }); @@ -138,23 +143,44 @@ export default function() { seriesGroup.exit() .remove(); - // Outer Ring Labels - containerEnter.select(".axis") - .attr("transform", `translate(${chartW / 2},${chartH / 2})`) - .call(circularSectorLabels) - .call(circularAxis); + // Axis + if (showAxis) { + containerEnter.select(".axis") + .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) + .call(circularSectorLabels) + .call(circularAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } + + // Title + if (title) { + const titleComponent = component.title() + .mainText(title) + .subText(subTitle); + + containerEnter.select(".title") + .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") + .call(titleComponent); + } else { + containerEnter.selectAll(".title").selectAll('*').remove(); + } // Legend - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("rect") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + if (showLegend) { + const legend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("rect") + .opacity(opacity); + + containerEnter.select(".legend") + .attr("transform", `translate(${chartW + legendPad},0)`) + .call(legend); + } else { + containerEnter.select(".legend").selectAll('*').remove(); + } }); } @@ -206,6 +232,54 @@ export default function() { return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function(_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function(_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function(_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function(_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * diff --git a/src/component.js b/src/component.js index fd76b2d9..425ef1a0 100644 --- a/src/component.js +++ b/src/component.js @@ -25,6 +25,7 @@ import componentProportionalAreaCircles from "./component/proportionalAreaCircle import componentRadarArea from "./component/radarArea.js"; import componentRoseChartSector from "./component/roseChartSector.js"; import componentScatterPlot from "./component/scatterPlot.js"; +import componentTitle from "./component/title.js"; export default { barsCircular: componentBarsCircular, @@ -53,5 +54,6 @@ export default { proportionalAreaCircles: componentProportionalAreaCircles, radarArea: componentRadarArea, roseChartSector: componentRoseChartSector, - scatterPlot: componentScatterPlot + scatterPlot: componentScatterPlot, + title: componentTitle }; diff --git a/src/component/creditTag.js b/src/component/creditTag.js deleted file mode 100644 index 296ca2ed..00000000 --- a/src/component/creditTag.js +++ /dev/null @@ -1,63 +0,0 @@ -import * as d3 from "d3"; - -/** - * Reusable Credit Tag Component - * - * @module - */ -export default function() { - - /* Default Properties */ - let text = "d3-ez.net"; - let href = "http://d3-ez.net"; - - /** - * Constructor - * - * @constructor - * @alias creditTag - * @param {d3.selection} selection - The chart holder D3 selection. - */ - function my(selection) { - const creditTag = selection.selectAll("#creditTag") - .data([0]) - .enter() - .append("g") - .attr("id", "creditTag"); - - const creditText = creditTag.append("text") - .text(text) - .style("text-anchor", "end") - .attr("baseline", "middle") - .attr("xlink:href", href) - .on("click", function() { - window.open(href); - }); - } - - /** - * Text Getter / Setter - * - * @param {string} _v - Credit tag text. - * @returns {*} - */ - my.text = function(_v) { - if (!arguments.length) return text; - text = _v; - return this; - }; - - /** - * Link Getter / Setter - * - * @param {string} _v - Credit tag link. - * @returns {*} - */ - my.href = function(_v) { - if (!arguments.length) return href; - href = _v; - return this; - }; - - return my; -} diff --git a/src/component/title.js b/src/component/title.js index 0363ea17..c23178f0 100644 --- a/src/component/title.js +++ b/src/component/title.js @@ -32,14 +32,16 @@ export default function() { .enter() .append("text") .classed("title", true) - .text((d) => d); + .text((d) => d) + .attr("fill", "currentColor"); const title = titleGroup.select(".title").text(mainText); titleGroup.selectAll(".subTitle").data([subText]) .enter() .append("text") .classed("subTitle", true) - .text((d) => d); + .text((d) => d) + .attr("fill", "currentColor"); const subTitle = titleGroup.select(".subTitle").text(subText); // Centre Text From 2344b5c68bf3c810037e658eb6161e6304210658 Mon Sep 17 00:00:00 2001 From: James Saunders Date: Wed, 22 May 2024 06:02:51 +0100 Subject: [PATCH 3/5] fix: zoomArea and clipPath transform. --- dist/d3-ez.js | 385 +++++++++++++++++++++++++++---- dist/d3-ez.min.js | 2 +- dist/d3-ez.zip | Bin 53819 -> 54012 bytes examples/BubbleChartExample.html | 3 + examples/LineChartExample.html | 3 + src/chart/bubbleChart.js | 34 +-- src/chart/lineChart.js | 21 +- 7 files changed, 378 insertions(+), 70 deletions(-) diff --git a/dist/d3-ez.js b/dist/d3-ez.js index 46c6c281..176a2de4 100644 --- a/dist/d3-ez.js +++ b/dist/d3-ez.js @@ -5171,6 +5171,7 @@ var subTitle = null; var opacity = 1; var showLegend = false; + var showAxis = true; var startAngle = 0; var endAngle = 270; @@ -5346,6 +5347,18 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + /** * Title Getter / Setter * @@ -5927,6 +5940,7 @@ colors = _v; return this; }; + /** * Show Legend Getter / Setter * @@ -6135,21 +6149,23 @@ var bubbles = component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { + var seriesGroup = containerEnter.select(".chart").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll(".seriesGroup").data(function (d) { return d; }); seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(bubbles); seriesGroup.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale); + var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - var _xAxis = d3__namespace.axisBottom(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(_xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); // Y-Axis - var _yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(_yAxis); + containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); } else { containerEnter.selectAll(".axis").selectAll('*').remove(); } @@ -6171,7 +6187,9 @@ } // Zoom Clip Path - var clipPath = containerEnter.select(".clipArea").selectAll("defs").data([0]); + var clipPath = containerEnter.select(".clipArea").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll("defs").data([0]); clipPath.enter().append("defs").append("clipPath").attr("id", "plotAreaClip").append("rect").attr("width", chartW).attr("height", chartH).merge(clipPath).select("clipPath").select("rect").attr("width", chartW).attr("height", chartH); // Zoom Event Area @@ -6179,17 +6197,21 @@ function zoomed(e) { var xScaleZoomed = e.transform.rescaleX(xScale); var yScaleZoomed = e.transform.rescaleY(yScale); - xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); - yAxis.scale(yScaleZoomed); - containerEnter.select(".yAxis").call(yAxis); + if (showAxis) { + xAxis.scale(xScaleZoomed); + containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + yAxis.scale(yScaleZoomed); + containerEnter.select(".yAxis").call(yAxis); + } bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ ease: d3__namespace.easeLinear, duration: 0 }); containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles); } - var zoomArea = containerEnter.select(".zoomArea").selectAll("rect").data([0]); + var zoomArea = containerEnter.select(".zoomArea").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll("rect").data([0]); zoomArea.enter().append("rect").attr("fill", "none").attr("pointer-events", "all").merge(zoomArea).call(zoom).attr("width", chartW).attr("height", chartH); }); } @@ -6689,6 +6711,7 @@ var subTitle = null; var opacity = 1; var showLegend = false; + var showAxis = true; var startAngle = 0; var endAngle = 360; @@ -6857,6 +6880,18 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + /** * Title Getter / Setter * @@ -6958,6 +6993,7 @@ var subTitle = null; var opacity = 1; var showLegend = false; + var showAxis = true; var startAngle = 0; var endAngle = 270; var thresholds; @@ -7109,6 +7145,18 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + /** * Title Getter / Setter * @@ -7530,9 +7578,9 @@ var legendW = showLegend ? 120 : 0; var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); - var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); + var chartH = Math.max(height - margin.top - margin.bottom - titleH, 100); + var legendH = Math.max(height / 2, 100); // Create Scales and Axis var _dataTransform$summar = dataTransform(data).summary(), @@ -7576,7 +7624,9 @@ var scatterPlot = component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { + var seriesGroup = containerEnter.select(".chart").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll(".seriesGroup").data(function (d) { return d; }); seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot); @@ -7587,11 +7637,9 @@ var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); // Y-Axis - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); // Y-Axis Label @@ -7619,15 +7667,19 @@ } // Zoom Clip Path - var clipPath = containerEnter.select(".clipArea").selectAll("defs").data([0]); + var clipPath = containerEnter.select(".clipArea").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll("defs").data([0]); clipPath.enter().append("defs").append("clipPath").attr("id", "plotAreaClip").append("rect").attr("width", chartW).attr("height", chartH).merge(clipPath).select("clipPath").select("rect").attr("width", chartW).attr("height", chartH); // Zoom Event Area var zoom = d3__namespace.zoom().extent([[0, 0], [chartW, chartH]]).scaleExtent([1, 8]).translateExtent([[0, 0], [chartW, chartH]]).on("zoom", zoomed); function zoomed(e) { var xScaleZoomed = e.transform.rescaleX(xScale); - xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis").call(xAxis); + if (showAxis) { + xAxis.scale(xScaleZoomed); + containerEnter.select(".xAxis").call(xAxis); + } lineChart.xScale(xScaleZoomed).transition({ ease: d3__namespace.easeLinear, duration: 0 @@ -7638,8 +7690,10 @@ }); containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot); } - var zoomArea = containerEnter.select(".zoomArea").selectAll(".rect").data([0]); - zoomArea.enter().append("rect").classed("zoomArea", true).attr("fill", "none").attr("pointer-events", "all").merge(zoomArea).call(zoom).attr("width", chartW).attr("height", chartH); + var zoomArea = containerEnter.select(".zoomArea").attr("transform", function (d) { + return "translate(0,".concat(titleH, ")"); + }).selectAll("rect").data([0]); + zoomArea.enter().append("rect").attr("fill", "none").attr("pointer-events", "all").merge(zoomArea).call(zoom).attr("width", chartW).attr("height", chartH); }); } @@ -7822,7 +7876,13 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); + + /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; + var showAxis = true; var startAngle = 0; var endAngle = 360; @@ -7848,11 +7908,12 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 0; - var legendPad = 0; - var titleH = 0; + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); + var legendH = Math.max(chartH / 2, 100); var radius = Math.min(chartW, chartH) / data.length / 2; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, @@ -7916,12 +7977,18 @@ seriesGroup.exit().remove(); // Title - { + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { containerEnter.selectAll(".title").selectAll('*').remove(); } // Legend - { + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { containerEnter.select(".legend").selectAll('*').remove(); } }); @@ -7975,6 +8042,54 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -8046,7 +8161,12 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); + + /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; var showAxis = true; var minRadius = 2; var maxRadius = 20; @@ -8074,11 +8194,12 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 0; - var legendPad = 0; - var titleH = 0; + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); + var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, columnKeys = _dataTransform$summar.columnKeys, @@ -8125,12 +8246,18 @@ } // Title - { + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { containerEnter.selectAll(".title").selectAll('*').remove(); } // Legend - { + if (showLegend) { + var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { containerEnter.select(".legend").selectAll('*').remove(); } }); @@ -8184,6 +8311,30 @@ return this; }; + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -8244,6 +8395,18 @@ return this; }; + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + /** * Transition Getter / Setter * @@ -8303,7 +8466,13 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); + + /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; + var showAxis = true; var startAngle = 0; var endAngle = 360; @@ -8329,11 +8498,12 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 0; - var legendPad = 0; - var titleH = 0; + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); + var legendH = Math.max(chartH / 2, 100); var radius = Math.min(chartW, chartH) / 2.5; var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -8374,15 +8544,27 @@ }).style("stroke", function (d) { return colorScale(d.key); }).merge(seriesGroup).call(radarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")); - containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels).call(circularAxis); + + // Axis + if (showAxis) { + containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(circularSectorLabels).call(circularAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } // Title - { + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { containerEnter.selectAll(".title").selectAll('*').remove(); } // Legend - { + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { containerEnter.select(".legend").selectAll('*').remove(); } }); @@ -8436,6 +8618,54 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * @@ -8507,7 +8737,13 @@ duration: 0 }; var dispatch = d3__namespace.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); + + /* Other Customisation Options */ + var title = null; + var subTitle = null; var opacity = 1; + var showLegend = false; + var showAxis = true; var stacked = true; /** @@ -8532,11 +8768,12 @@ }(selection); selection.each(function (data) { // Set up margins and dimensions for the chart - var legendW = 0; - var legendPad = 0; - var titleH = 0; + var legendW = showLegend ? 120 : 0; + var legendPad = showLegend ? 15 : 0; + var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); + var legendH = Math.max(chartH / 2, 100); var radius = Math.min(chartW, chartH) / 2; var innerRadius = 0; var _dataTransform$summar = dataTransform(data).summary(), @@ -8582,16 +8819,26 @@ }); seriesGroup.exit().remove(); - // Outer Ring Labels - containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels).call(circularAxis); + // Axis + if (showAxis) { + containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(circularSectorLabels).call(circularAxis); + } else { + containerEnter.selectAll(".axis").selectAll('*').remove(); + } // Title - { + if (title) { + var titleComponent = component.title().mainText(title).subText(subTitle); + containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + } else { containerEnter.selectAll(".title").selectAll('*').remove(); } // Legend - { + if (showLegend) { + var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + } else { containerEnter.select(".legend").selectAll('*').remove(); } }); @@ -8645,6 +8892,54 @@ return this; }; + /** + * Show Axis Getter / Setter + * + * @param {Boolean} _v - Show axis true / false. + * @returns {*} + */ + my.showAxis = function (_v) { + if (!arguments.length) return showAxis; + showAxis = _v; + return this; + }; + + /** + * Show Legend Getter / Setter + * + * @param {Boolean} _v - Show legend true / false. + * @returns {*} + */ + my.showLegend = function (_v) { + if (!arguments.length) return showLegend; + showLegend = _v; + return this; + }; + + /** + * Title Getter / Setter + * + * @param {string} _v - Title text. + * @returns {*} + */ + my.title = function (_v) { + if (!arguments.length) return title; + title = _v; + return this; + }; + + /** + * SubTitle Getter / Setter + * + * @param {string} _v - SubTitle text. + * @returns {*} + */ + my.subTitle = function (_v) { + if (!arguments.length) return subTitle; + subTitle = _v; + return this; + }; + /** * Opacity Getter / Setter * diff --git a/dist/d3-ez.min.js b/dist/d3-ez.min.js index ac1a9519..74c0f6c9 100644 --- a/dist/d3-ez.min.js +++ b/dist/d3-ez.min.js @@ -1 +1 @@ -(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(require("d3")):typeof define==="function"&&define.amd?define(["d3"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.d3=global.d3||{},global.d3.ez=factory(global.d3))})(this,function(d3){"use strict";function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n.default=e;return Object.freeze(n)}var d3__namespace=_interopNamespaceDefault(d3);var name="d3-ez";var version$1="4.0.3";var description="D3 Easy Reusable Chart Library";var license$1="GPL-2.0";var keywords=["d3","d3-module","visualization","chart","graph","data","svg","dataviz"];var homepage="http://d3-ez.net";var author$1="James Saunders (james@saunders-family.net)";var repository={type:"git",url:"https://github.com/jamesleesaunders/d3-ez.git"};var bugs={url:"https://github.com/jamesleesaunders/d3-ez/issues"};var type="module";var files=["dist/**/*.js","src/**/*.js"];var module="src/index.js";var main="src/index.js";var jsdelivr="dist/d3-ez.min.js";var unpkg="dist/d3-ez.min.js";var exports$1={umd:"./dist/d3-ez.min.js",default:"./src/index.js"};var scripts={build:"make",pretest:"make",test:"tape 'test/**/*Test.js' | tap-arc","build:docs":"jsdoc -c config/jsdoc.conf.json","deploy:docs":"npm run build:docs && gh-pages -d docs"};var devDependencies={"@babel/core":"^7.24.5","@babel/plugin-external-helpers":"^7.24.1","@babel/plugin-transform-object-assign":"^7.24.1","@babel/plugin-syntax-import-attributes":"^7.24.1","@babel/preset-env":"^7.24.5","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3",eslint:"^9.3.0","gh-pages":"^6.1.1",jsdoc:"^4.0.3",jsdom:"^24.0.0",rollup:"^4.17.2","tap-arc":"^1.2.2",tape:"^5.7.5","toast-jsdoc":"^1.0.2","uglify-js":"^3.17.4",vows:"^0.8.3"};var dependencies={d3:"^7.9.0"};var peerDependencies={d3:"^7.9.0"};var packageJson={name:name,version:version$1,description:description,license:license$1,keywords:keywords,homepage:homepage,author:author$1,repository:repository,bugs:bugs,type:type,files:files,module:module,main:main,jsdelivr:jsdelivr,unpkg:unpkg,exports:exports$1,scripts:scripts,devDependencies:devDependencies,dependencies:dependencies,peerDependencies:peerDependencies};function componentBarsCircular(){var classed="barsCircular";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var startAngle=d3__namespace.min(yScale.range());var arc=d3__namespace.arc().startAngle(startAngle*Math.PI/180).endAngle(function(d){return yScale(d.value)*Math.PI/180}).outerRadius(function(d){return xScale(d.key)+xScale.bandwidth()}).innerRadius(function(d){return xScale(d.key)}).cornerRadius(cornerRadius);var arcTween=function arcTween(d,j){this._current||(this._current={key:d.key,value:0});var i=d3__namespace.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("path").classed("bar",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("stroke-width","1px");bars.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentBarsHorizontal(){var classed="bars";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("rect").classed("bar",true).attr("stroke-width","1px").attr("rx",cornerRadius).attr("ry",cornerRadius).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("x",0).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("width",yScale.bandwidth()).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).attr("width",function(d){return xScale(d.value)});bars.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return my};my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l);else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity/2);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(title){var _titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(_titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(bubbles);seriesGroup.exit().remove();if(showAxis){var _xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(_xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var _yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(_yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);containerEnter.select(".yAxis").call(yAxis);bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles)}var zoomArea=containerEnter.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var candleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return[d]});seriesGroup.enter().append("g").attr("class","seriesGroup").merge(seriesGroup).call(candleSticks);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);containerEnter.select(".zoomArea").call(brush);function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var lineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var scatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis);lineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});scatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot)}var zoomArea=containerEnter.select(".zoomArea").selectAll(".rect").data([0]);zoomArea.enter().append("rect").classed("zoomArea",true).attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=0;var legendPad=0;var titleH=0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity/2);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(title){var _titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(_titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(bubbles);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);if(showAxis){xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);containerEnter.select(".yAxis").call(yAxis)}bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles)}var zoomArea=containerEnter.select(".zoomArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var candleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return[d]});seriesGroup.enter().append("g").attr("class","seriesGroup").merge(seriesGroup).call(candleSticks);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);containerEnter.select(".zoomArea").call(brush);function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var lineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var scatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);if(showAxis){xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis)}lineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});scatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot)}var zoomArea=containerEnter.select(".zoomArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i9f9WXv5yVF+X zIr0!05&6r=tvh$V^X_=TPCNVzKk)Zo{c&-YX5QcYVVHXd{x}K3EcXsS;P+p1_T4`5 zhfzH3Bw=wxat+eaG>cBp3U6QhYV0???e6wnqb!m>js{_phu$x5UVhq!kge~&Yn+Ue zK@p{i*Eo&SV}Czxc_;p$NV93v`}cRZis>j!PrPt4O0y#O9zJ~N-A<1`goEO?_kaG6 z$D)U6Fpfj-dyK{EPNF0XZhMbdL`P)jWjC_$U*jkX8@Gd<+s&re7d6q$v?AU#QWcHp z_`?9or5}w$%zmV_7|LN}KwYdv`u*-K$}J64BKz#a`+wsPFAw9B7VnWxumh#Z-w^-r zFD)6+2|p{8iQs0lx%b_dW}|?@p)A?Y5asdx%b_7w?zE=C@I1$9sP>q zH}VJJ)9}O}$3-I~BXaALpLq#X_?iquXOM+{5jK)>97BD#Zbc^^PkDugJz>i-kkVz9-v@9hZg0I7__n@Z-^* z_l2hW!s;cT^aFn;9YzeaKEyzlm$mLB3&YRQb$^)t3k(4vbm#s1g!epT+q(0^`}c2t zd;9GD`#W2eLjyy)#|psAkZ*%5?~Oeg_z6}Z5b&oS#@y|6J3BlkVEu>WLEO_F@0p)Z zy|>{w$KLSv&-|?LUPi~6pG|otwvK6Wu$bH1oi2}q!9Gv302kXKPz>$ZXwkoIx*F-{ zr++9P`*HNy$C_!-0IQ-uPcwgX#`5`vPk-f~PG!)i=<~*Rw~kn)XX!8;`KN^Nv!WRF zx3&oV$f|h5D2tgGM@M7(nNAw#pgk#GuPzgQU@#CA)`Cci!8_<0!@=hyF)8F-NdO!@N*~*nfB7 zL%-g}57JZb;0Kg^+xx?Vn6{q{Xd7sWK|08>8PE^uz-te@L7JRIr(5K^gCCHWPy8Sp z#pzV!Nk&628z-JD3HP7Vvo_A~+-nCONhwJR!cR}bQ3$jqgDB*rZT$7vKMv!qL7IhF z?0^5**}mJ^rB$-HQ9M44l6E)&wttfNar-Qcfm7x(dC!)-$owP+W~?lPScJh#f4QcFL#p zJjbAJ=RPz{oj|486YS7Ve*mqO2}fa=S*BV=Vt?=vy60~>*;+6i?oEBNLy^|dO{p(; zCk$0Kq`ta4VI13c`f>xpP=CJT^u^wTp?pi|i_HN;=_b$@n*kXJ!P@%@n{N^Ba0;d3 ze_Mj%1#cwV2C~3D<%DFOQHIx-oDV}8 z&+2pLMf*ux^nH^H&@_4iJ=Pq|erb5gSbld4_}zE6Kz^4(L6i-~F@Fs46ZjvM5cX48 z*GZTZn3AOaEA0vVy`_kk1D+7_=Axhmk@h?gcRVK3cuZ=;S%w989?q#j47?^pX>j9M z$&dR5O)xna_;Dycr~2n0jnhmIBFrpe@(*c)=Y>8_GEEfgVAx9#CVdT9%6@-Y+5ana?R_Wdc7h6$W9AW=Gc6P%6ITz4D8*&YKtBme;%AZFXQm(nN|9r?lJS zItguEBj|j>sejTm3)0xdYkOKbL=O~lq5?P ztd^lpy@vWx?(lc#VVD@5O~Ozm=GF7CM$qy;Xe~kIxbuE6&NARgs987kkcVnw4>uU# z3)tS48ce#I@c~Z6p8UXOMWq=)bh%L)qxP&-3L2`K+kb3O)aa_wtS@C(7frp*ECEiq z2qM+IUu36i9sAn|RICuz4Dt%^G)u=LZH;K`G@;vXLPY zskW2z#tux0xKYX7s4*kdy66k7Xuvq*a+PqtYOg?_c0nMwJMU%qDU7{e%svv^9PcKj z(^w}x#(y@Pb~aEQ82Ckl?QP9w2Nm3Ti{~&nQhOl8*#sQLAK~^5;WfSNG6hIm>gnxWPKQk#rjp1R?aiC>2HUg*(mOuTZ zjF5+sFP;u$*;u2>I%-mevT$x$P@BmVP$2uoV?j7bQMFz}MYO0k*@jTY>5V2E<{X+t zMZ@UIyqH3v8?uG4$7bOWW{%j)*i`&t2tB`hq(QLH7cezpTRk8@bOA__X)y5@@BJqb zWPea@AsZ)8M#;>*f8Y6{h%v)yhwh8&2G)50N%Rn!O27BB)A10NN8X9UU%09 zLKO7=6ANLfhSNPJv+Csi^CHNbu0Y;YC2zVYdHXn{Rw9wi$-0Ef3A`M!hPL8)T7h+m ze$8b2Is_-<;c=KTa(TwC*Y3?HR;mz7P=CrYGlFDMCXL85?Nq*#YFy2cl^lW5D~p&< zt)?|DL9oov2-FI!Pxe!;Yt|&1Z%cee^XwqRfGl$cB7GcY^T}6K+$D$?dN60UN^$i` zf1P;GNUMLbP+UDt^#KztCZ{C0J)=a+_imU8AbP~p1`okKlM&U_+sX1il)3TvaewOd zX$&XfmcCrS*sLqh(=7U&CWRlbY+q4|TGGPeEGt*VvLeUYvWtCl+ltdFomP2CwaN@C zsnRNEs2MCSn?Q(Wqv8?MQp9!9Q7M5FsyNY)>3n@|I$M`J3lTpA#Y{`~#jm0jUp;M? z&p%rSUC1ct&8TbLrN-#$AVG`kM>JcMc%#XDiJ5fTa^f<{$|&H) z)EASVlL1|vI+m{{d34$=M<310=n)0gr|?E<^@QlW7QK(N%%3u1$!{+`A(f7yfHBJY z$I~UcAYXy}TqQkUfNW=fyUO;rn{JBoe*e8{D4jLRS)(q4HA;bj7ZecvE`KGP#>;33 za$45%V%ADx;(_)d@*Ar1GN^+5?t2>oL_Pj98L+=DO&&HnjeFMvH;IKtBOM!|v=(J6wyWw|6 z!l#)O|_?buu-3|3A1ZdQ-MR0 z0h@CTKZ6MuG1^(a_dZ7bBP!0Gr*W8LnkG&k`-J5sV1jXyk4Ffr3xgMWS}j?UCOrCW zm=_HS&sW-5q-dcV4>5(vUe(BST+D8#jF{cNQsWLrS?CAl=2cYvZ@!*LiJd5yB{%hE zzl=U=6<1cUVCnE-7Jp^-1%4}q>6`;+qRLue-eUSPGx?rzCFn4cK;tVsRy2#Y_#{h* zw0g6RGlnH?dBZ4q874}bzfZNbqL7girhyiLC^_Aj(dn{SVKY{4+>ElcNU_LHksgq; zD62_92gcRYxZeUXsVVsr`>?X0wa&SpD;iC z*xYQAM2FE4Eq@JusCzHQna#H>bJ}jkTA{LcFaw@tS(-IAUL>%eM1kjn=rJ4>#KuZ; zc~DN9uQAZ&^TJOCVduY+7a-_nXz_=n$DzlQv`7Y@Dv4yig_ zORxd19%v=vvI|&i;VBF?tP`Ywr^Y^dAME@IZwe6Mz?0p7#I7e&#D(9K&X<)r63bJk2d&JKYyG^fe-aV;4 zy{ztHF)Yh8f(LGj4FOxl*nYbzRg_d5=w6YN;mdZE>dt4b^7+h-JV|wjQtnX79ZFs5 zL#b+8%t7G~K7t0jE}IN5&zWX!h-romxMgGe=6@ENMa>pUHVzY;aaH?jT6B0K(9X%o z*)QDZWKc7ejj^Bx>fxG@EzLOOpm&fNivt6scA^6R0zRdf&tZD%dnLh0d^bI9uqvI=-qcw0nVO z&82RcOnWnokmPS|yCd~x76eg(?h1Fx41ct-UXx@KVp)CH+&bwjjn2~OER7a|ou$!P z8l9!_+glo6qHozS@P18$a0%NY%T97HVN;A{c4=CqoR0uW!!SMuf@GY{fJS%neV*%w zF8Q}%#Q%etjAXuyo80b;AkrSqz!>{eV*HF#5H&^2NtzS~(PtdLUiWI7IGd~68-JBi zv}|i%)y{}^G8~7;gF%?*+)5^`Vi3op8t)bHjxTr$T;?+Y(Y!qG1}rHWjv4#xH<#Jy zpGqsIVTB{J4b@_`IV6o{t{gG{7Z9Ix_QZ^hfI2u?+)mUI$X(U(% zIu7_@=tUdMQzqeeLcfQFc$(l=(LRPziGjIb(qR+?WKJnxDb$T9v97lRK6bsi~z7FJ;gYF1=XI4!{;Bl;x{=k6-NhOVFt80HUD!6cSl! z@hM8P5neHuJhBRxqfUxGp2v$>Of^7JX<_P~zkBsk2wLQ6k4D%z?Rd9|#C5w_OFN)K z+LFovWL7i-T2y_)e+Di^MSqZmXYS7tWJP8-e_R!La|tSWZbp+*SbaJV$j-SKk@S?- z?nuO(3zRidhCHspk?BsZ_Xnx3#mcJLH;0Ny&{9M5ARiHCA#AAUgh-8ir}mW zH^_?cWPFT&-o)ur040(;Uka2&v#x+kLI&)RO0$tlrl`FzAc>Ard4FwxBM_3Ip1Uhk zb1HFo0hK&9n`c4>C_j8?HIza_vRdzl2-al1bwYSqLp`2E{a~iOn zWU1#Cs@FLC;6|O2{eOeml~u^n%8&}$>al*_zqSU`sj)8hQXj@4-sGEaN~CGYyEB4) zh?`-PCJ@oWfu|7?PJt0koiqmbpwnk<*3fT43h8x9iDhB9dsPnY;Lr|>5lu`e7ci_s z3RsRwKxata3&dNlDVEHnSC+}-a!Gv)e<%tnw{ic%6~93Q1ZK5W2@O>XkT&@ zv_z|1%xyAtBrSW|H@`-PS737Qw~_bMpYkx`zAXQ3^i)3>VnJ0JHPGn=B_pHd31W_y-d$ZOEm{aXAlDs zBwXzlHJpOm%YWeT;taD8oU^K)V)gr|~&*-HcHLLoYQGf$mG2vgs z5P17!X*@AJX5lg+F;9HmUAh+0pd6$$sqjV%T7XEbHh-%ydz-Arc8#kwb*2^8HTO!5 zQLTQvW|sSzvI812Lcj-A*1d(?SZQ93J0FshK}SjMwP&V4&<{(YUe6%3XwGYp#B%l^ zIynimFd5hiAz9Sx9HP|jo}~*&Q#O?%Z8UQ{meM`T+*G0q9*6NlybOKCVP*v@8`MI> zSf^v>-hTp`(~9bOV1~43HMGooXj?0|k2`I-;ioNhcFa6&;YntmCeTD{I89)+%|1N@ZkUj+O1@2H;xUKQT#9*zx{ruAB2mQAr|s*vedSA& zu6ft(DGBsyW+zePDYa5DC#fOd+1#DY{aV`GnSW91A|5o;jV{YjEDPWyYehQayEDE! zLJZYZu667BtdU!doxNn?3y0R=naVpKPN|CyOK#94?JE?)%i~4O*4w1BaUfM3{ zvc{!NZ2(Z~^PWNn+I{`uxf_X9_B}J}KO3e& zXeiMXD92Z0M3ox1AVoHGQ?t?{!)c(+xgD?Z2}m^a>*F3AXH+N?D=wc*b8Tr7i0V2+ ze>DFL!Z@|z&hU)G8oE;YvPn>!k%ak2>Z?SkDOBfpigoJCo;i8wx}oMZ!2wI_S$|1c zwvkzlesU73*1wt6L&f$M%{Hc~ZPOWpy|l_kSn997IllmN5I>dDs~O&WPEvWz+h8<3 zBRuf)Gx91FasSrpiF^tov$JdIybI;3{1PrYo-BI-v-hQG*HZZB!3Zw`Rx{8X<4q1K z0?RCvL~#aFa+peD_tPATn_m=++f_Z4aykq%p^v&E6ze0M2r zYb3Vrj;1h$$}LS+_YC&)$z{dzQH+L1&V@B7Xr}3<)V;gJ5Uz+r%LWMG=(x!+M5789X-&ls1h|%-uS( z8R%;gXXVTAq-Y3nPhDnY&JvwYEktQG{ZVm<^OmgPi#X~~xW)4RGgR}F=jlb(HHg1O zasDC*=A*SFxte9o^VH&M-!XvsMs0}X{$Oq;@HkE5(3d9gaR?pqGk;pGYFsW*>|9IS zEnvABF-l=|3A{;W|67X~j>#magT8|O7)xP=tYAf!rOdV^uitV!@JCVM$I<7IQ6bE+ zyvlG=JSGmUu))mV)%uLJl5z`ExfCW_M7#bHYIB(dS$sTay3nd435gvu8a!0Bw}zKI|Q#%dy95(6%BE zYH}Kk($Mz2h-y>TGK^o4r8SO%Hda6gJBiaYYxKI^E)Ri)1b?DCjP)Jw0R-zs#C$2R z%9pfR(_*+3OTQM!Zqa;t$uPy3zCBYzB1c2viKx6J;6fyqZ&{HtGsKk|OVb;eaVqge z29DcQUHC*0y$9n2(qkJ7Y0E3NkwuuCg%D@O$`x6*%R{5rar2hl+t!F)x@BLl&veTi z^{-el`l{!|(tq&Ja-C>*c1W0y>>A>dP#Efo!@^y?q&I3;PCzUA*gwl)hSlnmAC{O% zq=m0fPV$f(Pj>$-YS-K%&hX)n>E29?b*CD;@1VYA;eVpFw1k%Cagj8UIC)&;yhL?i zxwh$D8kbAZGZ!#HjA_3J$ZwxYPzyL8)YXZ7A%XENVt=lLZ4=s-flukBFfuKLFXm(N zhAGSMkjF9!d12>_EFX$BH54mV6kkTM68X7er55OrWGkzb2O%mtt1FeXoYmDzwVZDc zQu@}arrH~qQQ6eVr_$6Oo|F9i;`dk2`oL&lnq+U`a4Lz> z)rXRzP%WSJOj0Jb9!ZLEU?-A#y=yv<^w{q=X++p}x%N7TlWI>&kV~omzLY20f+vrn zq6H5gE0H%Vo;#*Q#p+8^K-h*ZrIw~%x2ugxoqr?9dPX3HE&P^5{~Cv06nJ?G9MLb3 zEmCzD)c`bZ-BsqOh@Hm21PL#rC4W}O|D z7%H6zIQ^>_w==ZfdOrT9Kjp8k*K75>cDK{* zdF+88t@pp8E$*iDq(0Lsj?(8F|ELGkm7sVtEQA7+L2J>OhiX#V=yo22LotZt&YA@b zVYN6)fq8MeVttd*0#-WpNt@Ce$`w`@V1Id}Ba8GmAR*hw<$zcIF>sy*b1n{$@n4uv zf8Hn;R`K4=*S0Hu<1SqDg!l^MVjc_3xIe!h6Xp%H+Fe74OSQqynW&w;*4b-?z4mFE zj0sPcI;Yjs>Q+nq6Xu&%H=4tr%E=7- z@|!5MTb4&r*+2(jRag zf{Ns>;ruBZ*lDW5E;KTyV`1s%qF++q@yon06fP?-(tiW-G(>t)%omo&_uv}0Pmu2Cje_9*7Ou3dMp zYgCLlK-Q*N9tpFX?P(2_&<;sg(|m(`i91}gqF!jFRZd}uvd033QoAVxaiEIcu<<5K9_46L4T7Z^D>ybj12k8YedtIZ@8ZAI3 z=U&P}a(S_I&Q9X&B%l{X6 z4#OlbY4($6dzbzFzw>g&8`%|-~I_Wj2n3aE(LaHYj|rZrb9NHgY? zD^>G#7c%#f^RaEC2*c=0_O}#gALq-R0o0qNQP2ps^|X)L3{-hZrx;tj;3W_xA`Dn5J~jOqptAXgNs27=wffWg>+^}SKiwv)JPnwz8@kP_A3E zgs1Toy(vlR*TvvvrDdx)t8@mjCGNd~3&M?FXBQ2trQTbJ?SCuGdxV!7@|(TzSL58U zYwxbYzz=<+zLvciEv)-!9@kN)sx!9V6l42MGRWSlVbXgZ`UR}O5k+<`Zq38|ke%dS z!kTv`vrB891;lk>2EJPk;x*HNsSKEf8GIW9CQ2@b5mUD>@>l;#XR_L*Su>Tl$*qXW zg(}_XcoC*j-GAsf!&0gm9m}>-MVMZ~=txb4J6jn$te_nQTtJe!)!x|9@2AWWFYRij2kA#!!_j;S-Pc z-NNeW@?a=3WiAj7RaGA!cgsAYirMPd>F7O3#k;f9_PiUQ?KxG=xA7|6VWEhas8x9zTyDJDI)>|);>N`~(q`Z0Qt1C@CY#<7Qo_xgDq zggy_W(|@x<0=BA5Etr-+P&~0DRjPGr`VCjpajwkN(P@I23OXjKqn*<#euWuSp`_CU zgxQb>SeT+-R;ty6hGVfXww%?aP}=L`4|t#q9Tc4=jemcEv5)nmv$VrH;i1x0+u>Sj z*ZI{0Gwij}P-V~n%aJbazFCSqdzTFzTx%vb9)B?{MO>GgQ_P{td=+}a)o1%fBBsdF z58k_iQSyj0!eLnqWw+u`97l9*PwcHu&|)+!ZTz@EyGN-ib2T{whcj?E1IO1ha3nSZ zM;9?B^R-52-?-ZL4QeTP?(7@i&c1OF4M%9*c=zh1_cF>CFl7|O7&9zo$Y6P;8RIJ1 z5PwVtzpz<=QE%b=-`prbt{&j1&Q!b=J#1X}>cOmA6;PqLP65A5Dh#P)_G40zO)pfp zB8V#VXHZvq1XaxW7F6{ooQ!~d+O%$6W?iNt@l)iZwUsq3 zm>)$t!e#HDQXyD7=U!UZ)4b4g&73-)AAcu7coHRHV0xct#Hb#X4Nv6bc)neU_bm=I!g(=(3kbIW$}A4io_hDI(tS8P2+olsYHls@jnId7jh>Mc7cwR@JY zm^em{+b67?W~E8SyL{nkR&PZ4ictpZ&W2?mX1|`hk6dVRKZ|6aB^<1VEH5_9Wq$;D znwd-SqNtlI>5%6#-th}wHaSNji=h6#n8FXPXHkNRYDDS|Ui|vY%V+Nop1pnX>_9tN zc=g-McQ0hbwsPc=<^|agIO=CKH7#+(yMV>`5PN~I*DX&Sd zI!7$zB5}ss8w*Gra|d!!!f2+|NFzm&M<4zzud7r*_@W{lmQEtXI>1Z6Td)hzgtaC!F`npDalgd9i5iRQZ#Ys3PL`GCYEwe=Wc%>Tz^f4!Oz`l}Cq7 z(X%2W3<)PZ0jRlA$V1GsWK?>j#oYQL|`Gqk*7TXwkSt}0y?8{ zenz9r^COj^Kt1$vrjslkHj?lhrRT=s5kIJgl3L#TB1Ox}c!+2ldItltHk)#C8v-I{ zQPqRJ_|8FxyY}Ys{k%0?HC|#vsW)DW4vi#*9fOM@+S8`kp-ja06n{0u*jLQxik;=l zsslD-Kbbpd7qz3PbW|h!(l!p)BGUHeY;jvG z+^@Q3GwpdX{LpPVptdQi4V5;$u0`Ha#5ck=l}HO8HrL|jjK#-BN}zBKNfe#=P1JlM1`VY_($r7l0F zQ{dU82-&NVHJKG@1kGlj2mEY+FaMU9H%E2a;vE$J;A0pp*(R2|dWy#Bd6*Z!hG=a3 z6dsI+kn}|Y10fHNG1*ykdIssDorZx;(jJYJuck+JDpEL*Sq2?D|s{2IB#F z<2F6#GmeHSh4_O(i|rsKTd-=Nqe(1QU`hr}_LJ8w72Ecco9pqFUPN&$){56iQqe+>o#LFN zz}1>9EFw=^9=;nE6$lFL%9RD#{rIJ&D=gjfP_9j2l3iehr9>Qvsy5%!L!$j{jR4*= z3ls3%HVC$nd8n`rMngH7Ld08c!w+diuom)hT;%v%wttV0Ho#=o8LhoTTUG6>}hXe zP~zD$#G5+jaH_1p%&4A%vzTY8ECDsfxroj z?U10xR^w6szdDWo3O1X~NAUYFe0J10+-x5`qJKeu+G;8+<9m{+Y{=+Z=aQJT-Ifpq z=;^PA;E(7u0udl1*S7GR^&@eQN4vvokor)@e&q3=3_;-ax%@&d>wFmJ1xPvwK#pK? zMJLg~OYmWG0X_4Y(ATWMZ7gt8{Dz_!`zWCckf~}TTrubEqXoo2RmNrBl1a#RUj@NMr|6h=2#=0N~2HtkpTz;T=ZFga?wo%BO zu^iu>flP_8!-Wjzg~(MsG(nUXeligDXq*vkVF*;zYrIBCz!BZf_AY32on6%HIzPhi zUZ*Qg{~2v0wXxlODz7ZMUK$Nyc--_p0e@Y*QOyqP(1tP9%<~6Jmx0_o^s|K^5;@JH zb`}dN*-ErYiW9jnehGb(9`^RxUp1H*ar@$zkt63>@=~5$X0k*=2llluOA>$5*S^#w z@=&p_e~Lu%BYahA(rvI?0- z0V0B%1I=QnjU*jSiE)7&JhF61zJF5?E{MG$CFevklU95A?knjar9yFF&j~qFcRXmp z!MQ&oHKNdtmrB*DNGDT|Sb`oUy9yl4%X?>;p?X+LiD~kh*cue~%9&%13HX@P#I`ZleNHTM&FNaWcVUB${bU(Mn3Y36qF6vf#vtn>U|n2Z zA3=@vfmNW4gp3%^rcR?&e)lqW-29_A)@T!IB$I=99>U-6aSlSs5+7n45e5N_f&c zh(3qj%kUJ|^AaxfXhu>-U2TT&bV8%-mVNp2WYytJhbrcr(<%ea#w`f+{ay_ zH%w#EMHj80h+bts9`PT2`VNlfEU0NL4f^*H`>W-k^0#UtVSlc*=XXQ7){F0(%09znE!fVK4+p@9vuB4cf zT3+&yK+d7{4UwqXL8nQLrfCs3eT<7T4)CP_WD=r-HkF3m@uEFTre{eoBTFNKfSyGx zIFvQEL_xZWXMY{jX=ym82SqrN^KQ$NJpc{Z*86$-lr)qaDYTR&-u8?)Yo~A7yAg+^ z{1z|1P3tofb1ylD-ix7h!K1fuI`XUqP4*H6tw*Q!_J57HyS=-&p}=qm(>*`)ZvXH9 z{NLL=2{$*9ai2H3WmA{uP5P4G$=Rl(+(7JOk8VVIM1Q7crfoQkjt)(<9bQ?79RiJ_ z{5+-GBsa||b>zDFCp>(V(TXH#5p|?1NqlsUZz4$nt>@N3g4`rABEoy9a5L45ppi~! z!ua1KmERZ%g}Vwpc&4Ak4YRVDHU`75+L`7T&L~N3C{E|R+_IAPz({{lkT*GJs1b%L z`lVDE?|%#OQKtt;ojURJAKqlmP~M2_wuEoXpflB8i4=`wZL;bYvhkv^gD4xs@(WQG zrj^_+VgWT>5eoTWIZAb1%=6UZ>e7oFjYnm>g~wC^swmf(ORuUbEr)d_!%2?H=q87Dw(~9LK0)58w5az6gx~;w_i;HOFx}N~x zQg|#QZk8=ZT1Y5NgG~Zq0ud^n%I|0-TS&Tz1X4XW2vbZVDCd^a^H&MBm4uB^k33fec1{vl7BY8uau!hlg{d^-l{)Ym1`N~^kt_ne?@&c zKabGt-{4$Yz0CqF*4rRTUti8gi>9f)FF)z2{_&^18E3?bh9g$JT64SZVD}*Gpk99?W_Ep-z9V`0T?HL)!a_OHCVEH&AOFD0S_9QTDS% zjhzeI*%q{b-j%#{zCEypeCL5Zfj(mMo0$ zB3X&k;Ku*{&;N`2(f|I>|JU;1H-9}AfUjmfdnYs2ENSk<+zPv5g*juVGj>)OJH=(x zTBc6#uXz}HXGJl}`&(PbaVH&o%sXjzx-~pb^8&uM?(Y7$bN~L%ce4$nvf8zqMa5+} z-86b70A`|FEbR5VST+@uSQ#3o51vGIl?x!?ureZSfdaBq(ugWp*d4Fi>3=EN%Jo@s zNQaWZwpLY3Y5ArWbHqVQh@GN+d~`83#_p9eFp3WOEe~;?Kb}P7$x}!dX5{%>vf&pI zFeOQqkEzU|!@###TVn#EGGxGW+{R9qe$dO(^X8J(yt%S^KmhO9JndEqt6bZ6Cs z2okZUj_H+Y%w!fAWYVct#hUW(B(N69DP-1JT}%Oj5?l-E?ypg%kNMxc7&u4$%FGWU+q zrAVomI(7;nSf~SSZ_i4`iUsPiTP&RVd2Q5BDIQ+HOQ!maTT)0b3xA!SS1PzR`8W0% zOs9cftHG_KfvyO#S-%1~R-7LVnWaf(am6kq9GhAk(rGI)IrfOtp{511Y>b_NX z=vK=5rF$Igux_9o*2(@@(H$ShBZcgXE$cD2Q_LNd)jE-A-_up{-l&5fpc zOv{x%Jf}V9t=u>!D|Xhg>zSXxzIZzC>Iyk{Bs-bah9!4-xvEIVH7JuMjxTWo?%+o1 zZL;mSL-yTflYc2C4RLLdr-ofxCZ?Nm)6xJusL2=YbX+O5x?G&kDkMOH78a>RKx^sw zEi?GgddicxiYJsZnac0euz-wAeJa0iS<;!P>8#B%;C9f_a|r2@oqO3fV7V*gbVK;J zcXUAndOEPtot)Q?`g!8bqo8Uo*WnN5mr zXuPQ#wu5%Dag__3-9%P}(o+0Usvstk*J`Cl3H7E4ls$zRXCosThDIHwG)Y=``FJ!+ zvm%t_+UAinqFh-c%F0)h7COSe1b35eBxr#M1d9U}Xg1udYuFE%TDpws0JCzd0W0R~ zz%jHX`hOPpJ{U>Vb?1_IQK$=N^>S7(Y4w7c>FpEq#uAn<$V~Gt;e9mbnWcqkqMM>cs%uW$q$P4A)FVeJ zRlZwZz@LAxd+L$RF6@wP(tAONyrb4YuR4vQslQ(!Y0>=L{5A>*8iLGF?=(xtBb8Db z{tE_|AuXy)*=yr1vg9FBuw3tD_$iFNU(7xdtd@6^(rKzve%cW#KVz}YW&G~W#MBt> zbAKr&L1|B!Je)ZM8B;X{a9*nx(-K`Bc6(_B7s6Oai7pJZ*dx`eQl`NVv|hvDl%z`X zV7?nvwved5OpCWjY?OiSn2+P2Y@tr|3KOxlq2^7FlG0$|g(fygb2=i&gkD9|=w&uR z&HifKRjdH{|9%li^ph3Ttcj{(O%_$J{(pH9o|vbt-cWqHnsob=^TEPr2Su zb4GKyf=_CmJtV$j&-^5a!)!kJin_7{@j|EJ{8lN>dAQ}igWjg+OX$lqGin>lD9nk- zy@JMkv$f+}7PEo55iP1Q%VDwXQI|nwmd;hlBMNBI*4)rzsBpYOXHW;9TBE0-x_@?x zX}Qyti6yDi{+#y5$)gKH(f?G^c;rmwk0z?A{>^%bfYnxhazMQ>F4RC#Ejwd}L~TDA zoTZuN*0&X+Fo23OKfZSF8L)m_!xe-X*TUt99&V5!-Owhfrh_k{rIze&b3K>Zt$yC7 z!Uk1mB--6|g{y9GMw5!L8OHM7}HZlWp92&e! z>7y)KJo=4O^5*ym%H!me?v7ePhutG3A*du3$?yiTqFud-P);D1&C^V!XMYrx55FM{ zL`$;N8$FOQ)2skFK8{h`mZM;L@uz&LcICk%T7qvp#tcGY`DapuZNxFs_m<{X= z^&z5k7d{(6L(_4=Ct>Xqb@I$}S-g)DF`uDf9d&*;G}n5iHor4r1<`XfiOI6cQgAB=b z0xf>>N~=!o#jOZlFDLga8e2O0E2>||;!>`J4fSepUh*yxQW8@5U23^C3SBSc(hh?z<7uQo$WjQgUq#D6$Tj849@#C%Ol zOqSxUIcT3BGlL9q@R=`Tl2OXSqIgNm7-;N8tzfPxJFIX9oOMGODn`w+*?n`Xjl(lI zP5E1C%A>SWO@=7V^M`*7)C9k#0ovZOTGlM(#a@doi*UwyMa((wj3@VlFi`%Z+Eah%H{ZR~{7dbHSOmVa`a<7_$3mUB~VIXBMN zhC>lK+m*9jT`k+yTR#veqJ@oBB=fTPp^RsC_@PT=eiEZ%*`2b!@+5A9^9#+w@H4MmeMo}z4E1R-N+Vd5YF#Aq zWtG1Rgticmqkr|R57pi&I)o-Qf5j`x5fCcr*JS)E#~V-l9F@wsjyd+@6pcX69_Q?F zl03RNhzp6B``7Yn`jucvlCR`eqIyczHM7{AKx}ur8ZyIzrC6)6XW3ThH(qA>w^%`; zpHX#vmmGqJRv?n>Q?A5{gL(E!x>KydRvFk#m7;XxB7Ylc?!F$0^YLy~Cw4pc`Cws1 zO-a5sY)Y_o0G0TeL&?+eb{jXbD)t#;tKw+XL7F#|?e`AsM{NbCx^1x;4yLPAm`6$N z3Z0?J8Jez@p~=}@oZZFQU9Onj1(YauZ|fjrYIsef3*;mjX}+aQFM1Kq0JE9_CNKQK zN7Az=et(?L_K3Rvi(STGS~j>#W4FP6vfn|XU6`rMmIayR7_cL9ugC+I=8?-v9<{L0 z^_a^%(h31p97-jUT@gyuG3gqy$}K1(mY9)F((IW*xhcDPMj2{-n!VZx=92 zwF|$fr`!B2iV!a)_IlUYw5xsm{JeA{0aGe>`^Ma?r>(>dfW)q%qYz zJ~@QZ&DOD%mfIm6Yg4UMMLbx`Ew+V_A+$<~2-#_>7>sTeKw?4U;PuktgLPiiGO;dm zy$+X^=@kcO?jt=x)h#Tij5}rg#wg^SWM?ko9(IrH zayk`AB0S63P_ymH`6YviDxp_s)W+F@2-0M35-gg;htkqA=IB72V9|_RiJ0+>1z)N{ zA~If&)IDXGL;`)KmMhIB_3~EFA%7Joqed;8oi&IRS-&Q|ypjr%mFAP$S?h%|iqIT< zZUvS-1dA}TIB0>dPfqd>*BflbUV{X666%`eG%TJxNhk2@oO?phdXvk#v)_PGy)GzT z5V|d|w=3Nph(>XW^mg&k8ch>PS8Ux*m$%Lo)Tv*Hg=HR^ElRx6Wd0V&S%2OV`ya{5 zI)fKef8S$HEEcAY<*P}a;POk*NAogzL_zf_dC0p!L#9~fDYY^sxEE?4lUFGh+%wZYLtgPhu(*6D7FC(>+hK=znvX6n<=^lo2BB-%<7%lv48GQaW}FS&^K@(p=+X5ZH1x zB@H3510qcyK(3E!l6@tZrenlCoVweFr%$Z8lkv8+7ooS^@M^n57uwY|K z4V1pp8B2llCg+naX`W)%ej>MsNj~X>{3)Mzk}i16DxnU!o1jw1eE?*EhrhZ}vExEZ zU`ZlNyO~Mh43A;UqUQu4y=OW}D^QV$#FC4`JZ7K?n;8D|d+9X3Xn__(D6bHY>? zKazx$#Gt^at1a9yBna{CmyyNKxFoRbv%->xyH5p`)O{$bENm#pZSLcACFr?x=TSSa zHfPAi5|<}8Vv!d+-U7swkm+~Wor!iCy&{Z)jhUvq*nOkCSzFJPxAh0Z`SI!z71#!5 zvXNzXut)o?9>cl}OP~tm4P9XpJ4pBte^^6W_JW_I3FYKEZV`jhA(xx(+}-UlveBY7 zqx&jjRI-F>rsvK-dtSCRIs|rXWW4IDLBm zOa$H^oYPEm=MOz;1I{Tv*``@<(O*l9lAnJpObPz<3Rvg-ddc8R4fydLL;55A-5s6~ zOWQAfBbkzucne@ZfTIA1_E~>3#~M+{h0O5mn*g8;+7eYBjBw%dUqbMG@{d>XXT5%J z;lDrVy>PU-<%T@_;^DcC%^X}oc3+`BKa6;dY#f>+A;`JPX{>L3bpG4w1pdywFCjWB zw&_kSD}Rv0$O+_`gTT;?de_z-@^hB~Y2~gnY8l@u0w_E;kiN@YQLGV5@kiv`nXFjq z!jQ|@bUQnGd#@l;A8`i~Z4&cC2Hv{YO>pmV6eZ;b^@IKpd_n&}fZj82!e0|YvampX z#)afqAN-_uHx<6j|F(>Px-K;&$fjt>oSvECE+va_RuU*^y;tN|C4qsx8bP?`K0@$b zM^=_S1LUUS&jm|C{^~AqZeaqGH)WfzZXwv@T)V=*Y0&eq@0B)R{5t5L*5x`PfNKGm zJX{`<@oaNa@ON^52cj<5y4_q~&iY=t5^i?Nm!8BTy1LzLWAaLvjQ&;u+TE1fqfG!! zc^y|KFg^Me6zb=C@?~`i8cO>KlCYpnvTgUa3Wz-@SI;U{0A}GMWs`D{28W^S3R5HS zq}1ek^j@V`+{sIBmRK7l5a6TO&xAZDZwKB1S$2uB(;UQjiYM0(A;q?ewq+ZsGl$&v z2cWF~z5F(4T`4Yf@^-`!3PT@cx!L` z0PK!@B*{8^y8hGfL?5U9N`>MZX>fxtv}6L_}fF@6bJJ81d*@OLjz#E4g zj0-k?n8>mV%XmS4u4tXsYYiR+D3VRI%dpy{ZC;@9^_+@1V1Spt-?AcKwjH9 znRq9FYucdPrHC5N6!X-B1=_{aOY4<}(8u*2%#F$?f>bVtRw_*}{CLjzZ7&sAtzRL+ zREVFD`qy6cAi>38A%*Y=-u%9H)gkFp2;@B5`dG4;?I;`0XNasF;`irc90pV`J9~8K zYMz7`em8lEuqBBID4;3-PC^bz?%`HcDQtUeWW*z$l`qen=6*GMrL$B|3&;LMov48VxO*G?%9Q^T zdYu6BHHrxhC`sV^YHQ1^QMt%^^>H6dGZV4d}J#}<^bm!cJxCd z1YJS-J?a@~NYO?jPly!~045Y!3fwf+1m1#D{|H<_Ii>c`yPyEM%~<86?tO*4@v|`P zpPN|zuIp{}^evpsGZePK1rDYXMtv|%ad0Fb+!rFp)PpZLV# z>YGVYb+}-$xO0)p6d({nT+>lyHDCH$WA&VdUzD{>NG)Fr5`rHXXJt1wZrD}qgLvaF z|5uRv$*x<1X>yP=(^>njBfYufZexUdwwnEIz?XogD7Qt^L-E($W$~?@icha1yJ=&< zX7>7%mKRWZ+@G)k7A3^Ym?LOrOs>x46dZct|S(eX)Df z>y8vHj+xh;?T%~_N=@5CM%RVJRd)M{r3A51viWf@U%IX-(eAx$Rqy)eCr7Kvpws_n zrKR?!7x4h0?7|RY%HyvVs25Za#`jq*Lm{-B2`J##cHOr6k&A>JjEA5Ri!0bDfQYLR zj*4jHq$p->SBD0xePGH@$@uIsTW#2WOln|0`SB(c zO?+)CO=>?Rda7=^a=Rp90@s zgyZrpdrBk|ILU0~(W?0j+J6Jde`ApML(n-m_RGDl-CFhIYsK~Q#JTo|XqdHJm>E5& zx|tT>ky4TF*Ocbn5qIuZ_xe&Q@sio7#QTxR2>{>q!h9e@zjh-YXoV^cGot|vM#-t; zZI(&38a%gEnQP6$51st1_m9&^;7(@{#(c7R_)TJv@ek&S(uJpwWh5Ru2H{cY`YK)n zuRkkn^e(8c25<>Mw03DlXnUJjZ*0@D4&S>9a&{GuRwyE1FqD3GxGaW=DYu8r#qnoe zrpOu(@JZVZ)Mtt-WAye3+gAY6!&(ttm~CKw%@S1K{Q-0Gy&3UTo~12h)vLT`bvP6A z=V-xE&5La|V-*}!%50W}67rG(%7O>pS%gHM`Kiz*7nELR8?z{sr*OF_jqrL4DD{P2 z=Gt-aPbe6IL+KmtN)l?Dgt?E^Qk46tZiaeI}IWWkg0EkJfFt z*=o1QURi`z4E{-#B5w!KdN>6pU&`aCOl6!wEE{-I4aPRguO1d1gH<$d0&mx1?`E&wVwS}Hi(c|Ms5M|t zV?3~V|I;aYy#N}_g~m6{1Q>@R>+OCFI&h-u*mLg~Qr+|pwgR;2{9u67`CW^Lku(x5 z=YNM^Bf~l|6GV9N9g?T~;7|dsnhc=xdPiquoBsI2&dVQel9#_Q-t0Fq&v{CYGqwt` z(^&h%jt${--3B9Mz!$IKu*a>n&oQOOGSZL+V>ZtEB$JP!a$YEw;lL2|AS$Y|j7wMr(;Mp;V+nm&N#jI(GAT`)t2F>cjD3O!TaCoQ7C!2*EV12g`)mM@F9K9nz8gSak& zjo5Rqa928Lm{VN^gFZI@kj{aO(MxY1?iW7UmpaSxoCP_r|I`J7z#_g<)fy#s_=;t6 zOHUqxi4Gz(J1hpP$4D9{13p;}!dpmjeufuyg>)P#3VD#98dUnICsor1vGO+WOrGbxEJjV*Rqd^uy7VuZO%d09S~wAuKCiehM!_0L(L z7WSfdLi9jg(TIt!g^{0}3YX{p2-} zy6^b*Q@|@VDE6{k=5DjBkh)H@%}k-L|MT|W&;MBi&$pT&26UrcW~d!IyKrneZDFhX zIBVgvY&s+0Oh0}d#aSV=AIDh*P0)tvEXWUKB63!iZUyWt;VCwXGK!bJYaU#^mIY@MnuAfF5;E%Xi+!1>M?p@#Rh8li{9YG@!RGYV$tFn3}< z9J)Gmy^^4v6JTiH2M0N+0g?vX%U61K%Ls)^ri&LndNTpBYT%iQ-XORSw+I1GGsp_3 zBQ|W9r%?lccaiY#^a4w$;3Ze4h1vlj&ryzt=+T6CMK?CW^ZK~rqC_>e-3>xD*=E%O z^0uQgaMh@wgY9PD>Tm*#sa5`>@VQ|KM(E%j3TLBE8c)-fvQC0dg9)!^e?&my9ix}F zRt9PEUTkjIRK$8}##10L?=z6<6EYiZAs!Qn*}@2joZb9@Ne&3BU3LRgREJw2g&8)w zveA3$93Eo?QMM!TsgC4!^%qx19PQ=;c(N^AL`;6U=qo8PU(S-u6JYXb^2*K`N=@-t zgzvvd9f)5&t-8AaDN4{@8DK%_qN0cvJA`p*zmy%}pUck@_-BYVWtr3J)*fx~8#SQB ztTn#93FeSE{$j!V2^ufLP!1Gh8OKYs9s7|i@DHgYHN%)RpKsWqGmt7bogRM!$VZNJ zjel(v?t@-Mhpf}GetgP)F|!PFDZit*24nR1Q3H#a zhk9rlW2Bq|&I1I=%)pv$h2%;D%BK*~f6^GGSXJhbuGqud(nC$sj*xfJt))o?K4#iLN#O zcf2w?{5(F$nGdO3o=fwPp~15#>GKoJ-d@jTaaSO3Bw3Y02f+n&YKHPTs^D4TOH;*6 z99`~p#fyv5+K+8J1}hh5eN-pJPj?2f%rfy?d9;LNekELCWIGQ?CSK+ek%`DjX0L4t zDqQI#2PwtSImJ*Fz{{)`41lXI`@Rl2j$sL^@`>1aT{%O1$D@upx#48cR)RITStPtW zg-X+yt`^|){C#!+=mFeae5n7{>+yEDwf=dkl}F55{&*3vJ#~E=ixHJHSCn*@>!|ME zSg-k2yLNA4wCt0a93K0elE&&h*l)WLfJ0DTt@f#1y`Jg-@T_q*wK~GKhp5z~uIp*6 zcAH~J8WrWFXYICG3bI%0U24OCIw6)Kru$Wd$GM}9U{rpsVilyJ$D~2N1l|o=@v+{Q zoRl69#xNNZP;P5e{tg*-%vu6i`G~a!7y6x)xx`-Pgue(&LiHD3g4Ifm+ zmlucAQKn_K?4BH*Kl zg?-%QM`CIN!GLmAY>5{@;IXbi2ltGUCkuPzMnw|}XmI?84H?pn!kSC@^Z8YO5sVsjw$i%^o% z#$_P!Ub?5{HlV!CHU*_EE{}`PBnXSHS)k1{0r?~$AtPhdH)ITOk-mg#GHM6f+>f7su1c?|-SXBp{uxyE19(2+ z*_}|z^6Xi}>T@hH+o;6o0TbpEXrryjUHPrLMu8PmisrxJkn&gEQK9krfAk1|SUGhL z`zl;3Ef5s zw^C>?6E9ySgp3nyT~<6_H(4E{d>r6sx3S)DDiS;^*CaXGVBf&Xd0IGC^0(vMEb+B# z(;bH|HHZep>fxVGQ7|8{BI!o>BhX8rnW-l-@#Y5u8fB|XT&h-!N>~BM?K?sD+gV;=pQvS*MY>(n#TM9zt2C53ERC`NYG$hGr47%D1rqXT%TlTD|7?0uR}n#d`YXpCJ+I8OX!?k^OJ+lU z4GEbaLIT@% z_404Kf>jHqu<6YN+g#xagVb|}C;51E7X)i(r%$nS*>E)%1;g$OkE&KufJ)gEid&N_ zthqQXLOf;gfc>b1YQQhxNqy9|sG@S_$gsC&D|59f2*m{b!~qVTBMi__6$Apm&k0QP z7dSv7Rj~boq}RJcs8DmfjHsg*_fIDBK7livCX*`eZmrrLHT=|~MK=D}kL<0yb8Ke& zb}rbty|3{_(yJ-cxV5 z(kYLZoTFEt;Zi|bc{LS&_nAg zSs3S*1`a&|nI)!9moVT^Ec-BjtuWxKRv6wo5F-Il7$`77-XTBxWqKsgarfKg&}UdK zyo&hmKZY=2VfPX1ffa;oeqhBs-vARi0ziYg%s%m=a?$n)gLJ&jE@j=BVaA?EOKu$0 zT6BTo{)v7U{bVbBYL%X7I9tp+H+*Qp(LV;Db+4Hg%x;;4<{}7Npz>vKvGqUKaNqEw zp`8(-0J%GR15x}fp_2T!1cpFYkMO%Wgc}1dp|I5YPCNON!^DSz<0T-Lyl}-hfPMYzC~rn8tajE!TOgP&VLVK99IX5!+eicpR>c ztVNK#m!4@gPWlQGtb|{ib15Hw{fTN_PfHp8Bj`VPCmU7?UtY?~F zwO9y}*KxMcH1}E{#49l8S|MbYUl8okp8tNkPp)`u`9Jix#f_d>?+}6TAN@6O(^WM! zfTyqLO$h|t1Dp$%kdZ@{rZgp|^jtJWWKOg|D@&=lWXjVa=@dWpEI&^*vDozR1(L3% zwb>wqRv4;3k&^eW6(_hCc})oVj|H9Q{tx>FF{V{HPk$3EBZGnXf7!20(m2uo$9}1H zrRoO@l@N;o<@p#j+MLH@BpD3E?8I-%61E*2)8|Uyw$(1p2;ryv2W4TkNX48HO|S6U z^*l*EJy4&+S=Vh~X16r?H+p2fMl@ZMweD6@pHc_VI#E*dBDOE2O>!ZcnRr{M;9&0( zRA^lW%Pz0&N!k7Rs`y$<{{a{JDTHdRP^nP0YJlW9ykO! zux2LyLRp&GJ(Y|38~chCh|+fo(cV*$2^0%e@0nlOaPxbN@EZ@?C2yX)6{J-)SHdnZ z7R^Dd-**^tK)7{tS5-L6jsqGbkgmW(5R|~zW1Lx5h8LJ%pa7`Ctt9@KrnTy^?w9G)ghq`#CT$C}u)UN^> z6^#amLLCYh@H(Gca!|ksb>L12MUN$F~N)O!ywl{%9} zWzHx*@uY}Hqo7K$Fzb5-FoZ|Z>t{>@5-vG0=fR?It(Z~7{-tJzawfT;)6@e+5};lm zP^ZpCGczG(Ff93Jn+S>MEMs5tlTvJ@oBrnVtWlf&VspvwL#*?Wj$lvTIlotR$}d8x z*Qo+!TSC<4<0{FX|wV|4lMPt`vXl8IG;+_OqPEzr=DS2@-|NkU`=q| zI4(i{7X4D;OUkvLDH2(ij~*&wQwtvW{bnhN9dZ`e%8u{hrHa>9Z=RbgaPcDBE@Od! z(;^n+Ydm7J&&q~6GD?_g#HIe$&m3j3s;@=UJ>vRC;MdsG=W3d(hkBu3Ew6w6xiDnLAzz-_m(Yb|=xPBHhB#}Z1{&0c@v^@~ zh9q>jji&)6YU)RI7#nB83uJf=4Wl6Ru}%4|cCit1 z_I9yXP;wlGz5SsrhT&u&WE<(*M3+DfwrW3t(loz$W<}uzLZLf|bg15GxtCTo2`qiK zDeW=3&9d}{Jk;!Z9%uo3T+$JFNs9Q%I88w54POQP!)EIV+^6x}m~JQgD`#`ekz8Ub z6gE=j>*#_z^JMRe9lTQwkQYX8Y(uru$Jb|nc@xzb2iOm$Sgx;UyVKPg-8M5V5!Cza z!PWGx^<*CK!utH7@WOU~1wd^&G;quHaE*+es^s7U(N0GZ{q6*Ks-_ZCnaQg?rOgo78{{@e*C8bZb9GpYpq0(7e+MC#R~%*u z25m!~zzw)A5`o;PIxP2@C^5BZb=I`BLR@JEa5mF4{+ggRCv10USvE+$#ge6DG)V2z?Rqo+PrID!=I-dF7k}AzK>9c!9?D_H8{P{F{frpE zsiR_H*53qFlB`Z2&D?vKxh37i+^={g@xMxxta{=pg?VV1Z?kA972AnUWnJ+%p!uwF@6V?q2qQI} z53>45#q8f@sl;`H@ffD`!asXUwFdV!pd&$7m4g7H^Ckx(z1W5gQSd1C#EeiB`@xT_;h$e3^3myka{(vyD604!{&1QU$D3M!(rxaBQY<^K+DZ)L z`2U?2>4cXRz-!K{Ej-?g(O4=B6DH#j2@ocmB!CE&unzOrV3`ta)-qJVCNVAa1W3}6fg3mmEaQ+jx65xCypT{7zrFpBWUtfj6FviB(O;& zI^>sl{sNKs{GWoLNN>5`MJ&L(Sq*{wphN{03v=^p>SyLqgt@>HnO&1WMhri6f8wnj z3eC;pi!3H8OAcp^TJ^KK777&XalH#QNddNGvn_M?{b z!#4MIkSfPDp^l?q4dTo~3X$Vwxc0B_!p61j4l7I{_PzxY#i{Mt)C53&V+T12KHIkn z7_l3k7k9vPlv+_D1}X7&(EwTP)HN!JB>$Efz~Vchsap;;;OONnd^b=Dk9R`az~C{sHh%4ypsZ*Re=i-arWb5&_o23Qf#U?_QL z&a_4Ac;b+cNbCqcZot|IU2bRJI^15f`?J3d;~FLFe-${=75e#@c?fHsbRV@F?aUW2 zb#XXsAmTyzM{s!Ra9$5|wqHx*cgYT4JKwXJb}f-_m7MC9RcyLXvR9FG38!CcXa(TC zP@pnpyQgY_Xllo~8xuL$14P++S*-AAqr-jr$Y!N1kt>s&OZ(sdz;MSO??H&`K5uZi zMgAN9AUuqWWn;Fa{bwP3MR6|D&)zzqG~r2bp~z`DP##vvd)9*T@YvH)a4O@X>&br# z$B>Q6;9qK3EK-{vbTgwdaLxvW9cxQVG%Wg;kaHk|x3KO4d7UfAFkollb52vuM7av; z`rWzGfJzVrRj9mMJP_C&8AqbzIE`j4df3<&sk}l1l6V2d_DkwBQC;EaLp^YRYd}zO zs%${#bBu{|%0jRYbu*4kI1I;3DD#n4r~JtItI|scl}4Ezo(i)WDB>1~Ct_ls$7O0T z-zI?bfaT4***eX15Re0k%hnFP^EARJx@d)=w~9?*Nsd7!B0Fi3Yn?$70%oKv5;rD2 zr+&FgDx##HTd3o(ETy1I7fsv943dVeOHed43>TmF_z*0SAVu1*i8UD#M#tj7bpG8Q zRD>re6-Q8QAwV&AI|x<%PSY`S?4k;s^X*Ur+54J_@R=7{0|4_CR2d>iTr1gQQcG#Z zy|T?`CwsRwa9?AwkQII~kR+qJ90>u3G{uS5$n0Te4}Y|2uUlEANkZ2jk=nr>LA}Ok z%BLnxC?9+k0sd;x2ZAK=BAHhY>B03K5ymsW?#aNfTB*`dF2CP%8JC*2Lj>TauNF=qEES-`dM^2C`1Wc-+m zlOT%ZiN8-V;)8txx~-fds#6klWhh*M^Bz*!&gN}?V_Y(Yh51HM=%uArv3ZmOLQQt$EAzQsCm;I}_mM$?+^W?(vMz!}Zzos)y zX=3!O7APgoqr?N5LK0CnG8J1CdGV!y66u2=#5lUKtCWxxUK_9{D7Q_$&W18K;l?&z z;U3`00ma8hr$I*B1rD5#nyz+eTWFB|SKFct)OszPIspxwxs-DrECLtn7eR{#I><*f z$x`dyDqPeq^*-h~gppBJ^wM6YvQSYZTC!@XQF)PwpU1FBV8!%8|IG7x;fS9S`0&}A zu~1=-YG!WSq;}a#a#2h@r0OgkZa5i1Y7gg10Rs-%{*1OrjEwbI$TC?>VbuP6zXSJ9 zzV}_|!B;#rPns+&x1$^wUP~>f=yrrmQj=GoTeb<5JrDjlN_p0i=d=|W_1`(SNL+iu!MP)KHc_A9L41EBp7 z0|qd0aR5XpMb)@Y<^>PonYS^vfV{7_L8{x*t-N3%cfF`qK7qx7DynPAr+w~D=bUc-@C%q2+r3Eom?lmAtj$OfFqZYD9 zHYQwdFg&tCdpEC@m*Nl9<_kCB#(6u&#i{fdh=B+la!0c^kyv)LwZ4m+eK`6S2B7f& z=_@;|JSgsXwb)vmqcpT3tvrR?`i{o*h3ckvCMyNQgjD{!zk{^dqCu79pb-2?OMo$h z^HYKLbCfDw%>3ws-DQjUdjj%`8Rv13Sa7O`v>ce{FQ3Rrhg>|Fp!Os7kHN0YART_) zsMbf-WUm4PbAQl%FNi9eOI7E910W-oT~Pz68IqX4Kt7g#d9yKN11ONGodEpcg6eU^ zQ~2}Sec!OwG7FV+w+nhKjQspy*|b>A?bqo)^$LOOT0@ddPS;6)*rF?U+c`k7ezZKf z_xhor$mVx-qNH%!sjsKgLA0N_2nLaR8Ta-B{P&)MO1|I^$7jpdE+MV&BmgB!G@@Pt zWI!Ps_cj#N-yh<0kIL;erZ9Akf3GrhO z6uSnr!;p2C6YU;Xc#Q!6RN5lXvY0DpJ@{ux2+u}|rD-Q7YXbgl3=U0UL(g%ZL0kW} zM`kw~ZZ-pCvpi3-C9BP(7cfj!rg;eG6M2ox+(#0t-H`H!0C~DZfX7@0IA9T{2qO>i zcUl@b1>FEwb^#c;B0;3?_jRO>4ogM9l3$=7Tc+@|oAnags=lpd?zbkH#3$e0!WP** zDYDA3oAg&h$F*`Ykd(xCW5CjnKxcy~&@GKoEZBzJL|Qiq>MSV83&2`TkyJ8MbX@{P z$$|7Os@KaTDafo2faZPhr{8iJB>ns^o$7|c-#(swW*v-Qk?jaPy#_JoqH|=#6{v4c z6byr4T13%xSYp&P-K06Ty5oFeu<)fUJzj&zO^FsL-LZ!YvUoEy4=JN1XudW$n7vH+ zQMDi4(5^kiNiFqzwSWtaX!|(5Kr2go_$M~KFi9re0j4}#=4bRPc_;n&w~Zm{D4!rw z3&J_F5y@L$y}@XUA06cj+`Y-D}iQzyR@$n3WN@R76%9USZ02Lt|o6#PUJ_BExby3Q(X zwW&4B0rnx!lqRtCt;(RcjRWOwwctJKJZJgMALRqP_Eel-rK%Fgdd&~@(;^5+$=@)< zdhw8*`mp?PJPRFeOBn`YOpPRZPr)t4(&viax;3SIojau`cT$g&!OKAv%jfe??VlNJ z?SoeZU?RiHlmOr~L>SWRqVW8u$m#UAq>U*=I@i*|lL_}1{&q4-m#LNe#T8^Hw=!9{ zY5Fn&#JKgsn!R5*k-nl9t@OI$L-=*AP7kq%ciZH|dkQF!hvK+Y+vfF`lTv$Z+0=$( z-3bINk7x&G=J1Rvjskv#FTP{g{$xp;roGX{RYPW02LPHLQHh1+qk-+8ubH1~^l^Pg z7GPPu$Vht$j6)BWw7mVgUaJ1zzc8$pR06>Je_Eo0(s2Gg*8x($$%4t1SuJbPqxGX@ zBroxeySX4Hy2$!Bpc!4`OLQqL=3NtJXsbz!QngA_Y)gxRAyO4ylTPZ*^wYAx7h5YZl>aLeO5$ z82PeG!kpZv5=6_ec-MSHx>LBUKD}x+r5>Q=3ff(co^g@LnFLnzg8G9&#LY^VD5d8- z4Pw|0e;UWDB6~D2AqSmH*Y>i~v1E5l*7kcw0Iwk#gKufO(k91Px??paB{YaS=^i7h zBdN@RCl(EQqNJCj^sw?}ygtevXrGaNM~~rC>#IYTvC{+zPS#^RaWTIRC-VhoOCe&s zKxwEny9P5P1b4cYbR5zPol(|OJPOZK$j`pkeRFdb;02@c=it-FiCygc)T#725slju z0i{#fQFb3#EJs$&&MTskF`4a7$&IWRPBgcN@1@KzUB6|Ss7L9yZv%7K;VDbT^1F&AznPRYo3U}GR~)4d zTuyGWwR+AMx*rLuYJ5Vdvp-F^qh&gW0l(a0OtYM7B1h_VdNeUJ?^+sbB}f?V2CeM-6FR@(!kU3#N(D)EVn<%BJe_E zm`(9?^M#_J?tOz@v*p$=(d7@h{gUtn+u#C&ce*R( z6G7pLc43q!PjZoRRK;YE-1aoxojp7xy0C+pq||H4g=@|PWox&V;dC!9Sa7m>~#G(%vmd{*g`h_U5syE&${m+ktAQhtl0Jc`_iA)7= zC}#f<$)pK=vtzVIrUuTCwyqW2bSezQ3=aMYfeDeO&+vi5q)ki3+0zkW1OOWe{0!om znwg_brWCq^-b9M<_eOe8A4U%#TUQx79m)F3`Gpt#sk%zBaJENr^#dI;+Ia~>huc9x zD|%%y--l--eJ%jH^9FqbzzJ8NZ>uZpE;~>0dogeoKQU(y;kMOeg~4yYQreBO8uBpY zUOscwaQvbCz_CN&4T?O}|Fj3O%SG=JPg!GM6Otx(?ZZfqfshY>*35~stuN;B38pj; z$wBFZD9Z^{N@}uK!4B|Z_)bj$K2e&_2pl`QBWcx!48Z|48aBHaov8hn=(T26gdDECx-MUpMyCXb=!7Cn0)1=Iy6c_SmDM=s{e44z2 zzW)VPeL}}U)olEhRq$hjh6%K2V9!AaowGnO*g@KuI<=94=oSQvxF=s*`<>M#$!vo) zV@%vm*D6KUfeP)pLL+vHz!6&lD8$cFC&&w?(E;(9%Y->j0J z9%r*9bhw!m)`=IljOAcj=i)RaUI{h6U(|g5YRx6ZD>b|X1xrHrSdKVbaA81MO@5K) zvJhf>r%MZN9Wc+*wm_CMMKBH(la#*YEIAX*E zGvlG6%Z*kZ=CFd(FzU8o@ct8>rbSw^VLg<@7yK78ZW<3xB&wO*u8F)C#mxYI#O}^R zs?@vU%sqolHc*aF&-k#xV-YO~I|7K8{yc(!;x>pw`(dEk7ixsd1m37jggkBn;+@Mh=kZy)R*La`~WrU!y-FFYc{TJ6;z^!jizOZjWGmtp8E~{Ux zdy)tL#m@t;4tB-Q*0tBq(l6|s8_pBKIrSY@gxvBL8gVQjr!7XQ1Df9-TFYm*0jqVc z6=^)BlkN~I@c7AH)h_VDc#B{&eD{1@WVXFv$l;X>pj`un=7v`0$9nO=UlzyurXl4f zYO%&Uac#re$sSSHhZ^ibY<4|8_OR&?^~Ov&(GOFBBRvz&*c3OHct9932Uce4fv5Fy^@g}w?5=myuudi zI!FZp@F(n#hYw@aygL<87P99V%zc6p#j<7k6^E`<_!Hi;77S@aoI1#~MR1A2(VJd! z{z03WTLg4%qJw@R)6xZ(>F6P$01T$kah$yfbzQ26T`i$fBp~#=+U!P=xh`(1C$WN zUbf~IbfAR@4R1Phge9%2#2!&O3u?p4PAaQ*QJK=$W%Qk3hsx49PZWcfMf<^sih_~F z>iD~)Bx%C9aXM?{pPEV{SqNd3%6exS3^xtwrLYc2)OZ!0ikcLSbC^lVox75T?}5MS z0Em_yc89Nwcm{fUN_4K+^kQx~3$vpnw-R}G*~Db7x(y3$)MR<*LI*`#p^q<6`sOl8 zy$!8Z zHmzwW4$^#J2Iz7;S9M9U6eW=Lg5Prf05bI8wCusSDL4u+leP!$W1NqM9b0T`@5Ek& zQ3~3H@w^1kh}}D)vL=fGNA0S_87vnT@u8?v7tP!H-2pq_ixUuhl;4Ltp4Obe3bF~3 z!e6)lIXCIB`TjYR5_Fe*7$vF&&)ffDX|+ z>dnkmDu`jTv3q-kqcJmtKj6zmbV)Z74r&d(gI9wOY|EHz0+ z{N*>s2h2pNED(R?F`MzK<4QjBFE_|E7X96V@_)(ri|V{k%oZr@A5@dG0m6#~8#SH; zwxC?}nuk($@04%`AsB?UMV47vLKm1?pcdnk`YT4)hh8QZQv=M5MQR$=t5fTGm}vHV zn_}vq%bM3lkuQ97)f~YD>+P8n5C5@*N`G4Y_cc2Y7U4v5nUhc-io!Ggmd5`qe{J%ZF|>h_zX>81tfKt>4> z(5xDEfrnF&%mncI6QaelhW8(qi$O9X6|%QgLLFpYX<;F3$^_*x5hVz$i`O{=u6Rqm zy<8TBnQtiwu9g2Pi2DVm0qjf)WMQ@kcXQQ&yuv*fv4Z_}8ess^O_)jtvQg;b8q2{V zzjFm+1EQEuv;I|t0)pT{JX_AxcXdf7_R$1r)DTZ4ym_mT(M-0x^!=f*l56P=vK2++UFO23p95ehJOj9Sy>` z2`4~e_#cb0Y%c&0A%NiyhSw5A=K*?8?FYd-|8v^%L)QW6z01DqXQDESn$O%-+iRt= zmuB_T=}Kgx96aDnu+?p`@a(+w$@tUd^56%?W?#g(mIC(Ng=>VsVQQK4{JkI9VSX8& zYm19?2^z{@Z@2eRZWQxfzcsQqpaZaeCz*ER1q^+$bPE7<<&kR6D%R> zVz)3+aqEDYUR*EOcAqCiID3{Z;aDc_2)h(ib3@B@7MXjxd=j1&V)|po)hf4MxK+Mh zlzrb1Qv=T2TRk0>5aG72dN~}eep_V9eHu%lJ#9%QyE^XXxVlriK~evh&K4SOhyUCM zO$VW}ph|34yxcck<8*9@{#-m+e4RHF;P1U#mWoTf`L=F*^~0Xm$J{(~jad5yU^?GF z$;ri9J;ExJZSf*}^NJ?+B2u=&(G*zvK2fA`>H_xRk}_s8wvqI+CSSSV!=on}XTRug z*@6q-15>;N7H%0lW5qbDuUN*1pU6uQ!>NWA)x1NS?(c z8Ug^wJNj(iYSFo@uafTJg7%T&=sl&WiMAJ3i!U!ab4@#1whyg@u^GL4YA)r*tF3|I zWtjUKf5Xr}ZF)m;(bVOors!2sMWSeolE)}ru?6_Mu=f!oUljodr{hwnI z^(Jf!F4QkMCm)ZW$jXUVAlmF%);(X}+})Z1@yQR1q7RP}a&w2kSNykrdI@?qtrnit zjpoKMc>2zF@sVw^j*pHtvXEQcTHe4qE&63*EwNi|@mCoWQPwL#@mDy^4Z5h;AAm4z zU{^==U2Go}Pl&wkF3$t?@ADm2f+sGzfeA8UO(h2hxxp-6n{CryEfD-T&_8JX?nqb(QweW zzX!u7u-P9bNPMVQ4Cl^6T?6h#Y>6#mz${MSw>=&#BGLkh;KG{$e^|3KB}=V>$@XBJ z!ca0fxAF+*8|^=Dkcs+D;tEeODA49Y(*nL#Qj?^NM1szB(Upyrk?~XL)VWtBSvWUT zucH;n;PBSZC6)1MaIl|&Dy4KEC|WmA{e-5OKQuva6~Yi;%@zOVpX_>6SsMq{%jxoHyl>#P#-uJ$`vjPGyib#-9l7-G;;N)DR`-`%epP8R|GN9Q`X!&*uEubs|GWrdk zdB$Ov92vO(S)JuW5=(>XV(GHXGNpt${NzGi>Z6tQD*dm6z|uw^!k>Ey-CC1a zugh7}4*Tr24j~E#twR^RC2k6Oru3;$`ZyU%<%At@`Zw8O#b&Hu6QYP+(s@tONn(RM6sclvNZPLP^;}Evtv9E!fsiLiMq;(fGB+0M|;>Mo$ zD@7{MKEunn`~~_Q?FN_1Ol^kC+-~{?8X>&o`vhy@;*U}IWqQD7WId$u!0hE54|Ez@ zcdL5!ZZFs_a~kWjxRs= zjh^qrBDsAgt${d!Mq4?R(M?Khsnj#`*89lEPR!LK-i>>Vu6Mi#IR&W>Gxc9L22u&v zMy;Pb9HKE;_Jcn~U-EmFmc-BSPkBc=Ojnx|rE@FAU<$i-zv2n8NBEJ;XZSQ@UOK{s z#U?x zeXrs7%~#~ER&ZY=gZAJ)`<3pB z22R@BQO4z==!Mi3uJ7UI7Ipo43gTYu-S>296eJEul`L@#C{}UfTdeGZSLtYnrEzq- zP=U}%ky_qX*uz?n#RAL|4ODk`6+L}QU6Vl}L|k-4f=?NN%8chG%PM>3=ey*y`i&-G z#~RDN=N9`Sr)`9A2<9Bx<`HO>7#}I-L=Fg1mESFy!g)C z9+GscSkx7vhvQ+!S|VUBJRP@~qLKbe^sD$tNhkkO5ubfZp)_18dN}!&Je0PXK<>9` zy-}@wLp0w!wEI#ieG*$yqG>_#jz+vz(x$W6-Ni~>ALRQq>Mbyg3bAX zBy8<{+MWsStL*>$)tqP64>lK6%8%uZ9OFRSSV!QgeE}dRIG?YgX zuNMv;(zgzs^D-i7xs}$uc2j?x7YS3FS)ETt@}zcTH7Y)~cewvRdQT`|3os zg^zPFM1RZV)M2xIoi3pJd%twKCMQ%m1Ps!8w9jO=s7TY$nzVzdQh9rC@6&^YxO%kg zTyG3;e#dYYBCbfoimBl{(yuEgU?Nr!aMq=QFxwVxl>PDmnMoBYt2F!Kj8!giP%N>~ z89XpM5@RVaF}HMs} zm1*k{W87D62TmgrF1w zxqWiIRESk-CHh@)A;FTZy`r{PbRaQFL)h#jE5Gq5?c(KvfXleAfgA~Aa?WUuylyw$ z$l3V3F0n`C6ssKw{tba~{*0Ll6`@Y9he{Ds809+Q&z)6*FOe3)rwtI=+0Q7B*BDP= zbo*31?5TZIW~SX@+KLy0T#_X`RenX@H16&I3f!tgbS;fJ-9QU=jrKeycok(`aQZI5jMu?pZOKLCEKqY<=I*r zoyYs;`-~#p(xT$Ok~^m}bwbDzn7Dc(y7Hd>p#1y`df#x)(2V=-%dnMQEBf4O*R=tq zE1l;mUB7Ccsx;zV@!^Iu1jjw^0Mw?*+ZjAy9duULUo6k_5{Pr4y6)Sxb9!w4;x;P2 zps)RoF_?#LqnRBIbpI2qv4<6&4`u@e(?8()3l{;jA5G|BM>)(zz41|q=60nT zejr(bbu6B!m!6ZeEk#9irz$9A4$ZM#U+oG4$9e?EymQ9BJ_>>>UMjx2f03Lnlb7ov z3Hk@`VebC2z>O9w5i;|aA~2GUMHA9wd!U>@74pUZjD&vJ6hEzU3?o^5+$a>qo!YOx z7uRmXo*MJqh}e?MVy!n@Q4IjeRx!y+c9{sO+Ih#6P^e9Kr0O9PyY?lK>Gr8}>mfk| z&0X%(I)s1bgXMgoxQOPNdrY0FFcKX=y7h^~*((){BtmmR4VpeJ&9T*i5RtCmnmO3` zare3t2`%{I66=+I?9F|rN4Af_x9>V1=cOh@4LzbXZxBkJfV?avaN;*%TthuKk+BiP z={nz@Gzf=VBqQ$+hOJ{nh^Pb-wY|A)oLIqbIgGt51K`kqY4up*aM)|>vBc(z>MwJ_ zz`>mC4>>B69cR#f#Zl)^_cjiHo&a+y#}ZXl2g(ZfM;T8m#iv3$MmR_6CLcfWHICg))9foqdc{Iu{K z3(lo@$;Qs#>3OkFoRs!TtC2_#1DPpSYR0TG(bjy6#bfo0OW&evXLtEc5UUbdVBUjR zgoaalX)=UssZe{7%Tg%blbs27awri5c;Y|g?Ok`namA%6XSvT2;mIa$ibP)iEyID~ zfMDl*H*-O)ps)`K(g#Md`w+&UcvGT^UyEkC5OQUYFcQ|RcVCT^)JtE7cxCbeKjgDG zs+S$n&U(L?C)Y4=xdO^r<*Sce_&5(mFNW(*xgq^PM&Pa_@$Iz0mR}3rJuQ9rKdmkm z|B8#+7COhy)6CY}oj9V**ukFj_%H#BRpX@lB=Kq#JJMdkb-tlF7}PCmsxiZF~EISbaHfGtS=g`U*Rb-n_3n#q@+SPon0wRbM8~5NAq}*lXaP4d z)Z_8amImw!3T2P8G0}05qVKLObQr49Q>b;1Q4pG4Au@FY>4%!7z~R)%)nno(ZRX`O z_(G>dcfrFe&a>w{5FbSLF5o8xa2snQTpU>D8`8)M`8vJ~K?gm{Jm7gl=z%AW=sEGM z)U##9wd8a6_1FBGLk=s7-oVF=`S*IPRDW*Wf~;2r1TU%>{~UKH@6G5)GCF${8UdP) zz2+ow_D8M{vI?QgyHtpnvv`sZ;sNjw3&pZBj_pFxXTv3Ip9`*A@x%{ld zwG%pK4W2`ZG6PV_TxW6d9+QsT5iW%L)IHfl1Z0KhEsIj+OQx30k5gi%T>!PZ!3DN! z^l@GvwV#!{=|`$38)MH(Nhudx3=M<*44`M=PnGT0`#to|PmGq3L! vtkD7h#oPb@<9|VXDE(hTZUO%?$_Sp&08%pQCT>&Vn=^o)uG861{9*ndEYLfj delta 36662 zcmV)bK&ij{r31U91AkCU0|XQR000O8f}ylnsHM}c6J!7YQRD*v2ml-aWHT*gdM;{n zRa6N81B0MTW`m$hW_5TA009K`0RR956aWAK?Y(Pz6G@UV`kDR})$W-W2}`nMV;baU z7%+6hEHoTU&-AR<%Tt!hc0oy{sVZTKX`W|)#QWi#zqh~SM1Mryv$CYp1>;MxJ8f0o zBQr8GZW+0C=gxQD9k0LB3_imT{QXydoSnsq_cwnKq~3u)9`=JI^$tJa_g_=~-8}IJ zVKi+GgY1ZE_2SVq2~W>5Z(shZ?bp5S_V!(?Eh-;{yhPNsG5-{0NJrlTM}@q)=HPO{W{`0$~3J3jsp^s?LD|M@>2 z&mP46aTIvpV=i`g5)Om@ZSN7!XvylL?OGE2YaAv)?RJ0XcD?R(WlyX!>qrcZx?&kE zf6#|^*+=aVs~>42hITj@&=+r!eZM;kQ^x?c%r5`%{(tzxOM~d7A!el2-+|WDZ^-}m zmxfAc1)nv@WOBV;-}~-My_P}a(3YBK$nyRTvnN4nH34 zd0$w$FT7v+WFPo**y6yz=mSjTb@}K{k|6jDQ-6o$zrYd@pgZs155>$wwXHipynp}Z zx3|yUzrV9pxHPb&d%OXx4D~i>dvENq#80pT0f0YsFz0To-P#d3eLjB(9^^gU@t*nV z)O#C@Q=AQN|IAM^?`3$L_{mgM;`^922b;OM-D-EmWQ1c+fA8x8ii$#x_A z{C^atV?PQ%``9x}>S0&x=V{`P&UigP^VzTT)2T}O6n@_L?$#0S^ei3(Bma~DKg+UF zcWaB_M^YsQ#z-6+vqk4>g>`dcX!v@I1Sm5$4S&>eW%blq@InB zTfKO&MNLORAR6Zb!+Nmly!GSpY0BGOuz#VgFiponsX#xOsGZYNkkLYRoXF{lUOP%AVZjy|5w zEWrskEgDVEpbwMN+R9g8h{3kQ29+^}rKX3WyO{0caTsBf1OFpK%n@wSAkFk7{(qhM zFt4}qgJ$X-{D78kdw+P4)AW-b8v|>xANNum2Fyd;^O`-c7Y|Ru(=GaL;RnNWcwl~f@0gHKO`Q2?+Gdto3z+xY9Te;h%ev%wqiB2@4x7OQ$bZVvkD6ye1e7vW#XGLzS>g{j;ah1HTE4YFo1{FEPk5=YT^BwD8OROlX%w!6+UG~295 z2Z)uc$T02)P3Sa^KCubw?6$UBjC{e)1KNv;4_Z5-zE~33E(3tp7?T*G6@N(sOxngY zR-JXu%5?xb)~3KE>L0pi$%uQHvfKJm%t03WY1X8^c;U8aV|*HgCsW9yj2 P0FYE zJjJAT>pl!jN1z<`^mo{#KY-Dyf}@M*zbLW>G@kqM+=t2v#Cob6pe-*N?mn2 zVXAf@b@kH;^Z2>bRR<8JihmQQE6*NG6-Po>9uAnw4uP&b3}_)FY42)ezCqOC6k5gq zHYCNz|Kb-B)Gni|_|0f#m(xs20s7b_D#=lRC}LOAMmjc-1a=uEBs^mTud65@rgECq z6~v3pld|JYaV`&eM3DYeOu<20RaOsuuyR36LAyIM(Xp zdBF-y4tjnR$j_lwlU$0 zY!MEpk)QR>pgpq*k$+L!=#A4X9{k;p#=)x?81dJz1vVO9K7E{7$@_r%A642xkiY~v z+R!ufMp!y)r7njY!}!7sS(}bFSIIC)-unG;jQe~WF##9o4uO9MR(uHJ!x*Iwmcr9P zDzq{{yo^FW_4E}JIU_&u2j0IyiUFA?AQbuH$)8@+dv_Li#D5vWK8}Fz@qk5@`7PEA zp@+nZ~IBndXkV)9+ zYW>zHM3uVT(0`t&@TK00;ppXyJFnG=Xcfq7-P`2ftz&=KKM(uaS*@-&91e#|HLSOx zqh3w_$WQpY^B@>nlTB$T5{vFdTCLykJ{TiG;kfm_H%=0uNGMs?%#??EVGj=&pbI$O zhMr8*&FO#uVo!bGu)-V$kSsTfBb1(vPC-J|Yuf_~YkzG$o6n`1>a1>#nHNBW3n5dl z`$bK!dGL@@ds)l}t;0n*4=wO?fPgL}8|6UYbSgC_n*YRpazMf2ooR3(3$P)eS{2uF zhw)cHHRA*?XrHYPf?sbb-UKEA8IYPvp>LRH&VPmIIU)@v4y3HwMjv{E?aw|LArxu! zCCULW8yQeJS55Iy4$7?>YI2?e8sxu3E-(i%iq>oBh&9!uV+eVi&SDfUTTw7P&CcrPnaY8X4ZZ)w zQ+TPtbdU3_CV2n62=JyWfH&2_n=T68K4R2LAQDcN1ymvMa==>Bisu;(mIeAX=k3b? zJRA>>gM@=CDz?35XFjk>gjfPnUYP@=nt!rkM4IV_@|_anO0KM;2pnG3#C&KCsc{K_ zRecVi(O`M7p9)#CB+%km5*RJ20}}(h%o(usQIO0BUlVbc0A9+$g4k-!l?VOx(0fLs z{>1@tF`AkSCPz$G5lc@H<$0WhpW|WXM=R@Bw5FESuvD6rtD;#^YwbA2zPWCtk}4~y@{&rG33O5ms8v04GdvVjt7_^4xT`EO!>5{}41Y&FL4vid1~{q+Nl3t_ix3 zRWOH9R=dlT(Z$=*A)qg_s>=)Y|9?P$7MG7$wQ%T-Ci6LFnzZHEWva>{5Y3cllb_Rq zE)E^9R}wsiHp{`s>T-BwL**g7ky1SYotA?4agz8`4lMol;uGq03=NEt*FT;vF$L)g z;HNt1=>lL^`nRjBf4k|bDDU^*iB|eCYWNU3m#~LBG4+hV*gY@V=Lh@CVbuaU7v9V{*uTx2TUSPL9y@o*Zuc^{*mj zgUO+|bkry|V@yvVE$~D6E0n*+@|TZJuSfFp1U|oS%g-1;I}+=sijT#f(P&>o7&9g! zCBOp@gGmOwB~30&#hw>LX@B6Iz~Ncj^S-ZP`!!s)kX6Z0@CKQ-j&Rrf)@Yob)dJ2F z!vb<_B-i(-zQ@NW8CI`Hiw8Zck;M!Ia>7q!L6~mnPXoY!hHrus9EF_E7GHcE+1OJF zH5eFkQLl~bG_rABY!}7G=X+$G#C6yvNqp{UW%(ct9Q8Rbj-K)g>wi*o?dx-#tN95a zT*zVP_1^oK^^Y(+dmcwYie>7EK5m2+EntE1FddK3tuE-lFv}XnhVf8jzYWr?#@zF@ zF=jDp=*9yqA*&Y+G9G8M$Eh-Ak1sd4gHaOr{rvC>y8gG=Pt;;7OjXNubJ#D#k4DFZ z9W2;7eArFdbAjJlV}B;)Kupw03*ar5&l8jHIaPuQqXGt95xH_$Y{Vx?JYe11W1O)p zal;#g!!-5eSE;8#5+dH7j+-+Kro05@#_s*~;PrYKxJY7-V4F zJ+=D{V3X>KezI;^ZJM>XrD>Au)V7h-Ld~mP|CK-5z!~MAaDTFIxTY}9b^KTyQdE8G zziW@WzlDFis1Gyvb^njfy+3xg>+o|w@&}`!Uw=fc{b{R(zV@}@EbKHUDvzTUBE#8b ztW<ZS_(l%q+Ymmwebv2w(%GY&e=3zvp~p0?vy1VCx}t&Q9g zT&(*e3{qD2;RUzQ6M)yeULps209Zvha@X$9UFvF%QAxy ziJS63z)^9s-z+K>4hsyrSHv=W*-WXGeda3LXKth=wK7UoMybjub*YU~#k!b-%%qmSB^@j22eUg%{!F>UBkf>G(qhPpC6nD$MoQ|&6}O# z$x$ChWCDKBGEkIQS*buP6{z=3RG^Yfb5-aJT}P!0o!7@#)rGb%P_4PtEt6?yh7ywg zmexD6XlDI>IK*&;J9z?HTdzv84!OL)Yk#httTc_4rm@mAIsmRTjg_Xc(lma1P2)?9 zEgST`U*mqTgl>^nr`k*C6eCq#sTLXKBS+F8h>igumFH5Rv6FmX)cT=K|2C}re{hwN zs+S0r+kKft<1rMBkv}EnXA}dgDRWNZVRjIH#`Wv8ueOS_zPi3qTSdpQ_Eq(asDCHJ zb$HzC1!*d@WJ)Urc_OR!USsdXhG&k;0u#`iSJd5rEydEYVwe9GJRAE{sO7Y@aD;6r z7VE>IGKRXc7bZPNTuwvFP$1@N(kN?1$fJk&-y_uz%gsrbvJ#VU*yq}0oMb+mZBESs z+&t&7B|A^l!%CJiu|^7H5iW1AdVj`xWWgk_I9_lyu#KX%z`Wc_@Cs}l@WYaeHh82= zqIXihhmCkT#G|5l4670WalxX4u-~Uu<)C77O@G)si-|-)e;aF9V{ElXG(ZOAL!q{r z$j>SN~Ek^eG`3A>)ac@nBtl7GKmfwk7T z>c#kuWm#&bsl!Vdtc6R@R&xW`!hrI6CGYXeGk*yfjT1mNR31X&l@>=)R*h)IT<~ZY zE(e`reLPPzvzTartkS~JJ%9J=rDU||X^&daI&FEkiQ~FmFC`r?CT&UK04i&e0c)x} z;6DSEVl2qQnEP`GRgu`uUw>DP-&_JpQJcf0HC7(Z13Ebu1Cm*3-GM}GTwtV;5#(_R zip)-Ob3UlQ25+n6+#G5wK|>cMgu%g-9^UK0N=(7yy-w*XEkdP5xItQkC*x!M^CpUy za!{h$=~7Nftm+DWNl1VzPo>$ON;a##utO4CrTpIhMovhUcwSwZnt#(t=h{2dpXIc%I%| z<=9cFWGa=+^;F61(<*oe88BB%=ww)Rs=btArl-}fZjG&`i+^ErDOAwPTjgSIlj$qz zIMcrQH8Q*clX}06yr=$Dq*3^?^taJd(=f!7iX_Nh6sLjr7x)FZtwnb&6cCH1}advs+VlLoKZJZNa(l&?+AqIUpo- zRXh^Z7}l*jPg5v%fU#J6DS|2Qy=~c2qB#Zw>)2YyrZ*h9&U!X=^;OB4*(> zp`0ha87|$(s4)tXLn^${f*K&oHLwb+H)%IEOI)ofgMU`o*W4>LR=4Kunpxpz@&RaQ zg@6v~qXn&seu(1|UpUT>D!>uh0J7!v2M3I@+1XgGb)&$<$Y-9+H+t+Wq+Lysyi>cew3Ygu@E~4>M zdZ!X6nIgZ^xmP;(YpHYRO0A1{(9Bf2ECaD>K!1R2G+8O%E9HBoe7~m3_b|a|%PUW7S#pg8nfN6e|25V5GYfIudn!mXk zo#LfQZ1@woJ_7VIML0w15z?&Ut~hB{5sa3$H=~8awjH5NU9`!SwF0K?CjqJod|bAi zjDLu!2Q&?{^#rBlVHl<9&*n2!QJpLz1YeBMrp9IoD`Px#*o99Wq!`op#f?;~ZK`Nh zw!GfRmP(r%tx)leQ>A{@nlu#zTFyn@N$u;iXxe|1V-G4*J z?h(yars-od34^<}!a+FtFTOdy0CA8%wbqLX-h4_@c+J})G#x9w@26+zKR?rK;i*E(V^=M*(xsrLEV}=;y%*F9H@5&=m7+3Mv!xB$ToQfyo6-rQH2^ zOd)041%y@c*{hLO>~KJ_WUVVIK!54^i@RIHF*FelB(|zqqo(=j9KA00P%q0~nX`ziS}7K#v}W~v#|r_m1K|E(LsXAfeEmSag9=#(#2D=e)c= z{#=-4bqhs}%sK({A$=D+1mg_&^{xg@Ei~O0${cZ2TbwSrV~ujlo@g3TC_K_sch8W% zi*;pZ$;?xX55+Ql$;ysyQloY1PY14y%gwCAiuI8jG;en8=h1d!d-i$6#V35H4P ziUb@nl#;&&!EN!|6p(~@5r5?7!)Zfd1YW2Ga)-tz9&VlM49q==SotzI$!e0_)3+Jn zEXj0wBig9hj{+mkTiU}HVd~JR#q#kpboGs?w zJBZ4qP}!ol>o0+U%RI>u<2f;zR@0M^^q5I6e|jZ7I1Wh#$NcVUNxc;ghuWvr3Jw6~ z{KT^!4oEYYmdC@>2!Al54U_o_%C+9SfGyv-Z@vfsj0i8cb1zp?V+tJ|A7lt64q6NY zB<@iJXZqIRLg6xc|>y2D!E@g6|3*+e9^0`GiDoqsiJMsTt0YjNK#R?lo1 zP>jplGbJQ44FxB%^BjW)XcH?iUq5$M^4Nw|E$o7?qG*R zeALuXNJ6Qor+v8nv)-vKqMOB>ywi-AoFDV&$4$TEaHq9 z{#fqK#M*bdvilCoTMqgsN6T7h7!em~h!o^;5qpUqz;bQqom-bnFf$i`AQsv$;^eo_ zIH(1J51Qh{zU08f5iys;b}?FBW6+hJOjm?~ulF4te3=jJzJQH6;Wq zofTh3u#)wKV5K)$d6KOxQXT{-=&UYOvUXM%EA@81y_3?n7B%(RxQxQ42|nYd_Rvo9 z^NZhKJ?jFY0W?YcB#fqL&FP{3f=eoRbpy+L0B&{`Ouf?}gJH+OZ1uhP|&#&Y}Badv`MO>PLrfu2X2ux z`(2Yk(&NA1#37OIeD7t9lln|5Czss(eaR!*f|f_w(SnA@LeHBO?T#^tSX~7QFxxPt zOw-h9w~bXPV}dNF1k%XDZ^Q6k61UK#^M^nWuXi%c9wF#wetspltwH)aK!UPzP^ zQhe{2@iONaFB_jeC5GUUKAvx;V_Mx~XjP@uEZbp@pfW^2^e-Zi-@9G}afy#x-nMli zy2v)kIxUJdC)H^hwrD(ox0u!}?~%Eh+N`wt$0Z@p(nj&Sp1v1_Sq8LaWc#}b?R6iw zXn(7H*D=w9wuji>Oi+94`S_dtRKMC@r_u46?N+%}A;NtGBq4mepQDE8EA4Riwr> zzM3KDYTXeTX{j7Xz&F|fUfICc9t1;c2$ZIuAAcgvAu@!y@rEdvj$(@J-`Ccp0TU)>+@TUxlbu-_ zP*n~33Tv6E>*dvPmJFXirN?weU1LNpA5pA|x^~^8t}!;^07;vnc_d;tJJK2op)D#` zQhkGTNd#PTdcCkti-N*()eM42eqOxi>lJd1O@XEHn62Az>qC?V5r_f%WPemkq|w*X zq1`AXCVPd*tzr zCDI|7kXO;eu3z*pT?4eVw;naJypvvERWGX)TB8QYrrb+uNG`80U8N_f^dxfPFS(w? z5iG2*N2>m~RJR=8@Y=-#SAV}e$LRf4*!O4}^gain!~wN2d0Np_YYVyw>!DO9O(W9` z4)s+uBsWQ~K&Gv{GZVAf322J-3a88`#1YJ+1Q>e-J(`|o#Zf#gC4(G^?zQCz<00MX z>@Mw#ZVUOl%vG2a_|0+e7Z)tf3ssi)3*DL9XzlE3X)~QPxHH=#N`H$|*UY5UZwvig zlTjvg2=2btdp>M*0W`k<_(O9l;yPTVv7M>SH5xLMIr&cYdhLbOy<{KTwwkb%zI49D zh<$=Cw|dZT5{La-f7>hz<=|-LZo@=|9)%hxMU4)m}oIcc!W%tU#w<;H} znF>s8!5qZk+bA%RbFq||rhZYp`j@lG8kc76Qr@P}B5D_^Or_&Rs7g(x;|xuyu5`@n zN;PJB38f=b6@PXN-CvO+vSz9o-Kxl3p*3p~U5-_S+QpI{SJjh`H{AIs4NmEZp7rLV zEHm@bM_y{4*o6%ODWY3Fx>|`JQtXDlTPX7=yLA#L&n#-0zom>N55uDt>&ooN^)M=y zcd^t0_PNhw3-HYgZie$ufuGFRbf2QN_}V^H`A!7lv46Q+SUg?c8H!Nm0^OmC`V;H! zz#}G@t$v-3-GkJkJ6F=4cLSuo%C)L;t-219ya{>bT6O(gtE3+09euuy&sR{!K;;#5 zG4XkI+wLl$?)AnKf(xdATsxYDDu#FZ`$i1^?4AUo@L5mt4P&?WyJ%< z6Gu_4+kZ+-zu{s!;>t`JofViVpkt9T(mCtmSHPeGA)OT9XmY zCCKx4*)YJhp>h)$(_F@NxjDrHs>~OmCqjI7Uwm(J!LYRQ;{x>_xvuQpR4F(r1xKae_<9PCp-aKhMjw;;Qe&mxxZ3&+rYU${ z={LTee&Zkky7&`JMnFDYQn$&oF4K|xDeJM`@{$(dM;4E8+xw@C2{!E9OUrsj z6nY_a*7Gn16x%)_k7LT(?=PXgM61==TFqdKES!Kb+%cgEFr$f(Wyb~9^Tz`Cy z1{Qh!eX*Gz+|RNF-K!CyJ9zQyFE5|HKX~@`#j^v$vheD+m+xMvjBU;25GVa`=x4!y z1XI)i9+HlR^hO(>H;!_AH-P|q+*}OY_0m$TEr)PH!Wua3+;5V|f}{#CjpoR^#&~n_ zW#e-X23vp)a@zDEB=Pxw1XDL!Ab%38A;P$fv1ps0uPWE4GK$JpK)td;9e=6iSTr2- zyEyZs1xHPF)-!I4HjNqfa5$C^iaZNqM5)D>DJ==Fjw23m5jgAZjRiQ4xeK`{V64(= zpixuw=)=F&b(I1azAy_0IZK4x2bgP}n3Tk@!OYh!E=f&{D)a8KKrtLNq+VHv- zy`zY4gl%e>4mxb_#myO;kuT_i>l&G(UNKRFIT9a96{@bC#y5Cx1!Jo9tr zeCXFMWL^37yrF>Qr z!)HP7Bd%nAq<>-RrCAt7a<6!`VJt`JaVySA3{uhp>ogp#i`iy zVqIuniElBmbWu4=Vd)$$_8Vd8`WWCFkEM*4z6@BpIFGF%>MTy%fvXEnq&9_zCJpBk zXKoovlz*1F^17er@j0x@aOyn`df@=hv^Nn5@%))`Wm`|ePtcM4G<`|ouh;Z`j$%K{ zo7vs+YM=GSI@71n$f!YOV@e0yX|1+_juV*MqNLhZ?NRr?TDAY`Z`SLN;P+wh?5K9Q z**tp0lK!++*GR_qR4K2>XghI9B5k`NSpjDK^?%U$BRma(1xV=H7Jl=2r0{rbI=mY7 zhdlNpPyFN_1YTG0FLYVw!#K@=(?JL15RfZ8347iUA10TsXI>rVnm4$O4Q|Tc&=e;h zIqw1_s>TWz;Jkaa0Qjfcy39lQb`f=6Oa@zK2ZLLF!~!*nF^XiCZjq3}rJ0e#27T#&vY zCOeU;Wb~fD`$`j}btnz?0+1v9#D9Yk9Gv?j>JgcCyi}@pMU%`TVo7+k>bm1#nm;@9 z1l7Y{azs<~#P^`QAOFQ(IB~YJwG&8v%kGEM^{)8AJ7U$k{I957bW?+3P<*$@RSg!k zV#&K2R9RitIOo^=@3-4B?WSGe5G!ywZg4mPY`!;~RsY1WjT0%$hqWbn4Sx;m4HD^W ztfh+V={;wJYGp5wQ0dk0kWe$?5($0eAF<#)$sl+Ao#3;Ka941>#Ju->&h9+3%NEq0 z8ig8x>hUb_`x~>1oWyZ9r^s>Kp9;L?gb|}CuzAKV!r`eAw*%9}H0ZZpA9rq3;g)Kv-x?3ov+x8a$++Jk&T1FpffQFXF_>jf z!6;qeYK}-7A?uF*8Uy>Ni@vOUfSCm-1sfD8quxha7 zMw9s<3TAf+0I4d6MSnDNbMIftNO}k1=fHazoWg!yB7`2RNNtprX2jfgGVRzRn?ExevF4Mb3lOENdvML)$*RB5`QOJtV&I{h-xj7k+`@e ze=@(NaM*(*keTpms@bL*EWRr#QPQYO4+*5gwZ0|`)ms=esaCf&;&zO2*~S6B6o5oR zPSB<{usdG3=cx2-*q>3Q7D7VD!4@2<9viYDQ^a$w=`^>T(}OG+DZJbA)C|A?w#|8- zKBa+@Nui-_@qeagy;(bb%ioPSr1l%4`6lbnDlDSpSaL6>vJH>X!r9965!Crh6s#W; z+S~s%-fnm9-i8K)0ib(&=H33^|M|bSMG>KHqII9Qx_MQX=S{kb-YIM|z1)E9*sI=XKD34e``DqG_u9juNDC5eyDi9=+V z!RUo{kUTdjM`m~rHEO0u5wyxlNf`foq|+O#pbS@GCeMtMxM6oTQ^#P%RXa1{!dWfp z14VRB^CQbi4;=It8NJClLyWLQ(J#5q#9YuvnHiuyP2lH0yvc{5y%E`N$k>+s*3@_< zQVx=j$$u$dsKLv@_QIqWsR!+fUy+n7c_Moh(r$5-Jy~gDR}#=1eQ9PtdWjptowyyIH%W-EUrAco`8hq}kW;m|vRP;wCV``Uz-nH!|nKoxe? z9L)%PA**4TLJTF%rNq!RMN|B$C`%(&nj5x0%YV*;qeTnR3j!-T#mZ|SbQQ&|Qt!mEplOTcTh^?Gwv+{JQn7mKj?iUwW0RYIAv568-BoP@A5R@JHKO|4zE;&_R` z#D92^!h_YYu+u_Y(ku3y)OB&Cz2k+3{7ZAyRiiL6+3>qs8%8!w zR#%T!{mCg@tE5U^uH@yfC@-hyA*%grf`3Zuw^@M1dK)D4brn83Bu(Re`AJ8Qk3a3q zun}t#j@7|x|m=zFfG}@>|xA}MX$9)JG{6NDdQV&uCGay74l%UE^Ats z<0SAu?wR|7SQ)u5`i!5Ny-$osI~I9@!=#O?Ot>Var6=8Ng}-<(=lO>+^S$D;4}VK6 zY3D0$HDhV3g<9i6>3i>scAhP&>|9vSwx9;|uA;5;^`SX>mQxy=+F0WtzpSdxl{K3y z&0nR~yk2U}8~Mfx={8AOvap92Ri&W8wg3H}{}<1r|NWo;ui?ROW)^_2dO3Y3SJo`4 z?!?*}x#Epg%FasJS)lBcmr+ZpI)A;tra|DHW!Wh0ZfzY$t+@9wZN zw=_UJe>@54$x|p7B=r0(9r#%YL`gyAV<~&-F!3$+R+|8;3>DChTia=~4|Z949xgf6 zn=6Y4YPWTs^?xRErqw$HR_%_ncE_r%xgO>;$YNM*#)@8ecaAWmNUoVOdJ4%{=nL&0&q~UQ1^RJoEGqHy+K8WuJ-mRI zOiheil1a}qot~F#xHR}T_8H7d0=-s?TSfw1(Zy!{0^~qQ27Gd|cz@LOc6LQn3FcwY z5rM*v<1C8@T0#_@P`;W1_dO_w`%V^SL?<@>BbX{j9mdODlpuSn&~IoxBJQ=5Y^7A9 zUBXklinFZB)w1{jK{h|+)04ZH2MnjW93p?!m4{^Qt|NjOOrbbOlwy6H6LrTGJl)vLclHrW*#NpA+?`5 z)eg-HRhr?sq?rrhMC!Eb8+F@ED}+9@)1He_ZXDB&on>}C^M`OQp3b|vLWV~=$(%YY zb;_$q3o;HY3;J3rQ@)U zvp9OuhB*AxYY5`x1N|cqaCM{&bzXW%aZlu!!F$9Y{EU;>L zR+rEpaIth5)d5x&S_9t9*Kx-%w&+_t`(Pze)}0I9MR{FRTCYm$rLeQO$vZ2SH*EgeVYKNX7nGzSAQ4|XsJAkgfFs5 zA%Xe!I$3~OY5P9o-s`Q&yhv>mZVt3x!EH_F)tri&MK3op005!R-cfvi zjatY=t7+1Z=D-b6jvU2I_-=T8@%)23QjZ#T=6`nCrrGPa=pD5hM%Afhb@TlK1&a~q z=C@Iwydelfz0)Kfk90^``Y)KAcWKc>%3hmjk+}$wlH__XgHJ)^{bJ9NB(-9iv`N#2 z^3#?S`8kQLFB5lnrcaF(K9~6S7 zkAKv!O4$lOka{hJ(=gVG_veQ}r(BPTRC zXrb*JWCR^iYr?J~8t`(RprL=Y?kW~I`Tu?qCi=+=V%9_#u_lX(SO2^S@TMz(H`T$L zRw8o=pl`akb={pvo(j34Bt{FqLLjxM9)D1**fW3FkAh@A_?oz~1n^R(5%gATu8MFg zVh6pA&zF#wS!I+qmJyhTvi1rR^UaoyZ#mQk_Cd6$#H^OZaYkJRky!;-rAHJ{qiuwt z$5a`3g<((&pIT$qP*Xa^vLfip#8I@8{wnEDfX6n5CjaT6iOiY8A1hQ+{G0U<0e|l; z|KxyvVO)xVvRiIrheAz%*gK08$E|Oti$V`NO8n^By=TDZaSc}xW?TzbD|)y=OS)ko zsUd?eBBkc^ZgV4-y0w1ZrbY(!U?j%fb&aZS>2X9PDpt~OCH+dKqmq6r>9>-8E9v)= zOTTa82nO>w3H+sP#?%D0u!IOa5`UE|33!bXu$-%Phe(yn%l=ut-Yw7r1GeYa- z#{AB9D}b@(jPfFFVVis#ZSt-$m$1p}6`>Qf#qa6)yaAlczMfOr=qoLaQ%jQur^Gb4 z)ig49rk;kEDygVJg5m{Vt-;_1aE|GUPKEktAD8Svi?Jfs9gCET_W|9 zTouRZ^lcPQWQR4BP6z1jb7#fD3 zMd$iM5;QX`ro|`@VN>dTQRd5{co*o}LJ>#HX&;KCQ?v*sy?((f${_%%;5T^uqQDzZ z{1k=Cxq&(MqkkBcK$SkO(#I+A*yf-R5|N0n<&}&p!97X7Qdo&%lq#!caR-6eZnq83 z42LhpT9rM^j>5e0GAq8t3IhF%uFHqykTkTwBgu_&Ia1u8r>|ru#Ts;#eV3|Iwr*Wy zqv7tGnTU^fizcz%x-S+BJE|-2jb+o4oeQYt&s<7TPJfKsx`|bA&R9p4@J8*$X-zwR z@4$J~)cjPp9Xi9_bd?U%a9Fy-O3_p)ny!_isnWYtdY4M?a>ev6AVl$dTL%Fb!%He% zpe9vh^_Eh-m`zj)nAH?8Y3BDn(#)RtQ93&!>iREsS&Qj7;4Y2c2It9r2Z>E#qHkNC zWVd6v9e>fiA`eKKN0*g6reR_GF;#Vx76Q6BR6-=bA~e+3q;2JDx1g+CQX`$j$ukRb zn|JlBHuU~Bb6y^7R&lI{;gQ-_;@`($3cCvp!woZoTIq`BtW2%Tu3)0Iw7OMX8?P*` zrPcM)UyP9(usxJ}xL&d{k4^dHRy zToWgk@Z(~YIdH0}>H^}eN|{(G6R)Q-5r`VC<(nv8CJYp>PPLcNCZ?+T3Yx^~`Ji<_ zAEd2|<7EEkw+GGnANZ5n)QI?0c^KVn8Gl+Zq(ttFumg9%zdP%Uvvwr62>cG{Kg35m7_}~n^v;v z)sjuwqtc5DrL10AadhB^!*{_113zp~O(lt@<71I?Fh2IIT=|0f-L^~_ z#8Ns&#seKl3l^&=goqi>Sct7EIU?)zNHbD~4J5#q8@V=Y>Q{_<4ycHX2DBVIO8_gY zeoc5qCj}sD!>8W)=%p}SNS0}|Iaq_QPfpSR_Zu9=UX7AkLl&ClG{~Mj zi6`*uTtq@JW>fIGv)_Qxqb_Js5ZVo|v#Y`#$UzB+%yEg-5<`T-BwLx1HVdwIH>4;qlSgc8~_Jg#Sgrjn-t2*76 zF_y8)+D@Jiu7l?>lxsp$jb=Z*?lX@3q^q)@Xvqyx?s=SqpW|WXM^;IdA6cLD} zsYjq#q#`WpW>o0kf3Om`su&2S8 z*s3CW_t7^i#v2Hd&+kC5_;m}L(SbH!gIfdq4US8g&ok9ex$mVgw{zS2#+W#I=3CD@ z`-N~{zG?2;v^Y@^5N11)Y8h;h?We=bRE4MKql`%?g(@_gswR52q_~d(VWhA7g!C+u z3#`deMTGa@f-@ipMVS3{ECL0IOj;}>AqWT*_q0>~LeQ|{=wpDI5ay)tarR2iaJfh% z@lWk{R4xQXoyOom!9u^KlW_Scl;_3XXU7|D!=3R}v#dZ&6M<8s{PPsS6`t+fl+QHJ z3fGRQ>($lfpB&e>XJ9qMpH+J8kd{gHD1np{!Y3b!lo`jlsqv?un@rdm-7=H*i^VLV z=SsX|k$gfrq7DARxSQo^BvlZ4QI#e)7k}p&1ng~=o&d0%m(!tVx4wp!V28^%Ebspb z@`e8f_2t3$igo^YMew9)*>wd$`(T3eHI@Ab&oS92%=muW2fJ|RL_v1$<;DFhvDQ5P zHL)Wp+J6%riq;xm+wF3n;@UzwKb>8GLE8bk0c!r2Y=*TBRCbvqYh@MII@iht?$xcP zyIt1=<09(gM+OLBN%rl?gh;Gjw0qu_wT}bLa7NISHS!nS5JXhJa3c!9q1_5^dj_{YxOG%)k?q z2ZHG(%q`_E4Tepj)z6L4oj+Vc4ZNz$glsEXpNxlVh`LwLZxiau& zytX^kjj%lRcA?j`l$XQPhTzjaH7wfZc(wVv2Ghpv?HOYU@lD{ez6scWwyy?K5Wv}& zI{^5tD51B{zw1#$)}S8{Jy7xwR}Td1dn#A>3Ve&gLx3I7#AjxFnbRZnT8U7)npjNm zv1pN+_0Q74u$@f7{0w3>;zVSfFA5`P*JRcA<4yv)SoHO}hhV7ZDC9!G<7OmHYGZ?cC(!)q^9Cv)Z|mwJ`<>E{7eHDoadq%gw{F>%kUNmS+~{hX0A`V{mU+Ta zrrBc#@w@-Jz4E5A{`(j9$!v*3)W$jzM8(@}QxKh_+fzgI;ny@ScJ8*7P)zBWzkJO| zGlKB3oluB&zpg&#TLfG%7iv!rVOcjMD+Li<{a}fq&Qmj+`UxBukIN};!w1O20R2?q zK_XQOM$Y3phVQkRs*Fi5%!ZjUm_gU8h9OfsidmjRxV48k?FS^fArR~Ary~uXzkjk@ z?gq=6A$-2y$Ff0oad1?IEaytXNTxA=os$bmchg^`@ z&V9^Ky)Uy1Br58KxC`L_P@F`R+=hf$kA!^P#L5a|RNi5f>$5JK+GXT4D_DCr?6dpT zb7q{gTT`tYkZ^YAM~~T?lhcm(Y)l&^!RE&$8-UR#GbzW-FIQLi_?<+11~7KjJIeO4 zD5db%|31cjUU#O;sQ1~IlY99$WQtM*+O z;OyyY^Ex-_SgQV!|I&(Tpg3n`mtZog{Fa}=BoZ=56^BNP)S1O+q}6|c>y|pKwtW5I z->XNftd$=rj~;vvS)bno2mrT>j%xo6@H7jQG$B@aI#%?IT*#!pa^KOAKngd$6gK16 zRnD6g^!=8`QO_S=#&O>)KP9>%z$cYUQfm8KwR`0Q1np3U^?jfPV&b1grpGWd5F{t8 zxqm!nKh5$6f5n;FpYg2ihnF%!p2|gALP=~Jm&2KwqPh4Htc{KWWtw`b#JF$8d50Gn z0|ix08;8F;pcbb)WB$7o_vxynPSX*k+}qs#X(+L=SG^u(_*Xx`>-+OhvfjiXbuZab zH}8cYT~q=FHrk6SrxYt!5A+)kt~)MK%;^WdKxIk*goPH%pzIKwPpidEgN zqWcSHX#QynLJ_9_me6m9cdx*&?uQb~*S&hT&Mm}>Z!|~dlad%gxRJ2#HZ0vJ!UMv- z$sr!Zu#BAdxJ$1yHy%bH%CyJ0=8C5J`j-YxDhcqeUr&V&UH~Sn51Ph-Z-1LS`?88) z7_Pjku2dmW!K`7wO7zw3uJm>gx3uyb#}HLzhQmid-Hk&%+2zX7a4&?}_3mOu!+1s{f z;WuDeSdUnpA1URF45eq=<~nadELLN(;UtE3pCtHtv9Y~PJnw0_m&fqtOPL%08>SoT z@d&J@7OkTtuM^zSq8sCTj6t|JCyrGqF`ReCPM#2RSz9utL1Z#=jx6)9K3-5gDO4Wj zQQ2RRRr25dCM}nN4-G6f^*7;R+v6^;uS)GW<8rVzcRZ>qGx1eC-Zf^3V5p&VW|Di^AUA286<(7UpCV#$2!bSCD)dJ*#7zi#?y z&k3}Z$svw{cij`JI4t%Pigl;p9|OM36hk7EeTBM8{XmrTzQ1qaQCz+rKZiI zv1XYklPXKK!N{&7?&3ZiQxq0s4u;YZr>EJl9!cY1i&$++=AMk;?b;5wDIi^}^4=ro zqYGg>o@oD9miD`qUGhn)4`kL)~@J!+n!}WGX6+H5uh&mn!7#jw@@wEpyg2R=>p@PDP5$xviEnCoUV|b1# zeCH5+vndb1^a75f)ajLTCVk?&MC*6nDDO8MEo%jZ(QKLDXQxf$Lsg_cdLXPWi(V}doJ80m$ylq zp}!WXcBz~d@}b(ZD}#8G}E6{EKw1)d0=Vqt)TET zUHBO565hbKaXSU@-XY0dc`o1kwFvn@0{A;4&TM-719sh=*2>r}QxO=qn*ti*CBkIC z&oHbPXe&qTa5MgSGB^Or)~AoUCQziSfjyJ7Z zGg5^QH~*D~gDve(VU--9zyd+%&LI+@Y-Q~y-N3<@nuemZWOGx@)B2FWD^hN?=h$6c z6;=JU+I$E@R7JVaq8&KCT9DI4`gv?Eb_6*`A-o{nvR9vzM~L$(qG=luUaZYqlYd)g zo?n6pra8@v2ZVgQH@IvJ2@5v<^GRs+qPf)SM02&-3U4d29oP`_qTx=m9WcGC^rfxp z5}A}Kl4pvmM{9|`7^1UAch~HK`3rM<-*Vel@=j0P6>+xbn)fdiaHsrHcTiIaTh1-} zk7pGdf%GT^-q?xAW6i?i&hk!`)-=VzV79o zpaYdoT*w_$R+3W!C+dLv;QDEl`Qts1#TjvKLJ9bZHQ6(g1Kh0Ee69Jj`Jlnu^bR2$ z7Vq2stN+O>+BF(ax?oM=c0v_~$Y?Jc!wFN{wl_N}7A`>-QO-a?)rJgj}lm8+y&T zT3exyzU&Y~8clPRmLen*rQbmhA*r&%T&3z`07yv=>0@icJo-u}-mK(oJiVj6YCew0 z7M|F}l}nX^nnCN7|BcONYz9|19uX+9bwyd^HhLKH)tq(W?+t+vIR3`dy2DFT^+ z08H~w!Wgg~9O_~LZ82Lol>|IJg6Q@`b2N}(Lo$cr_lH$=7Km z?Fx$*K}rtdTly_j-d`7o^|$Axyq?rk*`syEx93zK&v5o(8v84q6q9Ce^AX;ZQMD*F zfm35*?He3Jwh^3{WF3vMvO2wH5fMbvfQPlA&G&lCid!|Bi!WvO@_z>*o35JP`?=}D zXpg1FTZ((D_~KCw7MxnNmFZ43?h^G-L-~GlQE!}jl~vN2)@$`Sa)mo}l|4-=O zlcb61$Z$OfqmG>$IQdpT6;=r^gF@@G9VVoAG5t=pK*flQyI`A25IFtfmj3VZmL zg0E+e`Dm^EE^O~pQPjXGP*sHCl3t@DWE}%VY`=44Fn}=v?4K+tNMs-OD!iDg_+Uvt zn|4=E+4H)=j)Nve^dfz9T7P2eTsnAID`X$k_srgIVkc{h`_U=|jYs%~946_u76r>do{PAL}vSrum!T1E-Xn=8Mc=H+Gs!?N)6)`R{KOTAo7Dt3*-)7X`tt z=AD)vpg&+nV5Zz!fUa8gYacVZyQA!y+^~I|qgYMnPmTX;*B{T{3cVyM`<0J}=BCkXR ztUsafGu+O7Tv!2TKeue{EK&&Ux1Z7Ktm8YqQ-2CON0F)>`pa=|=o?6~q1+C_)ZKSg zv)$AOP;3p4XpL2?^Bor_oO;W3W~o!^t#;#qM)`!CUxrr&J1LJGz&=6%>om-{dv#9N zdP>}%-4X8fMUS!%Q}3l+Nt6d()AvPI^JEvjGff*EZiL3Zs5w%|;6h2r{)3ZI*C>X& zq+4B5wU@%mK8ng)`ZuXfQ_iXNIM^AiruiubAK;-PV*lGQVOa?v zz89G^W<;n|pa@$E!a3GUJ{R5y3$lM!T-~;5>)TM|sD)?s^j^XtZtN>@$unL+>0O8r z%w_$DuH=4PI4l@rHQABrr#X(cio2F_$c|z}tLHIakN{n-oQ1-fayq_rPpU|2eQ`y! z`|Y-grOnh6cHVDjPpFVfz1|&cPxlYttnNvk;Op)qLVv5vIH(uRPduHAUFGOMM`ep7sC;Wn;7m7=SNg>cQJHRGWlL& z1R?K%&istrlqVOOGqUC0zaOw|c>#bfEbO1_wx2J}FGp0?r(o@vix@2@w;pJE z=2mtOjcP8AKl4MHfW5{Z{mb>7a|KO4NC`n4L0ubHfx*8Yei4ke_n_Blr4Yefuo{@@jNXePD<}sWN)fvD<>VPpiP{uzGxf1hz5e14BS}Ih_q;i zcmRxC(<}mv+gSz zINzY*vnBB0#M1hT@VlMJ@7b%JfhpD##N6-+t>VtYk(+Jg-X5D6@^?rSB$+S6^p=Qs z&He`n1(T)LaQqh#@(ozd*ZqF?)ziYz7^TT2@%P9dAll<`i14U`4({_|j5}h^Atf|o z8!d!=zC$TL4a&$szeqL}sHr8$rHvYTi=`QhrdZsQ&rU~eLmkpLzXrkG`v;FMnmR=u zw1$%c+tG7;Wk32CemAZK|vO8gku6$+f6Te%VR#e?#V#6LGo`00Dg++=&_BqH>jkQKqQbpt9uq%(E zA!OXny>Dy2>L6ByzO6O^@zakPM<9+iBI0T@#y&>BMUt4Zp0J53^FA{wk9K|Rlhnr> z9>PmEOUrQqj$cCRT)$Hh)uM5d_QVgG6}f(^{F@4OF(2!@2Jl<{{eVm*6ae8j?2meV zGxT3FKuPP&XA;QMOE;Td?Iwuh6EF)Is>-F{&n1(&G4lXPS;XE#5CB`AvarEfcAsyY zUxl-6svXnkYI}c-q2}U|_D7xAKRGS(0ExNludf9b)fZn!wE(h;2h)nHKj#;&OP03! z?_pJ@boVO;_i{>uy=B}t^N;)v@Pu<_S|H5}Lw!DWKaTXa)~`L7>hzmbZNVUXo0uZ= zhQ+tAUq1NpuP)Sz+vR;%3SQ#TuO?5N6xP>xpT2PklxedCsh&rUrk5()n@(inQ0&EP zvi$)J?$BMr{8;=a{GIx)bN^sy6a316Su$BoRKl#Y#9AJ%ga5HlfVU{C{$13@cNCWf zWkSYIVdFlvsu_ev7(;KuZzdBB0lLl%R?>87{IWRu62h=6W{|?sh%>}PRkkVu{8MB2 zQ#9I_n@9oP|I!T;yEg)pq$NpfJs(;aKUNZeC_=3a(I?gz_)&vR*yLy}?;uJb-;Yz{2#v zrAJ@0r8+8UjoEhYi02D4H0KGmAxaS8`6wNBlTw)@sMIsA{A^uR?{Jr!BemLqx(jeZ z@KF)JrTIn5;P!2wCbjSGzL7alJ@|SQ(T5CnCqhrVns$9_vDb$8DR(W^b;)>E?Lr`D z#mBV2DsnmH;CraF)pGRI28Mo+F2b$ugYt9{QZA-jN_|G-c5g5R7ryD#Zn> z3N7%x$%j7cCZ&mZgZZg4k+3#uoO_E|!V6v%GvwQdZ*=re(M}gqRoJD)57wXGZuFYF zoBOChs6Lc4Ub-j$NK1+@D4==n4Ihs=0`Bu84Zk01weEw+w8SD2BthV7x8eKNs(+ma z8hn&9tMNU-Xx!L$0;~Zu;Dxq5tj|zw(L$)v61#D;!{@d2>;qh7T<4K{^1G9N6DZ4Q z;Fp5H3CY4YvG?HHDcVy5iH@Ln>rQ2flfB?4B8+)F?ZMEdip8A}5>~L?ILu5>c|~U* znZ_Qzf5y$&Q3yuLxyhNX5le;$n@Tx0GiHBJlveWXVa2>BwOU*S0j!1I(zpp7&b}1W zg(pW5*-5YJpkLcG34n=EteQ5^pZtTBcQ>wQaE!Q;=iS9Uxolwg5E;!JU z2_=txkmR@=--qi9fYvpb5Y0$1j~iQ?4z;_4w2QafK+NULw=raXBC>aTr$q<8Nw&;l zm%*S^I{{>4(l1(`csA}@PVjCcsYHUH=nJVMLV4~ar$ma(^`@WMDq7xmDz01@Yy`2c zaSk$;n@LrY-tU{{AInhSwZoE_Vlr6?q>PBQx08=@`F2!yz`$u|hJAT^0QFU_slJ+E zyk~%(+H~@^fS>f;wdn0;x29=LS8S+7ot#0>B9=)hL1tk*euHykMpJ5mbbIhK>cM_R zaKFOoQL$QjSNLDZavDzC|C#5GX9xbvb1}L0*Gt307}<1c`9%F{z2~ptC)^?=1c437 zY|p_lXY9=nl1V2qCE6@a0!$X8S;OsTis>4;S%YN7F=ehn@^=bT5Lh8;BYr~MsB_m4 z3Oc-g>ut76 ze`u-Z^!;Mhc+pP|>bmV}Xa7vGHH!3-MUKDk?N15Ym1Mxjt*hs|vdOF(0^l42H`u(7 z0AldIj;x7 zu9-TNqhagyalwj68Sz%j>j(P-f;wMgQRNILU-`lRRcy6A{aGY-QWnP@Uh{Bl*;hM; zDS@2Bo!K}cOY;%&S?X;r@DeuY>!dAAs-)c}T#(Wm9_!jx&P!+8T6~}iwLC!3=>4N$ ztEq*2WC_5D#%6xNfjEu7Qds$IzpIH?l{O~u5QxS0grnS&QbNBqr#{(KTvhS(XZ_0q zI8=o9fI=etktQsOq%YVd6nRnlXbk?2l2nEW()vXf9@ElHmQjoF6$EGWL;WtXt~N-uv1Szg z5e~36RHvN|t~Z`w^!>|xR%?USQ8n{9T5Yv_F;!=mRFl1ePM?poW5!mBz5$qwyQf%( z{F(~&MNP|R5nv9Al+M#&7Z;Cq0MYs;!{)=4b6a9na(7X}EUY3PdUl^5D&j?i)F()# zi%ld!s@7kx-8@EXH4wYjL=NayYCtbt!2$99Xq{LH@u3>R3jw5LW=9$PKb5fTsY&Ea z`%5D^laS23#c?CwhLgM^jG5*SHfv3pH0N081IF`PyUi+F#Mm!P++*`D{Ryq4=Knli z^@D0!Rq+nX{5B&}r84=2)g2Sn7NBvK$R^UZ6kx*}StsF0L0C+$XM{e^&N<%_Tn4kK+T5=)hB z-*%Ib+#Thvupb{Ljtn|~Iuc#K-u%|Uk44oQZ2$78m85VzrJ~@uf45f3hxI=@ z-C|UkY*zlYE?8a_$0D9b$yTnvWaaYl5%nYF43tSW7Bu23HPls zAxsvhOg!*nU|r&&1%+vE5pUQ}Fn#mKtOlnBmM(RHG}eQjsZ(hreG)Kpz^#9SEPRTr zuIo0D%F@-`DQv8`+Z%xzozik;6gpN`I=ZZamGL|BuVfiS5ZYd9+Y3xf!B}mM#t2-; zzm5h_0wfVAntxP-6+f@ckxmb!B23g=yu5Ik@YPV2sZ{bMp5uj+Vm$tO)1-|){xgl4 zljci;N(8`}$7q0lmK>mtfiGmhnBz_pJ1L%l`wp35fa4$?fyr67I^eGZF@F{%aVM3! zZqMa_Dfr`F1(tDd>zfBYkJSoRiWWDff?bRJ0N1w%X2-{$4`y>|99q4JsT*X zn&Z0~({K1_ZQ9uEv|<~i7BytR-0heKI2Z(M0EuAHU>~n<2pw>B*jk{HI~cL-ZvT}? zIh8cY1)Lw*qkbefdABEGBe0slON!A6(PTF5P*DXu(5*g$b}(Z@nr%ybu|8`uSYM1TJD-*ovB_@C`j?u+=+90b38lM?vx4fem=qu5yd{(oAe z)IpohU;s8G5}#jhs9Kjr;iyE=g`%3^DT=116fV2YIyCzD#n(E7-=%a!K>I?(w8qNb z5TBr~64u*`%^1IZ4^O0Yucd;?l$i1?dgI{RAXoAz_3#UK!jOQeFrdj$F;I?kN{GiV z$k>GRp3->xBUGwqh3vWOk%GEv*-g(J4zaAbkpO7Hh&9Hpj{Tan*`Hma6FRj?!0CAo?#wBG)%SD|d8+hwQ$U33#B35)vTI;Vk-IZKC zm|I2m0XLPZfy-sYq70Gw9P@0t&{iSJ?|i@*L6)gl<3RX!)l?&NFmfRiQR1p6E2b|- zo}Y=OTyy+}DDNS7Tv@m?CKKJxqkb50i(U4lA;fe{^0JWK@jKmzeik%x-P-Pu&PR^EHD>PFa3^I-FlCHMW2s zT*jv86?j4*@hKY&10NQ?1syu2utXo()kkh6l~DlN{DX3!7^lkUuc@( z(}sbH1@zZ!=js&1na{Z%lE-ycCO@`!D5>5!SKN2l^X~i>!bxW$ZsCrUN1bMPBeNr{ zRiCv+7zMVcVd=8%IT|&1mkD0@_m*oa<&N zTQ?=08!dkfd+GE|o%3dM!jApj_3~Iqb^XitpQaMZW~cD*<;7PQpyKGtIcK zv~2>>wxfO5E?2~v$qYQW^g=6{@^jC;`1#Hkt|XR>Rgt%<)Mz&R)LDrw%bhG!F{YDj zDa9SN&J8c{3UM!Lc4bJ+rJ3#YfH>T%)da6bwWU(Atze@MDde5~ZaKoMAZ`D!exLVH&Ombqr z&($BQ*%H-`QCoYiS;v&}o?=zI)~2+VH5w(4po#42O%-coK;C1c3_sI4x=p#jzR(x> zT(Ru4rYT@<1t*-mAv!kc_eQM9zFi=yVi_ZFV&i;D+z=Si0?X6SAaR6N8>u`fS@P?F zu3m2-7gGd-hKy%HHmJRxslmh6KGjFlXy7lJ*uD4)1+B3$1RJAxQqgk6jVN({H}+<_ z%x0XCCb)6H=(D7kgeX!IDl&VPBeFrQoM44GutNv$_9H9S3`>nM zY8h>k?HTA&1J*}^Bxe#=$Y?*+O6d+q($2{8wfz?}Op;(5tj9EihRIOu7T6pgG85yu z9j=aUgM2o9MOYor6v-0z`v+-%7%B@G<0r)|fwNNy+oc&0u-6)*S)sm~*$PSt1ZeYz znebr09O7V?yN^bLhxEIlTATi4cldpN9Xow@@F^0{3s`oSpqB6bX?-@|n4h6A#3L!k z4D9HMBJd7<$9Ezv22BZJ8Qk4MTyNB&R<&1%dZ#5wo@xgcM!%rTl18y!J7M)*M^hF8 zCb8gNcVcsYZN>fbyfG%oH`XndiO;2bjRY9&1|4Z2XlrM<%5ND^$7LAv-m3+ZWbw|b z>@(5#09jOY(F>vBnB%#468@|dvi$yf?H{ITG)r7DMVzgaV_3c4fStI!DULd>3plnMtt`gt!big^HQuMy^-iu-7{R%fa=Ogh%g z+2>0*iD|if$$S2Ic@BGCfvGj(45jA=3myMeYt9z@`{L!7V1?De;I1kZwq7B?1Fq^% z58M2j8&T2533Bpx=ZwGA=0N&e`1lsOoZ&eMuFzX3InzU2enrEsrQ1>chsM|L;$I~A z)%+Q$6tF|2UvHcQ=C$ex=yR2;du9n95G&c>r zi^cC(YEMY)%bBmY!&FbZ>BDvcw;-vDwUh8#WjIS!94GScgu0eo#(#s;xB1wQL2c(_ zA<7{>9L2xf_Th^2`_v7yWIp*wzIs*eF-wP=7+dW`$G;nYv)qrN*dZvuyFvAKvSb7Vga>g&&TAS7@IyUP(*pwc%FojrSzuGe4#poS5WeQgIOUEqD?dzzQHu zTtCPSu+L5bgI52m7gyIs;a|WsFi0}a| zwj=|g>n=PJq9X7j@Lz4YvoIqDBPz11R$_bVB+5vhL!#BuJL@mhz|QE4L?`02ztr4DQ9K3!zPc($g^aUC$F8fF z9{XqFmx?XiIJ{iH%#6HLW=Re$qeg{Z{Hy_U)tUIBj7D?DBHYI~sf>kc;kvsrSrUtsB5F2jY0fh#8M_9lm#jRQjwl5u z+O*oUPncT@Fq{McidWcpW-iT2(z?@u9}SCu{ld+{_%>I1h58L9PwiMAilzLP3O?8u zu^pGUQ5_RI(^o-V$Ug2`Ekj`eG?$|};(e*#-exzn6#7*SkUJOw&w`PTo+K5=b?`#)FJa5Ak_+;cKCx16jK>IY3uL+qxtBPlI-c{lQ>r7@jCHt|&5F4A_{h}VP8Ncm$Pm@<-W-WW%1L!>8ICm9=dZ;)@E=oj z%v8hlmtcllIbzCl`wDtWhX7V-#VRh`krh|LO{?QGE}j0A_sq8qMT1-mUz*I z174aj+K~?M^O`exjN{6PMT#dQ9TbNXB3uf)Wvy#3egJ(d23ou+*4odpUUbonLDOsh z>B)T`+J1$>G@=-c5r&Z~jIi8huKh_8l?w{*Xq2;4I0zeQ{{#DiJF9+$CVSZR8x@bg z9U3@HmwO8RUd=?Nk5F8XH}b8&?IY?J%%n!Pdgu|r?J(r9KTDuuOzF)Tl|R%G1Mkok zOjEQzT5B|r22la>^E=SM+MkNdY^~Ln`qB~TFU|XF)=_(m5z_~1NV$x#AGz1HZn>=J zwL1}XLJY!)BAd~hFRinxFh%S4Po47VEdB)<$R;;zvdXL~AlK2w6Re4e0b(Cc9X=bL zqS6(hhF~6}UX;TFt1NVWX_v|8o@?5J4O~tB0a48WdZ5gc;s(~@4u4)CSD*ei@qbSIpf2?Q z#=-{lHU7AXlaGsW^Io!Q!8}<65y)h-cqT@pah5lN^gd8qeM3GY(k$~ifIxBmsM+Uf zlH{F0SFdCUVV!njew}EZa{zUMu1z(o?&ffKO!eK`_mqoLObkXMiKrQ353skzr)YXJ?---D1pq(b0r&#)GTtaR^G<6e)(%fX)R_w%%j$ zLhHH6hjX?OzzxKzUwM`;DbvpZ zsC1?rKVtQoADpH3(Cf%P=1Sxk& zOn0UaG#k;(%BOw~VMimxdK;Ts6>7g$w6$w~=3ZMZ>nhV~(zdLF8l4(YDAE)hJAX#= zPX$TlsA=y(*@NRJ#Ik!2u|Gbm=n0k3m^3KY`;{Hz*-Z?;9AqWP(WT!_D=7Ma2hIo4 zO7j7hAJ6(67_u)UuOmUV5t!2rdhy*(Gja{{pU>RT2D(F_(49wnRa4Kz-`@zAqITY< z#K$^{yPRHGm1>|;+|VjOcltlEpUQB$7p-X61(P2F}oPFG|o0(yz_*`mC&_&++CJHU zPQ@Jcntkgb@)=h}1L}YYQ8ifR4D>|q=v@c3$dG;CC91NX*-SCUxBW8eYmAM(HN*=` zGJL1715S0Pto}Lr#*%A0+sG`h{=-=Qp?}-A+$y}zeAZ02K`|D8`9u0Of*=)Xm?@?P za-SSi)?#X5Xm||(3r1dpO%j&krk?;x5$Stu;e(CUohPt;HH7}G^s%jPP7RxDV>%Awgx z&2>W(Ws*~T8Bs0!v{o&nQW{1I@1cy5R~Q_9uI10}{s${Sy!Y9et907Emv+Nmip8q9 zodu-VD!pRfZ$o@7{rE$aAv^Jayk3BFy9pg`MEVI`j8YD~&nbM1)7T8FCd;6Eno5$j zpJCcRdI*YLCaQ59(_oN%T_l}AR;KLksf{oh7l+OaHZyMeTWX*Rd|NpwNAfLry{vww ze})RGkqbN^!p@S47`rohm1=c9CRA)wb0ho7O_)(5LlZy^Pw77tkULrnHfB>N$8S78 zgNwwHy=Xcz`Fd0*&pTpy*lO#5Y@0xfPh}kY6*39A?5zl>7mJCyFQBHZ;>f62?|)#jW+MQ%-AN zS!8n@f(wYAXxxmQq%LEE=DT5^ zPR$@|!kN6xPB9$J{Hwk&Z6rtZVl-a0e!BTzwf~BX$&?M!XqZ%{G3c$_WxB9)M*RO|0?j9y7=_5M{?`D>k^QljI0LCoV7leueoX3-k&T*B>V;ezznN_`QnrG z;tAt-XWZ>CDZE`#<7y(9Q`fd3e*1|UM#n6?gbk_9*@KOfBYd--9ESN-ac zuHIjEt8hOx5TA*l&N!}t_FNJ`b6T-W^NO9yFQu5i^uwab)k$Xcv3AK#NPGS&WTSxo z(;?bQV=W-%+Um~WQlgZwk*ekNiXVPvUv4aURy-Fe>YWjE2OU0VR)vIq{ogxAAu ziNdItrRZTI3xB;Vl;h!Yl5cBIXbV)iWU}1}bE56;>ena={d1SjySBj|G>4vEH;mZ@cVM_*UMY%);9i5M;xDrUzq0d21bk6+ zf|F)gyF5@Pv+(V~r6vHgiQl0Na=+g3KKcg_G>?4{+%kF<0}R*raxL62lL~HABdg~e z{tO68&E(yuJ}A}4OypB_@`zQ)r|AI;+5rS>e5aO`T4)cy?`FpWq$1cVy_xX#N(X$5 z{<@&%Q70iVe68`hoeZ}(_jcczDLj{Y~&8mE-n2#5B)Tcq5$xudMz=rKM#lS;?RJp_g zDAHcIhUsmXF8DM85Z&CT*U%L6`e&CleFECZ#CVa2lciFwL6<)7MCn46^8?>3HM#!D zs$gZmRYrM_u?&b8%};i#r?1hr;OcRMtn-LgW&~=DXwxQ~K9W7B5Po=khL(=F_+{b9 zv2XdjMM)(am>lpr&+ziaE3n0$-lm(Y=}-J0A6O7W)ta3i%nd$&q(B;XgC+?s!dzK0D~x ze^}aJX|V7ch~Wzsj6vj67GFAG;HA#uNQR{uCxgc#n8U%N7K}3skU>Ez_=muy1yW}< z4Lpj`Tuld}l}*XHl3unTAB)b6hs?{qQ)E7pNC5mkspG#DDp#clFCMU?v=V8Sxem^M zJ*U_)S>V(ynfxfj4dTLel)~RYwxf7p@#l-XYld$&W4+-Mcv-&scI08Q5_$0wbbg0f6lMDg@IXGNTW zbKNU@yiw6BXpsBdDIVqv4zwfqjZ2Qhpj z%T@Bt5{I0`U>?t%`CnCCcQ71W`_`c+ zyXZtnUeO6rW33u3ItijDeDckF^ZUJb=9#(ondi*8f1f$?9C{yoN=vSgBS#$gtq?C) z93`2De`_RjaEIC+tfgXo9)0ATXTY5opUV6EnjHio18D5j+`4$Wu)fEdxCxlwTmB`G z_C*#u_`8?kF%Pwghy?>tw8W`-!N4TZjOJrV_RsQyd1oN!fKQav_p%>)tMBhM%JRiq zE|$tUld?D2(iA`d6nhzRPW@HvO>LMlDp@B!?6b@a_W}`?E49~wvS^bR!49FKfNFOV zq$xQKxc?mp$rLL*|_t+W7FM+l6K<5RTIMPCjHVqd4No1+gKYrxr zS*s7zTD4Tx?*8l-w6a-&G{r~B^cXD66;&y>Ps%9?vzhBv3vjy z8--7AkbKE$TAzqwPs5MVgvDtZ>+z_uz!$jq=eeL$S zpV~m%W~LqVWIys)t(nM-=NTtbl`X$re2N*8o{0!E?d34~Q^60Z#|L zLJRuws_d#m0BE@L+0eb<_*L)<%|xd|n#$VIvaGPn2HlFyBQDA)=K-S_ENnp`w$|}w zQU$KfpiSCC=rQz-e9nX$OKJz3(m_hbz5;z}61_$d9=P`->?f`a()rE_p5kEykYag`HJZ!ntS1A>vnn`fBA`3ewLT5F<}MVnk1eoBYd2E zJK~Z3HITJ;%Ja+=5_v>iWp206-VBCnBUbi z=8NE4f@ik&JPuH$FtoQ18ctFh0b+2R?V9c?M71#G##2ZK_c~Y!FRsQH_N;k^r z8IgWaV$})&=~eoBghnUT-1?P%DTbWLkW#vHj!#}>qndtUGKXMGF>=ra|%TC|ehCl0#_ zMBmiP$sR%wrbTGN)0c@Q;an+U+&#((6lL7l&s-vv*feNATPa zw`RYO4!*vatdjYCG&y&g7ZP&0zc3d&y>ZjsE(}I_vxsf2hu!wUOj!rCM*;*IyJ&SA zj94<0#9Fe_lJZDZ4j8t5%p1f6&Wo6> z1dp>{+V@v>KN-DzN#2eod8zd}e@cVy!@loJ!cA>6GHKwUw)X6$?6q^olil}kH{arf zwqy#Ot61&?c2`om0Oe4I}72OF*3L$1oo=j>ZE{Er+3_>I^Q+gQslLUDyJGSRQfUr;` zx`^(e&1iE&R}=GDxVT>DX4|Vj(52aAd=%osy{H%ub%okgt5@YJ8S9ywKys13jSis-BH9YSDh!>3f=;ify#vFx$DtKEbUb{a-s zmQ7}54+s?%nWcQrb>+OQDQydxkza0U?<=wI>p3aja2f=TF9R7hAg?G1Eo3|!1s1S_EZ~h`( znJ|0w-h4D%GFo}4(5@Ewv1Or`&#$MH(@}6Nj#w8+@nugpu+b0lV~5C80&lTglvT;+ z)k;Hvi zuy_ZyAXU5kjWhk|R_u^8!py;c!SmUmV>SDE%v0AN>JSYWpz zv>tAI*iA%8!7UT_flf~GZ4{(dzl?q8vZHyfw4V-81-C}-B`%;Sc&K99l2%a+xqOe# z>8C}n=z8l6p^rXVm?$;5?9-661}-Y~5j1>gD%D3adKAhq(7| zrZ*oQlZ=1faM&2SP&rrrQ{>jOs-~WUj(3=5cSTVW^6n~cElysl0y&?tC2%!&399vY z@krVQWEfj=pRo2Uh9ikl-v;0VkrIdfuY!flBjQq!uBx73agJF`q-gYM-6`{hQiQi} zy{kA7BQOJx>TEL;r`I(s<0JM)+#TRB=XGZ^HcDM4oS z`L~$69FU%3zckSf+X(=lAvq*Y%K zkmmRGf%AW1KlGu@<&W(&T10GnKOqLe_1PLN$A(ZXBJ6N+d|J%VXLCiHX70^cwL|e7N9V!ezN?(OrNfO)b`He$ni`)qExt@o4B#Ep z+bJ>mFP0MGE6Hr>ZKtTKvqCZV{E%Pr5w82pS@q_Ouck&p?`lJ=*v{aNPF5<<2)rp= zPjMW(Ti;9ptaTc3l=wjOZc3nAIi)9*wolUPLG}Aqc;@TXQR{s(=TWlWoVixeF{BRd z(OUjaeAh7Loy~W6&*uP}mi340^oHd@bOjBkpyRfW+btq?US*~?Vs#4mVJorc`~y6P z@r#3z+bxP9w->qGlV&(6i-}g+y|G>x2T6@}4{szua9Z-Q7XW~6tA1Jq8TZtfTa0Nl z{5qv%J_6ENWTE=tGCXTE|J*%o=9_s^IGfVG63c{>&~Z`cG#0@*`HM2Dn|5hl9ex4x zpY>C@Bxsy5lQrCMQu16Lk^IvjU(1Lxk`Z_OfVcvi^l=`<8Da(bRRIo(j{ zQCz=y1->p1E<(}Hr!WglVwO%sY%v&%?o_9Dv9uZH9Ua6V0_c(6QZKt~Ng(;28P)>e1 z8y*i+MeR*UUeCkwj82MQgCf|U26{V|kxuMd>L3D0^HVQpI;gIt#U^BErM`nkpsNVYf>6;8l8lS$ztW9JI!WL}GTuC?;|}naDv9;d-_w!A#on90 zf72yglmE*;nLJm*MjoE8?r>9$gr&AHk+6a$WO>PC%^f=e0>m0I0R;gQ!QVr8Q^lcw zZ*~s_>{0)9SCSGC-{6ur$646^!v1Z={Qoe6DWg-V<6xE6vGW6OYK!$Nv83Kd?c2S^xk5 diff --git a/examples/BubbleChartExample.html b/examples/BubbleChartExample.html index 7be52845..28f41809 100644 --- a/examples/BubbleChartExample.html +++ b/examples/BubbleChartExample.html @@ -39,6 +39,9 @@ .width(1000) .height(600) .colors(colors) + .title("Hans Rosling Bubble Chart") + .subTitle("2007") + .showLegend(true) .yAxisLabel("yScale") .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); diff --git a/examples/LineChartExample.html b/examples/LineChartExample.html index 3a9408f8..7f235eaa 100644 --- a/examples/LineChartExample.html +++ b/examples/LineChartExample.html @@ -22,7 +22,10 @@ var chart = d3.ez.chart.lineChart() .width(1000) .height(600) + .title("Historical Exchange Rates") + .subTitle("Comparison against GBP") .colors(colors) + .showLegend(true) .yAxisLabel("Rate") .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); diff --git a/src/chart/bubbleChart.js b/src/chart/bubbleChart.js index 1a5f49ab..da510bd3 100644 --- a/src/chart/bubbleChart.js +++ b/src/chart/bubbleChart.js @@ -118,6 +118,7 @@ export default function() { // Series Group const seriesGroup = containerEnter.select(".chart") + .attr("transform", (d) => `translate(0,${titleH})`) .selectAll(".seriesGroup") .data((d) => d); @@ -132,9 +133,10 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale); + const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - const xAxis = d3.axisBottom(xScale); containerEnter.select(".xAxis") .attr("transform", `translate(0,${chartH + titleH})`) .call(xAxis) @@ -145,7 +147,6 @@ export default function() { .attr("transform", "rotate(-65)"); // Y-Axis - const yAxis = d3.axisLeft(yScale); containerEnter.select(".yAxis") .attr("transform", `translate(0,${titleH})`) .call(yAxis); @@ -153,7 +154,6 @@ export default function() { containerEnter.selectAll(".axis").selectAll('*').remove(); } - // Title if (title) { const titleComponent = component.title() @@ -184,6 +184,7 @@ export default function() { // Zoom Clip Path const clipPath = containerEnter.select(".clipArea") + .attr("transform", (d) => `translate(0,${titleH})`) .selectAll("defs") .data([0]); @@ -211,18 +212,20 @@ export default function() { const xScaleZoomed = e.transform.rescaleX(xScale); const yScaleZoomed = e.transform.rescaleY(yScale); - xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis") - .call(xAxis) - .selectAll("text") - .style("text-anchor", "end") - .attr("dx", "-.8em") - .attr("dy", ".15em") - .attr("transform", "rotate(-65)"); - - yAxis.scale(yScaleZoomed); - containerEnter.select(".yAxis") - .call(yAxis); + if (showAxis) { + xAxis.scale(xScaleZoomed); + containerEnter.select(".xAxis") + .call(xAxis) + .selectAll("text") + .style("text-anchor", "end") + .attr("dx", "-.8em") + .attr("dy", ".15em") + .attr("transform", "rotate(-65)"); + + yAxis.scale(yScaleZoomed); + containerEnter.select(".yAxis") + .call(yAxis); + } bubbles .xScale(xScaleZoomed) @@ -235,6 +238,7 @@ export default function() { } const zoomArea = containerEnter.select(".zoomArea") + .attr("transform", (d) => `translate(0,${titleH})`) .selectAll("rect") .data([0]); diff --git a/src/chart/lineChart.js b/src/chart/lineChart.js index a361f8ae..3e350972 100644 --- a/src/chart/lineChart.js +++ b/src/chart/lineChart.js @@ -53,9 +53,9 @@ export default function() { const legendW = showLegend ? 120 : 0; const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); - const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); + const chartH = Math.max((height - margin.top - margin.bottom - titleH), 100); + const legendH = Math.max(height / 2, 100); // Create Scales and Axis let { rowKeys, columnKeys, valueMin, valueMax } = dataTransform(data).summary(); @@ -140,6 +140,7 @@ export default function() { // Series Group const seriesGroup = containerEnter.select(".chart") + .attr("transform", (d) => `translate(0,${titleH})`) .selectAll(".seriesGroup") .data((d) => d); @@ -216,6 +217,7 @@ export default function() { // Zoom Clip Path const clipPath = containerEnter.select(".clipArea") + .attr("transform", (d) => `translate(0,${titleH})`) .selectAll("defs") .data([0]); @@ -242,9 +244,11 @@ export default function() { function zoomed(e) { const xScaleZoomed = e.transform.rescaleX(xScale); - xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis") - .call(xAxis); + if (showAxis) { + xAxis.scale(xScaleZoomed); + containerEnter.select(".xAxis") + .call(xAxis); + } lineChart .xScale(xScaleZoomed) @@ -261,12 +265,12 @@ export default function() { } const zoomArea = containerEnter.select(".zoomArea") - .selectAll(".rect") + .attr("transform", (d) => `translate(0,${titleH})`) + .selectAll("rect") .data([0]); zoomArea.enter() .append("rect") - .classed("zoomArea", true) .attr("fill", "none") .attr("pointer-events", "all") .merge(zoomArea) @@ -384,7 +388,6 @@ export default function() { return this; }; - /** * Y-Axis Label Getter / Setter * From 026a977952d79b73f91224cb188f6990fa72ce44 Mon Sep 17 00:00:00 2001 From: James Saunders Date: Wed, 22 May 2024 12:13:07 +0100 Subject: [PATCH 4/5] refactor: title, legend, chart layout. --- dist/d3-ez.js | 883 ++++++++++++------------ dist/d3-ez.min.js | 2 +- dist/d3-ez.zip | Bin 54012 -> 53838 bytes examples/BarChartCircularExample.html | 3 + examples/BarChartHorizontalExample.html | 3 + examples/BarChartStackedExample.html | 3 + examples/CandleStickChartExample.html | 3 + examples/DonutChartExample.html | 3 + examples/HeatMapExample.html | 3 + examples/HeatMapRadialExample.html | 3 + examples/LineChartExample.html | 2 +- examples/PolarAreaChartExample.html | 3 + examples/PunchCardExample.html | 3 + examples/RadarChartExample.html | 3 + examples/RoseChartExample.html | 3 + src/chart/barChartCircular.js | 97 ++- src/chart/barChartHorizontal.js | 88 ++- src/chart/barChartVertical.js | 105 ++- src/chart/bubbleChart.js | 142 ++-- src/chart/candlestickChart.js | 121 ++-- src/chart/donutChart.js | 87 ++- src/chart/heatMap.js | 85 ++- src/chart/heatMapRadial.js | 92 +-- src/chart/lineChart.js | 149 ++-- src/chart/polarAreaChart.js | 93 ++- src/chart/punchCard.js | 85 ++- src/chart/radarChart.js | 96 ++- src/chart/roseChart.js | 98 ++- src/component/legendSize.js | 2 +- 29 files changed, 1138 insertions(+), 1122 deletions(-) diff --git a/dist/d3-ez.js b/dist/d3-ez.js index 176a2de4..02479bf6 100644 --- a/dist/d3-ez.js +++ b/dist/d3-ez.js @@ -3205,7 +3205,7 @@ return d.r; }).attr("cx", function (d) { return d.x; - }).attr("fill", "#cad4e7").attr("stroke", "#cad4e7").attr("stroke-width", 1).attr("fill-opacity", opacity / 2); + }).attr("fill", "#cad4e7").attr("stroke", "#cad4e7").attr("stroke-width", 1).attr("fill-opacity", opacity); itemsEnter.append("text").attr("font-size", "0.9em").attr("fill", "currentColor").attr("dominant-baseline", "middle").attr("x", function (d) { return d.x * 2 + 5; }).text(function (d) { @@ -5154,10 +5154,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.categorical(3); var transition = { @@ -5198,12 +5198,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); - var radius = Math.min(chartW, chartH) / data.length / 2; + var radius = Math.min(chartW, chartH) / 2.3; var innerRadius = radius / 4; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, @@ -5237,52 +5237,55 @@ return layout; } var layout = generateLayout(data.length, chartW, chartH); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Radial Bars - var barsCircular = component.barsCircular().colorScale(colorScale).xScale(xScale).opacity(opacity).yScale(yScale).dispatch(dispatch).transition(transition); + var componentBarsCircular = component.barsCircular().colorScale(colorScale).xScale(xScale).opacity(opacity).yScale(yScale).dispatch(dispatch).transition(transition); // Circular Axis - var circularAxis = component.circularAxis().radialScale(yScale).ringScale(xScale); + var componentCircularAxis = component.circularAxis().radialScale(yScale).ringScale(xScale); // Outer Labels - var circularSectorLabels = component.circularSectorLabels().ringScale(xScale).radialScale(yScale).textAnchor("middle"); + var componentCircularSectorLabels = component.circularSectorLabels().ringScale(xScale).radialScale(yScale).textAnchor("middle"); // Ring Labels - var circularRingLabels = component.circularRingLabels().radialScale(xScale).textAnchor("middle"); + var componentCircularRingLabels = component.circularRingLabels().radialScale(xScale).textAnchor("middle"); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); - }).call(circularAxis).call(barsCircular).call(circularSectorLabels).call(circularRingLabels); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentCircularAxis).call(componentBarsCircular).call(componentCircularSectorLabels).call(componentCircularRingLabels); + series.exit().remove(); // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -5488,11 +5491,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); // Create Scales and Axis var _dataTransform$summar = dataTransform(data).summary(), @@ -5517,70 +5520,65 @@ var xScale = d3__namespace.scaleBand().domain(columnKeys).range([0, xScale2.bandwidth()]).padding(0.05); var yScale = d3__namespace.scaleLinear().domain(yDomain).range([chartH, 0]); var colorScale = d3__namespace.scaleOrdinal().domain(columnKeys).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Bars Component - var bars = stacked ? component.barsVerticalStacked().xScale(xScale2) : component.barsVertical().xScale(xScale); - bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentBars = stacked ? component.barsVerticalStacked().xScale(xScale2) : component.barsVertical().xScale(xScale); + componentBars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d) { - return "translate(".concat(xScale2(d.key), ",").concat(chartH - yScale(valueMin) + titleH, ")"); - }).call(bars); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d) { + return "translate(".concat(xScale2(d.key), ",").concat(chartH - yScale(valueMin), ")"); + }).call(componentBars); + series.exit().remove(); // Axis if (showAxis) { // X-Axis var xAxis = d3__namespace.axisBottom(xScale2); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); // Y-Axis var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { + chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { return d; }); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); - } - - // Title - if (title) { - var _titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(_titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -5810,11 +5808,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); // Create Scales and Axis var _dataTransform$summar = dataTransform(data).summary(), @@ -5839,56 +5837,59 @@ var yScale2 = d3__namespace.scaleBand().domain(rowKeys).range([0, chartH]).padding(0.1); var yScale = d3__namespace.scaleBand().domain(columnKeys).range([0, yScale2.bandwidth()]).padding(0.15); var colorScale = d3__namespace.scaleOrdinal().domain(columnKeys).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Bars Component - var bars = component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentBars = component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d) { - return "translate(".concat(xScale(valueMin), ",").concat(yScale2(d.key) + titleH, ")"); - }).call(bars); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d) { + return "translate(".concat(xScale(valueMin), ",").concat(yScale2(d.key), ")"); + }).call(componentBars); + series.exit().remove(); // Axis if (showAxis) { // X-Axis var xAxis = d3__namespace.axisBottom(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); // Y-Axis var yAxis = d3__namespace.axisLeft(yScale2); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -6089,6 +6090,7 @@ /* Other Customisation Options */ var title = null; var subTitle = null; + var legendTitle = "Key"; var opacity = 1; var showLegend = false; var showAxis = true; @@ -6119,11 +6121,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, _dataTransform$summar2 = _dataTransform$summar.coordinatesExtent, @@ -6134,62 +6136,45 @@ var yScale = d3__namespace.scaleLinear().domain(yExtent).range([chartH, 0]).nice(); var colorScale = d3__namespace.scaleOrdinal().domain(rowKeys).range(colors); var sizeScale = d3__namespace.scaleLinear().domain(valueExtent).range([minRadius, maxRadius]); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Bubble Component - var bubbles = component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentBubbles = component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(bubbles); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").attr("class", "series").attr('clip-path', "url(#plotAreaClip)").merge(series).call(componentBubbles); + series.exit().remove(); // Axis var xAxis = d3__namespace.axisBottom(xScale); var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); // Y-Axis - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); - } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); - } - - // Title - if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); - } - - // Legend - if (showLegend) { - var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + chartSelect.select(".yAxis").call(yAxis); } else { - containerEnter.select(".legend").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Zoom Clip Path - var clipPath = containerEnter.select(".clipArea").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll("defs").data([0]); + var clipPath = chartSelect.select(".clipArea").selectAll("defs").data([0]); clipPath.enter().append("defs").append("clipPath").attr("id", "plotAreaClip").append("rect").attr("width", chartW).attr("height", chartH).merge(clipPath).select("clipPath").select("rect").attr("width", chartW).attr("height", chartH); // Zoom Event Area @@ -6199,20 +6184,34 @@ var yScaleZoomed = e.transform.rescaleY(yScale); if (showAxis) { xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + chartSelect.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); yAxis.scale(yScaleZoomed); - containerEnter.select(".yAxis").call(yAxis); + chartSelect.select(".yAxis").call(yAxis); } - bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ + componentBubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ ease: d3__namespace.easeLinear, duration: 0 }); - containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles); + chartSelect.select(".seriesGroup").selectAll(".series").call(componentBubbles); } - var zoomArea = containerEnter.select(".zoomArea").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll("rect").data([0]); + var zoomArea = chartSelect.select(".zoomArea").selectAll("rect").data([0]); zoomArea.enter().append("rect").attr("fill", "none").attr("pointer-events", "all").merge(zoomArea).call(zoom).attr("width", chartW).attr("height", chartH); + + // Title + if (title) { + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); + } else { + titleSelect.remove(); + } + + // Legend + if (showLegend) { + var componentLegend = component.legend().title(legendTitle).sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); + } else { + legendSelect.remove(); + } }); } @@ -6427,11 +6426,11 @@ }(selection); selection.each(function (data) { var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); data = data[0]; // FIXME: Convert input data to support multi-series. // TODO: Use dataTransform() to calculate date domains? @@ -6457,70 +6456,73 @@ var xScale = d3__namespace.scaleTime().domain(dateDomain).range([0, chartW]); var yScale = d3__namespace.scaleLinear().domain(yDomain).range([chartH, 0]).nice(); var colorScale = d3__namespace.scaleOrdinal().domain([true, false]).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Candle Stick Component - var candleSticks = component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition); + var componentCandleSticks = component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return [d]; - }); // FIXME: Convert input data to support multi-series. + var series = chartSelect.select(".seriesGroup").selectAll(".series").data([data]); // FIXME: Convert input data to support multi-series. - seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).call(candleSticks); - seriesGroup.exit().remove(); + series.enter().append("g").attr("class", "series").merge(series).call(componentCandleSticks); + series.exit().remove(); // Axis if (showAxis) { // X Axis var xAxis = d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y")); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); // Y-Axis var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { + chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").transition().text(function (d) { return d; }); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } + // Experimental Brush + function brushStart(e) { + console.log(e); + } + function brushEnd(e) { + console.log(e); + } + var brush = d3__namespace.brushX().extent([[0, 0], [chartW, chartH]]).on("brush start", brushStart).on("brush end", brushEnd); + chartSelect.select(".zoomArea").call(brush); + // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.selectAll(".title").selectAll('*').remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); - } - - // Experimental Brush - var brush = d3__namespace.brushX().extent([[0, 0], [chartW, chartH]]).on("brush start", brushStart).on("brush end", brushEnd); - containerEnter.select(".zoomArea").call(brush); - function brushStart(e) { - console.log(e); - } - function brushEnd(e) { - console.log(e); + legendSelect.remove(); } }); } @@ -6694,10 +6696,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.categorical(3); var transition = { @@ -6738,12 +6740,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); - var radius = Math.min(chartW, chartH) / data.length / 2; + var radius = Math.min(chartW, chartH) / data.length / 2.3; var innerRadius = radius / 2; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, @@ -6776,46 +6778,49 @@ return layout; } var layout = generateLayout(data.length, chartW, chartH); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Donut Slice Component - var donut = component.donut().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentDonut = component.donut().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); // Donut Label Component - var donutLabels = component.donutLabels().xScale(xScale).yScale(yScale).transition(transition); + var componentDonutLabels = component.donutLabels().xScale(xScale).yScale(yScale).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); - }).call(donut).call(donutLabels); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentDonut).call(componentDonutLabels); + series.exit().remove(); // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -6976,10 +6981,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.diverging(2).slice(0, 5); var transition = { @@ -7021,11 +7026,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var radius = Math.min(chartW, chartH) / 2; + var radius = Math.min(chartW, chartH) / 2.3; var innerRadius = radius / 4; var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -7037,50 +7043,53 @@ var xScale = d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle, endAngle]).padding(0.1); var yScale = d3__namespace.scaleBand().domain(rowKeys).rangeRound([innerRadius, radius]).padding(0.1); var colorScale = d3__namespace.scaleThreshold().domain(thresholds).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Heat Map Rings - var heatMapRing = component.heatMapRing().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentHeatMapRing = component.heatMapRing().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); // Circular Labels - var circularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("start"); + var componentCircularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("start"); // Ring Labels - var circularRingLabels = component.circularRingLabels().radialScale(yScale).textAnchor("middle"); + var componentCircularRingLabels = component.circularRingLabels().radialScale(yScale).textAnchor("middle"); // Create Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(heatMapRing).call(circularRingLabels); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").attr("class", "series").merge(series).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentHeatMapRing).call(componentCircularRingLabels); + series.exit().remove(); // Outer Ring Labels - containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(circularSectorLabels); + chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels); // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -7297,11 +7306,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, columnKeys = _dataTransform$summar.columnKeys, @@ -7312,54 +7321,59 @@ var xScale = d3__namespace.scaleBand().domain(columnKeys).range([0, chartW]).padding(0.15); var yScale = d3__namespace.scaleBand().domain(rowKeys).range([0, chartH]).padding(0.15); var colorScale = d3__namespace.scaleThreshold().domain(thresholds).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Heat Map Row Component - var heatMapRow = component.heatMapRow().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentHeatMapRow = component.heatMapRow().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(data); - seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", function (d) { - return "translate(0,".concat(yScale(d.key) + titleH, ")"); - }).call(heatMapRow); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").attr("class", "series").merge(series).attr("transform", function (d) { + return "translate(0,".concat(yScale(d.key), ")"); + }).call(componentHeatMapRow); + series.exit().remove(); // Axis if (showAxis) { // X-Axis var xAxis = d3__namespace.axisTop(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + chartSelect.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); // Y-Axis var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -7576,11 +7590,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - margin.bottom - titleH, 100); - var legendH = Math.max(height / 2, 100); // Create Scales and Axis var _dataTransform$summar = dataTransform(data).summary(), @@ -7606,70 +7620,53 @@ } var yScale = d3__namespace.scaleLinear().domain(valueExtent).range([chartH, 0]).nice(); var colorScale = d3__namespace.scaleOrdinal().domain(rowKeys).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Line Chart Component - var lineChart = component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentLineChart = component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition); // Line Dots Component - var scatterPlot = component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentScatterPlot = component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").attr("class", "seriesGroup").attr('clip-path', "url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").attr("class", "series").attr('clip-path', "url(#plotAreaClip)").merge(series).call(componentLineChart).call(componentScatterPlot); + series.exit().remove(); // Axis var xAxis = d3__namespace.axisBottom(xScale); var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH + titleH, ")")).call(xAxis); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); // Y-Axis - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(titleH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").text(function (d) { + chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel", true).attr("transform", "rotate(-90)").attr("y", -40).attr("dy", ".71em").attr("fill", "currentColor").style("text-anchor", "end").text(function (d) { return d; }); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); - } - - // Title - if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); - } - - // Legend - if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); - } else { - containerEnter.select(".legend").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Zoom Clip Path - var clipPath = containerEnter.select(".clipArea").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll("defs").data([0]); + var clipPath = chartSelect.select(".clipArea").selectAll("defs").data([0]); clipPath.enter().append("defs").append("clipPath").attr("id", "plotAreaClip").append("rect").attr("width", chartW).attr("height", chartH).merge(clipPath).select("clipPath").select("rect").attr("width", chartW).attr("height", chartH); // Zoom Event Area @@ -7678,22 +7675,36 @@ var xScaleZoomed = e.transform.rescaleX(xScale); if (showAxis) { xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis").call(xAxis); + chartSelect.select(".xAxis").call(xAxis); } - lineChart.xScale(xScaleZoomed).transition({ + componentLineChart.xScale(xScaleZoomed).transition({ ease: d3__namespace.easeLinear, duration: 0 }); - scatterPlot.xScale(xScaleZoomed).transition({ + componentScatterPlot.xScale(xScaleZoomed).transition({ ease: d3__namespace.easeLinear, duration: 0 }); - containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot); + chartSelect.select(".seriesGroup").selectAll(".series").call(componentLineChart).call(componentScatterPlot); } - var zoomArea = containerEnter.select(".zoomArea").attr("transform", function (d) { - return "translate(0,".concat(titleH, ")"); - }).selectAll("rect").data([0]); + var zoomArea = chartSelect.select(".zoomArea").selectAll("rect").data([0]); zoomArea.enter().append("rect").attr("fill", "none").attr("pointer-events", "all").merge(zoomArea).call(zoom).attr("width", chartW).attr("height", chartH); + + // Title + if (title) { + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); + } else { + titleSelect.remove(); + } + + // Legend + if (showLegend) { + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); + } else { + legendSelect.remove(); + } }); } @@ -7865,10 +7876,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.categorical(3); var transition = { @@ -7909,12 +7920,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); - var radius = Math.min(chartW, chartH) / data.length / 2; + var radius = Math.min(chartW, chartH) / data.length / 2.3; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, valueMax = _dataTransform$summar.valueMax; @@ -7947,49 +7958,52 @@ return layout; } var layout = generateLayout(data.length, chartW, chartH); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Radial Bar Chart - var polarArea = component.polarArea().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentPolarArea = component.polarArea().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); // Circular Axis - var circularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale); + var componentCircularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale); // Circular Labels - var circularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle"); + var componentCircularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle"); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", function (d, i) { - return "translate(".concat(layout[i].x, ",").concat(layout[i].y + titleH, ")"); - }).call(circularAxis).call(circularSectorLabels).call(polarArea); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentCircularAxis).call(componentCircularSectorLabels).call(componentPolarArea); + series.exit().remove(); // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -8195,11 +8209,11 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, columnKeys = _dataTransform$summar.columnKeys, @@ -8211,54 +8225,59 @@ return d.value; })]; var sizeScale = d3__namespace.scaleLinear().domain(sizeExtent).range([minRadius, maxRadius]); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); - var layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); + + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Proportional Area Circles - var proportionalAreaCircles = component.proportionalAreaCircles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentProportionalAreaCircles = component.proportionalAreaCircles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition); // Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(data); - seriesGroup.enter().append("g").attr("class", "seriesGroup").merge(seriesGroup).attr("transform", function (d) { - return "translate(0,".concat(yScale(d.key) + titleH, ")"); - }).call(proportionalAreaCircles); - seriesGroup.exit().remove(); + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").attr("class", "series").merge(series).attr("transform", function (d) { + return "translate(0,".concat(yScale(d.key), ")"); + }).call(componentProportionalAreaCircles); + series.exit().remove(); // Axis if (showAxis) { // X-Axis var xAxis = d3__namespace.axisTop(xScale); - containerEnter.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + chartSelect.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); // Y-Axis var yAxis = d3__namespace.axisLeft(yScale); - containerEnter.select(".yAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(yAxis); + chartSelect.select(".yAxis").call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -8455,10 +8474,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.categorical(3); var transition = { @@ -8499,12 +8518,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); - var radius = Math.min(chartW, chartH) / 2.5; + var radius = Math.min(chartW, chartH) / 2.3; var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, columnKeys = _dataTransform$summar.columnKeys, @@ -8513,59 +8532,60 @@ var xScale = d3__namespace.scalePoint().domain(columnKeys).range([startAngle, endAngle]); var yScale = d3__namespace.scaleLinear().domain(valueExtent).range([0, radius]).nice(); var colorScale = d3__namespace.scaleOrdinal().domain(rowKeys).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); - // Update the chart dimensions and container and layer groups - var layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Radar Component - var radarArea = component.radarArea().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); + var componentRadarArea = component.radarArea().xScale(xScale).yScale(yScale).colorScale(colorScale).opacity(opacity).dispatch(dispatch).transition(transition); // Circular Axis - var circularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale).showAxis(false); + var componentCircularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale).showAxis(false); // Circular Labels - var circularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle"); + var componentCircularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle"); // Create Radars - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; - }); - seriesGroup.enter().append("g").classed("seriesGroup", true).attr("fill", function (d) { + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).attr("fill", function (d) { return colorScale(d.key); }).style("stroke", function (d) { return colorScale(d.key); - }).merge(seriesGroup).call(radarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")); + }).merge(series).call(componentRadarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")); // Axis if (showAxis) { - containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(circularSectorLabels).call(circularAxis); + chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels).call(componentCircularAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } @@ -8726,10 +8746,10 @@ var width = 700; var height = 400; var margin = { - top: 20, - right: 20, - bottom: 20, - left: 20 + top: 40, + right: 40, + bottom: 40, + left: 40 }; var colors = palette.categorical(3); var transition = { @@ -8769,12 +8789,12 @@ selection.each(function (data) { // Set up margins and dimensions for the chart var legendW = showLegend ? 120 : 0; + var legendH = Math.max(height / 2.5, 100); var legendPad = showLegend ? 15 : 0; var titleH = title ? 40 : 0; - var chartW = Math.max(width - margin.left - legendW - margin.right - legendPad, 100); + var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var legendH = Math.max(chartH / 2, 100); - var radius = Math.min(chartW, chartH) / 2; + var radius = Math.min(chartW, chartH) / 2.3; var innerRadius = 0; var _dataTransform$summar = dataTransform(data).summary(), rowKeys = _dataTransform$summar.rowKeys, @@ -8788,58 +8808,59 @@ var xScale = d3__namespace.scaleBand().domain(rowKeys).rangeRound([0, 360]); var yScale = d3__namespace.scaleLinear().domain(yDomain).range([innerRadius, radius]); var colorScale = d3__namespace.scaleOrdinal().domain(columnKeys).range(colors); - svg.classed("d3ez", true).attr("width", width).attr("height", height); - // Update the chart dimensions and container and layer groups - var container = svg.selectAll(".container").data([data]); - container.exit().remove(); - var containerEnter = container.enter().append("g").classed("container", true).classed(classed, true).merge(container).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top, ")")).attr("width", chartW).attr("height", chartH); + // Add Title, Chart and Legend main layer groups + var mainLayers = ["title", "chart", "legend"]; + svg.classed("d3ez", true).attr("width", width).attr("height", height).selectAll("g").data(mainLayers).enter().append("g").attr("class", function (d) { + return d; + }); + var titleSelect = svg.select(".title"); + var chartSelect = svg.select(".chart"); + var legendSelect = svg.select(".legend"); - // Update the chart dimensions and container and layer groups - var layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g").data(layers).enter().append("g").attr("class", function (d) { + // Update the chart dimensions and layer groups + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); // Rose Sectors - var roseChartSector = component.roseChartSector().xScale(xScale).yScale(yScale).colorScale(colorScale).stacked(stacked).opacity(opacity).dispatch(dispatch).transition(transition); + var componentRoseChartSector = component.roseChartSector().xScale(xScale).yScale(yScale).colorScale(colorScale).stacked(stacked).opacity(opacity).dispatch(dispatch).transition(transition); // Circular Axis - var circularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale); + var componentCircularAxis = component.circularAxis().radialScale(xScale).ringScale(yScale); // Circular Labels - var circularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle").capitalizeLabels(true); + var componentCircularSectorLabels = component.circularSectorLabels().ringScale(yScale).radialScale(xScale).textAnchor("middle").capitalizeLabels(true); // Create Series Group - var seriesGroup = containerEnter.select(".chart").selectAll(".seriesGroup").data(function (d) { - return d; + var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); + series.enter().append("g").classed("series", true).merge(series).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).each(function () { + d3__namespace.select(this).call(componentRoseChartSector); }); - seriesGroup.enter().append("g").classed("seriesGroup", true).merge(seriesGroup).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).each(function () { - d3__namespace.select(this).call(roseChartSector); - }); - seriesGroup.exit().remove(); + series.exit().remove(); // Axis if (showAxis) { - containerEnter.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2 + titleH, ")")).call(circularSectorLabels).call(circularAxis); + chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels).call(componentCircularAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - var titleComponent = component.title().mainText(title).subText(subTitle); - containerEnter.select(".title").attr("transform", "translate(" + chartW / 2 + "," + 0 + ")").call(titleComponent); + var componentTitle = component.title().mainText(title).subText(subTitle); + titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - var legend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); - containerEnter.select(".legend").attr("transform", "translate(".concat(chartW + legendPad, ",0)")).call(legend); + var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); + legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/dist/d3-ez.min.js b/dist/d3-ez.min.js index 74c0f6c9..56728e90 100644 --- a/dist/d3-ez.min.js +++ b/dist/d3-ez.min.js @@ -1 +1 @@ -(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(require("d3")):typeof define==="function"&&define.amd?define(["d3"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.d3=global.d3||{},global.d3.ez=factory(global.d3))})(this,function(d3){"use strict";function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n.default=e;return Object.freeze(n)}var d3__namespace=_interopNamespaceDefault(d3);var name="d3-ez";var version$1="4.0.3";var description="D3 Easy Reusable Chart Library";var license$1="GPL-2.0";var keywords=["d3","d3-module","visualization","chart","graph","data","svg","dataviz"];var homepage="http://d3-ez.net";var author$1="James Saunders (james@saunders-family.net)";var repository={type:"git",url:"https://github.com/jamesleesaunders/d3-ez.git"};var bugs={url:"https://github.com/jamesleesaunders/d3-ez/issues"};var type="module";var files=["dist/**/*.js","src/**/*.js"];var module="src/index.js";var main="src/index.js";var jsdelivr="dist/d3-ez.min.js";var unpkg="dist/d3-ez.min.js";var exports$1={umd:"./dist/d3-ez.min.js",default:"./src/index.js"};var scripts={build:"make",pretest:"make",test:"tape 'test/**/*Test.js' | tap-arc","build:docs":"jsdoc -c config/jsdoc.conf.json","deploy:docs":"npm run build:docs && gh-pages -d docs"};var devDependencies={"@babel/core":"^7.24.5","@babel/plugin-external-helpers":"^7.24.1","@babel/plugin-transform-object-assign":"^7.24.1","@babel/plugin-syntax-import-attributes":"^7.24.1","@babel/preset-env":"^7.24.5","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3",eslint:"^9.3.0","gh-pages":"^6.1.1",jsdoc:"^4.0.3",jsdom:"^24.0.0",rollup:"^4.17.2","tap-arc":"^1.2.2",tape:"^5.7.5","toast-jsdoc":"^1.0.2","uglify-js":"^3.17.4",vows:"^0.8.3"};var dependencies={d3:"^7.9.0"};var peerDependencies={d3:"^7.9.0"};var packageJson={name:name,version:version$1,description:description,license:license$1,keywords:keywords,homepage:homepage,author:author$1,repository:repository,bugs:bugs,type:type,files:files,module:module,main:main,jsdelivr:jsdelivr,unpkg:unpkg,exports:exports$1,scripts:scripts,devDependencies:devDependencies,dependencies:dependencies,peerDependencies:peerDependencies};function componentBarsCircular(){var classed="barsCircular";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var startAngle=d3__namespace.min(yScale.range());var arc=d3__namespace.arc().startAngle(startAngle*Math.PI/180).endAngle(function(d){return yScale(d.value)*Math.PI/180}).outerRadius(function(d){return xScale(d.key)+xScale.bandwidth()}).innerRadius(function(d){return xScale(d.key)}).cornerRadius(cornerRadius);var arcTween=function arcTween(d,j){this._current||(this._current={key:d.key,value:0});var i=d3__namespace.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("path").classed("bar",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("stroke-width","1px");bars.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentBarsHorizontal(){var classed="bars";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("rect").classed("bar",true).attr("stroke-width","1px").attr("rx",cornerRadius).attr("ry",cornerRadius).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("x",0).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("width",yScale.bandwidth()).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).attr("width",function(d){return xScale(d.value)});bars.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return my};my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l);else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity/2);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);bars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(title){var _titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(_titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").classed("seriesGroup",true).merge(seriesGroup).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key)+titleH,")")}).call(bars);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var bubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(bubbles);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis)}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);if(showAxis){xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);containerEnter.select(".yAxis").call(yAxis)}bubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(bubbles)}var zoomArea=containerEnter.select(".zoomArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var candleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var seriesGroup=containerEnter.select(".chart").selectAll(".seriesGroup").data(function(d){return[d]});seriesGroup.enter().append("g").attr("class","seriesGroup").merge(seriesGroup).call(candleSticks);seriesGroup.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);containerEnter.select(".zoomArea").call(brush);function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);svg.classed("d3ez",true).attr("width",width).attr("height",height);var container=svg.selectAll(".container").data([data]);container.exit().remove();var containerEnter=container.enter().append("g").classed("container",true).classed(classed,true).merge(container).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).attr("width",chartW).attr("height",chartH);var layers=["xAxis axis","yAxis axis","chart","title","legend","zoomArea","clipArea"];containerEnter.selectAll("g").data(layers).enter().append("g").attr("class",function(d){return d});var lineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var scatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var seriesGroup=containerEnter.select(".chart").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll(".seriesGroup").data(function(d){return d});seriesGroup.enter().append("g").attr("class","seriesGroup").attr("clip-path","url(#plotAreaClip)").merge(seriesGroup).call(lineChart).call(scatterPlot);seriesGroup.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){containerEnter.select(".xAxis").attr("transform","translate(0,".concat(chartH+titleH,")")).call(xAxis);containerEnter.select(".yAxis").attr("transform","translate(0,".concat(titleH,")")).call(yAxis);containerEnter.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{containerEnter.selectAll(".axis").selectAll("*").remove()}if(title){var titleComponent=component.title().mainText(title).subText(subTitle);containerEnter.select(".title").attr("transform","translate("+chartW/2+","+0+")").call(titleComponent)}else{containerEnter.selectAll(".title").selectAll("*").remove()}if(showLegend){var legend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);containerEnter.select(".legend").attr("transform","translate(".concat(chartW+legendPad,",0)")).call(legend)}else{containerEnter.select(".legend").selectAll("*").remove()}var clipPath=containerEnter.select(".clipArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);if(showAxis){xAxis.scale(xScaleZoomed);containerEnter.select(".xAxis").call(xAxis)}lineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});scatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});containerEnter.select(".chart").selectAll(".seriesGroup").call(lineChart).call(scatterPlot)}var zoomArea=containerEnter.select(".zoomArea").attr("transform",function(d){return"translate(0,".concat(titleH,")")}).selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH)})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:20,right:20,bottom:20,left:20};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendW-margin.right-legendPad,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var legendH=Math.max(chartH/2,100);var radius=Math.min(chartW,chartH)/data.length/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/2.3;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);componentBars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin),")")}).call(componentBars);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key),")")}).call(componentBars);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var legendTitle="Key";var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentBubbles);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);chartSelect.select(".yAxis").call(yAxis)}componentBubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentBubbles)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().title(legendTitle).sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentCandleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data([data]);series.enter().append("g").attr("class","series").merge(series).call(componentCandleSticks);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);chartSelect.select(".zoomArea").call(brush);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll(".title").selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentLineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var componentScatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentLineChart).call(componentScatterPlot);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis)}componentLineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});componentScatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentLineChart).call(componentScatterPlot)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;iF%y65dJ{>qHu{^sifZ@FhlC|rvM~*EGYlBIVFnsDrsw44#Zy+5 z?SfL3rmBP`rg@%q5#Nu!Z*N`6j>vOnWl5z2Hnx+srmf0zGLFAw9B7VnWxumh#Z-w^+wlaB!#0SB|I0R#a7hqJH(SOEdulL-V*0r`_z1o;6k zlT!t=0W*^a26qAZlYa(d0S~j|25$m?|L{nIV4p8wYQna9Kz`@~kRsDy;xFF&Paw#k z+(I@^o{W;2d;hufMG<3$(+=Gi)eWri{*&k-G?jkuXQ$&KERVbshskMi*3|b@MuaHn z{U;W}QVpkjOlH-|`{zZFH(i0esY>2-QS$b2My*65nUi%1l@oY5VhwG@^Rxng>k|E% z$@X;!PR7IIFk|HMj9stYn@_A%A(o(&Wo87)qD&f*XWFTJC)K!`BP%%qqgNI&pIS|8 zT!LVkpAo1PSfA{tT-U5gG~br^jON)vhyhvV3`F`k%;uA?sJKfIFZ5u}Y?b2blm0sK zo{?7nVxhQtn(6~4T1-w!aC=67iI(r(FcU!Zh^Gx6f_o+-s;Re=<$Wk~(dxc z!YzHdez93so~K##IZX;bUfI5)6t$#<#aULaie*KPwPhE(blZy4DxFsOjcSz{R8pl? z&QLR0TsDCa%|^u|rlpAMqN7p*Csc8wAJh5z+;p}scNQXk2#T4O?2BK2MJv8~+Ag1e zwhp?GQP7)F*SbrM(bdb*qM$D`s>>_&e@B8A*NWUr zKPLmaICU&vP4eipS&lxMm(e2%s!!pK)anV*c`bS$XPG}`#FF1$dO|84Ljhxy^^d1Z zbV0rX`MFAZz5v$r!is~vqSp3L+U8f>|EVDoJ3dEYm%{00tNM6(pAc!N&cM7kS(XEe^w z8X=R3VF1}|B+&P`xyRZk1XgcA1`leMElVj01caZ7gwWkkpF)5}4O;{!*b32~9X9yb zvau%v8qhEbQE!ZYo1|sqCSNX6j4#(nD@mKMOtSRcQ_`|VYID?QvN$5;<*dsQ+83}n z*YGo#a1o=O<$LdA)Ze4x?0Fi8Ii_ji^s!G^UIHcxq=uiE>$TQ*ZXm z=%ZF~Wd#eC4j*PwW?$g9Qkc#;a3-p(1?DZLFEf+x8CQZ1BMCIV!ed3VXp2v>bV#c= z+c;xb(v~-jl9yqkwE6o~TPq3~DPbCD5r~r0jTxOTixoCw<;Kk@ON$hX>=fw%DT}h2 z6m(!*J&pT+EfABMl7G@_X>QVMX-BanH%ZxAPzNoqX8u?HXajqceZtPZVe7)QRPkfJ zNs;VZ|J``h|1J9cMKdYj*Ztpn_kQ2mZo<#~*dLCz|dj~V%S(c?)W8*~v`$-gdK8PN}Q9*31B$o%} zwD}qXT|O`TWDs`#D|rEeZiW_rNO~N4JV}dW@TrnW=1cAk$2rPkpF-G5OG^!!H4K5% z1f7k4(h!vR=wcKEA)SunEWCI!EXQ(x!=tjn8V=<|LGDQInjgvWk+x{=-@<|1TY3pL zz|{k-L|k?OYb`v5p@wyW6!6s8NAH83Kj2Lvf8_078{)u)%$ zT`Y!WnMUxyO|c zRJASUpzsGDL4#eFO@^1}OfxscG{Xkmvawydg=SH+g_4cK#AaO8zM2*to(QyaGII6{ z_clrOXn{QEvv7?`Vre2Vqv$-k$(T3rFH@QBwr>CHuLJuvBnkz5D zi_z=zLQB!pULX6a9Nxw7o*w*V&un$q+k9wk@E3XzU)e{*ugi=+8js8#A|2Gd@czMm zuyhZ0+q~YX?i~4{c_v^REhR;&mCgj}OrYMSm_P-aW~R^?whm_tomaHr8vBY(gxn@0wdDou$!P8l9!lLa?(mI!mLo zG+w@?@g@3}4Fm7jGzgclEwbz+_YyY6SZ0@|MauaIkTeYAV<1Sz*$ilOC*S9}e&~{a z8%F%!naN1z%ecwyz6c`i(F}}#u|Flo&o~89Q^cI4NpTQ;#_{WQueOP^xw^ek8AZ#s z_EqhSXeYyQcsv+{dCsk5(kcdVJgV_t5%2hdr@&=C6A;bI^KQVBqT!ga&wg{6jsB^$ zavD}RGTTrsR+~f8Xy(d6lnpF?IW;Rog_^5qqqG#Rj~?QGk7PYGwxnHuicD0)p`UBh zakBYhw%#=hNb^j>7UDeN9!9Xxi4|5Lk}!RP=F`Tb2q$I3@q(j)WmJs?#+62bWuW7L zABJAE!8~OWekb&MScs#K|n^8k&4B&{bX>K5*7jVZLDF8vD60P z0m304Dz)uQd`{UXYX;+gs}RV3$*};w+QzAX6NdBHO>aYSdsm?@QTAU)Frn8Im`p;l z)s(MS5Uo|IdNH|US&^Dr>hMwqE#aFNtJwkA!i2JXHSh6@J%0%rwH-hdRG&g3D=j`n zX*R+u=8{KN;d0bT(Z}<6F^j1NC@L*X-Sc;^UJ5~rJnhj4JEt9g?>3RRZZ~Ub2UJK~ zQaOOkie^BIs!#aOz@?}Nvhd9PIfAUn?Ba0XpJl?CE-dPcx72yV1 z5uS{X@z0w$T?(LoL~`d#fs$y}6>v$&fE`k4Hd4tHwHF2?(NQX|?Mnh78S1&aGBu|X zhZj)EW3zcCWPtL+hgL%=G$gC_eu!XA)>|ipmo?PmNkm@Z31yS&0rRh8L1MK;CjT}z z5@<4X5#s?3#nyrXPooFCNp!<3DuE3h%;y*{BMVXdQRUXl*m60ozHI zdTyb5jk6DK)G66Nm|akAl(bP#}a1T0t)@BX86jDg9Q%Wog!`-WLXa|ROSd3_5Lb-rp6;i-* z#OnHu=c&biIbeq~$vBhD^)$)slTq*v3J|WAu*uNuB==H=nSqku-5OiX7DM}zo1i6H zgz<6)~EB+tD3ui*1+e{>6!O3Jtr;I92}iN3`CG{ zwOiD13T`ih!;3S_LU7Kij*eN|aeCe+kb^m@y45^m+}I&C&3zbAuU5C+kP_DVw%}ZP z$S5CbF`y*$r9Tq17&eVNPgBLG2-4G3qrbGwJ6DSo2R);gcGRruZ$<$QY{i6s4MX7V zlcn*0#PFDf%Y?){@pX6UT110#kkX{W8!c!7BC*=6!t8Cb8rwCl*3_9+Sl8SuHAc1i z?V4HcXUYy}$Or)+R9W{Ha$}`=HST;!P6iz%x!0bV0zp44g?c@M(4sl7K@!W^gXrWW z%)(?~D}-cGuXBh}yL*-{AWhj+inP(p@mNZK_bhW$i7t2?#tZQ>^c9Dh6|8Jf3k_qP zj-7i8Xih7t=Ybj0p4HGY@1bq2;6CoO<%XZO(AhEbw1p>`d73~It>H9*)i(Pyfz@_B zA8%$ou=IsJ$zLj;JYHXURk&e7x+?iLm5Ik3PID>d9qK+J-iSmIN1wK@-}aR+O}gfP zUALzs(5so9M3JY|O2wR{hJ0spcQ*HHX>(^rt&4cjOgFkLL$NG?ldKi#jPK6)?u_r( z)c77{=xsdn9#5it8S6XCPqHs#eOK~J>pP;3{8%@zBmCN#+)F0+{46~uoewk3kMnR1 zW^`ppEL-!Xo6(8CG%*|gK%kF6y$IodU`W+NnvvY*C(THL-qQAFlyKNJJ(S6dHl?(N z!?gV@L{ou}!&cG}G4z0R!)!Z2EqxeTspHvvI#pyPizvYtqqNDk8Oq8SHywK6Qza?I z@O^$G6?5w*S{W^_H`1X}x<*M& z8H90a!=2$7hc$Gi^ktKvI3o#v^N-Y5iBMCh&hZrM)R#ST^3Zid&1-@Kme#Y9vTP%> z8vW!XRIPtAtA~p1Et+jiQ`@F92776hjj+^TeRF;R<{*A5rB^e&`JANknzzAddPaEQ z=V#ukRrw`cbUa!10%q?^)2^lP&w~+O1gvI%pgG2y98?6B zStyC(45s8TmBj9+W8zY_TftbRoV^-r#R`YSm#lF`1vs5riEv+AI@uc%FSF$fF7tD1 zgqA3R!BC!zD|OI|WB_AD{q8of4Q-?YnXN2V%c(y)M_!kEsHUZ_%o)s8juiD$+A!+A z<3%vB)1RXWaFMP~p6W4wbb-xBn;f=ItnNdZ)z)=NEO|n8L%S64#WD%G?aUBnT`k{b#7=C(qN1tZNW|i{ku6 z5X?twNpdyIn&+v1#nrxJ0P~I75Xt?)+)Chan#Q3oP2l4YI^<`xTGhB*pxC*VxLd$- zGh&p&>JoU9%>K6)F&vXgP6vGj`!SZn3R%I5EK8YfOJ2X_c;Jts!jGfRA)`W=V|kU~ zqPr)k#cb-P_20t*R5cNptC-UA5Mi-`GBV3jXv zv!=yxDVBaMj@_d9^patUF@1ZchD45r!V^(>Nx+3jF5j{uWoC#gHI}9~FymC>iwqpM zsk-oqAbJnR38cq17SfhiY$J;>ISV1qij^y}Y?p_BMz7=MExWg^5xsQFzFwc{mO1KQ zv10U9&xxhspXEBy?(C2-AK5j;C803X6NiPndP#58uAG2Y^s#@I!3?X_CqFDPkw^<) zpPb|&IiBqPQPi%vMV#ToAJe^=80$_ocHcpL%fkOeYiS8B&Eq0zB60G#$a#tCz;bQV zyEHC;-$2h?zyvX-{URX0eJVjM;CxV5C-#K|#B)(A9u;TaZQ7-`JK}Kf>O+#&j_t6WJZiWP^UU(P9ZRa6u)wJ#Mpqw7 zibAz~)-y?&)OsW-#(|wk>h-SaK+Jb3%yk9aCB69Q|eE)2Borc%-)H(riqtBZgKrO3gYuEHP9% z5peofG05+2FM`05`>E5+;^swvUY;R|1z4d(jO@GQ?U9Z>bdF^he+w<51 zL0a#BMO)lW=}CR2RUD^RXCWF?ZGY{3Iw9)N62!~=2$(=Pq3mC#` zag+k{;&#RQCZh$cbn25fr8kr-tS-RvNJkdwZ$Lt}kIMnC{A1ue3+7xLAmhIT} zF0A6co3CwGyyTN?9Y}v%x{a6^Y$v+4c2a4oRTJ9mv}!yWX_dSR{0K8@B^`E;l$2RT zqMkHCkXBFiR!=KiJ)P6)X?3e5{t5FFcUQhOs*Oh+m4>>ns&(t-}-J#I0H%FZqf z3#iNnbw!OrxAn5@*h?DbPuel9Ue_p-D|-}kUe~U>*EK3e93X4cERTfQ&Gxj0N@$0q zt7*PLzQi4_Sy5jvw9+c4u*@`rBodq#tND7lT%%oJSUhIiHthBgX+Z>LKtCzh;$h@# zY1eMVB_@4^$ZpZGxnf(|@!QPWjJru2Jq@_U=ah4p<{YM7V~1&rI1l^P<~%IM-OYIq z`-YPdA0vPA?PBSioy6HmM8|*Qb`p!Tu*w=q_Q$oVW%CWMT|BVW%VMPL`7bXj<>S|>`H(@-a>7=bi>dv9QiiPAR*%ipqRvFAh&+Irg)pmtbiV3ke^Qb|_ zUPX;M(yZExhhbz8Em2Wh7B?OOMrT%OUUXXs?=pYaU{ZmbW9SzfE!GQF2Kt5EncL{> z>?&b1K^hFqwusT9)-^Ms^_xmRvt-n99fGT`^PV*uA%NQV@4qXcB4)#t7TcNDT&*C@ zm{YD)&DUMX+)K{Kwv8eTqc7RtQk;F9FLwq|ZUcG8N`;j_X>Y52se72T{NtgdT$}NuQ2ZsUTVm1_QGF{ zbHlE^y9xt8^o{yj_GYxO?xT5JN1dw9*nU%t?KjCFd#i>??|JAKumVRE*}1qi5A#EI zl6whj-kHoUt$7v@*M%AQZaIk8OarDeU>0U@IR;FWTnrEc?DZcdhTx9T_saYdT!apE*(mS?;iRwdXNK^c@UE>B3uIh ze3OhKi+`7A-#CbdBeZV3d-c+L8RZL@GKyi08J03+u)NZYag}TcCWBwtEWoI@aQ;g- z3XrP@II1%hZ$%Fq*S&f$>sAF+D6Uh$?~)2bDw+M56lBv2)vXAk3jG<>l^#J=H0~;Q zrCOTOYpL^mMv7Yt#)Sn{{Rt-{V4pUvTbEgvseefP6!~avWlam_N0E+j+54wd2-eQI zm)7+(FZ5h9r_SfcNf4eyNf?;k=NU1oM`gnk`8b|$SK|E(@=xrKi2n;^G8!g?7~S-Y zWBc5)o&3j9<&>e33(pl>Pf;h-l^vyzJ8{n2Cysi{4odBwGJ8&SSul)<{QVHt?oujlR~7h2rUBH3pN2dg2=iw$!bL7ryjQoJbY=1Mx`xr}%G zf|pIsQOF{wzb~fngX>w8prRU)x`P+L{_^tK`-5k1Upza|P8MGM_VV2e8L_P#Iiy(- zC4Le9HJqXa@Q~POh}~%8^Ttt0?j|I_8h_UZ16RE`DOQGqLy#~Bc00pO61E_?0(7I^ z^1jyIl7HFs+=Iqe%m&eIY7?^b{IB8EJ}qz(%O*m*w6-XVpN%TBr&5keM?k)^LMr~! zD2Zs;=67k~#|yTa^6yuaye33D#BsuBtonMj5T&l5=3W%r8sJ&EQvXXv_x`+NBR2w zcTM=wlWsnw470Sw+m963IKiLVL*u=Ql8WI;tSm~5&#S0n^H_BDmEIQ8*@mdFS%1QL zul&i9RFM~p)=rf_S&1qlelNo#=zsaw0-T~AM~CH*t2|M8bl4O6b3OWuku*iYl} zFj<)X0m-&L;uV5dWtS?067P7`V^0JYG8}o@17M4CBq*RW8s}#;$~-?(84A=xA7?tr z(qSVB&ry1A93Jt5YAC7Yy)ROsj2>GEhKH@a4jNjZ_XCC#lronYc|uK7sC(TmIG>= zvf5B-!|Ph)9YuU2Y*UG}@PA=*EpE$(%O^T4c8d;NBkw(yL z_Ibe12Ke%CiFtEWr!C$=;SWBB!IEuaxvQsWoSuhy@oR|2#!unFcz*~*48 z6jTB25zlg;Ss(f}6Mq?3emyVICWWO`{pv6Awh_(Fpg2tQtW!_0_)=s`ZI5abw@yvL zK+3T#wVl;01F^$r;ou{VWVxkL?&U=k$6~E`jU*K<^w=rRNeW!8*}@|7wB_NuVNrpg z(5_rrkll}8TDrp0JrCvD1SZ)9R#-~Jfv9TpEj=XK-_{7=J%6(>0ncrNU>li-3fo{b zl#?k$yyZ6hkX8h1As@#@j?ZQL_-F%6W}VU6JG52R&Pp!4FD%zf$mb$!rNC!VjcN-C zx>4Q2N{QFSDqVP}^KjO2`jR1m;$*JA?dN%V4x^Gxy{F+I8p59TCI%&*JyR~v*0bmnR3tui zEGhi;+TPD`>KEl>cDueB(AsEaY8Pq|4alr@>5zfe8h;xIoWR%)32JOL9`*mL)A+Ao zv)OzEzYoJ_M~%bH_R%96^oOmc!ZN-mnaYNYu5~VnN!x7+QGlNQdISl>T;@&rZWVW4Ob1(=darBn`V3Rm`S~nH zj8u{S98Ex%9pZQ$hw%Red1kB&f?(incg^Jon%8z025TFI%o)q^-5JP~2s>QJa9)U9 z)k70RdEqAmVUNZc(H4e4MZLyrgajPX?QHLYMt|4YMZK=`BmC}ly5jVo(MD1m+uf(~ z%A)I~(GZ5mP45%X#T(V^unuh)Q_Vbouyh&7%|kz12qKZwENW-5ppvabo1{3A`{I|- zH|b$-pZ!&Xi4nIiei=D(o+U5k$z>)>By?b3`?4hQCw=WpO(G8!`}(IyBv0P@%5Ni@ zw|`XqvL+$zH3IAjvDHR^NXX|-U;HwnFf;$9N71diuYTAPFbh@R5~eg)-HZFiw>23h zO8vGa<83SjiNwa*=$io|q2vdB{T#e9XF$&La$ULHaVcyJR+RwWwCXQv41a;Aeu6&8&YykBr|EXm+!uk4pJ%<2lkwhBX!4v795=WBT^#@?RcqFt%`Iq z^@t_tQL?MR!Mwb8mKmytwUn49uZgWeaXwmMq zJag4e4dR31yG5>QP_GqB-qj$P1N!v8VIMKK8oPLrghy%rOBU zbDG#T=DN>`Wv)403->N;(6OH^qX@Hd=tmR_Xvi33eFUtF%j+Yku|BX0l#!4T8D@xSg)WTi{Xf{}Kqse>{xv;wgfg~%Vg%@*k?_UW|dI!Z|DuvSbucUMJp(xSJ{t8 z{70X@gQGbMY8p#}{(Z#$YB{Lg*ONRRLuve>q4EWRr#rlgjaJS32FXnjK@YIe|R zQln{F#7!ULqKpH4DSrT&gy^76rD1oxXwQ=ASrW|1(ug3SXAuhyWsNOSkgnoc$8=g6 z&gnrBj^w=C@?;M{1Ge>ko<1cFB}WP^Wr?>vUq&(>X7P3BD*c&+cM}(wO1lVBUziQ`h{$~XzU=$2C;n5uKE>8A(CgJMy~Bvd)X72 zCT1r7oZb%uKe!wIXn9f39wS^f_U5?At0q}{+I7You74HpwXz2SQrIee$a@UZ4S7Ql zQVydaP&%_tzaXy$j<75HXNJ=Ykqy&S&Q4;r6tivv3xa&69V!Q)X}_qhNNAWKB6(LW)C^+j1*L?hSj{+~E;ng_1qv#F^9nK?NWOFBEh!2xqr^ZC0frCiZdw1y)K$KWP4C-z2ili z?o0ZrFI%BS(&qP-GPG#YS$)-0^(U)hErXn{>~!U?s4M5^5t{rPoJ*@WS%AfQ8${{r z%lT;0G_|+oCq30S{~*3&*s;j-8#-@XrNad)t=;K* zDeSd_IZr>->F*Vvd{|;gdtY&>X+!GuDvhHezvHwb74E%f)>!blDE#chnDzR z$zZHoW3`R^TQzmAY}s6?|D0L#dYLtEdP=r(eO3(8p(L=aRn<~jzNy6=aljJd zrf44@U5t&fd!-DFqC6w-wmdHR-Y_(cRvNmAuwDs$*C@GaKXn1HAZ z8SospvD2j=^rG~W@(DOMz0b_@$m0m*B^7jLS9))ThI$jx)A9`hBX`f5yJzH9V233O zGH({`v8vZy*>j;J&D!1z6-KW5I_snnsNT10nkkgby(4rdQYxm7ok9o}>VH7n+q06f zVu5<>77M3-UK{mOiia2Qim5*1mK4&sX`t6?aO-HGD?)76uRspD zX23e9NJo8dXP0}Fpa_E=cM^7-7DYN#0^;z5#LF(Q-+{8gcZ#SWd}8CT;Zy>3s4RC; zitMdQ+|YVd+-s-V3av!BfPW`f6%$z{)Ux{VK-xb9(^I;X2Lh+O7$SZ(B|@@s*W$el zx{&XqX=cH-m71xTO{?39>B-iL^P?fNG^tE3c0K)J#475aw3wv=HRW4<=R> ztdI*uE0`apSYdIM2n<;h?@mS8;~Pgqh_;GOAb(nv_a`a!ld7y}2!EQRutSQOsyf8$ zN;(8s)pOlrz=l$~($XhshRaN}RIkHSjSP*SW?o9&x9SevN?E^jhl3r~4Yb2L*&k~< zW!A@q5W5hWhD&N_BI z^Ap$?Pv>1-AqS6SCx5fru;eZ;R~6~F24%9u=_PK!9o$I0O|~6($iCZbGNq&;t_+2B3xBOrR3RIrqp7?thMS47 zo%UMZwzP)QuST!4OShJu<#e3-(2F4`ga13pUzQw%{MiO=1x#V3G z>cUyQoYhNOy z>%9y=g@3X4i`hql)$(pqI!#r|Pdh^8XDqh4jL+Sfm>R=%F2y7$?J1LoGlw8!s-^(W zYt>>}qN~GhFRkD{80#p}g@G1(qk&}lfoRf==oZMpBDx9Ry3`ZCRo+Qu>pb0TuDpfTTU?f90(Y+!Cgi)zer zSbr>g)VH8AOUJ6@0R^;ZYcA+9R5)ItGpK{ltkKg@T|33J-08~1lGJH`PW$8J(S@Pt ze=2D_a;EY}6V+7zW<5f{YAZiCpk5dkYM`i=ov}lrwx0~n(#&$}+X_(_Kt-7!U%R&q zSU;}e3c`$Q;c`R|H^`7~Xp>aa!57g|ODuM`xt>eyRzGi3VS}nO67BA~!d16aKO$l( zI_=kKze4D6+ON}oo%ZXr-*1x~I46IlYsTaiO*(u2kgGDS2~z0OfIVN_R)Cpu_Hwk`Ppqiez|$SkbQDL?|ba%jRjO(ld(6hu;te zq9s}CjULFDX;y$7AIB(e@`g2(Hr}D{*S~oI9J_bFi&`OVRztL}lw{aNmw_7N&gh+$#%iU>!&4$O*v&K|cBY+%rK)MDL55^I zffhe`rB$c);#LH&my`PyjV*s2{RP#pV{s{0!UvFc$l6>#AX)%eLJ7p%bA}jah!G;LGsMg!_*a`DCdPfySz??eMkn7{V!oy& zCQI?w9JJ4mnL&m)_{^6v$tY!EQM{yO3^ewlRxsC;9acC4&blEC6{CM<+3YUeYUA(> zPE)=tO?i}7s>u+gdH(Q^ftujgG(g*1R?C{Dyw+>6Wf9IeuZTIv-7&VRCX7POhchJh zrwtBxFF7Bfnik$QF`Y072Fia_dnz%ybB@Vj1XP?IK)N-cLr8VA-HFQTma#QdGXuj} zKGQo{hZA=gaVq%!jP-xI2uy^wdaV0vTw8jwfww6L*?WL_3Ol<~|CKlBZmpTwwGcBg;KF*uQPSk35kfN&pg zz)Vk=2qz`6lkrppCxR##n)aap$>8(BTb{&iaDJg#7=GrJs}D(#o}oT1Mrj0#QmuakQTGq1rn|htQop&x@H!;6Nv3@S3_o4uoP=G_AJ{9{l?2I{}wAK z^fRii?~+6C&=KHjbB#BS$4A1th> zDaqG{O$oLRpb|fGD0w>GZsR6a#Xe(fRUC~vNb`oW{oa3p{iv7Kc-)0HrL3!Am9U{-6trI^EG7D8Zt7`$*3!ve@Y8s`Ux{-rfXdiKNCU+ zDQX&|#I`u=)*eCzrr+(aelES(Lkgc*_|R zoiXux8WVx3k+FOer^~p3V%bUVC9H|L%)Wvp(LEou?&pJ)ak1>omwtOt@Bg7cX-qYb zPYz*pvvq8x<#tHN+Ego55f9dKi)|rf2(5ooB0_eWDh8ul1&~+}Ie5La_+XtEwM?wb zT(84rWqQTInfpjjP<0E-DdSEVzcI?V1G+ff)aj;IOE;yDN-wUI(tLH*(V-tD@4^W> ze%K&6r6!t>k9o|&_}DXI#S7|pyCRG~8o%A`uC9fV7p^Z)|59YzA4pS(?94^n!|s2P zT~4P0NrYz^8)~*aIlp8uQ6=;WjoLU{5J8&EO@c*}_)uC}#vC1p6D*pMD-koEvEWNp zNJPf#k-Dc0lSrVi)N-ZSq+Z_YIi%ub)Tm{%vj(vu>(`{0S5iT;(tJ`oYrRlL5t@U~ zt-!K}U=c(GZ1JNi>k=`yITBB(q>58q}>GIZ@f;#mJv9QcTvqgzFn#|tnU$41pInQ~qZ!w@r5ca@ z@Vd`9_Orf>exd}oc)I6l7JW{W!jFxVGD4*N8_GU|Qc50NO2>{NE0VKVnrnOv0$Z-8 zq#-1BK&0sd$n{Z8vabZwbc}zv$CF4)rvz*1-ogwZF1l=~Wu%seB3&zUsnH}~kS60o zN%$1MWlX7{r!thJIt%^cl|RDPD5;*yP%Tw@Zb_7$(=^2}ei`LzW1h1h5&sV5W+MR! zBPn9(&P++8I60%K!c!0;)C43zi9_!srFaZf(h&KelxQDztW%hne71klwC~QcFh`-a zlwQQp)KNm=%4#|uMpDQ}9F-*UxlWQsyk?;!5wDrh6m~y~YI=JLl3QGZSJDe_2Q-Ba zyH?ZbF(kEe7New84&F#A!sYvh4g@@APf@IJOvah_#*dM&<~DuG`*S$)ha>g@%0~FP zGotA`137q&9+5Z96hVLVDa=k`Qdh+1;lIbwHoVZj@x#eU7yf}T^T3)m9uE)BqLZRA zs}XqBk&08u)#;UCl8&=dC3#=6d9{!z3BrkB`UD^@B8jPKEDFs*=?#IShaPk>sAp$> zK|;oOnn^HxxH%!RyaIVY`3Gd4%e+(Ig}y54~QW ze=+hK!K5IePdon%;~47mKvNHR`A=fl4P@)ggfNtU=SV;c6lcphm`V@FnE99-=ja_-(Wy~hP%Q2;_xl5s$A56b`t|PJogLb*-R^^X_v!Tf@xkuy-TR^ki46IL3ILqjDV#-e zz!G11%A>4Yh42v2?!14Gec+IVUqEttOT_yvANz4U^@{TpDuBjk#6~G@sX*a`7tzW? z?<7lyo)6n4>KnAO7AYIq1IWijeDgrPBsbt&z`B3V@hxlEqCT?Z%Wx!PtnEPiil78nyE*ItLN569#6=&n)PLyu(DYW$i zS&R8YTs^H9pVDmFg7x!z4!cDD@WJoL;pd0l-v{Z-hg}FvRvpB~Zz;rHgI z@emsn$*7~Z#B`|1-~2ctP#nB-m!#PczG2eCIMeR#@U(37p{N6*=JV-*=hGt)G{VN# z;eU7A5B&DY(bj1MQ%!M3ih4Us&y;_5?JrQ~;O42+krfM%H;W=&H#t$1Bm<6woeM+N1xdtc3=L5N5 z2!DR^cHoaTG#<$b!f779ND9$A`S>_5vc?DWY(*Zs^LqExOG^Xp{0cR$iKb2+iZ4a+4MO2CLaCtalB@yk<;zde=TVk^2nPif^C75ROh+Kzvs&86@IP|0 zxb>ZRSTZ~wT41AB88^Vo|zyGM?k zg(zVi{OuPHqVebgw6}i~F9Pi_g~gYog%?5x6`mhM%3#`*dtd(PR67ePm(O}F)=ur; zQ;QaCH}L=3_VxYuVcY?AJMPS$w?tENQ}mg z0QnC@XO;m4ojcLr@tH<85(Ccym(zx1c+7<8C0j`vX$Z&4ws#pI%r#2l0KHt#i1 zm6)%CFp8->oc}vhN^hEvh-B%xo=GJ2wn&L)2K99=4uZjSmSp0=FTrTAHX|XCpACOH zHU)xYE$M#{cAc5Dr=&LHKitV^jX!y^Q_NKIJr-1_CB>Wi`z(95TwI(}bY)??rDJEu zw#|xdqhi}mD&~%DJE_=CDzo89Xt@xgM_6Gf(Abd8Fs+~A{cS<+Kx?uTEe!+9uG9^#;5%pH? zLoK+*Asaz|p|oDap$^HCp@JBFr#A+a#mWnxTr&pJqF?9R4)mu)um@jWHy=}Ak{KA| zJHb%I2jdl?eh9l054FH6`$HW3?_1viPpIci;jeq4^#eR(HJj(ER(i4xR`}?#8~CY? zRC4cjt?i0({2)BupC+U@6L^*U+*f2-vxbT@?ekv06~j3zHiLpR*&WI2S%0Aw(7xOf z;Wq=zpNe&<2WDohc*v0eyIdo4;UDVJ&x!jL-qvqY3lUnl)*Ol!WM6|Ayy8&vI~K}= zY4ViavshV|Nm6HN%`>ECt7UZFO)ZXSfidG^5pg;z)v{B{;~C&i+#|>DV(CJW%6IlVWyyN+AC>CDa?6xu zu(+w#)iI*}TP9!%b}*I|0^J@hT7{md8D@6b(Hve@%6~`}d6c?`XggoZC)B`_Q!r`` zE{j-vnvq#_8r)Dh-#mR7Cqqnjq+xzpK2>5&W0MCSW%AdAAv$ z2YTF?eSS66F^Bxi^1}_i4k_PyPfnboKrWR!<`FtC{=RieeN~Yle!VKD!eRrv;>DJ@|i#B53&(HR)r%2LvgO7Ppr|S=nwa1N8p0WZya>?)y<7;B zuKm5#Wc@3I6<;nwlSzqcee_yh0%&9X`zw$@6rofc80^g9+y|kzxm=(|Z@{sC)??~i zI6hH1!glfC--19@nDaHuK00%##BzUrwO#K;G5(yedj5VN=`%yVzlpcW+i7DMX-7O3 zUJf_WG9s-8ppQpWGG3a-DHrOALkqNvDV{VYv;*OtyPw>X%9mgt!FsOgiSIprBBWI@ zXoBB|u15UsZH^zbGIGG>k(T392c{-bFWpL3AAmu(rh`$!T1H3Y*zxKQM$*k4a^*ziLufJ|jWsLu$F3!rQ)io5Dq-e8ihzayf0fzmqX)@TI-a zd7XGn2OU)xn2AX@>Xh@V&gK~9=R7HV$Qs8)0$J|&NQ z&MTunH@4FQT)Vvt!F)fDH2g9ZKu|+hZ{u1r6Ya|6a5%R=f_kaM{4rIO67;JEq~J1d z;Os?j2(PNL(0|8E;C?E~7M7;O_`!AtDPDLo|>R)`Nv%~EtD?q5& zLsuHBb=IqPZ)^hg*4POO5qZ;tzKz@OU~Dgee{7$Atip%kHFi;`bG?yyr(S1yhXzT| zJuGtUHK^)bt3J79uT}rK*<|Df<-DZ;L>$C({Xf`n`_b^zH)zfbVByN(s9sUf^0Ez-ZCol;<1N)cHo{NHn=8RMCDw2~bC0Kk zZflo`r#rjc45-0B9S^7($6x=yr~f?u2bfTL3}H&jKQ**77M22ZXIv#U9-Y)&9d#GD zxfmB}QwMapCsPJ=x5y_`VzUy@-C?mNG~>UaSi&T93%2L~pr1B+PQn#kSn zU9_rU$xYl@cBkmAKAV5GP(ur~c5uzoAKuZj%5brM9_qhLpt|J%6-)?Xj zZ3r!_*@fd-I30wcSe|f&2qWUMbINUofwt#&^{`zV)6fs0+UsNXx%=qlhw>CmmQT?4 z&`wHEK!~pAyhkQs9=8_%sSMW2>Dk<{tKgfDM0y>LC;SGBJ>UCy*zTQN^Zs5uD$s5C$MfiPc%q>(w4@2^vSErj0bd zz6N9@ZlUAG0!1KWNH{QY=co_-sIy*xSP@XT{jr*e%o|b@Uq%6D(kLG4(?D%}Nws_Q zxCXX$Jj7-#>nHB$V;w^r8J$u%@r5Dk%pr*;ca-?#2*@RTi0ym0LnnYWob z&4%Tvkb$MuniJa$gGtEnsD{WMSS^*xD5qdn;K7*ehx`G_=8gs!B6>g}TR$Jr?pLA+ zIW)0oIC!U_1c6^oZvuY9&3(LY(+PTzOUO??=<}0!U%=Y`hd*2m4n}op92FWUm##mA zeF6K&#P%x?`z?w*f=mT{l87fySinOnk}_nM@hqU*8Gc_J9XasxW2?I>{G=+7` z;i{k@l`^0fE&?a>_{%Y}Qy5;U7B=M|KIVOpc36nXfKM^L`q`v~6HFGj#zg1Z-YR~q z9RU|dm=qmGH=`Kt6B~HmUhuH^<3kj%(`#8W6eJrtMzzpMcmac^u6&LF#=JY^jjxyp6_itXsbGzpJ-mVqP&Vi=CWCA z4A;i<^P=%tk?8y3GsLGC{o7IS&u*H zu{1%w*1=xDqgG!`X1@-c-s4m>5gumASMbeSA$~3J&$>4fo_cfO^sP%Q1QK~GHaIcv z<`r~}V0--(%7KDIM&!1_5A^U}hmk#R)9P;=6hoPwh+9ZAWso;OeT(xVmWJS-SH1@Z zMmi)Cvty1_Q)I3;U4L-sVr!w2XMt;}1yn6+jUSE;m7M)KF=B{?@tE1G!v{?KPuRdB z*>Iw!9O}k!%8Myj9LrVo@T*qgBKl0$-!AD& ze7-Ah6Sh9-*1X(TEwSY=?QW>6}KM0Po(PvdGh@f*4^e`$=}tjiqr;%Q5#URYu) z2X(|1k(r}YY6y2A=KWFt+WH6M53R5q$5q&{oYub8h)m0f4();{;H;gNk2ni{7useM zYvs5jhF^fPlvhEW$vENgzaUUAArSXePDH+B#YQkm548J^BZNbhgr0{?5ay@qshig$ z3V~P5TZc^*51naIdyD5TU{0_>do5(zCXzRbWBq8lfa!u>`_$9H==TNq0Fr(yArx%W zKiWJs%tjK95!AaOhad|h*@?n`GP-oQT>n6a$lx0@5{pnS@_Bu;+pnn5sb7lJEmtA)HiZiN;!ye0PwM)%}7!$5N zw}xto`xudY`34pbGITShX0F+3bkXO*e0od)U+U>^8xAhp4x^ zvtD#Q!Tenv66!o6p*1>o4usQT1?mcD^o(US}5syZ&4V-_AhT)e{%pWHa6t_ z>$D)$@d>~90@*G2Qyb+Xn0Dtner;ViCrqew*#UfD2AO&fmmM&wfkhh6A|Mrd^Ql?Pqw~zVjzYe`yaDbp=7w{JR>@|C0_ah$z zb=?r+?3Kd6rf1(`-&tbzs|4m^H~)bpo8x2)GY$O3mC&M|k68JWYofzturz|yciP9& z>?w)nUKntP4=s=|-z|8-66bx$5QpR7q6$6kcp`g$Ke(whZ;16H6*%LzfWF-jMyDhRyx z{TWO~Ge93?qv!7e3d_vLlrhv|8krY>#!);TY@JTL2`s0Y9)OLk(mZKTVA?ATg>SlR zEeyq0L21Af9~hhw^wdii)MM1?ibS=`e_UYzh);+I#Wfu^3c)+f zQ`4LmV2YK$?ag)kpP#LN+}XhPpn$*3?Xrn5>7HOw?neT>|I2vT-x-82!*-L<m7Q>htfv_+Y8gHR)D014xn{^PySB9@qThKi*ily*5;wttOS;i38ydQ9tdac>fCj zQnpB2(eh=bR&=jNRCAriZFBF%JL(-voxmQEfUmKIh_6_% zOQ{rb>hiS*Yw-O`0usS z1n;6A3}GKCvB>?8)S8w1YodBYQp|?0$&b1SWE7bHOtY(Gl(aFH$tWht;9pT<;D|<& zRdnfgMP}c1LLhV*xsslY#pS;-Ybp&~S%S}bl3YMI>er|?T*nYq7Ce$_8$_dt#z|X`d(_4`OtzClST<#d*x6$gbGu*U zQiE8;;-lpM=2nt_b1Naf&_e|%+tGkrS!Zil2EOqE2?xP{gEP(G@st>21!lnzCrM`Y zw%9T;lk86*-NTRdCNKi^M#fJ-rKeq8ri1d|Gx@)+0jq<5%I0BD2}js$XS}nHF9K|1 z>)Kn8mS}pXP`4A=BGX~gAoXIKP-`IWe~pkZ)xzBW`m#~weQvKTWO?M)J+1&Go)KpN z5Ht`Mi>Y0v4D947!M zF$goTP2pAJ+6;V(WlUYpMO&k|8|(Nc02nVF7V#8G`)OvF$7Go7n6}@Th(s> zY`gJD#EQbWO%vL-f~dvEMeaX$5!C-p6Wv}!m4hl~(y^8n87Zt~n~-}b*0Lr)`|pZq zw{%2Po^YhJ9k2>6#N>W~|J^BfATM+4>b4XBe8aday@WicVn%&0NvBZ|4$%|hg~s%n zr+DW;V=BsE9-N=}DOXP4!yk%*_LISw#k8lf9NOsn zbzp}9@`VgKU^{(3fX=hAqMy1{y!^u}=L5_Fp(x;=r|GKx<`Jo!R93qdL@av=;Gw#R zhQLu~neBV$4Lh@LdDF7&P@zjEC$Gs%%K~Z@MNMq>ehrBXMc&?U@Mx~yQFh2^T^1xg zuyYo0GLeNU_%EeLMvZ5>o(Z#5K_m!ea6{ujAsC`afe8inr&LMpyl2=>iCP>gVkfJm ztebfmuBJp0YBM#-Vkico65F0r#rm9D*P<1>URyyZK=WegT_U=!@+&6R>y5c1Mf~iMP++X9?QI6CJepX1O!ntRZY5@M~ zZ$QV(Jte0bTB6Fp-8?0O8^&y9zv$P1m#qi-=EtAQ0GuE%)xu%M4v17 z0nU!%^#QyGbw4;kc)`6vdSV89e?S+)%#38HB=>~%3yuqe(nKgO-l+G_nQEHxhJUD} z6S=J-SS`)_DY5>W{lTZX@~Aa%-hjV^1(Xgy7#fwK9h`14p&i;vZc}-_elA~u9u*K( zcOc}^JnV#YXaZ@j16ZK{ndK8~VDOFB7bi8^r2f@ohDC>M(|-f{)0c=*Us4{PdyC9i zOSHjzP{NSb2S}XFn_26@J{jhiz@|arWZzhH>#MY8iX)bk(nOhIYaxsb`++!!lHGM& zU&A~uelcN_m=2q$giLI4IDq9}S4Ire2BB+WVJ=QmX|L!!MH8HHE>5LoocHKUds+6l z-8A)kS?&5A&r<_gn+ZL<_dSe~U;8;|@4VDv_4u*-j{Ty3;zo#?=(wd!*8%9ZC->MO zxog58_z;F&$o_qjtV7EOV?dF~1y*=h$Lcatm8ADH)*%pO=(Ld0i3!@0w zLdo>t1a;oKT*z|XHDrKP)iWKX9~Pf+^x{NMv8@m#;Mfq=Z;tYLiK0Gyg&2p7ptk8p z6+vAP3w9*bc98VoHWj@r)Qz`b`u7qZh!#e; z2n7-TX)1*uH^95RQ5)jc1=R(oE-EYosXlZbl_9(6g>rw9&<&=4A0M)&dJL_ruBJ9= zEKDvmD~E8N)sS2m9$h(-80^F5gEnzwhWZaAa)Vg7u!H^!1BlKG{qnzMt5j2en5E*H zPH##8RZRRtVBP*HW6=!_)X+PQw=sC&|6Hs}vG82xX@hN0TcvY~(YvXcPoA0Lc?(6i zCS=Xgv-97GESN#c)`W5kv2k%G)>FG2lZ9k~-(Wta!daAQk(2q^ml6cQ`+_ zWr~Ti*AQ9!Z0|XVo*rJL2dT#_zE<1epkqSN5 zrTh28&HuUIX}DJ)# z!=d#D{UbvX!^RpILYk|gV|ALS>blU%tqs0puf7+OU4Q=A%*AGN& z&8)NZyp3poj}&>zsaeZrfU}SJgqly{kBS_6*rmixz0X*k7k|IO|7QueYG5XnsSpSV zt|Ax+!he-;+gaKF&m!(dShHCyVD*F*xz^jaKuG3w1c*{UBx-}MOH9GWQ#Aj98!!Eh zZmJOhq?%NdEc(C@SY^a&*ecZ~)mrDtSXEVlkRb_oDOD9I6V*)yRSzE)8cmmKm(Y=0 z+8{i=AzfC}a0%&IiGx?Py&KtIeiIYxSvJ2e0Z2URVPvByBfM25LQC-P@|_zcZ}LFPiy;Ui>Je@dcA{{ z5{`a$>lHL0NJto;zb4adZ)^Rj7_eQU?9Stv#kzgoV6XC*QB}j9?-)-VXZyFDJ3T`m z?lUDCYmR4{HmH_PyoUub(8)!bqleE1pFSqSx0ifY<}N}_rhUQClRYG7^uaNxa6Jex zeT9~r=TOE4RybAVMQ6uz$3y!I1vz%=R<(iOGSg++?bb>-5()PzxVbI2Ip2KBb^EE; zJcbz$ow;clwQ#7q2Xr&DF=$L4lQVr&Q#d>aPULR^m!G)af?1s#kZWk?;bTrq-BhCr z=K9U2(vVsh6HTPNOFRhF0|i&A)$vm%w2hV7xdO_%vqDJrlpXhK^!- zQ+!J2dWk~Xwthmbk=cx@swPWTc^M62E&)VR-d7HllDmK1mrm@K2yA4|j6>G3{O4=@ zbcU4X4ooKI*Pip2OPcFo(SA&G$X_^uVB- zSdVf0!-b9F$;sSli~G{J%BP768wp)*)F&JwLAF$KGbvB%tHVIx0bN|Nf1!Eiec;i* z70AJ6AqMA)okyK-0Fd1kGS!~9MWXfFokd{CbrNjR2Sl6ja z*B!#uWIHRFOf*80;%UWh3=!z2DaO@kMM$K{eETy2L>P5vj;YaN<-z6h-&`Jrw)5k` zGgEb9-(WKsf!^u)R#;?yovBbvjQT=##`%=yMCG(xNJ%%9_<6w!s|4(cD>sOmB^ zspEGoA1lUh;>1Cjfl*Pka2DDYdhsNKQ0l?KMtivNZx)f}->UscRqS-LI2z2-j|;c= z33v?!CMrMtauH#1m}|waNZlf$S~)Uuadt$JpSS{q$^PUxIbie5MVM;`w6m~dYe>A( zrbKcOr6`Q++3sYVj5O?K(#`8@p@9{Kt0yf{ke%*>_q>8Z2)9Me&YoT|iAr@9D30hc z3`dK!T|9K;pti=mmWrw6qS|V2dMZQ*r1HH1Rk>=MnTH8IDJe0@3d&U=SumJC)R;du z4LYZbceQKJ@$*tKCvl*IfSJpi=L}+QS|N508&@nTlKdx+3eSleOX`!XUB*(I6R+s9 zXaV{rSgZmQ_}h&HqTNwev+oex@@_P8_61{q?Sk7jX6A-2*Ma#arEts1zHw`y~PV|1TKNxXX7~0U8mA@Vk5{dg#j?B7uW&0 zY!v10+Givvvh)~`QB_R{g%rnnJb-0jaladYtwH#MQZ2wG#fL?4T8{~13$;nVxYD$& zn8^ZzG)F)y+enFc~oR_GyqU|IpGRGs@vC^xDolz1gL>kSL z5gp#LSB%IvK7!QQiQ@!Sf~_Rkj*qAb`^@UxZaj8eU=G5V`g9CGA*xsRrmqxmUJ?;I zu-Qgx9mjoKuh_kaX7?O}fuF3!Po zqV^RMm;pVXhuW&V{2(2%`_cAbNubum}F~=zWk9(h2#hP+)Kra80zrCCY z7M-POfM1JSeJVif_u$em7iGNEG&rXw={>6+0`4^a*D(b2pBwtW=9zU2ZoB1nW58xJ z!8XhDrR%d>4`(gV7lHJ@Lc1lNW4H|ysJg3)GbMu?Y2v3dQ2mLUp~@jo2jD5qBc!A1 zf zY3V)JcZ0}CeH8{SeG7HWbAr6E*GmT4jc}URjzRqO@8#FIEe9qPG2E|9q0XO3+-EF% zn?f=llq>XBe46HMaJ*OIDBdf>?hJP{)g?%B8 zsl%3_q3a@3{j=T>HzzVc6XWH;73hX4U+|oux;1$B!S^iAQG83c&>Gyl=J<>K-wO4B zNYWI82-GXK4h9DO#nqJ#vMKv>Co<`^KtT_F&S7FO_r>;%kzZ9<0sRxl@%7V=Njc;_OrY|u!;T&P|@ut<872;qFT^3qm7Twva` z*QAK{HpI1qR6LejBc0nu zdr#Kvg8jN4>OLk~Oq(UuK*+vtx9H$>>~!4pn?M;R@-PY&3aeW52!j|o@k;`##i>jZtDt#z>RDEWqI#F_xC3b*WRDsFzZo(nPZ z1|-0pFrMi!2G?)3jN`#4V6luspPPHMIb1%LK|0^Ts6AerMm@rrf>5gvL93bDjBwA-#;EU-RpU{Z+!?Da1vE!~%dANXYKENvA11w##o7j;?x8 zy%$-DUz{}7MBmx2lTw6)7Y6Pn;~j|0o6nyyPU8CP4;Z(Y?$g{pbb6pn$^s3Q1HNik zZ$8Zy6kZGR4HlIw>@cZN;yf$3!Qa4x*pr48a_isfDQ8P!AMX2R)B3 zXT$Nef1Sk^?y5w|!8JsA8!aN4-z~Cnqw|mNdnJrlFw8o3r#j=-c7!s`-pgY=-+R|} zKjM_Q+!tQ4v0kNSZE~wSP21@40TmAK8QNE)|K!-o2Qp-XUu?6%{Q=H6VDc^!VnknS zyTfM}QZxv>Weq`pc^Mq)ljOb~ZS5QNO@PTL9E@0Ruu)(z?Fx6$7)!*9u0FnAc>6$pP9F?>S%CbXcRp&N7{0D2m6yPYA? zG9~k84_A)l!~yQxL+MI7#~O@>GN5h2N8!KDH;_$aM(eDujEA3<_Zi00w{m?M1`J=g zaTUuwkY!<-&Fkgm)w+@)ro^F*v2vMx`E$B!iqcr^Putah^ZJ$~Alu)tDQxg;eF&Xg zKEc_W=mR34G(d9!RMqaZKuOjK+GPa-$m$~b*G}C6o`pXr2*K;A?0}z-^b4at;z4C` z@#WP0vbqaD?%Xn?I}b{JP?macxwenFWa=K&a-AQ<7w;wL{JCULFJPhjWY56G`lE}ZR|Uwz}4k9uFiG2pdR(2HML&iAsfr!ECR zbw7Y_v$Ouzbu^On1}be;gY5KO#!k=JBe-wYStqxfvK;o}XoNrXt5-ej7>#}AUD|X? z|3zj@0@klXYzx?U#8ovoG=!+rUivfqfJMwjy=vqm*)pcP_=}O74e2EVf|u_FkWrfJ zS2BaS?t3xNhRT-JvH?)0jl^x{j$-|AJV_!dJDe+!dzz1E1xhUCgm&U55FL3{N4Ph& zgV>fy`RJl%#{1BjSKYc-$a(-C!V#4YC+Je=P>Tx%vz6rl1&?D0p{fJmYLAe(Xj+YZ zuBw5UurdRtUd$OW5@Q~?Ml;CoQ>Rzwh+bhZ=tr`VjRstvQReF`nUC07icR{t29O8I zISuKORYr7fKpooyvc-s9^|{dYDk4BX!n*AT_dEo>^y-8Eby>>#X0YwW6A4y{*yf&p z(@;2FkX@Dyp|6s&4jD$@le8710S2~A`xBPo9WR6Xbp%WBO(RUI78QDLkz;|$)L zQ%k`lxjK)T*m`xeibJ?e(F!a0lKkdK{|sZyLG~i*K*F@Hauq^nVZ-5|`Q=8(iga^% zc)WRiwsihxO1Wy-1z!#$8I0d|phZ8RMNv!`#_$-%90mzA8}Gb*a_4FCY`AhM$CC1s zDs2AAoWRULW>J*<9&x?d0f<~=4IAOke{~I2qAj-wDKrrCj0x9Fu57QVYA3uWnNfJw zwUHrkz+fxPS;qGysC4jD&brP%@B_r{-@LmorB3LlRej--n$w1*0_KEq&b_XiweTbU z_D;3_p8nzI+z4-oE*f6&ViZ=lut+q4xvjCv?XZFYupgj~n$a8B+AwA_IhenKg&#aS z%WM0t>g^4-LUxb)#b%oe2Ay7bbQoZg-O$SXf$SR(0%h^+o|@zCVwP+C6W3Sl9h?fc zK~!+?#*>@;ROf9;=nobOEl_l2GW5Q((Z55Y2?@TLWlDtT=}rsQgB_BP8%GZ0w$WG5 z;85UYy@)OvFqyn8rEkTCochX__-e<;7ei@SbG5(dw2^;<-1fI6SdBZYAlzbHvq{ zKt|QncA45o-jT1Yi_zN$e`V7(D2OyiG0^gD>X=a7)N>cjIN1!Mx5Og5Px4&LJdHIJ zz4s<|BZ>R~<32{g4A_J!q^WL$!uIUw1^z6U5o#M4Mzb6w#D*XVx*ev!4i;u3P05{t zC?-#}E^>@l&4lH~#vjjQa26}~15myY>(N+0@+mNTTecm%qyIFvTphlb)*?%sFv*~Z z!mX(!mWL8m&8m07!+b9K7d~`_rX;Ow)zxCCU&KgHI=?$^`05|l0BsRubNb9o05X5+ zD$xGrGfTcEFU)BEv7JG($1cxt-fLfIC;!*CAWd%k7a9*f{+&it=wY#Ulqhg?j{B(~u&<))xEvZ7qUgS$6zDn1^A1%htEEJ%8= zDuB0=oGJAlaQ>UBfde2=LdmNsA*Tg6*fcbHkwe$8G1c<=8+3~Vv2md+cl@wY#F+2bu*R1jB z2N(sKEpK??bmwO2uQWsO`rfN+pHd@^dVH%NC;NhYuha9KAM2iC4xKnU0F7%wbxBHE z@AvSM)D|h_Z_2&t$HVbnm-KsAP)ynQlxs6+269;m)Zc5m09@rAQhKoR^Z#UpxnD!x zV;F^dxdm5Odf7#)v{bC)v}*Q}<*as^w!fuBw2>YD;0MC)t?h~_$9Q1)!0JPz7KlNj zyC5hLt{}`F8qU2>cm;3x02!tn7xF9dYu7xrtP_ov3(Jm3=m9M=R08$kD#r=|&;v+w zKIds=Irv^5lkIGm#>@O5dz0oPu#npJ=}tcGk2EkX6E_ii@C|n&2Qu7GNl+vl0^q-- zO${=FiWjnt@qthYZ~hJ1Yv`i)$@(@dH#GsKI1 z()tt!eOR_{Z0cxZK*z*OhdGZ(`H}JnkFvzzcO8zB!`!rvMtja!N@5g5N3TBQsX};L z8O%We=-&!)OW&ohAe5lLNypy%ZWBkfa8bv(60*DHOwIi3719wbR5Feszofw*FPTj9 zoiQL63<6OYwJAL)z{LX(DGBm6xmKADv-%*=KO#f8`pfJ7MR@|VHODi(C_z=jaKXWy z4msh6-H;!t@sAxR+7^3cQrm=6<tpi5Jokv5_(a*LRr;M$$4;o zof4OG2auVDnJSZ599lAI6G!0g`A2nIfI;CmNPE*l*PAM%I0YxZ{^4KyoqNdbuQUSs zSTN=ArSxazpZNua zWHzqfqL1cP{aed9g)FaeFyQ(JXlJ6sst; zk^6|NXchJLS?0YtWN__tTcrpu$jvQ48PajxxbR~hS}~73i^`&S`qx=7xC`fiI+R&h zRKD?+@3PIZo^pcychxqr9o&1FLX&IhoL1alxt@q`GT*;!aHRLH$4~wG1V94LJbr#M zf}3SUMPOFK?~Z}e5&Hugy9Fx`k%)qB-s%N~*v&@9n?ptt41uUOHhM0^yqx(A$4GOq zF&(7b9CkfX_l{HGr$Dtq<6J4(Cf~&qY&r8K`@5p2ul}V#Vhzo^SGmW$B)ncGgN1((B8-ZskA^p+$4io z{r1lQlsZjKp1L+aEoC^i#vpBy;w7uUAB6KD!Ba(-=pqwF>71=PGFes~pfAJ9wZgA0 zxJ0&DWACqbwvqPyc5RG#QYEW=%s`nGDlkHOf3Ce(q4)^mfMoKVTcNLWEVAB|W8qQb zI*1tI?3Jv9as%?oo@>qL{nOp65rT~Fq&({QtUkM74V>p?9DJR!YyHm3>(zW_7@e#8 zbdLiK*%llu_+{^Etpf=Y8x`Zjsk3ip!k{^hK_ zC`C{A85owyV2lR$+EAU%m!Bd6B%;QFnhFX|IYMn}Z`M`_|8)s`K5ETg!K;zv&5`K7 zAL2Q&PqdaVy>6e4f9@bwwPeGAW#!jbB0l&CMx(rVzDZE43~!P{7WmY|B0Ip^ChPrGs0YAv&i1Q#MXzUWsi2?VRz8?0Osth!6g1#M&VN z`6@$vb%h(FolLhXe{|{fvSP_{7qe!=3W|}`-xyuG3*E_;$(5f6 zei`8ZAlP6#4AMpA?S}_GyePr`U`JASoJOh@3k)5jh*#9I2&E+^&^huYp zJ!1vo?n?Rxz*bJ$bRgjX3>0S-l@mrE85|dEPMw}ATwoVTbQI zjyH6OJ2-@*M4wY+hSU>JOO`Pf3qDuFP%%+KAxP}5Bse9{%s!)Ck)TE$MznJxzldwd zmHWK0{#CO{JoG( z)I}qpgYMCb9i=h`=9qP{ZYQKDl$ew~v*OL$WlYx2SLbO>b0QL)26V*aptz;X9I%Ja zne!eQ-c&k2{U}bK%2map_v3f9CG&%;fay~&`HeAX9gtqAQDI4mu%{vl%G_>CY)y~b zBm5zjOFX_0*{|C!=8b4JAypmmpmxM;WyLjfl!Ty3Tp9$kicKW?Kvz!5grz&W43$d zD;oQl+&vx{MvxlOGn)L05z>`j-$&ncGONRoF3JLx8{;ugirQ3l7j4E|qqKX8Pcvxo;ABLfAhv)rw-9o+Tk8GNg5AGCkBR0_e1p1Vru>YYVPXQ3H`z%sRAXgE}PTho81r4 z=?CZRdl(**2c(Y}uSkAkC#Hda%%L+sLTaFBr9@B^*{MgWFhC9b!o>)sK@|{}Fx2To zEe%F-ZAe@-Hd~I8Z=Rx0l0{*^J;jbRzw`L#G4DONAn2yXLHW9qeBOL~K>`zE&__m? zb9nd(B#U3yj45gefL0hfV+(67pKx4=nbVR>U4p47%p9kVooZl27M~SAYTbY`VQ{hd z-SHWC9emyjw`C;~V}@8^qsr&(#ZTh)uUUSgeaME(01jGr0dOEHRCDi0w>&0yBbLG9 zvQAJBIN)^~LNM85oB>bcx)|FQhry~Se<;ic=E05-OLUuEY9x9VN4rSdK?RG$1VkPJ z5ivZ2Qjzk=jxpeh|)+wpy*rrz~D8=dun4!!Q461Ic=(%WCP&4O3QZaB@^^NfcCjHw# zW?RafdTg?tOII(0K$Ji?Rdi8Q4y^(%G3B>VGilX=>2s~`RHI6@`Ih#}F%`FHbK7C* zX+YKd9qa*<-O3Q!8b&3Mj%(rqj1y+&4B6Iuiz9HQ6?N2yWUfY%@FAFCA|$i0{IQl? zXBz!N&){HFBF2c=Wkav@(-uzMBlN+*7h?Y!2mG@puAQ%4pFwgY(0gT&yyyn(oi0P4 z$r1o8{cjrstB%o~N5j#-+Hq^h({0b7m6mn^z0e>KxF&cR`Gz7ODOPMo)SG-rShkDD z)1-oZ#{4c$@{=|-v`k?JvMSgXDbi&VMJ}OKuiN9@ONc9hp0(D4`v=xM#1cPTl};hqM@4Plte&+RWHWXoZO`~Vrxa+&z!)pE7Ze4y&5l1jX2IjGHhXYy31;XQxux?6i=$MW`M<+YT<}uLBJpa zP}?M_;72kRsh)F?vFGgi;8^D%UNr}U6LQP3!t~HDym}D(5i2@%W}ed*N~&|&)UxYr z*HwG}lidjn&w3IsUAeKoZ)2pgz=u*$vrzYWioXWrlX2F@Zog5ej=ujz*-Yt_zZW{^ zM>F%UXa>MEK&GBMb20Omqn4UEs@Z%SRgjP*6!=9vh*w{t43d9TsPD2d-%QC01l?)> zU~=!1q7GiuPMFA{l4Wo=Q)7|dC8-F8!J`4mk!+^G&rO& zjwrDW%KZ#h!i-vSKuY8$fclD+ZyU0jlx4_%9YYLD`v*58#P|*VBqI-w;(78?Dl)VOIvZ+?(Ft> z{aE?K#Q4#;kW?o92P-)p{x_g73tZPS1H&&lp=*CMxv74sD%s^3&A0}yiBiEn6~iKE zx>IDqNK1=C^4-XhKssLUNurzhY6}5!bC3OZjJrhGWjX=fzO~c$=g{ZxMp8>#R0xMR zFvH#_m6z|>zAuh1;Gag=&AhOK0fCJcVrxW|Pqa)iOY<_TQcHMKlw!ePN#H5rr%}N1 zm;!~y4R|p9N0ZSNMrW%qH-60XegVEogg z4L=Rt@a`g|iRfwhx-15m&kMI;x56ESqeXl@sj7g{ZJL~_lE$2es#f8`JO@eh` zV60Py?J#VYK{cTGmaVfvYp&2#E5l!~>hR>-zxO3Lw=jL%f4rIYQNnX*)mhc{QI1Vx zIdlO#S^O^(UmpASHM90LabQx1Y6ywl%o1p#026 z#?3P^r_Dzp6Sd|QwxO}z6sti0WpbA%8T<{@%r}n`iea~FQG`Jr{uzDl&JtJmB}oW) zF|o_kg0M7!kP7g_CTwzmiT|6MRV@MSyLDUwe_ZV&+0Iap^y8@OX?@yd$EafzGNAyo z87j?)nsFgkcjYx^Jz-!Rc`|v^fxxHwA%vxwvF(VVjil`-Hr2}cq-`qmyK9@oEV3|A z%#Pr}B11qe^|eeB<#AAtSGC?h9dhsq92pHCuaiZV@!F4~9GQD?K4xbKwrX1})Li3d zWrF$+bo7c{AAA(HGe6kh=L45HV}_C=ExC<^1U4^}rfZXK{$~~)H<(7b8$YT3NM zWysRy9pAC&k9{}(R{%-`wfh|8n#Y8XN-LY=;IdhpJ*D$*CcJA!`me9yzNbbG;Yb$J zFMrq4h-qrAAzEvQ7PZ?kYPSP?$%28_8sfbJYv|Y2^I#mNFf|^rJBP^XEpU9<#a4Er zDDI*fqg}8|=-|`bS&=df#-DIH>s0wJSlsns$PCjp*r?9=Z#vAVUVo00E@SR!Mhnqd zi0)D8see^}A0|z6cL$p0ZXr$c0+=2YtACvgzVMDxcZPG2(L?nydueXh^JSFj!NvA; zTvp+F%ZiCk5qp~>cD0U$ohobPRYT8>(`>&5|8JDruv$rsog@pLfh?{Nk(cxKIGP7~e=WA2uSz0o)fq$}g z*)B|8&DYY%JQi@%Vti|0d}xvdW24~QSj1SNxrYPPS)n`fh1+?w&!Ba_|B!8O4<*dY+h3c%tnUy%R5@$O>qmqf)YUP+mSS;#6 zVNtzLX!NWwn1!D1*`2PtcVN`kY+XXBvpI7$?%D_$tCB#+OfGsi0m!mdPAx`eF|s|v$T+7&FZB>9Q-5PNmJFlY zLYe*DO91VD0W-uyjt0{p9(;)yH8KJ39Y@=d+g_DTsoZM2DQz9TTBIN~bwXkz#zkc0 zEKp{FG7FShpv(egj|nK_U_tSkvMUVFXu-F&!8gH!`?p;t>%~tokA(lMg*rUht7JU* zk_-`(qb8K$BI)0v@f4$JYJWl=>U3w_ZcNz#mO=(NJ#Vz9;;g5=Da?VRxNI3OlckYE8~F*q?KRa;&E+(K=F~&eKHi9Ko7< zDhx_d#9%f>{H0&|3udYgE&}Z5bUdL*=mK4S{WA9lQK?-<(?8AP_?JSab}97v@G3|*EEsT^WE z|KtAwP)h>@6aWAK2m}CWVYZXor5^^>(oJU7(z2#xD-CI3wpcl|M4L2Z001(RanT|I z)zXva(H$RYVYXOQf|@5}KmY(5PXYi802lxO000010001_fp(M8(G&vJ(v#=W9WrTQ zwpiDhQ=jAo005#D000R97ytkO00031005+cAf*5RWHT*gdM;ygb5&FY00Y(1ljqSL blT*?j0Y{T^(oO>PwUffqGzO~B00000S~~)r delta 34307 zcmV)4K+3<)qyzk=12Irb0|XQR000O8N3pe7<^t;Yl4Jk?aRdYa2ml-aWHT*gdM;{n zRa6N81GWuKX0{EHF%y6LdJ{>KH~cq!71i#U7YR$UWMdlSW*9JZ!z?s>n4albua~E+ zD%%C6Dos@hOHA`TdlBy+-*9f9WXv5yVF+XIr0!05&6r=tvh$V^X_=T zPCNVzKk)Zo{c&-YX5QcYVVHXd{x}K3EcXsS;P+p1_T4`5hf$HjMgjMe2?06*Uz0=u zI1=LzFAw9B7VnWxumh#Z-w^-rla2u!0UNWb0R#a7r?amDSOEdUlL!P)0ritu1o;7P zlTrn<0V|UR26qAblYRzc0XMVa25$m?zk8%Xu+JATHDOylAU|{gNReqU@fYv?ClF*% zZXp{dPe#eiy?@{NqKGlWX@~BM>IT+$|4H-^no7U-v(xbqmPg)+!{oF$YwCL{BSIAP z{u2vfsfN=%CbR0~{qrKoo323KR3&e^D0%xhqgEo3%*nch$_cz2v4*zdd0K&gb%}n> zWcxY5KBqj(Olz5}be2JNK+H&GD$;v3;#ncy* zpOXPyoH~}TCV6z)EJq*B%jgjW)u-@AYW0NZycWHWv&^3|V##kWJt38jp@1>U`p45H zx*%VH{9GkHUw~|9f4jK{y=o|(HOg6|E`v2nfq@qk5dAJCo5ss%2y$B1 z@?zFXV&Z}JA@Uol@-nD`{O)@j0^`2neJ_CU2h-tk8Y7l5JEXrmq>duZj_~L`JKXr| zUwOy|)kAUUNTFDa);*y(fltJ*Ncpm?RQ+$ho=AzED3>KS^=7|} zK57+LR>n4Bv3`4^m|LP8)3ln_E0Vf7r+)x|x3INQc;Fg&N-fW-nMkG!8SKm6F- zY?4HW(Ge{TeyDpd#+l8xEOXj!##*7WcQ6BtSX^ZB584l#$(o3)b zt{!M5;<5`^YvCyjHLMe)fTzYjdLQik32zD!6sj>_NH9l72Ps~9Xf&G&NLFS>W@(6d zGP31utGS4n{EA#NQwlij9+lGg6C+Je9%PY!8-m=fXkfbi$xKYQJF|3WmdcrBc?P(X z%PV+tDGs^1=9yOcZi9N-x$J!gc{oRF{wn90>uF%UDGIV}*L%dz61z>WZ{9trKE15& zVlgbsG=c|iiVXo<#n^tkDpizJ9Ozz=li|yDlO-l2 zYFo@f;SWB72D>hs3@^`_W^RaSh7Gu7WBcY7nnlePN;VD?n{ie9YFc!7BGAss$k{L4 z=VVYbm5s5W2I}FOkS)zP>5=BD^Z8;1Yg1S;4xGlkBubvRq-ygI(BEwp=ofo9F6 zZkbGbGmMbrZ*99H^=1|XQG)IYcghU3v0js86Jl9?*W5bkERD|6=q!yEf}N$&SsIFz|j&gK!DkBFj#4FJV)RWp-&=q@0fcNy9Kc27+Xq&45OC@_nA`hc5ZI zVZ{G~nT%w6bI2~9KT-oYMVHltJ@ouQM7Dp zU)9ctb}}4?$Adwb=iEvrtzr8jczJ>^GO$=$}d} zr(uO7vklc^wK*h>X09AW*}&qLQ?oKusJV(ZN=xDT=pp|1NY+DROWLJ>$V4?9`nfh8 zCz~&3>s_;eG|wb#Aq6M8*?$s{CO zP5F8S(OQ+N7n3`d6{)GE4liZU5-z=1%?`j8CY0r?d5>T0`Ag8K?Es>n`VLXC=Dg@m}Th&Whly2sg-z z@ML_9f8NCDQUE1?k~?1tltiHk)Tc1}Hy#Xf>2VL$X@$hX~eWy>&u(SwlUZMC28oP&TO^F#kFhBvwmg@^51! zfhI#2F&@xRY%M78G-oLg6)2Xp8_EI0lA>QPhZ%U+T$-6UxeTbW3 zlO_<+!hxp|5>9~;O`S9b_n^~fZPw6lLJH}1N{MA*xO-I&?cmT3ixEvsC>JoSLJC-p zSY5yIJheD~2kdYr8E2BYo+g=nG78>70m9W1HW`|o7-B(H8ss2O^U(VX{DQfycz4t+ z065FMpIM1&eR$|znp7AF!t`Xm`Z`gi_38Zds^+eLHSl?Kdgi@M&q+%)2S;ZR0}&)# z?G`nhg4@gB@Zt=!5S+8Bqhr=~oSwG{5l|0hE3zn(^T;(g7h@i=r1kv&ebBtLC@%=9W|@^n^AxRTQT8Z!w`7; zWNAEqF+67BG9fWfeBE8T7SW&_q%^7UMhjYiNUS!iFngP<#&(UXHFc&H);0G^jZv+B zyJnXAnX&^KGD5%yRo1HKAUZh- zvoIOh3L#n4>l~ug?w+L!NK-bIB5gEtJeJabJ_6 zW9Qxin$wEvd0>XLXEn6UduUrLxQ{z+x#6cRbau=gZ2u1da5W#Tc1(_D&qhq{l5HzHBQ(WmX}w|(VHldgGx z*X=0@^lD}&QRFGLQZXl~A>Y~Doz4AP+T58@>mnXB(~U06P%I1JBx^-F!+QQBnN3}t1En-0D3sgjgp z_&&dpin(J?{o%PAiByvycYTS#&EKuJ=Y|cHa+FluRj~6L1-w^ z6e!16V?>o2w;)9}bW^j^BExB*&AA<~@d-#Y^Xuat9A{K06DuyCOml5%5{T+LLw_{? z48l0I;m+`k!y39$`m#w-oRNfo`A6!jM5rlL=Xi>B>dT%vdFZ;K<~6|qOY2!lS+WO>`BD1q=>AVZ&s{9fzI-V?h0kij|Y1dNt=fMas0#-AB&>Z7U4k`l6 zER;lX22*mFN@DlZF>xu|tzfKD&R&hRVueHEOV+re0-R2*M7Xalo$L*Xm)Y_Km-)Fh zLQ53EU?@+$#hBnfH%vKhw<Ce#wxJXwgPxTmoy1?e6O%7WpR`;RIYU?^BmOP=lpQjlU1G$-hwOP?RN{wd4u6;k+ zZf(!rk7#?Axg|kolDr}TTMP*)UxQ$0@!P~92}Kc<`onsLLK!?a3zRmEPt4sqvl-}X z5@+Sh@T6!6aZg=lWX=+uPAx=fHT_X>i1U`L;fpxxP`JhN{xekbljrG0)-{N~MREQj z2bqTylX8&7@7>>y#r-QzN{TNGOg{)vjmZi+LC9mIdJn%)Sh}5i zrIdBF^yPkLlh_jCH3PyYHaBW#NCKwX}qm=5diUkvMr=YVx<=7kYp>Xlm{UyI;$&{w4Bw|O0}GC4^sNp zs;1f-mr>c&$*0oP9-fo@{Nndl&-%b zuz+T#AZ!I*dUE2ON5z?Un|A5#jyT-A`jDixV>@goj~ed7JhQxR$C7F%EO07`(bb2N zqEIcL^-NMGwH`@|abPEsdcA8pko4H^H)%xJce(aDhm&egN{~yb|Gtzb+JYyKqM`+V z4<0L#H!GeyrbNZ+OHx4ChAyR+re3$JjY^#($a+Q~g)RJ+ME@FxUKDtF3LMcdkS$Vm z7}WqYZseYyh2EGZY;W)0LojGc1GxlR<0InTKjp+URy3ghMfiPAknvxbPk-Jh z7gq7!&DXXoe&dsC9Y}wCa~m-+*iLk7?WEFFt0uJBY1Mc%(kgis_z`B*N;>QwDJipx zL_KMOAg!M2t)5o4dOD}o)9O}B{1fJzRyUf%pUTM$`|_J8v|E-(QQ1HTVdO=6-iU_M z9s^>9PMl~H8lo+wBt*ok=}AcyBl9#X8p$}0n|S?))`E)UuHk?DDI3^ns|Km5s5Irb zfnH-_>bh)be&tHdcy}I#iO~cSrtTj+%%UWUhLZtG>)v6nQ=pR{9Iy{=IvSN168yslk$uWM9{I6&5>Ssn?qo9$^0mCz1J zSJQlhe2F_;v!Y*KXr)z7VVP+LNhCNgR`d08xkkIduz1Y2ZP@K0(t-%gfPPZ0#ly(g z(yrZzOHBF-k=>$WbH%o_^~~O&AYpI%#W>x^t+nVj;Onb_H^@RR%NBGdoUAwO!$qVnQs=JZg}! zS5c#mG^_UFVHg=iOH|aB#f^u6(V1167u^=ZyUc$zm{j2A82ZIVi}ga4fqo%(<~BMz zyGqzhkOl*@En>8&bV}E1`i-t6siV--NJyu*nsuDQPH<0 zt}w%w8iimKDYg8f;GK|bDH_8bh)~_9;4IcH^Q_LkjrvK=mKN3F<65)W;}*8Esv1zP zTeF0x@f5u&N$S_d;AN#{t2nE42C*gXy@G!W!i`>M7Y(bW-dl+6E6jU@mm2b$z3^A# z+^}o!uEM|%eWSjXy%{a6`)D55QKzaiw%-(E`%N;)-l}2Jdmj1)tiTaPb}nws!~Bq) zcP6t-Yn}zfbzug+TMpti(}1ZAn1va98v`avE`||Pw=eQn|4L`F+ND`DmA8M% zt%%BnD&6RK5vEez=s3etsu~^3wo*lyUc%@|O@%$p_E%+yZ0Kf2yD74iXw8;H8?dU< zx>yr&<(_=J;oze@JSAK7tT!J;nwgJ2vQ+cbE-VmO5xLc)nw8ilMQ`Zal`@Y+cTUpm znZYf~x0EsEVRY1?Rp}Mk9!ACVHj#gt(?0i^Y)-y@!A%4IRN!R3CVYyF#n;AAl`G*B zkM`Zd>gn=eC^BU(5DryUA0KziJfe!(>euP$JxIm7v(xsx8=&nuXqAIjT?b8Gr`$oS zt{=2Y*kRt0&$sFM3dR`7yn-zzJ$JY5u97JxJ-6&)-yBMY?;iRwdXNK^c@UE=B3uH0 zf0K(Mi+|tFzHtx@M`+!6_v)qhGRhY)Wfa30Gc0AuV0on(<0{z@Oa{NOS%6V*;r!p+ zC_t_r;Hb`2ycIocT=(k1tXmaOp}0-~ze_3%sbuzJQjkqARJS6CD)eViS9%0h(YUMJ zm1=29ucglO87Xcp7#9{)^(UN+fPLDuZe3?!-B7pE&9*J1Dh#mamvNMvvPktej@0NyfW; z;eTmXZ$$ZuQ3mVIhGigTzn;5~TxfAWi)5cA9IS>cFE-3&1bLd7OYx$pn=9#%=Q7^$ z3tl!kMJDD~`pe5_?+>26eevu-J6U-3+sk(^WW=^|e+Vm63wQ=5>b=l>B-?b8A$v1}r=OKXd=_}Qp3dn)CqbOhupE2QEt zjgp9lZGM*)e!O6-NuKqz+u%)OI(rx$%R5D$MKMmP#fK@cNv}FbEaW0_#@ibUNPir2 z2XaxuXr|RjBSn!%AO0<`t5iVvq9PoYP9nrQz*u9)BtdjGSc;=Y%95CKNJ}JFc$BX{ z{?LRUJ?Z8{$}me?y!}XljT8K-Jv82{D5)5p#LA+?_`HfLHjhPTU+HZjoo$E;oAoE0 z_sX9vNfmjqXzf(_la;6<;`cH zEFCtI@EoP*#^Dh^sD_eS-uog&%gT6&Xd8M51F|-oa&j92B4<(6gT469L4Sw4_U7^Z zyfs`kUSdP3H(rYljUmHWzk>Mm$!S%^Biu`DVBkecd`)kp?Kc-XQ*`x^BtC2OC6=?*` zW}gTAY=AHSmY6q3b=u+`6#n327%bT)mb-e2#_4&O7r%yRZ2S}+jDLra^hE*#ArFo* z*;#aY2I=0UXl>`|+D5{}QrlV0G7vj_77jk*NS0d~({cVi^-hVR-6Y$(N2)2=VsIU!2 zLphm3#9MB|4{1fP7V>diIMWY!t2y+d17?X2X&`@(X)gnTZtRtkI;)u^_R zpc~aKtdzJ8(D(ntkJOCDSJ=8l3q`mfRcIS>vr0iWEN&Mjdo0{@M(^R-LPVM_q!cQT zk_22-AsOXo=P)YC)O#8Zq9N>QZ(>m5*)!$xY(0xUK}F(I z$CAQdukHODr+!gBX1D9B0j-Tzrgotg(SXcamkt?dt$(qBzzK})kf6p^<5B;=I*tDd zHk-{y@cS@)cGNiBY#%+ML4Vq6DlFrBlBsOS=vwEJn6%xN5C!PzuZQ4|=rjTmAS2hd z@SF7`agRs4!)uWGP{w}b@t+Jq;PtuuLN4ok80Q5@ItW0HU~)w#(ZEaaVR8XI^P14t ztiWw7aDP+$hN2kzD4`3GscIu!G3V{01;js9#%11=?^bc=#dNT>srR}Dug@@5ouAKQ z#7GtC&(Q>Q*&&YCaR~okkY~oaAP5HDcGp~fpm}X~VX(GQ$eghp-<^R>iLk?k4CjT& zRXsF8lox(75cX)C5p7`zRMcy{Mo7RB-OlzdXn%B_UDWG3Kf>=`rz=kX8EquBvE6+t zuPnM=8VzB1-1I&HUA$4v4(rf{G1biT2TPZM+&uKNg&-0+&7yV|3o6-4v`LB+xi5YR zeUl#c_Ss)Gm>6;U;+K&l=UMVno?K?KL_!DlwJ%E&f6~{!)Fkpyv9EuMMDpaVulzQm zd4EgQFKZIgUL(Ms5L;~oh=hFZ^u;eD3N!OxdKBHN`|5`+0kcr`En!M?)xEfHd|Q)I zqSS9>z2gkVtH-jlLNm5=ws1SAMgFWZxj(;wBRk$kQS#DWlnxg+xPi-lLu4&H<}f z&Rzur)^RiXDfCK3Vv_@E%_G8@UKU%|7=QaB3BrkSmdjzX3YkU$B7&O(&0?sHBppqO zae*5=vUEtkQxGnQy&)y%L^6|Bd-?7w=^&*-abV90IZ}5#Xu-j`KO!}v(2kc%)v8D* zQ;%4J9woa99L&pmXPKdTSWAg%@|xHh6!+u5m;=Z6RyuZkQr|M`VSK&Mf3S*ZwtqhR z%QIKq)F3`6zFXv~2K8F8*DLA~`NTBHqt@GXBR2UKCin4|Kx00%?k!1y)aetDZMJLcn z+Wii`SKB5YXmM2?gHdKToQZD0NrYTvv5QC6@yE%b_9uQ< znA60zG1q-gEOX82TDW&%gO2@V8AX_tLqDQeKtskL>my)YTwWhRjrD<5pp1l!7|*6o zqAV}?0k1mynLNc8fo8QJa(@vSAMHq!WML69-0F|ibgH5*qH69^Sa?Zr?Otduf||@= z4zlj%T~VU`rWW=xK(oP;8%^eu$c5b{2qak(O1s6TeIG-3`7TLy0<*E@b0H$a;kDygxcK4U7|NkV}H>_7p`u7q0tL32bw`w9`uC?cTwxhn~$*8K^YLMclO92SbJ9$V>iyCF* zsF)KSnx&zhh$1qGSMDAU(os$YR^FvG}f}n37sv@{mBzq4f=ssM$fM zNsXpy5jTB|i!u)IrGEfq5~71Pm4@B%qCHEdXGt(4OCy4So<%G;lr^?QLAr`(9n)!P zIHw0iIFj>j%ac6-4cONEdHR$zlpHCvlqKHwj5lkiZ`r#Mhot-#FTPFdGZJ$zIfmYg zp>)Bcw{SZ0tOZT>5(TYCr}p-LjkmkKySJgha0t^qKl5(??|=XN-`hM1H#d=SpEtT? zQyXIE;=CO|%_eS%)10jiUTKrQ0Mo%_(){y7?zO ze3a3OBxwZndTSHC`oN7PUpPbvXb_|NPkg~H#ujh5r!)IrBoU33-VE?2S}Yd z@$(KC%{qOpT08^rQKyXsdYg-D)>8o9Px?PX77 znwXjRb9z4v{NQf*qvb_CdyH_|*qiMl51%8RLALh1>wk=QTr1veWsd};uwD9)_ZTD` z@{S;+97aK)bZDKvL4FNfVORFi496ED8>Xq8p~P}2X6Tx{DSp){OIj=~H*|cK?FUPV z#ze1htY}p$uYuB4<+qOcI$oGImaispLP%bMI+}OSkhbg6N3^Du+$~}OHC+)3`CvIp zbzRK!)PLgY(u*67M`gQ($5aBUDA$-vuc|68L9Z#+tHn9Li}n02R?Xro>U8l|4P(ka zY%8Z}7QxC`)uy5rwRY2rZ{(WKUtM)8RYb3r!Rj+eK|jm(CpvfTw1-&0xZ_s zAWC0f&PR);sl6{h>8bwlr@a|x#EOO^R=r&5iY7hTu2+hxCTImrYZfrO8FPKnD*yJCeoW2ZBARv0_QWz<@xPVcXI7jv9k1KzDcQ>PS#d~*lEAiBRZD64rWSL= zK}(38qJ4aHF*e5Tl`=4j4*4w)ah^Y(MC8d+NEc@0`CGE#7ZETeNtKVO%%Q`;w^&6K~BWEL1? z(y3^o8%fFLAp~BE(KAQMC*a)lPBY6Rk0X@VRM4Sa>CG7$>P6zNb2h{F>SFT22g56S}HDWZb#iH-jVrxK_` zWx0z|WN%gChSsCvUOUZJXn!TjB|N#Rn8+%jmemgk(*7Zsp3=oU5IE)K5b>)i5t5C& z77u37g?t}PGYhV*)J(-}THQ`ePqtQ^9}StMNo8`e>*}^HS=*Rd?uC%KD{y9PF@epdHr9 z{#er~vpz0_*oDX}PloX;vGK!O$)sYO6*>G>@)_|SUFledZ|lrovh z@6)h=j7)thzi(O6nW*Wk%`)J2(9v@U>5`p$**0LgE97)T_sr8Sg(HF}+0y0!Eyr{mO*UcA9KKlvI0-+7r$if(AUsT;O~cCm4l3!B|U zR)x}1{86ePCX&}`rAG<%rU{fig&AifBN~QA9i=o$T6p<*G)l7~l;qmxku#!PStH8I zSCbYx!oLJ}lYed`Xn_a>ivt#DHr%Ug*bkUmx{T=nvvR8eE9UFKF|;N67WY0FNz`@c zl6O(43upCmRxfGwf|=><6Z6IrmM_Rm^Dg0iH0GJ5g=wOjp{8>URTpD}x=9XD#i&^J zsBhx{Rrmfw=BuAXLo!qz@r2K#i9rJ6&2hp&w7rb8Pk*7|y@!PD`&4>wb|&*YwN2P@ zp!o`JXF4zEl;^B^xseh86YA_8@$av23lV4(O)R7(awF6uM=4dlTVBAQf3SP%k~YMwnLzGBb( zB#6UoKKY8evIOx$r{VloDb9Jg<-UX7rsqrO%QQ1;8_OuniO9Wz#(cB2<69Q9fw>Va zs(&%dVX^E{mqBHg&Q-}H3TV;R+|XmFaJ)iiPzRq{qo<*|c8Y1a)0K%OsnhGMw5!L8OHM7}HZlWp z92&e!>7y)KJo=4O^5*ym%H!me?v7ePhutG3A*du3$?yiTqFud-P);D1&C^V!XB3qW zzab1nOS04(J&-ZetN=Maj#1p?4QnWEyhGoxfAa!3cJF={wL;pghG<_Y$;f9(x_^cm zm<{X=^&z5k7d{(6L(_4=Ct>Xqb@I$}S-g)DF`uDf9d&*;G}n5iHor4r1<3xr$lJ5n`uPsOgjxrRnt&| z49Ru^Eq?M!t4{63tq5K(C-*BFTYozGE2>||;!>`J4fSepUh*yxQW8@5U23^C3SBSc(hh?z<7uQo$WjQgUq#5hZgPQJ6m zd`(MCmg22BXrCW5gA8%-nJ;6KQOd%icuC6`XzWF;V6G`UtZ)XLbwd~`Mt{w+*?n`X zjl(lIP5E1C%A>SWO@=7V^M`*7)C9k#0ovZOTGlM(#a@doi*UwyMa((wj4ZTrQ2wLZQ;E@?b4(5+pyKQR(yajh%H{ZR~{7dbHSOmU5fpY&p)Bb5m?N zH_q3FLlHUKm9t%4E!)*wKM*LQg^g7t^RoD%jAwTEp-W_b5~E_-oqxWK!HJy1YDT96 zg!^~{W_rRzI4OypjHeb!@+5A9^9#+w@H4MmeMo}z4E1R-N+Vd5 zYF#AqWtG1RgticmqxGy0)!r#OgeEnA#Vg7Y5Gv`{Wc(_}8&CWkmCCt}IrifejX=&G z=j?HkJi0iD3yGNf*MIVA`jucvlCR`eqIyczHM7{AKx}ur8ZyIzrC6)6XW3ThH(qA> zw^%`;pHX#vmmGqJRv?n>Q?A5{gL(E!x>KydRvFk#m7;XxA{%M$z8;D5@orToc02d^ zU|~f~Nxn90O0abRmH3%M$Y;x50k0-$9~Xn5oN_1)1d-up@G>$OD$C0&j%^vV%eF$`Rzfy|A+ph zG1WXiIfT*8*0GhA+aVomQ>|1*JXp&uwuO)(w0}y82-#_>7>sTeKw?4U;PuktgLPii zGO;dmy$+X^=@kcO?jt=x)h#Tij5}rg#wgg<}nB3W6y{cFR0(`iZK3Y{C2myx)w%Wxc+wfmm=H#K$=2iXD;F% zc7KoTayk`AB0S63P_ymH`6YviDxp_s)W+F@2-0M35-gg;htkqA=IB72V9|_RiJ0+> z1z)N{A~If&)IDXGL;`)KmMhIB_3~EFAr&X1MlGA2HHZ~izb3uBk_wWQ=9Ai4>xD9k z&>Vbj1(rPoi!ib{Xo0U!PVx}f8*Ig1gMS2d66%`eG%TJxNhk2@oO?phdXvk#v)_PG zy)GzT5V|d|w=3Nph(>XW^mg&k8ch>PS8Ux*m$%Lo)Tv*Hg=HR^ElRx6Wd0V&S>6)+ zAIZu(gBMeO-(yZJ7N(Bnt4W^V@=MT1^D=rwLG>wo1)PB_hgw9!CK4s5j7X9dCw~-M z0CVY7w!tMR<+&MUN@4Y>C0p!L#9~fDYY^sxEE?4lUFGh+%wZYLtgPhu(*6D7FC(>+hK=yRGBer%+a5hCs1QT7>>Qu5$ZI(7_Mk(|ZST;pR9 z*m5-`4I!}uB26Dau8(SxeI=NtV}Hawos3eikb&@pVH47z)c+G^Su=`O|)7w*!+~OL%l3sW_ zpec0NwVFQ zy@`^KEWu0fNtT|I@HgWOCItz7+WBV~$55XKntH&?e-guPAgklYIvYRi20r{h%B(+} z`2O7;`tx4*IJkG8hJW^c92|Ga&*SX}z3mhB^T&I~+vH~u4o-GXSlZqDyLZXYy8-^6 z@}?l^rER^JsHyWw7M_DV(FPV-jQU$!#DI8A0=GM`Vz$cNq)_&65 zWY=k33MEW!y>xPXeAf>t)gYbB;%RAvXq?Dh8!G8n)9{mab1_Sal+zsv@ z2Q)MY{E&v8Y~%l#y|knE(l2R>2=1q09-St#o6gVAJEtUybW%W~xAIXq*dhuG?Z*!8 zJLL|1+7VMt>7SP!(S=F}D!rz3wlV}yWj4~SwjSI$+3g+gvR-*`ze{J-{o}#TT{`6+ z47Pt{^X%j#Jb&IfCO^A7{(}?NuXpe6?9hJgb|2ikPp9XP4|aF&-WNScWXLa60N~tC z;VhB^miWq39%bb!gol83=lyH!1BWd90+Q2PBHnNL*pK6>SDdF%0W>}%HcD|z1qvs; zh*lnYCs{i5eAq5g-=LMXNZH69Kt3kon+NJ8xdGn-)_--5Z&||@^^qlCh9enkjczu_ zuxAI}fqxR(#_axJx7Vekb9{2Yw@s&SZ~`O6X7au8{(!E9lU@8jx-5PS{gD2=-yH;l z9{IVm`{2j>ludMd_wMb6i}8lHkAJZ>G5B$(yZs}ZANPX0tTC{_?)BJe47>M_#cDjJ zEeIZjCx0x|zZX2X$GF}-;Ci%#p8w$fZgS?|BlxEWwte-z}*d_9Z5B@j~KR@jLF-TuN?AnOLjrin*b?EN)31dXN z_m58~4M8y2J^4`(dBT^`;N*EJ~O`iRRH``QeuV zR)4`zie*ASA1Nx~jl&-6!=olc#~jk)Tdd?G)rJSsHrmORdv3@!8vKS$Zx8Ym{X-tg zt2FPY2{7dXCkbrfFgIgD{osu3iO^F~lIBq{ReLcB&uQy6e%R2!EO>qFQyK-zH8?Ro zAIJqm`16yu1Anxk@kmY(PV?|ZQi$Hk$H#e*H9nwcEArT#*Sn`)S{iWYS0J(`0e`*T z1?^=&{0Z6~2l$LK6abV!{_Wk}X0ubIY}oYT7+ISSy~YM`1IGe&b z*%^)Vvj#1qsqz!)1BRsAlRSoN5DJG8N(E(?WDRI1U*!crQ1I|;(m(#$eUBl1AkV_LNUw(={kFxYbI4G!?4?*o>Is);Y)zUtO z|B;i$t?$euR}6(lkm^LMmH+}D8)e8-R(>w3^v2ZFd>0 zH^Ust_itP1XdB$1;dkBOU{^_qUqX|xA11jFI-dE*yNKOiQ zL1Hv^1jv6NIGYje#c;_=!qSHDMStmHevq_)ON_Aa z#v{h|aMwN#(QG^rbEh3;nu)TM?&2r(-)xy~>AxeP_0X|qm zMJU|}ECtfav=UhzTYo5Hl+tJ1DS!|zD7`J#v?g~R%cME=@rAM{5mwrkcUMdF9!q$~ zkpO?n$3q|kw+JXhoN5nX!+tg%CjSvmu?}lt9hs!1E;HOri0*37#S>_)C4tW- z1wGq51R0AbJJQlkW+=2zU}8&kRyK~Qvu}w!cc}SypnZ2l-hZjUW zLWR(w<%ZG{yU39-Ayt^FrJC2&C+-Z|n3f`o73_d}7JlhZ(=li>VI1$HPTr#8Qj1AQ zCD}P9>1}>&peiwU2VoRb$vFR4rj*_^pA*T_b3Kzt>TQt{%?#>0T^tUB=`6{_(_d%& ztrD!wNJu1U!+*1mO_d;7OWK58dnWBEDbV;2_cU7LPoC@)GnIUq1r=*a@uvP#%bqP4 z3OW(X#X4ZK`oR|ZT)cB|XVDfk8r!xxv2EM7lZoy8V%xTD8xz~MF|qN@z4yI(s8iKv zpMCz_Rl8TO)g2d0y&NYach@boo7Frqu-I$C4Lk@iReWzONhNdPeV1;UV%>-x??mXb zbzX$}DfIhAIHAzGuS_zDlfqsRqgKGE^CyU$0fQVc072*IG$8-Ferr8|uN~jV8}Bv{ zs%hSOX>R|s2lIgp{n~?gs2!#> z!h&WvMoyhzyF#kn=(VH9QfD4<b{zf4D%DAu@9!EBV+t z1dsA>VyW^q=;pK1R{xUvdJvZoM0<}`l(w&#?XO*W_R)KHVeX#N@hU|m42Cj8r|VL< zxJpOpe7r!`RjQoHAis?LU_+LK3PxYQh(l#YcpIWCi!IErIf9zI-(b#ue@DGk=4gx9 z^sDaK9M8oAI9qYl^5a^}*@T9avs&b!guP_}K-uuXyGxMBvpKN#S2 z{x=fgBuzvs1>X@j$gs{V1d-nSN93tLI8=b^W<%)wzOh-k=HCIZ3kpYD-bbel z83Noo$iE6nMNNCN2gbfYmR|s43ZlJqiM+eUb`<1)ieq4u@i2@&T=2k;WxjtM1go^d z9GL1!CUrq99Mwj!c2tqd-OvZJo^utCqYGuqGR3c1N~32f_@+k=G+Lte!c2Uw7s%ml z3>V1NB5sIcBlg}a-jxj*<BE;%!T$%~da`oszb;Jw=xNkQ{nR7A46LVCA41dC9IJkwdd0dgsjX-=z;n+ zgX~184&apYv$8hzip|Ma=ZU%|!?twatcG!L(f*MeHI@yRj7gQZnN|Jh{KW|mW@#yZ z3082#1^J}Mf?sXKscwa}7kyp2S~q4yk@6K)Q8|MNZz%!&-hc;K86t+O)Hc&Gu(8Z= zHuQ~PdaIl6`MI~P;zG3d59;L<6igv}Gh!E_#oB!SYs*HyIhX#+rrQ=WKq0)Jrqm&Z z#Y%a_r_KUboa5Yg&?_*xBwh;YwJgNniX50B;OUM{x#(#TT*uz(vAJ^|ja#)3{en3$ z6}mxfJRe6MEaemM-dc^EQ39^K=I37ylnUf4)Akp}{s`F5-o@`KL?mJOMz4O5i2xkN zvbWlTlePICJcfl94E=68wF7|TnlrU+y7So{ruk^c!BjKaSz&6ruvDC zE9aK;HnxVZi#9&%mJ0&T%;VQ_yfs3{NxXINByG6v;=F}&1l|5D-cfX82w)PHE6I}C z*Y%$fc_T$EQ_nVEi!OT$C&4_WFm^~t&j~Mi=!$bH_Wyz<;;nsLyxx7BJzTuUDWTa~ z+{Y;+H$3xEBe&XL<`zCaaNg6yzY zMg}7rilzjvP5dXb;`8p|#bZYS8535DKV2r3fC4g{^sqZvu6L$Lb-b^&NPR3eBSRtC zF)$;?`BR6Hu(jcv)kK}#KqH5KILIkYkaXZa{<8C1CMZ-gfF54V*xyNrHAAm7^hTir zxFra9njtngUGWj4e9c<;yUWCX#}`;q6)&YKJ z{cZ@V*)F>-e1kfeh=UjDLy7CBH4j%HB}v+ALo6sgR1~oifMYnf&P(|*{)NIEK|rQhbG8Mo zUfuDwfN>*A?0VDNn@}!^(=S%MpWumN43!{p)(N~MyYU~X!hq0vQge(ci-pErIz#CS zvzduEg{aZ)iLcF~1JLW3&<$F)k59QT=Bo*5=Q0?j#gK^1N>Oa@+Gj!Lq@2MLc4(eV#WcdiS$_0?!P&}9@ej8uH|PIe$1AtT&*z7n{gA%py|M@$9y*Vfxj4n_>+@QXa0Bu|l2a{m6k0^51~694 zQ-#bCUzsUo;pp*fC|zEb)qU*PGg`a47@#^MetIy9XO&CbDxf8%2q@!U0J!^e?(31`8JD4|o`_vGR5B%YJ?mLg8c&Dp zB-v70L?e1qskBV!>Hxma-{*$_Kri6#@D_P6080<>N)r?#%6JJXTD~ zLP^R)zO!avbEEcG-TJ+$@rrL&N<`dqYC4s zM3okGeQ#5Z`#fXvm>3s5TaWE>u!DNvaytgpDX}y$-LGOiu3ZfTqI zGI$SY<;O;UN^(X5826xZj3$P;6|iEeV5-J2P3o^)VahtH!s_6Z>OsLu(r0u%El+Mi zd*nG&$jxV#YB$Y(uMLn_lBl&;=eh3($B$VR%_X+jeR~+Bg`VrP9XFTPCEQ2_z2!13 zJY>8X_~2^(tY||}QPOlmfVV=UW9@)?98>nC;vDo-QtoX@D#-HRbapJ2319} zzPyUZRY6}REbNnJe-blW2u76a5-Yqw0?!RaI=E+)d^y--cPg5&MyLNkrc9HF)^fo@ zLG|xMFA+s`4piqO-ZHM_6cH^wrR3$sf08Or?}ZgNKObs<_YNQ{oJ(B?SsvX`P6nhx zd>({;2}(-Fq#Pu{TkovG7L>2Wwy><#^>OK$1YyZ78?=Qcuz(~qbab4$LQo!?DiHE! zOD8Cgl?yQGvqoHrS2)oj)#b)XE1TzN5XH*Hk5h`xmlYpJq)@IJTw?iF1cnjmur?;m zf?9JCbsb2+RSk$q$oOc_TA-m@p{B_5{UB1L%$vzBY9;cW2IA->=oGV)8YP46i(XAuCjtB;*d)m!`~?K&tM!{ZtZwZR zoyMBlU}>GJaG8af@wgkKc3_GGCkfKPf;4+sCC51zC;Z|nT@&s=14GyUf6TzMjamG zX`gHqnr*@QBg`>HaYLTXQM>pfK%TWb2#x}#c}d(EF(6Gkxc{NO!)>TFh`r!u4`I;R zDJBtq4A!ubz{IVx1I3_5FuQ4S>OWnd{ZRsJTTz(YP)!lldJd&On5D&ECQ1&fP=R>G zd1DQN9Ku#M#%^-cl`6zKNO|pB2?EnXE1lGm$N;}RfBG+TlIt3Hn4ZI02u*-qIUq=^ zJcPf!OZ{=+fMI|xN`or2$UTrn-CQlBtnpc?P*MSHMLO;MU-TR58X~CgK-Ku8*R@49 zO+WEY>0IcqVPT6SNMO5oNn1*#4L6r%sFy4rus@Y>E%+rosjvDrRdnt=8TR&ERi1Vwp}3I0grnCeBlJ@x zfgr;Lfmy*KCrFekc0jPqMo%aeYOc32b16&Va8~nFa^>Bvb^D{HKR`W3bn~~v z=>FWa{hA z2l>|cdCD^BF7a}6_T9*f;A9o|u;~18Y~hy)eb=h;_4tXqyVDylV%;dAyXW|rz27V_ z(cj5;<^xwY?fH^>{OUVWCPb^Ct||b3Pmh0xt$JwVIB&s^;khl+3-}?@2lTJ()z5P92ZqG@f1v%hKd`&YP3+9}{M#`nw|hN-Ni)7_zYs(% zq$!X>%rPmHXCB07;#*M@-(N$ts5A5g5Y4$n1){NP*FBK6?~**haL*GNSZqZD!85M> zeso|MOF-TA9E?kABd5Ng>@stgYdCNimP2@eb~tc#8w_7Ph_N6j3>26U->|>K3Oy3& zgvV`4*fT6QUS-1fZzGuS@cYP(ph`k^f3OnXZ&P^!K%<510r8Sb@y;ouOoHtmW&OEP z=DufZUOd!#Org=isX;gWR2zL-wZ2#cd+a+8JRq#__#Xq%zSl|*;jl_Za}|OuRQ)o% z-2UG++&}VYWN%C;NbbSWNR)6(sI2fUi6PkCEAnmu;m*iMC?dVF+d=;1IQgOIbQMQl zv}%%hc{_wm0Dh2)mFulA@8Tyr1M#w?i(|dSAD#}5ym%?RaiIB_u|IL0uOlVavGTwyB$zUM<-|Sa5 zd4lNw$9}2yq#K5clo3lR3NUJQxK74NG8u_Eh~HEs?K(MUE|kITYFt|oBF+R3%fsuC zO1L7MU*UBcc$0g3p*}|d**EQA=C?EjfAz`wjA^>3>O8EaKcx?$b)%&hMD1Qko8?2b zvhcQ1!NJ}osnEI&S6p8^l5++M)bO>J{{yb{(+D-%VbWphHBuMwLRCAmOQpY`w0%$u z*DvHu;cuG2T9^fjTGShfVSk;jmvW|;w(k=6vue6*%Sa&J49FVX~Z=lm2d&-C0}NUHiGq;*sV z6>)R^1AQ4tb=RFP5=-Gv|B|9TPGt-1Np`<%Sx))FrbO zVoZT%{*}0u!g)S(9<6g`%(q9BM2WIY+*bH_xnruE1pZm`l8 zQQtklO!{07l_j&})Qchkje;uG(!Bo_z!(utZ;&~Yc*TXe02YmF&4MESuQNNGJH-v1 zt`Q`f2=)4aI(;FQl?5@2VI?rvOh`m$757q*oN6ZnX#SJOyH0KXi`})LAFRa&IrG3Xsh7hlC8*5T{x>v5&_Wtr3t7S8yhf&3 z>DvM=TcXS6Nh$KT*q17Qa-Pj>vFL_E%y2QgddMKdo0SxH=y`k_2fnAb8eV&YMP8oZ z<%?VgK-Llgr&T=I&t%m0fQ=n>bc`^~m|Np*fF;^;%|M%`XVmSDz`v=t-_0yfANA6p zM#13X$#*-0!*GJ~F%VzzIW|p?f}1BEdC`;qcIl1v(uf6zd}aDTQV)``yA?yz5$?S8Q4~8WYnEHS~%l4u_Uy zq700~puLk_9FXTb94vtl>d0n@^)CQ&a#pG><&8a|zzGMWp>Oz{scAN%P?pcgC>jD_ zfNjQqy@!pEyT6CMijwO%;u8REIRYmOA=gCTF18G6xLx-Nl&3({! zdOpt*#VxK%VJls+fiASWK=!WG$u|vXguFC6^;Kso)thJ!xB*>OG#0=F}0K1)61ZI&z?k27QBtw**e z(VGNSb^;z+d}4ddryV(#T&P-W(3n8Tn~}tHygJ==Fd1q`4k${PPlp$R;D^HhpE=?#P{EdQM`b0p`z2Qb`OU4|5qfvfqYy(nCC{LHI7+S@` zh9MZaqVgzPD0m0z6mHOMi3sGcn&V2psWNlBc2{j{8^pC%AXf`b6T{pt+7}5Be!g5W z;Sl;{rI(Z(Z8CUVZ$x!bBM&ub217Jm>}~~)V;@ALX-Mddt6l+Dr^77(4N}3;jseeD zY`-6&;Q)zd6{+DsUc~;$s(grgn>Ab6c!=7y$L;UJKk;(Dho`fTUgG7z5$WTQcsQ2@ zZ)86>>@#u@r=E(H#bB$7WNqen_TJOnJ^63!{i=7ez^i2GnirmOxTm&x!OhqX{(2Yb zN0zr~-ElaICJu;4&C4=Cjc2ONJOMlGO{ozMsQ*U%P>}JeV~15!xx`*DO1HHa zMzP|uW+yp<6Yyt7v=>3d<5Dqa5;~chK462;)KpEwHkkhNE6Pa{E^N4+NfOQxVkGW0ZoS9W zuKHr}3_vOFAS3s|J6$+io;NK18@r(7hi8x+qGX9Ty%e92aCGT*AZZ*a(OB?A20@Fz za{M{QFp*s{$+4i+>lcXR=l=$RqI~50mayKZy(%2*bd{OSoV4WBB;skdvQrX zHA`WHw;y#}A9i`KLsYqLiS?X?>k#Lb(ukZdBXxiL7B_F~cG+Nxun#PeD9-H8rzaIQ zcaf9fbNs4-5qseIa0kuCsFfsRk&j=xHr4%W;4}7jLZBXL_0TR5ki# zq*#%Zq*Y>;Z`~9+#G>1nB{|vrO0@ed9X+Gq5Z+}`_p?$gSHBp}ZQmj9XvL|If-B;8 zQw6lCSQF1;D0^znw#Vpt;gF9??g~9_!rBU7?d04#-rjHoaJ-G+8mAb16*|!s`TLrC zifEno9CsM+E)+6%b2@G!;z0yNa(d}<-3)eh+{oZ}%Z=Q)+_Rf?FOzSVp6QiWZh1^` zRFiazWZYBM`O5CI$=#Mt{-t?_7MB7FPF=A^BVtCC&H2Ht0uIP~n0`@@0kt{t)r&*5~F|k9csMLfcUPQ6`lKxE6 zP(1$72s+pv6jGWlAJqLEXXcu=6zWIaiYF5Z$1xYqdZg8@IClA}^43MAQQ?56!fXMG zyanQooIK!logON%4dgmxee-FtNe7q><$~g}cR=qxjWUTXS!3w0VG~%9V^E38Oy=EbN<^#fN!Tf|& zhshDwOZS=8Q(JJa?Fu-^-t7!M)>$p(L>>&K$f&MHL%|`wmauh?HE|7nsRkExK$Ya?VhZ(ji%(BC*yqct*99!BEzw>5JZa|e{H z;M#ck5-ftU{wyWQ5XB0_-)9&JA-;h<*3OYNsfl{B6mG!z4{7Y@3$_dxSIptzevuUV z>1oyMo~6xgnoJdl)`s)NStv50d_?Da##0#Yucc_#x+lz%rG^WgIsh`k-Y+SKp~U(5 ze&C~4aem8(!*!~n$SO~%hZdc^kC)wX7TNEnEs}9DKtxCM_i$F|cHimMz#6WVYb?|P zxrl;s-Tlk2nJhD!Sbgh7O3908i6G|CB$Ul8rB)?Ad}*L0`d|og&K~S)Wn{(IM(jz- z9W(Fq;jAsV@y%Db2LL>I$;t6qu<=fzBiEyrn?2e#8sxzBju<1gek+%5U?W!^<-8}W z;N`|;@RFe}@-a<{^oEZrH??bnuSG6lRJ1j{jJKH_R5XdUoO)VxeiY*82`my=3B9mL z(P|$Y@lzr{K1T}{D$H^1>|b~3J@(Q(6f;lhdMn4jTudN!M}YaVLC2f`COaf1rUooz z*=*);>VSQQp#9VD16O+RRWGg6W=pG`Xh+7^GOKC2U18I-l(py99Rd~4B^Ld^9t>;~ z8hP+#C$K09jIt_@*#_2=mZ5eaB5gFY-*xJ)~ns*Qs zQ<$FpiyHO;Xn-H$K}=j601--Y4X(3A;X_2$ZLA$2|Lbjt>b7hXLM@A;{t)ML?lUmwgA^7l@A)Ld zm{{O5aZu#yRVFY#D`{n0jzbZWR83kK46WZd;xbcR9ss;*nTTsVOVgfPy=suVUoFGD zT+X-+XQla16#C>MbUIGz#7=i$x~|i@e3S*nty>>&U%~?R{luA_PvsoRufu<6L5x)T z3<*-=R&m&=g&mMh2v-`7j;+z&E$S4c1%h<=BTRX4-cE3Fsyqi{A;N||&}>X4SDfr@ z?&9Yjjsf2yC<4Fx%a5uKOFCaIx0mKAjciG)&LFqHV=(=odgxuq%D^xoRsJ08B5k#5 zQYAYohJ4ZzV9etDRHFSHr^%GCJo;jH+hH;%m!>=FH{-~bnQ)FZr2)^$FQDb+l?g9)tX2x+SX(F{i5(^Y6#0jiyHDzuB z1u=IJfFE8`J&t;be13Zz7}Z&2qjK$aLyw1(UmUKOm8iS_I{PPIA#mSlN|DLyIU9^v zcIWN51S&O*RiyOYJQNn&GSnnViL{^jc{v}(_*;l#5P6jI>^#7K?<=Yn2>oz=wr=kc z(gOUZP@=^m8zeyn6?1TJ!$1Q9AU^l0++RcQCllN+LO)&hj*EZ+oEvgg1z&E>GD;#J z*SFtx!p;7V*>|}y9`Qvt2=Gs3tqQD5dGa8slN%3XG#Tm zEo6ZMmvD+P@(~%*)5$652Dx(z!N8RWqV&FRqI7jxD+iSQgZ$aEL}uJ=mf6<~?5y&> zwa6qt`S%yM$?i#!RZrYyz8X7kR8oMXCBK^jmwyDi8qI)iX^i8*HsvSNdq_~{Kmi~x zHsVU8Qdwdfk|@fKq;JuE-loaH=JfzHpTpk+Rx2PG7k}u~HVyyu^B%D1V*HBgK;Z2& zjJ*(>CnK&zeRHN@90JoOimAsEr>5y4&9&2;;1`F5FJtZX9zt$TvP9{LJ6e>(o1J|~ z9Vm^QZZ2;`oU24WS#OnuHTRFf#vFnFRG3yO7=i9M7qhBjH z8zj7K4pT?_29sJ6&Xbk$D<`+4hKIJvZ^k__*x}Q7l)wII1+^JAd09~+?_4iDlG9;4O@BHQ`X%jv?(E~Vy{P`&S zi6QK7PE~W8Q{HY@Z;=NaK%Og4VjEbOL+_Xb$=_$Ig#*f!!D)yvWH!X$1)V_k;*Rci$cgtAQ6P^baH)1I z8m^|K_t|r(jmCQt30NP|4$Up#nN*zw{fl1w#<2s)lDEwIVoIuq%>mYjG`(Vyiz~;2 zJ3n8uKR4(T228BLa{5tG4w4v0o~-Hl2laha0}Q_~td~^-!3Ta?V}jFh{yjH=(hOuF zeTTsGf6_1ZE|&jfc$ zppV$6;HI!sQ%-}i0O^B;j6eAf<$MV@!t5@ zUq@2~LUUyhvEHCGR9f9bnUX@g-OIX;8AUEA>#3ea7pdguUmJdTxr^{ZG5GWF856{= z_Wl}F23&|HfR3cH>6~c$4=mPW>lT+)v8Y&XAX}_hpOOB#Y8d^X=_=?`)~qeIx1H+L z_{8Y+gI*Tgf#fhXeqWAcLzR>!wo7N4+oSg~7MN}ZIcDlH`kmXLTn>23((!`s;;Cz2HjpQ%&fcC zrdp}`P-mjQa-_~5ZJ*{11208^^V639Ky^zPZFayc%jx}0`NAFAU^y(SK&P4qYFpgUb$BQqoZJUN*nrc>^!wsV?Rdw%K zA?jLcKZy<1LdS)m_(Z!n#+xs-L^-Bvx=(I*mf^t>5gJp}$wE@*z3j?8Z;GlCi{t1Bzk#4~Ffx@gqOU2dO z8EFgv8x8sl=AE9Mr%j<0zJuOEiVW~Ude0a^43&ao~mL+;j(kr4}_5b>;) z8*kT8!s{DCX%U)>(hpId8>F1v?4XJr=*{?@mI{2TypS0*etbvTMtMIXyVWuVKvcbV z&?oag*VHYll$Xj1QvNu zzP`?o-7Uppi#6>PSxu?UaJsq!pfazZJwoQH9;uD8^$DyaY1eBGsJ#vgVhm!(_l0Lg zmqBs6na6KY&B%zi-4;IDN)GSBi(kQVG^=-Yo|dSBnm8zKxp=kVmgbWlS%!iop?j=A zoGZLEq^u#oOm|%jwYyU+UGFd(++J#99CokLM=e5C7gMdi8$5H7b6hq7Jm1Znz_FZD zG#@*zS9KmUVS<_SQqkqbsElx0!)Y4#STg$jj!D-hE#0&kPUa8!0~tSq2PYccLT=wo z-iP9D2tR6n=P6z0Q+e)@NhTL0&#!NC)abc{7K|MU#7BP-NkDNM%&GG*SmOsZ%54g7 zTrNr;KM8XFEv&O>ujSSYaIWR*s(5bHEEmi$N1$su)POQZ(A??2hv4~x>m%siKd(^K zzo->N99N$`Al@^@i~r*9iB}K1>Tl=P=Wpd7e!&Chh2WC*4l7D-bqkF+9+=x6tK11K z5CE<1yVr=-Hs6Lck=jLf1Qm4hb{Df;=bOB-W$WUItnWt+@gz3CnHhiBa*Tdsp`09msl<_)jbLhypHDg@ z44nrnH}k|-#r^R;GI{n$9?Jre!B1o%uNqF?fKv@_uU1VGHYE=}W9~0uV)AA13P-PE zBFAkAeU+%R!@3Cus3QCh|Ly6^6usa<1(c2Kbq;f%XiTwUm2u6f=N$2bx1tS0+8D0^ zGGiH1s(AdSpHgtxZtfllUDtHB2n*ztg8mwHb4M5M#%6-pIqZ~8-6?-yg{h05EBPkLOsXw_{Ojz^9L#B$loq4|fFQ22;rzsS?-o!ni~)N5 zY#lZi&Bq8O46&c1wGAC)DN4ha0Uc>Yt0uWmRKbecxVoFhrc+$5{B;#`C)BCBe8C&d z=xy0?II5~>Y`He^E+s{pIAM~(7WKQfibxJZM765Hg$Bc2Q)W556B0E+RkyM>Rr3O7 zN^1A6wDEfo@J9opb(h2OD>H$So}Ln&J1(PyN8Zx>IN7~a!9y-7g}Z*!QU^6f!KKJi z$xis=3zWX4TuQ%_XI8{9;r_dmK$eejgf7G*~A|k*BQ}D zpOd{}W>-OwmWy3`28xrk0GJWF0?$oDiY!$bWTTJ)ARj=69+I9j6h93|0cP6%z;lB0 z(YR}eZR3;FhcHG#yEu`b2pYL}M^xTyIq0NQoivN($|^A&UFNEF+psri?{|3$f{(&* zwCiQV1*|BSC?#^dyQAL9TC)by2&bk;_c3XlXp&0eb&XQPb|fW~1<932m?tWp$r$(fG8+1Q zyy4j|wJmj_Y?)|oc^{ohvm;%L1^)tOYfm^x^<3;kTXa=4@x)shjf;^*lNpaOyh$5o zDD0umnV?Flk4-+{NklBIDkvm@bnG|{BnN{5=;^5r>yx*#3M_*78h4zTk@2E9r-T-x zLo{-%x8=W!5X&ZUhutFdfiX`~57-zl7@chv8KN)E;X|6Sal=!|KTgFSbx+F+H0=7! z#p)%(WnisMHWsM(YjVg!l*S72M**`1uO`0qv*2ozOmiu~J-FbPY=D^V3&mWa;=y4J zfSf&|M5sygNpKs=Rlj98b?;6YX9$8(L`QUmjWukMxfN*5g9=g0`eGK{1S5MsuOsK(uCF$rNOQ;H5ApRG09kEeXM_g#rS4{a&<`Lm@oeUz-RHpFN-o~lYQtgW*RO!{w5))B-!+JSHMx;viwnnIn%qJrvj7^!SGA^nN zfpz&hZ^)fsrN5uYsyO>C4Z*$oUj^}?&@7OHS&=Np_UX1$-vcXUr z*~mY!<)*Vy1UK;%NF4uTDGtE?;wcO;+Qsl*hUhv(@2&eFco%q1UwP<0B)xY%aQjSB zK~eXezixl6Qt{TRc{*E-N|J{Mya~0rFBP3%ls%bzx?Uarz}Oy$n$%IiUbu3P5;#t; za9z9)AUiIsz;kbNlP*I;1?cbfJ<5+^z8kbf^#yhUHtwX-|9S&MUjmkI0p0neT60Qu z`qxX;0cmCQ6<=0m-Y&8m&y70XLOM&A;5kJI-%fGeX?)tRcX#v1)LX6wx!H;Q9(RrU z0{nE%n6RUNi@LB|nW=bm!OSji7VUa25+hx_%9e4gl6FO03u}0w<-3Y4yj(vC&x*mt^A%S(g9q02XM)mvza?c2H8`u zJns=PlTCA9^tbFGMejkW-hzv_j9zgQ#>~CalPMUW)M8-^CMz=Y{Os_Qnr@Mrc_ion zwX82f9leX+HM$s2c6SR=U&={rHLgt9`xPU82iDh&qH4bg^uOD@Zx?vZS`h2roG{!08ly2C90^QgL2wlfF{1<77 zDpjj8;R!LCVS7`}+{fw-{-rV6Bs-Lm%D_hb~&dA4Z60kOVBJ=Oa`D!K0%*kk*)!>9{ z9F|5sRKU$gxDK$Jlg1vluc{YBeowd8p~m;cvRZJtGTiX@wz4@=dHJQ1#emCJr+a^OINy9zELKF6R1Da;ixVe4 z;)#Zz9`e!SYHerS=0&R`$XSiTOWM@vPuxhQZ2SjaQ>*VD@>Yo70PHmmenT+=L6#}V zLaMS0r!xHX1zf2JY|B)N1Vl@C1T>auW&v_&D8;}qwv6D)g0|sMahkt#!Q_?u@-I|3 z|4h@CQu9+`OOBrw+0Uq>!hTo^_KG#y(nQx!Ffo~!GHZIrkLI_lhWvKeO&X>kmGmK= z1kTa~+h{;kPrQM?Ne}Jp@w}Ow1$lf|5&jQCjW&Ove963j$W@OD_~t17aQSp^YE-)3 zaPiUff&Zf6r0;kSflp+2I7*cK(5M{ATL3`a+>6=~TgHM}p2F{VK3GPk2NA(Vv;cmy zVqqn-5D5{8mj%mNpg*zR*KgF;PLr zPo>k~S(9Sr+ElxVQ6z)I+qjTiAvEJ#XKCMk7URpurg?^{?PH)(QP&@y_ba$s+XhrK z4ecCfw5bb)dRwPpH!vvZ#{EnA-`m11X$H!vfk)I#i0#zOvcyfcto|oSP1>I3!B^eh z2SW)vv}YZ`wbJx(SlLOT2i8Rt1=+D{DCljEt7JN;lj*m$c$QpR0xo?=yYgbN*^}M1 zhyrxih5o_RB&*-vTt zcZ)2ctO7F!44-)?V3(a3dHyAt6+jZpfa+oCvCc84hCBY`L0uW3mG>!^gQ>%dO-R-V zHJKe1EQC4^?q$fDYf3eZk>1len!_zqDW?&WWt1Z(JP&K~KQq#ac8>q+EdkJcqyG7T!fSN9#Et4|ERY8U0R$fr!KWgpUh^iwBtI>sStv%G5r&P-AIW!4aOLQ#KWdS zR2JL@x1t#BnuoU%87Z(h4*>i8){kEl4Rvd!nU1q%zUrwy?CNE6e38X2ShS24T`OmN zu1WX&PNTEL*F)!7v{?Z}BEa_*9?{rqrfB$qJWl541!Id~>!{&LLzI|S*+tZinaL6> z`<)`lxhJG!&QSYLH#~nmervNJH61D+kWJB3s=H4$beaS#iax1EYnd%#Ea_ z)v%(-E*YFRoy5wp<+h0V>_Zl`ck{7hv-@$j{u{$V*66<%Re_^$n$>C8rp}*&ODJOH zIt{EHbm3|zt(tG4jTEfLP;o(?Q$;eGT|fxx{f<9u#=%7Q9RXUAc#g3N5!g@<5lmA=)31onp8TFcNmiKd3|YF=TfEO{CcPZ_6G3f&~m+6iWl`=&{F zZEIX+iV%9P@dEQw*HoE%m4w~Jxjr3)NkJxemJ_3`lr#*L1JfwG-QsLckz~}fzRId6 zX(XQd)oCt7e*qmJ>G|7vZEgE`bS~Bfo7-V_9082A^ZNazN_#ORt31F=pp3L1EXoOG z(2Y9Po^qN^K6|F~=27fA&Fh8J7`CmJ4>Bmw0foAC!|XI^rO4I{#IB$mhn zdO~1yWY1GfN>NaDh$ND-h{$6M5a1J3Q4lxmI3A0H^_ZO!HudIPd4ay%b^`-7kdQGA zEu#61Bt(;BSS+S?siEjAzgR4Ca}9G59j79Krkl%l1h1Xu{yHs@hcOq6EBq1>_Tn=7 z1#fzYg$~dv9ppNSwBH=LISTi!u-&iA3GK@sY@_NV_M^nNne~+9CqzIif50KM|cy%MRXJu`;68$y+PHOOz{@J?Mgl(f6+|{U?)(B9{ar zClw)K zl`|s1^4s6R$ZXMrHFZW@2iCB4=-nB2tud0&gCPdiVZDenlvf0L zADC((?&W!^x1-x>?*CbV;b8y8w3hsZNE1Fr9GU*gVy4X_aS-eyF?h8(OO9T+=6!9V!c9mvZb@jnof{#dX;NM%AU!jE5U0FXw z^d~%mn?U9xEw}k4;h%K@$8gqGl%_3E>IYiRnpI=D8MQgCA$*YVGf2P%;hRwc^)+D0 zgAg>jk)5JC2AZZ%D^8!y4X62LW6I?3~m35;$7bEg>EtD9F0rD2&-W#AM`I=jKQ+$=KLyOeetUo)vF)Z$5lHeD*yVAFuD(JpK z78uf4{m;56GDf?R3~B3y>XBs7y)SWaqYRl{YjpI7iL&p9t^chqlC8POsK`rfwL<6C z%GvH*s$;bX=ot2^VWf~2BLz508-&%i|N8S?E?M3#G;g?DK@tH2;snr&EP?gZ|9jxU zjr%r;V8aaw)(z4a?IOw>SaT|@2iZ=0-LLdFojO@aga{od?VF5je3cl_dq-y zQ|kCSJnLbyodpD5~6^JtVrpeyK85`)+Kk~|HuQRaZd z8TMBV%rEkODO?T>tAOGsP$>+GM#lLY&0?QK&G_|Wch?G@8}!cxQ>Rqp{apMI@77g4 zn7(+4HV7c9PG7RGbhbcpQ=Uyu_QYi>l*=AdLaN5g)yI>26;^<58*VZlBIQUB-<__# zx&wl|ivD{}e3;+3{Zs2nMX@ier4m^b37-Vo_#mHkuy^%xgY94fBZ`R+H0C|j<-4gn z5t+5!)%m_;cqOvZL=Y)85Q<2OvIE)kgyp3J+4%v-n;fpoSXSmt7TaRa7yAhPl>UO= z$@A+6a8}iHI0t~OqM#KF*Diu$hkM3;X&Be8t`Ei46>e-Q*<4;>)*5j?QQ44#VcUY=u38$NY; z&W9-UMuhP&33Y}_tTl1CJCYr1;_#`YTV31ntQwtU!oSA zMReh+HWRIFLu=d6f7&+OdO_4o%lARde{T8%W*x7_Ms>!2(_u#S z`g0g{7;8u~S|H5=X;0|k{e$`eF+H7kH}G`c&Gd9W1NO$DGP1t<-*`u<`@$K>*g*9$ z`*OalrmIWSV~g$RxU9_emK777B6c=M>}hQa4{Z}Xw7t*&hofj1jc}wF5^>I)&dd+XM0Ttu$LLn#B@NswbpdNgW+SwoyHmtuwYm!81`&| zC3!#2J~}*0Q)V^}`YbnPo~0=>8z^g6_RQqfd`*qaQ-Me=QkVlNM3c-L8I|NlBE~An z?GD^$733_g_xK8OwMu>4;J?i(&n>rbuzAHf`{w^Ce`9G|0-O=9K-0JqVY{z!B{<$9 zIb^K{R)Pi=d{ky2560PNMprmKHJ*&3FG1#9NhScqoLjrYmTV9D*XDM`@W?+!kxWrL zvv8VKH?s)at{`kXiKRSORM3J*xj>|7Y_^^`;t>`?+9?RB`vr}j)daJM(ZeA|?5&%0 z=Id@9e}c3&ipDj# zZf;nMRY^cvCI`W*pjyeVLM^amfh`@_;;ah2bwhYdjagX(jIPZh`@2o3*Q20Zh-Dl0 zCtle97BFgLn(hGj^#D$TRUV>rr)_t%4=~@)f8j87j+XQmrm4bNh|5A;7UHrHmxZ{V z6~x7_`PpmAE+9Okh0SuqX5y~hy6Z6Is&jVSHAwi+TByU5y@^KsZ+LqP)r2x!B>h`3 znqVAEO~^x?&a~4BDYL**$N;B{?s#D^Mk&956z5u~<41$(1SEJReml&O9}Q>jnR(zx zf5I9nQ8dUAMmHO(J03?h)z&Z=cXPy>)`t4_)sY%(4Nce05&Tj^1u!Z8=S?SwRc#gi zf;q0e3lDo-9gQi5IY(F5R+0OZC{?b4$)BcS_)l`9WtX_&oFFZ&!a4ukE1sA3olYo`o?C1=|a{V_6#PuS1Jy z&_9l-V?%s7j7Wq1rMETOKaSuU8sf`g&})PJbrb-jq5KkSfK(1Kr~mQ)P)h>@6aWAK z2mnX1wUaHS9|pD!O=h+Yvr?sGD-B1nwOHl?>iCjm00425!_XoEwhfax(H%8Mv9(wi z>14UIKmY*2Pyzr902lxO000010001_fz)IG0Aw>QWqK}cX>KlRb5&FY00XuSlR42H z14ps7lUdOl6wajp0Aw>QWqK}Sb8}Tx1pouK4U;+19h0Te9s%`}#L-RyqqdV2(liEG I(EtDd0Jh6VJpcdz diff --git a/examples/BarChartCircularExample.html b/examples/BarChartCircularExample.html index 2e6f403f..8f178d84 100644 --- a/examples/BarChartCircularExample.html +++ b/examples/BarChartCircularExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("UK Election Results") + .subTitle("Seats 1992 - 2015") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/BarChartHorizontalExample.html b/examples/BarChartHorizontalExample.html index 57dff65d..aa2325f5 100644 --- a/examples/BarChartHorizontalExample.html +++ b/examples/BarChartHorizontalExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("UK Election Results") + .subTitle("Seats 1992 - 2015") + .showLegend(true) .stacked(false) .yAxisLabel("Seats") .on("customValueMouseOver", function(e, d) { diff --git a/examples/BarChartStackedExample.html b/examples/BarChartStackedExample.html index 0d24bbb8..393fbbc8 100644 --- a/examples/BarChartStackedExample.html +++ b/examples/BarChartStackedExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("UK Election Results") + .subTitle("Seats 1992 - 2015") + .showLegend(true) .stacked(true) .yAxisLabel("Seats") .on("customValueMouseOver", function(e, d) { diff --git a/examples/CandleStickChartExample.html b/examples/CandleStickChartExample.html index beee04ff..6a15da5b 100644 --- a/examples/CandleStickChartExample.html +++ b/examples/CandleStickChartExample.html @@ -24,6 +24,9 @@ var myChart = d3.ez.chart.candlestickChart() .width(1000) .height(600) + .title("Bitcoin Price") + .subTitle("February - March 2018") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.open); }) diff --git a/examples/DonutChartExample.html b/examples/DonutChartExample.html index 066550c7..587bca86 100644 --- a/examples/DonutChartExample.html +++ b/examples/DonutChartExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("UK Election Results") + .subTitle("Seats 1992 - 2015") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/HeatMapExample.html b/examples/HeatMapExample.html index 2117ec3f..723fc408 100644 --- a/examples/HeatMapExample.html +++ b/examples/HeatMapExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("World Temperatures") + .subTitle("Holiday Forecasts") + .showLegend(true) .on("customValueMouseOver", function(e, d) { // Show Tooltip div.transition() diff --git a/examples/HeatMapRadialExample.html b/examples/HeatMapRadialExample.html index 83f90c6b..945fec91 100644 --- a/examples/HeatMapRadialExample.html +++ b/examples/HeatMapRadialExample.html @@ -23,6 +23,9 @@ .width(1000) .height(600) .colors(colors) + .title("World Temperatures") + .subTitle("Holiday Forecasts") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/LineChartExample.html b/examples/LineChartExample.html index 7f235eaa..babb92d4 100644 --- a/examples/LineChartExample.html +++ b/examples/LineChartExample.html @@ -22,9 +22,9 @@ var chart = d3.ez.chart.lineChart() .width(1000) .height(600) + .colors(colors) .title("Historical Exchange Rates") .subTitle("Comparison against GBP") - .colors(colors) .showLegend(true) .yAxisLabel("Rate") .on("customValueMouseOver", function(e, d) { diff --git a/examples/PolarAreaChartExample.html b/examples/PolarAreaChartExample.html index 57899307..7060663f 100644 --- a/examples/PolarAreaChartExample.html +++ b/examples/PolarAreaChartExample.html @@ -22,6 +22,9 @@ .width(1000) .height(600) .colors(colors) + .title("Random Fruit Data") + .subTitle("Fruit Consumption by Country") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/PunchCardExample.html b/examples/PunchCardExample.html index b341925c..ec8f6bff 100644 --- a/examples/PunchCardExample.html +++ b/examples/PunchCardExample.html @@ -27,6 +27,9 @@ var myChart = d3.ez.chart.punchCard() .width(1000) .height(600) + .title(json.Metadata.Title) + .subTitle(json.Metadata.Detail) + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/RadarChartExample.html b/examples/RadarChartExample.html index b60435a3..cb5e7dcb 100644 --- a/examples/RadarChartExample.html +++ b/examples/RadarChartExample.html @@ -48,6 +48,9 @@ .width(1000) .height(600) .colors(colors) + .title("Car Comparison") + .subTitle("Comparing Car Features") + .showLegend(true) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); }) diff --git a/examples/RoseChartExample.html b/examples/RoseChartExample.html index cfe98a52..3c382d97 100644 --- a/examples/RoseChartExample.html +++ b/examples/RoseChartExample.html @@ -49,6 +49,9 @@ .width(1000) .height(600) .colors(colors) + .title("Diagram of the Causes of Mortality in the Army in The East") + .subTitle("April 1854 to March 1855") + .showLegend(true) .stacked(false) .on("customValueMouseOver", function(e, d) { d3.select("#message").text(d.value); diff --git a/src/chart/barChartCircular.js b/src/chart/barChartCircular.js index abeb73c4..7625f54e 100644 --- a/src/chart/barChartCircular.js +++ b/src/chart/barChartCircular.js @@ -15,7 +15,7 @@ export default function() { let classed = "barChartCircular"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.categorical(3); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -51,12 +52,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); - const radius = (Math.min(chartW, chartH) / data.length) / 2; + const radius = Math.min(chartW, chartH) / 2.3; const innerRadius = radius / 4; const { columnKeys, valueMax } = dataTransform(data).summary(); @@ -99,35 +100,35 @@ export default function() { const layout = generateLayout(data.length, chartW, chartH); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Radial Bars - const barsCircular = component.barsCircular() + const componentBarsCircular = component.barsCircular() .colorScale(colorScale) .xScale(xScale) .opacity(opacity) @@ -136,66 +137,64 @@ export default function() { .transition(transition); // Circular Axis - const circularAxis = component.circularAxis() + const componentCircularAxis = component.circularAxis() .radialScale(yScale) .ringScale(xScale); // Outer Labels - const circularSectorLabels = component.circularSectorLabels() + const componentCircularSectorLabels = component.circularSectorLabels() .ringScale(xScale) .radialScale(yScale) .textAnchor("middle"); // Ring Labels - const circularRingLabels = component.circularRingLabels() + const componentCircularRingLabels = component.circularRingLabels() .radialScale(xScale) .textAnchor("middle"); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) - .call(circularAxis) - .call(barsCircular) - .call(circularSectorLabels) - .call(circularRingLabels); - - seriesGroup.exit() + .classed("series", true) + .merge(series) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentCircularAxis) + .call(componentBarsCircular) + .call(componentCircularSectorLabels) + .call(componentCircularRingLabels); + + series.exit() .remove(); // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/barChartHorizontal.js b/src/chart/barChartHorizontal.js index ef0010b6..412c025d 100644 --- a/src/chart/barChartHorizontal.js +++ b/src/chart/barChartHorizontal.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -52,11 +53,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); // Create Scales and Axis let { rowKeys, columnKeys, valueExtent, valueExtentStacked } = dataTransform(data).summary(); @@ -88,35 +89,35 @@ export default function() { .domain(columnKeys) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Bars Component - const bars = component.barsHorizontal() + const componentBars = component.barsHorizontal() .xScale(xScale) .colorScale(colorScale) .yScale(yScale) @@ -125,64 +126,61 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", (d) => `translate(${xScale(valueMin)},${yScale2(d.key) + titleH})`) - .call(bars); + .classed("series", true) + .merge(series) + .attr("transform", (d) => `translate(${xScale(valueMin)},${yScale2(d.key)})`) + .call(componentBars); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { // X-Axis const xAxis = d3.axisBottom(xScale); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH + titleH})`) + chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis); // Y-Axis const yAxis = d3.axisLeft(yScale2); - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/barChartVertical.js b/src/chart/barChartVertical.js index ffd5b449..5569c923 100644 --- a/src/chart/barChartVertical.js +++ b/src/chart/barChartVertical.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -52,11 +53,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); // Create Scales and Axis let { rowKeys, columnKeys, valueExtent, valueExtentStacked } = dataTransform(data).summary(); @@ -88,72 +89,71 @@ export default function() { .domain(columnKeys) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); - - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - container.exit() - .remove(); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Bars Component - const bars = stacked ? component.barsVerticalStacked().xScale(xScale2) : component.barsVertical().xScale(xScale) - bars.colorScale(colorScale) + const componentBars = stacked ? component.barsVerticalStacked().xScale(xScale2) : component.barsVertical().xScale(xScale) + componentBars.colorScale(colorScale) .yScale(yScale) .opacity(opacity) .dispatch(dispatch) .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", (d) => `translate(${xScale2(d.key)},${chartH - yScale(valueMin) + titleH})`) - .call(bars); + .classed("series", true) + .merge(series) + .attr("transform", (d) => `translate(${xScale2(d.key)},${chartH - yScale(valueMin)})`) + .call(componentBars); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { // X-Axis const xAxis = d3.axisBottom(xScale2); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH + titleH})`) + chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis); // Y-Axis const yAxis = d3.axisLeft(yScale); - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis") + chartSelect.select(".yAxis") .selectAll(".yAxisLabel") .data([yAxisLabel]) .enter() @@ -167,49 +167,34 @@ export default function() { .transition() .text((d) => d); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); - } - - // Title - if (title) { - const titleComponent = component.title() - .mainText(title) - .subText(subTitle); - - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/bubbleChart.js b/src/chart/bubbleChart.js index da510bd3..aba88a76 100644 --- a/src/chart/bubbleChart.js +++ b/src/chart/bubbleChart.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -53,11 +54,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); const { rowKeys, coordinatesExtent: { x: xExtent, y: yExtent }, valueExtent } = dataTransform(data).summary(); @@ -79,35 +80,35 @@ export default function() { .domain(valueExtent) .range([minRadius, maxRadius]); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); - - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - container.exit() - .remove(); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Bubble Component - const bubbles = component.bubbles() + const componentBubbles = component.bubbles() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -117,19 +118,18 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .attr("transform", (d) => `translate(0,${titleH})`) - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") + .attr("class", "series") .attr('clip-path', "url(#plotAreaClip)") - .merge(seriesGroup) - .call(bubbles); + .merge(series) + .call(componentBubbles); - seriesGroup.exit() + series.exit() .remove(); // Axis @@ -137,8 +137,8 @@ export default function() { const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH + titleH})`) + chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis) .selectAll("text") .style("text-anchor", "end") @@ -147,44 +147,15 @@ export default function() { .attr("transform", "rotate(-65)"); // Y-Axis - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } - // Title - if (title) { - const titleComponent = component.title() - .mainText(title) - .subText(subTitle); - - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); - } - - // Legend - if (showLegend) { - const legend = component.legend() - .sizeScale(sizeScale) - .height(legendH) - .width(legendW) - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); - } else { - containerEnter.select(".legend").selectAll('*').remove(); - } // Zoom Clip Path - const clipPath = containerEnter.select(".clipArea") - .attr("transform", (d) => `translate(0,${titleH})`) + const clipPath = chartSelect.select(".clipArea") .selectAll("defs") .data([0]); @@ -214,7 +185,7 @@ export default function() { if (showAxis) { xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis") + chartSelect.select(".xAxis") .call(xAxis) .selectAll("text") .style("text-anchor", "end") @@ -223,22 +194,21 @@ export default function() { .attr("transform", "rotate(-65)"); yAxis.scale(yScaleZoomed); - containerEnter.select(".yAxis") + chartSelect.select(".yAxis") .call(yAxis); } - bubbles + componentBubbles .xScale(xScaleZoomed) .yScale(yScaleZoomed) .transition({ ease: d3.easeLinear, duration: 0 }); - containerEnter.select(".chart") - .selectAll(".seriesGroup") - .call(bubbles); + chartSelect.select(".seriesGroup") + .selectAll(".series") + .call(componentBubbles); } - const zoomArea = containerEnter.select(".zoomArea") - .attr("transform", (d) => `translate(0,${titleH})`) + const zoomArea = chartSelect.select(".zoomArea") .selectAll("rect") .data([0]); @@ -250,6 +220,34 @@ export default function() { .call(zoom) .attr("width", chartW) .attr("height", chartH); + + // Title + if (title) { + const componentTitle = component.title() + .mainText(title) + .subText(subTitle); + + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); + } else { + titleSelect.remove(); + } + + // Legend + if (showLegend) { + const componentLegend = component.legend() + .title(legendTitle) + .sizeScale(sizeScale) + .height(legendH) + .width(legendW) + .opacity(opacity); + + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); + + } else { + legendSelect.remove(); + } }); } diff --git a/src/chart/candlestickChart.js b/src/chart/candlestickChart.js index c9d7dfee..6eb93444 100644 --- a/src/chart/candlestickChart.js +++ b/src/chart/candlestickChart.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -50,11 +51,11 @@ export default function() { selection.each(function(data) { const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); data = data[0]; // FIXME: Convert input data to support multi-series. @@ -91,34 +92,35 @@ export default function() { .domain([true, false]) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); - - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - container.exit().remove(); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Candle Stick Component - const candleSticks = component.candleSticks() + const componentCandleSticks = component.candleSticks() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -127,25 +129,25 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => [d]); // FIXME: Convert input data to support multi-series. + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data([data]); // FIXME: Convert input data to support multi-series. - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") - .merge(seriesGroup) - .call(candleSticks); + .attr("class", "series") + .merge(series) + .call(componentCandleSticks); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { // X Axis const xAxis = d3.axisBottom(xScale).tickFormat(d3.timeFormat("%d-%b-%y")); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH + titleH})`) + chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis) .selectAll("text") .style("text-anchor", "end") @@ -155,12 +157,11 @@ export default function() { // Y-Axis const yAxis = d3.axisLeft(yScale); - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis") + chartSelect.select(".yAxis") .selectAll(".yAxisLabel") .data([yAxisLabel]) .enter() @@ -174,53 +175,51 @@ export default function() { .transition() .text((d) => d); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } + // Experimental Brush + function brushStart(e) { + console.log(e); + } + + function brushEnd(e) { + console.log(e); + } + + const brush = d3.brushX() + .extent([[0, 0], [chartW, chartH]]) + .on("brush start", brushStart) + .on("brush end", brushEnd); + + chartSelect.select(".zoomArea") + .call(brush); + // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.selectAll(".title").selectAll('*').remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("line") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); - } - - // Experimental Brush - const brush = d3.brushX() - .extent([[0, 0], [chartW, chartH]]) - .on("brush start", brushStart) - .on("brush end", brushEnd); - - containerEnter.select(".zoomArea") - .call(brush); - - function brushStart(e) { - console.log(e); - } - - function brushEnd(e) { - console.log(e); + legendSelect.remove(); } }); } diff --git a/src/chart/donutChart.js b/src/chart/donutChart.js index 6eb30a41..a793d105 100644 --- a/src/chart/donutChart.js +++ b/src/chart/donutChart.js @@ -16,7 +16,7 @@ export default function() { let classed = "donutChart"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.categorical(3); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -52,12 +53,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); - const radius = (Math.min(chartW, chartH) / data.length) / 2; + const radius = (Math.min(chartW, chartH) / data.length) / 2.3; const innerRadius = radius / 2; const { columnKeys, valueExtent } = dataTransform(data).summary(); @@ -98,35 +99,35 @@ export default function() { const layout = generateLayout(data.length, chartW, chartH); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Donut Slice Component - const donut = component.donut() + const componentDonut = component.donut() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -135,54 +136,52 @@ export default function() { .transition(transition); // Donut Label Component - const donutLabels = component.donutLabels() + const componentDonutLabels = component.donutLabels() .xScale(xScale) .yScale(yScale) .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) - .call(donut) - .call(donutLabels); + .classed("series", true) + .merge(series) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentDonut) + .call(componentDonutLabels); - seriesGroup.exit() + series.exit() .remove(); // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/heatMap.js b/src/chart/heatMap.js index cb8e254a..7d626181 100644 --- a/src/chart/heatMap.js +++ b/src/chart/heatMap.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -51,11 +52,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); const { rowKeys, columnKeys, thresholds: tmpThresholds } = dataTransform(data).summary(); @@ -77,35 +78,35 @@ export default function() { .domain(thresholds) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Heat Map Row Component - const heatMapRow = component.heatMapRow() + const componentHeatMapRow = component.heatMapRow() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -114,26 +115,25 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") .data(data); - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") - .merge(seriesGroup) - .attr("transform", (d) => `translate(0,${yScale(d.key) + titleH})`) - .call(heatMapRow); + .attr("class", "series") + .merge(series) + .attr("transform", (d) => `translate(0,${yScale(d.key)})`) + .call(componentHeatMapRow); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { // X-Axis const xAxis = d3.axisTop(xScale); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".xAxis") .call(xAxis) .selectAll("text") .attr("y", 0) @@ -143,39 +143,36 @@ export default function() { // Y-Axis const yAxis = d3.axisLeft(yScale); - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/heatMapRadial.js b/src/chart/heatMapRadial.js index 564f5cd7..543ee5c8 100644 --- a/src/chart/heatMapRadial.js +++ b/src/chart/heatMapRadial.js @@ -15,7 +15,7 @@ export default function() { let classed = "heatMapRadial"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.diverging(2).slice(0, 5); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -52,11 +53,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const radius = Math.min(chartW, chartH) / 2; + const radius = Math.min(chartW, chartH) / 2.3; const innerRadius = radius / 4; const { rowKeys, columnKeys, thresholds: tmpThresholds } = dataTransform(data).summary(); @@ -79,35 +81,35 @@ export default function() { .domain(thresholds) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Heat Map Rings - const heatMapRing = component.heatMapRing() + const componentHeatMapRing = component.heatMapRing() .colorScale(colorScale) .xScale(xScale) .yScale(yScale) @@ -116,63 +118,61 @@ export default function() { .transition(transition); // Circular Labels - const circularSectorLabels = component.circularSectorLabels() + const componentCircularSectorLabels = component.circularSectorLabels() .ringScale(yScale) .radialScale(xScale) .textAnchor("start"); // Ring Labels - const circularRingLabels = component.circularRingLabels() + const componentCircularRingLabels = component.circularRingLabels() .radialScale(yScale) .textAnchor("middle"); // Create Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") - .merge(seriesGroup) - .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) - .call(heatMapRing) - .call(circularRingLabels); + .attr("class", "series") + .merge(series) + .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) + .call(componentHeatMapRing) + .call(componentCircularRingLabels); - seriesGroup.exit() + series.exit() .remove(); // Outer Ring Labels - containerEnter.select(".axis") + chartSelect.select(".axis") .attr("transform", `translate(${chartW / 2},${chartH / 2})`) - .call(circularSectorLabels); + .call(componentCircularSectorLabels); // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/lineChart.js b/src/chart/lineChart.js index 3e350972..c3b780cd 100644 --- a/src/chart/lineChart.js +++ b/src/chart/lineChart.js @@ -24,6 +24,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -51,11 +52,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - margin.bottom - titleH), 100); - const legendH = Math.max(height / 2, 100); // Create Scales and Axis let { rowKeys, columnKeys, valueMin, valueMax } = dataTransform(data).summary(); @@ -93,35 +94,35 @@ export default function() { .domain(rowKeys) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); - - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - container.exit() - .remove(); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend", "zoomArea", "clipArea"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Line Chart Component - const lineChart = component.lineChart() + const componentLineChart = component.lineChart() .colorScale(colorScale) .xScale(xScale) .yScale(yScale) @@ -130,7 +131,7 @@ export default function() { .transition(transition); // Line Dots Component - const scatterPlot = component.scatterPlot() + const componentScatterPlot = component.scatterPlot() .colorScale(colorScale) .yScale(yScale) .xScale(xScale) @@ -139,20 +140,19 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .attr("transform", (d) => `translate(0,${titleH})`) - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") + .attr("class", "series") .attr('clip-path', "url(#plotAreaClip)") - .merge(seriesGroup) - .call(lineChart) - .call(scatterPlot); + .merge(series) + .call(componentLineChart) + .call(componentScatterPlot); - seriesGroup.exit() + series.exit() .remove(); // Axis @@ -160,17 +160,16 @@ export default function() { const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH + titleH})`) + chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis); // Y-Axis - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${titleH})`) + chartSelect.select(".yAxis") .call(yAxis); // Y-Axis Label - containerEnter.select(".yAxis") + chartSelect.select(".yAxis") .selectAll(".yAxisLabel") .data([yAxisLabel]) .enter() @@ -183,41 +182,11 @@ export default function() { .style("text-anchor", "end") .text((d) => d); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); - } - - // Title - if (title) { - const titleComponent = component.title() - .mainText(title) - .subText(subTitle); - - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); - } else { - containerEnter.selectAll(".title").selectAll('*').remove(); - } - - // Legend - if (showLegend) { - const legend = component.legend() - .colorScale(colorScale) - .height(legendH) - .width(legendW) - .itemType("line") - .opacity(opacity); - - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); - } else { - containerEnter.select(".legend").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Zoom Clip Path - const clipPath = containerEnter.select(".clipArea") - .attr("transform", (d) => `translate(0,${titleH})`) + const clipPath = chartSelect.select(".clipArea") .selectAll("defs") .data([0]); @@ -246,26 +215,25 @@ export default function() { if (showAxis) { xAxis.scale(xScaleZoomed); - containerEnter.select(".xAxis") + chartSelect.select(".xAxis") .call(xAxis); } - lineChart + componentLineChart .xScale(xScaleZoomed) .transition({ ease: d3.easeLinear, duration: 0 }); - scatterPlot + componentScatterPlot .xScale(xScaleZoomed) .transition({ ease: d3.easeLinear, duration: 0 }); - containerEnter.select(".chart") - .selectAll(".seriesGroup") - .call(lineChart) - .call(scatterPlot); + chartSelect.select(".seriesGroup") + .selectAll(".series") + .call(componentLineChart) + .call(componentScatterPlot); } - const zoomArea = containerEnter.select(".zoomArea") - .attr("transform", (d) => `translate(0,${titleH})`) + const zoomArea = chartSelect.select(".zoomArea") .selectAll("rect") .data([0]); @@ -277,6 +245,33 @@ export default function() { .call(zoom) .attr("width", chartW) .attr("height", chartH); + + // Title + if (title) { + const componentTitle = component.title() + .mainText(title) + .subText(subTitle); + + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); + } else { + titleSelect.remove(); + } + + // Legend + if (showLegend) { + const componentLegend = component.legend() + .colorScale(colorScale) + .height(legendH) + .width(legendW) + .itemType("line") + .opacity(opacity); + + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); + } else { + legendSelect.remove(); + } }); } diff --git a/src/chart/polarAreaChart.js b/src/chart/polarAreaChart.js index d94fe0f5..f5b5f4ef 100644 --- a/src/chart/polarAreaChart.js +++ b/src/chart/polarAreaChart.js @@ -15,7 +15,7 @@ export default function() { let classed = "polarAreaChart"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.categorical(3); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -51,12 +52,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); - const radius = (Math.min(chartW, chartH) / data.length) / 2; + const radius = (Math.min(chartW, chartH) / data.length) / 2.3; const { columnKeys, valueMax } = dataTransform(data).summary(); const valueExtent = [0, valueMax]; @@ -97,35 +98,35 @@ export default function() { const layout = generateLayout(data.length, chartW, chartH); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Radial Bar Chart - const polarArea = component.polarArea() + const componentPolarArea = component.polarArea() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -134,60 +135,58 @@ export default function() { .transition(transition); // Circular Axis - const circularAxis = component.circularAxis() + const componentCircularAxis = component.circularAxis() .radialScale(xScale) .ringScale(yScale); // Circular Labels - const circularSectorLabels = component.circularSectorLabels() + const componentCircularSectorLabels = component.circularSectorLabels() .ringScale(yScale) .radialScale(xScale) .textAnchor("middle"); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y + titleH})`) - .call(circularAxis) - .call(circularSectorLabels) - .call(polarArea); - - seriesGroup.exit() + .classed("series", true) + .merge(series) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentCircularAxis) + .call(componentCircularSectorLabels) + .call(componentPolarArea); + + series.exit() .remove(); // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/punchCard.js b/src/chart/punchCard.js index 35701179..ff69eb5c 100644 --- a/src/chart/punchCard.js +++ b/src/chart/punchCard.js @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -52,11 +53,11 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); const { rowKeys, columnKeys, valueExtent } = dataTransform(data).summary(); @@ -80,35 +81,35 @@ export default function() { .domain(sizeExtent) .range([minRadius, maxRadius]); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - const layers = ["xAxis axis", "yAxis axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Proportional Area Circles - const proportionalAreaCircles = component.proportionalAreaCircles() + const componentProportionalAreaCircles = component.proportionalAreaCircles() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -118,26 +119,25 @@ export default function() { .transition(transition); // Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") .data(data); - seriesGroup.enter() + series.enter() .append("g") - .attr("class", "seriesGroup") - .merge(seriesGroup) - .attr("transform", (d) => `translate(0,${yScale(d.key) + titleH})`) - .call(proportionalAreaCircles); + .attr("class", "series") + .merge(series) + .attr("transform", (d) => `translate(0,${yScale(d.key)})`) + .call(componentProportionalAreaCircles); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { // X-Axis const xAxis = d3.axisTop(xScale); - containerEnter.select(".xAxis") - .attr("transform", `translate(0,${chartH})`) + chartSelect.select(".xAxis") .call(xAxis) .selectAll("text") .attr("y", 0) @@ -147,39 +147,36 @@ export default function() { // Y-Axis const yAxis = d3.axisLeft(yScale); - containerEnter.select(".yAxis") - .attr("transform", `translate(0,${chartH})`) + chartSelect.select(".yAxis") .call(yAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .sizeScale(sizeScale) .height(legendH) .width(legendW) .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/radarChart.js b/src/chart/radarChart.js index 7dbdfb3b..299aa738 100644 --- a/src/chart/radarChart.js +++ b/src/chart/radarChart.js @@ -15,7 +15,7 @@ export default function() { let classed = "radarChart"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.categorical(3); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -51,12 +52,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); - const radius = Math.min(chartW, chartH) / 2.5; + const radius = Math.min(chartW, chartH) / 2.3; const { rowKeys, columnKeys, valueMax } = dataTransform(data).summary(); const valueExtent = [0, valueMax]; @@ -74,36 +75,35 @@ export default function() { .domain(rowKeys) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); - - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - container.exit() - .remove(); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - // Update the chart dimensions and container and layer groups - const layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Radar Component - const radarArea = component.radarArea() + const componentRadarArea = component.radarArea() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -112,68 +112,66 @@ export default function() { .transition(transition); // Circular Axis - const circularAxis = component.circularAxis() + const componentCircularAxis = component.circularAxis() .radialScale(xScale) .ringScale(yScale) .showAxis(false); // Circular Labels - const circularSectorLabels = component.circularSectorLabels() + const componentCircularSectorLabels = component.circularSectorLabels() .ringScale(yScale) .radialScale(xScale) .textAnchor("middle"); // Create Radars - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) + .classed("series", true) .attr("fill", (d) => colorScale(d.key)) .style("stroke", (d) => colorScale(d.key)) - .merge(seriesGroup) - .call(radarArea) - .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`); + .merge(series) + .call(componentRadarArea) + .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`); // Axis if (showAxis) { - containerEnter.select(".axis") - .attr("transform", `translate(${chartW / 2},${chartH / 2 + titleH})`) - .call(circularSectorLabels) - .call(circularAxis); + chartSelect.select(".axis") + .attr("transform", `translate(${chartW / 2},${chartH / 2})`) + .call(componentCircularSectorLabels) + .call(componentCircularAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/chart/roseChart.js b/src/chart/roseChart.js index c10de313..0614baad 100644 --- a/src/chart/roseChart.js +++ b/src/chart/roseChart.js @@ -15,7 +15,7 @@ export default function() { let classed = "roseChart"; let width = 700; let height = 400; - let margin = { top: 20, right: 20, bottom: 20, left: 20 }; + let margin = { top: 40, right: 40, bottom: 40, left: 40 }; let colors = palette.categorical(3); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -23,6 +23,7 @@ export default function() { /* Other Customisation Options */ let title = null; let subTitle = null; + let legendTitle = "Key"; let opacity = 1; let showLegend = false; let showAxis = true; @@ -50,12 +51,12 @@ export default function() { selection.each(function(data) { // Set up margins and dimensions for the chart const legendW = showLegend ? 120 : 0; + const legendH = Math.max(height / 2.5, 100); const legendPad = showLegend ? 15 : 0; const titleH = title ? 40 : 0; - const chartW = Math.max((width - margin.left - legendW - margin.right - legendPad), 100); + const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const legendH = Math.max(chartH / 2, 100); - const radius = Math.min(chartW, chartH) / 2; + const radius = Math.min(chartW, chartH) / 2.3; const innerRadius = 0; let { rowKeys, columnKeys, valueMin, valueMax, valueExtentStacked } = dataTransform(data).summary(); @@ -76,36 +77,35 @@ export default function() { .domain(columnKeys) .range(colors); + // Add Title, Chart and Legend main layer groups + const mainLayers = ["title", "chart", "legend"]; svg.classed("d3ez", true) .attr("width", width) - .attr("height", height); + .attr("height", height) + .selectAll("g") + .data(mainLayers) + .enter() + .append("g") + .attr("class", (d) => d); - // Update the chart dimensions and container and layer groups - const container = svg.selectAll(".container") - .data([data]); + const titleSelect = svg.select(".title"); + const chartSelect = svg.select(".chart"); + const legendSelect = svg.select(".legend"); - container.exit() - .remove(); - - const containerEnter = container.enter() - .append("g") - .classed("container", true) - .classed(classed, true) - .merge(container) - .attr("transform", `translate(${margin.left},${margin.top})`) + // Update the chart dimensions and layer groups + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + chartSelect.classed(classed, true) .attr("width", chartW) - .attr("height", chartH); - - // Update the chart dimensions and container and layer groups - const layers = ["axis", "chart", "title", "legend"]; - containerEnter.selectAll("g") - .data(layers) + .attr("height", chartH) + .attr("transform", `translate(${margin.left},${margin.top + titleH})`) + .selectAll("g") + .data(chartLayers) .enter() .append("g") .attr("class", (d) => d); // Rose Sectors - const roseChartSector = component.roseChartSector() + const componentRoseChartSector = component.roseChartSector() .xScale(xScale) .yScale(yScale) .colorScale(colorScale) @@ -115,71 +115,69 @@ export default function() { .transition(transition); // Circular Axis - const circularAxis = component.circularAxis() + const componentCircularAxis = component.circularAxis() .radialScale(xScale) .ringScale(yScale); // Circular Labels - const circularSectorLabels = component.circularSectorLabels() + const componentCircularSectorLabels = component.circularSectorLabels() .ringScale(yScale) .radialScale(xScale) .textAnchor("middle") .capitalizeLabels(true); // Create Series Group - const seriesGroup = containerEnter.select(".chart") - .selectAll(".seriesGroup") - .data((d) => d); + const series = chartSelect.select(".seriesGroup") + .selectAll(".series") + .data(data); - seriesGroup.enter() + series.enter() .append("g") - .classed("seriesGroup", true) - .merge(seriesGroup) - .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) + .classed("series", true) + .merge(series) + .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) .each(function() { - d3.select(this).call(roseChartSector); + d3.select(this).call(componentRoseChartSector); }); - seriesGroup.exit() + series.exit() .remove(); // Axis if (showAxis) { - containerEnter.select(".axis") - .attr("transform", `translate(${chartW / 2},${(chartH / 2) + titleH})`) - .call(circularSectorLabels) - .call(circularAxis); + chartSelect.select(".axis") + .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) + .call(componentCircularSectorLabels) + .call(componentCircularAxis); } else { - containerEnter.selectAll(".axis").selectAll('*').remove(); + chartSelect.selectAll(".axis").selectAll('*').remove(); } // Title if (title) { - const titleComponent = component.title() + const componentTitle = component.title() .mainText(title) .subText(subTitle); - containerEnter.select(".title") - .attr("transform", "translate(" + chartW / 2 + "," + 0 + ")") - .call(titleComponent); + titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) + .call(componentTitle); } else { - containerEnter.selectAll(".title").selectAll('*').remove(); + titleSelect.remove(); } // Legend if (showLegend) { - const legend = component.legend() + const componentLegend = component.legend() .colorScale(colorScale) .height(legendH) .width(legendW) .itemType("rect") .opacity(opacity); - containerEnter.select(".legend") - .attr("transform", `translate(${chartW + legendPad},0)`) - .call(legend); + legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) + .call(componentLegend); } else { - containerEnter.select(".legend").selectAll('*').remove(); + legendSelect.remove(); } }); } diff --git a/src/component/legendSize.js b/src/component/legendSize.js index a3c272a4..bf3e71df 100644 --- a/src/component/legendSize.js +++ b/src/component/legendSize.js @@ -83,7 +83,7 @@ export default function() { .attr("fill", "#cad4e7") .attr("stroke", "#cad4e7") .attr("stroke-width", 1) - .attr("fill-opacity", opacity / 2); + .attr("fill-opacity", opacity); itemsEnter.append("text") .attr("font-size", "0.9em") From 79e48b620489a7ec68ecf7c0a000f621762eeae8 Mon Sep 17 00:00:00 2001 From: James Saunders Date: Wed, 22 May 2024 12:49:08 +0100 Subject: [PATCH 5/5] fix: show axis options. --- dist/d3-ez.js | 183 +++++++++++++++++++------------- dist/d3-ez.min.js | 2 +- dist/d3-ez.zip | Bin 53838 -> 54032 bytes package.json | 2 +- src/chart/barChartCircular.js | 31 ++++-- src/chart/barChartHorizontal.js | 12 +-- src/chart/barChartVertical.js | 12 +-- src/chart/bubbleChart.js | 6 +- src/chart/candlestickChart.js | 10 +- src/chart/donutChart.js | 28 ++++- src/chart/heatMap.js | 15 +-- src/chart/heatMapRadial.js | 22 ++-- src/chart/lineChart.js | 6 +- src/chart/polarAreaChart.js | 28 ++++- src/chart/punchCard.js | 15 +-- src/chart/radarChart.js | 12 +-- src/chart/roseChart.js | 8 +- 17 files changed, 245 insertions(+), 147 deletions(-) diff --git a/dist/d3-ez.js b/dist/d3-ez.js index 02479bf6..e6d3ad85 100644 --- a/dist/d3-ez.js +++ b/dist/d3-ez.js @@ -32,7 +32,7 @@ var d3__namespace = /*#__PURE__*/_interopNamespaceDefault(d3); var name = "d3-ez"; - var version$1 = "4.0.3"; + var version$1 = "4.0.4"; var description = "D3 Easy Reusable Chart Library"; var license$1 = "GPL-2.0"; var keywords = [ @@ -5203,7 +5203,7 @@ var titleH = title ? 40 : 0; var chartW = Math.max(width - margin.left - legendPad - legendW - margin.right, 100); var chartH = Math.max(height - margin.top - titleH - margin.bottom, 100); - var radius = Math.min(chartW, chartH) / 2.3; + var radius = Math.min(chartW, chartH) / data.length / 2.3; var innerRadius = radius / 4; var _dataTransform$summar = dataTransform(data).summary(), columnKeys = _dataTransform$summar.columnKeys, @@ -5248,7 +5248,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -5269,15 +5269,26 @@ var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); - }).call(componentCircularAxis).call(componentBarsCircular).call(componentCircularSectorLabels).call(componentCircularRingLabels); + }).call(componentBarsCircular).call(componentCircularRingLabels); series.exit().remove(); + // Axis Labels + if (showAxis) { + var seriesAxis = chartSelect.select(".axis").selectAll(".seriesAxis").data(data); + seriesAxis.enter().append("g").classed("seriesAxis", true).merge(seriesAxis).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentCircularAxis).call(componentCircularSectorLabels); + seriesAxis.exit().remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + // Title if (title) { var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -5285,7 +5296,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -5449,8 +5460,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = palette.categorical(1); var transition = { @@ -5531,7 +5542,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -5548,13 +5559,13 @@ series.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale2); + var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - var xAxis = d3__namespace.axisBottom(xScale2); chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); chartSelect.select(".yAxis").call(yAxis); // Y-Axis Label @@ -5570,7 +5581,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -5578,7 +5589,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -5766,8 +5777,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = palette.categorical(1); var transition = { @@ -5848,7 +5859,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -5864,13 +5875,13 @@ series.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale); + var yAxis = d3__namespace.axisLeft(yScale2); if (showAxis) { // X-Axis - var xAxis = d3__namespace.axisBottom(xScale); chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis); // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale2); chartSelect.select(".yAxis").call(yAxis); } else { chartSelect.selectAll(".axis").selectAll('*').remove(); @@ -5881,7 +5892,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -5889,7 +5900,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -6077,8 +6088,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = palette.categorical(1); var transition = { @@ -6202,7 +6213,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -6210,7 +6221,7 @@ var componentLegend = component.legend().title(legendTitle).sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -6386,8 +6397,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = ["green", "red"]; var transition = { @@ -6482,13 +6493,13 @@ series.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y")); + var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X Axis - var xAxis = d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y")); chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").style("text-anchor", "end").attr("dx", "-.8em").attr("dy", ".15em").attr("transform", "rotate(-65)"); // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); chartSelect.select(".yAxis").call(yAxis); // Y-Axis Label @@ -6514,7 +6525,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.selectAll(".title").selectAll('*').remove(); + titleSelect.selectAll('*').remove(); } // Legend @@ -6522,7 +6533,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -6789,7 +6800,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["seriesGroup", "axis"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -6804,15 +6815,26 @@ var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); - }).call(componentDonut).call(componentDonutLabels); + }).call(componentDonut); series.exit().remove(); + // Axis Labels + if (showAxis) { + var seriesAxis = chartSelect.select(".axis").selectAll(".seriesAxis").data(data); + seriesAxis.enter().append("g").classed("seriesAxis", true).merge(seriesAxis).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentDonutLabels); + seriesAxis.exit().remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + // Title if (title) { var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -6820,7 +6842,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -7054,7 +7076,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["seriesGroup", "axis"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -7070,18 +7092,22 @@ // Create Series Group var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); - series.enter().append("g").attr("class", "series").merge(series).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentHeatMapRing).call(componentCircularRingLabels); + series.enter().append("g").attr("class", "series").merge(series).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentHeatMapRing); series.exit().remove(); - // Outer Ring Labels - chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels); + // Axis Labels + if (showAxis) { + chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels).call(componentCircularRingLabels); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } // Title if (title) { var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -7089,7 +7115,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -7265,8 +7291,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = palette.diverging(2).slice(0, 5); var transition = { @@ -7332,7 +7358,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -7348,13 +7374,13 @@ series.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale); + var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - var xAxis = d3__namespace.axisTop(xScale); - chartSelect.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(300)").style("text-anchor", "end"); // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); chartSelect.select(".yAxis").call(yAxis); } else { chartSelect.selectAll(".axis").selectAll('*').remove(); @@ -7365,7 +7391,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -7373,7 +7399,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -7549,8 +7575,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = palette.categorical(1); var transition = { @@ -7695,7 +7721,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -7703,7 +7729,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -7969,7 +7995,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -7987,15 +8013,26 @@ var series = chartSelect.select(".seriesGroup").selectAll(".series").data(data); series.enter().append("g").classed("series", true).merge(series).attr("transform", function (d, i) { return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); - }).call(componentCircularAxis).call(componentCircularSectorLabels).call(componentPolarArea); + }).call(componentPolarArea); series.exit().remove(); + // Axis Labels + if (showAxis) { + var seriesAxis = chartSelect.select(".axis").selectAll(".seriesAxis").data(data); + seriesAxis.enter().append("g").classed("seriesAxis", true).merge(seriesAxis).attr("transform", function (d, i) { + return "translate(".concat(layout[i].x, ",").concat(layout[i].y, ")"); + }).call(componentCircularAxis).call(componentCircularSectorLabels); + seriesAxis.exit().remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + // Title if (title) { var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -8003,7 +8040,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -8166,8 +8203,8 @@ var margin = { top: 40, right: 40, - bottom: 40, - left: 40 + bottom: 70, + left: 70 }; var colors = [d3__namespace.rgb("steelblue").brighter(), d3__namespace.rgb("steelblue").darker()]; var transition = { @@ -8236,7 +8273,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -8252,13 +8289,13 @@ series.exit().remove(); // Axis + var xAxis = d3__namespace.axisBottom(xScale); + var yAxis = d3__namespace.axisLeft(yScale); if (showAxis) { // X-Axis - var xAxis = d3__namespace.axisTop(xScale); - chartSelect.select(".xAxis").call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(60)").style("text-anchor", "end"); + chartSelect.select(".xAxis").attr("transform", "translate(0,".concat(chartH, ")")).call(xAxis).selectAll("text").attr("y", 0).attr("x", -8).attr("transform", "rotate(300)").style("text-anchor", "end"); // Y-Axis - var yAxis = d3__namespace.axisLeft(yScale); chartSelect.select(".yAxis").call(yAxis); } else { chartSelect.selectAll(".axis").selectAll('*').remove(); @@ -8269,7 +8306,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -8277,7 +8314,7 @@ var componentLegend = component.legend().sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -8543,7 +8580,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -8563,9 +8600,9 @@ return colorScale(d.key); }).style("stroke", function (d) { return colorScale(d.key); - }).merge(series).call(componentRadarArea).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")); + }).merge(series).attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentRadarArea); - // Axis + // Axis Labels if (showAxis) { chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels).call(componentCircularAxis); } else { @@ -8577,7 +8614,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -8585,7 +8622,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } @@ -8819,7 +8856,7 @@ var legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - var chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + var chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true).attr("width", chartW).attr("height", chartH).attr("transform", "translate(".concat(margin.left, ",").concat(margin.top + titleH, ")")).selectAll("g").data(chartLayers).enter().append("g").attr("class", function (d) { return d; }); @@ -8840,7 +8877,7 @@ }); series.exit().remove(); - // Axis + // Axis Labels if (showAxis) { chartSelect.select(".axis").attr("transform", "translate(".concat(chartW / 2, ",").concat(chartH / 2, ")")).call(componentCircularSectorLabels).call(componentCircularAxis); } else { @@ -8852,7 +8889,7 @@ var componentTitle = component.title().mainText(title).subText(subTitle); titleSelect.attr("transform", "translate(".concat(width / 2, ",").concat(margin.top, ")")).call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -8860,7 +8897,7 @@ var componentLegend = component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity); legendSelect.attr("transform", "translate(".concat(margin.left + chartW + legendPad, ",").concat(margin.top, ")")).call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/dist/d3-ez.min.js b/dist/d3-ez.min.js index 56728e90..c9069282 100644 --- a/dist/d3-ez.min.js +++ b/dist/d3-ez.min.js @@ -1 +1 @@ -(function(global,factory){typeof exports==="object"&&typeof module!=="undefined"?module.exports=factory(require("d3")):typeof define==="function"&&define.amd?define(["d3"],factory):(global=typeof globalThis!=="undefined"?globalThis:global||self,global.d3=global.d3||{},global.d3.ez=factory(global.d3))})(this,function(d3){"use strict";function _interopNamespaceDefault(e){var n=Object.create(null);if(e){Object.keys(e).forEach(function(k){if(k!=="default"){var d=Object.getOwnPropertyDescriptor(e,k);Object.defineProperty(n,k,d.get?d:{enumerable:true,get:function(){return e[k]}})}})}n.default=e;return Object.freeze(n)}var d3__namespace=_interopNamespaceDefault(d3);var name="d3-ez";var version$1="4.0.3";var description="D3 Easy Reusable Chart Library";var license$1="GPL-2.0";var keywords=["d3","d3-module","visualization","chart","graph","data","svg","dataviz"];var homepage="http://d3-ez.net";var author$1="James Saunders (james@saunders-family.net)";var repository={type:"git",url:"https://github.com/jamesleesaunders/d3-ez.git"};var bugs={url:"https://github.com/jamesleesaunders/d3-ez/issues"};var type="module";var files=["dist/**/*.js","src/**/*.js"];var module="src/index.js";var main="src/index.js";var jsdelivr="dist/d3-ez.min.js";var unpkg="dist/d3-ez.min.js";var exports$1={umd:"./dist/d3-ez.min.js",default:"./src/index.js"};var scripts={build:"make",pretest:"make",test:"tape 'test/**/*Test.js' | tap-arc","build:docs":"jsdoc -c config/jsdoc.conf.json","deploy:docs":"npm run build:docs && gh-pages -d docs"};var devDependencies={"@babel/core":"^7.24.5","@babel/plugin-external-helpers":"^7.24.1","@babel/plugin-transform-object-assign":"^7.24.1","@babel/plugin-syntax-import-attributes":"^7.24.1","@babel/preset-env":"^7.24.5","@rollup/plugin-babel":"^6.0.4","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3",eslint:"^9.3.0","gh-pages":"^6.1.1",jsdoc:"^4.0.3",jsdom:"^24.0.0",rollup:"^4.17.2","tap-arc":"^1.2.2",tape:"^5.7.5","toast-jsdoc":"^1.0.2","uglify-js":"^3.17.4",vows:"^0.8.3"};var dependencies={d3:"^7.9.0"};var peerDependencies={d3:"^7.9.0"};var packageJson={name:name,version:version$1,description:description,license:license$1,keywords:keywords,homepage:homepage,author:author$1,repository:repository,bugs:bugs,type:type,files:files,module:module,main:main,jsdelivr:jsdelivr,unpkg:unpkg,exports:exports$1,scripts:scripts,devDependencies:devDependencies,dependencies:dependencies,peerDependencies:peerDependencies};function componentBarsCircular(){var classed="barsCircular";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var startAngle=d3__namespace.min(yScale.range());var arc=d3__namespace.arc().startAngle(startAngle*Math.PI/180).endAngle(function(d){return yScale(d.value)*Math.PI/180}).outerRadius(function(d){return xScale(d.key)+xScale.bandwidth()}).innerRadius(function(d){return xScale(d.key)}).cornerRadius(cornerRadius);var arcTween=function arcTween(d,j){this._current||(this._current={key:d.key,value:0});var i=d3__namespace.interpolate(this._current,d);this._current=i(0);return function(t){return arc(i(t))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("path").classed("bar",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("stroke-width","1px");bars.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentBarsHorizontal(){var classed="bars";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var bars=componentGroup.selectAll(".bar").data(function(d){return d.values});bars.enter().append("rect").classed("bar",true).attr("stroke-width","1px").attr("rx",cornerRadius).attr("ry",cornerRadius).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("x",0).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).merge(bars).transition().ease(transition.ease).duration(transition.duration).attr("fill",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.key)}).attr("width",yScale.bandwidth()).attr("y",function(d){return yScale(d.key)}).attr("height",yScale.bandwidth()).attr("width",function(d){return xScale(d.value)});bars.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return my};my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function _iterableToArrayLimit(r,l){var t=null==r?null:"undefined"!=typeof Symbol&&r[Symbol.iterator]||r["@@iterator"];if(null!=t){var e,n,i,u,a=[],f=!0,o=!1;try{if(i=(t=t.call(r)).next,0===l);else for(;!(f=(e=i.call(t)).done)&&(a.push(e.value),a.length!==l);f=!0);}catch(r){o=!0,n=r}finally{try{if(!f&&null!=t.return&&(u=t.return(),Object(u)!==u))return}finally{if(o)throw n}}return a}}function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_unsupportedIterableToArray(arr,i)||_nonIterableRest()}function _toConsumableArray(arr){return _arrayWithoutHoles(arr)||_iterableToArray(arr)||_unsupportedIterableToArray(arr)||_nonIterableSpread()}function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}function _iterableToArray(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _unsupportedIterableToArray(o,minLen){if(!o)return;if(typeof o==="string")return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(o);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}function _arrayLikeToArray(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/2.3;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);componentBars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin),")")}).call(componentBars);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale2);chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key),")")}).call(componentBars);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale);chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);var yAxis=d3__namespace.axisLeft(yScale2);chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var legendTitle="Key";var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentBubbles);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);chartSelect.select(".yAxis").call(yAxis)}componentBubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentBubbles)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().title(legendTitle).sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentCandleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data([data]);series.enter().append("g").attr("class","series").merge(series).call(componentCandleSticks);series.exit().remove();if(showAxis){var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");var yAxis=d3__namespace.axisLeft(yScale);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);chartSelect.select(".zoomArea").call(brush);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll(".title").selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentLineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var componentScatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentLineChart).call(componentScatterPlot);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis)}componentLineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});componentScatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentLineChart).call(componentScatterPlot)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;iarr.length)len=arr.length;for(var i=0,arr2=new Array(len);id.open};var line=d3__namespace.line().x(function(d){return d.x}).y(function(d){return d.y});var highLowLines=function highLowLines(bars){var paths=bars.selectAll(".high-low-line").data(function(d){return[d]});paths.enter().append("path").classed("high-low-line",true).merge(paths).transition().ease(transition.ease).duration(transition.duration).attr("d",function(d){return line([{x:xScale(d.date),y:yScale(d.high)},{x:xScale(d.date),y:yScale(d.low)}])});return bars};var openCloseBars=function openCloseBars(candle){var rect=candle.selectAll(".open-close-bar").data(function(d){return[d]});rect.enter().append("rect").classed("open-close-bar",true).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){var isUp=isUpDay(d);var base=isUp?yScale(d.close):yScale(d.open);var difference=isUp?yScale(d.open)-yScale(d.close):0;return base+difference}).attr("width",candleWidth).attr("rx",cornerRadius).attr("ry",cornerRadius).merge(rect).transition().ease(transition.ease).duration(transition.duration).attr("x",function(d){return xScale(d.date)-candleWidth/2}).attr("y",function(d){return isUpDay(d)?yScale(d.close):yScale(d.open)}).attr("width",candleWidth).attr("height",function(d){return isUpDay(d)?yScale(d.open)-yScale(d.close):yScale(d.close)-yScale(d.open)});return candle};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var candles=componentGroup.selectAll(".candle").data(function(d){return d.values});candles.enter().append("g").classed("candle",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(candles).attr("fill",function(d){return colorScale(isUpDay(d))}).attr("stroke",function(d){return colorScale(isUpDay(d))}).attr("fill-opacity",opacity).call(highLowLines).call(openCloseBars);candles.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.candleWidth=function(_v){if(!arguments.length)return candleWidth;candleWidth=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentCircularAxis(){var classed="circularAxis";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var showAxis=false;function my(selection){selection.each(function(){var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var axisSelect=d3__namespace.select(this).selectAll("g.".concat(classed)).data([0]);var axis=axisSelect.enter().append("g").classed(classed,true).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(axisSelect);var outerCircle=axis.selectAll(".outerCircle").data([radius]);outerCircle.enter().append("circle").classed("outerCircle",true).merge(outerCircle).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d}).style("fill","none").attr("stroke-width",2).attr("stroke","currentColor");var tickData=function tickData(){var tickArray,tickPadding;if(typeof ringScale.ticks==="function"){tickArray=ringScale.ticks();tickPadding=0}else{tickArray=ringScale.domain();tickPadding=ringScale.bandwidth()/2}return tickArray.map(function(d){return{value:d,radius:ringScale(d),padding:tickPadding}})};var tickCirclesGroupSelect=axis.selectAll(".tickCircles").data(function(){return[tickData()]});var tickCirclesGroup=tickCirclesGroupSelect.enter().append("g").classed("tickCircles",true).merge(tickCirclesGroupSelect);var tickCircles=tickCirclesGroup.selectAll("circle").data(function(d){return d});tickCircles.enter().append("circle").style("fill","none").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","1,1").attr("opacity",.5).merge(tickCircles).transition().ease(transition.ease).duration(transition.duration).attr("r",function(d){return d.radius+d.padding});tickCircles.exit().remove();var spokeData=function spokeData(){var spokeArray=[];var spokeCount=0;if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());spokeCount=radialScale.ticks().length;var spokeIncrement=(max-min)/spokeCount;for(var i=0;i<=spokeCount;i++){spokeArray[i]=(spokeIncrement*i).toFixed(0)}}else{spokeArray=radialScale.domain();spokeCount=spokeArray.length;spokeArray.push("")}var spokeScale=d3__namespace.scaleLinear().domain([0,spokeCount]).range(radialScale.range());return spokeArray.map(function(d,i){return{value:d,rotate:spokeScale(i)}})};var spokeGroup=axis.selectAll(".spokes").data(function(){return[spokeData()]});var spokeGroupEnter=spokeGroup.enter().append("g").classed("spokes",true).merge(spokeGroup);var spokes=spokeGroupEnter.selectAll("line").data(function(d){return d});spokes.enter().append("line").attr("stroke","currentColor").attr("stroke-width",1).attr("stroke-dasharray","2,2").attr("opacity",.5).merge(spokes).attr("transform",function(d){return"rotate(".concat(d.rotate,")")}).attr("y2",-radius);spokes.exit().remove();if(showAxis){var verticalAxis=d3__namespace.axisLeft(ringScale);axis.call(verticalAxis)}})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return my};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularRingLabels(){var classed="circularRingLabels";var radialScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){var pathGen=function pathGen(d){var r=radialScale(d);var arc=d3__namespace.arc().outerRadius(r).innerRadius(r);var pathConf={startAngle:0*Math.PI/180,endAngle:360*Math.PI/180};var pathStr=arc(pathConf).split(/[A-Z]/);return"M"+pathStr[1]+"A"+pathStr[2]};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data([0]);var labelsEnter=labels.enter().append("g").classed(classed,true).merge(labels);var radData=radialScale.domain();var def=labelsEnter.selectAll("def").data(radData);def.enter().append("def").append("path").attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)}).attr("d",function(d){return pathGen(d)}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("d",function(d){return pathGen(d)}).attr("id",function(d,i){return"".concat(uId,"-path-").concat(i)});var text=labelsEnter.selectAll("text").data(radData);text.enter().append("text").style("text-anchor","start").attr("dy",-2).attr("dx",5).append("textPath").attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)}).attr("startOffset","0%").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).text(function(d){return d}).merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").attr("font-size",function(d){var fontPx=radialScale.bandwidth()*.5;return"".concat(fontPx,"px")}).attr("xlink:href",function(d,i){return"#".concat(uId,"-path-").concat(i)});text.exit().remove()})}my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentCircularSectorLabels(){var classed="circularSectorLabels";var radialScale;var ringScale;var transition={ease:d3__namespace.easeLinear,duration:0};var capitalizeLabels=false;var textAnchor="middle";function my(selection){selection.each(function(){textAnchor="start";var _ringScale$range=ringScale.range(),_ringScale$range2=_slicedToArray(_ringScale$range,2);_ringScale$range2[0];var radius=_ringScale$range2[1];var tickData=function tickData(){var tickCount=0;var tickArray=[];if(typeof radialScale.ticks==="function"){var min=d3__namespace.min(radialScale.domain());var max=d3__namespace.max(radialScale.domain());tickCount=radialScale.ticks().length;var tickIncrement=(max-min)/tickCount;for(var i=0;i<=tickCount;i++){tickArray[i]=(tickIncrement*i).toFixed(0)}}else{tickArray=radialScale.domain();tickCount=tickArray.length}var tickScale=d3__namespace.scaleLinear().domain([0,tickCount]).range(radialScale.range());return tickArray.map(function(d,i){return{value:d,offset:tickScale(i)/360*100}})};var element=d3__namespace.select(this);var uId="uid-"+Math.floor(1e3+Math.random()*9e3);var labels=element.selectAll("g.".concat(classed)).data(function(){return[tickData()]});var labelsEnter=labels.enter().append("g").classed(classed,true).attr("transform",function(){var offset=typeof radialScale.ticks!=="function"?radialScale.bandwidth()/2:0;return"rotate(".concat(offset,")")}).merge(labels);var def=labelsEnter.selectAll("def").data([radius]);def.enter().append("def").append("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"}).merge(def).transition().ease(transition.ease).duration(transition.duration).select("path").attr("id",function(){return"".concat(uId,"-path")}).attr("d",function(d){var r=d*1.04;return"m0 "+-r+" a"+r+" "+r+" 0 1,1 -0.01 0"});def.exit().remove();var text=labelsEnter.selectAll(".label").data(function(d){return d});text.enter().append("text").classed("label",true).attr("font-size","0.9em").attr("color","currentColor").style("text-anchor",textAnchor).append("textPath").attr("xlink:href",function(){return"#".concat(uId,"-path")}).text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("startOffset",function(d){return d.offset+"%"}).attr("fill","currentColor").merge(text).transition().ease(transition.ease).duration(transition.duration).select("textPath").text(function(d){var text=d.value;return capitalizeLabels?text.toUpperCase():text}).attr("xlink:href",function(){return"#".concat(uId,"-path")}).attr("startOffset",function(d){return d.offset+"%"}).attr("id",function(d){return d.value});text.exit().remove()})}my.radialScale=function(_v){if(!arguments.length)return radialScale;radialScale=_v;return my};my.ringScale=function(_v){if(!arguments.length)return ringScale;ringScale=_v;return this};my.capitalizeLabels=function(_v){if(!arguments.length)return capitalizeLabels;capitalizeLabels=_v;return this};my.textAnchor=function(_v){if(!arguments.length)return textAnchor;textAnchor=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentDonut(){var classed="donut";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.startAngle,d.endAngle);return function(t){d.endAngle=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var slices=componentGroup.selectAll("path.slice").data(function(d){return pie(d.values)});slices.enter().append("path").attr("class","slice").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(slices).transition().duration(transition.duration).ease(transition.ease).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");slices.exit().remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentDonutLabels(){var classed="donutLabels";var xScale;var yScale;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),innerRadius=_xScale$range2[0],radius=_xScale$range2[1];var _yScale$range=yScale.range(),_yScale$range2=_slicedToArray(_yScale$range,2),startAngle=_yScale$range2[0],endAngle=_yScale$range2[1];var pie=d3__namespace.pie().startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).value(function(d){return d.value}).sort(null).padAngle(.015);var arc=d3__namespace.arc().innerRadius(innerRadius).outerRadius(radius);var outerArc=d3__namespace.arc().innerRadius(radius*.9).outerRadius(radius*.9);var midAngle=function midAngle(d){return d.startAngle+(d.endAngle-d.startAngle)/2};var seriesGroup=d3__namespace.select(this);var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var labelsGroup=componentGroup.selectAll("g.labels").data(function(d){return[d]});var labelsGroupEnter=labelsGroup.enter().append("g").attr("class","labels").merge(labelsGroup);var labels=labelsGroupEnter.selectAll("text.label").data(function(d){return pie(d.values)});labels.enter().append("text").attr("class","label").attr("font-size","0.9em").attr("dy",".35em").attr("fill","currentColor").merge(labels).transition().duration(transition.duration).text(function(d){return d.data.key}).attrTween("transform",function(d){this._current=this._current||d;var interpolate=d3__namespace.interpolate(this._current,d);this._current=interpolate(0);return function(t){var d2=interpolate(t);var pos=outerArc.centroid(d2);pos[0]=radius*(midAngle(d2)0){acc[1]+=value}return acc},[0,0]),_row$values$reduce2=_slicedToArray(_row$values$reduce,2),negativeSum=_row$values$reduce2[0],positiveSum=_row$values$reduce2[1];lowestNegativeSum=Math.min(lowestNegativeSum,negativeSum);highestPositiveSum=Math.max(highestPositiveSum,positiveSum)})}var finalLowestNegativeSum=lowestNegativeSum===Infinity?0:lowestNegativeSum;var finalHighestPositiveSum=highestPositiveSum===-Infinity?0:highestPositiveSum;return[finalLowestNegativeSum,finalHighestPositiveSum]}();var coordinatesMin=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.min.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.min(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesMax=function(){var ret={};if(dataType===SINGLE_SERIES){coordinateKeys.forEach(function(key){ret[key]=Math.max.apply(Math,_toConsumableArray(data.values.map(function(d){return+d[key]})))});return ret}else{data.forEach(function(item){item.values.forEach(function(value){coordinateKeys.forEach(function(key){ret[key]=key in ret?Math.max(ret[key],+value[key]):+value[key]})})})}return ret}();var coordinatesExtent=function(){var ret={};coordinateKeys.forEach(function(key){ret[key]=[coordinatesMin[key],coordinatesMax[key]]});return ret}();var decimalPlaces=function decimalPlaces(num){var match=(""+num).match(/(?:\.(\d+))?(?:[eE]([+-]?\d+))?$/);if(!match){return 0}return Math.max(0,(match[1]?match[1].length:0)-(match[2]?+match[2]:0))};var maxDecimalPlace=function(){var ret=0;if(dataType===MULTI_SERIES){data.forEach(function(item){item.values.forEach(function(value){ret=Math.max(ret,decimalPlaces(value.value))})})}return ret>20?20:ret}();var thresholds=function(){var distance=valueMax-valueMin;var bands=[.25,.5,.75,1];return bands.map(function(v){return Number((valueMin+v*distance).toFixed(maxDecimalPlace))})}();var summary=function summary(){return{dataType:dataType,rowKey:rowKey,rowTotal:rowTotal,rowKeys:rowKeys,rowTotals:rowTotals,rowTotalsMin:rowTotalsMin,rowTotalsMax:rowTotalsMax,rowValuesKeys:rowValuesKeys,columnKeys:columnKeys,columnTotals:columnTotals,columnTotalsMin:columnTotalsMin,columnTotalsMax:columnTotalsMax,valueMin:valueMin,valueMax:valueMax,valueExtent:valueExtent,valueExtentStacked:valueExtentStacked,coordinatesMin:coordinatesMin,coordinatesMax:coordinatesMax,coordinatesExtent:coordinatesExtent,maxDecimalPlace:maxDecimalPlace,thresholds:thresholds}};var rotate=function rotate(){var columnKeys=data.map(function(d){return d.key});var rowKeys=data[0].values.map(function(d){return d.key});var rotated=rowKeys.map(function(rowKey,rowIndex){var values=columnKeys.map(function(columnKey,columnIndex){var values=Object.assign({},data[columnIndex].values[rowIndex]);values.key=columnKey;return values});return{key:rowKey,values:values}});return rotated};return{summary:summary,rotate:rotate}}function componentHtmlTable(){var classed="htmlTable";var width=800;var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(data){var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys;var table=d3__namespace.select(this).selectAll("table").data(function(d){return[d]});var tableEnter=table.enter().append("table").classed("d3ez",true).classed(classed,true).attr("width",width).merge(table);tableEnter.append("thead");tableEnter.append("tfoot");tableEnter.append("tbody");var head=tableEnter.select("thead").selectAll("tr").data([columnKeys]);head.exit().remove();var headEnter=head.enter().append("tr").merge(head);var th=headEnter.selectAll("th").data(function(d){d.unshift("");return d});th.exit().remove();th.enter().append("th").merge(th).html(function(d){return d});var body=tableEnter.select("tbody").selectAll("tr").data(data);body.exit().remove();var bodyEnter=body.enter().append("tr").attr("class",function(d){return d.key}).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)}).merge(body);var td=bodyEnter.selectAll("td").data(function(d){d.values.unshift({key:d.key,value:d.key});return d.values});td.exit().remove();td.enter().append("td").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(td).html(function(d){return d.value})})}my.classed=function(_v){if(!arguments.length)return classed;classed=_v;return this};my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentLegendSize(){var width=100;var height=150;var sizeScale;var itemCount=4;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domainMin=parseFloat(d3__namespace.min(sizeScale.domain()));var domainMax=parseFloat(d3__namespace.max(sizeScale.domain()));var increment=(domainMax-domainMin)/itemCount;var ranges=Array(itemCount).fill().map(function(v,i){var rangeStart=domainMin+increment*i;var rangeEnd=domainMin+increment*(i+1);return[rangeStart,rangeEnd]});var yStep=height/(itemCount*2);var yDomain=[0,itemCount-1];var yRange=[yStep,height-yStep];var yScale=d3__namespace.scaleLinear().domain(yDomain).range(yRange);return ranges.map(function(v,i){return{x:sizeScale(domainMax),y:yScale(i),r:sizeScale(ranges[i][0]),text:v[0].toFixed(0)+" — "+v[1].toFixed(0)}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();itemsEnter.append("circle").attr("r",function(d){return d.r}).attr("cx",function(d){return d.x}).attr("fill","#cad4e7").attr("stroke","#cad4e7").attr("stroke-width",1).attr("fill-opacity",opacity);itemsEnter.append("text").attr("font-size","0.9em").attr("fill","currentColor").attr("dominant-baseline","middle").attr("x",function(d){return d.x*2+5}).text(function(d){return d.text});var itemsTrans=items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")});itemsTrans.select("text").text(function(d){return d.text});itemsTrans.select("circle").attr("fill-opacity",opacity)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.itemCount=function(_v){if(!arguments.length)return itemCount;itemCount=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendCategorical(){var width=100;var height=150;var colorScale;var itemCount;var itemType="rect";var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var cornerRadius=2;function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var data=function(){var domain=colorScale.domain();itemCount=domain.length;var itemHeight=height/itemCount/2;var itemWidth=20;return domain.map(function(v,i){return{y:10+itemHeight*2*i,width:itemWidth,height:itemHeight,color:colorScale(v),text:v}})}();var legendContainer=selection.selectAll(".legendContainer").data([data]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var items=legendContainerEnter.selectAll(".legendItem").data(function(d){return d});var itemsEnter=items.enter().append("g").classed("legendItem",true).attr("transform",function(d){return"translate(0,".concat(d.y,")")});items.exit().remove();switch(itemType){case"line":itemsEnter.append("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);items.transition().ease(transition.ease).duration(transition.duration).select("line").attr("x1",0).attr("y1",function(d){return d.height/2}).attr("x2",function(d){return d.width}).attr("y2",function(d){return d.height/2}).attr("stroke",function(d){return d.color}).attr("stroke-width",2);break;case"rect":default:itemsEnter.append("rect").attr("rx",cornerRadius).attr("ry",cornerRadius).attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);items.transition().ease(transition.ease).duration(transition.duration).select("rect").attr("width",function(d){return d.width}).attr("height",function(d){return d.height}).style("fill",function(d){return d.color}).attr("fill-opacity",opacity).attr("stroke",function(d){return d.color}).attr("stroke-width",1);break}itemsEnter.append("text").attr("font-size","0.9em").text(function(d){return d.text}).attr("dominant-baseline","middle").attr("x",40).attr("y",function(d){return d.height/2}).attr("fill","currentColor");items.transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){return"translate(0,".concat(d.y,")")}).select("text").text(function(d){return d.text}).attr("y",function(d){return d.height/2})}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegendThreshold(){var width=100;var height=150;var thresholdScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");var domainMin=d3__namespace.min(thresholdScale.domain());var domainMax=d3__namespace.max(thresholdScale.domain());var domainMargin=(domainMax-domainMin)*.1;var x=d3__namespace.scaleLinear().domain([domainMin-domainMargin,domainMax+domainMargin]).range([0,height]);var legendContainer=selection.selectAll(".legendContainer").data([0]);var legendContainerEnter=legendContainer.enter().append("g").classed("legendContainer",true).attr("width",width).attr("height",height).merge(legendContainer);var axis=d3__namespace.axisRight(x).tickSize(30).tickValues(thresholdScale.domain());legendContainerEnter.transition().ease(transition.ease).duration(transition.duration).call(axis).selectAll(".domain").attr("opacity",0);var colors=legendContainerEnter.selectAll("rect").data(thresholdScale.range().map(function(color){var d=thresholdScale.invertExtent(color);if(typeof d[0]==="undefined")d[0]=x.domain()[0];if(typeof d[1]==="undefined")d[1]=x.domain()[1];return d}));colors.enter().append("rect").merge(colors).transition().ease(transition.ease).duration(transition.duration).attr("width",20).attr("y",function(d){return x(d[0])}).attr("height",function(d){return x(d[1])-x(d[0])}).style("fill",function(d){return thresholdScale(d[0])}).attr("fill-opacity",opacity).attr("stroke",function(d){return thresholdScale(d[0])}).attr("stroke-width",1)}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.thresholdScale=function(_v){if(!arguments.length)return thresholdScale;thresholdScale=_v;return my};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLegend(){var width=100;var height=150;var margin={top:35,right:10,bottom:10,left:10};var sizeScale;var colorScale;var title="Key";var legend;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var itemType="rect";function my(selection){height=height?height:this.attr("height");width=width?width:this.attr("width");if(typeof sizeScale!=="undefined"){legend=componentLegendSize().sizeScale(sizeScale).itemCount(4)}if(typeof colorScale!=="undefined"){if(scaleType(colorScale)==="threshold"){legend=componentLegendThreshold().thresholdScale(colorScale)}else{legend=componentLegendCategorical().colorScale(colorScale).itemType(itemType)}}legend.opacity(opacity).transition(transition);var legendBox=selection.selectAll(".legendBox").data([0]);var legendBoxEnter=legendBox.enter().append("g").attr("class","legendBox");legendBoxEnter.append("rect").classed("legendBorder",true).attr("width",width).attr("height",height).attr("fill-opacity",0).attr("stroke-width",1).attr("stroke","currentcolor");legendBox.transition().ease(transition.ease).duration(transition.duration).selectAll(".legendBorder").attr("width",width).attr("height",height);legendBoxEnter.append("g").classed("legendTitle",true).attr("transform","translate(10,10)").append("text").style("font-weight","bold").attr("dominant-baseline","hanging").attr("fill","currentColor").text(title);legend.width(width-(margin.left+margin.right)).height(height-(margin.top+margin.bottom));legendBoxEnter.append("g").classed("legendBox",true).attr("transform","translate(".concat(margin.left,",").concat(margin.top,")")).call(legend);legendBox.selectAll(".legendBox").call(legend)}function scaleType(scale){var s=scale.copy();if(s.domain([1,2]).range([1,2])(1.5)===1){return"ordinal"}else if(typeof s.invert!=="function"){return"threshold"}else if(s.domain([1,2]).range([1,2]).invert(1.5)===1.5){return"linear"}else if(s.domain([1,2]).range([1,2]).invert(1.5)instanceof Date){return"time"}else{return"not supported"}}my.width=function(_v){if(!arguments.length)return width;width=_v;return my};my.height=function(_v){if(!arguments.length)return height;height=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.title=function(_v){if(!arguments.length)return title;title=_v;return my};my.itemType=function(_v){if(!arguments.length)return itemType;itemType=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};return my}function componentLineChart(){var classed="lineChart";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){var line=d3__namespace.line().curve(d3__namespace.curveCardinal).x(function(d){return xScale(d.key)}).y(function(d){return yScale(d.value)});var pathTween=function pathTween(d){var i=d3__namespace.interpolate(1,d.length+1);return function(t){return line(d.slice(0,i(t)))}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll(".line").data(function(d){return[d]});path.enter().append("path").attr("class","line").attr("stroke-width",1.5).attr("fill","none").attr("d",function(d){return line(d.values)}).merge(path).transition().duration(transition.duration).attrTween("d",function(d){return pathTween(d.values)}).attr("stroke",function(d){return colorScale(d.key)}).attr("opacity",opacity);path.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentNumberCard(){var classed="numberCard";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var numbers=componentGroup.selectAll(".number").data(function(d){return d.values});numbers.enter().append("text").attr("class","number").attr("text-anchor","middle").attr("dominant-baseline","central").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(numbers).transition().ease(transition.ease).duration(transition.duration).text(function(d){return d["value"]}).attr("fill",function(d){return colorScale(d.value)}).attr("x",function(d){return xScale(d.key)+cellWidth/2}).attr("y",cellHeight/2);numbers.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentPolarArea(){var classed="polarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(){var _xScale$range=xScale.range(),_xScale$range2=_slicedToArray(_xScale$range,2),startAngle=_xScale$range2[0],endAngle=_xScale$range2[1];var pie=d3__namespace.pie().value(1).sort(null).startAngle(startAngle*Math.PI/180).endAngle(endAngle*Math.PI/180).padAngle(0);var arc=d3__namespace.arc().outerRadius(function(d){return yScale(d.data.value)}).innerRadius(0).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(0,d.data.value);return function(t){d.data.value=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var segments=componentGroup.selectAll(".segment").data(function(d){return pie(d.values)});segments.enter().append("path").classed("segment",true).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d.data)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d.data)}).merge(segments).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).style("fill",function(d){return colorScale(d.data.key)}).attr("fill-opacity",opacity).attr("stroke",function(d){return colorScale(d.data.key)}).attr("stroke-width","1px");segments.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentProportionalAreaCircles(){var classed="proportionalAreaCircles";var xScale;var yScale;var colorScale;var sizeScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(){var cellHeight=yScale.bandwidth();var cellWidth=xScale.bandwidth();var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var spot=componentLabeledNode().radius(function(d){return sizeScale(d.value)}).color(function(d){return colorScale(d.value)}).label(function(d){return d.value}).display("none").opacity(opacity).stroke(1,"currentColor").dispatch(dispatch).transition(transition);var spots=componentGroup.selectAll(".punchSpot").data(function(d){return d.values});spots.enter().append("g").classed("punchSpot",true).on("mouseover",function(e,d){d3__namespace.select(this).select("text").style("display","block");dispatch.call("customValueMouseOver",this,e,d)}).on("mouseout",function(){d3__namespace.select(this).select("text").style("display","none")}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).merge(spots).transition().ease(transition.ease).duration(transition.duration).attr("transform",function(d){var x=cellWidth/2+xScale(d.key);var y=cellHeight/2;return"translate(".concat(x,",").concat(y,")")}).call(spot);spots.exit().transition().ease(transition.ease).duration(transition.duration).style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.sizeScale=function(_v){if(!arguments.length)return sizeScale;sizeScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRadarArea(){var classed="radarArea";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var opacity=1;function my(selection){selection.each(function(data){var angleSlice=Math.PI*2/data.values.length;var radarLine=d3__namespace.lineRadial().radius(function(d){return yScale(d.value)}).angle(function(d,i){return i*angleSlice}).curve(d3__namespace.curveBasis).curve(d3__namespace.curveCardinalClosed);var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var path=componentGroup.selectAll("path").data(function(d){return[d]});path.enter().append("path").on("mouseover",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity)}).on("mouseout",function(){d3__namespace.select(this).transition().duration(200).style("fill-opacity",opacity/2)}).merge(path).transition().ease(transition.ease).duration(transition.duration).style("fill-opacity",opacity/2).attr("d",function(d){return radarLine(d.values)});var dots=componentGroup.selectAll("circle").data(function(d){return d.values});dots.enter().append("circle").attr("class","radarCircle").attr("r",4).style("fill-opacity",.8).merge(dots).attr("cx",function(d,i){return yScale(d.value)*Math.cos(angleSlice*i-Math.PI/2)}).attr("cy",function(d,i){return yScale(d.value)*Math.sin(angleSlice*i-Math.PI/2)})})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentRoseChartSector(){var classed="roseChartSector";var xScale;var yScale;var colorScale;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var stacked=false;var opacity=1;var cornerRadius=2;function my(selection){selection.each(function(data){var stacker=function stacker(data){var series=[];var innerRadius=0;var outerRadius=0;data.forEach(function(d,i){outerRadius=innerRadius+d.value;series[i]={key:d.key,value:d.value,innerRadius:yScale(innerRadius),outerRadius:yScale(outerRadius)};innerRadius+=stacked?d.value:0});return series};var startAngle=xScale(data.key);var endAngle=xScale(data.key)+xScale.bandwidth();var arc=d3__namespace.arc().innerRadius(function(d){return d.innerRadius}).outerRadius(function(d){return d.outerRadius}).startAngle(startAngle*(Math.PI/180)).endAngle(endAngle*(Math.PI/180)).cornerRadius(cornerRadius);var arcTween=function arcTween(d){var i=d3__namespace.interpolate(d.innerRadius,d.outerRadius);return function(t){d.outerRadius=i(t);return arc(d)}};var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var arcs=componentGroup.selectAll(".arc").data(function(d){return stacker(d.values)});arcs.enter().append("path").classed("arc",true).attr("stroke-width","1px").on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(arcs).transition().ease(transition.ease).duration(transition.duration).attr("d",arc).attrTween("d",arcTween).attr("fill",function(d){return colorScale(d.key)}).attr("stroke",function(d){return colorScale(d.key)}).attr("fill-opacity",opacity);arcs.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentScatterPlot(){var classed="scatterPlot";var xScale;var yScale;var colorScale;var opacity=1;var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");function my(selection){selection.each(function(){d3__namespace.max(yScale.range());var seriesGroup=d3__namespace.select(this).on("mouseover",function(e,d){dispatch.call("customSeriesMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customSeriesClick",this,e,d)});var componentGroup=seriesGroup.selectAll("g.".concat(classed)).data(function(d){return[d]}).enter().append("g").classed(classed,true).merge(seriesGroup);var dots=componentGroup.attr("fill",function(d){return colorScale(d.key)}).selectAll(".dot").data(function(d){return d.values});dots.enter().append("circle").attr("class","dot").attr("r",3).attr("cx",0).attr("cy",function(d){return yScale(d.value)}).on("mouseover",function(e,d){dispatch.call("customValueMouseOver",this,e,d)}).on("click",function(e,d){dispatch.call("customValueClick",this,e,d)}).merge(dots).transition().ease(transition.ease).duration(transition.duration).attr("cx",function(d){return xScale(d.key)}).attr("cy",function(d){return yScale(d.value)}).attr("opacity",opacity);dots.exit().transition().style("opacity",0).remove()})}my.xScale=function(_v){if(!arguments.length)return xScale;xScale=_v;return my};my.yScale=function(_v){if(!arguments.length)return yScale;yScale=_v;return my};my.colorScale=function(_v){if(!arguments.length)return colorScale;colorScale=_v;return my};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function componentTitle(){var mainText="Title";var subText="Sub Title";var height=40;var width=200;function my(selection){selection.selectAll("#titleGroup").data([0]).enter().append("g").attr("id","titleGroup");var titleGroup=selection.select("#titleGroup");titleGroup.selectAll(".title").data([mainText]).enter().append("text").classed("title",true).text(function(d){return d}).attr("fill","currentColor");var title=titleGroup.select(".title").text(mainText);titleGroup.selectAll(".subTitle").data([subText]).enter().append("text").classed("subTitle",true).text(function(d){return d}).attr("fill","currentColor");var subTitle=titleGroup.select(".subTitle").text(subText);title.style("text-anchor","middle").attr("transform","translate(0, 15)");subTitle.style("text-anchor","middle").attr("transform","translate(0, 30)")}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.mainText=function(_v){if(!arguments.length)return mainText;mainText=_v;return this};my.subText=function(_v){if(!arguments.length)return subText;subText=_v;return this};return my}var component={barsCircular:componentBarsCircular,barsHorizontal:componentBarsHorizontal,barsVertical:componentBarsVertical,barsVerticalStacked:componentBarsVerticalStacked,bubbles:componentBubbles,candleSticks:componentCandleSticks,circularAxis:componentCircularAxis,circularRingLabels:componentCircularRingLabels,circularSectorLabels:componentCircularSectorLabels,donut:componentDonut,donutLabels:componentDonutLabels,heatMapRing:componentHeatMapRing,heatMapRow:componentHeatMapRow,htmlList:componentHtmlList,htmlTable:componentHtmlTable,labeledNode:componentLabeledNode,legend:componentLegend,legendSize:componentLegendSize,legendColor:componentLegendCategorical,legendThreshold:componentLegendThreshold,lineChart:componentLineChart,numberCard:componentNumberCard,polarArea:componentPolarArea,proportionalAreaCircles:componentProportionalAreaCircles,radarArea:componentRadarArea,roseChartSector:componentRoseChartSector,scatterPlot:componentScatterPlot,title:componentTitle};var palette={categorical:function categorical(index){switch(index){case 1:return["#5da5da","#faa43a","#60bd68","#f17cb0","#b2912f","#b276b2","#decf3f","#f15854","#4d4d4d"];case 2:return["#fbb4ae","#b3cde3","#ccebc5","#decbe4","#fed9a6","#ffffcc","#e5d8bd","#fddaec","#f2f2f2"];case 3:return["#3f51b5","#ff9800","#8bc34a","#9c27b0","#ffeb3b","#03a9f4","#f44336","#009688","#795548"]}},diverging:function diverging(index){switch(index){case 1:return["#8c510a","#bf812d","#dfc27d","#f6e8c3","#f5f5f5","#c7eae5","#80cdc1","#35978f","#01665e"];case 2:return["#d73027","#f46d43","#fdae61","#fee08b","#ffffbf","#d9ef8b","#a6d96a","#66bd63","#1a9850"];case 3:return["#0000ff","#8052fe","#b58bfb","#ddc5f7","#fffff0","#ffcfb4","#ff9e7a","#ff6842","#ff0000"]}},sequential:function sequential(origHex,count){var lumStep=.1;var lumMax=lumStep*count/2;var lumMin=0-lumMax;var lumScale=d3__namespace.scaleLinear().domain([1,count]).range([lumMin,lumMax]);var result=[];for(var i=1;i<=count;i++){var lum=lumScale(i);origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}var newHex="#";var c=void 0;for(var j=0;j<3;j++){c=parseInt(origHex.substr(j*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result.push(newHex)}return result},lumShift:function lumShift(colors,lum){var result=[];colors.forEach(function addNumber(origHex,index){origHex=String(origHex).replace(/[^0-9a-f]/gi,"");if(origHex.length<6){origHex=origHex[0]+origHex[0]+origHex[1]+origHex[1]+origHex[2]+origHex[2]}lum=lum||0;var newHex="#";for(var i=0;i<3;i++){var c=parseInt(origHex.substr(i*2,2),16);c=Math.round(Math.min(Math.max(0,c+c*lum),255)).toString(16);newHex+=("00"+c).substr(c.length)}result[index]=newHex});return result}};function chartBarChartCircular(){var classed="barChartCircular";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=270;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var innerRadius=radius/4;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([innerRadius,radius]).padding(.15);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartW]).padding(.05);var xScale=d3__namespace.scaleBand().domain(columnKeys).range([0,xScale2.bandwidth()]).padding(.05);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=stacked?component.barsVerticalStacked().xScale(xScale2):component.barsVertical().xScale(xScale);componentBars.colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale2(d.key),",").concat(chartH-yScale(valueMin),")")}).call(componentBars);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale2);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBarChartHorizontal(){var classed="barChart";var width=700;var height=400;var margin={top:40,right:40,bottom:70,left:70};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var stacked=false;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent,valueExtentStacked=_dataTransform$summar.valueExtentStacked;var _valueExtent=_slicedToArray(valueExtent,2),valueMin=_valueExtent[0],valueMax=_valueExtent[1];if(stacked){var _valueExtentStacked=_slicedToArray(valueExtentStacked,2);valueMin=_valueExtentStacked[0];valueMax=_valueExtentStacked[1]}else{valueMin=valueMin>0?0:valueMin}var yDomain=[valueMin,valueMax];var xScale=d3__namespace.scaleLinear().domain(yDomain).range([0,chartW]);var yScale2=d3__namespace.scaleBand().domain(rowKeys).range([0,chartH]).padding(.1);var yScale=d3__namespace.scaleBand().domain(columnKeys).range([0,yScale2.bandwidth()]).padding(.15);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBars=component.barsHorizontal().xScale(xScale).colorScale(colorScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").classed("series",true).merge(series).attr("transform",function(d){return"translate(".concat(xScale(valueMin),",").concat(yScale2(d.key),")")}).call(componentBars);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale2);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("rect").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.stacked=function(_v){if(!arguments.length)return stacked;stacked=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartBubbleChart(){var classed="bubbleChart";var width=700;var height=400;var margin={top:40,right:40,bottom:70,left:70};var colors=palette.categorical(1);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var legendTitle="Key";var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;var minRadius=3;var maxRadius=20;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var _dataTransform$summar=dataTransform(data).summary(),rowKeys=_dataTransform$summar.rowKeys,_dataTransform$summar2=_dataTransform$summar.coordinatesExtent,xExtent=_dataTransform$summar2.x,yExtent=_dataTransform$summar2.y,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleLinear().domain(xExtent).range([0,chartW]).nice();var yScale=d3__namespace.scaleLinear().domain(yExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var sizeScale=d3__namespace.scaleLinear().domain(valueExtent).range([minRadius,maxRadius]);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentBubbles=component.bubbles().xScale(xScale).yScale(yScale).colorScale(colorScale).sizeScale(sizeScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentBubbles);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");chartSelect.select(".yAxis").call(yAxis)}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);var yScaleZoomed=e.transform.rescaleY(yScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");yAxis.scale(yScaleZoomed);chartSelect.select(".yAxis").call(yAxis)}componentBubbles.xScale(xScaleZoomed).yScale(yScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentBubbles)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().title(legendTitle).sizeScale(sizeScale).height(legendH).width(legendW).opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartCandlestickChart(){var classed="candlestickChart";var width=700;var height=400;var margin={top:40,right:40,bottom:70,left:70};var colors=["green","red"];var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var yAxisLabel=null;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);data=data[0];data.values.forEach(function(d,i){data.values[i].date=Date.parse(d.date)});var maxDate=d3__namespace.max(data.values,function(d){return d.date});var minDate=d3__namespace.min(data.values,function(d){return d.date});var ONE_DAY_IN_MILLISECONDS=864e5;var dateDomain=[new Date(minDate-ONE_DAY_IN_MILLISECONDS),new Date(maxDate+ONE_DAY_IN_MILLISECONDS)];var yDomain=[d3__namespace.min(data.values,function(d){return d.low}),d3__namespace.max(data.values,function(d){return d.high})];var xScale=d3__namespace.scaleTime().domain(dateDomain).range([0,chartW]);var yScale=d3__namespace.scaleLinear().domain(yDomain).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain([true,false]).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentCandleSticks=component.candleSticks().xScale(xScale).yScale(yScale).colorScale(colorScale).dispatch(dispatch).opacity(opacity).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data([data]);series.enter().append("g").attr("class","series").merge(series).call(componentCandleSticks);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale).tickFormat(d3__namespace.timeFormat("%d-%b-%y"));var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis).selectAll("text").style("text-anchor","end").attr("dx","-.8em").attr("dy",".15em").attr("transform","rotate(-65)");chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").transition().text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}function brushStart(e){console.log(e)}function brushEnd(e){console.log(e)}var brush=d3__namespace.brushX().extent([[0,0],[chartW,chartH]]).on("brush start",brushStart).on("brush end",brushEnd);chartSelect.select(".zoomArea").call(brush);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartDonutChart(){var classed="donutChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var innerRadius=radius/2;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueExtent=_dataTransform$summar.valueExtent;var xScale=d3__namespace.scaleBand().domain(columnKeys).range([innerRadius,radius]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([startAngle,endAngle]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i0?0:valueMin;var valueExtent=[valueMin,valueMax];var xScale=d3__namespace.scalePoint().domain(columnKeys).range([0,chartW]);{data.forEach(function(d,i){d.values.forEach(function(b,j){data[i].values[j].key=new Date(b.key)})});var dateExtent=d3__namespace.extent(data[0].values,function(d){return d.key});xScale=d3__namespace.scaleTime().domain(dateExtent).range([0,chartW])}var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([chartH,0]).nice();var colorScale=d3__namespace.scaleOrdinal().domain(rowKeys).range(colors);var mainLayers=["title","chart","legend"];svg.classed("d3ez",true).attr("width",width).attr("height",height).selectAll("g").data(mainLayers).enter().append("g").attr("class",function(d){return d});var titleSelect=svg.select(".title");var chartSelect=svg.select(".chart");var legendSelect=svg.select(".legend");var chartLayers=["xAxis axis","yAxis axis","seriesGroup","zoomArea","clipArea"];chartSelect.classed(classed,true).attr("width",chartW).attr("height",chartH).attr("transform","translate(".concat(margin.left,",").concat(margin.top+titleH,")")).selectAll("g").data(chartLayers).enter().append("g").attr("class",function(d){return d});var componentLineChart=component.lineChart().colorScale(colorScale).xScale(xScale).yScale(yScale).opacity(opacity).dispatch(dispatch).transition(transition);var componentScatterPlot=component.scatterPlot().colorScale(colorScale).yScale(yScale).xScale(xScale).opacity(opacity).dispatch(dispatch).transition(transition);var series=chartSelect.select(".seriesGroup").selectAll(".series").data(data);series.enter().append("g").attr("class","series").attr("clip-path","url(#plotAreaClip)").merge(series).call(componentLineChart).call(componentScatterPlot);series.exit().remove();var xAxis=d3__namespace.axisBottom(xScale);var yAxis=d3__namespace.axisLeft(yScale);if(showAxis){chartSelect.select(".xAxis").attr("transform","translate(0,".concat(chartH,")")).call(xAxis);chartSelect.select(".yAxis").call(yAxis);chartSelect.select(".yAxis").selectAll(".yAxisLabel").data([yAxisLabel]).enter().append("text").classed("yAxisLabel",true).attr("transform","rotate(-90)").attr("y",-40).attr("dy",".71em").attr("fill","currentColor").style("text-anchor","end").text(function(d){return d})}else{chartSelect.selectAll(".axis").selectAll("*").remove()}var clipPath=chartSelect.select(".clipArea").selectAll("defs").data([0]);clipPath.enter().append("defs").append("clipPath").attr("id","plotAreaClip").append("rect").attr("width",chartW).attr("height",chartH).merge(clipPath).select("clipPath").select("rect").attr("width",chartW).attr("height",chartH);var zoom=d3__namespace.zoom().extent([[0,0],[chartW,chartH]]).scaleExtent([1,8]).translateExtent([[0,0],[chartW,chartH]]).on("zoom",zoomed);function zoomed(e){var xScaleZoomed=e.transform.rescaleX(xScale);if(showAxis){xAxis.scale(xScaleZoomed);chartSelect.select(".xAxis").call(xAxis)}componentLineChart.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});componentScatterPlot.xScale(xScaleZoomed).transition({ease:d3__namespace.easeLinear,duration:0});chartSelect.select(".seriesGroup").selectAll(".series").call(componentLineChart).call(componentScatterPlot)}var zoomArea=chartSelect.select(".zoomArea").selectAll("rect").data([0]);zoomArea.enter().append("rect").attr("fill","none").attr("pointer-events","all").merge(zoomArea).call(zoom).attr("width",chartW).attr("height",chartH);if(title){var componentTitle=component.title().mainText(title).subText(subTitle);titleSelect.attr("transform","translate(".concat(width/2,",").concat(margin.top,")")).call(componentTitle)}else{titleSelect.selectAll("*").remove()}if(showLegend){var componentLegend=component.legend().colorScale(colorScale).height(legendH).width(legendW).itemType("line").opacity(opacity);legendSelect.attr("transform","translate(".concat(margin.left+chartW+legendPad,",").concat(margin.top,")")).call(componentLegend)}else{legendSelect.selectAll("*").remove()}})}my.width=function(_v){if(!arguments.length)return width;width=_v;return this};my.height=function(_v){if(!arguments.length)return height;height=_v;return this};my.margin=function(_v){if(!arguments.length)return margin;margin=_v;return this};my.colors=function(_v){if(!arguments.length)return colors;colors=_v;return this};my.showLegend=function(_v){if(!arguments.length)return showLegend;showLegend=_v;return this};my.title=function(_v){if(!arguments.length)return title;title=_v;return this};my.subTitle=function(_v){if(!arguments.length)return subTitle;subTitle=_v;return this};my.opacity=function(_v){if(!arguments.length)return opacity;opacity=_v;return this};my.showAxis=function(_v){if(!arguments.length)return showAxis;showAxis=_v;return this};my.yAxisLabel=function(_v){if(!arguments.length)return yAxisLabel;yAxisLabel=_v;return this};my.transition=function(_v){if(!arguments.length)return transition;transition=_v;return this};my.dispatch=function(_v){if(!arguments.length)return dispatch();dispatch=_v;return this};my.on=function(){var value=dispatch.on.apply(dispatch,arguments);return value===dispatch?my:value};return my}function chartPolarAreaChart(){var classed="polarAreaChart";var width=700;var height=400;var margin={top:40,right:40,bottom:40,left:40};var colors=palette.categorical(3);var transition={ease:d3__namespace.easeLinear,duration:0};var dispatch=d3__namespace.dispatch("customValueMouseOver","customValueMouseOut","customValueClick","customSeriesMouseOver","customSeriesMouseOut","customSeriesClick");var title=null;var subTitle=null;var opacity=1;var showLegend=false;var showAxis=true;var startAngle=0;var endAngle=360;function my(selection){var svg=function(selection){var el=selection._groups[0][0];if(!!el.ownerSVGElement||el.tagName==="svg"){return selection}else{var svgSelection=selection.selectAll("svg").data(function(d){return[d]});return svgSelection.enter().append("svg").merge(svgSelection)}}(selection);selection.each(function(data){var legendW=showLegend?120:0;var legendH=Math.max(height/2.5,100);var legendPad=showLegend?15:0;var titleH=title?40:0;var chartW=Math.max(width-margin.left-legendPad-legendW-margin.right,100);var chartH=Math.max(height-margin.top-titleH-margin.bottom,100);var radius=Math.min(chartW,chartH)/data.length/2.3;var _dataTransform$summar=dataTransform(data).summary(),columnKeys=_dataTransform$summar.columnKeys,valueMax=_dataTransform$summar.valueMax;var valueExtent=[0,valueMax];var xScale=d3__namespace.scaleBand().domain(columnKeys).rangeRound([startAngle,endAngle]);var yScale=d3__namespace.scaleLinear().domain(valueExtent).range([0,radius]);var colorScale=d3__namespace.scaleOrdinal().domain(columnKeys).range(colors);function generateLayout(cellCount,width,height){var layout=[];var cols=Math.ceil(Math.sqrt(cellCount));var rows=Math.ceil(cellCount/cols);var cellWidth=width/cols;var cellHeight=height/rows;var index=0;for(var i=0;i>0c4W4U@6jm8f|KoV>aU<05{eQUSo%n+y&8AK7Uq9R`rlT-D@xsX{&5GQ6^yrayJ3amw4vO2}|M@>2 ziyo%II1arZF&3*kiIOn5?LB4@9g&@v-N?d!j-xDW+zxhbH=ABx)I>AWig?pVRWzdG z4+AKdel!j-`;pROD2I^&b+HoZ_xrObw=__R?6VK=kAFYBJd96Tyhl304wNQ;L;SzK zwq!sj{Gw1Mf}73e-Va}!jRFdXvSdF)l=m-a2Mk1BWD#`b-VZ)vQ#j2btaFlP z&;7xf(tngsEFsDDiS|!GtGmskNQHr{@H8ymoF{Lgg<)1qpN07#i$*|tBW!t}NE2ku zw5NI6Mgl2XUVug5AVQb3DsF|zco=5>aUAx&A{&P-77i)&{OfKD_K4GifXD*!V?z74XxH}+`YXIOziz@K^;bGOs&+~qL=>pvt9;-2kz&;5Mr zy$i=V_J+5A=4XZXDmu>mY|1mSbxezc#oXTRba@;M_Ia8GxY!PXVra)ki~eoX)kr@- zM}PU)kE1U>)=Yy2SQY(wn)#zMmd`JI`YZo@DuX^pUp9WYb;K$?ONZgeKP7~p6~(B( zwMFPhR>d1eSsZP%!RH#4e6GoJXW=N#BV1vSA7>4&?!LEi8qp??v$#*|&Y^M$JsTf) z2I+8%6di{lFPt?D^TDXI(vQcdIV*R;f`7K6JRgU-QWiE0X=J_4LQkSNlw%U*#nzoW zTX#AibJn-nKm^EcWqcJ1!}tiQonQhU>qkjd+{Zi!zJCiJ z`t>$`ke+%EKcM8>-X9*swEb*A+dxYU(m{^RfPP2^UVGpT(&QvM-6G!|{D8cC;s@a< zPNyPIG8%f>IPqjjxc{7ets5?LZCGnL?I__<1felaTsq6(k#Sc z|NDMt`)+5KR>|T<@%S`K+TjG)N`KjWjGD%Mo-6O2cmWK2;P0|Bq zWlNHzLD+^$)A%#(u-?>$QWY~GTI#xG=IdPZ49H? zY2`Fs52&MM^0`Fnhw5oC&OHp-?cC>mP^5ldv`JkoahI1dK8>T3Da4V89W0%8%IEYv z$DnTK0W?gVK&9Ce?9fhs2(6U~M`4&*rdmZ}fA9&q=ihU(wO~5joBCvjBCVmDQeW;) z7^-YYeRX%jIJWQfKI54r1o&g0a7i`=2uJJ--bl6$WPyFk3CTR846iRaABHlX z)#uEM_LH{g`z9BlY4ikotT~wd((sb8{NWbxyB}_W{4RxpC>xAp7=PlY@INXc?5D7< zlQ1bTB}x4k+7tMDOA#*zJR#)GML`WB?Rg;Xcuc18nAC=|3=8l)oKu4scuk1X;Ks3% zANLEIU~(|<<4}A~_0K^XrUoxouyq2 z_$o?-&1vKpgEJ^kFMonZG&Tm~yhw+C_2Y5)It4-e4J?6;mRAlR7e??tO#M$X>>$jb zgDhpJ5o#ecoR-oQO-`YGQGudOPwA^H3A1;85RGx2Z{tkB0lGuTzXKzlfch{-t%HWJ zaL@{k2v9HM$j?1>#CXie&-|hHFVJE@=LyLa`Ra+EUfX+r7Jqs~GK6&;gWThRh$`Yc zv=}ly#0(ow8zMoI52?%&>MDpxL8;CQsOm{_O2i(0_(0NV(D~GXIdd8|noZg#_-|{= zdy);jUqk3KpHt4t1b$vB48j`Cj;yVrRD8#K?H6aAw=cadulJza?7)Jgi4-MHX}8C9 z656^((D{s0rGIG_w8t}iZFW-FdfDL4D|Nz41@_wXHraRQ*iVAXE?sRIYV2`-%0Gh=Rd8Q|LkwV1rY& z>Rc;r#@}G7X*+mD`E+!U{ANeWCeR5efHY(X`G1CfW>Sb6!^5ECK+9@u1W+3+fBH!o zArB*8JRQigu|}13)T9h$;oP#IHj^o!K=zBrf^d+cYQ2VvXi;sl4WW$F8%;LMIW&oi zhS8OIF@-`mWD8-B&B7tf9I=})1t3MH!Ngy^51&Dh zL4Uc0Y@9q9B{TQ_b?2)h#tf$&x-Y65SmVQI(L-n|{n5`($3s{ic_$8&)8eeD@2QLk zQP79aEQF;RPWPD1s+0GRiy&{h0(n!Fyy>Fk?ck=v_@N&c&+KT6C1=c0{ z4U_Hb5S)yM$6?0EoRZ-7j1n#1yJ04P=n+pFJOuYlMpRR8C(HXt=Emd4sejj} zF`R^3`f~khv#z{Iv*=5j6n?z2eMKp1Nehd!tXvh#iX3apF81ARD^9C)TID6xDl@30 zN~@fqX0W(y0wJ1>ibqUK5!XdWr36l>;zU2D^YyvuY+ddwMEnpGGcDN{zlm0S^|W0+ z|7;y}A)}x-qpo$A8l$V1qeVeqW`9(dSL*+U1TC%~(QHxTjVALYX3}ZPiOVD_qktDv zUrc^M26S=iSiYL%(P^_BeKaqlM-)__!W*g86Qc84^ghWlf69m@zrFN?R62$N#whC_ zPnYO|d{0qZAl;K>^Y4Qv|YUyo!@; z3mpNElZy)(1Hb%*lcx(H0gsc&3oQaaHk0=Yg(>^sW7OZG;_O8lhdHKc;`FgkSY84q z7$^C7gs{3Wc&Vq=k|k-vqu+&-r3@$!;_Hc&*okska#L^itLT%H+zcH7ACvkF9R^on zqO|$PlN}8!QwJ>&lbVu$(rRgL(ral)u_QN1*;-HsEw5(&*Zyb&dz5{`&c0#m!n9QJ z6TV52>|6icc-;Rz`r~CYDd5+GKYI86*x7Ev&;8gRj>4e%n3VRXlba130mhTK4Icp+ zlh_R%3J){jd6uPFW8-C${|z4j36mcV8UaI-Iu0R!#iO#p8V=<|LGDQInjgvWk+x{= zm*GI}9lZn_;Oc=^A}+gtwHBVjP{TSw3V3SlqYuH(pYWy-L7^J+g#>eSbdchuheorh zfMjK6WR`}QCnHA;|5D2BzDe%*1rNGfQ`7 zshnAVmS=!Fxx9iWm*SACYo2M9?>4BXoy*>5kcV@$=5KPIxt<2ro1!4wcD={^EV0}4 z`sUq}>eI{WE*8VGOe1*Urq~d$RgCSot5QWt#ewb>IT^leN2%_7<|?1h+{lwucPQl! zrQD&^r9PCZw#6J2{@@d6up;^>yp=9GQu^Csjuck$Z zCj#x9jGX<#eNF~7Q`r~`YM>sj3E9$&Lk^1f^q6TEjr?X{&lZ?ilO|?bY=FfRS|HCk z`9Itt6jjHFC4KO+xSe~xX0n4hdLDY`K8$HZ?C7Vd7o_KGZi;`jVff!ou21dhDQKsE z&_fHO=E{rkV)XjF&{FiY*T=pphj%f&rw4!CGh5yDHXm6V{FNTWSN0L{>oTK{#v`+b zNC$N8%F%!n8`@y%ecwyfe0e)(F}~SKPAS` zI0aEt#GIr_aS(mM@#}T3wu!U3y1h{uMa#DKP3??mC&O`gG8lw;&aGt9Dh6>ps_{Xi z`Vaws(u>vX0Bm7GS-zV0_{E;T1dZAbAPTBaA(539pQ1Dy;T3bqBdc&Z>ZIu7dAyj# zR09;17N+jS``538phcecXoQ{9j(3|#T(_IGv;!)nEvXzpW<@igMb#(#7vNG<1X+0I z{t`h}WOnn%RgpKBppxfiG%1DEr}Kd9oQn~ENl$6*jzrA4Kv^SY$m1FuneOCze~|iG ztgM=SbEt>}Emf7^2M)US@IiG}qAMOBR8H@#2+oRdgRBTo$H(~RZJaIzP$IeWr9eqE z>k7CeWWWxoG#ja8irNbUlISRv*YuHkN zC!^pU6d+tJVUwZRN$#Z#GXo{RyEV3&Er#|bH$h9Z%EjC!Q%BOWr+xQpWOxN8_kJIF z&-^J5Bks%c-$&2%gCQ1Fr9lqjG!MN$!!MYB+lqHb%>sb4%=?9vsMd#v?xjhEfgnsz z=Buw0Ra&3UPp@k3S_5B1r)S=)^qjO*b8vJ9F%Ut*)oxM4DY(514lm9y3&A<7Iyz=; z$LV>SKn~`p>Q?iNabt(nH1}ady;|LNLrPfd+k$iHA)|b##ekB~m;Ol5V%Rk9JWUmU zpCU+4Q;q)GGVfe1QXKS*UfNN!s=pZpIItBH{tXO)w@;SFQ^R8xE)x>-)YsjmYY`2~ zK}wSfZ?vEVh{S5M3bVJ#YHZiIT2p6QVO?{t)EL$3w`*p(pD8<_AtMBQP-Wd)$c>fe z)wuH^IT>`6=w1(3JR@>~;1XkPie7u?Uz|t4?B!8)V@_2oJaoOC|SG(XP6HJH(rA+c=D-`$K({H2N6@FxO& z1nNZy2SchJ(v0LbKWRo1^p>_aqlCk*>7h(sv?--E9H#AOA({$&9JZ2YMWmFbDBdDZQHE&F3VQ*Srlz(=);YKR+X{LJ{|WZ>^rlryw#ryOz$o zP_D`^;iBWovKKIWUz&C;g?}E5@FHL}1I;nsNXD}s)sU&tk9TS(b-3rDk zUXz+ zZD=DM$ZTb?T2B3c(K+(E+#@wDePzyIu5zTPm(qq&_Z=^SiJkruO@NDZb@Eh?p$lw2 z+T^fxVs#(NthTOGV#yP#8``CSua-&3ZD)osD`!%p$y;^UZ7FRzYBE_~ZGXwlvb=>N zTW0KlWtYB-ZGve5@_JvPrV;6|g*sat$<23{(zZro>+WcO3R9@u(qwhdk-zhCrF+TD zU5quwIQkNqE!E^&>7+iDxH^!VS(_EDqts|t?ArIE?bi0}{fM?_nOhQcCdn%ju*Hy& z@-+x{7Qam#l28;usXwe|D3rl-vp{Ln_{`j`Gn;|FCUI823QvlL5ckw&M&>Nh>C{4$ zR?{C9hdA$l$Qr(gqYi~zEbl)_E|)vCtj0>#d?#N7gxn-QZFR+qq=WcI(ch~bz_aysZM z*pIOkR>%rgWLe5=Tk`rX#{+*96@DCj2^kf_9LuYJ3@61C;?N2k%=}%g&sZxdw=k7U zVX{TE>#w0Umsya-$8)9&tvZsB*fFy~dH2c&upJT;9L3!=vSuer66Mn<1sec;e&QJq z2jm5G%ai0Zh8fX?&U_8&I&WXXlJ7mxUjzU_gr(cLS4yb}g_epB3ZxPn&6@!l_b7%v zee3XlN&7#Kwk#s<#_J8xMp^E|-VwSSd!hzyEApTwr@<%8(lOR@B8aqJe&rFis#nwy}`5ykZ+! zgvnV5aaOEck!8C)G+cNMey%a{KrSQdkOx`eM`91PjCLu5EoRQ^2v8IM%rHbOq zC{`jrSFF?m9g=KimGU4&MQ3%Tl9sc7x>~80^Zh|e-&@sGd*d=Hn>zVan%cv2l3!l_ z{q^%cFdCR9nV&`R6i;&oXun{Z3SQm7^d68~oP|^GG%TRmDF|DEm!6z>=TULy-KJf7 zyCV+wu0AAb?br_6$)kq*FwZQn+p(nD2@9M`Vs!PPq$pI&XFZdYNv%hcVjS3iiKJfd znhqpA_WNxb5%yiKz0TpJ+LIFGQtH32<%zc7$)l)f!Gp(2So&rbo3uKE_9Y!?(jT^b=XQ4Ny3EN&oI46Yo z-Z7PB&e2~sK7C3Ag2!rmzMGAIX?4WVsz#|ggH%_Es9LwEoL<)+lz@)A!=2D1f(&OuQSnUI(~D zJKejMjvjVBobBxlt+$?!zv)l;tLybzJ+IyEbbB6qAV}-|Z)l6VDLtuw&$No8^!dg= z>cMm+DBcVUp}=I&T6E^2nv^!WormF23?jL+W&uN3Esj!PUfix&-(<9al}>%qru2q# zh1CUE9_h#;{T)ci_HjAjm46JJXTh9{17!Rc=F`7zlnbkP@8(1URVI<7--^>se5W+Mbp z`~Kq(1ysarxYA-f)0(Rlq#1L{m8$u=3z>g=$@$o}QG{XiCHq^7vyb!T&H(Do(kN&I z+j?3^2U{zH4HNF$kW6&D>HRD=wZ~qsgILEl{IMFDZEw~>@dn~ivpq8e6(2qgMsy~*|XWxHD z{iJ3~i|X)kty%1G3tL%L4Jg;GS;EtJir$nY_3L8rveL3uoK-r5*b?_%!3E()ud|DW z)l%;*#P${DJ;F;3`ORMVt8s4FwRcxx;D^3ZU(4Q%7S??tscv+fVJTIOj%8b^B1|t~bfl)jo@V>2 zGDJ3XGo#%USxU5KOQH=}RcT$UiMVo4KHhNfQ68R>Eqd0Qk0Q;?M;}?Ld1`+b76`0} z-0D%yN^Fy&H}vgFnMa~KCu#QF;FjfE%9!#nI_l7>^onc`qhflSNX==V`%E?`U%%j{ zfqyD+GT#zDMaJS=W2nlN@QFwJZejIwc`y{2G8YJks;ZBVyJa3x#ccKKbo3si;@#P4 zd)^Ju_8hdzL94EVCa+WOpjCg@4_YPcFz?CdyYzeoV+>?o!4{LAyW4hG$rO{GTXwPU z4kg2P5B(TD$brf{2;a+bK5mRL82k%|MD0##g;jk=*vRiQ|jw8CZC-zn+XfYa=Hhx^7 z-J?{Mxtg4T!x=c7f#ZMM88{M~fuoBUllfYsvu|8&`v$cXym0o7?`PjQh=wDyZoGf} z%6k>%3z#yBVT>7;GGws4(u{GHYzQWUU)U_bsJC$b?`{+zR}XMhXDZ%`9yYFf^uFx-xn@qC&ySNJJc*Jp zFul(+VpNaHh9~lIJm0Rw`xoS&*dG!97s_NbOb9W$=^4lNxn(=~kE6;dLn9ZSE4H4Z zPN*w8N*{OPoVR~Z9QBqRl-fPZS4>)$a#exRK!y#D>w`*LcB73i z8%HI%n~(r&TptWv_2Q&h84eCX!W`J`3^z&Gg5V0!je5)bT6;_WWz%yH8e1_NM7OC; z$kOxw2&eXGfsmZ? zdl?=<&%YMn6!kbdEQeg>iOQqHrs!Fb5pr1aR&>FB8jpv`!t@VFw)GLO5WFh8R2h_b z$EzNDBCwF*$kQGGTa+U~0iDq}Kci9R`H{*{pdR`-(@B;N8%cPM(sSeRh#yo#NiFX~ zk)nTPWjsW*4ZVW_S({BcxeWo4v#9F9UVP`E!(Dsx_;KDEt{N|~q0}3%MTbU`!j8ek z5bbGG>`*4+dx{!j>?>w;#m@3|)d8EapUfS!i`r4tI_I)qgSyInWj=Kmw6iQk9o<+K zl>tai^+#(VX&Z-Y5ovpKwzw@8?l)btnf8CY7=Gxs98lYo)rLwNUe_Y;DB>Gon@XgG z51VUobH-w11G=F2LkF~Kg6ciE$nZjWlv01fYzO#h-7gm0TrI=itP(-$iv3H8_4>H~ zSQ>Xuzh$Ih9&Fl}uwA_WT9+TwDe!z!gzVMGn#_tcf@ZVN1AaEZmw!vlo1;2y@eY3q zfAA>`mTVKtT|GtP^gPUq-$FDtehv@DLrD5Efq{?*$C&IaIz5AQZ&S3k^K@+^VO^eF zF||PQF74?bAn;FgcKs;}gYkg8ahsm=8ArpELj1v?#deUAEm$?s(IgftFeQT~``PQ3 z3h_Ls0-Z{5VZg}E){!ja&y|JrstbS7KiM3DJh}zC<>3>epbBV@c$WLj`p~bL$hh+B zd5JbDET!sKe~Gt^Xm$q0VWMZ9dVVH*V7$UIWm2BV>zOd;YOx8aAhB3KLgI4*L0 zF5AaP8(=c)jMmK8tEpTS(B2>K0Z?TnFg;|KTTUM&m1N zU802|T#zcX4Y^sRAR8993zL667VbHt_wZ~XB25=k3YAAm0xqhM4=Jgb{bF2bUP*4z zX6d4OmYk(?q}cB?OV=j=-}qTdW$DW>OBa{1m5Dk_(zeXi1v^sd!b6>hvyRi33<(q` zbMa(T9%MW3M}@u_1;;jh>Beu;lmzbGHG+x69e z)(NPQ?{Klb=f zh9L0zTz(;!bv};s0wjMO1RzH+xuTP3;3fDlxqzN|P3UV@;5HVxDSksyjD3{Q1;|vj z5w4i?_R#|3pDE)qZ_0P8xbtE<*xJ;4U4z$Wn5xdtXE9==iu9Lg0=n!F$LlzR|1Zch zV_gsg18=))ENQ>?B;bf{XL}bky3Q`@b)Eb0yVvQ8(|<-ANo{O*pUW$Yu9rqb7#=sh&p;P%RI|f6 zv|&s&^ZdcmWgs^X{cItKL{77)oyCGmwi0cU;zaI?UqauchrNCFR}Cgc+`jl_z^W#JbCLYzl~_#QuWK4gtXTPuqVV;8v!CA zpF4f=%ZS3v{Ffd@x9Yz7VN1X)RDDaB(p+^f?i=6MWRxiN+m?*Cu@oc{8*8I)28e`` zAM};qY$4eCw-y;70bS?aPE&tjVQF^rBbyj(#g~#mY_$;t^x=1^4?iys2J{|DW!2)k()IQR%$jvE{n2b&)>u&PT~ zYRv_iYIQG=kkqT+AtA-^OC;o@{D=jsNjSL+cEW!z!oyv~^%DKw^EtiqOfOrI@?3qCoo@tB8_Q&2I;W@orFWy@(cR10a0MAIbq$ z7%}Fkysf}%<2_Fkn;kD7_P}^!;LcdK^6MsN^QHwp4FkfE=X=MopM0WTO#FiE7{?)O zQ3-!~J;o`AHhl~YhofTZ-G0)$O%iuxSwUx<GF=G06G|SQnSqM^IyZU=@ETBOxQkv#FCP%L{(MtImEVPw_>dSuKcM zM8-!u(j-|}gbcU(BQ>3>sEeqYyA&2)5?s3%nv0+&Gnj*{yLnfXsK2R&y$sN7u;fOQ z`6O~-cL@SXRz?di=H}kN5}x!9qA#KMDm;btyo3uqnvs-ISDWE|-&6FJGw#-`w<|IO z(E*z7Ee|cc`{|gRs@xT!HurIt=nd0YbkRjCD56){kH`E+pT2{mISXnUON0J>%#)fe zbOCvj4=yPWBMl`-3N2-cw>{&{+UYx!M=p2)8I!;+9swzn-!3x?7UWIN8ES-~iheDV z9WO4v-^2q}kA z5Gb8lr(cj)14r1E{WHVqg~*0!DrYCLT8i1ZCQpjrbh?rjOREhXpJn^OQlc@*XU!N> zrMw0TSC!8?=I3}}+E~7t#0dd;3F>IxJwwueu1g=$m{xMNhy~PiLnvf}d@k1WxmY!euc*VtTQv+R`>?H?rdb3l zV^w>KTGZOjDwbCW^cl}Xn4=o%vihQ|EuxX@cK^>M@K{FNEIW*}j!=jOn*_rAA=Ep6 zmEX}wwvcr52&8&p5T=+z;P-YZJ%5p4Ti#sf;u5WA3B?(d;$9a`9I`zqw%+j~P4^{z z)t9Z%B5CvcN*P)->8!r$srs{3v6ewjS9ZGcH`JB$^9W7;4bG+2n=HU$y$z!D_2qoD zXqwvF@{^wG8-LoHaXzeQIAYbym9A)i(Ua|ZrKoCxR=~7o0kfMi*AKl?5?SHZg$Vs# zdvASBsw~$B-MFl2T#mEQ|FoyC3nI#hbrDc`YW6zO9_(1;`3;>nuF~OxmDcWby%hG^ z!JMZb>h$-DPd+R$q`hyr)U=^>1GUD1QrF&BWj|Zg*txKsZ9xm@UCCSL+e1r#{H$a! z)~&JHMt)gMohw^5SL#1!*1TS3%^Uf?3bAbxW68qkE|Qfv3~v1I|NOtWAN}wD{C_PE ze$!(C_-fX(cQRwmlIBj#t*|Rrm@{@dV`qi2Q(Q!?W$N_)l82#pRurSWzqNH7chbS9 zypv|9Tf^ftFW_tI?(Y4a2M>0Cewb|-mDR4@EGjO->88;u0WK5WVqve>#j>d&#LBQR zeefirt6Ts9hLzD^3lxx@l15ZP!tQw8PEW~JuFr}=I+O&qwW?Z5%Qv-{BMw+X+!XEO zql>XIcCVCyQFO@fd5H7;$s{7rokF@WBTwIw4ZnzhDM_k)Ol1xo2EN08+8PrOl_3M3 z<2H7>^n+fMo;R1Q=FOGW0|Iu(=4m%dSmi?JQ6D^1Mv#a-bxf~JV`L#=&`@t8dRo3gVC3#ubN7tg3hc0CLFUb( zJy!L)D|;@Kq*>d0p~A?2RbOYFGy>K8c1<&dlDT(;?nFw()Ui_t!9pEqdwW(gRxD7D z-D2U?&ugQ8O7ZXlUNO~Y+>%0iS?Khin!4<#6fFe#@`H(01uNu2 z(F*2ADOOlqB?3c#*2KG0QTF)8(Ga4oq7%rU7UlhEO8ulND;k34DD048rm7C{x{?k7 zR`p!>7_gy~uC(-Nn&C1NE!FEVRU<>=rh_pQ1^w^G(G-Qi$|bp!3NPWH!|PMP&_ zA;d03W_e1yM{Yl}t1Xrll4%BVNjWZr9jVuCZZyqfTCVhe;W_O&Z{@}@S+TQ@UC;ak z_QlhAS69fvBiYHUHY~Zz%T+}>u0feBae9dxa0fS1Zn@lNbh%19UHSE$d zG2N7#mImNKO}=QS<4UR3<>Gu+ApsJ!ut+TeT1(GwnZbwFQ=Yt4JfW1yRDPd@1!QFE zQ~7PnlFmebO=oSE0k?yWoryIh*B*#Ll6jjIu>1Zl%i{WM>Y^S}J zw=J!q^sCY9?9#2JXE`0GKJ?-ZzWK?Q5ctl^Y*KVX<4xVL9kh#$t6bRZCbBA&mg0|6 z1u>DlRx3S9s3%RJ>>12B8yV3sH0mg&Nz%g0$D>hyniZiW*EWxw5#`DnQC7a1w9pa$ zCAgb(BS8y9AXpr*K(paqUBiCB)Y4^42bh&x4OlVX29BXE(RaA_!APR6JD0qRLR~nk zm$Q0Fs~5~nZ=aYqmau$5W}0^i&!aKVEG%~<5*Tle69%H~Wt@Eu4bMF!Y~QESd$Ti{=cR4JjswjXa68j^ zIj1~l)vJw^0GLo`?}=}Jg^4;jXV zWeatxSD1*c4K;6al#~VwFEp`1hMO8bCiE(zMlZ7oYW7#-u3`nq|L+%ZL_b+U&6=nx z)?`uj>K_+D-gE`>rYd<;r!vgRnSZ(F!2Gk4VLJbtvvNLu_)b^9XS(;gHeOn<41E?tT<7@YSmI3R> zHC#cMaV=bq=-~z#(hY5rYC8BLT58GeHrI2h-RkFUDr``7MxxzaSGeky>PJLOMW_8b z?NN5-RYBXLcI!8Z}_iSL=3>Du&Cl ze|>k&n7pD%XV0H9_7KQKyLzmDxa8ClZX+`w$DzUdls?F!#iQRiC2x)opgc)V>F%f% zbl5#o5`s!nkqmDTE85lD2;~HF**wiudPY(C@EgKFv?NQt(E}MX%?gm?;~2$F-mr$! z#yj-=`nNBEWA`3(Q7fd)YKZogl8k(oq-&^w*}&dVA0kS3;j;lWG#wXzd=l0^Q72D4 zm&N-i5%U=u)=}qoLvyWHYV&&&Rsd})9m?~th0o->cqVUabB!~3H6v7lXYqS#JSzbE zGEigO8NIX8Sgka9cuIr@yO~DB&a~68R5cAX$dGI&(BdbrwCdDe+=}4!a&o_+v8AKG zp!#hrF6B!20MZUwo9hREL<<0mC?NN zikGyEfyQ3c3g()!!wP4>SvQ2CV$>{~-FLUzI6Q;Xl)smzJW4Bn)ntg$Jb(DdKuz#l z8ldeht7XknUhB2kvIu9KSHzs-?igED6Goxt!x<9$(*_5;mzUImhHM0xHf9Al(|!A*8z5?nGsE%h(#KnStRfpXr^f!-+eLI2C+<#(G@@CPG_1 z*8MfEt-*ATd}Bj@iACF=|B!)npR2()yv>SBT}(n@=_Qt5Cow9P-Rb)noX9z>W^_70xQ{nrrYB5)gp-ok$#^P)6G0RVP5VfI zWbpamEl=V$IKR*=48QQo)rTZV&rqKhqcnm=sn$gzUsd_LKxhl`I9kv8Q0<+fLugX- zSG=Me0ilw9O~$Wsyz$h}QK_8km}5Uq(Fo-1an2qm$)k&dxR8jse=V=3UkQdJ`9^Lf zs;5+4GmG7S3B-1{t06NiScG*8lsp}8w{a7z zVxKX#Dvm}Sq*><^r9Ex3^1!1VDiErd?G!2;>Y=HkErXv*kuf+WrMpk zb{p&``yC|Og_*i+S&&(d0Xri1iacOx9=WXKQ40%QkGaevtq@Sfp;RK-6`@2Oldch~ z+=4QHVu=~)B+Z^1l$)}vXOyAVw^>4Y&|by19!5uUS@D0L!YQmSJQ!~25u}tpFV2Wm zs_b(iS_x|!$(8nsW+teA<1SDWt7TMOC2Z&y1?`s!ONlPc zO+Bs8S~~d)UfVNPqr11~te-1cKVhcKbgfI`XF}*8MNNa0*cNBq+QSOx-q^!B^%sn+ zx3sRA+a&Co3%t9xw1=cw_vqGA)I6g#okQ+Ip0lk9)#L`+)()8bT8H4{G>t=_Tbg)( z&SO8z@!c7+D}=%0xr8g~l=04IBRNcaI%D7X; zZ;UeTfG$oqb-L-*(oN~3(u*slG+$kHbm&LP`*4DeA2vu%sfp&}V;*xbKK6`Q@q+r@ zt_b6g#&37Kt7~E8h3oI9e<`x!n2GGHQSz?Uox0~s1kaG zMs1ueh#*boCc&afd?+m~V~!5Q2^P)Bm53S7Sn#DPBqHPWNZnJ0NhHu$YPr&EQZH}y z98z&IYSgmXS%X-S^;^=*E2$t^X+Ei)wO%Nr2+hIgR$$pfum~fIgBJMaJNpe7)$4-d1)!X_{gfzlw6TF)vt&M7fbDKWp{Ux0E!x8%cWh4C38PW8efgHR>kH{NliXi$NW~VTz zE8_F;pJQknUTEKc`03=N3;#fvd1y@=kB0|m(Mi#m)d;-mNX04S>h#JmNyk~KlDse3 zyjn<<1mQ$5eF6{{k;K$A7KP@Z^oGFELl3$b)Uz|cAR%Ks%_JB;+?)_uUWCIO1dJjT zrGheCL{L3Fer>LFNe{bk>DfsW#457B<-`gnp#1g#no@VJe34c4zU{a9KXPtk9 zaSZi&ps5GE{HHPO2C_PSth4dcZs5cJqs;o#iSOUtp+E0+kAr&;XlU>L;J8bE9&bPF zZJ)58_wOBlZpLSG3sw^ z5d-2e3Eb|$irFf6lS0|6j_5PBn`DP5{V00IlU=8EDU>j^_0q}l@m)Wpl|_R@~tOTVTmBDkN0 zd32h{ZaP0d@0^k-(n$e{-pWVeV2da$v>!XT@02_6Sw~DYrGH*^L>DR@sPvlB*~$<+ zli5hO+In#3WVd&`%X;PEgD#y>4~_>rcj=USIM}|==GnSDdF%0W>}%HcD|z1qvs;h*lnYCs{i5eAq5g-=LMXNZH69Kt3ko zn+NJ8xdGn-)^(0=S;H3fi6vi#BN=OrZZ^k%uxAI}fqxR(#_Yjhx7VekbA0lkw@s&S zZ~`O6X7au8!GNxXlU@8jx-9O8en@{l=njHGkNn)(eR%%?WfR@ry?eXiV!YwqlV5F3 z4DRoAx9_w0aWA;b8UqXLUXQKDu>0Uxtj1&7g5Y6z!b1If!NYru>)ivcM@#7W4s0%cJfegY?y-u8m0Ch)+&fhwg5lFh;cd;P`~n5CntWlly|m6TXZFC&zdBk_+!M zE`M_G!QE~4lWg&pwId|~W$`HD0c?wZr!T@u3+CfEDb!_jAQD;E(I|_Ceip%M;k$B} z3_!Fs))iYt1F`o)$^Va8nJgEO)xLQh3W znn%S{?ZqTKr>)!gX+s0E;PtW3X%r~e;KcZRBo_?f&(Gct{LzNSBRN4h&BK>TA$lht zALm8Z_=ujZ$YXb2@1A;TX~3OdfykN!^m-Sxm;LZ3XnP#sGs;i^Py+dXw|94&%}$ZB zVbhCaWNkk38XLeBFk_RqVZiMxN-y5xYzpUOXEe^w8nlR}%1@*Z7?N&J@))i`C>%y8 z6_j0)HK3h*l@|a_S-z_22LY9|C9g7f$*Vq%*$=U(y+8i&x_jSbc57^=OV|uf)F*Cn$ zJrISE#Texa{9broStl10_6rJ31R+{u&S6G;HDup#J|z{f+5?yq^jI+PM5@qhb--Z! z>{3V+wO=|1KI-_*)fEiPiS6FXe*`}=EGiSBF>5)7^Q2rKwooq?qM<}k0py?1#?_cs zhdI+7O&`XRJBOZ5rZ|^e1%?BDArder!=+ru^swqLY;6lOvw z+F^0REKK-ArpIJDd4i^E>*)%W|L#7SZo^yYe@ zT1C*%_mMO7pzv1QyyK`q0ZV0DZ+CO$zqF+~{Z?%oJ#4;$bXttMgTB_<>WKh^L!^oe zW2hPLSsid+m{6?Gb4TW4SOqh1+MR|S&0}{d1vqaJ6Lt@Xae$b&8G)Mk=V?j&#-1J> zPUp}}po;1FL$1cC(}c{>V)%{vxk*4`OQ39Q!_64k*rQ9+H595F;HxVvBwd^}u5JFY`GaY;i0yYVVt*&cPcXj`CeXHNujA75H$>&OyL1tj$ZK!`Eb+vl z6SCwlpo%Zt9>Pi19ioSyO0Mjvi$cAKvg&9}PqQVFI}WQ0eN1vlNH3qoQr z|JbgjF8@a`ZNhaOh~d+L?cze!*h%x$lzjl5@|s%!0VaQnS>ZUK+c4)c6XNl#d>afG zu;-WiB+D@&Tpi+Nm6p}F=_o|`Sjmf_n%9v9%U6W+>GOth!BX@nDb1c%vdJGhN~5i{ zBT%*8Ma}%9bbl-S_9wE(ny>%_I_tSkP;Uux*(waKP;yEhD5da7A~TJyR8p7aaI7%g z!fj!Z|Bgkc1@^@FKAB%;I&U?^y(8J%^Zk1nR&tWeovYm9rr(CJy2&Hb5Ovw2^XHr# zO|P{eO;YKp59N>LO;U<1+~xKzZgQw4?WCyFeu&M%U$LR$S)4r=>&vi7ttHCq99D~Y zNoa9jPKL!Cz~|+J0*mUznzmAB8iwQV`qs-0m%;}0M!gzv&T1n2!mqOo6~fMCjJfQG zUg>HA{wv=yGU9hhs8S|f8)?y>#r5n{a>Z9!H5Uz=oLq4?^}oyS3g6AL87Z1-)UA_$ zX<@>3o9k)094>NDlLobAh=#qsn;?>ON7cT>0;A)aIFegpuzLGYl@P%Ehg9Q3 zupDur_n^Y_s8i{nzg1%YKl}MPTx;c5Egj>=c-wTa#oeaZJtNIToZwBMAgaqbhM`28!;QH7O#5t+vh~m{V6Y`?ScM3D}DLy8q zX*}T{M8p?GSZLG^rPRnPp|jJk=-@}7bp6x+0l!f8RQ>&KADSfY$sZ?wapT%QES5Nk zReTisDXKr8tEN|n64TM?_IF8}KHHEKHJh!GJ3Mv=)AwH~{LZ1;ru9?b%mCd!L@F+h zza_|yt?nVSxI0Vb3o;-}X@^)L#7GYj#uHlJxBf3S!bqSOEqlzK@y2a-UpCkQE z#Xf2=-IMdgod8p8=KFWC>TbmhDf2I7;HABMd}3CxBMN8*4#sq=2sPO)Ce)Xgi9nsb;0JUPTj}4<<%Yo?lxqyq zJSQ4w7GVrd$a#@S@VjJ18%l2#&bPVJR8w2tKWkz!45mfbO47&`k7^_fT`0ScAZfxB zN*f>@+IHO%f;D998S(S3Do`N6fH{vo{FB6MKdzcx&k!)FgC~e=glzJn$MHEsHo&co zR8$(8a>9?NyLS(};z}}r^v?dr(F@kS18t$ay&Azm1I%XmAvN_|no^KLPLq0|0ydOW zS3P*nA0{xT-#md!n4sM9EQ#xWGML#+(;3l&O~h1vaFg#FK{*8D6G1t30Q$HzE^6PS z(%*7$lW!@t(TbCc_nCX-SpAIR$pe%#ARG(qk2%nb%C9|ONbJZLHSMtyN6&E9H-Z#p z*qEN;MpqK>25fAJa*&smU`?fzzt8z&uTW1^wV@9S(?iQ2MAhn^OV)UnpnWaX(1r*l zD-^3W7KhQQ_1cr@^E3+UfN5D=Ra}Xqs7EH_G!yJSs>`b36up~AbTni8oaYzIdiaaZ zsj$N}Ws@esHVz@OdBzc(o6u$!r%iWZCp%OaW}S30B=&LLwZNWQkR~$q2B<0~y_p(E z)JVb$DrLfBJ%;)>L>6~ALst-D*ROtSkOElL8Xg3zDt{iO`NaZaAe6vLfgm-trT~rq z@1PJNu9+8s4USa7RoPnoxG`lan|yWmZ~kQvj8qWGDU#SaWUo?2m#{c=*PvQO9m;~X z&IH>&NzMylZ7iq?t85b0k~nBwk{cS-fYFD=_LfP#dLxm$&Y~DiP8bCCvupcSY0d^n zxBbu{{S$7`t@$@qfDfJOJGH+E?U!WkWO9%M`Yl;X5zb@^I zdwjLKS{l~6>{Y}W^$!Z+h|{a?q3;2KyZE_py-w6g>-q*7Ubf_KNq>y|!_(#I4wpG~ zB1WCH2>y#)?*ANe=we1YNq)Y>^t?SUzy2xqyF;A;>{C8g2W<654ik{9%?e+k4yOnf zf9nv}s&P2n_NH4@OICZR^iFR|k_r{e)6ECf{a(Bl)r4e zoFp3$SiWN=73`p-MG&P)_UtU2Dp}BY9WeaTNTM|q0(BY?o`-m`Ywm~m(|JCm-otr5 zP1N4QL?onhC&YgYJrTBALkvCnU-vM3*#rf{1?2q4;vn}A|5OLNOG(QfxGzt)7Vwe_ zkeR{8#!vq-;za_=$P_8OmdAilRUWoJo={61iUXQ5Li0R%@v}$Xo!I2&zUel?lAj_z z1SO}uB0ec#Oy3$z<=X|odyKS-x#rE(_h-e)}|{he%hnQq;@-R2ji;-hYJvVV(E zML|_f_!w()N-RXv;p;BIo6;eSM81d<7`rT_JB>bFjeG)YN!dF;LL9lD$5?L=pWl

UwFvD-LgM52Jli}-#ek+L$95sMKjpFEhS?P8vcmef58&048NTAhGkaXg29Y5RIQLb*RL*!c#*Eo z6#n*1z}D2^ricDIIu}=z1odd_QcGDzcxyn>EU%7TTf)Gg;kYlLh~B09%gDiDa=7wm zw6>O~X#` z6$-~KW=GFnq$~lc%z2wnj%NkKXTmXHN5=5x8B-aD31}h1d~*wn<%fnja{{K%uABg*C$4nSh&R^`q5pv{5r!Q8N;M2*cV?mx zbf7Cphb>s(CRJ`e_QGCrc<`Gi031<~SP{qs3tZ2{Xub`Vs`F|?OF0lv8Di0-EBvxL zstHL_te_^Q;n`|`hQ$ebAJ89+~n8~R&-?>zBKss(i zO35CsPK7hXHbC^v5?OK*JuG@XKHfDHx+W6?QHYeNTIeV^kH%PEwn`B_15iAgD`phB zIaD9BEgfHXu9+R(J9N=qk>9x0g=sO0Q-n0|#Yl|2p;-mED8Em|OgG!^NKxa< zrZ~$eM=U5us6CDQLIJ!3`F9PdiOefY!K)MVwR2YA{I3W9XiVlIKNGL0t)fvp>J*v9 zwf4MRy+l|le%|gMI}#c61Ac#h9}nJtaP?ketlE(r zRuX+V>R5JDQAc0W`rzNyVUCNSj%caKa5>VG;F&I5V2t2-H^>mH0vddv)kN~6_)Dav zWe5Yfl}OV@iFM|~C?F0zBk;c+06{Z#)Fcc+sySgoYCn%fg(C@Teq(EaF<1X>fvoYy zYP@w6dE1TO{NfCQt-F@B6=(3_K=DIrJ8t^|+Cn~LgTb&D8JpO` z-a(7f$%LTct{I`etv`ae5$`JI@qIvjMCUI#4+Z8p4fyw)fm~nP8*0i^$4q3tiqsGt zo(PjQl!CB-9a&5y3@AkVi*~2-XIx;?g)XS)qlC4g)Ip=9Tlh_P#F=SU>iy=}4|YcO zz`vf-)5R16>qZ4_P$^T_RtnGXv~{Fd+SL~jd^(L9hl~ai7?6EBAS*s*j5zl2!!6d4 zDCwNBfS&R&M%rh@>}(DqX*D{E8>YBJB;fdKI%P3io=i0@?;=xNB_l+uC=>MXYmA&N z;4J8ze!{@XSl$VxW=0B!LWCRDm+gWaFfv0#lP2Apn`5uWws*jL*Dd*wS_%klDG}KD zsiM>MeE|=6G%L@jTz?M(6B^QBq}fpmsHRh!2}6?|acM+aR}->(Im_^nIDD^BwuwHK zf88ljN6LHbt)$36kTGmqP6~~eG_+33l-LB(UNdh0H^si;isG@@%fzFiOvwk}ry^%# zs!pAgd>D9XfJY!abNMG5N{LO_>Ih>uXch}BSGjrwRM3JC+Eqfes(eHoR0qqvjk4UM zMSZzJtN4T5*q|&pe6IAkdw7TOPT)KG?p#@t{i3Qt{P<^-;JNvT+m33qnI9I^%t9fy zUJ+UmWkjGhLd~$!5a{ivWd|KFh2tgD=q_;p3pt-A83MM6h4;ffL3*WPUa+ocgP>4` za7SRqi$R~gvmAGZk~cPS7>4IR(C3PspApyRHcJtc&?o%IY3`9}4w30S^fY`0w zv%%}{?1?3vUVAXaub0J4gnB`RE`GPX1dkOZ&_&(f}=DeFk_)=OM4Z^yPxoQ3biSC$e2!_+WmiyGb06Z`4l5Xy65 zioIb!&6*aa8PUtFI*!kjGIw?nwwU3kZtN?Y<=?8(iW=f52)FMxMnfYOcM8BWvh4x$tA@AC=G9TLOKiefF^^Dsg_ zZ!nU#kYF#~UtbdJM-vUt;flOvv($uy0JG&zzj97pg^~8cdRB|C`EC9D%4fycckgZq zU%th9Awm&tS_@_TO`BFo@1bBjWXNdkZC9;i>eApSvR{1YeJ#BPg5|`g%LC5*aJaZGc zswfqDDY3wOdp`#lV4oo$<+A;p~eyTQKUpH9L*j$&ym zteVv(d-~>8Ou)U-lnGuAYOLY^6rO+Vo{*Ibu~0$R=WS|aOdvSAubTF=eBd;lolr1{ zAvV^PAa2|-LRTB6z3A++S(#1+dv#X9`^?j$O=R3F4eNz~wm^fuwI@zBH(oDXQ`Llh zoA}bAz!8vow%4<_FF3#C9Eof0xLtzrL0Tg^TPU`GEj7)NxtBJTpe{a4?2>H-R;d#L69i5h&h(+02 zyf~JsnBYc8ntdL{W27s1Lqg~A2`xQm@PU8Ql|~-1)k*&&YXX)dk8X?p(-RoR~d3sulWhzadrE3}nyv9aWe^xc9rW9r~>SEU_N*n*wbT}0g3%0U%npf_fR<-U@#dB6aXexRSR3;IiENDmF_+cST@s#p#H4%s==iB9PNtij=SU4+ zQ1zpX@GI}@ML&VSSyYX+$3kAnRc%qzBneb-;GijS`iI6)slSr!sQDjmy%Wqq^I1T` z_SC@By{1esVoGlXl#|eC36!%Q%gD7h!2-31Fx7=#(W(~iOb;=y6J~i4EcB8wBv9|T zla`RUfi$O%j;L(Wa-xX4i#1YJ_*|>eM15Es(fA(O@MXzOj~&XG;2L}oGNcujAba8l zFiHCMrf05J(`o|t&ro$pG<*?aD}5-7s-9kS6-btXQ^k;FXEXYj)1)?*z{s3Su>sFm z0XrMiiVIsz4nt*PXpswnP$NPr4e|bxY4NvcMn1$briIA*S3+W1%g;A08QFG9ox{1j zOAI#5>@KA}$@L+M(dPzUVkaq&-?c^N3h?vWW(~)_Zk4B7^8Q^ z);J3dLYo>sTUTg8be8_JS4qNJkZ)!$FKBuLK{?)%rI%s~HKJXed+sSweQ^IoMV=`S z%SHc2wxbKq^K{NFjGi|Fj?xq>Ql5%k?t+&nuC=##MRP}(g!%TN2`;X?z?#oYUD1EM z#1>v|Y*(aWvq5T>o9tm~7GSu1n3^YcQ4fw#;@sCb#ev}WAW1U;>l8_I9o#>95SW~H z5qlIUTkiDbLn2g%Xl1Yud%QLVA8BJ&7N=B!c>JArF9Y)Zy7#4H$&3NC+=p%&tE;})>6P*YB+q@qWFIG`(@E+>Qvy~^7zx!;_tu}~< zPXjkwaL=WUk$!jyff4<1vX{qfTFL>|esA)zba)SZQccb*KtCEz#XBM6{8zecjQ8~b z%3HY*Y5yml6pU-`q6rN8V<0}2^{tl!bjoaD+8Jaof`ogeQ3RSRHA_Udb4NCQV0Vx} zprM)RKz4|7sO819|uE}qQsE4?G` z_30JYA7rPFKxQhhRcy!@x79R9*x0gjLbF2zH}=QS{*zN7+ZXC!jC=l}L9uHA`swvy zG>BYAIQzXeXHwbGAF{(juBq(^W+jeDHUHx+fEhL;wsLhq_TWp*m&anZMuSqLK#1~9 z-H1gPR$3^GE{y~Ex2Y+F95*(s?r|9$&E4;hq z`=8idAosSLE#L>0jFC4?OPj)nI^S1$*$>>)FXbi#i-A9Fhr-NPojZJ5Dy5F!XL9}u zwPEhH#W#iX-A5RXq#c7sPp!0FeaUUzkwGnTU^1RbT{lAO)Z))5>ar zWw#V&r9a$_hI#bRh)AdUJeq!O^pFVK(oL=pP#;?{(C(u?tSq#!oO1Ms9NfU?4Ks1S z2M;ryjgdtdIz2=F{~*EOejob%97cDU5wbBABOBbp(l5GTI;hfR{){q0BBGzm zM}x@|C`l&5C$dP|f|V1GaYjj;|EVJ?^PvQjde=U~uKz%d@e}D^#(5=e{-!uARmCmS z($;sdORmu~Q9}uMS3@qky?4Upg#yW1-sb&|J`Dx8TjI-H#Ei^~zHs7H>(&v50Vp{5 zfL;#h(}!n^s5kT{H|#uVz%y$9S5ou!W0X+rfi)Fu3|W?aVtm<=Fgm&G=l_muAF>Mn z7ugQ$kJLpo`AjGX@|udr+TGADeL>5%&qnn%W@ z(#*GjxL10ymI+L!2T}3&UW{7xMp|kT1(4Zj~tv0z#;k z9B+mV{Xd!b%{6BIpuk!Ne#|#fX{%n|^LG@?`&p(ES}kPW^25lqT&@YsxHAISMKj^1 zVCD>>-M;g0z5>(Gnf-ItdZB)koi*k;^EZCU80smMM5Ka>`nCf```3{YODxs+si^NX z4ico!$$kxt+?U+>iPr4Fb+J<}zljKMzj@=*G;UPT{^T*=dI#d9i(Ii9wdG>sKjKUK znZ&#JVkxD0Eklu1R9I(XLgkke>$P_AC3!5gg)z$Tg2=W{_(U71iF%Ma# z5nNZ{VeXr7-4&Nm)2hHgjD5F)t-Q@KPC{c`D4|Zs6BO|I-Ak8Ia3)-;BqxP&mjr>A z(MU=kl~lvZ;kU#*7tt%)gBlNy>7{I8s1d%3gJ zJ4-_~Y8<#|g4=a+Z&aCuoQQcVfY69;=BL!RqE>Y5P^5On(aU9Y|aXYz3bY#>!?*^f~#+e5#!;F1mElt64sD zTcMT@cOAFPq(VUC^-1n$BHp;q6FYPnpSg`!>;TsLAPpM4WMKT=B~z`O5PRS8VHot7 zk1v}6y~0%g(p-HpvbV8jI*j^yj0QUOIwm5$N(TRzy`q4J(k!>u)%(B2Q*P;VpU$0> zW?vn8PtWg$*efv!fL@u3-(vz@YUIBM>Nxy9>*?G=>)rnSAbOZSyW&!hxE3AsnAl~q z0JNuUTv>bNz|Y(h+=r9Ti4z%0l@sOz0h;lMJ=sHT{03yk84XuG5k4Z~f4>USk{t0!gw)!I%Strm%Y$nA zd$^QeO`!OC|9B5AH^ zCl8*a_2TUtyn4x}+9U#hms#1f6^7ni_=+|uP3WDhH@+b$5E>c!riVnUWSqCRdoU0( z7NF*H9pCK?(TlH_kZ3z-D%_`Ju5!R|c?9!Xm^=|!H&uP6RsnXgXi_1mG5;J=9ihdZ zEY4pe=R?`xotB*I!psb=g8G;MGbj|6i@O(b*RlcE=!5v-vJZcEA=g-EI8V;PtfAAq;{s9`o~(IK*g`V_>N21(dhg*9l< z?A4Yh)3>5HWwMdU@fr4CaJRUm)AY>bkgPN(?N0^ya>(GzJBg}@2|rwrEk8-_#_QR& z0c#dJWb4aas28}Ft-oz!m=Hna%aL|2E^@;f>v$SV5K!Lm9jsJs;Tmb-=+p;TM#;Kc z{heJfD@CD@;8mo#o2)<88LF;8rA5C#n6N&1?<^+zb`L(Tk z_WhP$j8ArxTQgU_kFWls7z>%ltJ8{^LXIawV^>7pxwpLt`KPtIXFcw31j%OX;S`*P zji*E-4PF?OAsOKI`hA9=t67_F#6$P%E+PAOETsKQ>-#zO{lMLCP_)*|Z0e}1{e}SI zaUBq%`Ct3yqwx*Ecj9r4y>IO+9b8v^1=gOKDPDY!wx3ChR-cra1Ha20qOa0Px@Y0V zUV}gW#?ehs-Ob+F33g5{g@F6SD}IxtclB}hm7S}-?oYSA2;PQcB`EmrbztFepy7a# zXV@`(BRw}WOy!UAl@rAVd&T;1Q-s2TdRA7t?Qd=j?qEq+KndG)B_V%fM4|i;#6{|~ zQXsWeiJ3c5zcxQ^Cj zwF|l?t1lZLqQz`kinw!J?&D*I5l>_~2Htcf%L`>^9mfh(7XvAOy&)&3tZU$}s*2qM zB7z1Tx~U^rL(}&5o`yDq265KF8boWs!BqqYPAP6rfJ*u?+^nL&1r*Cl!4<1zz~O_f zA#+VeaS)=F?~7(;DhJftJYbB)3HPL-w^`d>$g|u38)9OkML?P}HV@l%;X?FxN^Wf} zS>H>wVyl4YvehdFfS;^%g)~l&>qezYjF{&&{bT5hq0|4$jDlaF|LWfxyIc+&TI0!= zIhA<$5U0=Um3;X7>7uvkQD9u;;h&L@PA&NqCy)|!$qCBeWqy4Ypp6w&0>3xpOEG|vGT z@?`4`ntO#oSYD8Y)TQp^feLZl9HuWWUqn8DDGt_Ly}m$P&6x)jTLPL%GG-Pc9wOJ- zO^jFB(!6g|!BW(SAdi z=B5SD>6CPB=UE5YeV8Mg;KPPS!Ek216ho-*ey&G||<&FILkPgaE6kcREvE>cFXS1^ji(24A zkiL)WB-`qQYEE?XkRfl!VINj`b!mU)+tTWrKa;le81A`a$P)dMFYmz|Zub*#PKp~s zZ|t~IY>&>Z1Mz=2x!qab&hARsSoR;@Q6Rb9z0Y8m-%`WY{#9n4jucv=8EDsv6VTzH z(0D@R^A4mb-zhqj8|z1(?7RAr#J85w@33cu#O0n8DBU8~@zc#EA(LM|eQOuEs%ds_ zZH3DnzMP&t845j>oyp`5|mLKzWYvU)f*KiEOJ0YO+YIz$MSV*?& zqJ(P)qAW6VTYedEgPzn~epIpk(a-2<-;QacJ@Z++R(lrxE*m#z=}o4YML9;G!Qpf& zLYtFqbPXg0;tH$w&^vzbC?btcqxjujNU_7bSFNnArkoYaTE^Fwm9!EnnI4eQvbB;5=iZT)C zOk0c)Vy-MZY-0XVtDSrSZKG)%Zx0`N4I;J$JrdpihV0IOR=aVQ0k&hE4<0Ox)@DQt z*~d{)0)t@n+)*>|F%KY5>cZE3mkyVD?N(MWWA?3l zR+)XFPw`YCzcTCE2tRDBh%T8p`y1B66mJ@~A+UYLs{6kyxZcM{GeK_hC$VZ0^QH23 z(6t!Gi$W4(z5Z%rHG=3Op-i*SkdV9H@L%&0Qjk&M0(&SfUW)|$n7g|+evVYzc_+s> z;YSFcC0rTQ>I&6=7tPX=PZrOSZ*ke4XbeSAFRMRF&KTV9wyaNm^$^XDiz|J<(r67> zhP<414x*7fv4uuE;!C@AAwfFr&4v1wWXi~8ww@93_BIdgfkutCU$V{D+&>m|G9QjjSiMsMb5Qd68Md8XB&2nClg_9vmOa*{4ZpV8 zf!*Vs_?buj0hT|0zWqqrY|q>S{(bDbq(uL+Ek>s`b#Z`)DDFRc5iBf7xuxBWNNxk# z2HdYZsZkCzl$a9=8!*jAFbvN+ZE>#39RwmDM*QN?yU{ewb^<3wMe2pBoNUPgQaZH0E zsy{?v3K6RveeL8iGCX_41HfEu1YMkyKL5> z!_*Apl6_t!p^uoJ0THwex%&>ylQzOu#lgOp5Om_Fz3^;D#;tlI;S%$OY_oTiA;#6c z*ja8E78OCB>wed+nu`dLvIzgayK1b2k@;V?5JolZeQMsbWaSRQE#Z7jgo-SAV+?*L zeo>&u4gy{Z@YQ`dbawr+-#R$_4MoxqR(a-{IgN^*P4V*Jwy~s(kjA$2ZS_8fPs`?( za#mD1BF?9PAF-z)0(8KB#hl)~wvUn1l!QY5K{_1pnp!7A>RwW2YI*oByE;Gu=6&v3yAWLZvFZ zqJu%cQ0Q-KWz*5xfEFHhY~;-;Pq}w$s_~p&sZWffetE20k{Lrjz(KQOi`Y{s%?{Xl zmlpN*4X(n`%{$)G_WT~WumdSFa@1ZA+<+9!Awx9oVTNl@BN^9WwaVa1p79 zj&t$epNvbNn%6AeYdYQ-2PFIJtGn1A-OR;lVSNgM%t?~!2}NVE zHkti{l|ea2OgS(Ks@m8H-o`s;b+Ga#;tsR^>Z7Ct5$y)~u&+?Jne!PCv~!o3*lH=P z|8H6T`PQ;ugk4_d5uFU;c638VqP6b`w6HK1>!X7WyZhVA!ux02cp{^x4Xx|BtKrkR z%l*Yc%V(t%YTVSk;=LUX;{(t>^O5)R!$mV-YfI>*Ort>!#F7G0I|L2kvcMXy`u^+sS~|jtJ`yB0 z$^p64cpmhL+vHg;mA;ykbF5BF0+(8A?TW3a4iQAFjoZB5df-=&(Ahf>91;@uQmn<+ zy}6m#UfKU`D={1^t~uODgVD?3m&3%r&4P7YtI$ag_O4BMQcDw#dwIR~nK9(l{&a_| zn?P%Mc)H&}JYBo|Rt(q-$5J_NeKi)fH~*63jIUGdwG>fZm)ei^a*OpgJVa+ce7v?t ztChMT@%02u$t~2g=Ky!rUprs=

%Ds}QF`IV5Iw#haU0(Ui>NLe*3L_`}Ds4fO-| zochze$QNS)R;ptVB9PepG6{DYb)x4!6`e?#t_Qczr0m(A9RR78MmCiwC_5o)SKu3o z+E*ujQTXcbFy@|o`^Web-EOWQo25q{*p4B=o0A(2v&Fv-Y{y^5&gcS!>4;c-J9aN< z(uYl14ceWj1CsQ+Kb;bi2_doSbiXNT80_0^m?XrjkIY3EgWO)AE|sPB=Azct%L|T1 z@0h9T*j`!i&j6!}ZwA-48&lHtri32ng)31tVvo>YSMIM4{YzKgy#eKx{zz}HQ;*1! z#iRZ`6L>$ddH>uUI5y0tE+GZkpl>sy*XBJjWKv7tHiW9@>tt8fbB*fDzs9whbW_ys zwqoYzX`BA--6N&B-wh=3nLJ52Y_53>5xEcmsT&o$NB}erL(t_5`CFvFoJ60;m0uuW zDX%2;URVm`C4+Y}n^nFZ2Tlbh-|@e38XRk@b1Gu9Ol|d(-!$x=Cr2J{e?UqwfOpoF-raUT7|2{N}shFHY z4aDLrT}BtTS${B1bpzw*TmFdO8Mkd;FlU%Hn-~bdW)z}7nHK(%$}O({6d%{Xi|ae> zP2WJ|*u(KyW_)emcKNGz@a-#A?l0@}N5F#}CeZfxiS?NI8ocwVa5aH`IV=0eRo!nb zYDZg=wndRvR-EMWmo_jT2Y>^27&YtEYyXdU)^! zqh!c;6VJ8oSKC4IzeQE;idpfVjct8(&*F8e59H^+9It<6Z;t(V|9Ya~&)T4!D8iI! zvy;TDv!$GHXv&@_IoJ|ZsFqbGHMbRwF%U4J`KG=d(V^&-e{>@O4nd=mX16gos{zRE zFM#0Hk0Hl7pwslK^$H)mVN1f-7|~^`87cp8OQsT#;Oa$v&1!s<4N>V`C4U@oPs7l$ z8K89`L~bnZlH|aSrYC7VoynP!`ng8UBk_tDp#IYsv*3JMZSY4MPQIP$~1)sEo+KK#0<->%5RdI zRL8DmD340j#J{yyG20O1>MMS73Qrq9V8vFwBa^Mr6CZ5=5o)T+pK6DcMF~uAAP6!@ z-6|BzQPcm$2+rbI^Uem(<`}9`6<*Vkjm2vJgmSWFL>l9=UNrJE#UyE~f>}T=KI3qg zPbdAgj{(fxNm_pYVIM`B@pnUGP$`(5Bvi#Wf){+8lsyq)23E5vJM!liv5I;l5?L9= z<%i6B@|x0d1a|S=)uM>tS zs*Q=ln^|+Lt(22}G)&W*%0ueHLby>3N%UBR&iGBcCQO78XL zKqhHNBDj}1$B?XXo_wO>;uJ2a37STvtF;Izb8PMUr`4+Ayn9&v=&l_` zD7YIrj7$+JqxU#xj7C&b&9;?$%)4#THB?tRBDf<~CZ8;+$O7{M12?s%Bl)j~+)nAx z_LW5g+j=#1KSH{H+p_{xdJI-#Y(C`J!_UH?ej7|dh(CIhENqoN5hE!5-0hQCVUH}x4e zj8RZOa1=i(sI~2Hrm5StSTd1qjTS=XD=EZ~qjpTv>qxOe=731l)eQAiMII7Gpme$@I9Zl{+-fBZ zwckqQF?juwKF>{==Gu|HU;J%&lFGe{n=p&xLI=Ssy)Sco{bcct#WjDt|Df4vZF$SZ4$^r)R7&Yt79{8% zWo2l^!jvmuj;IMgX^K3#0=Hc$!M458Jl_~*^4VaazSw6vS7am2w8I!2vyU@qi}P-M zs5+OcY}f#c%p4Z-KP!IGtx+Ir>p`&ztP!qlw&R|Hf8X*8OD2%QZsoZ%``{bh-YEF< z^}QV>DkgD!2Nu?EgrWhW!w|$cAr#oAleo-GE8u{#=P;XyS_r_27_1@kp$>J;2p_i# z=)a!Fg*w*88~UbH+?AL>v^~in6YoLVhW4Xx`w&8>YgXX zUE=d?QMdt}zUk!cc=L3lzt@$ih-$Ncy^+`0Vqk_e2=&|*KmFK^h(Ai%yR#Y-f2RxH zOp`68MXLIde{6Z&yxMPb3_z~P93%L94gs3mF6BP+0>vUi{A3jyp5z>XKi4CSYA#Zw z(OSgwZ;_#9Tec=aW9;1Ks@~xt+0f;vzhsrn(M`8G+Llb3qDX@)2tw~71^GYMo#yZy z;N2!4TnH2x52-WG5MjfUD-(LloTZNfrzpwE`jqp%a&?N&m*>9}vyguM(UK-t$OT*t z#T|RH_5ThzcTQKT_g~%@mDn@IO_Y$l{|@kQKTZg;6vrYqtI(Z&!TNHdu9`0b2m*dN z+#+KM8N*VNj*63m8duCRJP!vA2*ZCmrLg(Qz8sIUxyuId-rOt%3lUtEtSkob{VJ>| z{qW%K*M&uG9u*=WHfCUcumxAcM?=B3`)_uYlP84)>Y}a7A_3px>@69aB1#=nDT#&j%L+9!B@J@5 z`>l$4lB*XbBO?85`98-*qh(XT8zR<6()=TD9oYfW`ex@S^c~<;FDAvEG6MRt02%${ zP0!b?(jjjtqa{-x8Um%jV(qbmrcc2K!R8l5*Vfjzry9y`ug`Gx zvHSIYZBY3NDTY3O)XEJbX(rkiDXFSP@Q6)u^nKK%HcKXw_<6VP2Z}1VDtNQL(s`I! zq*)c^RcX;}^$(yjvemRm^QTc}I=L4c#Ta8#%M^tCFNM3za`(^&nW^Q)tCW_TJ>G$* z<=~BEhvr~+Y}FzQ={bOo{}{ISpig^^r((u^vvc?9V~?6&TJVBPlAORZlOsbuP6;8i zB%7XPlge0e)}*E6mD&>79%jTNXgC+zjLy3_{Fu!*;X6> zAr?{~i3kup;b|zrdClRGLi*pXI*lsFFG^$TVAXc%rj|V6zln9pwnK2ViL{&1MlAP2 z?iBd#qs6Am=e60fcH)|hr_8NP+7rq1{{Cz>U%$h=7rp28`v0mri>Nq*Z3{OfxVr{- z3+}<)0t6?x1h?P>ex#A$?(XhR2+%meI=H(hKoeXacW~cZuhyzjovKNl(O&yI8?Cjx z?9YsYi@>gZlbn*$Z;Qx(li%L*3O!#A6}$i)s)z{sgNBlV z=U=(``1PlxO>{^I5SlX{XZq@y?) zib)~wcE6wFFf=n+ir9yE9aP8|v-)=fmNZCc5{D|;HoXLYU=vmS@!1lVu(5t1q#IEc z;M3~;`MfbOG3mBpnSTQC${UDJ>UFJ+-a*qU#}Qwz)0jUho)Ck{{CuOZgafYP)bpM= zX;*>pE8io;p`R8BzQ45=hf%r=UHp)GoKGN2l}>xkzn3~%vlaDS^*Nzxvu`&a%VA^H z`Qy{eA1Jz6Cx*dQ0Cvxs=dk|vzF-|UZs}-gh8tbp1OiL0L}~!Q=W}eW6%}Id=_SAR zN&JD}mDVxNETmj&4r9DqU~w<`$cGF0neQ*6^ImU>+y+N719F z#$GwbqB%plx2&iDlAxt+`|douA4XaEloEhJL|@P2h`%(eG2@q@zw67KS=X~wrg{}! z`3AQ&t!;(idq-Lvi?V*OWrguuC226u>SLpdPTxseI)8;W9DFIiE;ai-dasHkTu)yR z+&&THCwM$nSt)j^wo#9=@0v=yK;_?8(W&I`>fa)H!RGk@IXGb76-@QLRh#>szf4h0 ze0az7UBhUzU%TxI5J_?&CL;AK%n4apgG7~7FW=D?op&UM5>}ajx)=OL#31U}3E>vg z`iuKdFN^k_FzupQ+9c{XlkGBzM6KpI{#eSBFP26-s)boD8IMtUs+)UFVGAQH4-CpS zB@q5a?wM&|lNl=f3-335t0q|2+hu<<8N@GfMV?$(7+N%jy&5vw(~K^d`g@;Tg`^>GqP+6GM&1aJiBSi^ZB|ex9h~VN{c|r&@lpB@ ziFq4Bx8s_mGfq&Un_>VAjnR2V#Zay(xA5@${;w!yAiMq(AuIyE)m(s{U#w36XO(4H zVd1J@Qcof)rU#rEOpoHXHAB#%nUxjqxF)s>NsbU9k8dS*wW@dgIw4(!JhoHVa{AUm zP>CH-8iXRF(XgYJBTYA+m=e_xoTPfJSUb7uTI+XMrFCVzH;XvX>1L24svgsBU_dKc zozN?U2_;Ja}voPfwf?aH3&rd zf__M-x&?pGlBNzJ8;UxSKlU$&Mf$|pvbc*XG2r|S54_Mm4q?zLIG?$u zVyg$ z4zRJO@L5Snh( zA3uoB@Yb^ZL}Z`1i|3CoBHG4o-J3>~u4eA??LZoDQRGUtmHN+dTzAnL@)k1D-Uey( zXJ`R;6Ca-*rNRfI9-M&>t(oxUrE7})D^@$!NVsge#%4&IecXSYy3w7dRNGDrf@_R@ zSlQi^5sOy=R*Ny?z>T(u*u`v=wZdEUBh_j?36=qTUE^;SjblxUGycbzRovTh>nj-E zII?p6^d5aG%-6}bZOeXtX*P>bX*}q86?vL{u0r|x(Usr$ z0vPv6JHg}1ehehVMv(?2kZsehA3Jzaf>x*a-h%hUlV!%=mtT3?scQND$uHd>uqPcn z$u;u#!bpa_bkBfb(~ien;-6HnBZ+I1&BSeqO?P;x(s&Vvyog%JYvNlU3#wP>^k##2 zAnF9Ay)?0YpKLUku3+=1Sp&cG^$UIToxs9%26oCW0CSAlyYwPPHls-z|}ogbu@U9h-&tz>HdY65<*9%MR&(Z zZiM|oSsIWcVN9IK`reGrIghdpbzqtKF(7W6pZipT?#>|%+(!X1QK=}#za$cN$GWgo4<%4BCU%yxC&5=r#{>llUSuIyh(!3}V}5Pl`+RIdKe0-s z%%DPitSAenbwCfI6CFw5N3^VNR@jX23gg!Kp$NEZUQSDDeubAm#2hV_ni_#RHA~>~ zLEw;{Qc;LqMrhVF=_BZ8A|s@d$GiS2hqV@u!$k{YRuDO!{sTWlezIR5vwIG)`fs3r zy9EBccieoC58pjm{EIMLMpqs1`>f-(YQfvs8U1i!)U__CC%9f*kbK&GVrC!bSs3*k zC;>QJ3mX>V5ioqaY4ZfFPu^XJoX5A@oP>7=Bqbb&f_tgZb03Cx(VpryhE2?P1pgw? zu^~UkgE2^N#f_&6*bZH$t8X%sd;fh(n|*Fx5ErF!^jmk%o+iXVG&`#g?^%_8xeFu= zaCi4sK=oQX7%l@NF-~Po6wPRQb+`vp3jw9f(!2(BN%vdIk zfvz24E4NoHTQJEFtabi6Q;PFN&^tgy9>PV6Lg&2pI*7*|?RU<(uzpzDYWb*$v&}4LZg%HTfoYb#&O>;EBuW z<#$$fJ287tSy5N+owGwmevT=rn}^;N{8-Xh(VM{1EwfAVlwr$nIjOAdh?r7l`>J({=fkUtDxk$qdv;}~BrQCJ-#*hz?A=bmV8FJ;Uk`AlR>1t7 z^UY=lz6X@l(Fc@_1b1BsB*VDX- z|8x}E_V_qGv{7QM^la%|RTwS`6jhWHCF(IK;6FO{1m)o`#IgPr)5ent23T=ZMj1Ux zB*Y(u5-}gg!IpXd6WjDYB?YaR+q7%X6@EM1vr(BY4UxMw?)O>m%BRKapI^tu=n^ z)XVjOE)ERu>EVpY;n?Jd^yBb;7tU4UkG=io@&rAddm$`7!vO~TMh`F=7@o_1I|Abq@6y&xA?LCB;?Bgze-t2)~#=J{2M z&gJq`Wyojwq<6|ywhMKH3)VcNT@(?DI|*KqPvX67itEM!T=W%EC%^?*mQQCARup4F z99+{ln*=>N&Tbn=K2{v+`qUny1QLtXNAO=bDw=_k%tw-#O{b5$+`))?5jq>^H9Zku z6eN&~BJ>{1QfE3U+=WdPaBF$PnHm~qu)=ZHuozz`-r)YBa3kO71=HMs(3d0< z;}rPn4bCnC>M~@d2XKyG)OgMYQ01%y`|(x82mJ@LqBFJc3W@Bdoil9ZOz(9f^}#uG-KG;?voCz%H8A35KQ$0JgH|J z2NzA%1>z4xvqkqFvOlOEuYp4A#!ZGZ2vP5^x0jI%Mnpw4Z@xqWR z3P8kw5kEE`VN4xK08JaZmFuV}hY@^dSff?({J>qMTe=i4`N73Jf(nARebCVPmfW>h zDJ=U*CufhxM&I(Merlb(3Qt&VdX8CJshC{qYZRvCPX7E(qC*<{>?5Z|51LAPxYE8m zdFHK>4k?~AP>6$4x_vGhO@D_mPOt3;LhJ{aGYFB&VwR0lCN6sub{S_TRO{V)-d>nb zkq>+vtKn`ttWZ@eWA0udT(Drn>ses=7edkHWqCEyQvKX5`9(M(KX2D^fDl8|AWxN4hBn_miw0aW%v%GDK;Q7Bv~!+aY4mnrscQ zxr+E<)9K%2>LxFOlY{F$|1WE*k@#$LJ7GLTV$wPQZZhEkQE%5arRfC@ez#X+ANwGUw=<&(GAffyx5~)nM^56KJS3*Eo6APZQ!b&xMnSoW< z9xn@e6}?+zbnkUK{WBWvu_Z&p=op(!mR*(s!@{iH<~kSt#5OFMZ$5B%q3fF_H_hWt z+-b(jwm5Qqo3~=UeqFzG49LTRPijJ#LeQzKpL`q2(O^PC`w#FY?Q$dB+sc(omI|IeplrqB-Bg1c5lqxGCQu(x+HEc6xPEZ<>{L~GW zVMZZZc=7g#7Rr66jlS%W?sF-Lks&#!sh9bZxXLkBhoWJyv4ud!9kMw zqI@?Kf6Y!h`{O{%1-c0LHH;Lnt}0ENy_VVpW0yC_3=l;NDz=X#U}J)qO{3ZnxS59k z!N-fw)tw9GZX;5NmQAL0oMeR1!Y0{!_oeI^ug>j4MXZYU#q~+&hzv;T$k`NZC6&-L zPk9wOFxVVJ<}q4hyqpM%{P9g$0{t(gM8otFCJop5b!Z+xZb&VY(gnSauS z*yrGY&%8g}{q$^{n3@}+^vVYx*w(+me&!54ux(z&(B=}Jt-SjYmo7;YXbk^q{~|o` z!>*27;-U$ncYkDcB!mNgkj5@PY)Q|Dem#Zti8-|eZqkC@#x%rexp2Okfq1hyd7W}Y zvH0!2eo4qN)j+pmi}0UlDLa&?aN+&)kJboITRbLL>nh|DRq7LIJ)$e~QLo!X+l{%u z+rZdtOZ>u2eC-mY=%bHn^}OF{I^p zK*NJYVN8iFz^Z1;A3L^TA`eSm{2+sql8BjaTTi%m_<_do2H8O}wJNto)xcQ=aEgV; zv@4SUVk>9ovZzLile|>ePS(*<<)(1^Pi_V#N-JawbHHa%itEpmf)w} z=nKzH^OD<8afJXysBD_<;0vi@5qEVqEEbjQXyqT%cKx_WW@z`8CTw2u$eW%yvF47& zQLWC6ML*5IA5Yq*)gXGK|1?M-B6}GgOeTMPe=W>P2au{;+c4!wy~sj-)W7N#$F7>s z;&{`x_mZEj z*+SkGC=fODMdZLADMkBs&C%O+7x+&7N<@xv*@9c-Te-1!pRbBuAw?O z4;gJl+{_ELF7GB)=qAl~L^PF+#BbWJ?KQ?&tb+67tBoi=ovD4$Mx8;4!=I@RMJV6~BI&Pe(zbQT zihDf=r>Cai>xbKc1A@r9jqr5&sv!88_&f1xRjYXjQyTN4x<&Eu%z3ZurZmP*Tub_PnF z_b672d2`g5P9B1UG#KxY*zxvjYDyR(^f}x+Pbs!gG5&O+|S1j;|ZGV3C#Z1 z^q#JxO5A8n^D`kE-vsmqJ~BEXwSFU*?tAfE=s+Klx}%=r2VE_27Kj(Ph9HJydPeGe zAOtk-rCrX$*ZU|5OCr0;m^=kc9Wfn7_XFcE{C1XhFUVK&hOtFSS&{@%6BJy60_-Y` zW8kGpMe`M#`STSQ#obm}H@n~x(}f{SLXAqCxIDvKR|+J=phx^J+lBz z5V$=?bit5jgis)RQu3?KxU)K~b}cAc+cZ6&j1Xo2i!qH<@XiMu@`b^GvvR~*9hR*Q zmiPiz*4yc^eUamzk(~3sB?fWM^INkPp`%OQV);S~QBV>p*4YvhGLnr4>NFJ+7wXks4(A9K7Yi){ z*XI?&ayx_|0yBs(9=+vGQX#YvU>YT;g13cL`wcg>V}pk{1r?3QrdP!d1ngfu*|l4t zNcRLBD;09Hav%EZE+t;#J;`+>>`QS}7=sYKr-cIFU<`Y5c3u?N=+`f$9@|_d{#@4X z9<235>1tF@39V$)x=PPy@gW}B@by^-Ez!fOLS_5rW&1SG>uShQTSgXu{e<^X_WGYs zxb&aCCAKFo*?RkzNT2aNuI{=?SrnAz`1{*KnclsRa7H)P`u0!4S4RYW#!|Qt?!6{S zUSsxz!aBecCN$Wk39EEBcEeQTp(v*4+?BMu&(b_u7}}O66mPsuK=5rvzSJ}H=mJxj zp%2}bb8q9!uZ{1(#Z@N&!ckN;F;vXcIQ>bU7?O!#};Ry_-dJPqpF-)rp4^y=P@U^u@0MMPYETEKF;%^EM7KHeZOaaa{Jhv{i0XDhH^& zhqatdx+FxU$}@thP-h_5s1hy5ioY`T0D9E=bf70Ok=e9@k**3TIGlsnOWMP=Z>4tQ z6$An(2kU+DNHUEjYvc_4DY;PF;mSk`r>>BD&&p69_3^y*8O~cRuVN|Q*0kk2PZ>^! zJ-x6cv8FGjO?EncML*fJMq7+9$^HDR&12c(>_fGWq92a=dnwOznt{x;Z^uN`XFDU5 zc(ya{WNtMB20TeX+=0?SW=1m+UDvt$s-^XXakb)pCjzuqXm$05%*%VTTPlqo>-enF zleNZQ(ca|ua@y+gyV$wF$@WYfZaTpov{6{WUzLk5)3Xq>ZE8_Wjx3X9#`T>n6z7M8 zm#3be8yfwo=IQ!7si8hdUnDs!;OF7@i=?G%5LBYVoQT?hCaS8Iz`M;r`g@N%2qh9q zb)vk(R9(AoCxyvnJxVEOv~T&44Z#VHupY0APBHo;>`V6KJwp%LkPja@mjxJOzUu39 zmM2f;LS9k(aIt+RR4R|~{+s4J!s(n>?5J2^7s3O`iQ@qzRIgb+E=m%x7pce6YKb*9t0&-G6hLDhO>%u+ z-_l>^Zfcl02xb1q=9sZ0p)XQ>z)-huZ*Q54Drg6ALEwq0NiClj%clhixpXpMFp$4a z29(CPD}UUZ2w}*PBy_PdbH|Pcb4Ay+ISj*-K(;AfAJJ0I5?htoX}mu-UNalJ?3X3d z%Y4f2ChezwPPivh&J|vA?@X0p*a4?ktsg9u77@1N=3~((SXF8b>sT8;prFV7S7RPY z7!0tyl^n!t3W9RQ)q`e>;PdbEG|u!fxT6F<)NfdM9blKoWYC9JIvh9*)y&#hpsW<4 z^XpC}+6rGevD(6?aJ$12CFJbWg(tQ`mpm}z)*$u7Rf&NEDnGLqBnN+Qycn2{!&|H% z4Yh-0K3-r`e6pCIe^=DhJ^p-3XLnuCL;~Pq)P;W%Ck?Y$ z+4;$Nl95CP<#+={OZar&%mE_fada48)-ioHk!b!hYw(WXc*1Op>-$g2uOAH%(E?+= zHX~iV0GOh`x zw4>plx}r@A_Pw<9H^puWOiytyNdKS6UBw~GJ*6($Lk5d1HY|Ea`+6%!WNs)t7% z+0thT0(GD!4NOzNc?I^9grVg8|2g_UmLDF34k8BqXTiPh;-EKHAdn>wyOl48qpcH% z-B)cb1kiu4!ovcS^q}Mf+a>?4vH1G`3X)2o6!0k3NrO;T__o$0{NKEY4$%L+{Xam6 BEerqv delta 40631 zcmV)NK)1h;rUTBT1AkCU0|XQR000O8X<@clIkZHZG-Ln(G6Vzw2ml-aWHT*gdM;{n zRa6N81J%+^X4TS7W_5TA009K`0RR956aWAK?Y--I6G^f*`kTIrYWK{Cge6(BF%5Dv z3>dm$1{yY|=j7$ZQ&yGjf>M>Hs)Qw`d7gC<-;cd-Z(Yfb$bWNYWl5z2Hnx+srmf0z z^Hsb?)F`yERsHs24Rwi-Y;)ne%gkRt?#~ToQ#t} z5v7UOIE~X|KYwm{C;p&FvuV@&&v&zt(7 zGkTdHWQehw~JPnK2=gAvrVVD)ur(r(Gq7jhZ2wUDq(gayE z?P;F2kwA);7hn-Mh|uM%id$ha9)_8J9EW|c$i`udg+t1|C)Ls7_1AitRMhvt*#6XspweBPf!_Uxln1B8Y3;`i@=l%PH_dI0Vy7R;P_iuiC z`|SPuJ6n}Q14FvU3c$>eZ-XrFjXfIp305Ew@P{78-0gHbJ3J;}{fFd1+|wQJnV(O+ zx8XR)-thL%{H*X^M#q_-O?f7^j%jhQnA_W(E{}u3K2Ng%7uz9F4DHxx(Z6lF8tLb! zD1RUOarD{8nrYAgtD-+oGkrjjXp>=t&fZa!jJU*t&CP z>rUrG&iXbRhydBGjITmr7#~5k6HLHk{V1u5`;Z4=9DT~jOvKtK)x#)J5{;A5$J3c9 z7~>{`MmlF0K<9L}${Faypvz%{q|ursyN6D9-rL9HD8?d({zp17N3cZ0yikMKcYonS zzuv|V(o^r?2b6r<``v?>wx11X8)%6^I>@mZ&=2XrYY)6Znw&(ZTjaZgACQ+%{2&~~ z=~U!NMnf+fC!Q<`_n*_VHqP+eYX=@lDM<>#Pfx>92(%`HDCDGV{Q1~F4&$vsnuS>G zfB)FozT4TQRkFBIJU)$*b~pjHl7IMd`z(xsQ|2;x&z8K%{3HivK5Wyixb5e8behb` zl~0qxpR}VP4r$vjVCy*^Lw8nY%fdV?+F|mk-1;nyOwyA?_kgwCwWcAxO_TJ1 zS=o{#X%M!d(lq`=JFK_c+3ryG1uGADF9ts7?C|`2NJP1m05ZlHL>Vm)8h>KYHipsc zv~rrR2h`Cr`CKCPL-jNm=N^Xac7Ei2P^5ldv`JkoahI1dK8>T3Da4V89W0%8%BS=^ z$DnTKJ~T|7K&9Ce?9fhs0Iih?M`4&*rdmZ}fAA5y=PxnsV{dY z3{^IyzPdYM9NTyLas$FpzJKHN#omLVd`swy%>hH{CeRm~0T~Fv+WQKdZxQZr3Z>$I zTY}@`fANbj)IQ~__)U3bpYco*0{pR0xFnkbgd_F^ZzS6WvcNv&gk+vkhS!&z4?`Kx z>T~8r`$=2$eUl5&GG_-FLS@ewRW)lnur)41e(x_#c%J_ET8b zNthIvlBE7K?Fsz7rHGdUo)GfpqM!zm_B;@GJSNk4Olrefh6Q*Y&Z$8Rye33xaN}6X zkNX8pFgY0baVS2g`sW~x(@YN{%q(K^4{3wvg+5L)O%&^3*h>&5eH=GT6pS;U&eARh zd=VwW<}~t)!5NgN7k|Mc8XJRgUZlgn`SCb>m4YDt8kWFD%PWVE3nO?Rrv676b`WOJ zL6$Pq2(=IzPD^QuCa2K8s6f%Cr}R~pgxOm^h{m|iw{a%m0No+v-+>WNKz$ga)2KJ zS`3*UVulT;4UwS9hg4<>brnRUpj77tRP{JHC1Q_0d?0Bw=zQwHoH-2}%_i*={I|8` zJ?gr_6clHTrdn{6Buf>n zmZ46)hWb(N@OS57m>8W+!cZmV)$_1M(DFWLEkWhD^L{YSGT=z4SvT~MhiYOEHyGdx z*xr^JOuC!#0Zzo8{J>^Kr5QkUxltOU_N-M38mgMxY=2PH=&I4IFJ)I3O}))50ZzCG zBGtTKWT$H#``ZXqtPs`=@(S-XOUEN^jgatPFt|h&U1x+Km}E%<)DU1nDdkPFks%VP zwv+S54or!-QOVt?F(cHv=nJiAz&PV_m2kdluRx!6K_Is~?`8NYjJ;pXJ`&p;?m*nd^$QvezPNG6X*mKKpHZHe1AhfGbu!k;bG8mpk*~S0;mm^KmDYP zkcW{ko(^Q$Sfk21YEp)>aBf*po5>VVAp6B*K{!ZJwO&I-w5T@OhET@ojV2rB9GXN$ z!|2Mqm_nf&vW2k6X5kQKj@ZlCRQzHHJ^%1XgJ7R8U~0m)dO&{Y0+1rpVB#;{`%fUq zpnu##Hcp<5l9_w|x${L4V}{cX-51pjtnvPn=pi(fe(z_e;~^}Myc37XX>r!n_f$rN zDCqqs7Q#{ur+Z9h)yezkMUXdLfxM|o-gHs&_Hjn7L?W4!bqSRdcsXJXZN>An0_zg} zn#uNc2u{Ys<1l07@{C=t-J4IWR3Vn2lz(Mr1j(XI8j)w(seC8ZxSAs?IRc|s7BQb% zO>10&V40s0s1;bB?5AAUtVuNAmiUb3*+GZ_S>_Bx`Z&zyldq__OAs&gV9son;_8$B zI`N*7R{vt5xO$rE114HbPDyZkMv0d1-7phC^oXYo9)f!&BdV#lljVIVbK~*j)PL*K z7*4`1eYt+ISy!H?S@bzg3O`=izM>Shq=m&+wk~%TB7O*pnU?H}UqvgvdfG0Z zf3^;~kWtW^QP;XljnUQ1(W0O)Gk>bfEA@Xzf)>}0XtpTvMw9sxGwHPD#AT9|QNW9- zFD5@H1G+eMEMHCX=(JgmKAM-&BMPcd;f>Vl3DJ2idLL(*KV`&{-(Gq`Djh=sW0due zr%QA}z5@BVN_xHk+0OoUmF;gg-4x~h;~!N+>8w%C8ucw$qZAl;K>^Y4QUtPTyo{4= z3mpOXlZy)(13&+nlcx(H0r!*03oQcQHT%*okska#L^i%jlz%+zcH7@00or9R`=Ndz5{`&c0#m!n9QJ zW4=j|>|6icc+~$b`u#;SDd5-r-+T9d-`Q@$&;8gRj>4e%h?Mq+lba130m75G4Icps zlh_R%3I{XbS(c?)W8+1W{|z4j0h1pN8UaF+Iu0R!!=tjn8V=<|LGDQInjgvWk+x{= z-@<|1TY3pLz|{k-L|k?OYb`v5p@wyW6!6s8NAH83Kj2Lvf8 z_078{)u)%$T`Y!WnMUxyO|clrOXn{QE zvv7?`+UXY%%xhek9hT(rVxjwb0r=XpG zLJuvBnkz5Di_z=zLQB!pULX6a9Nxw7o*w*V&un$q+k9wk@E3XzU)e{*ugi=+8js8# zA|2Gd@czMmuyhZ0+q~YX?i~4{c_v^REhR;&mCgj}OrYMSm_P-aW~R^?whm_tomaHr8vBY(gxn@0wdDou$!P8l9!l zLa?(mI!mLoG+w@?@g@3}4Fm7jlZOx`PUw<<8%F%!naN1z%ecwyz6c`i(F}~SKPAS` zI0aEt#GIr_aS(mR@#}T3wu!U3y1h{uMa#DKRqc#uC&O`gJQ##|&aGt9Dh6>ps_|Z< z`Vawsn-{Cu0ocNXvV1k~@rylw2^zH>KonG;LLw_IK1FFZ!Yk&IM^@o-)Jf6D^LR0f zsRk%2Ell0>cduRwL5n=?(Fi-I9q%@gxNbLVX$MqDTT(fI%!+0}i>gof&%mXq2(s|Z z{W*fH$n55it0HeMK_$=4Xi^HRPv-&IITs^;lAhAq9f_E8fwD%*kjFJRGTq7b{vh?W zSXnju=1>s{TB<6+4;*yu;l1jtL{~iCtDN3h5u6p_23ZlFjF0ipn>bwxphR-#OM#MT z))jC`$bcPEX*N>H6tx!yB+*eSukA|$AsOnqyD~MW5{DO1$z!v5CS-u}!-rNwDKsRL z_!6Lhy%bVNuTx4a3&Y*3a%cyKc36yPVnVrqVHHxqa>VNTjpwPwIbeq~$vBhD^)$)s zlTq*v3J|WAu*uNuB==H=nSqku-5OiX7DM}zo1i6H8)2o`h*1+e{>6!O3Jtr;I92}iN3`CG{wOiD13T`ih!;3S_LU7Kij*eN| zaeCe+kb^m@y45^m+}I&C&3zbAuU5C+kP_DVw%}ZP$S5CbF`y*$r9Tq17&eVNPgBKz zrwG#1RHMJN%sW?$6bC({mv+>w>TgB?4s6AQe+@(6?USYP#PFDf%Y?){@pX6UT110# zkkX{W8!c!7BC*=6!t8Cb8rwCl*3_9+Sl8SuHAc1i?V4HcXUYy}$Or)+R9W{Ha$}`= zHST;!P6iz%x!0bV0zp44g?c@M(4skiuR#*a*@NihB+SBOU@L@VQLl4|QoDPWE+9?W zREo6G%<))C_bhW$i7t2?#tZQ>^c9Dh6|8Jf3k_qPj-7i8Xih7t=Ybj0p4HGY@1bq2 z;6CoO<%XZO(AhEbw1p>`d73~It>H9*)i(Pyfz@_BA8%$ou=IsJ$zLj;JYHXac~!V! zLb@vXHkFCT98Pm7<{j!jBHoBZ5l5f4uiy5SFHO4UUALzs(5so9M3JY|O2wR{hJ0sp zcQ*HHX>(^rt&4cjOgFkLL$NG?ldKi#jPK6)?u_r()c77{=xsdn9#5it8S6XCPqHs# zeOK~J>pP;3{8%@zBmCN#+)E~Z_xvn9C!G&7&5!eN4Q6y@NGx0PrJK=-zceu${y?CQ zK)ndzU`W+NnvvY*C(THL-qQAFlyKNJJ(S6dHl?(N!?gV@L{ou}!&cG}G4z0R!)!Z2 zEqxeTspHvvI#pyPizvYtqqNDk8Oq8SHywK6Qza?I@O^$G6?5w*S{W^Wt~b)5Qo2S- zRDI)AnqQS7bpwGCbCGva1GN|R+oBvIY4yCcUD9QZOPksNpw{O-g$}g)`onWK607Wa zJgiZ&sbdUTc`fqujp1ZRd#*_?ZF8vW!XRIPtAtA~p1Et+jiQ`@F9 z2776hjj+^TeRF;R<{*A5rB^e&`JANknzzAddPaEQ=V#3FPM+#9bb-xB zn;f=ItnNdZ)z)=NEO|n8L%S64#WD%G?aUBnzx9e~aS$MG(wKYe{l7%bMq@#nrxJ0P~I7 z5Xt?)+)Chan#Q3oP2l4YI^<`xTGhB*pxC*VxLd$-Gh&p&>JoU9%>K6)F&vXgP6vGj z`!SZn3R%I5EK8YfOJ2X_c;Jts!jGfRA)`W=V|kT-;iPy>99m(6nZK*`8EYlw7N+t| zm~0X4`b((IWfo-d@to;GtBxcjcFb&0-o3H`Y=^`IM{#$Jtl5c@MENvI!3IE|pLoW@ z0eJ!4@;Et-VMcVJGhacv&YKsoPr)k#cb-P_20t*R5cNptC-UA5Mi-`GBV3jXvv!=yxDVBaMj@_d9^patUF@1Zc zhD45r!V^(>Nx+3jF5j{uWoC#gHI}9~FymBz;)@I%x2d}Di6D9p#tEdyHWt#BS8OAT zFgXh$&We>QvTT=!Mz7=MExWg^5xsQFzFwc{mO1KQv10U9&xxhspXEBy?(C2-AK5j; zC803X6NiPndP#58uAG2Y^s#@I!3?X_CqFDPkw^<)pPb|&IiBqPQPi%vMV#ToAJe^m znHcL%HFn=YeapiCL~CgYEzRR1X(Dm*xX5{l>cDbs)4Mb--$2h?zyvX-{URX0eJVjM z;CxV5C-#K|#B)(A9u;TaZQ7-` zJK}Kf>O+#&j_t6WJZiWP^UU(P9ZRa6u)wJ#Mpqw7ibAz~)-y?&)OsW-#(|xGNb2>j z=|IwBzu%-0Vc+H2>l{w1Jt;vhrT+U;o@fi6Jc^1IJb0``-mG};m=YDMFG&Gm8@iNQ zntI)?HY#Jb3%yk z9aCB69Q|eE)2Borc%-)H(riqBt0RV1HA>AoJ1j9&IuUUCS24)%Z7+h@)W05` z>E5+;^swvUY;R|1z4d(jO@GQ?U9Z>bdF^he+w<51L0a#BMO)lW=}CQmrd1rJ&o};2 z52hE1tx>mqB9TGq_olPJP3zk5Xqf23mC#`ag+k{;&#RQCZh$cbn25fr8kr- ztS-RvNJkdwZ$Lt}kIMnC{A1ue3+7xLAmhIT}F0A6co3CwGyyPxi^Mv>c<6<5Q z%(y?l9uwvbwAx)mh)cCG!OoeeoxRrCYlXe`X_|}+Z=YE87B|w;+)G$x1I*|=HLmg1 z4AEEX_Q*(v%CZGqx|6mYMFCBd{2fsNJCjZxxPR5=JS@iD&3O;|hHMBr<<5K9_46L4 zT7Z^D>ybj12k8YedtIZ@8ZAI3=U&P}^6g^joSnqkNkqqg<8~5@v#`nzKVt9CfOCp(N-DE zM1RlhI5pLFg;RzTL|wm*I-hC zn`7t~8!grgRR;Qn+?m_x?CdIGGeH^*%(jTpqSiGtq4k?eKeJ@iaUFuIuk)TY8zF$& z_wT#R*vhJEK)G(s5}w9W^rj@KUl)Uym6omItkN08mbmu{E(kYzon17n zmU?d?wy!Yn5ngJ@Z}!4pjdR1Uy}JqnKlF|ITJ~nNutbwc*DU*d3Z{;=vi+*iZnAHePpTTsefHqAh05G zt4B2}u}zBJ(6=jP9*ORpq}elrTb6GrW6Hzms6(sLE3!R|is@}4HK%>ND(R+}JcW0;V zc{f1YbI>XWt-21HyiU1;R)1YTXqB+Tyd$4))AJRKF_3u$TTFWHZrfcYQ%rhp*~Km$ zN`~(q`Z0Qt1C@CY#<7Qo_xgDqggy_W)3ZVXwyI1mn3g|KJh3EIsm4Oi1~uFTZY zX@Z#wIwq;3ozp6Qg&9<#q|*e1*^mcVn4(@*s?~&sW3e!{oYkdJ+JEcg4|t#q9Tc4= zjsJXsv5)nmv$VrH;i1x0+u>Sj*ZI{0Gwij}P-V~n%aJbazFCSqdzTFzTx%vb9x*LN zT$h_u%%RGB6?($eXZuAWrpVF{-n)WP@`y9SVOb1ix8hJ7M|5pZ?5$4FVl*sm{J227 zN2w}vH8}%^GjKQq$A8x|a3nSZM;9?B^R-52-?-ZL4QeTP?(7?vXWux8h9k6YynFT1 zdl}^mm@mik8`r&hFzZ$Y zR4A@f!0(a@Ln@j5m=t8w3)QU%q6+;P)Ri7VRW$A@ccogI(tm5I^L$2%TMNd81y%hC zCnI2=HmzHiS(m9u{1o|UZDmah=0}l^aM}B(R0!72xtG@UG%xgAGpEky$4L;LL`fK! z-sc%Hsz+tR6ZtrvZ&%{|3-V9wkBI*ZWilEjgc#lQjAQ%UvYq_LQRS4OkqgfiTTf9Z z)Ri5jk2`VB+kYpHddm()f-X1VwAzUvtb#C*{|pB zBNtlS&m!4p2?who%Zm+j89|gGy1sxB_&e-txZI-jaXW^xT8SR?G&`ZE6#; z^!%^k)IKe663Zq+yR^0_i=T}uv!_yyN=HDxvO+5U(kO{&*yeX>;l~TMn&eqeyA9qn zrn869v46Z%Q9*M06(q!#e$owW!RflB1m1ae<`tEANTJ| zH2Z1#D;&j$GNZ;5$xRHrT8L4V;7 zK8C@PZDP5rr)Zp>hk5a9h{ncG;lX$aNna!|5c1#{lbuDUXOQkqiq>|Xu5Bc&%abdn z7D(QuJ^eid{(;V}KV)Gr9*{R~({n!KXqZxnKNz&w4pOoOs|Grn#9{@eWYA8N@wO4o&Y(C<^sG})u=rABOKp#86Sq!H!9dEfEw!E1ECaE_XW`%@j%2x| zQSRkM6vtw%c#R|#E%ewa&PfVft=YmN^0ejQyJ1m*pwO;dS&-e2Us}4t(tkY<<=O-$ z*#%ZuO2mPvYV$2UB--EB2;e=lFaghPgJ2t(hYH(ZG?bGmM7-rT{E$`zYat)UMUKy9 z`}k-BOlFvW)y_&Tye}-*OUUOUYo)+vQH^Q~3A$0;!b*wj0Db>I{7B7ce1)w` zv`~Z#QiZl5H>(t6!{T;fvVX_IJ!kYDo-IVA=|W1O@+e8bMHTWPB^9$@j0?>x$t~I} zT~yDKvviIWdr7l&eFE@}pQTim{uXBG;xe`}QD;fombtoMM=D)-sPk~var%-Wf#PJY zzU}9EdJdzKOueV!AR5A+_9g};o;_18&(^c(6I3KVbu20T_1fOgaewL;(H6Hc`EC_=UQ7pDn|iNn@cIl>)%p1>MvPRE{v1s}mmT7G9f$D$1$kzy z3xZ(aZFkM(2b$M*7Y1t^h0Gbt@!c87ln6Uq$Z%eWT-8GpM1OhVCj()R#u?EThCoHV z#%qKG9MSD;?}A3x*+sps^CSH3b-Lp8pV3BA8{6Hd^2(y?rO^bN(=2Ldv7nNzM4O~Ik^AD8&^PH}Z=d~DgNYHhFMb(0a-JnG z<;i6xOC)q)Uw`|uB=IMG?MqD}4;B0Rr${7E-ulXKBbv8V{jw$@?KJ}I39;2ifJn&a zPG9^oqA)Z6rAN`Ny03oN5-NcIilEp9R)fjlj;k}{f2Sx7WQ=RMjv?i{d+<$vr|Fkl@wqn|>rR3tVzpw>Jh zoatq;b&atvk|3NIXSp0EtB`3FAR@Rq&@6`9NYc@i7#Fy~BTI+mI|bo_*c(!EP9!sF zwU_U{k`7WT6bJU4kRx@+gBBc|`y)~#3hj8QRIQ41GWCch=uxt(z`?w{ca|BdhqaWL zCa;ODL4R>S{);(qd~c;=$0zkIvmVCR`}_y1h-T}vzdUo*O%39M;=4tzYEZ8gOWxHW zndN1Tb9T-Dezz;aZrTM7J_6sy4GxQg&G#Bu^$&EmF(zeTSUW=2P-eZxBCUmWWRg9# z=7LPMx)(@D>ecU%kYe~H67o@g#Ddi%oZJOF;eTi0;jZF(iGJ_-oZfk+mn}$nvK6ug zvc|K}4>o2eIZ4xEPLks^nDTkc7$bU7p#6+hM9HbkH>M2oZm5WeLP<$x-T z7;{wKR^YYqo~Mb;j+YO6V7xJKXDnO!b(6Ds(*mD{0b$7Vz2n$VK2k3xenEDO;}Eu} z1b@9A{_iEe311+wqV=&6>hBMI( zIEj#pEOzn8I{r90)c(Zpim|8j$UgSE(?d)-bIdUTA9I@6Hs-p|iDj-iT?_XvY|ycv zETagsa_C1C3uwp~WPJpzi_7aHsIfk<3V)Q5kP+kA)Jc@(1wY_bXFrpt_#)7(7DO&0 zJMO4jQ3JWg@uH6gGMNpF&%t6-Oyemr7-_*ih252@|a-+$7 z61lLu1c4+gqlFi9bMIdXPkIN@=g@l@p2B)w!i65qNXn?I&G5eODf-G8cWc($l`?_o z08RInhZf%bbWBcF?ut;G`?zoD4bxb3(M2mLqF33ENBl>hzJsGV3u+omgZ_QQlbbDc z0a=p}E-4Qs4JAhkEoF(fJ>$*V>06UXE_eY6lffvv3xa&69V!Q)X}_qhNOR8mp-B~t>kJE3#jRaP{;<$QL5`W)C^+j1*L?hSj{+~~!U?s4M5^5t{rPoJ*@WS%AfQ8${{r%lT;0 zG_|+oCq30S{~*3&*s;j-8#-@XrNad)t=;K*DeSd_ zIZr>->F*Vvd{|;gdtY&>X+!GuDvhHezvHwb74E%f)>!blDE#chn9c%S;=6m zTVu72{9843u58&{ssEf=^Lm*zZ{+(b#I{L{B@3gwNLJ!7xbeUL^Z(+0^uPb}|Ft~$ zO^*fOt69(9$&58inmaMK!me0h&e-XUofXDTaS^qasnh#&9){joQH=8b*4A;{Ne3VE zPMV!=4Uf~jfUm8)yFc#SzrTO;-E70Ctaj~YQE?GYH;rBiaGB^93wymTmQ4jAR)&S? zgC`MPdP=r(eO3(8p(L=aRn<~jzNy6=aljJdrf44@ zU5t&fd!-DFqC6w-wmdHR-Y_(cRvNmAuwDs$*C@GXDV)|h~(3>oko zx3SZuAM~R1yt!mGZ?3E!5U@KoPrFgVDi=DB`rx55f<)}8V|ry8GnoYjnRF_e$VO7K zc?f|QV)V>W@(DOMz0b_@$m0m*B^7jLS9))ThI$jx)A9`hBX`f5yJzH9V233OGH({` zv8vZy*>j;J&D!1z6-Ixq`a0{R5vbm`YnmyP%)KLYCsHb=j-5gX7V1FT+q06fVu5<> z77M3-UK{mOiia2Qim5*1mK4&sX`t6?aO-HGD?)76uRspDX23e9 zNJo8dXP0}Fpa_E=cM^7-7DYN#0^;z5#LF(Q-+{8gcZ#SWd}4p&ui;bzb*LB-iL^P?fNG^tE3c0K)J#475aw3wv=HRW4<=R>tdI*u zE0`apSYdIM2n>H&6Yow%+2b2WLx{GDP9T3;l=mko^^>ZsXb764utSQOsyf8$N;(8s z)pOlrz=l$~($XhshRaN}RIkHSjSP*SW?o9&x9SevN?E^jhl3r~4Yb2L*&k~dR3RIrqp7?thMS47o%UMZ zwzP)QuST!4OShJu<#e3-(2F4`ga13pUzQw%{MiO=1x#V3G>cUyQ zoYhNOyKr)arP-RJok{WeVLmb^m>mg~I? zKZUXPi`hql)$(pqI!#r|Pdh^8XDqh4jL+Sfm>R=%F2y7$?J1LoGlw8!s-^(WYt>>} zqN~GhFRkD{80#p}g@G1(qk&}lfoRf==oZMpBDx9Ry3`Z9mbjM~OB3UeZIub?sCZ0-1##cW`1M2l+7a#$>T z)VH8AOUJ6@0R^;ZYcA+9R5)ItGpK{ltkKg@T|33J-08~1lGJH`PW$8J(S@Pte=2D_ za;EY}6V+7zW<5f{YAZiCpk5dkYM`i=ov}lrwx0~n(#&$}+X_(_Kt-7!U%P*|3|K#| z;R?cxYvFQ44>!n=ZfKKK)4>eyRzGi3VS}nO67BA~!d16aKO$l(I_=kK zze4D6+ON}oo%ZXr-)~&|eUrw}n8#V@FMVcAiXbH{p#qP1W~TwKQ3DozwQd)wVz?~( z*QIO5|z!R)8EI$0%;{hBcHn z-l6Z;zj*;1yLZ2fS|M##L$t4yWaP6XT|*7b2KI*f5K+1dpADd)>9~L3ld$%QI(g!` zEZ#?nn9tC#jyk^^nrppMo8OtR0%%+5P@ab^d?w$;GkIH^Yn;ie8KDw9i{De@SpnFW zfg0n^=$)0uYNg4;QzA6j%`_r*rk#eRs%fY}hGaW|7C(8VRj2miRs^q?llv8oEgk&@ z)vsf5DObV=kao!0Tt9yxS^!u?2|>VFT3yePHZu$1Pj*DWicTaKtjz#$Z1hHx4cjDh zh8Smv5hAWL#LOi4SDPUw#(mLQVw@#LC*N6OzNRH6OYznmw9k*3L54W^%$G6AC}m+$ zyrg9eH1?uaFxQkFRyYIBx*-e|qh{IcF5PP5@C;54GwrOIUk{#7Tz^6oiGRn%70XQ zDlxiqj>%yJRGb|^x;3CfNOiN_iOTAhu{BgP1H)N9(>qy*6L%PKD)|14^|}a5gtmID z`)gcVgXtXk%7%Xui?%=iAp_|?SA%bOn-!P3n1sU8ODsp(Tx;{ZG12{P=+7jmwjG>& zYcuRzyt&2pytnzn(&=%rxw4U{$+B-#u(4^+C zcttq^LM8p0j9=w=*`K7Aq+9Gperdl0)#&3Ph59%9U7gFwb5| zcZxOGDg&FTQj~67WFyVp*CTO0-mU7yZs$H9EUc(0$=8NW3APTP59F*EjGi!bd?J8D5-y4p))i&L({b~G&#GAv%5IE%N4V` zfD*;-Z5@P64XOVQi)_&gc5a3x<;&W z3(9|pC1#|PG<#-HZpyBnQHEOIW(nm%dllPy7#+!F#s7T_r?9&4V7R46kW%`*I3rT2 zvd@KRC9G*ASK2F*D`8DF^%t$>8f_27+IYm<1mQi(;u%TZRv|lDHCHiJ= z>S=w}(#c=&+Mcl*-Mu|${anfV2{UD;Yh4mQ6G8_mY8s@(wm9q79#%N_#vazGzhGp& zrFG5RCSliH;N88YJtWP#N4J)u<{7Q&9C8=(oNZ00CO6QwcEIGB4q%qgw@#SP(gQy|jP$V4WAWOsvaXuft_!dd0z+`$$hvbqmWW<4zgB zG0M0Dx;Wj`>84jpH>HnCFRql*e09~)p&uph!U;Nl*dRHjCYq0rdCbB1*fV0q3+i{f zB8)#8zuoPwu7!~ot}jpjQe@j7NK=UH%thS8?vY(irvgcYXBiu6wmmt&WH5hGCG-l7 z+BjPfL7L1>f<=?~P+D5X936-gESixk5i_2#;7e6VM8@lpx~B}2NT9FOa;4d%Uf$|C zq~c`MsAaRW2C*XR*QA$MQbDrPd{R4Wy--FGnuE`+z_N#65k?jVE%5cpNgm>QgRR(W zkf2UNU9+5q#gixL1b&@!PY8cnZ*p08_8Ty&*9FB3Lbv7hcBQ)m(I`%l-Yy&u*^fVMTs|>%-;ez%UfdqBUxEz@M7xkd(4T&!ql;RHOUiPehK<$ zUPg~7s6K_SfHRQgP>V>|M55%B5lOP*gklR|E}hCYxCEsTdt<0AtZJ{r0E05^-)c-uLRR{jJU^> zNK2;#Yw6y?3?MGLY^i@`q?U&wT`O~`(Ij7xCgVa$_!PfoOsSx!GL)n`3;p7iKf=~1 zsh-PFEmeAMNtB+`G{rD}8RcqYp0gkk{|@D5BLN8`DPrl)Oi80SIisnP|cnnn15c!~#Xdia0Q<#{1w$Zfj&ayB^p|zA=#L(1HLg9bPYC0Z9QpiUfl_c`H zPLf8vW}zezubI#kc0Y=0dV30zTU>)z(hF|~G=&bkR@3P*B(-uDqoh<0-bgCK<@<&X z1UzO>QLJ!G#+moVkCCtDHhs$bb2#ybBlZExM)6KxUjvvLdJNSNicl4IU%yV2!}Zc7)2^d z1!cI1pn7`#L{J^P6=B|CyU2Nj>ax)!Bq9&JUY~z5Kzx5VItvr;=kOdiz_aw+dqvy! zD|?dhNt%AtvXFmIP&=ppUeo7N@ZT>PLT$;vH&ODDC3xvQ$-V`Lgw5|6NHFZA8!gG)(+Q1@^iMWp@gZemrjn4@A@I7d}k1ZJLKnJ z5FQV9c_$o)l=71>c;MfoKjGhCKz@e1!TsZah6aCuAJWj1ZTvs8mv;1C`Xx;f!TmJM zqtiro)A{*%=afW|P6|l$Rz3;`TSQ@@{n){Mr`&;0J7TIS{qwRTx=`srrPq|sR)*lI z%tpG^)`L4IyS?LG)+-P0cj=6}e>~W^OQ+m}!S;`Ao}HY8$2-U5XLrYcaKifa?%kao z+OL1z?t^>x>Gb^Z!S3$e`=SSl4Eco$0G!(?oJDfL5?^`BqpVzo@DR}Mynl~<;E;u1 zKyrFZ#QQBD`*A$=it`jIfW~LUMk#KoK;eWJ(aJ;bBuj^$58EZ`8?>?(DI3`X$j3x{ z^FX~MH{e^qy3X+}YuKVbvgFHfBx9}7&E|g?_Uynr@J~Y9nB5=j_PTU*j!*9Qw(0Z@ zPGF?iOuiT1AJDaMvWx#mm&K2vAJU)qyMtiRBR_X`AN+WqvWaf*-o4#$G2Za@@h`R} z20!j}w|`{w<6dx=H3k;gy&hYQVfX&ASdGWD1;K;xgoXO|f(Q2)*SiN?kCxE$AKZW6 z?ao=4`)4qce&<6j7v=JbfNcS}-5SNue&I1ChwOjz(ED^s@+73*VK) zWB{VAv98!E8i>6YO8$S;6!d_e6zOM#fdxwY;%SSnGUQuO#~CcOjx>d#>;gTHCZSGm zPYZwLqt8yB;0~ovam2}!MF}$~(L8!AKm0PlDi}(!Oz7t$MJ2p(*kgTo)MS6?m_u58 zi|9K3Uv zq}dR@Vba4m)9&u@v~2XDr~{(r^XY)+(<2Zx!p7F&e|Ost{PxMw)@cM&O>stwdOJ(c zly>hY@1Az5F3V@X4!cL*ru~1TSNXB6f5=05mFE340j6BwB!Mj)=4MQ&ADodr5qc_0 z(mX1rYA+_?Ic?p>4;vbo1+R~NN~1uz1}Dbn1G!)be}3|I;Ey&m9?1#9X&$~v3eh|H z_&6`J#s~ClMIO8JdiT^zO9Srw3Pjcsu%lE-ijLg6q% zsi5qVtO4!htGobc%JNlBKM1I#EqRr>OJ4P9%zlVP?fw3{*WLRnvs+^`UBYH?8b`)7 z=8K?eDo0mgDj$-0g4cg@X)!w1#yX!(MV?u!yeIHnol|rsVYjVg+qP||V|HxYwv#Wm zZQHhOt7F^gSf|Io&)8@0bMuU<+q$Tl?^<)t61afQ-v|8t@aXr1d2_;9Z?=B*#B#C( zIi8YVI8{vbgMtJ{eP1SV0loGcJPjoSd8k z_q&=@Ry#gYg&1rF;80ualHflP0|z~srHj1%l8Yk2rvY{ZcnBZ#p|)xTaLi6b({2*F z9r61?a)u80!M}q~OC*v^R(OxB4P({C@(5s#jQws&a?@^y-^j@;IbG({aLV#mw4fMe z9k;0tuEOj-PFA#Yw*P4l1@(5ucwCR->5_=e4xuu{|GdUTEWAGhX>LPh1i5Ak8A&S+ z!4!r>&m|NAOd4z?d+UFntMI~7r_FiMugYETDo0`1aNhlFJU@NC7;XW(@=xb;&uLg2 zAO_423VflPu?y0=*%Mnx_JTAH8NTGvj7kgOjSaV=GwE z<@7F9Vlik+X>1_%Qt3`3CSo{5AY<%!46p0SJ#P~M0vTo}yihNG&Cdy28%DiXW=d{b_MudU#bk&c!b;4-QB^7R zZYwbbDEdG&B)9Q&ZxOw9{JVSq_#<$1NX!P#3BjH&mw*tHZ8fJi#K1v70e~;l2y3a2 zm0486#Iz$8HEuaQfNow*>^Dye%(Wm0G#N?4w>+m{U0$bT$|*si#T`ptZxfB=UGCiiwwQIowT$Qi9FC`}&~U9N%~)SRyF=K@a3+kvQ1pL6 z_x&w9$8t$$ihWT;wO1sr7&$6T9L7uf%W=!Dkdj^(#1vV^ z)G8Ta2Jz&|fDky~l4^1=z&K!0&p}F@kOvRo;Q$Xbp+84*%gJaiE9N*9*qX425%6pT zC{L?A@MEZyk&k4(f6#fi>QL>7(qUfu&s>;moeA)is?aj9k33TN+Aq>T%75gZzeD~c z2%S%*Y9-F!pV7{+ELnVzUGiMD&d8E}M!i?~Pzn6u_#Huaskl+hp$5*Jp$s2=uR8(w zjhPod{l|y~?Iz!5XfP#$J^1RT<%ApqK&o$q=Lkg}AB(=z zen~v2^tO7JT#C@dvEq<7C;c8q=M{rk+%;DkPLrkR{g-0DN|HQJYndZ4T`#BgZq__2 zG8*EnP=Ds3A*ftXVMt~>nxp7qTu!f_TfB6;LRd*2VZ1BOvAR3B9-1&J5f-DhR4G5B zIGNjxd*Uc4kt!0d`e46Tl4ub7mvK-Nl3ArFhsH^@s)-Tt-!=x3vxTy#{MGBxs#)ZT zl3{9_9nIlosnkZi%%j*lLeu?PF{KKUoPu7be^t!v(}KjT-ROqG`LQCDy6a}_IvZq< zo?C4@?SB&%wxBrXQ7tR3!oO*j(`A<3$y4=E@mNU{gSX>Ex%fNs0ilouP z5?qrKGxUy++K9phrvlWb$}Ilp)#||n_@VY-JRAA4$9P$%)w!IWnZXi= zQcfjUu}j+OVC9P(&Z=?fY)5;>;kL0O!9dIt8_Lz`H{aIn?LI&lK`6pb9hcHllRrJw0`X z48Bt4kVoLWTyW=@`lc*S^mbiBiN`L=j5)SM&H!~vtAlXz46Ha0;*NmCHQ}L;f01|Q z*U7|b3TI*;)_ufRIJymb4QCv22}vTriB|>AASr;XnpRBkR6=e6Fkie+Og6R)u~S{j%19_uA6JKuF<^@I1Yz4HB}f31E;^ZCzWB&067Oz`&h`y_5w4XpmG9X*55 ze9x^<5T5@5HNid#KsMKw{`fn>$FistDNJnr7runhpC|vwp#9{Uz@QG4*R*icxRqq&cQ?+dx={Q)QbSx>18;dq1jOU>&q#Y|7^PgQC5|l7 zET?!<8`BJhckg|1Pb*!4d_x>cK*WyWeU+_Bem<&6pEHM$0Y|7T@Ck)BZnCGjx zuMCt2uu&5$rUvEe5UPmiN`m52o^WgCHOn~IIFDtqqW5uBrSxi+(%QKsB_k>ac^qwueB8rB=n{OexJ14 zMc-Kg1$^$DeXhfX;WqV^Y9>^G`t->5vhW&f#ZyWL{o2IjmY zM~FC#=lXxJ7CqRCANmv{0QWKSMN{a73?Jo~w71S@XE-nw3}bCn@C{lpMKE`zcTlS= zY<=DN-Lz7q%3G#)Vu+WJw@`|H1|U**J$H|%h3x2*j;B4p+6t(}JDUusoy6PtzgPdc z{SPo8bm_wsl@!#qGL}{Xbmm+o)SnzxT^)3mxVadX>QaYvxTjNwbhgQ+Q)06cFWjNI zkC~J(0}>YZ?Lf7--olmAIVN@xuVyj{o>ycoT2nML6AaKv)Ah z-6OI<2z1;2$F9SAUW6`Z)dt?fL*w@hL7oShKndGV_Uy@w`xRimAu441=PRm58xrBRwfpS!>?hOKYao7v`9mQ7HRyRj z5t_%n1HN_VHTHZ?a`riZqekw0ob*Ew>b#g6t}6 zR|9jT+SdAdq#l;0;hxxZ+b~p8)UPnwU%?d5eW_c2WAQwO0yyzJ4j=k)Wi+$lcZnk4 zz#!piML6N2#Ycck4JhI7FFW_S{{n9SkV@k3Hn|Kp1(*KVhU1z$9)=-XoN|Q-!Q-%V z%4~%Jcjou>vE3L^(~Y3m>0u1G`{?F}@)S;2OwskxOiN9HiEQM2L?&UJw3oD11#9N? zZEf0C@-0RpzKzBc{D8z>?0-J)^iMB)0D~E6tXv>}s$ZTF@gZNHC_HtHMbXj&@KS>S z4=#meML=B|x-`;O5N;abRZFU)mzFS*$(f$>C?mHiUTK*)4fj?r2Wo0ss#s9Es3_Ex zj^QAtFXhMh7q`j;0dSI{_2zWCb;sKRM$sr~V@+>w0U3$gXgIL|VelAY4h)}KgWm^L`T&q?3eXd@kadjqSXl1?j)FwlJ8azCzF|rR@ zQ@JY2F_;B#IPv>a_KnG9|JZ`Zo^`p@Op0$ z-6|8;uRsMu4JhUa4eWkEF!B1gBumB2C<82YCn#{FQXM82A`}%NRNNH2pnbde3mhAg z5*b#Gfz>1xXy+~Rz3&8V*Cg{3E(%pvRFg|zwTMpOSbKh5HoeFb{ycs~>F@S=-9H>h z1(|=;0eroHT6X#%6GhspofmE4cUIk0J!euWQJZcyt7Uwe+lH$Pv;hci zn;6S?lC~`e&z38_(M!%HwA!?D{;V1~(g9Dt3O!Mw1z?vGjuq#@l@wMD@Ao||`51_b z2$qV>$KxHrPUXTyx(KQsn&rZk^yq-L0b^v5aBgm{LRys@#V6P33SJ0^SSL6BbL&uLeWevE; zd9pP;vvx42CH{H$CW13>4(x#q@ufgQZ}~1&Nfsyu!MC=%2HRPEa%{QMMIshz96tXN( zP1S(vWzET>iILLtwo^m;SSXLV{dzovss9aYXhdsHl$0Z#7;e1OAwyk7ywxQ(Y)l-G zOG}<#{HOumJ6YkLB-+Rh=mxUCg=@qYKz@xuN&POW21)qH8dCqm7kkYWXRHopDkh^A zm!zx|kPTo_07KmBXoEO4box$xtN+hC{1M*`K0!;vU{n`r5#+vwe#U<%*pGA_jRrG8 zZ)-t197Tg}Fo~EJG0`$Y%~jD&=oWN!bYa>TQ}#Rs<1!f?iJhZP%gNj#;<~@wD2K78 z!D!?n6dE@W2&wnqp{CseZjft7e(ZIeIO7Hcuw=y2n_ev85c*9(WLc9Q{_kLed!+t- zD?_czyFmWP$-l-LQOpF{Aj%3l`jaDN_IU)lq?yQnI+(dfq>+`tBpv8L@@%#$)jy6y zmMGevmuI2IxUt3d+9vrCQ2GUADdpXbSkmkgRmlE*G$F^V-0%hq?&n{lqtspTsis~I z$b=%*udnc1e^_9?jvjr}ELujJ%lg|RRfWfQ?XCQq2|Kyhrh*(AKdyI?jy0wg zxUqJ~ZgY!mu&+FCGVCGgIxkuBgSaGpd9+f2ixLv-4?YW5aps?Ggo=}RD}Ce&ae6Gs z*THMNd>q*d0%BBCOHGT7OrPxqHAPYrK+JPeuxADg&abr8-(!=yN5+vSB|sc0Hc7b; zzTF5+3zR+4>9gJv3DI%v@d&fRM0{b~j`Gjkf)Sv}T>piM4IpyP$MBs23%ux)i+&5d z?!f`tTIg<&IrvX3QGq_7bBkdjj1R@ov{Y8)UXo@K(w64A{N@4ylCww@01Zf0V5UY; zDv)?~1-MVsdN|QLnh}3ljP1P30@dAWl2c!qg68kU}?r8E86btI$djn zIXck45xAu)efrxrJAKU=McICz`K`vKc1n~H$BtWFrPO_bP_|+dlLra11w$j(^sFZ5 za_tVHiKU@cbx-cT?wPumx7j`H`DT6xf1^vp+uh<8;d;BEhqt+oTf0Qj-V%boMvJ|) z)=E^z>^oCjqDC+YaI?QGgl_Yfw|uZAfCdW-{NZg@0OI77Uu=o=4)nQ$Vi`oMdjqeo zKAaOO)Vcf+HZX%!t)G{xI7o!Y2fcVmy`LfZtww~NYdKJaUPpO35EN5~p>T)mt zkvW^=bQ>cL^wpKXyn&BM>5FTs%VoGMg2Z>$$HMeEiTXhZ;T{k2SHfbiz$J5>_Yr*@ zw!Ndy4Jmbs^Z<|ky+b%~7}kGKE|ez%$2IIP0;h5AZhm@mwUv_tz%@TbSTl}p9fISU z?tkis1MD?4`0$b3F8S-T09;y6@uQ89dq`A(V6`63p)y(!^nf<|{w^Ui&wb7qK`f_{ zdLd9dh{c0!(26yKGs4ogJL@VC+7rOrIW9uJxKD0CZ z%U}9#)mVsRU!XYmGl9kmsnNCRmbF8O5*~oX z&@3a58-6j?cV=#{O=V}xX~hqsK$s(xFFQ%zzd}w*=4or1zARMo?hWv&uCq8D?)|vO z{S&D(cwF$)jTgVkl6Ut$E@$Kd!xz!@iJ9-{5R4C)C=iUDCa_S&%=2QH5<2VMG$utD z|NI6gKD5+2axVART3CLdkaOj6!qx-GMl84l)n^4H6YsYWJ4zH3-cX{NHr=+^^rv1Bh&Cfv!jqw-q5z|| zO5c?^_<~2t7W4$6(0;I5+%;=uLt`pZ_6NK5YBBM-nq|b4!(6HXV31Pt7S(~{5Te42 zOI%|OZ#dO7ZR7EP(zJlVc6tQOrUVu{e}Zgg>qI6wj7cOmPWDf@68{sf1bBjvmB4Jr zLo(&v?O_>sMoYvT`2PdW)Wat;q70Q7g(IBAnKe72t3-^y6=)w>H=054)tVT-5UMoWoNN`KE~|GEaO54V*sLZ1U%wj!=j_s^j0B(g=OL#2W1#x|qW zf;~8m5i{07Jve<^tMI;bRuwTnaqFB^A|##@WgsMawh(1l`+7$bU6dyqdq!BPj-OZo zO^fv>W0V`aV@Ds-)cra~@<#`D)_vVPEf81y;$lS5s?DSKp+ntPccs+3-+QJ4XI z_%mC~;>Q(mPB)S3EF|lIP(34wMJ~jJ{K0ZbW?%r1B1N({C(l-eX={h$qh0(Zxa0@$ zZ!YHF2~*PQWM9AmJeZWFSFA6GfC%(sFi`KP_zi*VG#v|Dk{fksK-yFiw)(ip{AU+I z^*?5!JIg3C5G9P-R#L)aMRjabGLI#iR%GY@b0XR+715k06e(p}4HIJgu*Co2m^+l0 zxqW?C20#G3qu-ZZfnQKEp?s94Q_Bg3=nC>eVt6f*e{i5O7H2RGFHR}QRM7SDha$s& zT$-0~F81!P{i&`i^djlGf_%hqkp!No!R>j+idT^T-)(K-X=bWO*<*>Kx z;IJ-+t2QB}t^#Y-GUSH{72)NN0BijRy#Q{(sTf`ocP0YJLr13EDv(3RI|Rtvc7{6y zi{*^ATXSGgHzEg;nfe^R>i%D9A+A&?m=_>wa5viP%mV4%e%=-zTp*rve<4n>!56+vmroFNz<=LTvR{%yw zujwm`LMml>4J`ISb@2>&-u`gVXs-TocJOE&W<*_(3uaJK;iYQWZ^b7D^%vT{DbrK| zL@*^#1EWAeD8k5JQ*!LjsS;XwFVNlMb=Z_dj+QG~w~NwT&56QPrm7Mp5cGnjHhpLE z4LPkx1YSq8=iA&pyk&jO&R$X9k^mRJkA$YoOri`+t*_UeT(dtzJ_Bwz2WztT6E1Ic zX{ym}-jmb(rW6)V{ee@U7#bNx-s95+P(fyV7;)TFO&ul&X42u5O@#kSvi4tLA`2=&&8SAB4g56(W?^l*gC;VpEnR*zgj)^<3YhJT87QVbd7)TL2USMz%O?gjJ_& zL;6|$&_AMKE{>9EZ)iNlQ=D-wj%DSX4`?g&#SYS2p4zhWPB0hXY=tm5|HtENeK|Nqgw!~Dn;B=tYmHo_AO?M!A z{)*}8BCP4!Q6j8dY(s0JtoenKaYWZ)x56St5iWv31Z~Y_u>XoQaIbDvN4Rx>bwH_# zi^_p&j-1D(NiX{$++W3Yg6TdcN31BHLhEa4sEnJ6l8a0$z?|pRC6-3V*N(-92e9}c zjUAXE{sZycAZ9MCp#R1Yyz|naY{Bnpl~h*KR2-ApEpcUI{}5=me}l2;#zrd0U57hB z3@+$D7pr0{ESFi@a0kS8*@ArZUTWsEXQo)*Qt_QJX-o9{;txDCMv#&ffy`2DT%57h z%-)0vloT`3BY7Ad;fl$JIFl4^@kG0VGCw*n**D$aDE04fv0r8SR&c&1>TzX;WU6@N zTH5*#_9(Que^isY7eFj|zJb8y2m7P|)!qHOoL`#r9(G^nxRRJy=ltLms8`KHbGy*x zF#-&;{vY4q@G?6A0&*a1(S&~ew*seEUA_m1MIIYcg9qVe{|xff+-qPH*+2i?lFpP# z{I4ZFus3I?`?L8AKj38kd<^GqesjKwcr+A`HsolU8G5d#tX!Xyw~Wv5{*f#8M@lYP zgXRwbm85;5%Xm~fhW${IG-pj#+C8*Y2_MpPf84j_YZ@K~F|4U27q%A;#^mC>`SqWq z0TUvPCe**j@;nt(Eah{6`KNpWjprwM4qdD=qUQb=%^WDV>8Y%f7%7iL zARBgkH4)s&Set$4m>%Mz(8;Yc4kmG)6N5E2B^%!^nHYM>L|FKo@){14#w%~(g3I)U zxG5MQGAluHi;S=u7J+w`(gY_apZ2gZ`&~k!TS8A<+J>WY(oqhZ696zyJj)id!B{FZ z?lV5Wg-y6YD3VH?#V!a+PL_EjF+^oQqFrqhhh|b;SU$BypT|0iuA;S%myhMrkq!q# zi)P9sAM2_V7i(XS`J|$bj6?$oa75M;w&F8SFAo0AMm zO%?!QRt@#Lkj#1tpbi)&leM!5-&@a;O00lU<>(=(p-0z(0qZNLXt4K`s6y9eZqT%h z0ls38J$YYYQpeiHz^BfJ8nE z8FH*W-{muZj=&Sdhf7gJn)|E)a`uWBJ;63}+UUoT<6@EG$_9`;-TRlCcmK0R%d_1+ zM9VOe+2JWx3g(prkAjsK^7N(ZBDPp0BnR#Pbvd_lzqZ3_A$lagWR+~9%MwJMC1&X^ zqco2fQn{gDp|wawE9fiR+3xC6R46I_2O`oaH)WwZOJ=>@r3hvDLKPgvn!KQx$TZD_ z)78#0w{%5?HO>bvy(vrJ};e9dN|_8x)#jcGyckRuE3G|=)_};QU_qO3&N!Vdl6iOSEJT8pyTNhYP|ayTE4my*JNY8eM_H-@qB=RiRjoX3vx%c3mLdO* zT!Q{a4XJ!?o=$4>Xk(^s%Kw69Hr_JHLyA`100S^M!G%hXL9&oM>Q_^m9qK*%H3RiU z9+^}L71t6?>5K~}I*2+e%pV9O^8stBmt6nVH!WUoxblJU5gJqYELcry#5)dBeI+hC z-heL;`se-rTwam;d8hZ+g}^O0!8BxbKE1qYu%WWs)izTDH^u(qz0-VdVUg`Hs}x++ z95-M%*&W^V{)3ERj6= z@1}NFDgx$w_*|CLzd;EGiOpg>T^ntg=cLRfPB1R75I$>zcPyKx>W}n_0Eakq@xbKB zSFU^wp{1TIuI+)#{!G9YE3OSudMbBbEes$X2o$!1hYv~DsxIr`vwYx!5!ue4*2tQw zArKCW`6Yy4;1|{xGQY=!zj*ElT#S&)hHwX0>{#?hDz^iHKHVQY@Pr|k*iso^;6U&s zU@7w8sacd*NJ>}@bn&5atR-E;9Nr|-^wedoDG`b39}uqzf3KORg^nWX2fi6It zs&bC+r$R>Otf&xnLoQeD>g+sWX_Rfw&=L`PLFx=j1|$m*FO1wyDr^$Aa{GZOhWxlz zy=p1MsaC(&)O?g~l1oTni_Sd}?7m4hE2;;jDA|P*Ihb^hK#r!9hPjj_r>Ii0vwuAr zWIhvhM!x~eS4;LZ|FWX=@p>BPCm7(1tdNxJ#LRTRgbX*uxU6&uM99sPbY;k-7Y@j- zmo$6b{nUD|8LKsn?b$xa2VCpMOZyNeP!PpRl!KeQ)R5K&zRD6Ls2f}-165mu_V*Ap znj>ue1pUpfj&87(;$R@KYQn5-#$hGK%CkRN0f`rL#s{Ch<#^Aw!H2b65+Z;b&u)<; z$=1G-zq+Dzw+WEu&0%_T^33o3^@}+2Y}(2Cq-;8m^O5lIIj(#5RWEezah2X>r_(o9 ziUnr~C97`z5z$D44<<=yI-r$dw+_g9#+Ce7}#T9HDxedvfII9G?#W^N&%+k*0F@wD**puDup6n<63J1&%X9T-pr?yWi%&TK(q}U;Lrt$zw!2%YsPnHpK*N5gQ z3Le@sTJUIujZ*b=fA2QSjlR#HFSC%(G&6xJpkXV86wpykiQhfaR7L54%q zs+iEz9jkUk&}Q^x2(D|`)Yj9`X4D|T7F-Qw%QLWs;KU`%?gAu{d5f^9D0Be9vXybe zY8kYBW3NwJmy{U(+>po4fnm*TK*2 zws+4KL!r#2+zr?x(#Q9_qF9>ckRe$4I)SsAX5vIo4DBnxQup|TMVp`xNI5g{bcoo<^a-0gBvT=6-X-Ev;ARh(0pF0?aR4gy~nAixZJ&7O$E+TRf5Kgh5}}6upfJw_#^^78L#$5^naPq&>DM2 zJF&|Mm?2PWL|S1wVN~;c{wSD$uOsp1){1gO(A;$2ia6hNLjvBXfN~K<6kAPhy1^aT zZ?A))6!>GO?%>)>wA#ZP5k0)7DOxjI2bbNRTc7ziHhSjFe%pHw@!r;9jeO2g@M4Ly z9s;-~#P=gKww}whN95G~e|bH6*k9bpZjaeq^cvci#lPNq%4Aa5RYuX-E;as!6keni zY}JAj(BUl8ctqs?7MP-XqikEMXApb5ta+Ebi^+E5AHka?07RhL^-y&D;m)3Wdh6 z?q*VGD%zlj8ln?~vc$@60x)I+IjcYWsbaq{$n0$1h-ss{^jx~r_!JbDjGi`iC(z2G z8Y5KUv_BG|&&t-n2uStA< zz^vpFxlV@2ct-j=6*;g@ZEi%2SNWr{L0jH<)RFfM{9G!eXPC)7ki7bxMuJkgsDc=9 zO|X0mFcIj@SPx<&t*qLvVcaX#jz57mlQoXCMU1`#<6D573hd&-Ix!+vZCqr4Z=2_U zg@~ZFnNmP@aa5GRBAdZ6FpGgFF#(m{5mSz+-yIF9y2fjrP}4Cm_aM&dB3C`<_vd=8 z7Z;Hu4s86^={-TtF%^M7GU}VLe(cSN&zM>I>z9L+9_x02Q9T7KyCh{Do)RNzfwlxv z8MN^^()e5G8;lYKAV{#jw%XWCAlpc&Qyem+r7u^#);)xj7ov;;0d+)mp2lSv<2K%pP-r#w24!X9_zKoKXH({NdAriZ?K&p>%2l4mywG_^r9 zJ#Kxxk}>uylLsmutHI!#jQ|h`(T!hXRfb;$26rA0p8>UcNe6A`w1;3+tX7*3L^H4t zX;`Z$6R8J9YMM(e!;ONpvm5Tu*cPjv-U~YEj)x{}eo1}iL8bE3Ejryu$m;ON?NA-8 zJI%}**LInGw@&tBW*-cDSnj<&`eD`BK6rb-^fT=f5HT;`j83ZP;Q;TVci~zD00=Dg?9Wz-9{A%O7@rxNGTc&U0A21UCAmy*E%6yEoEpAg_ zI_=ee`5p}p_p9q1N?4*=!K6vA=nS~S`0=aq-XQk z=AKCd^(#BDvOF-X%l*7Iy)PZKmJq|_5dWS#wK!>g<9mh>W@VHE8vfr2Djh<*{5cp1 zm6=i|7y>Q=Vt^h;Ab4?K5B>Xnd&dul-Myo0P`rMC%HIx|lkkX{L?5rtt8;pYDQtVh zOV3$+x)u*q^Mdjraejqd2)*?opuN@$mefu)eN0^DI0v+NX^jJqB#RBB26|DfhA8C$ zbq9qJbl`yA1%eN{b`;E5wvBkBkeYuZ-kr$paySk8b3jzd5)5H$Tic&bw$0j^CAa#N zRCOF(!p5avVxXV~U!9%K1a+{y6>|@Mq`a|_%z&JJ?d)t<=)_y!Qu?!#wCnfo1YD~0oMzz;^U?Zf-$ZXMO$Ue5>!~;$EP&Aev<%COAf#>9z?%U^OdN zF~YflY<(8V*{N<5Ren0`EM%{bs$U46xHlW4Qx@I(20ZQ3Quq#*x@Kn{F8upuwf(tq%uR}hc#+scU2jr+9l18AE_rtz|; zbo}k8`*7)ab9L1EQE3k!H9afy5&<%P~QN!r{hW^L?d;?^Z}Tc7uJ!{yUb4_r%TddRrt+Cp;$L3f5$?xHHEa0xX&> zonXbB2$7iNfIMkG4SGhe@h%pN-Aqf{RDVwZ7hh`WiZ8DS5k{V z6Owe7twzy%ydK?LI6Scz8HyKH?XROn?%@2I#mv3Iih58h)4>4#u10uVMH_;9ez69~ z7`AVEzlGIEq%_?>I%puBs9k(10$L15lQ?gFG!`~BZ7Fai*2;F8@~Lf#9mM!}M!W0o zq0=2dUN|Du$X?@ny84(=nkr{b`#Py@Z+~i)A!rq>10M-zkyu(6u5Dq(P_d5kR*rjP z_MODn)%Q5E7|e3QT#W^qsf`2k17QhDBs^)=3tae@b;72(?>&5wGiP{p0LXMzGpGeX znXyp1{a;9xKU?sMBGymBSUYnZ-V%>B+gan+N={u-Z9)UK$2JKf;O@4u0*J#2munyL;YqYMf45h6%Pr*ri9P&3&ZGBo}*V3|7k5%q*{E9n?~M ziEB4(C$8RZM9R-qH@xdPBqYDt_apI}K91dMs(lRPKM??}9TYrC0IKc>B1#nqHi`jU z#6CymK7n9K&!n}VSo5W%1Gm$f6#(zOM*`DtctqT~hiaOvvZ!>^8+{ayb^E`w)5Q?ad~?$mVc2U9OQEhx&(~}lT12s|Y0gP8oZlCnBZwibjfDL<*ZW>sM3Cjq9^;w2eWH`Dg^DN)vQs*rXJFW$>9m>zh((vrv zyP)(2VhT<*5X&!g8C|?a{efgvjkJR=d81!0+3fm4S%cLX#QuHQ^#cs1zlT1h@d|6b z$HX;qqWMqwFxKNZcW}Iy>R&jt-L6;nzJ8=jy|6$11iV^d0GsdL8BXah0b3smml7CO zGc)6E>aNvM92v=k<{~$;bv@^72z{(cF;qI%xGt5 zKX~y&WP@yC0M0t?@Y)_WUAlJd@PGLGj&t}}8#&&lgRQ+WX|1leJ6RM`*;%b*^9i!b zcS;Oss!QzbjTzhz?;7_tlu5y1nafGDRK07=@ox;dYE{t!c9y!KO62Y!{KX&1S`UpW z{ZZyK3N-Fo_14B_-Gw`P&b-I`FuxTYrRjHtf$_Sn0r8Bqk_8#x+q+5YN6)(yNRGyr zkBqnsG2rtD36O6lpR1kEH~kc@1=OvI*zlkAEj{!u5;dy#6lXte?ln`EWSZ|kzd|x^ zB7hVJ!BHA@Tw)40pQHH?-FWG4by5xS!Br)jf1?eJfK)}Shpkg?QU2*Zov5xZ6f_{_ zE~Bg_0WebDW>EI=VWLv^sPqUPyQK}o(izZZHIJ5(oR`{rMccWN{^d6|mJL$sStWZO zeqzwHt^)2Fr@}Una7DDDuWkxi&Si(SBfSI{V4fivzkPQ!Wr|c%|{!m4e0YHmu z9I5w}>r7A?S6|%wD7B=Gm8XffUVDd(qnR-1E>lAtS}k+^ID3TV%S- z0^IH_g(4Agu7g`Ta$EAvW?Xlk`^{pQaM75WS5b;aYWje;GMj=XWHC6?w={&pb6|x3 z7IOKC=`NYpyK#-|K7KA}s+p))L*2alR2fhSVW0|E^oRukdm!UTmYxK|{*eu4;S5(1 zt1e2Hg8t}3`8i@&c^f#c_vvy`P@%1024DgjW#m{jQSQJv$)=DBLo?c{-7b7+?Jftx?UlZbZnebsb{vJsHpxXt-6W^G7|?N0+bGv zLM3G$-VUS^d&L8rm@?y#v@QN6-@lx}rMLr=iTJe^{AH3Bx|p?|(p>U%*Hpn3z7BN| zS6{Q>hsxt>!3?EThRGvsnmo{Hr#52T+PJWgJvo`WZE#+j*7-D0pd%qG3MERe6{KEJs?Xe4=y#%y$?MG0o#EbZ04dcu2^|g`T7XI_XJI}7Htq|{PyPI=yM$f zS~d9A314~n{dXDl`o12s(g+##dI4V#f!im3Z*!c4dXM=KUFl?p4oq;R3;IPP!}i9b zu&jY4j3u%D7y|j!d(Qp@GeFG1vnfh^l6k_P6YwOkA7I{VCuqL<6ATonfG(i8u$tf}(dZsy0sS$c8dc0K`bp@~Y5PA`5jvUKvDC%iXi_3M2vg)Hb!~PtPRAPeGHDm}{?&7V6osoLt&o$R z9f0<|fq)5hM9t5iT{DVE_7uvG>C%rz3wK;TcIBY7$Gnw^s^+5DXl;4QMF*tvy{mB5 zIx~$Dcv4VckQP=bgEONueX25jZs~W=mh5TOUEt-VVoYO01_3fxw=U>K-84gN?KiKP zQzZCLpX6Q=)mPM}0W3X6l3P=6XunYd^o%iCeof)+G~tW%Mp@2(fN{&ZQOnpBPW-hE z?%14L7`fW`r&?7<*Fj@PLw^)MyTJ5qEItz?mA-#ly$lSshQsGkjKaaX-!gn$0cNX}0krYI9^BuICCM2y+z)))5T zvEl-A;3m{&WB3VByn45MB^M>&u~MEc*3~cxYqEIW$*PS_(1*%7+Yt`j9p{5$kCOKu z97Z)htphhxf0xi8R3_vdQy%}TsBC%Y8?-8MitXK808Ghs=<;7=FXa>FA}wF>CgSuP zUx~O>UnWbTG>hduB0|i1*d2$9aqyg~euo5RKvN|DfS3RKhtM{B?9!75Y6!TZH_`*? z``=gNA%6RI0<7fo6|PJja!0NOToeR~B_MCv!|ZY7Q&~yz&%$5#n=Rr?6$L*6wmfI; z#^ecHu7DX|jG}utx9ynGW0o?tFQ4(K#MYi>ISTlF`In~4O9MDQ(ng>Gk?n`vm)9^6 zMew+9$5-3ULqa;gK@=I$$OuW0L4_Rt*P(!Ze@Fn=B>s-FANPaY^@Kd6-Y>q_p#?jw z+~>^&2C;wK|GF;Gkck6u`H%hW=Y%uwE=xlII4y4vCLlyFniU>uvJ_AUGH zxzqUHCg9K%HuanqnY8uqdS&)vK;|<+wkq6}7)#b08$4H77Ot4lH^ zf}5!0XERXziCQ2kz|V$YDa<0IqUvSJsDy-)DUH(lzQ`~!V;(eM9FXSCoX6i%Yqa73 zU&pD>=Xs{1QM-^nomsh`l3>1%T?Kxcx-SjAK+=-mMS&|nf?bQ8K(Fi#5`ng3oMv?s zV1NDl`L*vV5{l^`HY8CNPsJZHR=rJO=2%7C)h|Uvw~rt4ML$`iDK#jSmM;QJ)|ma8;x-b!b8+CUiMspZYZ*aF9|B! z!}p(jFJc@eceG3G!7YCroY?=FY#!l>n`7Vsx+PY@L4R>{q=Kx=+wO&@y_U%7Krc9q z^%uU`UeGi8=(7jcCAb2gk!6i8NX0a)N0#n(q&^zHM{0~o@!ks;q|-wFx!yhiT!a>l z>PZ+&H5-TKN$=tzoG+GMT5|A9Ok38QOiN7WMj-ii5{T`bmv2#I6WW}aapOJl?VhN* zh4;N!KKqbNHKsZE%_nS1=q<6!nH@sL%JU(Rwr9-?8&3Hw#` zauh$gNdQ9{uV|HGhG;)-k`sRbGY~t>XwsRyV<7%ialGFG>|!)ak<=sPWA^8nTUrKy zXoeP6Nup3Gg|cuc!)WUcr6B+f16eTz2Sbofy*Ua;?F>1Cp*}H#5lS6$5vi&8(+LYF zDH(F5b6zFo2roCn88j-&lFf+pS#RRdfq^DM!1Ta?%@MD?C_07CRn? zfYi-s^d}=_(3VGeFwvWw-{OpVbY_;HS;a}vzvxA11UrZRpssq@tm*}Om!#P8 z(&~Kg=lc|ZD7`X=mFZ7WHzLMG0sG*|l3jRE-$ymTNP}U$q7n!`@Z%O8oQ{=_lYSd0 z%}5qTu1s!OhZdn9BO?a5!bk1lftczh8@Qxqc1xhtrLb6ZOPnLAAuU$dDowR3D-MBN z1MV%un9g;HLa**hM`8c%{jI%EEkBO_GTk_9Xj{8E`_+pXOu4YstkuU&a@;;eH(+BG zY&1@`X%g}07ql|>@A*`m{A^tpBBV`l1b2dX#-kVfo2h$W(&6|!Ps%@D<%c^Ozg?vu*EyZRO&O|XxkFIP8@WtsF~bC z%Cxj$=R0k1XfoA?I5yMq&-boAON{On`Yf6MvAW1>6!gaT>m-5 zMVZ(f0X~p`-C+wrt06S8$8Q;qrgB)bA6bQ0k~Gmw*WIa|QjCZj2I?j49f-r5&z~_# z?E2!5FljzJps{o0_(+kI1sp2#rd6}`JYQIJBfvkDP?wIGxfZ~%UYP4B*EF#mzhM>= zooq6UcA7H+byBVxqGC-oRA?3SGP#-!!`JzJ9$U1h93=yQX^iqVTt+mzUuNS*yqpLgg@b;had3T2#skVSua@UHKD!Y*}rD7t22xlYa6;#PBE zRee=Z96+-*?w;Thba9v91cJ*F+}$05FObFEA-F?u*WfI^xCD0%F2Vis{Z(K6_fA#M zbXCj4yi843pVK=-wktdvet6)oK=`2$u2^=JeCg-=TIqHmy~Aw;{XcT?kyuLo5J<0` z;fe)WbNZ~&)ySr3_>+Y3?T0rCE0#&-ekXEo69JDyY$o<(k*vXrq3k%Ue{G@6#U0Rk z(}8qkd-!4W*P|62Gx_0Kn^V)lJJoGgXxdtiA8ViSy#R@FnHP=%N)y@KyQ{h=mCNy+Nzd&%dxFlZ1i45??c?9e9;|9_$t3nTkvIYfS zvZDKx76G$|Tb8G9#FoQ8CuppsZFDSBr`9t)yvr$b0Z3g}@aw!>`TEW#GCnG6RWKWn zlh}z#M-0!^THE9{bI#o!Vy*D2Ud_s@4HM`~?ulK8+%*nc61Z*|VO`YDE3UHMsXj!L z>BOIv8x=DL4}97nOtogpe0+_clZ6P9hat@aVacmZ_o`T+oI&o5bdj`JmGP0lTXQ5}?ZWnS(geW2B*8BqozM zPvZxtN0^{6l#hD~kqt)t-cgpzoEbMnI?9cPIYx*($=UU3GL8Znv(|ZmDeNbBzk)njB&ESskAXrpnQ~$sjVQWl|m>VUGqb zkjaQxV!uO*If5J|G$~R$%hV`b#f=ApX6755%hN2C&`Dh0^wUEvIUdgGZf_|5K zK|NNKWRDM}{=6$!qNVY?-r6IclGaNiqi3hQ?Vo`cLG)2~4v!bz*1f zQne>d%6{=vp?lM8Mr&FlN#&fY6AQ-bc@(GRXG>|Y!whR^Y_hivJ>i_%{`%O~5B{FT zTo06JiehCFUezKUj4L}Viwtgez} zKd=Dzlm?8pH^M*;AM4hgr;p!Et-*_f|KxON5=YI_>7q!gD=3wazN%-|xsejw6}{8b zxg!IpD}L+iu-5&-PfI$w+^>J_9n^wt7UOYw$w=UM)dw;J(4+2)jba9jw3$8qUC{xHtS*ycG<|L zAWHCjnYr=!5QG&$c)kI$=LN%m8wVwY){GAJVbN+=`}Sg)1X|3mfQY+tG7T4+5QO~x zY3d#@U=Dk|Y3?Wc!MrWA2p;Y09}o=ub#^kXfz_uf{{3%@G)dzRK6*1|augPx~IFmS&TIp2ymFPE6-TV7A6A zhfoo99n)NVJ#QFMn!%&z5nJf>ml8Yj0=G#>RD7cF-{s7VpWReOr_pSnpGLagISa|X zWQfXp5w!c=ozPg(ESQ|CYUNlkGk%pLA4!*9m0L6;#HG#<@%bYzQ`bA@3uL9#N#(^B zVQ5Ot1G=pCZP7Afa9bzDJ9QxcMk<5brv(QAdCitIGL?4@I$$U+!ay&pV&Y%xh)Se- z-$TOgz3KNm;#^6I>Lq+^Su+-fI2ktZ_e`*B-%nEhfyf!s?LY|aA9*xCK%Em$oTj}Z zm4?b9yh;;;pY-^OcXLwP8yr8!0w{4Yok0+s@j`Tad4hgX53;;Ht8u|pe zNF3H7!5iTRCuDUgnp^nS0n;$7)YA76U*+I$PT0-!T=5ZSjRJAmbOBy;@KS-h0P@^b z{zdlPObEiq=g1KL-m+Q}nZPXVkqi(3Ry~Xa9^Pg5Gy0$h&J6?EzVm47pKke-R`C?Y zG>$(>kti~YL~wFm@iYz?!`e0pJ-DDyF3kg4LE`V=1IjXi02=c!b5$y_p<1rV1alE6Yj9qFQ>f{gvuq}gBS{B~nk+@V-alKX$#s`VFCTasa8Nz$oNQi$ub%A(;1|&O)PlE*^Q)J zOJwu|RIhXz?6xD4h`};qbuQinphfugV&^}`2kkOEnAnAPrPP3(<3@cO&UjTf1`*57 zkEdo0UXdF>++(%kNu!(jO_^>PgDS8_MZvl#d#7+|qxS4`)FF{F>+J_4I~mS$)d#t! z?zKWIh)Va>?)S~)QYF2V$V+sw98E_7;#Cb8JRe4-5hg%5(R=?hQ|GHbCQ={D}=KU#x}6`HiRu6?phbZ6FUVl0y?xRhf0 zN@ejPbhoG5dVs(75O%1>js$>^4rpYZIp6G!)>#lG#^D1^F<=Gp){%e7_vytG)PO+4 z{I@J>|FABrUP7Z$L?>g9`A#};yJ=oLF#A@?wy2tx%FQyS= zpZnW}W`&-OyWWpF+CG=#UGMe#ULX!H2H{e@-Sw zpyuGmalI1l5t6@5TkO5 z7^+b2JO_UO9N(QMvVnPLFrq0xp_ZQ}~*esfNjua6j?0QuJ?nZ)K7BouNf9%s;hMiAJArG9WpIQGvEzkI=Ijt$JOU3zMQsvRl&CIie&7@#Imp`j|7mN z5{`tfO>_#}GER0hqH(P%RE&lDd2NH#D@N)5E;Ib1JFs`~3O^v4npe*i zBdqPVQtagi9^t0&*7%0#Ib7gF9_?Yl{w+q=#|nx1AIO=JyA5K8=}ogOI=R*pegccl zO7FNxXB^VUYG$f(btXPzk{<-L$7JJr{G8n34WG6Y+A}_{aJ}XJl{TKEPRQ~@#ND3e z2U` zH$fzV1-!5Hb?$GN8BRzLDH8A=6r~Ffi_^2%JOulFjlD_k8i@=ePl@OrPJX}-=}fDG zur&UiQfpJ`kqXll+OI)Qp+_LDtw4kD+bQ`J3f!AKdER36`lfRXcJ}(_aS)Jry=-B9 zzh*5)jEil$+hSUquL$%uDk;=P{xT^I(sGydtY3s>i71YMDXW~3S`Qr~wH{7^KP9mSM6l=8xi5r)|DdNv%XDXG2RD@bOnZdUp2FM(&lN59e5Y$ReVFw5=KgMDBty@x6mmuybklby>7oQ3eoyrDfs( zVW1x9HeST)UnnVdC$EErfW^P*V{^bNo{&|Yk?Dx3F|@jX(dAi?TW2q9t%_#0eOftC zC01Y50(XYIUwvK8z)icHfg=Zzo|WGQ0u>5OYVVn9E_La)%W^GQJPCqPfn8P8$5q?4 z2{<88TEoj=(gLuFxv)$n(6#2V{TMbOnUDF!1tFG-2A zjapc;X4!828A2;5uVvV!aW|1c40j+ccG$?j@w(~TPm2xvPZcINx}IpG)7W>c7z>pp-_FRUeR$)>c=%d3ZV6|i z^$xbe+999^83uvGj5IyZSON_5(}u@{VO1EL(EiW<1hp8%RK(3iY0R#=OctK1cPo$Z z=K{g$?19|0sH~HctUUZ5N(#DcM#s_*Y`63>CyM0g?mDG*HF<2dGdKkXJhYguHeQ;8 zn7W`q0wZkrCshZhs4-zL4nb-*v8)+;vefQR1JLBf&9AsW6R{F(dho%g(~2jyn7_+w zzhwu8o#O2V8dQV4`JfG)(BA@R{N>rOP<|#BEvG=rq{cPIx_^%vQ(T}_qUd$p)VN~2 z0gnP4)WWVbx5aXos1I`Ef+?!n0al0Vg+tB-0sRXI6ci?U)(P$U9~1gVTZ;zw5{$$eWLvYvQZo z@oP}S#+C+(NO(~$-bWcFbC+vw@^GAwD~JYN>Tf3>SU~0EOs!jt@CJ2o81U+HZ-t;36SPWFU;D_Zp1g%`)>RT za7p-M^@*T%-Ve;Y9NnQ@1H_RrL%C!(Cr=jO#6=uTg zTc_jyNKWY79!_qoo2yKAyZc~TP1*>Uh*5Lt?ls;oF3tfdv4Y4-(n%Je6KAHsH?eQJAI-n z&6Kv7YA+u$B&{t=ZAz@s&2fK;1@(Ixpi{nulPpt)=PDT?|dV9jf zON0x6T^7=c!q z#BfYIvOO4w{u$5#_=de`{H*n{*kQtlHAlW?b1AIDMQ8tPiO zlX$d*pErGFbgTAfYCY1-BK4pDqP$($0}CUhM+?krw7o^5+E3WedRysumLTL;@}UGC z5^YT@9x#*N!hcus<Exr9Kw&Fd>y5EMmRGaO zT$$iE?L5n>5K%Nbp~PS3WL8Nd z`>pL4qwiPw%Cxc8VRP?w-Y!po-8SAy;}H`I2%3;mO&Hi_WAzsvVwMy7MsUWGSDnax ztFA&go7h_SSX-%DzY)Aa4OFEEWS*43=q&$>rJ-F z-qTTBNl4%U;WnO`b&1?@>Up3vD4rWz{${AcMmkjs z^E-M!tI8nc!tNak+s2Cbatu@jx^e_`*hxLs)NFN?NMmiu63nnK%!J$6R#EBNg%dQbaN4%O`$7ZXr^s%1!rL7z z%v~9i6?5=X)Cq+RAF(?7E)8gU6fm3>kQ5r!DjaOiuIeOkVGM$Eodu88AK0{4-ycbg zS>DCci3caau~I{DY!aKvF}KwbOo12@v$Nsqw6A8 z)icyJe){VTr;m-}!j(nxA!OjzOy$H0tyAw~TKOi?w+td&nU$;aHGBeu(WN>4R$_Qa`ma}6yVDIvl4Q{kBo zm(yE1x?Bw|Q-AH$_Wz>=)O#$kDH@J1%nSlJBn&;5$UEvY&<=OsLAEfW(@3A_NRv&y>CDH z8}O`z#0wK6mTdRZWVBh1#7$H>m94KUInqLM&X%&P+dYl{%-b7Clr^F^Z)>8J)CIGu zAnAcC{vPt2f`$}U=8DMMyu_ypF;A=roU4xohf2BzRU8>GJp#`Stk!X24@k6%CKWBewk6vj4^2qX=#Fdh6Fve z7yyn3lsV&q-zq}{g_kPKh3^wFaFYrF$y?Ni8wHmi3vFyAD308$)*Ka=U{WNI_(j|l zq6<;wA5e?DszU@#xU!VQ0|~cV`h?MDocHfyk-O-hv+$&X$V@!5rO||HVr`WsxEH~> zuEF0cOPHnwRr4lhCC|wq89q!H@+$qtd{WQ9j2_V~%dyztPX4+H=gS_z8T@$Rx{g0+h(jb5}QR#_J#RQ&6)Vc zBGB>^dZAXQI6DcDnl2}V^CMCwcbkQnj_~b5zLeK>9L>=|1bZ0n<)RVjbK%QQc;BB7 zMp*F9BDV`FlsL){bn`G}WTrxIJ8!W68*ZO;_KOmEZbr%ST^jI<&6u%lOq#U?8YMG% z%wb@-5RyWtso>vjNzc<{eE%{1UvxeZ%zqZ_yA%a@ya$+bvs!@I{)^Q|g!ykMoQ+8m s$qX4j<*)zxn7O)YsQ-V5B&!(;IGKv1uo)$|o2I1s86KqassH5uAIU`03IG5A diff --git a/package.json b/package.json index 58c4e06b..ff42ab69 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "d3-ez", - "version": "4.0.3", + "version": "4.0.4", "description": "D3 Easy Reusable Chart Library", "license": "GPL-2.0", "keywords": [ diff --git a/src/chart/barChartCircular.js b/src/chart/barChartCircular.js index 7625f54e..d8c8e17a 100644 --- a/src/chart/barChartCircular.js +++ b/src/chart/barChartCircular.js @@ -57,7 +57,7 @@ export default function() { const titleH = title ? 40 : 0; const chartW = Math.max((width - margin.left - legendPad - legendW - margin.right), 100); const chartH = Math.max((height - margin.top - titleH - margin.bottom), 100); - const radius = Math.min(chartW, chartH) / 2.3; + const radius = (Math.min(chartW, chartH) / data.length) / 2.3; const innerRadius = radius / 4; const { columnKeys, valueMax } = dataTransform(data).summary(); @@ -116,7 +116,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -162,14 +162,33 @@ export default function() { .classed("series", true) .merge(series) .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) - .call(componentCircularAxis) .call(componentBarsCircular) - .call(componentCircularSectorLabels) .call(componentCircularRingLabels); series.exit() .remove(); + // Axis Labels + if (showAxis) { + const seriesAxis = chartSelect.select(".axis") + .selectAll(".seriesAxis") + .data(data); + + seriesAxis.enter() + .append("g") + .classed("seriesAxis", true) + .merge(seriesAxis) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentCircularAxis) + .call(componentCircularSectorLabels); + + seriesAxis.exit() + .remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + + // Title if (title) { const componentTitle = component.title() @@ -179,7 +198,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -194,7 +213,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/barChartHorizontal.js b/src/chart/barChartHorizontal.js index 412c025d..a248df45 100644 --- a/src/chart/barChartHorizontal.js +++ b/src/chart/barChartHorizontal.js @@ -16,7 +16,7 @@ export default function() { let classed = "barChart"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = palette.categorical(1); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -105,7 +105,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -141,15 +141,15 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale); + const yAxis = d3.axisLeft(yScale2); if (showAxis) { // X-Axis - const xAxis = d3.axisBottom(xScale); chartSelect.select(".xAxis") .attr("transform", `translate(0,${chartH})`) .call(xAxis); // Y-Axis - const yAxis = d3.axisLeft(yScale2); chartSelect.select(".yAxis") .call(yAxis); } else { @@ -165,7 +165,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -180,7 +180,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/barChartVertical.js b/src/chart/barChartVertical.js index 5569c923..bdbd2b0c 100644 --- a/src/chart/barChartVertical.js +++ b/src/chart/barChartVertical.js @@ -16,7 +16,7 @@ export default function() { let classed = "barChart"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = palette.categorical(1); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -105,7 +105,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -140,15 +140,15 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale2); + const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - const xAxis = d3.axisBottom(xScale2); chartSelect.select(".xAxis") .attr("transform", `translate(0,${chartH})`) .call(xAxis); // Y-Axis - const yAxis = d3.axisLeft(yScale); chartSelect.select(".yAxis") .call(yAxis); @@ -179,7 +179,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -194,7 +194,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/bubbleChart.js b/src/chart/bubbleChart.js index aba88a76..e986a250 100644 --- a/src/chart/bubbleChart.js +++ b/src/chart/bubbleChart.js @@ -16,7 +16,7 @@ export default function() { let classed = "bubbleChart"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = palette.categorical(1); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -230,7 +230,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -246,7 +246,7 @@ export default function() { .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/candlestickChart.js b/src/chart/candlestickChart.js index 6eb93444..6a2097ef 100644 --- a/src/chart/candlestickChart.js +++ b/src/chart/candlestickChart.js @@ -16,7 +16,7 @@ export default function() { let classed = "candlestickChart"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = ["green", "red"]; let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -143,9 +143,10 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale).tickFormat(d3.timeFormat("%d-%b-%y")); + const yAxis = d3.axisLeft(yScale); if (showAxis) { // X Axis - const xAxis = d3.axisBottom(xScale).tickFormat(d3.timeFormat("%d-%b-%y")); chartSelect.select(".xAxis") .attr("transform", `translate(0,${chartH})`) .call(xAxis) @@ -156,7 +157,6 @@ export default function() { .attr("transform", "rotate(-65)"); // Y-Axis - const yAxis = d3.axisLeft(yScale); chartSelect.select(".yAxis") .call(yAxis); @@ -204,7 +204,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.selectAll(".title").selectAll('*').remove(); + titleSelect.selectAll('*').remove(); } // Legend @@ -219,7 +219,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/donutChart.js b/src/chart/donutChart.js index a793d105..096b9495 100644 --- a/src/chart/donutChart.js +++ b/src/chart/donutChart.js @@ -115,7 +115,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["seriesGroup", "axis"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -151,12 +151,30 @@ export default function() { .classed("series", true) .merge(series) .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) - .call(componentDonut) - .call(componentDonutLabels); + .call(componentDonut); series.exit() .remove(); + // Axis Labels + if (showAxis) { + const seriesAxis = chartSelect.select(".axis") + .selectAll(".seriesAxis") + .data(data); + + seriesAxis.enter() + .append("g") + .classed("seriesAxis", true) + .merge(seriesAxis) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentDonutLabels); + + seriesAxis.exit() + .remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + // Title if (title) { const componentTitle = component.title() @@ -166,7 +184,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -181,7 +199,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/heatMap.js b/src/chart/heatMap.js index 7d626181..40687ba2 100644 --- a/src/chart/heatMap.js +++ b/src/chart/heatMap.js @@ -16,7 +16,7 @@ export default function() { let classed = "heatMap"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = palette.diverging(2).slice(0, 5); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -94,7 +94,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -130,19 +130,20 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale); + const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - const xAxis = d3.axisTop(xScale); chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis) .selectAll("text") .attr("y", 0) .attr("x", -8) - .attr("transform", "rotate(60)") + .attr("transform", "rotate(300)") .style("text-anchor", "end"); // Y-Axis - const yAxis = d3.axisLeft(yScale); chartSelect.select(".yAxis") .call(yAxis); } else { @@ -158,7 +159,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -172,7 +173,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/heatMapRadial.js b/src/chart/heatMapRadial.js index 543ee5c8..5f2d025e 100644 --- a/src/chart/heatMapRadial.js +++ b/src/chart/heatMapRadial.js @@ -97,7 +97,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["seriesGroup", "axis"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -138,16 +138,20 @@ export default function() { .attr("class", "series") .merge(series) .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) - .call(componentHeatMapRing) - .call(componentCircularRingLabels); + .call(componentHeatMapRing); series.exit() .remove(); - // Outer Ring Labels - chartSelect.select(".axis") - .attr("transform", `translate(${chartW / 2},${chartH / 2})`) - .call(componentCircularSectorLabels); + // Axis Labels + if (showAxis) { + chartSelect.select(".axis") + .attr("transform", `translate(${chartW / 2},${chartH / 2})`) + .call(componentCircularSectorLabels) + .call(componentCircularRingLabels); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } // Title if (title) { @@ -158,7 +162,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -172,7 +176,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/lineChart.js b/src/chart/lineChart.js index c3b780cd..3a9cd21f 100644 --- a/src/chart/lineChart.js +++ b/src/chart/lineChart.js @@ -16,7 +16,7 @@ export default function() { let classed = "lineChart"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = palette.categorical(1); let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -255,7 +255,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -270,7 +270,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/polarAreaChart.js b/src/chart/polarAreaChart.js index f5b5f4ef..1cd0ce0c 100644 --- a/src/chart/polarAreaChart.js +++ b/src/chart/polarAreaChart.js @@ -114,7 +114,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -155,13 +155,31 @@ export default function() { .classed("series", true) .merge(series) .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) - .call(componentCircularAxis) - .call(componentCircularSectorLabels) .call(componentPolarArea); series.exit() .remove(); + // Axis Labels + if (showAxis) { + const seriesAxis = chartSelect.select(".axis") + .selectAll(".seriesAxis") + .data(data); + + seriesAxis.enter() + .append("g") + .classed("seriesAxis", true) + .merge(seriesAxis) + .attr("transform", (d, i) => `translate(${layout[i].x},${layout[i].y})`) + .call(componentCircularAxis) + .call(componentCircularSectorLabels); + + seriesAxis.exit() + .remove(); + } else { + chartSelect.selectAll(".axis").selectAll('*').remove(); + } + // Title if (title) { const componentTitle = component.title() @@ -171,7 +189,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -186,7 +204,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/punchCard.js b/src/chart/punchCard.js index ff69eb5c..5d37ddbc 100644 --- a/src/chart/punchCard.js +++ b/src/chart/punchCard.js @@ -15,7 +15,7 @@ export default function() { let classed = "punchCard"; let width = 700; let height = 400; - let margin = { top: 40, right: 40, bottom: 40, left: 40 }; + let margin = { top: 40, right: 40, bottom: 70, left: 70 }; let colors = [d3.rgb("steelblue").brighter(), d3.rgb("steelblue").darker()]; let transition = { ease: d3.easeLinear, duration: 0 }; let dispatch = d3.dispatch("customValueMouseOver", "customValueMouseOut", "customValueClick", "customSeriesMouseOver", "customSeriesMouseOut", "customSeriesClick"); @@ -97,7 +97,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -134,19 +134,20 @@ export default function() { .remove(); // Axis + const xAxis = d3.axisBottom(xScale); + const yAxis = d3.axisLeft(yScale); if (showAxis) { // X-Axis - const xAxis = d3.axisTop(xScale); chartSelect.select(".xAxis") + .attr("transform", `translate(0,${chartH})`) .call(xAxis) .selectAll("text") .attr("y", 0) .attr("x", -8) - .attr("transform", "rotate(60)") + .attr("transform", "rotate(300)") .style("text-anchor", "end"); // Y-Axis - const yAxis = d3.axisLeft(yScale); chartSelect.select(".yAxis") .call(yAxis); } else { @@ -162,7 +163,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -176,7 +177,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/radarChart.js b/src/chart/radarChart.js index 299aa738..fabdf4b8 100644 --- a/src/chart/radarChart.js +++ b/src/chart/radarChart.js @@ -91,7 +91,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -134,10 +134,10 @@ export default function() { .attr("fill", (d) => colorScale(d.key)) .style("stroke", (d) => colorScale(d.key)) .merge(series) - .call(componentRadarArea) - .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`); + .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) + .call(componentRadarArea); - // Axis + // Axis Labels if (showAxis) { chartSelect.select(".axis") .attr("transform", `translate(${chartW / 2},${chartH / 2})`) @@ -156,7 +156,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -171,7 +171,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); } diff --git a/src/chart/roseChart.js b/src/chart/roseChart.js index 0614baad..7dcd940e 100644 --- a/src/chart/roseChart.js +++ b/src/chart/roseChart.js @@ -93,7 +93,7 @@ export default function() { const legendSelect = svg.select(".legend"); // Update the chart dimensions and layer groups - const chartLayers = ["xAxis axis", "yAxis axis", "seriesGroup", "zoomArea", "clipArea"]; + const chartLayers = ["axis", "seriesGroup"]; chartSelect.classed(classed, true) .attr("width", chartW) .attr("height", chartH) @@ -143,7 +143,7 @@ export default function() { series.exit() .remove(); - // Axis + // Axis Labels if (showAxis) { chartSelect.select(".axis") .attr("transform", `translate(${chartW / 2},${(chartH / 2)})`) @@ -162,7 +162,7 @@ export default function() { titleSelect.attr("transform", `translate(${width / 2},${margin.top})`) .call(componentTitle); } else { - titleSelect.remove(); + titleSelect.selectAll("*").remove(); } // Legend @@ -177,7 +177,7 @@ export default function() { legendSelect.attr("transform", `translate(${margin.left + chartW + legendPad},${margin.top})`) .call(componentLegend); } else { - legendSelect.remove(); + legendSelect.selectAll("*").remove(); } }); }