linearly 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/vec2.js CHANGED
@@ -1,146 +1,211 @@
1
- import * as Common from './common';
2
- export const zero = Object.freeze([0, 0]);
3
- export const one = Object.freeze([1, 1]);
4
- export function add(a, b) {
5
- return [a[0] + b[0], a[1] + b[1]];
6
- }
7
- export function subtract(a, b) {
8
- return [a[0] - b[0], a[1] - b[1]];
9
- }
10
- export function multiply(a, b) {
11
- return [a[0] * b[0], a[1] * b[1]];
12
- }
13
- export function divide(a, b) {
14
- return [a[0] / b[0], a[1] / b[1]];
15
- }
16
- export function ceil(a) {
17
- return [Math.ceil(a[0]), Math.ceil(a[1])];
18
- }
19
- export function floor(a) {
20
- return [Math.floor(a[0]), Math.floor(a[1])];
21
- }
22
- export function min(a, b) {
23
- return [Math.min(a[0], b[0]), Math.min(a[1], b[1])];
24
- }
25
- export function max(a, b) {
26
- return [Math.max(a[0], b[0]), Math.max(a[1], b[1])];
27
- }
28
- /**
29
- * Constrain a value to lie between two further values
30
- */
31
- export function clamp(a, min, max) {
32
- return [
33
- Math.min(Math.max(a[0], min[0]), max[0]),
34
- Math.min(Math.max(a[1], min[1]), max[1]),
35
- ];
36
- }
37
- /**
38
- * symmetric round the components of a vec2
39
- */
40
- export function round(a) {
41
- return [Common.round(a[0]), Common.round(a[1])];
42
- }
43
- export function scale(a, s) {
44
- return [a[0] * s, a[1] * s];
45
- }
46
- /**
47
- * Adds two vec2's after scaling the second operand by a scalar value
48
- */
49
- export function scaleAndAdd(a, b, scale) {
50
- return [a[0] + b[0] * scale, a[1] + b[1] * scale];
51
- }
52
- export function distance(a, b) {
53
- const x = b[0] - a[0], y = b[1] - a[1];
54
- return Math.sqrt(x * x + y * y);
55
- }
56
- export function squaredDistance(a, b) {
57
- const x = b[0] - a[0], y = b[1] - a[1];
58
- return x * x + y * y;
59
- }
60
- export function length(v) {
61
- return Math.sqrt(v[0] ** 2 + v[1] ** 2);
62
- }
63
- export function squaredLength(v) {
64
- return v[0] ** 2 + v[1] ** 2;
65
- }
66
- export function negate(v) {
67
- return [-v[0], -v[1]];
68
- }
69
- export function inverse(v) {
70
- return [1 / v[0], 1 / v[1]];
71
- }
72
- export function normalize(v) {
73
- const hyp = v[0] ** 2 + v[1] ** 2;
74
- const len = hyp === 0 ? 0 : 1 / Math.sqrt(hyp);
75
- return [v[0] * len, v[1] * len];
76
- }
77
- export function dot(a, b) {
78
- return a[0] * b[0] + a[1] * b[1];
79
- }
80
- export function cross(a, b) {
81
- const z = a[0] * b[1] - a[1] * b[0];
82
- return [0, 0, z];
83
- }
84
- /**
85
- * Performs a linear interpolation between two Vec2's
86
- */
87
- export function lerp(a, b, t) {
88
- const [ax, ay] = a;
89
- return [ax + t * (b[0] - ax), ay + t * (b[1] - ay)];
90
- }
91
- export function transformMat2(a, m) {
92
- const [x, y] = a;
93
- return [m[0] * x + m[2] * y, m[1] * x + m[3] * y];
94
- }
95
- export function transformMat2d(a, m) {
96
- const [x, y] = a;
97
- return [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]];
98
- }
99
- /**
100
- * Transforms the vec2 with a mat3
101
- * 3rd vector component is implicitly '1'
102
- */
103
- export function transformMat3(a, m) {
104
- const [x, y] = a;
105
- return [m[0] * x + m[3] * y + m[6], m[1] * x + m[4] * y + m[7]];
106
- }
107
- /**
108
- * Rotate a 2D vector
109
- */
110
- export function rotate(a, origin, rad) {
111
- // Translate point to the origin
112
- const p0 = a[0] - origin[0], p1 = a[1] - origin[1], sinC = Math.sin(rad), cosC = Math.cos(rad);
113
- // Perform rotation and translate to correct position
114
- return [p0 * cosC - p1 * sinC + origin[0], p0 * sinC + p1 * cosC + origin[1]];
115
- }
116
- /**
117
- * Get the angle between two 2D vectors
118
- */
119
- export function angle(a, b) {
120
- const [x1, y1] = a;
121
- const [x2, y2] = b;
122
- // mag is the product of the magnitudes of a and b
123
- const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));
124
- // mag &&.. short circuits if mag == 0
125
- const cosine = mag && (x1 * x2 + y1 * y2) / mag;
126
- // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1
127
- return Math.acos(Math.min(Math.max(cosine, -1), 1));
128
- }
129
- /**
130
- * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
131
- */
132
- export function exactEquals(a, b) {
133
- return a[0] === b[0] && a[1] === b[1];
134
- }
135
- /**
136
- * Returns whether or not the vectors have approximately the same elements in the same position.
137
- */
138
- export function equals(a, b) {
139
- const [a0, a1] = a;
140
- const [b0, b1] = b;
141
- return (Math.abs(a0 - b0) <=
142
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
143
- Math.abs(a1 - b1) <=
144
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)));
145
- }
146
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZWMyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBUWxDLE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFL0MsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUU5QyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDeEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2xDLENBQUM7QUFFRCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFPO0lBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUMxQyxDQUFDO0FBRUQsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUFPO0lBQzVCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUM1QyxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztJQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNwRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFDLENB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QUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDNUIsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBTztJQUNoQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7QUFDaEMsQ0FBQztBQUVELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDbkMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakMsQ0FBQztBQUVELE1BQU0sVUFBVSxLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDckMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxJQUFJLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxDQUFTO0lBQy9DLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLE9BQU8sQ0FB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
1
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
2
+ if (k2 === undefined) k2 = k;
3
+ var desc = Object.getOwnPropertyDescriptor(m, k);
4
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5
+ desc = { enumerable: true, get: function() { return m[k]; } };
6
+ }
7
+ Object.defineProperty(o, k2, desc);
8
+ }) : (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ o[k2] = m[k];
11
+ }));
12
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
13
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
14
+ }) : function(o, v) {
15
+ o["default"] = v;
16
+ });
17
+ var __importStar = (this && this.__importStar) || function (mod) {
18
+ if (mod && mod.__esModule) return mod;
19
+ var result = {};
20
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
21
+ __setModuleDefault(result, mod);
22
+ return result;
23
+ };
24
+ (function (factory) {
25
+ if (typeof module === "object" && typeof module.exports === "object") {
26
+ var v = factory(require, exports);
27
+ if (v !== undefined) module.exports = v;
28
+ }
29
+ else if (typeof define === "function" && define.amd) {
30
+ define(["require", "exports", "./common"], factory);
31
+ }
32
+ })(function (require, exports) {
33
+ "use strict";
34
+ Object.defineProperty(exports, "__esModule", { value: true });
35
+ exports.equals = exports.exactEquals = exports.angle = exports.rotate = exports.transformMat3 = exports.transformMat2d = exports.transformMat2 = exports.lerp = exports.cross = exports.dot = exports.normalize = exports.inverse = exports.negate = exports.squaredLength = exports.length = exports.squaredDistance = exports.distance = exports.scaleAndAdd = exports.scale = exports.round = exports.clamp = exports.max = exports.min = exports.floor = exports.ceil = exports.divide = exports.multiply = exports.subtract = exports.add = exports.one = exports.zero = void 0;
36
+ const Common = __importStar(require("./common"));
37
+ exports.zero = Object.freeze([0, 0]);
38
+ exports.one = Object.freeze([1, 1]);
39
+ function add(a, b) {
40
+ return [a[0] + b[0], a[1] + b[1]];
41
+ }
42
+ exports.add = add;
43
+ function subtract(a, b) {
44
+ return [a[0] - b[0], a[1] - b[1]];
45
+ }
46
+ exports.subtract = subtract;
47
+ function multiply(a, b) {
48
+ return [a[0] * b[0], a[1] * b[1]];
49
+ }
50
+ exports.multiply = multiply;
51
+ function divide(a, b) {
52
+ return [a[0] / b[0], a[1] / b[1]];
53
+ }
54
+ exports.divide = divide;
55
+ function ceil(a) {
56
+ return [Math.ceil(a[0]), Math.ceil(a[1])];
57
+ }
58
+ exports.ceil = ceil;
59
+ function floor(a) {
60
+ return [Math.floor(a[0]), Math.floor(a[1])];
61
+ }
62
+ exports.floor = floor;
63
+ function min(a, b) {
64
+ return [Math.min(a[0], b[0]), Math.min(a[1], b[1])];
65
+ }
66
+ exports.min = min;
67
+ function max(a, b) {
68
+ return [Math.max(a[0], b[0]), Math.max(a[1], b[1])];
69
+ }
70
+ exports.max = max;
71
+ /**
72
+ * Constrain a value to lie between two further values
73
+ */
74
+ function clamp(a, min, max) {
75
+ return [
76
+ Math.min(Math.max(a[0], min[0]), max[0]),
77
+ Math.min(Math.max(a[1], min[1]), max[1]),
78
+ ];
79
+ }
80
+ exports.clamp = clamp;
81
+ /**
82
+ * symmetric round the components of a vec2
83
+ */
84
+ function round(a) {
85
+ return [Common.round(a[0]), Common.round(a[1])];
86
+ }
87
+ exports.round = round;
88
+ function scale(a, s) {
89
+ return [a[0] * s, a[1] * s];
90
+ }
91
+ exports.scale = scale;
92
+ /**
93
+ * Adds two vec2's after scaling the second operand by a scalar value
94
+ */
95
+ function scaleAndAdd(a, b, scale) {
96
+ return [a[0] + b[0] * scale, a[1] + b[1] * scale];
97
+ }
98
+ exports.scaleAndAdd = scaleAndAdd;
99
+ function distance(a, b) {
100
+ const x = b[0] - a[0], y = b[1] - a[1];
101
+ return Math.sqrt(x * x + y * y);
102
+ }
103
+ exports.distance = distance;
104
+ function squaredDistance(a, b) {
105
+ const x = b[0] - a[0], y = b[1] - a[1];
106
+ return x * x + y * y;
107
+ }
108
+ exports.squaredDistance = squaredDistance;
109
+ function length(v) {
110
+ return Math.sqrt(v[0] ** 2 + v[1] ** 2);
111
+ }
112
+ exports.length = length;
113
+ function squaredLength(v) {
114
+ return v[0] ** 2 + v[1] ** 2;
115
+ }
116
+ exports.squaredLength = squaredLength;
117
+ function negate(v) {
118
+ return [-v[0], -v[1]];
119
+ }
120
+ exports.negate = negate;
121
+ function inverse(v) {
122
+ return [1 / v[0], 1 / v[1]];
123
+ }
124
+ exports.inverse = inverse;
125
+ function normalize(v) {
126
+ const hyp = v[0] ** 2 + v[1] ** 2;
127
+ const len = hyp === 0 ? 0 : 1 / Math.sqrt(hyp);
128
+ return [v[0] * len, v[1] * len];
129
+ }
130
+ exports.normalize = normalize;
131
+ function dot(a, b) {
132
+ return a[0] * b[0] + a[1] * b[1];
133
+ }
134
+ exports.dot = dot;
135
+ function cross(a, b) {
136
+ const z = a[0] * b[1] - a[1] * b[0];
137
+ return [0, 0, z];
138
+ }
139
+ exports.cross = cross;
140
+ /**
141
+ * Performs a linear interpolation between two Vec2's
142
+ */
143
+ function lerp(a, b, t) {
144
+ const [ax, ay] = a;
145
+ return [ax + t * (b[0] - ax), ay + t * (b[1] - ay)];
146
+ }
147
+ exports.lerp = lerp;
148
+ function transformMat2(a, m) {
149
+ const [x, y] = a;
150
+ return [m[0] * x + m[2] * y, m[1] * x + m[3] * y];
151
+ }
152
+ exports.transformMat2 = transformMat2;
153
+ function transformMat2d(a, m) {
154
+ const [x, y] = a;
155
+ return [m[0] * x + m[2] * y + m[4], m[1] * x + m[3] * y + m[5]];
156
+ }
157
+ exports.transformMat2d = transformMat2d;
158
+ /**
159
+ * Transforms the vec2 with a mat3
160
+ * 3rd vector component is implicitly '1'
161
+ */
162
+ function transformMat3(a, m) {
163
+ const [x, y] = a;
164
+ return [m[0] * x + m[3] * y + m[6], m[1] * x + m[4] * y + m[7]];
165
+ }
166
+ exports.transformMat3 = transformMat3;
167
+ /**
168
+ * Rotate a 2D vector
169
+ */
170
+ function rotate(a, origin, rad) {
171
+ // Translate point to the origin
172
+ const p0 = a[0] - origin[0], p1 = a[1] - origin[1], sinC = Math.sin(rad), cosC = Math.cos(rad);
173
+ // Perform rotation and translate to correct position
174
+ return [p0 * cosC - p1 * sinC + origin[0], p0 * sinC + p1 * cosC + origin[1]];
175
+ }
176
+ exports.rotate = rotate;
177
+ /**
178
+ * Get the angle between two 2D vectors
179
+ */
180
+ function angle(a, b) {
181
+ const [x1, y1] = a;
182
+ const [x2, y2] = b;
183
+ // mag is the product of the magnitudes of a and b
184
+ const mag = Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2));
185
+ // mag &&.. short circuits if mag == 0
186
+ const cosine = mag && (x1 * x2 + y1 * y2) / mag;
187
+ // Math.min(Math.max(cosine, -1), 1) clamps the cosine between -1 and 1
188
+ return Math.acos(Math.min(Math.max(cosine, -1), 1));
189
+ }
190
+ exports.angle = angle;
191
+ /**
192
+ * Returns whether or not the vectors exactly have the same elements in the same position (when compared with ===)
193
+ */
194
+ function exactEquals(a, b) {
195
+ return a[0] === b[0] && a[1] === b[1];
196
+ }
197
+ exports.exactEquals = exactEquals;
198
+ /**
199
+ * Returns whether or not the vectors have approximately the same elements in the same position.
200
+ */
201
+ function equals(a, b) {
202
+ const [a0, a1] = a;
203
+ const [b0, b1] = b;
204
+ return (Math.abs(a0 - b0) <=
205
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
206
+ Math.abs(a1 - b1) <=
207
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)));
208
+ }
209
+ exports.equals = equals;
210
+ });
211
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjMi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy92ZWMyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsaURBQWtDO0lBUXJCLFFBQUEsSUFBSSxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVsQyxRQUFBLEdBQUcsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFOUMsU0FBZ0IsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRkQsa0JBRUM7SUFFRCxTQUFnQixRQUFRLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDeEMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2xDLENBQUM7SUFGRCw0QkFFQztJQUVELFNBQWdCLFFBQVEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUN4QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEMsQ0FBQztJQUZELDRCQUVDO0lBRUQsU0FBZ0IsTUFBTSxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ3RDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNsQyxDQUFDO0lBRkQsd0JBRUM7SUFFRCxTQUFnQixJQUFJLENBQUMsQ0FBTztRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDMUMsQ0FBQztJQUZELG9CQUVDO0lBRUQsU0FBZ0IsS0FBSyxDQUFDLENBQU87UUFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFGRCxzQkFFQztJQUVELFNBQWdCLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNuQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBRkQsa0JBRUM7SUFFRCxTQUFnQixHQUFHLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDcEQsQ0FBQztJQUZELGtCQUVDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTyxFQUFFLEdBQVMsRUFBRSxHQUFTO1FBQ2xELE9BQU87WUFDTixJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN4QyxDQUFBO0lBQ0YsQ0FBQztJQUxELHNCQUtDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEQsQ0FBQztJQUZELHNCQUVDO0lBRUQsU0FBZ0IsS0FBSyxDQUFDLENBQU8sRUFBRSxDQUFTO1FBQ3ZDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRkQsc0JBRUM7SUFFRDs7T0FFRztJQUNILFNBQWdCLFdBQVcsQ0FBQyxDQUFPLEVBQUUsQ0FBTyxFQUFFLEtBQWE7UUFDMUQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUZELGtDQUVDO0lBRUQsU0FBZ0IsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ3hDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ3BCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNoQyxDQUFDO0lBSkQsNEJBSUM7SUFFRCxTQUFnQixlQUFlLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDaEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUpELDBDQUlDO0lBRUQsU0FBZ0IsTUFBTSxDQUFDLENBQU87UUFDN0IsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFGRCx3QkFFQztJQUVELFNBQWdCLGFBQWEsQ0FBQyxDQUFPO1FBQ3BDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQzdCLENBQUM7SUFGRCxzQ0FFQztJQUVELFNBQWdCLE1BQU0sQ0FBQyxDQUFPO1FBQzdCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RCLENBQUM7SUFGRCx3QkFFQztJQUVELFNBQWdCLE9BQU8sQ0FBQyxDQUFPO1FBQzlCLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRkQsMEJBRUM7SUFFRCxTQUFnQixTQUFTLENBQUMsQ0FBTztRQUNoQyxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUE7SUFDaEMsQ0FBQztJQUpELDhCQUlDO0lBRUQsU0FBZ0IsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ25DLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLENBQUM7SUFGRCxrQkFFQztJQUVELFNBQWdCLEtBQUssQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNyQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUhELHNCQUdDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixJQUFJLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxDQUFTO1FBQy9DLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUNwRCxDQUFDO0lBSEQsb0JBR0M7SUFFRCxTQUFnQixhQUFhLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDN0MsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRCxDQUFDO0lBSEQsc0NBR0M7SUFFRCxTQUFnQixjQUFjLENBQUMsQ0FBTyxFQUFFLENBQVE7UUFDL0MsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDaEIsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hFLENBQUM7SUFIRCx3Q0FHQztJQUVEOzs7T0FHRztJQUNILFNBQWdCLGFBQWEsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUM3QyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNoQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEUsQ0FBQztJQUhELHNDQUdDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixNQUFNLENBQUMsQ0FBTyxFQUFFLE1BQVksRUFBRSxHQUFXO1FBQ3hELGdDQUFnQztRQUNoQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUMxQixFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDckIsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQ3BCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBRXJCLHFEQUFxRDtRQUNyRCxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDOUUsQ0FBQztJQVRELHdCQVNDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTyxFQUFFLENBQU87UUFDckMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDbEIsa0RBQWtEO1FBQ2xELE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUE7UUFDaEUsc0NBQXNDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUMvQyx1RUFBdUU7UUFDdkUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3BELENBQUM7SUFURCxzQkFTQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsV0FBVyxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQzNDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3RDLENBQUM7SUFGRCxrQ0FFQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLENBQU8sRUFBRSxDQUFPO1FBQ3RDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLE1BQU0sQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ2xCLE9BQU8sQ0FDTixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN6RCxDQUFBO0lBQ0YsQ0FBQztJQVRELHdCQVNDIn0=