gd-canvas
Version:
This set of libraries was generated with [Angular CLI](https://github.com/angular/angular-cli) version 9.1.0 and no dependencies accept gd-tree (it has jquery and jstree) and gd-graph (it has jquery and chart.js).
722 lines • 123 kB
JavaScript
import { Types } from './gd-canvas.base';
import { Actions } from './gd-canvas.base';
import { Tools } from './gd-canvas.tools';
import { Point } from 'gd-common';
import { Rect } from 'gd-common';
import { Vector } from 'gd-common';
import { Line } from 'gd-common';
import { CustomObject } from 'gd-canvas-custom-types';
var Selector = /** @class */ (function () {
function Selector(canvas, service) {
var _this = this;
this.service = service;
this.canvas = canvas;
this.selected = new Array();
this.focused = null;
this.tools = new Tools();
service.focusedMove$.subscribe(function (offset) { return _this.OnFocusedMove(offset); });
}
Object.defineProperty(Selector.prototype, "StartX", {
get: function () { return this.startX; },
set: function (x) { this.startX = x; this.rect = null; },
enumerable: true,
configurable: true
});
Object.defineProperty(Selector.prototype, "StartY", {
get: function () { return this.startY; },
set: function (y) { this.startY = y; this.rect = null; },
enumerable: true,
configurable: true
});
Object.defineProperty(Selector.prototype, "EndX", {
get: function () { return this.endX; },
set: function (x) { this.endX = x; this.rect = null; },
enumerable: true,
configurable: true
});
Object.defineProperty(Selector.prototype, "EndY", {
get: function () { return this.endY; },
set: function (y) { this.endY = y; this.rect = null; },
enumerable: true,
configurable: true
});
Selector.prototype.OnFocusedMove = function (offset) {
for (var i = 0; i < this.selected.length; ++i) {
if (this.selected[i].IsFocused)
continue;
if (this.selected[i].ParentID !== null)
continue;
this.selected[i].MoveOffset(offset.x, offset.y);
}
};
Selector.prototype.GetPoints = function () {
var x = Math.min(this.startX, this.endX);
var y = Math.min(this.startY, this.endY);
var w = Math.abs(this.startX - this.endX);
var h = Math.abs(this.startY - this.endY);
var points = [
{ x: x, y: y },
{ x: x + w, y: y },
{ x: x + w, y: y + h },
{ x: x, y: y + h },
{ x: x, y: y }
];
return points;
};
Selector.prototype.Refresh = function () {
if (this.rect !== null)
return;
var x = Math.min(this.startX, this.endX);
var y = Math.min(this.startY, this.endY);
var w = Math.abs(this.startX - this.endX);
var h = Math.abs(this.startY - this.endY);
this.rect = new Rect(x, y, w, h);
};
Selector.prototype.Add = function (object) {
if (this.rect === null)
return false;
if (object === undefined)
return false;
if (object.IsSelected)
return false;
var flag = true;
var x = this.rect.x / this.canvas.scale - this.canvas.canvasOffsetX;
var y = this.rect.y / this.canvas.scale - this.canvas.canvasOffsetY;
var modelRect = new Rect(x, y, this.rect.w / this.canvas.scale, this.rect.h / this.canvas.scale);
var points = object.GetPolygon();
for (var j = 0; j < points.length; ++j) {
if (!modelRect.IsContains(points[j])) {
flag = false;
break;
}
}
if (!flag)
return false;
if (this.selected.length === 0) {
this.focused = object;
object.IsFocused = true;
}
this.selected.push(object);
object.IsSelected = true;
return true;
};
Selector.prototype.ClearSelection = function () {
this.selected = new Array();
if (this.focused === null)
return;
this.focused.IsFocused = false;
this.focused.activePoint = -1;
this.focused.activeLine = -1;
this.focused = null;
};
Selector.prototype.Select = function (point, isRightClick) {
var toRedraw = [];
var object = this.canvas.GetObjectClicked(point);
if (object === undefined) {
if (this.focused !== null) {
var res = this.UnSelect();
this.canvas.DRAW(res);
this.service.SelectedChanged(null);
}
return false;
}
if (!this.canvas.isAltKey) {
if (object.type === Types.polyline) {
}
if (object.type === Types.polygon) {
if (object.Text.IsFocused) {
this.selected.push(object);
}
else {
if (!object.IsSelected) {
this.UnSelect();
}
if (object.activeLine !== -1) {
this.selected.push(object);
}
}
}
else {
if (object.IsRef) {
if (object.IsSelected) {
object.Reference.IsVisible = !object.Reference.IsVisible;
if (object.Reference.IsRef) {
object.Reference.Reference.IsVisible = object.Reference.IsVisible; //?????????????????????
}
}
else {
object.Reference.IsVisible = true;
}
}
if (!object.IsSelected) {
toRedraw = this.UnSelect();
this.selected.push(object);
if (CustomObject.Select(object)) {
var layer = this.canvas.map.get(object.Type);
if (layer !== undefined) {
var type = Types[object.Type].toString();
if (toRedraw.indexOf(type) === -1)
toRedraw.push(type);
var child = this.canvas.mapChildren.get(object.Type);
if (child !== undefined) {
var type = Types[child].toString();
if (toRedraw.indexOf(type) === -1)
toRedraw.push(type);
}
}
var layer = this.canvas.map.get(object.ParentType);
if (layer !== undefined) {
var type = Types[object.ParentType].toString();
if (toRedraw.indexOf(type) === -1)
toRedraw.push(type);
}
}
if (object.type === Types.reference) {
object.IsVisible = true;
object.Select();
}
}
}
if (this.focused !== null && this.focused !== object) {
this.focused.IsFocused = false;
this.focused.activePoint = -1;
this.focused.activeLine = -1;
if (!object.IsSelected) {
this.focused.IsSelected = false;
}
}
this.focused = object;
this.focused.IsFocused = true;
this.focused.IsSelected = true;
this.focused.ClickOffsetX = point.x - this.focused.X;
this.focused.ClickOffsetY = point.y - this.focused.Y;
}
else {
if (object.type === Types.polygon) {
if (object.Text.IsFocused) {
this.selected.push(object);
}
else {
if (!object.IsSelected) {
this.UnSelect();
}
if (object.activeLine !== -1) {
this.selected.push(object);
}
}
}
else {
if (!object.IsSelected) {
this.selected.push(object);
if (CustomObject.Select(object)) {
var layer = this.canvas.map.get(object.Type);
if (layer !== undefined) {
var type = Types[object.Type].toString();
if (toRedraw.indexOf(type) === -1)
toRedraw.push(type);
}
var layer = this.canvas.map.get(object.ParentType);
if (layer !== undefined) {
var type = Types[object.ParentType].toString();
if (toRedraw.indexOf(type) === -1)
toRedraw.push(type);
}
}
if (object.type === Types.reference) {
object.IsVisible = true;
}
if (object.type === Types.shape) {
if (object.IsRef)
object.Reference.IsVisible = true;
}
if (this.focused !== null) {
this.focused.IsFocused = false;
this.focused.activePoint = -1;
this.focused.activeLine = -1;
}
this.focused = object;
this.focused.IsFocused = true;
this.focused.IsSelected = true;
this.focused.ClickOffsetX = point.x - this.focused.X;
this.focused.ClickOffsetY = point.y - this.focused.Y;
}
else {
var i = this.selected.indexOf(object);
if (i > -1) {
this.selected.splice(i, 1);
}
object.IsSelected = false;
if (object.IsFocused) {
this.focused.IsFocused = false;
this.focused.activePoint = -1;
this.focused.activeLine = -1;
this.focused = null;
if (this.selected.length > 0) {
this.focused = this.selected[0];
this.focused.IsFocused = true;
}
}
}
}
}
var newSelected = Types[object.type];
if (toRedraw.indexOf(newSelected) === -1)
toRedraw.push(Types[object.type]);
if (toRedraw.indexOf('selected') === -1)
toRedraw.push('selected');
if (object.isRef)
if (toRedraw.indexOf('reference') === -1)
toRedraw.push('reference');
if (object.type === Types.text && object.ParentType === Types.polygon)
if (toRedraw.indexOf('polygon') === -1)
toRedraw.push('polygon');
this.canvas.DRAW(toRedraw);
return true;
};
Selector.prototype.UnSelect = function () {
if (this.selected.length === 0)
return [];
var wasSelected = new Array();
wasSelected.push('selected');
for (var i = 0; i < this.selected.length; ++i) {
this.selected[i].IsSelected = false;
if (CustomObject.UnSelect(this.selected[i])) {
var child = this.canvas.mapChildren.get(this.selected[i].type);
if (child !== undefined) {
var type = Types[child].toString();
if (wasSelected.indexOf(type) === -1)
wasSelected.push(type);
type = Types[this.selected[i].type].toString();
if (wasSelected.indexOf(type) === -1)
wasSelected.push(type);
}
}
switch (this.selected[i].type) {
case Types.block:
{
if (wasSelected.indexOf('block') === -1)
wasSelected.push('block');
}
break;
case Types.dimension:
{
if (wasSelected.indexOf('dimension') === -1)
wasSelected.push('dimension');
}
break;
case Types.segment:
{
if (wasSelected.indexOf('segment') === -1)
wasSelected.push('segment');
}
break;
case Types.arc:
{
if (wasSelected.indexOf('arc') === -1)
wasSelected.push('arc');
}
break;
case Types.polygon:
{
if (wasSelected.indexOf('polygon') === -1)
wasSelected.push('polygon');
}
break;
case Types.callout:
{
if (wasSelected.indexOf('callout') === -1)
wasSelected.push('callout');
}
break;
case Types.polyline:
{
if (wasSelected.indexOf('polyline') === -1)
wasSelected.push('polyline');
this.selected[i].activePoint = -1;
this.selected[i].activeLine = -1;
this.selected[i].activeLineKeeper = -1;
}
break;
case Types.reference:
{
this.selected[i].IsVisible = false;
if (wasSelected.indexOf('reference') === -1)
wasSelected.push('reference');
for (var j = 0; j < this.selected[i].Children.length; ++j) {
var toRedraw = Types[this.selected[i].Children[j].type];
if (wasSelected.indexOf(toRedraw) === -1)
wasSelected.push(toRedraw);
}
}
break;
case Types.shape:
{
if (CustomObject.UnSelect(this.selected[i])) {
var layer = this.canvas.map.get(this.selected[i].ParentType);
if (layer !== null) {
var type = Types[this.selected[i].ParentType].toString();
if (wasSelected.indexOf(type) === -1)
wasSelected.push(type);
}
}
if (this.selected[i].IsRef) {
this.selected[i].Reference.IsVisible = false;
if (this.selected[i].Reference.IsRef) {
this.selected[i].Reference.Reference.IsVisible = false;
}
if (wasSelected.indexOf('reference') === -1)
wasSelected.push('reference');
}
if (wasSelected.indexOf('shape') === -1)
wasSelected.push('shape');
}
break;
case Types.text:
{
if (this.selected[i].ParentType === Types.polygon) {
if (wasSelected.indexOf('polygon') === -1)
wasSelected.push('polygon');
}
else {
if (wasSelected.indexOf('text') === -1)
wasSelected.push('text');
}
}
break;
}
}
this.ClearSelection();
return wasSelected;
};
Selector.prototype.IsContains = function (point) {
return false;
};
Selector.prototype.Draw = function (c) {
if (c === null || c === undefined)
return;
this.Refresh();
var borderThickness = 0.25;
c.clearRect(-0.5, -0.5, this.canvas.width + 1, this.canvas.height + 1);
if (this.canvas.action === Actions.select || this.canvas.action === Actions.selectShapes) {
c.save();
c.fillStyle = 'rgba(128, 159, 255, 0.15)';
c.strokeStyle = 'rgba( 0, 45, 179, 1.00)';
c.lineWidth = borderThickness;
c.beginPath();
c.rect(this.rect.x + (0.5 / this.canvas.scale), this.rect.y + (0.5 / this.canvas.scale), this.rect.w, this.rect.h);
c.closePath();
c.fill();
c.stroke();
c.restore();
}
if (this.canvas.action === Actions.selectShapesInOrder) {
c.save();
c.strokeStyle = 'rgba( 0, 45, 179, 1.00)';
c.lineWidth = borderThickness;
c.beginPath();
c.moveTo(this.startX, this.startY);
c.lineTo(this.endX, this.endY);
c.closePath();
c.stroke();
c.restore();
}
CustomObject.DoCustomAction(c, this.canvas.action, this.startX, this.startY, this.endX, this.endY, this.canvas.scale, borderThickness);
};
Selector.prototype.DrawRegularGondola = function (c) {
var LocationW = 40;
var LocationH = 20;
var Start = 0;
var End = 0;
try {
var start = new Point(this.StartX / this.canvas.scale, this.StartY / this.canvas.scale);
var end = new Point(this.EndX / this.canvas.scale, this.EndY / this.canvas.scale);
var vector = new Vector(start, end);
var angle = vector.Angle();
var len = vector.Length();
var vectorStartCap = new Vector(start, end);
vectorStartCap.Normalize();
vectorStartCap.Scale(-LocationH);
var vectorEndCap = new Vector(start, end);
vectorEndCap.Normalize();
vectorEndCap.Scale(LocationH);
var vector1 = new Vector(start, end);
vector1.Rotate90();
vector1.Normalize();
vector1.Scale(LocationH);
var vector2 = new Vector(start, end);
vector2.Rotate90();
vector2.Rotate90();
vector2.Rotate90();
vector2.Normalize();
vector2.Scale(LocationH);
var gondola = new Line(this.startX, this.startY, this.endX, this.endY);
var line1 = new Line(this.startX + vector2.x, this.startY + vector2.y, this.startX + vector1.x, this.startY + vector1.y);
var line2 = new Line(this.startX + vector1.x, this.startY + vector1.y, this.endX + vector1.x, this.endY + vector1.y);
var line3 = new Line(this.endX + vector1.x, this.endY + vector1.y, this.endX + vector2.x, this.endY + vector2.y);
var line4 = new Line(this.endX + vector2.x, this.endY + vector2.y, this.startX + vector2.x, this.startY + vector2.y);
var line5 = new Line(this.startX + vector1.x, this.startY + vector1.y, this.startX + vectorStartCap.x + vector1.x, this.startY + vectorStartCap.y + vector1.y);
var line6 = new Line(this.startX + vectorStartCap.x + vector1.x, this.startY + vectorStartCap.y + vector1.y, this.startX + vectorStartCap.x + vector2.x, this.startY + vectorStartCap.y + vector2.y);
var line7 = new Line(this.startX + vectorStartCap.x + vector2.x, this.startY + vectorStartCap.y + vector2.y, this.startX + vector2.x, this.startY + vector2.y);
var line8 = new Line(this.endX + vector1.x, this.endY + vector1.y, this.endX + vectorEndCap.x + vector1.x, this.endY + vectorEndCap.y + vector1.y);
var line9 = new Line(this.endX + vectorEndCap.x + vector1.x, this.endY + vectorEndCap.y + vector1.y, this.endX + vectorEndCap.x + vector2.x, this.endY + vectorEndCap.y + vector2.y);
var line10 = new Line(this.endX + vectorEndCap.x + vector2.x, this.endY + vectorEndCap.y + vector2.y, this.endX + vector2.x, this.endY + vector2.y);
c.beginPath();
c.moveTo(gondola.x1, gondola.y1);
c.lineTo(gondola.x2, gondola.y2);
c.moveTo(line1.x1, line1.y1);
c.lineTo(line1.x2, line1.y2);
c.lineTo(line2.x2, line2.y2);
c.lineTo(line3.x2, line3.y2);
c.lineTo(line4.x2, line4.y2);
c.moveTo(line5.x1, line5.y1);
c.lineTo(line5.x2, line5.y2);
c.lineTo(line6.x2, line6.y2);
c.lineTo(line7.x2, line7.y2);
c.moveTo(line8.x1, line8.y1);
c.lineTo(line8.x2, line8.y2);
c.lineTo(line9.x2, line9.y2);
c.lineTo(line10.x2, line10.y2);
c.closePath();
c.stroke();
var vector3 = new Vector(start, end);
var tempID = 1;
// int tempID = Map.NextAreaID;
var count = (len / LocationW);
var areaCount = 2 * count + 2;
for (var i = 1; i <= count; ++i) {
vector3.Normalize();
vector3.Scale(LocationW * i);
var line = new Line(this.startX + vector1.x + vector3.x, this.startY + vector1.y + vector3.y, this.startX + vector2.x + vector3.x, this.startY + vector2.y + vector3.y);
c.beginPath();
c.moveTo(line.x1, line.y1);
c.lineTo(line.x2, line.y2);
c.closePath();
c.stroke();
}
var vector5 = new Vector(start, end);
var vector6 = new Vector(start, end);
vector6.Normalize();
vector6.Scale(-LocationW / 2);
var vector7 = new Vector(start, end);
vector7.Rotate90();
vector7.Normalize();
vector7.Scale(LocationH / 2 - 4);
var text = '';
var x = 0;
var y = 0;
for (var i = 1; i <= count; ++i) {
c.save();
vector5.Normalize();
vector5.Scale(LocationW * i);
// text = (tempID + i-1).toString();
text = (tempID + 2 * Math.floor(count) + 1 - i).toString();
x = this.startX + vector5.x + vector6.x + vector7.x;
y = this.startY + vector5.y + vector6.y + vector7.y;
c.translate(x, y);
c.rotate(angle * Math.PI / 180);
// c.font = '10px Source Sans Pro';
// c.font = '10px Open Sans';
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, 0, 0);
c.restore();
}
text = (tempID + Math.floor(count)).toString();
var vector8 = new Vector(start, end);
vector8.Normalize();
vector8.Scale(LocationH / 2 - 3);
x = this.endX + vector8.x;
y = this.endY + vector8.y;
c.save();
c.translate(x, y);
c.rotate((angle + 90) * Math.PI / 180);
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, 0, 0);
c.restore();
vector7.Normalize();
vector7.Scale(-LocationH / 2 + 4);
for (var i = 1; i <= count; ++i) {
c.save();
vector5.Normalize();
vector5.Scale(LocationW * i);
text = (tempID + i - 1).toString();
// text = (tempID + 2 * Math.floor(count) + 1 - i).toString();
x = this.startX + vector5.x + vector6.x + vector7.x;
y = this.startY + vector5.y + vector6.y + vector7.y;
c.translate(x, y);
c.rotate((angle + 180) * Math.PI / 180);
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, 0, 0);
c.restore();
}
var vector9 = new Vector(start, end);
vector9.Normalize();
vector9.Scale(-LocationH / 2 + 4);
text = (tempID + 2 * Math.floor(count) + 1).toString();
x = this.startX + vector9.x;
y = this.startY + vector9.y;
c.save();
c.translate(x, y);
c.rotate((angle + 270) * Math.PI / 180);
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, 0, 0);
c.restore();
}
catch (ex) {
}
};
Selector.prototype.DrawWallGondola = function (c) {
var LocationW = 40;
var LocationH = 20;
var Start = 0;
var End = 0;
try {
var start = new Point(this.StartX / this.canvas.scale, this.StartY / this.canvas.scale);
var end = new Point(this.EndX / this.canvas.scale, this.EndY / this.canvas.scale);
var vector = new Vector(start, end);
var angle = vector.Angle();
var len = vector.Length();
var vector2 = new Vector(start, end);
vector2.Rotate90();
vector2.Normalize();
vector2.Scale(-LocationH);
var gondola = new Line(this.startX, this.startY, this.endX, this.endY);
var line1 = new Line(this.endX, this.endY, this.endX + vector2.x, this.endY + vector2.y);
var line2 = new Line(this.endX + vector2.x, this.endY + vector2.y, this.startX + vector2.x, this.startY + vector2.y);
var line3 = new Line(this.startX, this.startY, this.startX + vector2.x, this.startY + vector2.y);
c.beginPath();
c.moveTo(gondola.x1, gondola.y1);
c.lineTo(gondola.x2, gondola.y2);
c.lineTo(line1.x2, line1.y2);
c.lineTo(line2.x2, line2.y2);
c.lineTo(line3.x2, line3.y2);
c.closePath();
c.stroke();
var vector3 = new Vector(start, end);
var tempID = 1;
// int tempID = Map.NextAreaID;
var count = (len / LocationW);
var areaCount = 2 * count + 2;
for (var i = 1; i <= count; ++i) {
vector3.Normalize();
vector3.Scale(LocationW * i);
var line = new Line(this.startX + vector3.x, this.startY + vector3.y, this.startX + vector2.x + vector3.x, this.startY + vector2.y + vector3.y);
c.beginPath();
c.moveTo(line.x1, line.y1);
c.lineTo(line.x2, line.y2);
c.closePath();
c.stroke();
}
var vector4 = new Vector(start, end);
var vector5 = new Vector(start, end);
vector5.Normalize();
vector5.Scale(-LocationW / 2 - 5);
var vector6 = new Vector(start, end);
vector6.Normalize();
vector6.Scale(LocationH / 2 - 3);
var text = '';
var x = 0;
var y = 0;
for (var i = 1; i <= count; ++i) {
c.save();
vector4.Normalize();
vector4.Scale(LocationW * i);
text = (tempID + i - 1).toString();
x = this.startX + vector4.x + vector5.x + vector6.x;
y = this.startY + vector4.y + vector5.y + vector6.x;
c.translate(x, y);
c.rotate((angle + 180) * Math.PI / 180);
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, 0, 0);
c.restore();
}
}
catch (ex) {
}
};
Selector.prototype.DrawArea = function (c) {
if (this.startX > this.endX)
return;
if (this.startY > this.endY)
return;
var LocationW = 40;
var LocationH = 20;
var paddingLeft = 5;
var paddingTop = 5;
var paddingRight = 5;
var paddingBottom = 5;
var rect = new Rect(this.startX, this.startY, this.endX - this.startX, this.endY - this.startY);
var itemX = rect.x + paddingLeft * this.canvas.scale;
var itemY = rect.y + paddingTop * this.canvas.scale;
var text = '';
var tempID = 1;
c.globalAlpha = 0.75;
c.strokeStyle = '#444';
c.fillStyle = '#eee';
c.save();
c.beginPath();
c.rect(rect.x, rect.y, rect.w, rect.h);
c.closePath();
c.fill();
c.stroke();
c.restore();
c.save();
text = 'Area 1';
var x = itemX;
var y = itemY;
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'left';
c.fillText(text, rect.x + 1, rect.y - 3);
c.restore();
c.strokeStyle = '#777';
c.fillStyle = '#eee';
if (rect.w < 45 || rect.h < 25)
return;
var vector4 = new Vector(100, 0);
vector4.Normalize();
vector4.Scale(LocationW / 2);
var vector5 = new Vector(0, 100);
vector5.Normalize();
vector5.Scale(LocationH / 2 + 4);
for (var i = 0;; ++i) {
if (itemX + LocationW + 3 > rect.x + rect.w) {
itemX = rect.x + paddingLeft * this.canvas.scale;
itemY = itemY + LocationH + 3;
if (itemY + LocationH + 3 > rect.y + rect.h) {
break;
}
}
c.save();
c.beginPath();
this.tools.RoundRect(c, itemX, itemY, LocationW, LocationH, 3, '#f00', '#000');
c.closePath();
c.stroke();
c.restore();
c.save();
vector4.Normalize();
vector4.Scale(LocationW / 2);
text = (tempID + i).toString();
var x_1 = itemX + vector4.x + vector5.x;
var y_1 = itemY + vector4.y + vector5.y;
c.font = '10px Sans';
c.fillStyle = 'black';
c.textAlign = 'center';
c.fillText(text, x_1, y_1);
c.restore();
itemX = itemX + LocationW + 3;
}
};
return Selector;
}());
export { Selector };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2QtY2FudmFzLnNlbGVjdG9yLmpzIiwic291cmNlUm9vdCI6Im5nOi8vZ2QtY2FudmFzLyIsInNvdXJjZXMiOlsibGliL2dkLWNhbnZhcy5zZWxlY3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLE9BQU8sRUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQWMsTUFBTSxtQkFBbUIsQ0FBQztBQUN0RCxPQUFPLEVBQUUsS0FBSyxFQUFjLE1BQU0sV0FBVyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxJQUFJLEVBQWUsTUFBTSxXQUFXLENBQUM7QUFDOUMsT0FBTyxFQUFFLE1BQU0sRUFBYSxNQUFNLFdBQVcsQ0FBQztBQUM5QyxPQUFPLEVBQUUsSUFBSSxFQUFlLE1BQU0sV0FBVyxDQUFDO0FBRTlDLE9BQU8sRUFBRSxZQUFZLEVBQU8sTUFBTSx3QkFBd0IsQ0FBQztBQUUzRDtJQXlCSSxrQkFBYSxNQUEwQixFQUFVLE9BQXlCO1FBQTFFLGlCQVFDO1FBUmdELFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBRXRFLElBQUksQ0FBQyxNQUFNLEdBQUssTUFBTSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsT0FBTyxHQUFJLElBQUksQ0FBQztRQUNyQixJQUFJLENBQUMsS0FBSyxHQUFNLElBQUksS0FBSyxFQUFFLENBQUM7UUFFNUIsT0FBTyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUUsVUFBQyxNQUFZLElBQUssT0FBQSxLQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUExQixDQUEwQixDQUFFLENBQUM7SUFDbkYsQ0FBQztJQXBCRCxzQkFBSSw0QkFBTTthQUFWLGNBQWlDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUF1QixDQUFDO2FBQzVF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QUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsT0FBTyxDQUFNLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsU0FBUztvQkFBRzt3QkFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsV0FBVyxDQUFFLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsT0FBTztvQkFBSzt3QkFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQU8sQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsU0FBUyxDQUFJLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsR0FBRztvQkFBUzt3QkFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQVcsQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsS0FBSyxDQUFRLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsT0FBTztvQkFBSzt3QkFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQU8sQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsU0FBUyxDQUFJLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsT0FBTztvQkFBSzt3QkFBRSxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQU8sQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsU0FBUyxDQUFJLENBQUM7cUJBQUU7b0JBQUMsTUFBTTtnQkFDaEgsS0FBSyxLQUFLLENBQUMsUUFBUTtvQkFDbkI7d0JBQ0ksSUFBSSxXQUFXLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFNLENBQUMsQ0FBQzs0QkFBRyxXQUFXLENBQUMsSUFBSSxDQUFFLFVBQVUsQ0FBRyxDQUFDO3dCQUM5RSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBUSxDQUFDLENBQUMsQ0FBQzt3QkFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLENBQUM7cUJBQzFDO29CQUFDLE1BQU07Z0JBQ1IsS0FBSyxLQUFLLENBQUMsU0FBUztvQkFDcEI7d0JBQ0ksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO3dCQUNuQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDOzRCQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUUsV0FBVyxDQUFFLENBQUM7d0JBRTlFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBSSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQzFEOzRCQUNJLElBQXdCLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7NEJBQzVFLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBQUcsV0FBVyxDQUFDLElBQUksQ0FBRSxRQUFRLENBQUUsQ0FBQzt5QkFDM0U7cUJBQ0o7b0JBQ0QsTUFBTTtnQkFDTixLQUFLLEtBQUssQ0FBQyxLQUFLO29CQUNoQjt3QkFDSSxJQUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUMzQzs0QkFDSSxJQUFJLEtBQUssR0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUUsQ0FBQzs0QkFDakUsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUNsQjtnQ0FDSSxJQUF3QixJQUFJLEdBQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7Z0NBQ2hGLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0NBQUcsV0FBVyxDQUFDLElBQUksQ0FBRSxJQUFJLENBQUUsQ0FBQzs2QkFDbkU7eUJBQ0o7d0JBRUQsSUFB