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/mat2d.js CHANGED
@@ -1,239 +1,291 @@
1
- import * as Common from './common';
2
- /**
3
- * 2x3 Matrix
4
- * @module mat2d
5
- * @description
6
- * A mat2d contains six elements defined as:
7
- * <pre>
8
- * [a, b,
9
- * c, d,
10
- * tx, ty]
11
- * </pre>
12
- * This is a short form for the 3x3 matrix:
13
- * <pre>
14
- * [a, b, 0,
15
- * c, d, 0,
16
- * tx, ty, 1]
17
- * </pre>
18
- * The last column is ignored so the array is shorter and operations are faster.
19
- */
20
- /**
21
- * The identity matrix of mat2d
22
- */
23
- // prettier-ignore
24
- export const identity = Object.freeze([
25
- 1, 0,
26
- 0, 1,
27
- 0, 0
28
- ]);
29
- export const zero = Object.freeze([0, 0, 0, 0, 0, 0]);
30
- /**
31
- * Inverts a mat2d
32
- */
33
- export function invert(a) {
34
- const [aa, ab, ac, ad, atx, aty] = a;
35
- const det = aa * ad - ab * ac;
36
- if (!det) {
37
- return null;
38
- }
39
- const detinv = 1 / det;
40
- // prettier-ignore
41
- return [
42
- ad * detinv, -ab * detinv,
43
- -ac * detinv, aa * detinv,
44
- (ac * aty - ad * atx) * detinv,
45
- (ab * atx - aa * aty) * detinv,
46
- ];
47
- }
48
- /**
49
- * Calculates the determinant of a mat2d
50
- */
51
- export function determinant(a) {
52
- return a[0] * a[3] - a[1] * a[2];
53
- }
54
- /**
55
- * Multiplies two mat2d's
56
- */
57
- export function multiply(a, b) {
58
- const [a0, a1, a2, a3, a4, a5] = a;
59
- const [b0, b1, b2, b3, b4, b5] = b;
60
- // prettier-ignore
61
- return [
62
- a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
63
- a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
64
- a0 * b4 + a2 * b5 + a4,
65
- a1 * b4 + a3 * b5 + a5,
66
- ];
67
- }
68
- /**
69
- * Rotates a mat2d by the given angle
70
- */
71
- export function rotate(a, rad) {
72
- const [a0, a1, a2, a3, tx, ty] = a;
73
- const s = Math.sin(rad);
74
- const c = Math.cos(rad);
75
- // prettier-ignore
76
- return [
77
- a0 * c + a2 * s, a1 * c + a3 * s,
78
- a0 * -s + a2 * c, a1 * -s + a3 * c,
79
- tx, ty
80
- ];
81
- }
82
- /**
83
- * Scales the mat2d by the dimensions in the given vec2
84
- **/
85
- export function scale(a, v) {
86
- const [a0, a1, a2, a3, tx, ty] = a;
87
- const [sx, sy] = v;
88
- // prettier-ignore
89
- return [
90
- a0 * sx, a1 * sx,
91
- a2 * sy, a3 * sy,
92
- tx, ty
93
- ];
94
- }
95
- /**
96
- * Translates the mat2d by the dimensions in the given vec2
97
- **/
98
- export function translate(m, v) {
99
- const [a, b, c, d, tx, ty] = m;
100
- const [x, y] = v;
101
- // prettier-ignore
102
- return [
103
- a, b,
104
- c, d,
105
- a * x + c * y + tx,
106
- b * x + d * y + ty
107
- ];
108
- }
109
- /**
110
- * Creates a matrix from a given angle
111
- * This is equivalent to (but much faster than):
112
- */
113
- export function fromRotation(rad) {
114
- const s = Math.sin(rad);
115
- const c = Math.cos(rad);
116
- // prettier-ignore
117
- return [
118
- c, s,
119
- -s, c,
120
- 0, 0,
121
- ];
122
- }
123
- /**
124
- * Creates a matrix from a vector scaling
125
- */
126
- export function fromScaling(v) {
127
- const [x, y] = v;
128
- // prettier-ignore
129
- return [
130
- x, 0,
131
- 0, y,
132
- 0, 0,
133
- ];
134
- }
135
- /**
136
- * Creates a matrix from a vector translation
137
- */
138
- export function fromTranslation(v) {
139
- const [x, y] = v;
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.multiplyScalarAndAdd = exports.multiplyScalar = exports.subtract = exports.add = exports.frob = exports.fromTranslation = exports.fromScaling = exports.fromRotation = exports.translate = exports.scale = exports.rotate = exports.multiply = exports.determinant = exports.invert = exports.zero = exports.identity = void 0;
36
+ const Common = __importStar(require("./common"));
37
+ /**
38
+ * 2x3 Matrix
39
+ * @module mat2d
40
+ * @description
41
+ * A mat2d contains six elements defined as:
42
+ * <pre>
43
+ * [a, b,
44
+ * c, d,
45
+ * tx, ty]
46
+ * </pre>
47
+ * This is a short form for the 3x3 matrix:
48
+ * <pre>
49
+ * [a, b, 0,
50
+ * c, d, 0,
51
+ * tx, ty, 1]
52
+ * </pre>
53
+ * The last column is ignored so the array is shorter and operations are faster.
54
+ */
55
+ /**
56
+ * The identity matrix of mat2d
57
+ */
140
58
  // prettier-ignore
141
- return [
59
+ exports.identity = Object.freeze([
142
60
  1, 0,
143
61
  0, 1,
144
- x, y,
145
- ];
146
- }
147
- /**
148
- * Returns Frobenius norm of a mat2d
149
- */
150
- export function frob(a) {
151
- // prettier-ignore
152
- return Math.sqrt(a[0] ** 2 +
153
- a[1] ** 2 +
154
- a[2] ** 2 +
155
- a[3] ** 2 +
156
- a[4] ** 2 +
157
- a[5] ** 2 + 1);
158
- }
159
- /**
160
- * Adds two mat2d's
161
- */
162
- export function add(a, b) {
163
- return [
164
- a[0] + b[0],
165
- a[1] + b[1],
166
- a[2] + b[2],
167
- a[3] + b[3],
168
- a[4] + b[4],
169
- a[5] + b[5],
170
- ];
171
- }
172
- /**
173
- * Subtracts matrix b from matrix a
174
- */
175
- export function subtract(a, b) {
176
- return [
177
- a[0] - b[0],
178
- a[1] - b[1],
179
- a[2] - b[2],
180
- a[3] - b[3],
181
- a[4] - b[4],
182
- a[5] - b[5],
183
- ];
184
- }
185
- /**
186
- * Multiply each element of the matrix by a scalar.
187
- */
188
- export function multiplyScalar(a, s) {
189
- // prettier-ignore
190
- return [
191
- a[0] * s, a[1] * s,
192
- a[2] * s, a[3] * s,
193
- a[4] * s, a[5] * s,
194
- ];
195
- }
196
- /**
197
- * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
198
- */
199
- export function multiplyScalarAndAdd(a, b, scale) {
200
- return [
201
- a[0] + b[0] * scale,
202
- a[1] + b[1] * scale,
203
- a[2] + b[2] * scale,
204
- a[3] + b[3] * scale,
205
- a[4] + b[4] * scale,
206
- a[5] + b[5] * scale,
207
- ];
208
- }
209
- /**
210
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
211
- */
212
- export function exactEquals(a, b) {
213
- return (a[0] === b[0] &&
214
- a[1] === b[1] &&
215
- a[2] === b[2] &&
216
- a[3] === b[3] &&
217
- a[4] === b[4] &&
218
- a[5] === b[5]);
219
- }
220
- /**
221
- * Returns whether or not the matrices have approximately the same elements in the same position.
222
- */
223
- export function equals(a, b) {
224
- const [a0, a1, a2, a3, a4, a5] = a;
225
- const [b0, b1, b2, b3, b4, b5] = b;
226
- return (Math.abs(a0 - b0) <=
227
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
228
- Math.abs(a1 - b1) <=
229
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
230
- Math.abs(a2 - b2) <=
231
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
232
- Math.abs(a3 - b3) <=
233
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
234
- Math.abs(a4 - b4) <=
235
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
236
- Math.abs(a5 - b5) <=
237
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
238
- }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE1BQU0sTUFBTSxVQUFVLENBQUE7QUFLbEM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBRUg7O0dBRUc7QUFDSCxrQkFBa0I7QUFDbEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQyxFQUFFLENBQUM7SUFDSixDQUFDLEVBQUUsQ0FBQztJQUNKLENBQUMsRUFBRSxDQUFDO0NBQ0osQ0FBQyxDQUFBO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFFNUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsTUFBTSxDQUFDLENBQVE7SUFDOUIsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXBDLE1BQU0sR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUU3QixJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUE7S0FDWDtJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFdEIsa0JBQWtCO0lBQ2xCLE9BQU87UUFDSixFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxHQUFHLE1BQU07UUFDMUIsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFHLEVBQUUsR0FBRyxNQUFNO1FBRTFCLENBQUMsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTTtR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
62
+ 0, 0
63
+ ]);
64
+ exports.zero = Object.freeze([0, 0, 0, 0, 0, 0]);
65
+ /**
66
+ * Inverts a mat2d
67
+ */
68
+ function invert(a) {
69
+ const [aa, ab, ac, ad, atx, aty] = a;
70
+ const det = aa * ad - ab * ac;
71
+ if (!det) {
72
+ return null;
73
+ }
74
+ const detinv = 1 / det;
75
+ // prettier-ignore
76
+ return [
77
+ ad * detinv, -ab * detinv,
78
+ -ac * detinv, aa * detinv,
79
+ (ac * aty - ad * atx) * detinv,
80
+ (ab * atx - aa * aty) * detinv,
81
+ ];
82
+ }
83
+ exports.invert = invert;
84
+ /**
85
+ * Calculates the determinant of a mat2d
86
+ */
87
+ function determinant(a) {
88
+ return a[0] * a[3] - a[1] * a[2];
89
+ }
90
+ exports.determinant = determinant;
91
+ /**
92
+ * Multiplies two mat2d's
93
+ */
94
+ function multiply(a, b) {
95
+ const [a0, a1, a2, a3, a4, a5] = a;
96
+ const [b0, b1, b2, b3, b4, b5] = b;
97
+ // prettier-ignore
98
+ return [
99
+ a0 * b0 + a2 * b1, a1 * b0 + a3 * b1,
100
+ a0 * b2 + a2 * b3, a1 * b2 + a3 * b3,
101
+ a0 * b4 + a2 * b5 + a4,
102
+ a1 * b4 + a3 * b5 + a5,
103
+ ];
104
+ }
105
+ exports.multiply = multiply;
106
+ /**
107
+ * Rotates a mat2d by the given angle
108
+ */
109
+ function rotate(a, rad) {
110
+ const [a0, a1, a2, a3, tx, ty] = a;
111
+ const s = Math.sin(rad);
112
+ const c = Math.cos(rad);
113
+ // prettier-ignore
114
+ return [
115
+ a0 * c + a2 * s, a1 * c + a3 * s,
116
+ a0 * -s + a2 * c, a1 * -s + a3 * c,
117
+ tx, ty
118
+ ];
119
+ }
120
+ exports.rotate = rotate;
121
+ /**
122
+ * Scales the mat2d by the dimensions in the given vec2
123
+ **/
124
+ function scale(a, v) {
125
+ const [a0, a1, a2, a3, tx, ty] = a;
126
+ const [sx, sy] = v;
127
+ // prettier-ignore
128
+ return [
129
+ a0 * sx, a1 * sx,
130
+ a2 * sy, a3 * sy,
131
+ tx, ty
132
+ ];
133
+ }
134
+ exports.scale = scale;
135
+ /**
136
+ * Translates the mat2d by the dimensions in the given vec2
137
+ **/
138
+ function translate(m, v) {
139
+ const [a, b, c, d, tx, ty] = m;
140
+ const [x, y] = v;
141
+ // prettier-ignore
142
+ return [
143
+ a, b,
144
+ c, d,
145
+ a * x + c * y + tx,
146
+ b * x + d * y + ty
147
+ ];
148
+ }
149
+ exports.translate = translate;
150
+ /**
151
+ * Creates a matrix from a given angle
152
+ * This is equivalent to (but much faster than):
153
+ */
154
+ function fromRotation(rad) {
155
+ const s = Math.sin(rad);
156
+ const c = Math.cos(rad);
157
+ // prettier-ignore
158
+ return [
159
+ c, s,
160
+ -s, c,
161
+ 0, 0,
162
+ ];
163
+ }
164
+ exports.fromRotation = fromRotation;
165
+ /**
166
+ * Creates a matrix from a vector scaling
167
+ */
168
+ function fromScaling(v) {
169
+ const [x, y] = v;
170
+ // prettier-ignore
171
+ return [
172
+ x, 0,
173
+ 0, y,
174
+ 0, 0,
175
+ ];
176
+ }
177
+ exports.fromScaling = fromScaling;
178
+ /**
179
+ * Creates a matrix from a vector translation
180
+ */
181
+ function fromTranslation(v) {
182
+ const [x, y] = v;
183
+ // prettier-ignore
184
+ return [
185
+ 1, 0,
186
+ 0, 1,
187
+ x, y,
188
+ ];
189
+ }
190
+ exports.fromTranslation = fromTranslation;
191
+ /**
192
+ * Returns Frobenius norm of a mat2d
193
+ */
194
+ function frob(a) {
195
+ // prettier-ignore
196
+ return Math.sqrt(a[0] ** 2 +
197
+ a[1] ** 2 +
198
+ a[2] ** 2 +
199
+ a[3] ** 2 +
200
+ a[4] ** 2 +
201
+ a[5] ** 2 + 1);
202
+ }
203
+ exports.frob = frob;
204
+ /**
205
+ * Adds two mat2d's
206
+ */
207
+ function add(a, b) {
208
+ return [
209
+ a[0] + b[0],
210
+ a[1] + b[1],
211
+ a[2] + b[2],
212
+ a[3] + b[3],
213
+ a[4] + b[4],
214
+ a[5] + b[5],
215
+ ];
216
+ }
217
+ exports.add = add;
218
+ /**
219
+ * Subtracts matrix b from matrix a
220
+ */
221
+ function subtract(a, b) {
222
+ return [
223
+ a[0] - b[0],
224
+ a[1] - b[1],
225
+ a[2] - b[2],
226
+ a[3] - b[3],
227
+ a[4] - b[4],
228
+ a[5] - b[5],
229
+ ];
230
+ }
231
+ exports.subtract = subtract;
232
+ /**
233
+ * Multiply each element of the matrix by a scalar.
234
+ */
235
+ function multiplyScalar(a, s) {
236
+ // prettier-ignore
237
+ return [
238
+ a[0] * s, a[1] * s,
239
+ a[2] * s, a[3] * s,
240
+ a[4] * s, a[5] * s,
241
+ ];
242
+ }
243
+ exports.multiplyScalar = multiplyScalar;
244
+ /**
245
+ * Adds two mat2d's after multiplying each element of the second operand by a scalar value.
246
+ */
247
+ function multiplyScalarAndAdd(a, b, scale) {
248
+ return [
249
+ a[0] + b[0] * scale,
250
+ a[1] + b[1] * scale,
251
+ a[2] + b[2] * scale,
252
+ a[3] + b[3] * scale,
253
+ a[4] + b[4] * scale,
254
+ a[5] + b[5] * scale,
255
+ ];
256
+ }
257
+ exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
258
+ /**
259
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
260
+ */
261
+ function exactEquals(a, b) {
262
+ return (a[0] === b[0] &&
263
+ a[1] === b[1] &&
264
+ a[2] === b[2] &&
265
+ a[3] === b[3] &&
266
+ a[4] === b[4] &&
267
+ a[5] === b[5]);
268
+ }
269
+ exports.exactEquals = exactEquals;
270
+ /**
271
+ * Returns whether or not the matrices have approximately the same elements in the same position.
272
+ */
273
+ function equals(a, b) {
274
+ const [a0, a1, a2, a3, a4, a5] = a;
275
+ const [b0, b1, b2, b3, b4, b5] = b;
276
+ return (Math.abs(a0 - b0) <=
277
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
278
+ Math.abs(a1 - b1) <=
279
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
280
+ Math.abs(a2 - b2) <=
281
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
282
+ Math.abs(a3 - b3) <=
283
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
284
+ Math.abs(a4 - b4) <=
285
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
286
+ Math.abs(a5 - b5) <=
287
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)));
288
+ }
289
+ exports.equals = equals;
290
+ });
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0MmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbWF0MmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBQSxpREFBa0M7SUFLbEM7Ozs7Ozs7Ozs7Ozs7Ozs7O09BaUJHO0lBRUg7O09BRUc7SUFDSCxrQkFBa0I7SUFDTCxRQUFBLFFBQVEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3JDLENBQUMsRUFBRSxDQUFDO1FBQ0osQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsQ0FBQztLQUNKLENBQUMsQ0FBQTtJQUVXLFFBQUEsSUFBSSxHQUFVLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFNUQ7O09BRUc7SUFDSCxTQUFnQixNQUFNLENBQUMsQ0FBUTtRQUM5QixNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFcEMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO1FBRTdCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQTtTQUNYO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUV0QixrQkFBa0I7UUFDbEIsT0FBTztZQUNKLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsTUFBTTtZQUMxQixDQUFDLEVBQUUsR0FBRyxNQUFNLEVBQUcsRUFBRSxHQUFHLE1BQU07WUFFMUIsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1lBQy9CLENBQUMsRUFB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