linearly 0.0.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/mat4.js CHANGED
@@ -1,1173 +1,1252 @@
1
- import * as Common from './common';
2
- /**
3
- * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.
4
- */
5
- /**
6
- * The identity matrix of mat4
7
- */
8
- // prettier-ignore
9
- export const identity = Object.freeze([
10
- 1, 0, 0, 0,
11
- 0, 1, 0, 0,
12
- 0, 0, 1, 0,
13
- 0, 0, 0, 1,
14
- ]);
15
- /**
16
- * Transpose the values of a mat4
17
- */
18
- export function transpose(a) {
19
- // prettier-ignore
20
- return [
21
- a[0], a[4], a[8], a[12],
22
- a[1], a[5], a[9], a[13],
23
- a[2], a[6], a[10], a[14],
24
- a[3], a[7], a[11], a[15],
25
- ];
26
- }
27
- /**
28
- * Inverts a mat4
29
- */
30
- export function invert(a) {
31
- // prettier-ignore
32
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
33
- const b00 = a00 * a11 - a01 * a10;
34
- const b01 = a00 * a12 - a02 * a10;
35
- const b02 = a00 * a13 - a03 * a10;
36
- const b03 = a01 * a12 - a02 * a11;
37
- const b04 = a01 * a13 - a03 * a11;
38
- const b05 = a02 * a13 - a03 * a12;
39
- const b06 = a20 * a31 - a21 * a30;
40
- const b07 = a20 * a32 - a22 * a30;
41
- const b08 = a20 * a33 - a23 * a30;
42
- const b09 = a21 * a32 - a22 * a31;
43
- const b10 = a21 * a33 - a23 * a31;
44
- const b11 = a22 * a33 - a23 * a32;
45
- // Calculate the determinant
46
- const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
47
- if (!det) {
48
- return null;
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]; } };
49
6
  }
50
- const detinv = 1 / det;
51
- return [
52
- (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
53
- (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
54
- (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
55
- (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
56
- (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
57
- (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
58
- (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
59
- (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
60
- (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
61
- (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
62
- (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
63
- (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
64
- (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
65
- (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
66
- (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
67
- (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
68
- ];
69
- }
70
- /**
71
- * Calculates the adjugate of a mat4
72
- */
73
- export function adjoint(a) {
74
- // prettier-ignore
75
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
76
- const b00 = a00 * a11 - a01 * a10;
77
- const b01 = a00 * a12 - a02 * a10;
78
- const b02 = a00 * a13 - a03 * a10;
79
- const b03 = a01 * a12 - a02 * a11;
80
- const b04 = a01 * a13 - a03 * a11;
81
- const b05 = a02 * a13 - a03 * a12;
82
- const b06 = a20 * a31 - a21 * a30;
83
- const b07 = a20 * a32 - a22 * a30;
84
- const b08 = a20 * a33 - a23 * a30;
85
- const b09 = a21 * a32 - a22 * a31;
86
- const b10 = a21 * a33 - a23 * a31;
87
- const b11 = a22 * a33 - a23 * a32;
88
- return [
89
- a11 * b11 - a12 * b10 + a13 * b09,
90
- a02 * b10 - a01 * b11 - a03 * b09,
91
- a31 * b05 - a32 * b04 + a33 * b03,
92
- a22 * b04 - a21 * b05 - a23 * b03,
93
- a12 * b08 - a10 * b11 - a13 * b07,
94
- a00 * b11 - a02 * b08 + a03 * b07,
95
- a32 * b02 - a30 * b05 - a33 * b01,
96
- a20 * b05 - a22 * b02 + a23 * b01,
97
- a10 * b10 - a11 * b08 + a13 * b06,
98
- a01 * b08 - a00 * b10 - a03 * b06,
99
- a30 * b04 - a31 * b02 + a33 * b00,
100
- a21 * b02 - a20 * b04 - a23 * b00,
101
- a11 * b07 - a10 * b09 - a12 * b06,
102
- a00 * b09 - a01 * b07 + a02 * b06,
103
- a31 * b01 - a30 * b03 - a32 * b00,
104
- a20 * b03 - a21 * b01 + a22 * b00,
105
- ];
106
- }
107
- /**
108
- * Calculates the determinant of a mat4
109
- */
110
- export function determinant(a) {
111
- // prettier-ignore
112
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
113
- const b0 = a00 * a11 - a01 * a10;
114
- const b1 = a00 * a12 - a02 * a10;
115
- const b2 = a01 * a12 - a02 * a11;
116
- const b3 = a20 * a31 - a21 * a30;
117
- const b4 = a20 * a32 - a22 * a30;
118
- const b5 = a21 * a32 - a22 * a31;
119
- const b6 = a00 * b5 - a01 * b4 + a02 * b3;
120
- const b7 = a10 * b5 - a11 * b4 + a12 * b3;
121
- const b8 = a20 * b2 - a21 * b1 + a22 * b0;
122
- const b9 = a30 * b2 - a31 * b1 + a32 * b0;
123
- // Calculate the determinant
124
- return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
125
- }
126
- /**
127
- * Multiplies two mat4's
128
- */
129
- export function multiply(a, b) {
130
- // prettier-ignore
131
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
132
- const out = Array(16);
133
- // Cache only the current line of the second matrix
134
- let [b0, b1, b2, b3] = b;
135
- out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
136
- out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
137
- out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
138
- out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
139
- b0 = b[4];
140
- b1 = b[5];
141
- b2 = b[6];
142
- b3 = b[7];
143
- out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
144
- out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
145
- out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
146
- out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
147
- b0 = b[8];
148
- b1 = b[9];
149
- b2 = b[10];
150
- b3 = b[11];
151
- out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
152
- out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
153
- out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
154
- out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
155
- b0 = b[12];
156
- b1 = b[13];
157
- b2 = b[14];
158
- b3 = b[15];
159
- out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
160
- out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
161
- out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
162
- out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
163
- return out;
164
- }
165
- /**
166
- * Translate a mat4 by the given vector
167
- *
168
- * @param a the matrix to translate
169
- * @param v vector to translate by
170
- */
171
- export function translate(a, v) {
172
- const [x, y, z] = v;
173
- // prettier-ignore
174
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
175
- // prettier-ignore
176
- return [
177
- a00, a01, a02, a03,
178
- a10, a11, a12, a13,
179
- a20, a21, a22, a23,
180
- a00 * x + a10 * y + a20 * z + a[12],
181
- a01 * x + a11 * y + a21 * z + a[13],
182
- a02 * x + a12 * y + a22 * z + a[14],
183
- a03 * x + a13 * y + a23 * z + a[15],
184
- ];
185
- }
186
- /**
187
- * Scales the mat4 by the dimensions in the given vec3 not using vectorization
188
- **/
189
- export function scale(a, v) {
190
- const [x, y, z] = v;
191
- // prettier-ignore
192
- return [
193
- a[0] * x, a[1] * x, a[2] * x, a[3] * x,
194
- a[4] * y, a[5] * y, a[6] * y, a[7] * y,
195
- a[8] * z, a[9] * z, a[10] * z, a[11] * z,
196
- a[12], a[13], a[14], a[15],
197
- ];
198
- }
199
- /**
200
- * Rotates a mat4 by the given angle around the given axis
201
- */
202
- export function rotate(a, rad, axis) {
203
- let [x, y, z] = axis;
204
- const len = Math.sqrt(x * x + y * y + z * z);
205
- if (len < Common.EPSILON) {
206
- return null;
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;
207
28
  }
208
- x /= len;
209
- y /= len;
210
- z /= len;
211
- const s = Math.sin(rad);
212
- const c = Math.cos(rad);
213
- const t = 1 - c;
214
- // prettier-ignore
215
- const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
216
- // Construct the elements of the rotation matrix
217
- const b00 = x * x * t + c;
218
- const b01 = y * x * t + z * s;
219
- const b02 = z * x * t - y * s;
220
- const b10 = x * y * t - z * s;
221
- const b11 = y * y * t + c;
222
- const b12 = z * y * t + x * s;
223
- const b20 = x * z * t + y * s;
224
- const b21 = y * z * t - x * s;
225
- const b22 = z * z * t + c;
226
- // prettier-ignore
227
- return [
228
- a00 * b00 + a10 * b01 + a20 * b02,
229
- a01 * b00 + a11 * b01 + a21 * b02,
230
- a02 * b00 + a12 * b01 + a22 * b02,
231
- a03 * b00 + a13 * b01 + a23 * b02,
232
- a00 * b10 + a10 * b11 + a20 * b12,
233
- a01 * b10 + a11 * b11 + a21 * b12,
234
- a02 * b10 + a12 * b11 + a22 * b12,
235
- a03 * b10 + a13 * b11 + a23 * b12,
236
- a00 * b20 + a10 * b21 + a20 * b22,
237
- a01 * b20 + a11 * b21 + a21 * b22,
238
- a02 * b20 + a12 * b21 + a22 * b22,
239
- a03 * b20 + a13 * b21 + a23 * b22,
240
- a[12], a[13], a[14], a[15],
241
- ];
242
- }
243
- /**
244
- * Rotates a matrix by the given angle around the X axis
245
- */
246
- export function rotateX(a, rad) {
247
- const s = Math.sin(rad);
248
- const c = Math.cos(rad);
249
- const a10 = a[4];
250
- const a11 = a[5];
251
- const a12 = a[6];
252
- const a13 = a[7];
253
- const a20 = a[8];
254
- const a21 = a[9];
255
- const a22 = a[10];
256
- const a23 = a[11];
257
- // prettier-ignore
258
- return [
259
- a[0], a[1], a[2], a[3],
260
- a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
261
- a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
262
- a[12], a[13], a[14], a[15],
263
- ];
264
- }
265
- /**
266
- * Rotates a matrix by the given angle around the Y axis
267
- */
268
- export function rotateY(a, rad) {
269
- const s = Math.sin(rad);
270
- const c = Math.cos(rad);
271
- const a00 = a[0];
272
- const a01 = a[1];
273
- const a02 = a[2];
274
- const a03 = a[3];
275
- const a20 = a[8];
276
- const a21 = a[9];
277
- const a22 = a[10];
278
- const a23 = a[11];
279
- // prettier-ignore
280
- return [
281
- a00 * c - a20 * s,
282
- a01 * c - a21 * s,
283
- a02 * c - a22 * s,
284
- a03 * c - a23 * s,
285
- a[4], a[5], a[6], a[7],
286
- a00 * s + a20 * c,
287
- a01 * s + a21 * c,
288
- a02 * s + a22 * c,
289
- a03 * s + a23 * c,
290
- a[12], a[13], a[14], a[15],
291
- ];
292
- }
293
- /**
294
- * Rotates a matrix by the given angle around the Z axis
295
- */
296
- export function rotateZ(a, rad) {
297
- const s = Math.sin(rad);
298
- const c = Math.cos(rad);
299
- const a00 = a[0];
300
- const a01 = a[1];
301
- const a02 = a[2];
302
- const a03 = a[3];
303
- const a10 = a[4];
304
- const a11 = a[5];
305
- const a12 = a[6];
306
- const a13 = a[7];
307
- // prettier-ignore
308
- return [
309
- a00 * c + a10 * s,
310
- a01 * c + a11 * s,
311
- a02 * c + a12 * s,
312
- a03 * c + a13 * s,
313
- a10 * c - a00 * s,
314
- a11 * c - a01 * s,
315
- a12 * c - a02 * s,
316
- a13 * c - a03 * s,
317
- a[8], a[9], a[10], a[11],
318
- a[12], a[13], a[14], a[15],
319
- ];
320
- }
321
- /**
322
- * Creates a matrix from a vector translation
323
- */
324
- export function fromTranslation(v) {
325
- const [x, y, z] = v;
326
- // prettier-ignore
327
- return [
328
- 1, 0, 0, 0,
329
- 0, 1, 0, 0,
330
- 0, 0, 1, 0,
331
- x, y, z, 1,
332
- ];
333
- }
334
- /**
335
- * Creates a matrix from a vector scaling
336
- */
337
- export function fromScaling(v) {
338
- const [x, y, z] = v;
339
- // prettier-ignore
340
- return [
341
- x, 0, 0, 0,
342
- 0, y, 0, 0,
343
- 0, 0, z, 0,
344
- 0, 0, 0, 1
345
- ];
346
- }
347
- /**
348
- * Creates a matrix from a given angle around a given axis
349
- */
350
- export function fromRotation(rad, axis) {
351
- let [x, y, z] = axis;
352
- const len = Math.sqrt(x * x + y * y + z * z);
353
- if (len < Common.EPSILON) {
354
- return null;
29
+ else if (typeof define === "function" && define.amd) {
30
+ define(["require", "exports", "./common"], factory);
355
31
  }
356
- x /= len;
357
- y /= len;
358
- z /= len;
359
- const s = Math.sin(rad);
360
- const c = Math.cos(rad);
361
- const t = 1 - c;
362
- // prettier-ignore
363
- return [
364
- x * x * t + c,
365
- y * x * t + z * s,
366
- z * x * t - y * s,
367
- 0,
368
- x * y * t - z * s,
369
- y * y * t + c,
370
- z * y * t + x * s,
371
- 0,
372
- x * z * t + y * s,
373
- y * z * t - x * s,
374
- z * z * t + c,
375
- 0,
376
- 0, 0, 0, 1,
377
- ];
378
- }
379
- /**
380
- * Creates a matrix from the given angle around the X axis
381
- */
382
- export function fromXRotation(rad) {
383
- const s = Math.sin(rad);
384
- const c = Math.cos(rad);
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.targetTo = exports.lookAt = exports.orthoZO = exports.ortho = exports.orthoNO = exports.perspectiveFromFieldOfView = exports.perspectiveZO = exports.perspective = exports.perspectiveNO = exports.frustum = exports.fromQuat = exports.fromRotationTranslationScaleOrigin = exports.fromRotationTranslationScale = exports.decompose = exports.getRotation = exports.getScaling = exports.getTranslation = exports.fromRotationTranslation = exports.fromZRotation = exports.fromYRotation = exports.fromXRotation = exports.fromRotation = exports.fromScaling = exports.fromTranslation = exports.rotateZ = exports.rotateY = exports.rotateX = exports.rotate = exports.scale = exports.translate = exports.multiply = exports.determinant = exports.adjoint = exports.invert = exports.transpose = exports.zero = exports.identity = void 0;
36
+ const Common = __importStar(require("./common"));
37
+ /**
38
+ * 4x4 Matrix<br>Format: column-major, when typed out it looks like row-major<br>The matrices are being post multiplied.
39
+ */
40
+ /**
41
+ * The identity matrix of mat4
42
+ */
385
43
  // prettier-ignore
386
- return [
44
+ exports.identity = Object.freeze([
387
45
  1, 0, 0, 0,
388
- 0, c, s, 0,
389
- 0, -s, c, 0,
390
- 0, 0, 0, 1
391
- ];
392
- }
393
- /**
394
- * Creates a matrix from the given angle around the Y axis
395
- */
396
- export function fromYRotation(rad) {
397
- const s = Math.sin(rad);
398
- const c = Math.cos(rad);
399
- // prettier-ignore
400
- return [
401
- c, 0, -s, 0,
402
46
  0, 1, 0, 0,
403
- s, 0, c, 0,
404
- 0, 0, 0, 1
405
- ];
406
- }
407
- /**
408
- * Creates a matrix from the given angle around the Z axis
409
- */
410
- export function fromZRotation(rad) {
411
- const s = Math.sin(rad);
412
- const c = Math.cos(rad);
413
- // prettier-ignore
414
- return [
415
- c, s, 0, 0,
416
- -s, c, 0, 0,
417
47
  0, 0, 1, 0,
418
- 0, 0, 0, 1
419
- ];
420
- }
421
- /**
422
- * Creates a matrix from a quaternion rotation and vector translation
423
- */
424
- export function fromRotationTranslation(q, v) {
425
- // Quaternion math
426
- const [x, y, z, w] = q;
427
- const x2 = x + x;
428
- const y2 = y + y;
429
- const z2 = z + z;
430
- const xx = x * x2;
431
- const xy = x * y2;
432
- const xz = x * z2;
433
- const yy = y * y2;
434
- const yz = y * z2;
435
- const zz = z * z2;
436
- const wx = w * x2;
437
- const wy = w * y2;
438
- const wz = w * z2;
439
- return [
440
- 1 - (yy + zz),
441
- xy + wz,
442
- xz - wy,
443
- 0,
444
- xy - wz,
445
- 1 - (xx + zz),
446
- yz + wx,
447
- 0,
448
- xz + wy,
449
- yz - wx,
450
- 1 - (xx + yy),
451
- 0,
452
- v[0],
453
- v[1],
454
- v[2],
455
- 1,
456
- ];
457
- }
458
- /**
459
- * Returns the translation vector component of a transformation
460
- * matrix. If a matrix is built with fromRotationTranslation,
461
- * the returned vector will be the same as the translation vector
462
- * originally supplied.
463
- */
464
- export function getTranslation(mat) {
465
- return [mat[12], mat[13], mat[14]];
466
- }
467
- /**
468
- * Returns the scaling factor component of a transformation
469
- * matrix. If a matrix is built with fromRotationTranslationScale
470
- * with a normalized Quaternion paramter, the returned vector will be
471
- * the same as the scaling vector
472
- * originally supplied.
473
- */
474
- export function getScaling(mat) {
475
- // prettier-ignore
476
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
477
- return [
478
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
479
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
480
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
481
- ];
482
- }
483
- /**
484
- * Returns a quaternion representing the rotational component
485
- * of a transformation matrix. If a matrix is built with
486
- * fromRotationTranslation, the returned quaternion will be the
487
- * same as the quaternion originally supplied.
488
- */
489
- export function getRotation(mat) {
490
- const scaling = getScaling(mat);
491
- const is1 = 1 / scaling[0];
492
- const is2 = 1 / scaling[1];
493
- const is3 = 1 / scaling[2];
494
- const sm11 = mat[0] * is1;
495
- const sm12 = mat[1] * is2;
496
- const sm13 = mat[2] * is3;
497
- const sm21 = mat[4] * is1;
498
- const sm22 = mat[5] * is2;
499
- const sm23 = mat[6] * is3;
500
- const sm31 = mat[8] * is1;
501
- const sm32 = mat[9] * is2;
502
- const sm33 = mat[10] * is3;
503
- const trace = sm11 + sm22 + sm33;
504
- if (trace > 0) {
505
- const S = Math.sqrt(trace + 1) * 2;
506
- return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
48
+ 0, 0, 0, 1,
49
+ ]);
50
+ exports.zero = Object.freeze([
51
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
52
+ ]);
53
+ /**
54
+ * Transpose the values of a mat4
55
+ */
56
+ function transpose(a) {
57
+ // prettier-ignore
58
+ return [
59
+ a[0], a[4], a[8], a[12],
60
+ a[1], a[5], a[9], a[13],
61
+ a[2], a[6], a[10], a[14],
62
+ a[3], a[7], a[11], a[15],
63
+ ];
507
64
  }
508
- else if (sm11 > sm22 && sm11 > sm33) {
509
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
510
- return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
65
+ exports.transpose = transpose;
66
+ /**
67
+ * Inverts a mat4
68
+ */
69
+ function invert(a) {
70
+ // prettier-ignore
71
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
72
+ const b00 = a00 * a11 - a01 * a10;
73
+ const b01 = a00 * a12 - a02 * a10;
74
+ const b02 = a00 * a13 - a03 * a10;
75
+ const b03 = a01 * a12 - a02 * a11;
76
+ const b04 = a01 * a13 - a03 * a11;
77
+ const b05 = a02 * a13 - a03 * a12;
78
+ const b06 = a20 * a31 - a21 * a30;
79
+ const b07 = a20 * a32 - a22 * a30;
80
+ const b08 = a20 * a33 - a23 * a30;
81
+ const b09 = a21 * a32 - a22 * a31;
82
+ const b10 = a21 * a33 - a23 * a31;
83
+ const b11 = a22 * a33 - a23 * a32;
84
+ // Calculate the determinant
85
+ const det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06;
86
+ if (!det) {
87
+ return null;
88
+ }
89
+ const detinv = 1 / det;
90
+ return [
91
+ (a11 * b11 - a12 * b10 + a13 * b09) * detinv,
92
+ (a02 * b10 - a01 * b11 - a03 * b09) * detinv,
93
+ (a31 * b05 - a32 * b04 + a33 * b03) * detinv,
94
+ (a22 * b04 - a21 * b05 - a23 * b03) * detinv,
95
+ (a12 * b08 - a10 * b11 - a13 * b07) * detinv,
96
+ (a00 * b11 - a02 * b08 + a03 * b07) * detinv,
97
+ (a32 * b02 - a30 * b05 - a33 * b01) * detinv,
98
+ (a20 * b05 - a22 * b02 + a23 * b01) * detinv,
99
+ (a10 * b10 - a11 * b08 + a13 * b06) * detinv,
100
+ (a01 * b08 - a00 * b10 - a03 * b06) * detinv,
101
+ (a30 * b04 - a31 * b02 + a33 * b00) * detinv,
102
+ (a21 * b02 - a20 * b04 - a23 * b00) * detinv,
103
+ (a11 * b07 - a10 * b09 - a12 * b06) * detinv,
104
+ (a00 * b09 - a01 * b07 + a02 * b06) * detinv,
105
+ (a31 * b01 - a30 * b03 - a32 * b00) * detinv,
106
+ (a20 * b03 - a21 * b01 + a22 * b00) * detinv,
107
+ ];
511
108
  }
512
- else if (sm22 > sm33) {
513
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
514
- return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
109
+ exports.invert = invert;
110
+ /**
111
+ * Calculates the adjugate of a mat4
112
+ */
113
+ function adjoint(a) {
114
+ // prettier-ignore
115
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
116
+ const b00 = a00 * a11 - a01 * a10;
117
+ const b01 = a00 * a12 - a02 * a10;
118
+ const b02 = a00 * a13 - a03 * a10;
119
+ const b03 = a01 * a12 - a02 * a11;
120
+ const b04 = a01 * a13 - a03 * a11;
121
+ const b05 = a02 * a13 - a03 * a12;
122
+ const b06 = a20 * a31 - a21 * a30;
123
+ const b07 = a20 * a32 - a22 * a30;
124
+ const b08 = a20 * a33 - a23 * a30;
125
+ const b09 = a21 * a32 - a22 * a31;
126
+ const b10 = a21 * a33 - a23 * a31;
127
+ const b11 = a22 * a33 - a23 * a32;
128
+ return [
129
+ a11 * b11 - a12 * b10 + a13 * b09,
130
+ a02 * b10 - a01 * b11 - a03 * b09,
131
+ a31 * b05 - a32 * b04 + a33 * b03,
132
+ a22 * b04 - a21 * b05 - a23 * b03,
133
+ a12 * b08 - a10 * b11 - a13 * b07,
134
+ a00 * b11 - a02 * b08 + a03 * b07,
135
+ a32 * b02 - a30 * b05 - a33 * b01,
136
+ a20 * b05 - a22 * b02 + a23 * b01,
137
+ a10 * b10 - a11 * b08 + a13 * b06,
138
+ a01 * b08 - a00 * b10 - a03 * b06,
139
+ a30 * b04 - a31 * b02 + a33 * b00,
140
+ a21 * b02 - a20 * b04 - a23 * b00,
141
+ a11 * b07 - a10 * b09 - a12 * b06,
142
+ a00 * b09 - a01 * b07 + a02 * b06,
143
+ a31 * b01 - a30 * b03 - a32 * b00,
144
+ a20 * b03 - a21 * b01 + a22 * b00,
145
+ ];
515
146
  }
516
- else {
517
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
518
- return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
147
+ exports.adjoint = adjoint;
148
+ /**
149
+ * Calculates the determinant of a mat4
150
+ */
151
+ function determinant(a) {
152
+ // prettier-ignore
153
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
154
+ const b0 = a00 * a11 - a01 * a10;
155
+ const b1 = a00 * a12 - a02 * a10;
156
+ const b2 = a01 * a12 - a02 * a11;
157
+ const b3 = a20 * a31 - a21 * a30;
158
+ const b4 = a20 * a32 - a22 * a30;
159
+ const b5 = a21 * a32 - a22 * a31;
160
+ const b6 = a00 * b5 - a01 * b4 + a02 * b3;
161
+ const b7 = a10 * b5 - a11 * b4 + a12 * b3;
162
+ const b8 = a20 * b2 - a21 * b1 + a22 * b0;
163
+ const b9 = a30 * b2 - a31 * b1 + a32 * b0;
164
+ // Calculate the determinant
165
+ return a13 * b6 - a03 * b7 + a33 * b8 - a23 * b9;
519
166
  }
520
- }
521
- /**
522
- * Decomposes a transformation matrix into its rotation, translation
523
- * and scale components. Returns only the rotation component
524
- *
525
- * @param mat Matrix to be decomposed (input)
526
- */
527
- export function decompose(mat) {
528
- const trans = [mat[12], mat[13], mat[14]];
529
- // prettier-ignore
530
- const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
531
- const scale = [
532
- Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
533
- Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
534
- Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
535
- ];
536
- const is1 = 1 / scale[0];
537
- const is2 = 1 / scale[1];
538
- const is3 = 1 / scale[2];
539
- const sm11 = m11 * is1;
540
- const sm12 = m12 * is2;
541
- const sm13 = m13 * is3;
542
- const sm21 = m21 * is1;
543
- const sm22 = m22 * is2;
544
- const sm23 = m23 * is3;
545
- const sm31 = m31 * is1;
546
- const sm32 = m32 * is2;
547
- const sm33 = m33 * is3;
548
- const trace = sm11 + sm22 + sm33;
549
- let rot;
550
- if (trace > 0) {
551
- const S = Math.sqrt(trace + 1) * 2;
552
- rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
167
+ exports.determinant = determinant;
168
+ /**
169
+ * Multiplies two mat4's
170
+ */
171
+ function multiply(a, b) {
172
+ // prettier-ignore
173
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23, a30, a31, a32, a33] = a;
174
+ const out = Array(16);
175
+ // Cache only the current line of the second matrix
176
+ let [b0, b1, b2, b3] = b;
177
+ out[0] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
178
+ out[1] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
179
+ out[2] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
180
+ out[3] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
181
+ b0 = b[4];
182
+ b1 = b[5];
183
+ b2 = b[6];
184
+ b3 = b[7];
185
+ out[4] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
186
+ out[5] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
187
+ out[6] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
188
+ out[7] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
189
+ b0 = b[8];
190
+ b1 = b[9];
191
+ b2 = b[10];
192
+ b3 = b[11];
193
+ out[8] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
194
+ out[9] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
195
+ out[10] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
196
+ out[11] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
197
+ b0 = b[12];
198
+ b1 = b[13];
199
+ b2 = b[14];
200
+ b3 = b[15];
201
+ out[12] = b0 * a00 + b1 * a10 + b2 * a20 + b3 * a30;
202
+ out[13] = b0 * a01 + b1 * a11 + b2 * a21 + b3 * a31;
203
+ out[14] = b0 * a02 + b1 * a12 + b2 * a22 + b3 * a32;
204
+ out[15] = b0 * a03 + b1 * a13 + b2 * a23 + b3 * a33;
205
+ return out;
553
206
  }
554
- else if (sm11 > sm22 && sm11 > sm33) {
555
- const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
556
- rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
207
+ exports.multiply = multiply;
208
+ /**
209
+ * Translate a mat4 by the given vector
210
+ *
211
+ * @param a the matrix to translate
212
+ * @param v vector to translate by
213
+ */
214
+ function translate(a, v) {
215
+ const [x, y, z] = v;
216
+ // prettier-ignore
217
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
218
+ // prettier-ignore
219
+ return [
220
+ a00, a01, a02, a03,
221
+ a10, a11, a12, a13,
222
+ a20, a21, a22, a23,
223
+ a00 * x + a10 * y + a20 * z + a[12],
224
+ a01 * x + a11 * y + a21 * z + a[13],
225
+ a02 * x + a12 * y + a22 * z + a[14],
226
+ a03 * x + a13 * y + a23 * z + a[15],
227
+ ];
557
228
  }
558
- else if (sm22 > sm33) {
559
- const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
560
- rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
229
+ exports.translate = translate;
230
+ /**
231
+ * Scales the mat4 by the dimensions in the given vec3 not using vectorization
232
+ **/
233
+ function scale(a, v) {
234
+ const [x, y, z] = v;
235
+ // prettier-ignore
236
+ return [
237
+ a[0] * x, a[1] * x, a[2] * x, a[3] * x,
238
+ a[4] * y, a[5] * y, a[6] * y, a[7] * y,
239
+ a[8] * z, a[9] * z, a[10] * z, a[11] * z,
240
+ a[12], a[13], a[14], a[15],
241
+ ];
561
242
  }
562
- else {
563
- const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
564
- rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
243
+ exports.scale = scale;
244
+ /**
245
+ * Rotates a mat4 by the given angle around the given axis
246
+ */
247
+ function rotate(a, rad, axis) {
248
+ let [x, y, z] = axis;
249
+ const len = Math.sqrt(x * x + y * y + z * z);
250
+ if (len < Common.EPSILON) {
251
+ return null;
252
+ }
253
+ x /= len;
254
+ y /= len;
255
+ z /= len;
256
+ const s = Math.sin(rad);
257
+ const c = Math.cos(rad);
258
+ const t = 1 - c;
259
+ // prettier-ignore
260
+ const [a00, a01, a02, a03, a10, a11, a12, a13, a20, a21, a22, a23] = a;
261
+ // Construct the elements of the rotation matrix
262
+ const b00 = x * x * t + c;
263
+ const b01 = y * x * t + z * s;
264
+ const b02 = z * x * t - y * s;
265
+ const b10 = x * y * t - z * s;
266
+ const b11 = y * y * t + c;
267
+ const b12 = z * y * t + x * s;
268
+ const b20 = x * z * t + y * s;
269
+ const b21 = y * z * t - x * s;
270
+ const b22 = z * z * t + c;
271
+ // prettier-ignore
272
+ return [
273
+ a00 * b00 + a10 * b01 + a20 * b02,
274
+ a01 * b00 + a11 * b01 + a21 * b02,
275
+ a02 * b00 + a12 * b01 + a22 * b02,
276
+ a03 * b00 + a13 * b01 + a23 * b02,
277
+ a00 * b10 + a10 * b11 + a20 * b12,
278
+ a01 * b10 + a11 * b11 + a21 * b12,
279
+ a02 * b10 + a12 * b11 + a22 * b12,
280
+ a03 * b10 + a13 * b11 + a23 * b12,
281
+ a00 * b20 + a10 * b21 + a20 * b22,
282
+ a01 * b20 + a11 * b21 + a21 * b22,
283
+ a02 * b20 + a12 * b21 + a22 * b22,
284
+ a03 * b20 + a13 * b21 + a23 * b22,
285
+ a[12], a[13], a[14], a[15],
286
+ ];
565
287
  }
566
- return {
567
- trans,
568
- rot,
569
- scale,
570
- };
571
- }
572
- /**
573
- * Creates a matrix from a quaternion rotation, vector translation and vector scale
574
- * This is equivalent to (but much faster than):
575
- *
576
- * mat4.identity(dest);
577
- * mat4.translate(dest, vec);
578
- * const quatMat = mat4.create();
579
- * quat4.toMat4(quat, quatMat);
580
- * mat4.multiply(dest, quatMat);
581
- * mat4.scale(dest, scale)
582
- *
583
- * @param rot Rotation quaternion
584
- * @param trans Translation vector
585
- * @param scale Scaling vector
586
- */
587
- export function fromRotationTranslationScale(rot, trans, scale) {
588
- // Quaternion math
589
- const [x, y, z, w] = rot;
590
- const x2 = x + x;
591
- const y2 = y + y;
592
- const z2 = z + z;
593
- const xx = x * x2;
594
- const xy = x * y2;
595
- const xz = x * z2;
596
- const yy = y * y2;
597
- const yz = y * z2;
598
- const zz = z * z2;
599
- const wx = w * x2;
600
- const wy = w * y2;
601
- const wz = w * z2;
602
- const sx = scale[0];
603
- const sy = scale[1];
604
- const sz = scale[2];
605
- return [
606
- (1 - (yy + zz)) * sx,
607
- (xy + wz) * sx,
608
- (xz - wy) * sx,
609
- 0,
610
- (xy - wz) * sy,
611
- (1 - (xx + zz)) * sy,
612
- (yz + wx) * sy,
613
- 0,
614
- (xz + wy) * sz,
615
- (yz - wx) * sz,
616
- (1 - (xx + yy)) * sz,
617
- 0,
618
- trans[0],
619
- trans[1],
620
- trans[2],
621
- 1,
622
- ];
623
- }
624
- /**
625
- * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
626
- * This is equivalent to (but much faster than):
627
- *
628
- * mat4.identity(dest);
629
- * mat4.translate(dest, vec);
630
- * mat4.translate(dest, origin);
631
- * const quatMat = mat4.create();
632
- * quat4.toMat4(quat, quatMat);
633
- * mat4.multiply(dest, quatMat);
634
- * mat4.scale(dest, scale)
635
- * mat4.translate(dest, negativeOrigin);
636
- *
637
- * @param rot Rotation quaternion
638
- * @param trans Translation vector
639
- * @param scale Scaling vector
640
- * @param origin The origin vector around which to scale and rotate
641
- */
642
- export function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
643
- // Quaternion math
644
- const [x, y, z, w] = rot;
645
- const x2 = x + x;
646
- const y2 = y + y;
647
- const z2 = z + z;
648
- const xx = x * x2;
649
- const xy = x * y2;
650
- const xz = x * z2;
651
- const yy = y * y2;
652
- const yz = y * z2;
653
- const zz = z * z2;
654
- const wx = w * x2;
655
- const wy = w * y2;
656
- const wz = w * z2;
657
- const sx = scale[0];
658
- const sy = scale[1];
659
- const sz = scale[2];
660
- const ox = origin[0];
661
- const oy = origin[1];
662
- const oz = origin[2];
663
- const out0 = (1 - (yy + zz)) * sx;
664
- const out1 = (xy + wz) * sx;
665
- const out2 = (xz - wy) * sx;
666
- const out4 = (xy - wz) * sy;
667
- const out5 = (1 - (xx + zz)) * sy;
668
- const out6 = (yz + wx) * sy;
669
- const out8 = (xz + wy) * sz;
670
- const out9 = (yz - wx) * sz;
671
- const out10 = (1 - (xx + yy)) * sz;
672
- // prettier-ignore
673
- return [
674
- out0, out1, out2, 0,
675
- out4, out5, out6, 0,
676
- out8, out9, out10, 0,
677
- trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
678
- trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
679
- trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
680
- 1,
681
- ];
682
- }
683
- /**
684
- * Calculates a 4x4 matrix from the given quaternion
685
- *
686
- * @param q Quaternion to create matrix from
687
- */
688
- export function fromQuat(q) {
689
- const [x, y, z, w] = q;
690
- const x2 = x + x;
691
- const y2 = y + y;
692
- const z2 = z + z;
693
- const xx = x * x2;
694
- const yx = y * x2;
695
- const yy = y * y2;
696
- const zx = z * x2;
697
- const zy = z * y2;
698
- const zz = z * z2;
699
- const wx = w * x2;
700
- const wy = w * y2;
701
- const wz = w * z2;
702
- // prettier-ignore
703
- return [
704
- 1 - yy - zz,
705
- yx + wz,
706
- zx - wy,
707
- 0,
708
- yx - wz,
709
- 1 - xx - zz,
710
- zy + wx,
711
- 0,
712
- zx + wy,
713
- zy - wx,
714
- 1 - xx - yy,
715
- 0,
716
- 0, 0, 0, 1,
717
- ];
718
- }
719
- /**
720
- * Generates a frustum matrix with the given bounds
721
- *
722
- * @param left Left bound of the frustum
723
- * @param right Right bound of the frustum
724
- * @param bottom Bottom bound of the frustum
725
- * @param top Top bound of the frustum
726
- * @param near Near bound of the frustum
727
- * @param far Far bound of the frustum
728
- */
729
- export function frustum(left, right, bottom, top, near, far) {
730
- const rl = 1 / (right - left);
731
- const tb = 1 / (top - bottom);
732
- const nf = 1 / (near - far);
733
- // prettier-ignore
734
- return [
735
- near * 2 * rl, 0, 0, 0,
736
- 0, near * 2 * tb, 0, 0,
737
- (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
738
- 0, 0, far * near * 2 * nf, 0,
739
- ];
740
- }
741
- /**
742
- * Generates a perspective projection matrix with the given bounds.
743
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
744
- * which matches WebGL/OpenGL's clip volume.
745
- * Passing null/undefined/no value for far will generate infinite projection matrix.
746
- *
747
- * @param fovy Vertical field of view in radians
748
- * @param aspect Aspect ratio. typically viewport width/height
749
- * @param near Near bound of the frustum
750
- * @param far Far bound of the frustum, can be null or Infinity
751
- */
752
- export function perspectiveNO(fovy, aspect, near, far) {
753
- const f = 1 / Math.tan(fovy / 2);
754
- let out10, out14;
755
- if (far !== null && far !== Infinity) {
756
- const nf = 1 / (near - far);
757
- out10 = (far + near) * nf;
758
- out14 = 2 * far * near * nf;
288
+ exports.rotate = rotate;
289
+ /**
290
+ * Rotates a matrix by the given angle around the X axis
291
+ */
292
+ function rotateX(a, rad) {
293
+ const s = Math.sin(rad);
294
+ const c = Math.cos(rad);
295
+ const a10 = a[4];
296
+ const a11 = a[5];
297
+ const a12 = a[6];
298
+ const a13 = a[7];
299
+ const a20 = a[8];
300
+ const a21 = a[9];
301
+ const a22 = a[10];
302
+ const a23 = a[11];
303
+ // prettier-ignore
304
+ return [
305
+ a[0], a[1], a[2], a[3],
306
+ a10 * c + a20 * s, a11 * c + a21 * s, a12 * c + a22 * s, a13 * c + a23 * s,
307
+ a20 * c - a10 * s, a21 * c - a11 * s, a22 * c - a12 * s, a23 * c - a13 * s,
308
+ a[12], a[13], a[14], a[15],
309
+ ];
759
310
  }
760
- else {
761
- out10 = -1;
762
- out14 = -2 * near;
311
+ exports.rotateX = rotateX;
312
+ /**
313
+ * Rotates a matrix by the given angle around the Y axis
314
+ */
315
+ function rotateY(a, rad) {
316
+ const s = Math.sin(rad);
317
+ const c = Math.cos(rad);
318
+ const a00 = a[0];
319
+ const a01 = a[1];
320
+ const a02 = a[2];
321
+ const a03 = a[3];
322
+ const a20 = a[8];
323
+ const a21 = a[9];
324
+ const a22 = a[10];
325
+ const a23 = a[11];
326
+ // prettier-ignore
327
+ return [
328
+ a00 * c - a20 * s,
329
+ a01 * c - a21 * s,
330
+ a02 * c - a22 * s,
331
+ a03 * c - a23 * s,
332
+ a[4], a[5], a[6], a[7],
333
+ a00 * s + a20 * c,
334
+ a01 * s + a21 * c,
335
+ a02 * s + a22 * c,
336
+ a03 * s + a23 * c,
337
+ a[12], a[13], a[14], a[15],
338
+ ];
763
339
  }
764
- // prettier-ignore
765
- return [
766
- f / aspect, 0, 0, 0,
767
- 0, f, 0, 0,
768
- 0, 0, out10, -1,
769
- 0, 0, out14, 0,
770
- ];
771
- }
772
- /**
773
- * Alias for {@link mat4.perspectiveNO}
774
- * @function
775
- */
776
- export const perspective = perspectiveNO;
777
- /**
778
- * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
779
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
780
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
781
- * Passing null/undefined/no value for far will generate infinite projection matrix.
782
- *
783
- * @param fovy Vertical field of view in radians
784
- * @param aspect Aspect ratio. typically viewport width/height
785
- * @param near Near bound of the frustum
786
- * @param far Far bound of the frustum, can be null or Infinity
787
- */
788
- export function perspectiveZO(fovy, aspect, near, far) {
789
- const f = 1 / Math.tan(fovy / 2);
790
- let out10, out14;
791
- if (far !== null && far !== Infinity) {
792
- const nf = 1 / (near - far);
793
- out10 = far * nf;
794
- out14 = far * near * nf;
340
+ exports.rotateY = rotateY;
341
+ /**
342
+ * Rotates a matrix by the given angle around the Z axis
343
+ */
344
+ function rotateZ(a, rad) {
345
+ const s = Math.sin(rad);
346
+ const c = Math.cos(rad);
347
+ const a00 = a[0];
348
+ const a01 = a[1];
349
+ const a02 = a[2];
350
+ const a03 = a[3];
351
+ const a10 = a[4];
352
+ const a11 = a[5];
353
+ const a12 = a[6];
354
+ const a13 = a[7];
355
+ // prettier-ignore
356
+ return [
357
+ a00 * c + a10 * s,
358
+ a01 * c + a11 * s,
359
+ a02 * c + a12 * s,
360
+ a03 * c + a13 * s,
361
+ a10 * c - a00 * s,
362
+ a11 * c - a01 * s,
363
+ a12 * c - a02 * s,
364
+ a13 * c - a03 * s,
365
+ a[8], a[9], a[10], a[11],
366
+ a[12], a[13], a[14], a[15],
367
+ ];
795
368
  }
796
- else {
797
- out10 = -1;
798
- out14 = -near;
369
+ exports.rotateZ = rotateZ;
370
+ /**
371
+ * Creates a matrix from a vector translation
372
+ */
373
+ function fromTranslation(v) {
374
+ const [x, y, z] = v;
375
+ // prettier-ignore
376
+ return [
377
+ 1, 0, 0, 0,
378
+ 0, 1, 0, 0,
379
+ 0, 0, 1, 0,
380
+ x, y, z, 1,
381
+ ];
799
382
  }
800
- return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
801
- }
802
- /**
803
- * Generates a perspective projection matrix with the given field of view.
804
- * This is primarily useful for generating projection matrices to be used
805
- * with the still experiemental WebVR API.
806
- *
807
- * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
808
- * @param near Near bound of the frustum
809
- * @param far Far bound of the frustum
810
- */
811
- export function perspectiveFromFieldOfView(fov, near, far) {
812
- const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
813
- const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
814
- const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
815
- const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
816
- const xScale = 2 / (leftTan + rightTan);
817
- const yScale = 2 / (upTan + downTan);
818
- // prettier-ignore
819
- return [
820
- xScale, 0, 0, 0,
821
- 0, yScale, 0, 0,
822
- -((leftTan - rightTan) * xScale * 0.5),
823
- (upTan - downTan) * yScale * 0.5,
824
- far / (near - far),
825
- -1,
826
- 0,
827
- 0,
828
- (far * near) / (near - far),
829
- 0,
830
- ];
831
- }
832
- /**
833
- * Generates a orthogonal projection matrix with the given bounds.
834
- * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
835
- * which matches WebGL/OpenGL's clip volume.
836
- *
837
- * @param left Left bound of the frustum
838
- * @param right Right bound of the frustum
839
- * @param bottom Bottom bound of the frustum
840
- * @param top Top bound of the frustum
841
- * @param near Near bound of the frustum
842
- * @param far Far bound of the frustum
843
- */
844
- export function orthoNO(left, right, bottom, top, near, far) {
845
- const lr = 1 / (left - right);
846
- const bt = 1 / (bottom - top);
847
- const nf = 1 / (near - far);
848
- // prettier-ignore
849
- return [
850
- -2 * lr, 0, 0, 0,
851
- 0, -2 * bt, 0, 0,
852
- 0, 0, 2 * nf, 0,
853
- (left + right) * lr,
854
- (top + bottom) * bt,
855
- (far + near) * nf,
856
- 1,
857
- ];
858
- }
859
- /**
860
- * Alias for {@link mat4.orthoNO}
861
- * @function
862
- */
863
- export const ortho = orthoNO;
864
- /**
865
- * Generates a orthogonal projection matrix with the given bounds.
866
- * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
867
- * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
868
- *
869
- * @param left Left bound of the frustum
870
- * @param right Right bound of the frustum
871
- * @param bottom Bottom bound of the frustum
872
- * @param top Top bound of the frustum
873
- * @param near Near bound of the frustum
874
- * @param far Far bound of the frustum
875
- */
876
- export function orthoZO(left, right, bottom, top, near, far) {
877
- const lr = 1 / (left - right);
878
- const bt = 1 / (bottom - top);
879
- const nf = 1 / (near - far);
880
- // prettier-ignore
881
- return [
882
- -2 * lr, 0, 0, 0,
883
- 0, -2 * bt, 0, 0,
884
- 0, 0, nf, 0,
885
- (left + right) * lr,
886
- (top + bottom) * bt,
887
- near * nf,
888
- 1,
889
- ];
890
- }
891
- /**
892
- * Generates a look-at matrix with the given eye position, focal point, and up axis.
893
- * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
894
- *
895
- * @param eye Position of the viewer
896
- * @param center Point the viewer is looking at
897
- * @param up vec3 pointing up
898
- */
899
- export function lookAt(eye, center, up) {
900
- let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
901
- const eyex = eye[0];
902
- const eyey = eye[1];
903
- const eyez = eye[2];
904
- const upx = up[0];
905
- const upy = up[1];
906
- const upz = up[2];
907
- const centerx = center[0];
908
- const centery = center[1];
909
- const centerz = center[2];
910
- if (Math.abs(eyex - centerx) < Common.EPSILON &&
911
- Math.abs(eyey - centery) < Common.EPSILON &&
912
- Math.abs(eyez - centerz) < Common.EPSILON) {
913
- return identity;
383
+ exports.fromTranslation = fromTranslation;
384
+ /**
385
+ * Creates a matrix from a vector scaling
386
+ */
387
+ function fromScaling(v) {
388
+ const [x, y, z] = v;
389
+ // prettier-ignore
390
+ return [
391
+ x, 0, 0, 0,
392
+ 0, y, 0, 0,
393
+ 0, 0, z, 0,
394
+ 0, 0, 0, 1
395
+ ];
914
396
  }
915
- z0 = eyex - centerx;
916
- z1 = eyey - centery;
917
- z2 = eyez - centerz;
918
- len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
919
- z0 *= len;
920
- z1 *= len;
921
- z2 *= len;
922
- x0 = upy * z2 - upz * z1;
923
- x1 = upz * z0 - upx * z2;
924
- x2 = upx * z1 - upy * z0;
925
- len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
926
- if (!len) {
927
- x0 = 0;
928
- x1 = 0;
929
- x2 = 0;
397
+ exports.fromScaling = fromScaling;
398
+ /**
399
+ * Creates a matrix from a given angle around a given axis
400
+ */
401
+ function fromRotation(rad, axis) {
402
+ let [x, y, z] = axis;
403
+ const len = Math.sqrt(x * x + y * y + z * z);
404
+ if (len < Common.EPSILON) {
405
+ return null;
406
+ }
407
+ x /= len;
408
+ y /= len;
409
+ z /= len;
410
+ const s = Math.sin(rad);
411
+ const c = Math.cos(rad);
412
+ const t = 1 - c;
413
+ // prettier-ignore
414
+ return [
415
+ x * x * t + c,
416
+ y * x * t + z * s,
417
+ z * x * t - y * s,
418
+ 0,
419
+ x * y * t - z * s,
420
+ y * y * t + c,
421
+ z * y * t + x * s,
422
+ 0,
423
+ x * z * t + y * s,
424
+ y * z * t - x * s,
425
+ z * z * t + c,
426
+ 0,
427
+ 0, 0, 0, 1,
428
+ ];
930
429
  }
931
- else {
932
- len = 1 / len;
933
- x0 *= len;
934
- x1 *= len;
935
- x2 *= len;
430
+ exports.fromRotation = fromRotation;
431
+ /**
432
+ * Creates a matrix from the given angle around the X axis
433
+ */
434
+ function fromXRotation(rad) {
435
+ const s = Math.sin(rad);
436
+ const c = Math.cos(rad);
437
+ // prettier-ignore
438
+ return [
439
+ 1, 0, 0, 0,
440
+ 0, c, s, 0,
441
+ 0, -s, c, 0,
442
+ 0, 0, 0, 1
443
+ ];
936
444
  }
937
- y0 = z1 * x2 - z2 * x1;
938
- y1 = z2 * x0 - z0 * x2;
939
- y2 = z0 * x1 - z1 * x0;
940
- len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
941
- if (!len) {
942
- y0 = 0;
943
- y1 = 0;
944
- y2 = 0;
445
+ exports.fromXRotation = fromXRotation;
446
+ /**
447
+ * Creates a matrix from the given angle around the Y axis
448
+ */
449
+ function fromYRotation(rad) {
450
+ const s = Math.sin(rad);
451
+ const c = Math.cos(rad);
452
+ // prettier-ignore
453
+ return [
454
+ c, 0, -s, 0,
455
+ 0, 1, 0, 0,
456
+ s, 0, c, 0,
457
+ 0, 0, 0, 1
458
+ ];
945
459
  }
946
- else {
947
- len = 1 / len;
948
- y0 *= len;
949
- y1 *= len;
950
- y2 *= len;
460
+ exports.fromYRotation = fromYRotation;
461
+ /**
462
+ * Creates a matrix from the given angle around the Z axis
463
+ */
464
+ function fromZRotation(rad) {
465
+ const s = Math.sin(rad);
466
+ const c = Math.cos(rad);
467
+ // prettier-ignore
468
+ return [
469
+ c, s, 0, 0,
470
+ -s, c, 0, 0,
471
+ 0, 0, 1, 0,
472
+ 0, 0, 0, 1
473
+ ];
951
474
  }
952
- // prettier-ignore
953
- return [
954
- x0, y0, z0, 0,
955
- x1, y1, z1, 0,
956
- x2, y2, z2, 0,
957
- -(x0 * eyex + x1 * eyey + x2 * eyez),
958
- -(y0 * eyex + y1 * eyey + y2 * eyez),
959
- -(z0 * eyex + z1 * eyey + z2 * eyez),
960
- 1,
961
- ];
962
- }
963
- /**
964
- * Generates a matrix that makes something look at something else.
965
- *
966
- * @param eye Position of the viewer
967
- * @param center Point the viewer is looking at
968
- * @param up vec3 pointing up
969
- */
970
- export function targetTo(eye, target, up) {
971
- const [eyex, eyey, eyez] = eye;
972
- const [upx, upy, upz] = up;
973
- let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
974
- let len = z0 * z0 + z1 * z1 + z2 * z2;
975
- if (len > 0) {
976
- len = 1 / Math.sqrt(len);
475
+ exports.fromZRotation = fromZRotation;
476
+ /**
477
+ * Creates a matrix from a quaternion rotation and vector translation
478
+ */
479
+ function fromRotationTranslation(q, v) {
480
+ // Quaternion math
481
+ const [x, y, z, w] = q;
482
+ const x2 = x + x;
483
+ const y2 = y + y;
484
+ const z2 = z + z;
485
+ const xx = x * x2;
486
+ const xy = x * y2;
487
+ const xz = x * z2;
488
+ const yy = y * y2;
489
+ const yz = y * z2;
490
+ const zz = z * z2;
491
+ const wx = w * x2;
492
+ const wy = w * y2;
493
+ const wz = w * z2;
494
+ return [
495
+ 1 - (yy + zz),
496
+ xy + wz,
497
+ xz - wy,
498
+ 0,
499
+ xy - wz,
500
+ 1 - (xx + zz),
501
+ yz + wx,
502
+ 0,
503
+ xz + wy,
504
+ yz - wx,
505
+ 1 - (xx + yy),
506
+ 0,
507
+ v[0],
508
+ v[1],
509
+ v[2],
510
+ 1,
511
+ ];
512
+ }
513
+ exports.fromRotationTranslation = fromRotationTranslation;
514
+ /**
515
+ * Returns the translation vector component of a transformation
516
+ * matrix. If a matrix is built with fromRotationTranslation,
517
+ * the returned vector will be the same as the translation vector
518
+ * originally supplied.
519
+ */
520
+ function getTranslation(mat) {
521
+ return [mat[12], mat[13], mat[14]];
522
+ }
523
+ exports.getTranslation = getTranslation;
524
+ /**
525
+ * Returns the scaling factor component of a transformation
526
+ * matrix. If a matrix is built with fromRotationTranslationScale
527
+ * with a normalized Quaternion paramter, the returned vector will be
528
+ * the same as the scaling vector
529
+ * originally supplied.
530
+ */
531
+ function getScaling(mat) {
532
+ // prettier-ignore
533
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
534
+ return [
535
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
536
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
537
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
538
+ ];
539
+ }
540
+ exports.getScaling = getScaling;
541
+ /**
542
+ * Returns a quaternion representing the rotational component
543
+ * of a transformation matrix. If a matrix is built with
544
+ * fromRotationTranslation, the returned quaternion will be the
545
+ * same as the quaternion originally supplied.
546
+ */
547
+ function getRotation(mat) {
548
+ const scaling = getScaling(mat);
549
+ const is1 = 1 / scaling[0];
550
+ const is2 = 1 / scaling[1];
551
+ const is3 = 1 / scaling[2];
552
+ const sm11 = mat[0] * is1;
553
+ const sm12 = mat[1] * is2;
554
+ const sm13 = mat[2] * is3;
555
+ const sm21 = mat[4] * is1;
556
+ const sm22 = mat[5] * is2;
557
+ const sm23 = mat[6] * is3;
558
+ const sm31 = mat[8] * is1;
559
+ const sm32 = mat[9] * is2;
560
+ const sm33 = mat[10] * is3;
561
+ const trace = sm11 + sm22 + sm33;
562
+ if (trace > 0) {
563
+ const S = Math.sqrt(trace + 1) * 2;
564
+ return [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
565
+ }
566
+ else if (sm11 > sm22 && sm11 > sm33) {
567
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
568
+ return [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
569
+ }
570
+ else if (sm22 > sm33) {
571
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
572
+ return [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
573
+ }
574
+ else {
575
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
576
+ return [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
577
+ }
578
+ }
579
+ exports.getRotation = getRotation;
580
+ /**
581
+ * Decomposes a transformation matrix into its rotation, translation
582
+ * and scale components. Returns only the rotation component
583
+ *
584
+ * @param mat Matrix to be decomposed (input)
585
+ */
586
+ function decompose(mat) {
587
+ const trans = [mat[12], mat[13], mat[14]];
588
+ // prettier-ignore
589
+ const [m11, m12, m13, , m21, m22, m23, , m31, m32, m33,] = mat;
590
+ const scale = [
591
+ Math.sqrt(m11 * m11 + m12 * m12 + m13 * m13),
592
+ Math.sqrt(m21 * m21 + m22 * m22 + m23 * m23),
593
+ Math.sqrt(m31 * m31 + m32 * m32 + m33 * m33),
594
+ ];
595
+ const is1 = 1 / scale[0];
596
+ const is2 = 1 / scale[1];
597
+ const is3 = 1 / scale[2];
598
+ const sm11 = m11 * is1;
599
+ const sm12 = m12 * is2;
600
+ const sm13 = m13 * is3;
601
+ const sm21 = m21 * is1;
602
+ const sm22 = m22 * is2;
603
+ const sm23 = m23 * is3;
604
+ const sm31 = m31 * is1;
605
+ const sm32 = m32 * is2;
606
+ const sm33 = m33 * is3;
607
+ const trace = sm11 + sm22 + sm33;
608
+ let rot;
609
+ if (trace > 0) {
610
+ const S = Math.sqrt(trace + 1) * 2;
611
+ rot = [(sm23 - sm32) / S, (sm31 - sm13) / S, (sm12 - sm21) / S, 0.25 * S];
612
+ }
613
+ else if (sm11 > sm22 && sm11 > sm33) {
614
+ const S = Math.sqrt(1 + sm11 - sm22 - sm33) * 2;
615
+ rot = [0.25 * S, (sm12 + sm21) / S, (sm31 + sm13) / S, (sm23 - sm32) / S];
616
+ }
617
+ else if (sm22 > sm33) {
618
+ const S = Math.sqrt(1 + sm22 - sm11 - sm33) * 2;
619
+ rot = [(sm12 + sm21) / S, 0.25 * S, (sm23 + sm32) / S, (sm31 - sm13) / S];
620
+ }
621
+ else {
622
+ const S = Math.sqrt(1 + sm33 - sm11 - sm22) * 2;
623
+ rot = [(sm31 + sm13) / S, (sm23 + sm32) / S, 0.25 * S, (sm12 - sm21) / S];
624
+ }
625
+ return {
626
+ trans,
627
+ rot,
628
+ scale,
629
+ };
630
+ }
631
+ exports.decompose = decompose;
632
+ /**
633
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale
634
+ * This is equivalent to (but much faster than):
635
+ *
636
+ * mat4.identity(dest);
637
+ * mat4.translate(dest, vec);
638
+ * const quatMat = mat4.create();
639
+ * quat4.toMat4(quat, quatMat);
640
+ * mat4.multiply(dest, quatMat);
641
+ * mat4.scale(dest, scale)
642
+ *
643
+ * @param rot Rotation quaternion
644
+ * @param trans Translation vector
645
+ * @param scale Scaling vector
646
+ */
647
+ function fromRotationTranslationScale(rot, trans, scale) {
648
+ // Quaternion math
649
+ const [x, y, z, w] = rot;
650
+ const x2 = x + x;
651
+ const y2 = y + y;
652
+ const z2 = z + z;
653
+ const xx = x * x2;
654
+ const xy = x * y2;
655
+ const xz = x * z2;
656
+ const yy = y * y2;
657
+ const yz = y * z2;
658
+ const zz = z * z2;
659
+ const wx = w * x2;
660
+ const wy = w * y2;
661
+ const wz = w * z2;
662
+ const sx = scale[0];
663
+ const sy = scale[1];
664
+ const sz = scale[2];
665
+ return [
666
+ (1 - (yy + zz)) * sx,
667
+ (xy + wz) * sx,
668
+ (xz - wy) * sx,
669
+ 0,
670
+ (xy - wz) * sy,
671
+ (1 - (xx + zz)) * sy,
672
+ (yz + wx) * sy,
673
+ 0,
674
+ (xz + wy) * sz,
675
+ (yz - wx) * sz,
676
+ (1 - (xx + yy)) * sz,
677
+ 0,
678
+ trans[0],
679
+ trans[1],
680
+ trans[2],
681
+ 1,
682
+ ];
683
+ }
684
+ exports.fromRotationTranslationScale = fromRotationTranslationScale;
685
+ /**
686
+ * Creates a matrix from a quaternion rotation, vector translation and vector scale, rotating and scaling around the given origin
687
+ * This is equivalent to (but much faster than):
688
+ *
689
+ * mat4.identity(dest);
690
+ * mat4.translate(dest, vec);
691
+ * mat4.translate(dest, origin);
692
+ * const quatMat = mat4.create();
693
+ * quat4.toMat4(quat, quatMat);
694
+ * mat4.multiply(dest, quatMat);
695
+ * mat4.scale(dest, scale)
696
+ * mat4.translate(dest, negativeOrigin);
697
+ *
698
+ * @param rot Rotation quaternion
699
+ * @param trans Translation vector
700
+ * @param scale Scaling vector
701
+ * @param origin The origin vector around which to scale and rotate
702
+ */
703
+ function fromRotationTranslationScaleOrigin(rot, trans, scale, origin) {
704
+ // Quaternion math
705
+ const [x, y, z, w] = rot;
706
+ const x2 = x + x;
707
+ const y2 = y + y;
708
+ const z2 = z + z;
709
+ const xx = x * x2;
710
+ const xy = x * y2;
711
+ const xz = x * z2;
712
+ const yy = y * y2;
713
+ const yz = y * z2;
714
+ const zz = z * z2;
715
+ const wx = w * x2;
716
+ const wy = w * y2;
717
+ const wz = w * z2;
718
+ const sx = scale[0];
719
+ const sy = scale[1];
720
+ const sz = scale[2];
721
+ const ox = origin[0];
722
+ const oy = origin[1];
723
+ const oz = origin[2];
724
+ const out0 = (1 - (yy + zz)) * sx;
725
+ const out1 = (xy + wz) * sx;
726
+ const out2 = (xz - wy) * sx;
727
+ const out4 = (xy - wz) * sy;
728
+ const out5 = (1 - (xx + zz)) * sy;
729
+ const out6 = (yz + wx) * sy;
730
+ const out8 = (xz + wy) * sz;
731
+ const out9 = (yz - wx) * sz;
732
+ const out10 = (1 - (xx + yy)) * sz;
733
+ // prettier-ignore
734
+ return [
735
+ out0, out1, out2, 0,
736
+ out4, out5, out6, 0,
737
+ out8, out9, out10, 0,
738
+ trans[0] + ox - (out0 * ox + out4 * oy + out8 * oz),
739
+ trans[1] + oy - (out1 * ox + out5 * oy + out9 * oz),
740
+ trans[2] + oz - (out2 * ox + out6 * oy + out10 * oz),
741
+ 1,
742
+ ];
743
+ }
744
+ exports.fromRotationTranslationScaleOrigin = fromRotationTranslationScaleOrigin;
745
+ /**
746
+ * Calculates a 4x4 matrix from the given quaternion
747
+ *
748
+ * @param q Quaternion to create matrix from
749
+ */
750
+ function fromQuat(q) {
751
+ const [x, y, z, w] = q;
752
+ const x2 = x + x;
753
+ const y2 = y + y;
754
+ const z2 = z + z;
755
+ const xx = x * x2;
756
+ const yx = y * x2;
757
+ const yy = y * y2;
758
+ const zx = z * x2;
759
+ const zy = z * y2;
760
+ const zz = z * z2;
761
+ const wx = w * x2;
762
+ const wy = w * y2;
763
+ const wz = w * z2;
764
+ // prettier-ignore
765
+ return [
766
+ 1 - yy - zz,
767
+ yx + wz,
768
+ zx - wy,
769
+ 0,
770
+ yx - wz,
771
+ 1 - xx - zz,
772
+ zy + wx,
773
+ 0,
774
+ zx + wy,
775
+ zy - wx,
776
+ 1 - xx - yy,
777
+ 0,
778
+ 0, 0, 0, 1,
779
+ ];
780
+ }
781
+ exports.fromQuat = fromQuat;
782
+ /**
783
+ * Generates a frustum matrix with the given bounds
784
+ *
785
+ * @param left Left bound of the frustum
786
+ * @param right Right bound of the frustum
787
+ * @param bottom Bottom bound of the frustum
788
+ * @param top Top bound of the frustum
789
+ * @param near Near bound of the frustum
790
+ * @param far Far bound of the frustum
791
+ */
792
+ function frustum(left, right, bottom, top, near, far) {
793
+ const rl = 1 / (right - left);
794
+ const tb = 1 / (top - bottom);
795
+ const nf = 1 / (near - far);
796
+ // prettier-ignore
797
+ return [
798
+ near * 2 * rl, 0, 0, 0,
799
+ 0, near * 2 * tb, 0, 0,
800
+ (right + left) * rl, (top + bottom) * tb, (far + near) * nf, -1,
801
+ 0, 0, far * near * 2 * nf, 0,
802
+ ];
803
+ }
804
+ exports.frustum = frustum;
805
+ /**
806
+ * Generates a perspective projection matrix with the given bounds.
807
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
808
+ * which matches WebGL/OpenGL's clip volume.
809
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
810
+ *
811
+ * @param fovy Vertical field of view in radians
812
+ * @param aspect Aspect ratio. typically viewport width/height
813
+ * @param near Near bound of the frustum
814
+ * @param far Far bound of the frustum, can be null or Infinity
815
+ */
816
+ function perspectiveNO(fovy, aspect, near, far) {
817
+ const f = 1 / Math.tan(fovy / 2);
818
+ let out10, out14;
819
+ if (far !== null && far !== Infinity) {
820
+ const nf = 1 / (near - far);
821
+ out10 = (far + near) * nf;
822
+ out14 = 2 * far * near * nf;
823
+ }
824
+ else {
825
+ out10 = -1;
826
+ out14 = -2 * near;
827
+ }
828
+ // prettier-ignore
829
+ return [
830
+ f / aspect, 0, 0, 0,
831
+ 0, f, 0, 0,
832
+ 0, 0, out10, -1,
833
+ 0, 0, out14, 0,
834
+ ];
835
+ }
836
+ exports.perspectiveNO = perspectiveNO;
837
+ /**
838
+ * Alias for {@link mat4.perspectiveNO}
839
+ * @function
840
+ */
841
+ exports.perspective = perspectiveNO;
842
+ /**
843
+ * Generates a perspective projection matrix suitable for WebGPU with the given bounds.
844
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
845
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
846
+ * Passing null/undefined/no value for far will generate infinite projection matrix.
847
+ *
848
+ * @param fovy Vertical field of view in radians
849
+ * @param aspect Aspect ratio. typically viewport width/height
850
+ * @param near Near bound of the frustum
851
+ * @param far Far bound of the frustum, can be null or Infinity
852
+ */
853
+ function perspectiveZO(fovy, aspect, near, far) {
854
+ const f = 1 / Math.tan(fovy / 2);
855
+ let out10, out14;
856
+ if (far !== null && far !== Infinity) {
857
+ const nf = 1 / (near - far);
858
+ out10 = far * nf;
859
+ out14 = far * near * nf;
860
+ }
861
+ else {
862
+ out10 = -1;
863
+ out14 = -near;
864
+ }
865
+ return [f / aspect, 0, 0, 0, 0, f, 0, 0, 0, 0, out10, -1, 0, 0, out14, 0];
866
+ }
867
+ exports.perspectiveZO = perspectiveZO;
868
+ /**
869
+ * Generates a perspective projection matrix with the given field of view.
870
+ * This is primarily useful for generating projection matrices to be used
871
+ * with the still experiemental WebVR API.
872
+ *
873
+ * @param fov Object containing the following values: upDegrees, downDegrees, leftDegrees, rightDegrees
874
+ * @param near Near bound of the frustum
875
+ * @param far Far bound of the frustum
876
+ */
877
+ function perspectiveFromFieldOfView(fov, near, far) {
878
+ const upTan = Math.tan((fov.upDegrees * Math.PI) / 180);
879
+ const downTan = Math.tan((fov.downDegrees * Math.PI) / 180);
880
+ const leftTan = Math.tan((fov.leftDegrees * Math.PI) / 180);
881
+ const rightTan = Math.tan((fov.rightDegrees * Math.PI) / 180);
882
+ const xScale = 2 / (leftTan + rightTan);
883
+ const yScale = 2 / (upTan + downTan);
884
+ // prettier-ignore
885
+ return [
886
+ xScale, 0, 0, 0,
887
+ 0, yScale, 0, 0,
888
+ -((leftTan - rightTan) * xScale * 0.5),
889
+ (upTan - downTan) * yScale * 0.5,
890
+ far / (near - far),
891
+ -1,
892
+ 0,
893
+ 0,
894
+ (far * near) / (near - far),
895
+ 0,
896
+ ];
897
+ }
898
+ exports.perspectiveFromFieldOfView = perspectiveFromFieldOfView;
899
+ /**
900
+ * Generates a orthogonal projection matrix with the given bounds.
901
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [-1, 1],
902
+ * which matches WebGL/OpenGL's clip volume.
903
+ *
904
+ * @param left Left bound of the frustum
905
+ * @param right Right bound of the frustum
906
+ * @param bottom Bottom bound of the frustum
907
+ * @param top Top bound of the frustum
908
+ * @param near Near bound of the frustum
909
+ * @param far Far bound of the frustum
910
+ */
911
+ function orthoNO(left, right, bottom, top, near, far) {
912
+ const lr = 1 / (left - right);
913
+ const bt = 1 / (bottom - top);
914
+ const nf = 1 / (near - far);
915
+ // prettier-ignore
916
+ return [
917
+ -2 * lr, 0, 0, 0,
918
+ 0, -2 * bt, 0, 0,
919
+ 0, 0, 2 * nf, 0,
920
+ (left + right) * lr,
921
+ (top + bottom) * bt,
922
+ (far + near) * nf,
923
+ 1,
924
+ ];
925
+ }
926
+ exports.orthoNO = orthoNO;
927
+ /**
928
+ * Alias for {@link mat4.orthoNO}
929
+ * @function
930
+ */
931
+ exports.ortho = orthoNO;
932
+ /**
933
+ * Generates a orthogonal projection matrix with the given bounds.
934
+ * The near/far clip planes correspond to a normalized device coordinate Z range of [0, 1],
935
+ * which matches WebGPU/Vulkan/DirectX/Metal's clip volume.
936
+ *
937
+ * @param left Left bound of the frustum
938
+ * @param right Right bound of the frustum
939
+ * @param bottom Bottom bound of the frustum
940
+ * @param top Top bound of the frustum
941
+ * @param near Near bound of the frustum
942
+ * @param far Far bound of the frustum
943
+ */
944
+ function orthoZO(left, right, bottom, top, near, far) {
945
+ const lr = 1 / (left - right);
946
+ const bt = 1 / (bottom - top);
947
+ const nf = 1 / (near - far);
948
+ // prettier-ignore
949
+ return [
950
+ -2 * lr, 0, 0, 0,
951
+ 0, -2 * bt, 0, 0,
952
+ 0, 0, nf, 0,
953
+ (left + right) * lr,
954
+ (top + bottom) * bt,
955
+ near * nf,
956
+ 1,
957
+ ];
958
+ }
959
+ exports.orthoZO = orthoZO;
960
+ /**
961
+ * Generates a look-at matrix with the given eye position, focal point, and up axis.
962
+ * If you want a matrix that actually makes an object look at another object, you should use targetTo instead.
963
+ *
964
+ * @param eye Position of the viewer
965
+ * @param center Point the viewer is looking at
966
+ * @param up vec3 pointing up
967
+ */
968
+ function lookAt(eye, center, up) {
969
+ let x0, x1, x2, y0, y1, y2, z0, z1, z2, len;
970
+ const eyex = eye[0];
971
+ const eyey = eye[1];
972
+ const eyez = eye[2];
973
+ const upx = up[0];
974
+ const upy = up[1];
975
+ const upz = up[2];
976
+ const centerx = center[0];
977
+ const centery = center[1];
978
+ const centerz = center[2];
979
+ if (Math.abs(eyex - centerx) < Common.EPSILON &&
980
+ Math.abs(eyey - centery) < Common.EPSILON &&
981
+ Math.abs(eyez - centerz) < Common.EPSILON) {
982
+ return exports.identity;
983
+ }
984
+ z0 = eyex - centerx;
985
+ z1 = eyey - centery;
986
+ z2 = eyez - centerz;
987
+ len = 1 / Math.sqrt(z0 * z0 + z1 * z1 + z2 * z2);
977
988
  z0 *= len;
978
989
  z1 *= len;
979
990
  z2 *= len;
991
+ x0 = upy * z2 - upz * z1;
992
+ x1 = upz * z0 - upx * z2;
993
+ x2 = upx * z1 - upy * z0;
994
+ len = Math.sqrt(x0 * x0 + x1 * x1 + x2 * x2);
995
+ if (!len) {
996
+ x0 = 0;
997
+ x1 = 0;
998
+ x2 = 0;
999
+ }
1000
+ else {
1001
+ len = 1 / len;
1002
+ x0 *= len;
1003
+ x1 *= len;
1004
+ x2 *= len;
1005
+ }
1006
+ y0 = z1 * x2 - z2 * x1;
1007
+ y1 = z2 * x0 - z0 * x2;
1008
+ y2 = z0 * x1 - z1 * x0;
1009
+ len = Math.sqrt(y0 * y0 + y1 * y1 + y2 * y2);
1010
+ if (!len) {
1011
+ y0 = 0;
1012
+ y1 = 0;
1013
+ y2 = 0;
1014
+ }
1015
+ else {
1016
+ len = 1 / len;
1017
+ y0 *= len;
1018
+ y1 *= len;
1019
+ y2 *= len;
1020
+ }
1021
+ // prettier-ignore
1022
+ return [
1023
+ x0, y0, z0, 0,
1024
+ x1, y1, z1, 0,
1025
+ x2, y2, z2, 0,
1026
+ -(x0 * eyex + x1 * eyey + x2 * eyez),
1027
+ -(y0 * eyex + y1 * eyey + y2 * eyez),
1028
+ -(z0 * eyex + z1 * eyey + z2 * eyez),
1029
+ 1,
1030
+ ];
980
1031
  }
981
- let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
982
- len = x0 * x0 + x1 * x1 + x2 * x2;
983
- if (len > 0) {
984
- len = 1 / Math.sqrt(len);
985
- x0 *= len;
986
- x1 *= len;
987
- x2 *= len;
1032
+ exports.lookAt = lookAt;
1033
+ /**
1034
+ * Generates a matrix that makes something look at something else.
1035
+ *
1036
+ * @param eye Position of the viewer
1037
+ * @param center Point the viewer is looking at
1038
+ * @param up vec3 pointing up
1039
+ */
1040
+ function targetTo(eye, target, up) {
1041
+ const [eyex, eyey, eyez] = eye;
1042
+ const [upx, upy, upz] = up;
1043
+ let z0 = eyex - target[0], z1 = eyey - target[1], z2 = eyez - target[2];
1044
+ let len = z0 * z0 + z1 * z1 + z2 * z2;
1045
+ if (len > 0) {
1046
+ len = 1 / Math.sqrt(len);
1047
+ z0 *= len;
1048
+ z1 *= len;
1049
+ z2 *= len;
1050
+ }
1051
+ let x0 = upy * z2 - upz * z1, x1 = upz * z0 - upx * z2, x2 = upx * z1 - upy * z0;
1052
+ len = x0 * x0 + x1 * x1 + x2 * x2;
1053
+ if (len > 0) {
1054
+ len = 1 / Math.sqrt(len);
1055
+ x0 *= len;
1056
+ x1 *= len;
1057
+ x2 *= len;
1058
+ }
1059
+ // prettier-ignore
1060
+ return [
1061
+ x0, x1, x2, 0,
1062
+ z1 * x2 - z2 * x1,
1063
+ z2 * x0 - z0 * x2,
1064
+ z0 * x1 - z1 * x0,
1065
+ 0,
1066
+ z0, z1, z2, 0,
1067
+ eyex, eyey, eyez, 1,
1068
+ ];
988
1069
  }
989
- // prettier-ignore
990
- return [
991
- x0, x1, x2, 0,
992
- z1 * x2 - z2 * x1,
993
- z2 * x0 - z0 * x2,
994
- z0 * x1 - z1 * x0,
995
- 0,
996
- z0, z1, z2, 0,
997
- eyex, eyey, eyez, 1,
998
- ];
999
- }
1000
- /**
1001
- * Returns Frobenius norm of a mat4
1002
- */
1003
- export function frob(a) {
1004
- return Math.sqrt(a[0] * a[0] +
1005
- a[1] * a[1] +
1006
- a[2] * a[2] +
1007
- a[3] * a[3] +
1008
- a[4] * a[4] +
1009
- a[5] * a[5] +
1010
- a[6] * a[6] +
1011
- a[7] * a[7] +
1012
- a[8] * a[8] +
1013
- a[9] * a[9] +
1014
- a[10] * a[10] +
1015
- a[11] * a[11] +
1016
- a[12] * a[12] +
1017
- a[13] * a[13] +
1018
- a[14] * a[14] +
1019
- a[15] * a[15]);
1020
- }
1021
- /**
1022
- * Adds two mat4's
1023
- */
1024
- export function add(a, b) {
1025
- return [
1026
- a[0] + b[0],
1027
- a[1] + b[1],
1028
- a[2] + b[2],
1029
- a[3] + b[3],
1030
- a[4] + b[4],
1031
- a[5] + b[5],
1032
- a[6] + b[6],
1033
- a[7] + b[7],
1034
- a[8] + b[8],
1035
- a[9] + b[9],
1036
- a[10] + b[10],
1037
- a[11] + b[11],
1038
- a[12] + b[12],
1039
- a[13] + b[13],
1040
- a[14] + b[14],
1041
- a[15] + b[15],
1042
- ];
1043
- }
1044
- /**
1045
- * Subtracts matrix b from matrix a
1046
- */
1047
- export function subtract(a, b) {
1048
- return [
1049
- a[0] - b[0],
1050
- a[1] - b[1],
1051
- a[2] - b[2],
1052
- a[3] - b[3],
1053
- a[4] - b[4],
1054
- a[5] - b[5],
1055
- a[6] - b[6],
1056
- a[7] - b[7],
1057
- a[8] - b[8],
1058
- a[9] - b[9],
1059
- a[10] - b[10],
1060
- a[11] - b[11],
1061
- a[12] - b[12],
1062
- a[13] - b[13],
1063
- a[14] - b[14],
1064
- a[15] - b[15],
1065
- ];
1066
- }
1067
- /**
1068
- * Multiply each element of the matrix by a scalar.
1069
- */
1070
- export function multiplyScalar(a, s) {
1071
- return [
1072
- a[0] * s,
1073
- a[1] * s,
1074
- a[2] * s,
1075
- a[3] * s,
1076
- a[4] * s,
1077
- a[5] * s,
1078
- a[6] * s,
1079
- a[7] * s,
1080
- a[8] * s,
1081
- a[9] * s,
1082
- a[10] * s,
1083
- a[11] * s,
1084
- a[12] * s,
1085
- a[13] * s,
1086
- a[14] * s,
1087
- a[15] * s,
1088
- ];
1089
- }
1090
- /**
1091
- * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1092
- */
1093
- export function multiplyScalarAndAdd(a, b, scale) {
1094
- return [
1095
- a[0] + b[0] * scale,
1096
- a[1] + b[1] * scale,
1097
- a[2] + b[2] * scale,
1098
- a[3] + b[3] * scale,
1099
- a[4] + b[4] * scale,
1100
- a[5] + b[5] * scale,
1101
- a[6] + b[6] * scale,
1102
- a[7] + b[7] * scale,
1103
- a[8] + b[8] * scale,
1104
- a[9] + b[9] * scale,
1105
- a[10] + b[10] * scale,
1106
- a[11] + b[11] * scale,
1107
- a[12] + b[12] * scale,
1108
- a[13] + b[13] * scale,
1109
- a[14] + b[14] * scale,
1110
- a[15] + b[15] * scale,
1111
- ];
1112
- }
1113
- /**
1114
- * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1115
- */
1116
- export function exactEquals(a, b) {
1117
- return (a[0] === b[0] &&
1118
- a[1] === b[1] &&
1119
- a[2] === b[2] &&
1120
- a[3] === b[3] &&
1121
- a[4] === b[4] &&
1122
- a[5] === b[5] &&
1123
- a[6] === b[6] &&
1124
- a[7] === b[7] &&
1125
- a[8] === b[8] &&
1126
- a[9] === b[9] &&
1127
- a[10] === b[10] &&
1128
- a[11] === b[11] &&
1129
- a[12] === b[12] &&
1130
- a[13] === b[13] &&
1131
- a[14] === b[14] &&
1132
- a[15] === b[15]);
1133
- }
1134
- /**
1135
- * Returns whether or not the matrices have approximately the same elements in the same position.
1136
- */
1137
- export function equals(a, b) {
1138
- const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1139
- const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1140
- return (Math.abs(a0 - b0) <=
1141
- Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1142
- Math.abs(a1 - b1) <=
1143
- Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1144
- Math.abs(a2 - b2) <=
1145
- Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1146
- Math.abs(a3 - b3) <=
1147
- Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1148
- Math.abs(a4 - b4) <=
1149
- Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1150
- Math.abs(a5 - b5) <=
1151
- Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1152
- Math.abs(a6 - b6) <=
1153
- Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1154
- Math.abs(a7 - b7) <=
1155
- Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1156
- Math.abs(a8 - b8) <=
1157
- Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1158
- Math.abs(a9 - b9) <=
1159
- Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1160
- Math.abs(aA - bA) <=
1161
- Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1162
- Math.abs(aB - bB) <=
1163
- Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1164
- Math.abs(aC - bC) <=
1165
- Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1166
- Math.abs(aD - bD) <=
1167
- Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1168
- Math.abs(aE - bE) <=
1169
- Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1170
- Math.abs(aF - bF) <=
1171
- Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1172
- }
1173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxNQUFNLE1BQU0sVUFBVSxDQUFBO0FBWWxDOztHQUVHO0FBRUg7O0dBRUc7QUFDSCxrQkFBa0I7QUFDbEIsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFTLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDM0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7SUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0lBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztDQUNWLENBQUMsQ0FBQTtBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxDQUFPO0lBQ2hDLGtCQUFrQjtJQUNsQixPQUFPO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUN4QixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBQyxDQUFPO0lBQzdCLGtCQUFrQjtJQUNsQixNQUFNLENBQ0wsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRXhCLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBRWpDLDRCQUE0QjtJQUM1QixNQUFNLEdBQUcsR0FDUixHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUV0RSxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ1QsT0FBTyxJQUFJLENBQUE7S0FDWDtJQUVELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUE7SUFFdEIsT0FBTztRQUNOLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO1FBQzVDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxNQUFNO0tBQzVDLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU87SUFDOUIsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFFeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFFakMsT0FBTztRQUNOLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FB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bEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFFbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNULEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBRWxELEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDVixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNsRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUNuRCxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUVuRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ1YsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDbkQsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxH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Q0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDN0IsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUM3QixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQzdCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUV6QixrQkFBa0I7SUFDbEIsT0FBTztRQUNOLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztRQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7UUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1FBQ2pDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7S0FDMUIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsQ0FBTyxFQUFFLEdBQVc7SUFDM0MsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtJQUNqQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFFakIsa0JBQWtCO0lBQ2xCLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDMUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUMxRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO0tBQzFCLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUFDLENBQU8sRUFBRSxHQUFXO0lBQzNDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUN2QixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDaEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hCLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNoQixNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7SUFDakIs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QTtLQUMxRTtTQUFNLElBQUksSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQ3RDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQy9DLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDMUU7U0FBTSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7UUFDdkIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0MsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtLQUMxRTtTQUFNO1FBQ04sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDL0MsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtLQUMxRTtBQUNGLENBQUM7QUFRRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsR0FBUztJQUNsQyxNQUFNLEtBQUssR0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFFL0Msa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxBQUFELEVBQ2QsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQUFBRCxFQUNkLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFHLEdBQUcsR0FBRyxDQUFBO0lBRTdCLE1BQU0sS0FBSyxHQUFTO1FBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDNUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0tBQzVDLENBQUE7SUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3hCLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDeEIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV4QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUN0QixNQUFNLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO0lBQ3RCLE1BQU0sSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7SUFDdEIsTUFBTSxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtJQUV0QixNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQTtJQUVoQyxJQUFJLEdBQVMsQ0FBQTtJQUViLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtRQUNkLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUNsQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDekU7U0FBTSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtRQUN0QyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUMvQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUE7S0FDekU7U0FBTSxJQUFJLElB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QUFFLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNwQyxDQUFDO0tBQ0QsQ0FBQTtBQUNGLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEdBQVMsRUFBRSxNQUFZLEVBQUUsRUFBUTtJQUN6RCxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUE7SUFDOUIsTUFBTSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBRTFCLElBQUksRUFBRSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ3hCLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNyQixFQUFFLEdBQUcsSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUV0QixJQUFJLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQTtJQUVyQyxJQUFJLEdBQUcsR0FBRyxDQUFDLEVBQUU7UUFDWixHQUFHLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDeEIsRUFBRSxJQUFJLEdBQUcsQ0FBQTtRQUNULEVBQUUsSUFBSSxHQUFHLENBQUE7UUFDVCxFQUFFLElBQUksR0FBRyxDQUFBO0tBQ1Q7SUFFRCxJQUFJLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQzNCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEVBQ3hCLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUE7SUFFekIsR0FBRyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFBO0lBRWpDLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRTtRQUNaLEdBQUcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUN4QixFQUFFLElBQUksR0FBRyxDQUFBO1FBQ1QsRUFBRSxJQUFJLEdBQUcsQ0FBQTtRQUNULEVBQUUsSUFBSSxHQUFHLENBQUE7S0FDVDtJQUVELGtCQUFrQjtJQUNsQixPQUFPO1FBQ04sRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQztRQUViLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDakIsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNqQixFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFO1FBQ2pCLENBQUM7UUFFRCxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ2IsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztLQUNuQixDQUFBO0FBQ0YsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFPO0lBQzNCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FDZixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUNkLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ25DLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNiLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLENBQU8sRUFBRSxDQUFPO0lBQ3hDLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNiLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUNiLENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLENBQU8sRUFBRSxDQUFTO0lBQ2hELE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ1IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUNSLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUNULENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ1QsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7UUFDVCxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQztLQUNULENBQUE7QUFDRixDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsQ0FBTyxFQUFFLENBQU8sRUFBRSxLQUFhO0lBQ25FLE9BQU87UUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztRQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7UUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7UUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztRQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7S0FDckIsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDM0MsT0FBTyxDQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQ2YsQ0FBQTtBQUNGLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUMsQ0FBTyxFQUFFLENBQU87SUFDdEMsTUFBTSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtJQUMxRSxNQUFNLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBRTFFLE9BQU8sQ0FDTixJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7WUFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtBQUNGLENBQUMifQ==
1070
+ exports.targetTo = targetTo;
1071
+ /**
1072
+ * Returns Frobenius norm of a mat4
1073
+ */
1074
+ function frob(a) {
1075
+ return Math.sqrt(a[0] * a[0] +
1076
+ a[1] * a[1] +
1077
+ a[2] * a[2] +
1078
+ a[3] * a[3] +
1079
+ a[4] * a[4] +
1080
+ a[5] * a[5] +
1081
+ a[6] * a[6] +
1082
+ a[7] * a[7] +
1083
+ a[8] * a[8] +
1084
+ a[9] * a[9] +
1085
+ a[10] * a[10] +
1086
+ a[11] * a[11] +
1087
+ a[12] * a[12] +
1088
+ a[13] * a[13] +
1089
+ a[14] * a[14] +
1090
+ a[15] * a[15]);
1091
+ }
1092
+ exports.frob = frob;
1093
+ /**
1094
+ * Adds two mat4's
1095
+ */
1096
+ function add(a, b) {
1097
+ return [
1098
+ a[0] + b[0],
1099
+ a[1] + b[1],
1100
+ a[2] + b[2],
1101
+ a[3] + b[3],
1102
+ a[4] + b[4],
1103
+ a[5] + b[5],
1104
+ a[6] + b[6],
1105
+ a[7] + b[7],
1106
+ a[8] + b[8],
1107
+ a[9] + b[9],
1108
+ a[10] + b[10],
1109
+ a[11] + b[11],
1110
+ a[12] + b[12],
1111
+ a[13] + b[13],
1112
+ a[14] + b[14],
1113
+ a[15] + b[15],
1114
+ ];
1115
+ }
1116
+ exports.add = add;
1117
+ /**
1118
+ * Subtracts matrix b from matrix a
1119
+ */
1120
+ function subtract(a, b) {
1121
+ return [
1122
+ a[0] - b[0],
1123
+ a[1] - b[1],
1124
+ a[2] - b[2],
1125
+ a[3] - b[3],
1126
+ a[4] - b[4],
1127
+ a[5] - b[5],
1128
+ a[6] - b[6],
1129
+ a[7] - b[7],
1130
+ a[8] - b[8],
1131
+ a[9] - b[9],
1132
+ a[10] - b[10],
1133
+ a[11] - b[11],
1134
+ a[12] - b[12],
1135
+ a[13] - b[13],
1136
+ a[14] - b[14],
1137
+ a[15] - b[15],
1138
+ ];
1139
+ }
1140
+ exports.subtract = subtract;
1141
+ /**
1142
+ * Multiply each element of the matrix by a scalar.
1143
+ */
1144
+ function multiplyScalar(a, s) {
1145
+ return [
1146
+ a[0] * s,
1147
+ a[1] * s,
1148
+ a[2] * s,
1149
+ a[3] * s,
1150
+ a[4] * s,
1151
+ a[5] * s,
1152
+ a[6] * s,
1153
+ a[7] * s,
1154
+ a[8] * s,
1155
+ a[9] * s,
1156
+ a[10] * s,
1157
+ a[11] * s,
1158
+ a[12] * s,
1159
+ a[13] * s,
1160
+ a[14] * s,
1161
+ a[15] * s,
1162
+ ];
1163
+ }
1164
+ exports.multiplyScalar = multiplyScalar;
1165
+ /**
1166
+ * Adds two mat4's after multiplying each element of the second operand by a scalar value.
1167
+ */
1168
+ function multiplyScalarAndAdd(a, b, scale) {
1169
+ return [
1170
+ a[0] + b[0] * scale,
1171
+ a[1] + b[1] * scale,
1172
+ a[2] + b[2] * scale,
1173
+ a[3] + b[3] * scale,
1174
+ a[4] + b[4] * scale,
1175
+ a[5] + b[5] * scale,
1176
+ a[6] + b[6] * scale,
1177
+ a[7] + b[7] * scale,
1178
+ a[8] + b[8] * scale,
1179
+ a[9] + b[9] * scale,
1180
+ a[10] + b[10] * scale,
1181
+ a[11] + b[11] * scale,
1182
+ a[12] + b[12] * scale,
1183
+ a[13] + b[13] * scale,
1184
+ a[14] + b[14] * scale,
1185
+ a[15] + b[15] * scale,
1186
+ ];
1187
+ }
1188
+ exports.multiplyScalarAndAdd = multiplyScalarAndAdd;
1189
+ /**
1190
+ * Returns whether or not the matrices have exactly the same elements in the same position (when compared with ===)
1191
+ */
1192
+ function exactEquals(a, b) {
1193
+ return (a[0] === b[0] &&
1194
+ a[1] === b[1] &&
1195
+ a[2] === b[2] &&
1196
+ a[3] === b[3] &&
1197
+ a[4] === b[4] &&
1198
+ a[5] === b[5] &&
1199
+ a[6] === b[6] &&
1200
+ a[7] === b[7] &&
1201
+ a[8] === b[8] &&
1202
+ a[9] === b[9] &&
1203
+ a[10] === b[10] &&
1204
+ a[11] === b[11] &&
1205
+ a[12] === b[12] &&
1206
+ a[13] === b[13] &&
1207
+ a[14] === b[14] &&
1208
+ a[15] === b[15]);
1209
+ }
1210
+ exports.exactEquals = exactEquals;
1211
+ /**
1212
+ * Returns whether or not the matrices have approximately the same elements in the same position.
1213
+ */
1214
+ function equals(a, b) {
1215
+ const [a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, aA, aB, aC, aD, aE, aF] = a;
1216
+ const [b0, b1, b2, b3, b4, b5, b6, b7, b8, b9, bA, bB, bC, bD, bE, bF] = b;
1217
+ return (Math.abs(a0 - b0) <=
1218
+ Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
1219
+ Math.abs(a1 - b1) <=
1220
+ Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
1221
+ Math.abs(a2 - b2) <=
1222
+ Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
1223
+ Math.abs(a3 - b3) <=
1224
+ Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)) &&
1225
+ Math.abs(a4 - b4) <=
1226
+ Common.EPSILON * Math.max(1, Math.abs(a4), Math.abs(b4)) &&
1227
+ Math.abs(a5 - b5) <=
1228
+ Common.EPSILON * Math.max(1, Math.abs(a5), Math.abs(b5)) &&
1229
+ Math.abs(a6 - b6) <=
1230
+ Common.EPSILON * Math.max(1, Math.abs(a6), Math.abs(b6)) &&
1231
+ Math.abs(a7 - b7) <=
1232
+ Common.EPSILON * Math.max(1, Math.abs(a7), Math.abs(b7)) &&
1233
+ Math.abs(a8 - b8) <=
1234
+ Common.EPSILON * Math.max(1, Math.abs(a8), Math.abs(b8)) &&
1235
+ Math.abs(a9 - b9) <=
1236
+ Common.EPSILON * Math.max(1, Math.abs(a9), Math.abs(b9)) &&
1237
+ Math.abs(aA - bA) <=
1238
+ Common.EPSILON * Math.max(1, Math.abs(aA), Math.abs(bA)) &&
1239
+ Math.abs(aB - bB) <=
1240
+ Common.EPSILON * Math.max(1, Math.abs(aB), Math.abs(bB)) &&
1241
+ Math.abs(aC - bC) <=
1242
+ Common.EPSILON * Math.max(1, Math.abs(aC), Math.abs(bC)) &&
1243
+ Math.abs(aD - bD) <=
1244
+ Common.EPSILON * Math.max(1, Math.abs(aD), Math.abs(bD)) &&
1245
+ Math.abs(aE - bE) <=
1246
+ Common.EPSILON * Math.max(1, Math.abs(aE), Math.abs(bE)) &&
1247
+ Math.abs(aF - bF) <=
1248
+ Common.EPSILON * Math.max(1, Math.abs(aF), Math.abs(bF)));
1249
+ }
1250
+ exports.equals = equals;
1251
+ });
1252
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0NC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYXQ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lBQUEsaURBQWtDO0lBWWxDOztPQUVHO0lBRUg7O09BRUc7SUFDSCxrQkFBa0I7SUFDTCxRQUFBLFFBQVEsR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzNDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDVixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ1YsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNWLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDVixDQUFDLENBQUE7SUFFVyxRQUFBLElBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7S0FDOUMsQ0FBQyxDQUFBO0lBRUY7O09BRUc7SUFDSCxTQUFnQixTQUFTLENBQUMsQ0FBTztRQUNoQyxrQkFBa0I7UUFDbEIsT0FBTztZQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDeEIsQ0FBQTtJQUNGLENBQUM7SUFSRCw4QkFRQztJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsTUFBTSxDQUFDLENBQU87UUFDN0Isa0JBQWtCO1FBQ2xCLE1BQU0sQ0FDTCxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFeEIsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFFakMsNEJBQTRCO1FBQzVCLE1BQU0sR0FBRyxHQUNSLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBRXRFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDVCxPQUFPLElBQUksQ0FBQTtTQUNYO1FBRUQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQTtRQUV0QixPQUFPO1lBQ04sQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07WUFDNUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLE1BQU07U0FDNUMsQ0FBQTtJQUNGLENBQUM7SUFqREQsd0JBaURDO0lBRUQ7O09BRUc7SUFDSCxTQUFnQixPQUFPLENBQUMsQ0FBTztRQUM5QixrQkFBa0I7UUFDbEIsTUFBTSxDQUNMLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFDbEIsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUNsQixHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQ2xCLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUV4QixNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUE7UUFDakMsTUFBTSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUVqQyxPQUFPO1lBQ04sR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHO1lBQ2pDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztZQUNqQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUc7WUFDakMsR0FBRyxH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QUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUNsRCxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQTtRQUVsRCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ1QsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFDbEQsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLENBQUE7UUFFbEQsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDVCxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ2xELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBQ25ELEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUsR0FBRyxHQUFHLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxDQUFBO1FBRW5ELEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ1YsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUNWLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDVixHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxHQUFHLEVBQUUs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QUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7WUFDdEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFBO1NBQ3pFO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO1lBQ3ZCLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQy9DLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtTQUN6RTthQUFNO1lBQ04sTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0MsR0FBRyxHQUFHLENBQUMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFB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QUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSztZQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUs7WUFDbkIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7WUFDckIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSztZQUNyQixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUs7U0FDckIsQ0FBQTtJQUNGLENBQUM7SUFuQkQs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Q0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO2dCQUNoQixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUM7Z0JBQ2hCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FDekQsQ0FBQTtJQUNGLENBQUM7SUF0Q0Qsd0JBc0NDIn0=