@gpa-gemstone/react-graph
Version:
Interactive UI Components for GPA products
457 lines • 44.6 kB
JavaScript
;
// ******************************************************************************************************
// TimeAxis.tsx - Gbtc
//
// Copyright © 2020, Grid Protection Alliance. All Rights Reserved.
//
// Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See
// the NOTICE file distributed with this work for additional information regarding copyright ownership.
// The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this
// file except in compliance with the License. You may obtain a copy of the License at:
//
// http://opensource.org/licenses/MIT
//
// Unless agreed to in writing, the subject software distributed under the License is distributed on an
// "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the
// License for the specific language governing permissions and limitations.
//
// Code Modification History:
// ----------------------------------------------------------------------------------------------------
// 03/18/2021 - C Lackner
// Generated original version of source code.
//
// ******************************************************************************************************
var __read = (this && this.__read) || function (o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
var React = require("react");
var GraphContext_1 = require("./GraphContext");
var moment = require("moment");
var helper_functions_1 = require("@gpa-gemstone/helper-functions");
var lodash_1 = require("lodash");
var msPerSecond = 1000.00;
var msPerMinute = msPerSecond * 60.0;
var msPerHour = msPerMinute * 60.0;
var msPerDay = msPerHour * 24.0;
var msPerYear = msPerDay * 365;
function TimeAxis(props) {
var _a, _b, _c, _d, _e;
/*
Used on bottom of Plot.
*/
var context = React.useContext(GraphContext_1.GraphContext);
var _f = __read(React.useState([]), 2), ticks = _f[0], setTicks = _f[1];
var _g = __read(React.useState(1), 2), tickFontSize = _g[0], setTickFontSize = _g[1];
var _h = __read(React.useState(0), 2), axisHeight = _h[0], setAxisHeight = _h[1];
var _j = __read(React.useState('YYYY'), 2), tickFormat = _j[0], setTickFormat = _j[1];
var _k = __read(React.useState(''), 2), dFormat = _k[0], setDformat = _k[1];
var _l = __read(React.useState('Time'), 2), title = _l[0], setTitle = _l[1];
// Adjust unit label
React.useEffect(function () {
var _a;
if (props.label === undefined) {
setTitle(undefined);
return;
}
var titleFormat = "";
var unitLabel = "";
switch (tickFormat) {
case ('SSS'):
titleFormat = "MMM Do, YYYY HH:mm:ss";
unitLabel = " (ms)";
break;
case ('ss.SS'):
titleFormat = "MMM Do, YYYY HH:mm";
unitLabel = " (sec.ms)";
break;
case ('ss'):
titleFormat = "MMM Do, YYYY HH:mm";
unitLabel = " (sec)";
break;
case ('mm:ss'):
titleFormat = "MMM Do, YYYY HH";
unitLabel = " (min:sec)";
break;
case ('mm'):
titleFormat = "MMM Do, YYYY HH";
unitLabel = " (min)";
break;
case ('HH:mm'):
titleFormat = "MMM Do, YYYY";
unitLabel = " (hour:min)";
break;
case ('HH'):
titleFormat = "MMM Do, YYYY";
unitLabel = " (hour)";
break;
case ('DD HH'):
titleFormat = "MMM YYYY";
unitLabel = " (day hour)";
break;
case ('MM/DD'):
titleFormat = "YYYY";
unitLabel = " (month/day)";
break;
case ('MM YY'):
titleFormat = "";
unitLabel = " (month year)";
break;
case ('YYYY'):
titleFormat = "";
unitLabel = " (year)";
break;
default:
console.warn("Unrecognized format: ".concat(tickFormat));
break;
}
if (props.label === '') {
var formatedTitle = titleFormat === "" ? "Time" : formatTick(ticks[0], titleFormat, (_a = props.useUTC) !== null && _a !== void 0 ? _a : true);
setTitle(formatedTitle + unitLabel);
}
else
setTitle(props.label + unitLabel);
}, [tickFormat, props.label, ticks]);
// Adjust space for X Tick labels
React.useEffect(function () {
var dX = Math.max.apply(Math, __spreadArray([], __read(ticks.map(function (t) { var _a; return (0, helper_functions_1.GetTextHeight)("Segoe UI", '1em', formatTick(t, tickFormat, (_a = props.useUTC) !== null && _a !== void 0 ? _a : true)); })), false));
dX = (isFinite(dX) ? dX : 0) + 12;
setAxisHeight(dX);
}, [ticks, tickFormat]);
React.useEffect(function () {
var titleHeight = title !== undefined ? (0, helper_functions_1.GetTextHeight)("Segoe UI", '1em', title) : 0;
if (axisHeight + titleHeight !== props.heightAxis)
props.setHeight(axisHeight + titleHeight);
}, [axisHeight, title, props.heightAxis, props.setHeight]);
React.useEffect(function () {
var _a, _b, _c, _d;
var deltaT = context.XDomain[1] - context.XDomain[0];
if (deltaT === 0)
return;
var format = 'YYYY';
var dateFormat = '';
if (deltaT < msPerYear * 15 && deltaT >= msPerYear) {
format = 'MM YY';
dateFormat = '';
}
if (deltaT < msPerYear && deltaT >= 30 * msPerDay) {
format = 'MM/DD';
dateFormat = 'YY';
}
if (deltaT < 30 * msPerDay && deltaT >= 2 * msPerDay) {
format = 'DD HH';
dateFormat = 'YY';
}
if (deltaT < 2 * msPerDay && deltaT >= 30 * msPerHour) {
format = 'HH';
dateFormat = 'MM/DD';
}
if (deltaT < 30 * msPerHour && deltaT >= msPerHour) {
format = 'HH:mm';
dateFormat = 'MM/DD';
}
if (deltaT < msPerHour && deltaT >= 30 * msPerMinute) {
format = 'mm';
dateFormat = 'MM/DD HH';
}
if (deltaT < 30 * msPerMinute && deltaT >= msPerMinute) {
format = 'mm:ss';
dateFormat = 'MM/DD HH';
}
if (deltaT < msPerMinute && deltaT >= 30 * msPerSecond) {
format = 'ss';
dateFormat = 'MM/DD HH:mm';
}
if (deltaT < 30 * msPerSecond && deltaT >= msPerSecond) {
format = 'ss.SS';
dateFormat = 'MM/DD HH:mm';
}
if (deltaT < msPerSecond) {
format = 'SSS';
dateFormat = 'MM/DD HH:mm:ss';
}
var Tstart = ((_a = props.useUTC) !== null && _a !== void 0 ? _a : true) ? moment.utc(context.XDomain[0]) : moment(context.XDomain[0]);
var Tend = ((_b = props.useUTC) !== null && _b !== void 0 ? _b : true) ? moment.utc(context.XDomain[1]) : moment(context.XDomain[1]);
var Tdiff = moment.duration(((_c = props.useUTC) !== null && _c !== void 0 ? _c : true) ? moment.utc(context.XDomain[1]).diff(moment.utc(context.XDomain[0])) : moment(context.XDomain[1]).diff(moment(context.XDomain[0])));
var Ttick = (0, lodash_1.cloneDeep)(Tstart);
var step = 10;
var stepType = 'y';
if (Tdiff.asYears() >= 70) {
step = 10;
stepType = 'y';
setTopOfYear(Ttick);
Ttick.year(Math.floor((Ttick.year()) / 10.0) * 10.0);
}
if (Tdiff.asYears() < 70 && Tdiff.asYears() >= 40) {
step = 5;
setTopOfYear(Ttick);
Ttick.year(Math.floor((Ttick.year()) / 5.0) * 5.0);
}
if (Tdiff.asYears() < 40 && Tdiff.asYears() >= 15) {
step = 2;
setTopOfYear(Ttick);
Ttick.year(Math.floor((Ttick.year()) / 2.0) * 2.0);
}
if (Tdiff.asYears() < 15 && Tdiff.asYears() >= 6) {
stepType = 'M';
step = 12;
setTopOfYear(Ttick);
}
if (Tdiff.asYears() < 6 && Tdiff.asYears() >= 4) {
stepType = 'M';
step = 6;
setTopOfMonth(Ttick);
Ttick.month(Math.floor((Ttick.month()) / 6.0) * 6.0);
}
if (Tdiff.asYears() < 4 && Tdiff.asYears() >= 1.5) {
stepType = 'M';
step = 3;
setTopOfMonth(Ttick);
Ttick.month(Math.floor((Ttick.month()) / 3.0) * 3.0);
}
if (Tdiff.asYears() < 1.5 && Tdiff.asMonths() >= 6) {
stepType = 'M';
step = 1;
setTopOfMonth(Ttick);
}
if (Tdiff.asMonths() < 6 && Tdiff.asMonths() >= 2) {
stepType = 'w';
step = 2;
setTopOfWeek(Ttick);
}
if (Tdiff.asMonths() < 2 && Tdiff.asMonths() >= 1) {
stepType = 'w';
step = 1;
setTopOfWeek(Ttick);
}
if (Tdiff.asMonths() < 1 && Tdiff.asDays() >= 16) {
stepType = 'd';
step = 2;
setTopOfDay(Ttick);
}
if (Tdiff.asDays() < 16 && Tdiff.asDays() >= 10) {
stepType = 'd';
step = 1;
setTopOfDay(Ttick);
}
if (Tdiff.asDays() < 10 && Tdiff.asDays() >= 3) {
stepType = 'h';
step = 12;
setTopOfHour(Ttick);
Ttick.hours(Math.floor((Ttick.hours()) / 12.0) * 12.0);
}
if (Tdiff.asDays() < 3 && Tdiff.asHours() >= 30) {
stepType = 'h';
step = 6;
setTopOfHour(Ttick);
Ttick.hours(Math.floor((Ttick.hours()) / 6.0) * 6.0);
}
if (Tdiff.asHours() < 30 && Tdiff.asHours() >= 18) {
stepType = 'h';
step = 3;
setTopOfHour(Ttick);
Ttick.hours(Math.floor((Ttick.hours()) / 3.0) * 3.0);
}
if (Tdiff.asHours() < 18 && Tdiff.asHours() >= 6) {
stepType = 'h';
step = 1;
setTopOfHour(Ttick);
}
if (Tdiff.asHours() < 6 && Tdiff.asHours() >= 3) {
stepType = 'm';
step = 30;
setTopOfMinute(Ttick);
Ttick.minutes(Math.floor((Ttick.minutes()) / 30.0) * 30.0);
}
if (Tdiff.asHours() < 3 && Tdiff.asHours() >= 1) {
stepType = 'm';
step = 15;
setTopOfMinute(Ttick);
Ttick.minutes(Math.floor((Ttick.minutes()) / 15.0) * 15.0);
}
if (Tdiff.asHours() < 1 && Tdiff.asMinutes() >= 20) {
stepType = 'm';
step = 5;
setTopOfMinute(Ttick);
Ttick.minutes(Math.floor((Ttick.minutes()) / 5.0) * 5.0);
}
if (Tdiff.asMinutes() < 20 && Tdiff.asMinutes() >= 10) {
stepType = 'm';
step = 2;
setTopOfMinute(Ttick);
Ttick.minutes(Math.floor((Ttick.minutes()) / 2.0) * 2.0);
}
if (Tdiff.asMinutes() < 10 && Tdiff.asMinutes() >= 5) {
stepType = 'm';
step = 1;
setTopOfMinute(Ttick);
}
if (Tdiff.asMinutes() < 5 && Tdiff.asMinutes() >= 2) {
stepType = 's';
step = 30;
setTopOfSecond(Ttick);
Ttick.second(Math.floor((Ttick.second()) / 30) * 30.0);
}
if (Tdiff.asMinutes() < 2 && Tdiff.asMinutes() >= 1) {
stepType = 's';
step = 15;
setTopOfSecond(Ttick);
Ttick.second(Math.floor((Ttick.second()) / 15) * 15.0);
}
if (Tdiff.asMinutes() < 1 && Tdiff.asSeconds() >= 30) {
stepType = 's';
step = 5;
setTopOfSecond(Ttick);
Ttick.second(Math.floor((Ttick.second()) / 5) * 5.0);
}
if (Tdiff.asSeconds() < 30 && Tdiff.asSeconds() >= 15) {
stepType = 's';
step = 2;
setTopOfSecond(Ttick);
}
if (Tdiff.asSeconds() < 15 && Tdiff.asSeconds() >= 5) {
stepType = 's';
step = 1;
setTopOfSecond(Ttick);
}
if (Tdiff.asSeconds() < 5 && Tdiff.asSeconds() >= 2) {
stepType = 'ms';
step = 500;
setTopOfms(Ttick);
Ttick.millisecond(Math.floor((Ttick.millisecond()) / 500) * 500.0);
}
if (Tdiff.asSeconds() < 2 && Tdiff.asSeconds() >= 1) {
stepType = 'ms';
step = 250;
setTopOfms(Ttick);
Ttick.millisecond(Math.floor((Ttick.millisecond()) / 250) * 250.0);
}
if (Tdiff.asSeconds() < 1 && Tdiff.asMilliseconds() >= 500) {
stepType = 'ms';
step = 100;
setTopOfms(Ttick);
Ttick.millisecond(Math.floor((Ttick.millisecond()) / 100) * 100.0);
}
if (Tdiff.asMilliseconds() < 500 && Tdiff.asMilliseconds() >= 100) {
stepType = 'ms';
step = 50;
setTopOfms(Ttick);
Ttick.millisecond(Math.floor((Ttick.millisecond()) / 50) * 50.0);
}
if (Tdiff.asMilliseconds() < 100 && Tdiff.asMilliseconds() >= 20) {
stepType = 'ms';
step = 10;
setTopOfms(Ttick);
Ttick.millisecond(Math.floor((Ttick.millisecond()) / 10) * 10.0);
}
if (Tdiff.asMilliseconds() < 20) {
stepType = 'ms';
setTopOfms(Ttick);
step = 1;
}
var newTicks = [Ttick.add(step, stepType)];
while (newTicks[newTicks.length - 1] < Tend)
newTicks.push(newTicks[newTicks.length - 1].clone().add(step, stepType));
newTicks.pop();
setTicks(newTicks.map(function (t) { return t.valueOf(); }));
setTickFormat(format);
if ((_d = props.showDate) !== null && _d !== void 0 ? _d : false)
setDformat(dateFormat);
else
setDformat('');
}, [context.XDomain, props.showDate]);
function setTopOfms(d) {
d.milliseconds(Math.floor(d.millisecond()));
}
function setTopOfSecond(d) {
setTopOfms(d);
d.milliseconds(0);
}
function setTopOfMinute(d) {
setTopOfSecond(d);
d.seconds(0);
}
function setTopOfHour(d) {
setTopOfMinute(d);
d.minutes(0);
}
function setTopOfDay(d) {
setTopOfHour(d);
d.hours(0);
}
function setTopOfWeek(d) {
setTopOfDay(d);
d.weekday(0);
}
function setTopOfMonth(d) {
setTopOfDay(d);
d.date(1);
}
function setTopOfYear(d) {
setTopOfDay(d);
d.dayOfYear(0);
}
React.useEffect(function () {
var _a;
if (ticks.length === 0)
return;
// Use first tick as they should all be very similar in size
var sampleLabel = formatTick(ticks[0], tickFormat, (_a = props.useUTC) !== null && _a !== void 0 ? _a : true);
var availableWidth = props.width - props.offsetLeft - props.offsetRight - 10;
var availableWidthPerTick = availableWidth / ticks.length;
var newFontSize = 1;
var sampleWidth = (0, helper_functions_1.GetTextWidth)('Segoe UI', newFontSize + 'em', sampleLabel);
// Decrease font size until we fit, down to a mini of 0.5em.
while (sampleWidth > availableWidthPerTick && newFontSize > 0.5) {
newFontSize = newFontSize - 0.05;
sampleWidth = (0, helper_functions_1.GetTextWidth)('Segoe UI', newFontSize + 'em', sampleLabel);
}
setTickFontSize(newFontSize);
}, [ticks, props.width, props.offsetLeft, props.offsetRight, tickFormat]);
return (React.createElement("g", null,
React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1 }, d: "M ".concat(props.offsetLeft - (((_a = props.showLeftMostTick) !== null && _a !== void 0 ? _a : true) ? 0 : 8), " ").concat(props.height - props.offsetBottom, " H ").concat(props.width - props.offsetRight + (((_b = props.showRightMostTick) !== null && _b !== void 0 ? _b : true) ? 0 : 8)) }),
((_c = props.showLeftMostTick) !== null && _c !== void 0 ? _c : true) ?
React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1 }, d: "M ".concat(props.offsetLeft, " ").concat(props.height - props.offsetBottom, " v ").concat(8) })
: null,
((_d = props.showRightMostTick) !== null && _d !== void 0 ? _d : true) ? React.createElement("path", { stroke: 'currentColor', style: { strokeWidth: 1 }, d: "M ".concat(props.width - props.offsetRight, " ").concat(props.height - props.offsetBottom, " v ").concat(8) }) : null,
props.showTicks === undefined || props.showTicks ?
React.createElement(React.Fragment, null,
ticks.map(function (l, i) { return React.createElement("path", { key: i, stroke: 'currentColor', style: { strokeWidth: 1, transition: 'd 0.5s' }, d: "M ".concat(context.XTransformation(l), " ").concat(props.height - props.offsetBottom + 6, " v ").concat(-6) }); }),
ticks.map(function (l, i) {
var _a;
return React.createElement("text", { fill: 'currentColor', key: i, fontSize: "".concat(tickFontSize, "em"), style: { textAnchor: 'middle', dominantBaseline: 'hanging', transition: 'x 0.5s, y 0.5s' }, y: props.height - props.offsetBottom + 8, x: context.XTransformation(l) }, formatTick(l, tickFormat, (_a = props.useUTC) !== null && _a !== void 0 ? _a : true));
}))
: null,
title !== undefined ?
React.createElement("text", { fill: 'currentColor', style: { fontSize: '1em', textAnchor: 'middle', dominantBaseline: 'middle' }, x: props.offsetLeft + ((props.width - props.offsetLeft - props.offsetRight) / 2), y: props.height - props.offsetBottom + axisHeight }, title) : null,
(dFormat !== '' && ticks.length > 0) ?
React.createElement("text", { fill: 'currentColor', style: { fontSize: '1em', textAnchor: 'end', dominantBaseline: 'middle' }, x: props.width - props.offsetRight, y: props.height - props.offsetBottom + axisHeight }, formatTick(ticks[0], dFormat, (_e = props.useUTC) !== null && _e !== void 0 ? _e : true)) : null));
}
function formatTick(t, f, useUTC) {
var TS = useUTC ? moment.utc(t) : moment(t);
return TS.format(f);
}
exports.default = React.memo(TimeAxis);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVGltZUF4aXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvVGltZUF4aXMudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSx5R0FBeUc7QUFDekcsdUJBQXVCO0FBQ3ZCLEVBQUU7QUFDRixxRUFBcUU7QUFDckUsRUFBRTtBQUNGLHdHQUF3RztBQUN4Ryx3R0FBd0c7QUFDeEcsc0dBQXNHO0FBQ3RHLHdGQUF3RjtBQUN4RixFQUFFO0FBQ0YsMENBQTBDO0FBQzFDLEVBQUU7QUFDRix3R0FBd0c7QUFDeEcsd0dBQXdHO0FBQ3hHLDRFQUE0RTtBQUM1RSxFQUFFO0FBQ0YsOEJBQThCO0FBQzlCLHdHQUF3RztBQUN4RywwQkFBMEI7QUFDMUIsbURBQW1EO0FBQ25ELEVBQUU7QUFDRix5R0FBeUc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6Ryw2QkFBK0I7QUFDL0IsK0NBQTZDO0FBQzdDLCtCQUFpQztBQUNqQyxtRUFBNkU7QUFDN0UsaUNBQW1DO0FBa0JuQyxJQUFNLFdBQVcsR0FBRyxPQUFPLENBQUM7QUFDNUIsSUFBTSxXQUFXLEdBQUcsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN2QyxJQUFNLFNBQVMsR0FBRyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLElBQU0sUUFBUSxHQUFHLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDbEMsSUFBTSxTQUFTLEdBQUcsUUFBUSxHQUFHLEdBQUcsQ0FBQztBQUtqQyxTQUFTLFFBQVEsQ0FBQyxLQUFhOztJQUM3Qjs7TUFFRTtJQUNGLElBQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsMkJBQVksQ0FBQyxDQUFDO0lBRXpDLElBQUEsS0FBQSxPQUFvQixLQUFLLENBQUMsUUFBUSxDQUFXLEVBQUUsQ0FBQyxJQUFBLEVBQS9DLEtBQUssUUFBQSxFQUFFLFFBQVEsUUFBZ0MsQ0FBQztJQUNqRCxJQUFBLEtBQUEsT0FBa0MsS0FBSyxDQUFDLFFBQVEsQ0FBUyxDQUFDLENB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RyxDQUFDLENBQUM7WUFDVCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksR0FBRyxFQUFFLENBQUM7WUFDbEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbkQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdkIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDbEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDakQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDaEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDL0MsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFFekQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDaEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDdEQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDakQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDNUQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDaEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDNUQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDbkQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDdEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDMUQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDckQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDeEQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDcEQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxFQUFFLENBQUM7WUFDVixjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUE7UUFDeEQsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDckQsUUFBUSxHQUFHLEdBQUcsQ0FBQztZQUNmLElBQUksR0FBRyxDQUFDLENBQUM7WUFDVCxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDdEIsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMs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