linearly 0.36.0 → 0.37.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/esm/mat2.d.ts +1 -1
- package/lib/esm/mat2.d.ts.map +1 -1
- package/lib/esm/mat2.js +3 -2
- package/lib/esm/mat2d.d.ts.map +1 -1
- package/lib/esm/mat2d.js +4 -5
- package/lib/esm/mat3.d.ts.map +1 -1
- package/lib/esm/mat3.js +16 -15
- package/lib/esm/mat4.d.ts.map +1 -1
- package/lib/esm/mat4.js +18 -17
- package/lib/esm/quat.js +3 -3
- package/lib/esm/scalar.d.ts +6 -35
- package/lib/esm/scalar.d.ts.map +1 -1
- package/lib/esm/scalar.js +11 -53
- package/package.json +9 -4
- package/lib/cjs/common.d.ts +0 -16
- package/lib/cjs/common.d.ts.map +0 -1
- package/lib/cjs/common.js +0 -70
- package/lib/cjs/index.d.ts +0 -10
- package/lib/cjs/index.d.ts.map +0 -1
- package/lib/cjs/index.js +0 -22
- package/lib/cjs/mat2.d.ts +0 -272
- package/lib/cjs/mat2.d.ts.map +0 -1
- package/lib/cjs/mat2.js +0 -473
- package/lib/cjs/mat2d.d.ts +0 -329
- package/lib/cjs/mat2d.d.ts.map +0 -1
- package/lib/cjs/mat2d.js +0 -641
- package/lib/cjs/mat3.d.ts +0 -295
- package/lib/cjs/mat3.d.ts.map +0 -1
- package/lib/cjs/mat3.js +0 -670
- package/lib/cjs/mat4.d.ts +0 -532
- package/lib/cjs/mat4.d.ts.map +0 -1
- package/lib/cjs/mat4.js +0 -1576
- package/lib/cjs/quat.d.ts +0 -334
- package/lib/cjs/quat.d.ts.map +0 -1
- package/lib/cjs/quat.js +0 -802
- package/lib/cjs/scalar.d.ts +0 -501
- package/lib/cjs/scalar.d.ts.map +0 -1
- package/lib/cjs/scalar.js +0 -728
- package/lib/cjs/vec2.d.ts +0 -664
- package/lib/cjs/vec2.d.ts.map +0 -1
- package/lib/cjs/vec2.js +0 -1247
- package/lib/cjs/vec3.d.ts +0 -660
- package/lib/cjs/vec3.d.ts.map +0 -1
- package/lib/cjs/vec3.js +0 -1329
- package/lib/cjs/vec4.d.ts +0 -552
- package/lib/cjs/vec4.d.ts.map +0 -1
- package/lib/cjs/vec4.js +0 -1200
package/lib/cjs/vec4.js
DELETED
|
@@ -1,1200 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.vec4 = void 0;
|
|
37
|
-
const Common = __importStar(require("./common"));
|
|
38
|
-
const scalar_1 = require("./scalar");
|
|
39
|
-
/**
|
|
40
|
-
* Functions for {@link vec4}, a 4D vector.
|
|
41
|
-
* @category Modules
|
|
42
|
-
*/
|
|
43
|
-
var vec4;
|
|
44
|
-
(function (vec4) {
|
|
45
|
-
/**
|
|
46
|
-
* Creates a new vector from given elements
|
|
47
|
-
* @category Generators
|
|
48
|
-
*/
|
|
49
|
-
function of(x, y, z, w) {
|
|
50
|
-
if (y === undefined && z === undefined && w === undefined) {
|
|
51
|
-
y = z = w = x;
|
|
52
|
-
}
|
|
53
|
-
if (y === undefined)
|
|
54
|
-
y = 0;
|
|
55
|
-
if (z === undefined)
|
|
56
|
-
z = 0;
|
|
57
|
-
if (w === undefined)
|
|
58
|
-
w = 0;
|
|
59
|
-
return [x, y, z, w];
|
|
60
|
-
}
|
|
61
|
-
vec4.of = of;
|
|
62
|
-
/**
|
|
63
|
-
* Creates a mutable clone of given vec4
|
|
64
|
-
* @category Generators
|
|
65
|
-
*/
|
|
66
|
-
function clone(a) {
|
|
67
|
-
return [...a];
|
|
68
|
-
}
|
|
69
|
-
vec4.clone = clone;
|
|
70
|
-
/**
|
|
71
|
-
* @category Constants
|
|
72
|
-
*/
|
|
73
|
-
vec4.zero = Object.freeze([0, 0, 0, 0]);
|
|
74
|
-
/**
|
|
75
|
-
* @category Constants
|
|
76
|
-
*/
|
|
77
|
-
vec4.one = Object.freeze([1, 1, 1, 1]);
|
|
78
|
-
/**
|
|
79
|
-
* An unit vector pointing towards positive X. Same as `[1, 0, 0, 0]`
|
|
80
|
-
* @category Constants
|
|
81
|
-
*/
|
|
82
|
-
vec4.unitX = Object.freeze([1, 0, 0, 0]);
|
|
83
|
-
/**
|
|
84
|
-
* An unit vector pointing towards positive Y. Same as `[0, 1, 0, 0]`
|
|
85
|
-
* @category Constants
|
|
86
|
-
*/
|
|
87
|
-
vec4.unitY = Object.freeze([0, 1, 0, 0]);
|
|
88
|
-
/**
|
|
89
|
-
* An unit vector pointing towards positive Z. Same as `[0, 0, 1, 0]`
|
|
90
|
-
* @category Constants
|
|
91
|
-
*/
|
|
92
|
-
vec4.unitZ = Object.freeze([0, 0, 1, 0]);
|
|
93
|
-
/**
|
|
94
|
-
* An unit vector pointing towards positive W. Same as `[0, 0, 0, 1]`
|
|
95
|
-
* @category Constants
|
|
96
|
-
*/
|
|
97
|
-
vec4.unitW = Object.freeze([0, 0, 0, 1]);
|
|
98
|
-
/**
|
|
99
|
-
* Adds given vec4's
|
|
100
|
-
*/
|
|
101
|
-
function add(...vs) {
|
|
102
|
-
let x = 0, y = 0, z = 0, w = 0;
|
|
103
|
-
for (const v of vs) {
|
|
104
|
-
if (typeof v === 'number') {
|
|
105
|
-
x += v;
|
|
106
|
-
y += v;
|
|
107
|
-
z += v;
|
|
108
|
-
w += v;
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
x += v[0];
|
|
112
|
-
y += v[1];
|
|
113
|
-
z += v[2];
|
|
114
|
-
w += v[3];
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return [x, y, z, w];
|
|
118
|
-
}
|
|
119
|
-
vec4.add = add;
|
|
120
|
-
/**
|
|
121
|
-
* Subtracts given vec4's. When the argument is a single vector, it negates it. Otherwise, it subtracts from left to right.
|
|
122
|
-
*
|
|
123
|
-
* @shorthands
|
|
124
|
-
* - {@link sub}
|
|
125
|
-
*/
|
|
126
|
-
function subtract(...vs) {
|
|
127
|
-
if (vs.length === 0) {
|
|
128
|
-
return vec4.zero;
|
|
129
|
-
}
|
|
130
|
-
if (vs.length === 1) {
|
|
131
|
-
const v = vs[0];
|
|
132
|
-
if (typeof v === 'number')
|
|
133
|
-
return [-v, -v, -v, -v];
|
|
134
|
-
return [-v[0], -v[1], -v[2], -v[3]];
|
|
135
|
-
}
|
|
136
|
-
const first = vs[0];
|
|
137
|
-
let x = typeof first === 'number' ? first : first[0];
|
|
138
|
-
let y = typeof first === 'number' ? first : first[1];
|
|
139
|
-
let z = typeof first === 'number' ? first : first[2];
|
|
140
|
-
let w = typeof first === 'number' ? first : first[3];
|
|
141
|
-
for (let i = 1; i < vs.length; i++) {
|
|
142
|
-
const v = vs[i];
|
|
143
|
-
if (typeof v === 'number') {
|
|
144
|
-
x -= v;
|
|
145
|
-
y -= v;
|
|
146
|
-
z -= v;
|
|
147
|
-
w -= v;
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
x -= v[0];
|
|
151
|
-
y -= v[1];
|
|
152
|
-
z -= v[2];
|
|
153
|
-
w -= v[3];
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
return [x, y, z, w];
|
|
157
|
-
}
|
|
158
|
-
vec4.subtract = subtract;
|
|
159
|
-
/**
|
|
160
|
-
* Alias for {@link subtract}
|
|
161
|
-
*/
|
|
162
|
-
vec4.sub = subtract;
|
|
163
|
-
/**
|
|
164
|
-
* Subtracts a from b
|
|
165
|
-
*/
|
|
166
|
-
function delta(a, b) {
|
|
167
|
-
const ax = typeof a === 'number' ? a : a[0];
|
|
168
|
-
const ay = typeof a === 'number' ? a : a[1];
|
|
169
|
-
const az = typeof a === 'number' ? a : a[2];
|
|
170
|
-
const aw = typeof a === 'number' ? a : a[3];
|
|
171
|
-
const bx = typeof b === 'number' ? b : b[0];
|
|
172
|
-
const by = typeof b === 'number' ? b : b[1];
|
|
173
|
-
const bz = typeof b === 'number' ? b : b[2];
|
|
174
|
-
const bw = typeof b === 'number' ? b : b[3];
|
|
175
|
-
return [bx - ax, by - ay, bz - az, bw - aw];
|
|
176
|
-
}
|
|
177
|
-
vec4.delta = delta;
|
|
178
|
-
/**
|
|
179
|
-
* Multiplies given vec4's
|
|
180
|
-
* @shorthands
|
|
181
|
-
* - {@link mul}
|
|
182
|
-
*/
|
|
183
|
-
function multiply(...vs) {
|
|
184
|
-
let x = 1, y = 1, z = 1, w = 1;
|
|
185
|
-
for (const v of vs) {
|
|
186
|
-
if (typeof v === 'number') {
|
|
187
|
-
x *= v;
|
|
188
|
-
y *= v;
|
|
189
|
-
z *= v;
|
|
190
|
-
w *= v;
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
x *= v[0];
|
|
194
|
-
y *= v[1];
|
|
195
|
-
z *= v[2];
|
|
196
|
-
w *= v[3];
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
return [x, y, z, w];
|
|
200
|
-
}
|
|
201
|
-
vec4.multiply = multiply;
|
|
202
|
-
/**
|
|
203
|
-
* Alias for {@link multiply}
|
|
204
|
-
*/
|
|
205
|
-
vec4.mul = multiply;
|
|
206
|
-
/**
|
|
207
|
-
* Divides given vec4's
|
|
208
|
-
*
|
|
209
|
-
* @shorthands
|
|
210
|
-
* - {@link div}
|
|
211
|
-
*/
|
|
212
|
-
function divide(...vs) {
|
|
213
|
-
if (vs.length === 0) {
|
|
214
|
-
return vec4.one;
|
|
215
|
-
}
|
|
216
|
-
if (vs.length === 1) {
|
|
217
|
-
const v = vs[0];
|
|
218
|
-
if (typeof v === 'number')
|
|
219
|
-
return [1 / v, 1 / v, 1 / v, 1 / v];
|
|
220
|
-
return [1 / v[0], 1 / v[1], 1 / v[2], 1 / v[3]];
|
|
221
|
-
}
|
|
222
|
-
const first = vs[0];
|
|
223
|
-
let x = typeof first === 'number' ? first : first[0];
|
|
224
|
-
let y = typeof first === 'number' ? first : first[1];
|
|
225
|
-
let z = typeof first === 'number' ? first : first[2];
|
|
226
|
-
let w = typeof first === 'number' ? first : first[3];
|
|
227
|
-
for (let i = 1; i < vs.length; i++) {
|
|
228
|
-
const v = vs[i];
|
|
229
|
-
if (typeof v === 'number') {
|
|
230
|
-
x /= v;
|
|
231
|
-
y /= v;
|
|
232
|
-
z /= v;
|
|
233
|
-
w /= v;
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
x /= v[0];
|
|
237
|
-
y /= v[1];
|
|
238
|
-
z /= v[2];
|
|
239
|
-
w /= v[3];
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
return [x, y, z, w];
|
|
243
|
-
}
|
|
244
|
-
vec4.divide = divide;
|
|
245
|
-
/**
|
|
246
|
-
* Alias for {@link divide}
|
|
247
|
-
*/
|
|
248
|
-
vec4.div = divide;
|
|
249
|
-
/**
|
|
250
|
-
* Returns the absolute value of each component of a vec4
|
|
251
|
-
*/
|
|
252
|
-
function abs(v) {
|
|
253
|
-
return [Math.abs(v[0]), Math.abs(v[1]), Math.abs(v[2]), Math.abs(v[3])];
|
|
254
|
-
}
|
|
255
|
-
vec4.abs = abs;
|
|
256
|
-
/**
|
|
257
|
-
* Symmetric round the components of a vec4
|
|
258
|
-
*/
|
|
259
|
-
function round(a) {
|
|
260
|
-
return [
|
|
261
|
-
Common.round(a[0]),
|
|
262
|
-
Common.round(a[1]),
|
|
263
|
-
Common.round(a[2]),
|
|
264
|
-
Common.round(a[3]),
|
|
265
|
-
];
|
|
266
|
-
}
|
|
267
|
-
vec4.round = round;
|
|
268
|
-
/**
|
|
269
|
-
* Applies Math.ceil to each component of a vec4
|
|
270
|
-
*/
|
|
271
|
-
function ceil(a) {
|
|
272
|
-
return [Math.ceil(a[0]), Math.ceil(a[1]), Math.ceil(a[2]), Math.ceil(a[3])];
|
|
273
|
-
}
|
|
274
|
-
vec4.ceil = ceil;
|
|
275
|
-
/**
|
|
276
|
-
* Applies Math.floor to each component of a vec4
|
|
277
|
-
*/
|
|
278
|
-
function floor(a) {
|
|
279
|
-
return [
|
|
280
|
-
Math.floor(a[0]),
|
|
281
|
-
Math.floor(a[1]),
|
|
282
|
-
Math.floor(a[2]),
|
|
283
|
-
Math.floor(a[3]),
|
|
284
|
-
];
|
|
285
|
-
}
|
|
286
|
-
vec4.floor = floor;
|
|
287
|
-
/**
|
|
288
|
-
* Applies Math.sign to each component of a vec4
|
|
289
|
-
*/
|
|
290
|
-
function sign(v) {
|
|
291
|
-
return [Math.sign(v[0]), Math.sign(v[1]), Math.sign(v[2]), Math.sign(v[3])];
|
|
292
|
-
}
|
|
293
|
-
vec4.sign = sign;
|
|
294
|
-
/**
|
|
295
|
-
* Removes the fractional part
|
|
296
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/trunc.html
|
|
297
|
-
*/
|
|
298
|
-
function trunc(v) {
|
|
299
|
-
return [
|
|
300
|
-
v[0] < 0 ? Math.ceil(v[0]) : Math.floor(v[0]),
|
|
301
|
-
v[1] < 0 ? Math.ceil(v[1]) : Math.floor(v[1]),
|
|
302
|
-
v[2] < 0 ? Math.ceil(v[2]) : Math.floor(v[2]),
|
|
303
|
-
v[3] < 0 ? Math.ceil(v[3]) : Math.floor(v[3]),
|
|
304
|
-
];
|
|
305
|
-
}
|
|
306
|
-
vec4.trunc = trunc;
|
|
307
|
-
/**
|
|
308
|
-
* Computes the fractional part of the argument
|
|
309
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/fract.xhtml
|
|
310
|
-
*/
|
|
311
|
-
function fract(a) {
|
|
312
|
-
return vec4.sub(a, floor(a));
|
|
313
|
-
}
|
|
314
|
-
vec4.fract = fract;
|
|
315
|
-
/**
|
|
316
|
-
* Compute value of one parameter modulo another. This is computed as x - y * floor(x/y). Unlike JavaScript's `%` operator, the sign of result always matches to `b`.
|
|
317
|
-
* @see https://thebookofshaders.com/glossary/?search=mod
|
|
318
|
-
*/
|
|
319
|
-
function mod(a, b) {
|
|
320
|
-
if (typeof b === 'number')
|
|
321
|
-
b = [b, b, b, b];
|
|
322
|
-
return [
|
|
323
|
-
a[0] - b[0] * Math.floor(a[0] / b[0]),
|
|
324
|
-
a[1] - b[1] * Math.floor(a[1] / b[1]),
|
|
325
|
-
a[2] - b[2] * Math.floor(a[2] / b[2]),
|
|
326
|
-
a[3] - b[3] * Math.floor(a[3] / b[3]),
|
|
327
|
-
];
|
|
328
|
-
}
|
|
329
|
-
vec4.mod = mod;
|
|
330
|
-
/**
|
|
331
|
-
* Quantize a vec4 to a given step and offset. If the step is 0, the value is returned unchanged.
|
|
332
|
-
* @param v The value to quantize
|
|
333
|
-
* @param step The step size
|
|
334
|
-
* @param offset The offset
|
|
335
|
-
* @returns The quantized value
|
|
336
|
-
*/
|
|
337
|
-
function quantize(v, step, offset = vec4.zero) {
|
|
338
|
-
if (typeof step === 'number')
|
|
339
|
-
step = [step, step, step, step];
|
|
340
|
-
if (typeof offset === 'number')
|
|
341
|
-
offset = [offset, offset, offset, offset];
|
|
342
|
-
return [
|
|
343
|
-
scalar_1.scalar.quantize(v[0], step[0], offset[0]),
|
|
344
|
-
scalar_1.scalar.quantize(v[1], step[1], offset[1]),
|
|
345
|
-
scalar_1.scalar.quantize(v[2], step[2], offset[2]),
|
|
346
|
-
scalar_1.scalar.quantize(v[3], step[3], offset[3]),
|
|
347
|
-
];
|
|
348
|
-
}
|
|
349
|
-
vec4.quantize = quantize;
|
|
350
|
-
/**
|
|
351
|
-
* Returns the minimum of given vec4's
|
|
352
|
-
*/
|
|
353
|
-
function min(...vs) {
|
|
354
|
-
if (vs.length === 0) {
|
|
355
|
-
return [Infinity, Infinity, Infinity, Infinity];
|
|
356
|
-
}
|
|
357
|
-
else if (vs.length === 1) {
|
|
358
|
-
const v = vs[0];
|
|
359
|
-
return typeof v === 'number' ? [v, v, v, v] : v;
|
|
360
|
-
}
|
|
361
|
-
else if (vs.length > 2) {
|
|
362
|
-
const [a, b, ...rest] = vs;
|
|
363
|
-
return min(min(a, b), ...rest);
|
|
364
|
-
}
|
|
365
|
-
let [a, b] = vs;
|
|
366
|
-
if (typeof a === 'number')
|
|
367
|
-
a = [a, a, a, a];
|
|
368
|
-
if (typeof b === 'number')
|
|
369
|
-
b = [b, b, b, b];
|
|
370
|
-
return [
|
|
371
|
-
Math.min(a[0], b[0]),
|
|
372
|
-
Math.min(a[1], b[1]),
|
|
373
|
-
Math.min(a[2], b[2]),
|
|
374
|
-
Math.min(a[3], b[3]),
|
|
375
|
-
];
|
|
376
|
-
}
|
|
377
|
-
vec4.min = min;
|
|
378
|
-
/**
|
|
379
|
-
* Returns the maximum of given vec4's
|
|
380
|
-
*/
|
|
381
|
-
function max(...vs) {
|
|
382
|
-
if (vs.length === 0) {
|
|
383
|
-
return [-Infinity, -Infinity, -Infinity, -Infinity];
|
|
384
|
-
}
|
|
385
|
-
else if (vs.length === 1) {
|
|
386
|
-
const v = vs[0];
|
|
387
|
-
return typeof v === 'number' ? [v, v, v, v] : v;
|
|
388
|
-
}
|
|
389
|
-
else if (vs.length > 2) {
|
|
390
|
-
const [a, b, ...rest] = vs;
|
|
391
|
-
return max(max(a, b), ...rest);
|
|
392
|
-
}
|
|
393
|
-
let [a, b] = vs;
|
|
394
|
-
if (typeof a === 'number')
|
|
395
|
-
a = [a, a, a, a];
|
|
396
|
-
if (typeof b === 'number')
|
|
397
|
-
b = [b, b, b, b];
|
|
398
|
-
return [
|
|
399
|
-
Math.max(a[0], b[0]),
|
|
400
|
-
Math.max(a[1], b[1]),
|
|
401
|
-
Math.max(a[2], b[2]),
|
|
402
|
-
Math.max(a[3], b[3]),
|
|
403
|
-
];
|
|
404
|
-
}
|
|
405
|
-
vec4.max = max;
|
|
406
|
-
/**
|
|
407
|
-
* Constrain a value to lie between two further values
|
|
408
|
-
* @see https://thebookofshaders.com/glossary/?search=clamp
|
|
409
|
-
* @param v the value to constrain
|
|
410
|
-
* @param min the lower end of the range into which to constrain `v`
|
|
411
|
-
* @param max the upper end of the range into which to constrain `v`
|
|
412
|
-
*/
|
|
413
|
-
function clamp(a, min, max) {
|
|
414
|
-
if (typeof min === 'number')
|
|
415
|
-
min = [min, min, min, min];
|
|
416
|
-
if (typeof max === 'number')
|
|
417
|
-
max = [max, max, max, max];
|
|
418
|
-
return [
|
|
419
|
-
Math.min(Math.max(a[0], min[0]), max[0]),
|
|
420
|
-
Math.min(Math.max(a[1], min[1]), max[1]),
|
|
421
|
-
Math.min(Math.max(a[2], min[2]), max[2]),
|
|
422
|
-
Math.min(Math.max(a[3], min[3]), max[3]),
|
|
423
|
-
];
|
|
424
|
-
}
|
|
425
|
-
vec4.clamp = clamp;
|
|
426
|
-
/**
|
|
427
|
-
* Clamps each component to [0, 1]. Equivalent to {@link saturate}.
|
|
428
|
-
*/
|
|
429
|
-
function clamp01(v) {
|
|
430
|
-
return clamp(v, 0, 1);
|
|
431
|
-
}
|
|
432
|
-
vec4.clamp01 = clamp01;
|
|
433
|
-
/**
|
|
434
|
-
* Clamps each component to [-1, 1]
|
|
435
|
-
*/
|
|
436
|
-
function clamp11(v) {
|
|
437
|
-
return clamp(v, -1, 1);
|
|
438
|
-
}
|
|
439
|
-
vec4.clamp11 = clamp11;
|
|
440
|
-
/**
|
|
441
|
-
* Scales a vec4 by a scalar number
|
|
442
|
-
*
|
|
443
|
-
* @param a the vector to scale
|
|
444
|
-
* @param s amount to scale the vector by
|
|
445
|
-
*/
|
|
446
|
-
function scale(a, s) {
|
|
447
|
-
return [a[0] * s, a[1] * s, a[2] * s, a[3] * s];
|
|
448
|
-
}
|
|
449
|
-
vec4.scale = scale;
|
|
450
|
-
/**
|
|
451
|
-
* Returns the average value of the input(s)
|
|
452
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/avg.html
|
|
453
|
-
*
|
|
454
|
-
* @shorthands
|
|
455
|
-
* - {@link avg}
|
|
456
|
-
*/
|
|
457
|
-
function average(...vs) {
|
|
458
|
-
let x = 0, y = 0, z = 0, w = 0;
|
|
459
|
-
const len = vs.length || 1;
|
|
460
|
-
for (const v of vs) {
|
|
461
|
-
x += v[0];
|
|
462
|
-
y += v[1];
|
|
463
|
-
z += v[2];
|
|
464
|
-
w += v[3];
|
|
465
|
-
}
|
|
466
|
-
return [x / len, y / len, z / len, w / len];
|
|
467
|
-
}
|
|
468
|
-
vec4.average = average;
|
|
469
|
-
/**
|
|
470
|
-
* Alias for {@link average}
|
|
471
|
-
*/
|
|
472
|
-
vec4.avg = average;
|
|
473
|
-
/**
|
|
474
|
-
* Adds given vec4's after scaling the second operand by a scalar value
|
|
475
|
-
* @param scale the amount to scale b by before adding
|
|
476
|
-
*/
|
|
477
|
-
function scaleAndAdd(a, b, scale) {
|
|
478
|
-
return [
|
|
479
|
-
a[0] + b[0] * scale,
|
|
480
|
-
a[1] + b[1] * scale,
|
|
481
|
-
a[2] + b[2] * scale,
|
|
482
|
-
a[3] + b[3] * scale,
|
|
483
|
-
];
|
|
484
|
-
}
|
|
485
|
-
vec4.scaleAndAdd = scaleAndAdd;
|
|
486
|
-
/**
|
|
487
|
-
* Calculates the euclidian distance between two vec4's
|
|
488
|
-
*/
|
|
489
|
-
function distance(a, b) {
|
|
490
|
-
const x = b[0] - a[0];
|
|
491
|
-
const y = b[1] - a[1];
|
|
492
|
-
const z = b[2] - a[2];
|
|
493
|
-
const w = b[3] - a[3];
|
|
494
|
-
return Math.hypot(x, y, z, w);
|
|
495
|
-
}
|
|
496
|
-
vec4.distance = distance;
|
|
497
|
-
/**
|
|
498
|
-
* Alias for {@link distance}
|
|
499
|
-
*/
|
|
500
|
-
vec4.dist = distance;
|
|
501
|
-
/**
|
|
502
|
-
* Calculates the squared euclidian distance between two vec4's
|
|
503
|
-
*
|
|
504
|
-
* @shorthands
|
|
505
|
-
* - {@link sqrDist}
|
|
506
|
-
*/
|
|
507
|
-
function squaredDistance(a, b) {
|
|
508
|
-
const x = b[0] - a[0];
|
|
509
|
-
const y = b[1] - a[1];
|
|
510
|
-
const z = b[2] - a[2];
|
|
511
|
-
const w = b[3] - a[3];
|
|
512
|
-
return x * x + y * y + z * z + w * w;
|
|
513
|
-
}
|
|
514
|
-
vec4.squaredDistance = squaredDistance;
|
|
515
|
-
/**
|
|
516
|
-
* Alias for {@link squaredDistance}
|
|
517
|
-
*/
|
|
518
|
-
vec4.sqrDist = squaredDistance;
|
|
519
|
-
/**
|
|
520
|
-
* Returns the absolute difference between corresponding components of two vec4's
|
|
521
|
-
*
|
|
522
|
-
* @shorthands
|
|
523
|
-
* - {@link diff}
|
|
524
|
-
*/
|
|
525
|
-
function difference(a, b) {
|
|
526
|
-
return [
|
|
527
|
-
Math.abs(b[0] - a[0]),
|
|
528
|
-
Math.abs(b[1] - a[1]),
|
|
529
|
-
Math.abs(b[2] - a[2]),
|
|
530
|
-
Math.abs(b[3] - a[3]),
|
|
531
|
-
];
|
|
532
|
-
}
|
|
533
|
-
vec4.difference = difference;
|
|
534
|
-
/**
|
|
535
|
-
* Alias for {@link vec4.difference}
|
|
536
|
-
* @category Shorthands
|
|
537
|
-
*/
|
|
538
|
-
vec4.diff = difference;
|
|
539
|
-
/**
|
|
540
|
-
* Calculates the length of a vec4
|
|
541
|
-
*
|
|
542
|
-
* @shorthands
|
|
543
|
-
* - {@link len}
|
|
544
|
-
*/
|
|
545
|
-
function length(a) {
|
|
546
|
-
const [x, y, z, w] = a;
|
|
547
|
-
return Math.hypot(x, y, z, w);
|
|
548
|
-
}
|
|
549
|
-
vec4.length = length;
|
|
550
|
-
/**
|
|
551
|
-
* Alias for {@link length}
|
|
552
|
-
*/
|
|
553
|
-
vec4.len = length;
|
|
554
|
-
/**
|
|
555
|
-
* Calculates the squared length of a vec4
|
|
556
|
-
*
|
|
557
|
-
* @shorthands
|
|
558
|
-
* - {@link sqrLen}
|
|
559
|
-
*/
|
|
560
|
-
function squaredLength(a) {
|
|
561
|
-
const [x, y, z, w] = a;
|
|
562
|
-
return x * x + y * y + z * z + w * w;
|
|
563
|
-
}
|
|
564
|
-
vec4.squaredLength = squaredLength;
|
|
565
|
-
/**
|
|
566
|
-
* Alias for {@link squaredLength}
|
|
567
|
-
*/
|
|
568
|
-
vec4.sqrLen = squaredLength;
|
|
569
|
-
/**
|
|
570
|
-
* Negates the components of a vec4
|
|
571
|
-
* @shorthands
|
|
572
|
-
* - {@link neg}
|
|
573
|
-
*/
|
|
574
|
-
function negate(a) {
|
|
575
|
-
return [-a[0], -a[1], -a[2], -a[3]];
|
|
576
|
-
}
|
|
577
|
-
vec4.negate = negate;
|
|
578
|
-
/**
|
|
579
|
-
* Alias for {@link negate}
|
|
580
|
-
*/
|
|
581
|
-
vec4.neg = negate;
|
|
582
|
-
/**
|
|
583
|
-
* Returns the inverse of the components of a vec4
|
|
584
|
-
*
|
|
585
|
-
* @shorthands
|
|
586
|
-
* - {@link inv}
|
|
587
|
-
*/
|
|
588
|
-
function invert(a) {
|
|
589
|
-
return [1 / a[0], 1 / a[1], 1 / a[2], 1 / a[3]];
|
|
590
|
-
}
|
|
591
|
-
vec4.invert = invert;
|
|
592
|
-
/**
|
|
593
|
-
* Alias for {@link invert}
|
|
594
|
-
* @category Shorthands
|
|
595
|
-
*/
|
|
596
|
-
vec4.inv = invert;
|
|
597
|
-
/**
|
|
598
|
-
* Returns the result of `v` subtracted from {@link one}.
|
|
599
|
-
*/
|
|
600
|
-
function oneMinus(v) {
|
|
601
|
-
return subtract(vec4.one, v);
|
|
602
|
-
}
|
|
603
|
-
vec4.oneMinus = oneMinus;
|
|
604
|
-
/**
|
|
605
|
-
* Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. The function clamps the given value the range `(omin, omax)` before fitting, so the resulting value will be guaranteed to be in the range `(nmin, nmax)`. To avoid clamping use efit instead.
|
|
606
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
|
|
607
|
-
* @param value
|
|
608
|
-
* @param omin
|
|
609
|
-
* @param omax
|
|
610
|
-
* @param nmin
|
|
611
|
-
* @param nmax
|
|
612
|
-
* @returns
|
|
613
|
-
*/
|
|
614
|
-
function fit(value, omin, omax, nmin, nmax) {
|
|
615
|
-
return [
|
|
616
|
-
scalar_1.scalar.fit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
|
|
617
|
-
scalar_1.scalar.fit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
|
|
618
|
-
scalar_1.scalar.fit(value[2], omin[2], omax[2], nmin[2], nmax[2]),
|
|
619
|
-
scalar_1.scalar.fit(value[3], omin[3], omax[3], nmin[3], nmax[3]),
|
|
620
|
-
];
|
|
621
|
-
}
|
|
622
|
-
vec4.fit = fit;
|
|
623
|
-
/**
|
|
624
|
-
* Takes the value in the range `(omin, omax)` and shifts it to the corresponding value in the new range `(nmin, nmax)`. Unlike `fit`, this function does not clamp values to the given range. If `omin` and `omax` are the same, the function returns the average of `nmin` and `nmax`.
|
|
625
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit.html
|
|
626
|
-
* @param value
|
|
627
|
-
* @param omin
|
|
628
|
-
* @param omax
|
|
629
|
-
* @param nmin
|
|
630
|
-
* @param nmax
|
|
631
|
-
* @returns
|
|
632
|
-
*/
|
|
633
|
-
function efit(value, omin, omax, nmin, nmax) {
|
|
634
|
-
return [
|
|
635
|
-
scalar_1.scalar.efit(value[0], omin[0], omax[0], nmin[0], nmax[0]),
|
|
636
|
-
scalar_1.scalar.efit(value[1], omin[1], omax[1], nmin[1], nmax[1]),
|
|
637
|
-
scalar_1.scalar.efit(value[2], omin[2], omax[2], nmin[2], nmax[2]),
|
|
638
|
-
scalar_1.scalar.efit(value[3], omin[3], omax[3], nmin[3], nmax[3]),
|
|
639
|
-
];
|
|
640
|
-
}
|
|
641
|
-
vec4.efit = efit;
|
|
642
|
-
/**
|
|
643
|
-
* Takes the value in the range `(0, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
|
|
644
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit01.html
|
|
645
|
-
*/
|
|
646
|
-
function fit01(value, nmin, nmax) {
|
|
647
|
-
return [
|
|
648
|
-
scalar_1.scalar.fit01(value[0], nmin[0], nmax[0]),
|
|
649
|
-
scalar_1.scalar.fit01(value[1], nmin[1], nmax[1]),
|
|
650
|
-
scalar_1.scalar.fit01(value[2], nmin[2], nmax[2]),
|
|
651
|
-
scalar_1.scalar.fit01(value[3], nmin[3], nmax[3]),
|
|
652
|
-
];
|
|
653
|
-
}
|
|
654
|
-
vec4.fit01 = fit01;
|
|
655
|
-
/**
|
|
656
|
-
* Takes the value in the range `(-1, 1)` and shifts it to the corresponding value in the new range `(nmin, nmax)`.
|
|
657
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/fit11.html
|
|
658
|
-
*/
|
|
659
|
-
function fit11(value, nmin, nmax) {
|
|
660
|
-
return [
|
|
661
|
-
scalar_1.scalar.fit11(value[0], nmin[0], nmax[0]),
|
|
662
|
-
scalar_1.scalar.fit11(value[1], nmin[1], nmax[1]),
|
|
663
|
-
scalar_1.scalar.fit11(value[2], nmin[2], nmax[2]),
|
|
664
|
-
scalar_1.scalar.fit11(value[3], nmin[3], nmax[3]),
|
|
665
|
-
];
|
|
666
|
-
}
|
|
667
|
-
vec4.fit11 = fit11;
|
|
668
|
-
/**
|
|
669
|
-
* Normalize a vec4
|
|
670
|
-
*/
|
|
671
|
-
function normalize(a) {
|
|
672
|
-
const [x, y, z, w] = a;
|
|
673
|
-
const isZeroLength = x === 0 && y === 0 && z === 0 && w === 0;
|
|
674
|
-
const len = isZeroLength ? 0 : 1 / Math.hypot(x, y, z, w);
|
|
675
|
-
return [x * len, y * len, z * len, w * len];
|
|
676
|
-
}
|
|
677
|
-
vec4.normalize = normalize;
|
|
678
|
-
/**
|
|
679
|
-
* Calculates the dot product of two vec4's
|
|
680
|
-
*/
|
|
681
|
-
function dot(a, b) {
|
|
682
|
-
return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
|
|
683
|
-
}
|
|
684
|
-
vec4.dot = dot;
|
|
685
|
-
/**
|
|
686
|
-
* Returns the cross-product of three vectors in a 4-dimensional space
|
|
687
|
-
*/
|
|
688
|
-
function cross(u, v, w) {
|
|
689
|
-
const A = v[0] * w[1] - v[1] * w[0];
|
|
690
|
-
const B = v[0] * w[2] - v[2] * w[0];
|
|
691
|
-
const C = v[0] * w[3] - v[3] * w[0];
|
|
692
|
-
const D = v[1] * w[2] - v[2] * w[1];
|
|
693
|
-
const E = v[1] * w[3] - v[3] * w[1];
|
|
694
|
-
const F = v[2] * w[3] - v[3] * w[2];
|
|
695
|
-
const [G, H, I, J] = u;
|
|
696
|
-
return [
|
|
697
|
-
H * F - I * E + J * D,
|
|
698
|
-
-(G * F) + I * C - J * B,
|
|
699
|
-
G * E - H * C + J * A,
|
|
700
|
-
-(G * D) + H * B - I * A,
|
|
701
|
-
];
|
|
702
|
-
}
|
|
703
|
-
vec4.cross = cross;
|
|
704
|
-
/**
|
|
705
|
-
* Linearly interpolate between two vec4's. Same as GLSL's built-in `mix` function.
|
|
706
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
|
|
707
|
-
*
|
|
708
|
-
* @shorthands
|
|
709
|
-
* - {@link mix}
|
|
710
|
-
*/
|
|
711
|
-
function lerp(a, b, t) {
|
|
712
|
-
if (typeof t === 'number')
|
|
713
|
-
t = [t, t, t, t];
|
|
714
|
-
return [
|
|
715
|
-
a[0] + t[0] * (b[0] - a[0]),
|
|
716
|
-
a[1] + t[1] * (b[1] - a[1]),
|
|
717
|
-
a[2] + t[2] * (b[2] - a[2]),
|
|
718
|
-
a[3] + t[3] * (b[3] - a[3]),
|
|
719
|
-
];
|
|
720
|
-
}
|
|
721
|
-
vec4.lerp = lerp;
|
|
722
|
-
/**
|
|
723
|
-
* Alias for {@link lerp}
|
|
724
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/mix.xhtml
|
|
725
|
-
*/
|
|
726
|
-
vec4.mix = lerp;
|
|
727
|
-
/**
|
|
728
|
-
* Returns the amount to mix `min` and `max` to generate the input value `t`. This is the inverse of the `lerp` function. If `min` and `max` are equal, the mixing value is `0.5`.
|
|
729
|
-
* @see https://docs.unity3d.com/Packages/com.unity.shadergraph@6.9/manual/Inverse-Lerp-Node.html
|
|
730
|
-
* @see https://www.sidefx.com/docs/houdini/vex/functions/invlerp.html
|
|
731
|
-
*
|
|
732
|
-
* @shorthands
|
|
733
|
-
* - {@link invlerp}
|
|
734
|
-
*/
|
|
735
|
-
function inverseLerp(a, b, t) {
|
|
736
|
-
return [
|
|
737
|
-
a[0] === b[0] ? 0.5 : (t[0] - a[0]) / (b[0] - a[0]),
|
|
738
|
-
a[1] === b[1] ? 0.5 : (t[1] - a[1]) / (b[1] - a[1]),
|
|
739
|
-
a[2] === b[2] ? 0.5 : (t[2] - a[2]) / (b[2] - a[2]),
|
|
740
|
-
a[3] === b[3] ? 0.5 : (t[3] - a[3]) / (b[3] - a[3]),
|
|
741
|
-
];
|
|
742
|
-
}
|
|
743
|
-
vec4.inverseLerp = inverseLerp;
|
|
744
|
-
/**
|
|
745
|
-
* Alias for {@link inverseSqrt}
|
|
746
|
-
* @category Shorthands
|
|
747
|
-
*/
|
|
748
|
-
vec4.invsqrt = inverseSqrt;
|
|
749
|
-
/**
|
|
750
|
-
* Alias for {@link inverseLerp}
|
|
751
|
-
*/
|
|
752
|
-
vec4.invlerp = inverseLerp;
|
|
753
|
-
/**
|
|
754
|
-
* Transforms the vec4 with a mat4.
|
|
755
|
-
*/
|
|
756
|
-
function transformMat4(a, m) {
|
|
757
|
-
const [x, y, z, w] = a;
|
|
758
|
-
return [
|
|
759
|
-
m[0] * x + m[4] * y + m[8] * z + m[12] * w,
|
|
760
|
-
m[1] * x + m[5] * y + m[9] * z + m[13] * w,
|
|
761
|
-
m[2] * x + m[6] * y + m[10] * z + m[14] * w,
|
|
762
|
-
m[3] * x + m[7] * y + m[11] * z + m[15] * w,
|
|
763
|
-
];
|
|
764
|
-
}
|
|
765
|
-
vec4.transformMat4 = transformMat4;
|
|
766
|
-
/**
|
|
767
|
-
* Transforms the vec4 with a quat
|
|
768
|
-
*/
|
|
769
|
-
function transformQuat(a, q) {
|
|
770
|
-
const [x, y, z] = a;
|
|
771
|
-
const [qx, qy, qz, qw] = q;
|
|
772
|
-
// calculate quat * vec
|
|
773
|
-
const ix = qw * x + qy * z - qz * y;
|
|
774
|
-
const iy = qw * y + qz * x - qx * z;
|
|
775
|
-
const iz = qw * z + qx * y - qy * x;
|
|
776
|
-
const iw = -qx * x - qy * y - qz * z;
|
|
777
|
-
// calculate result * inverse quat
|
|
778
|
-
return [
|
|
779
|
-
ix * qw + iw * -qx + iy * -qz - iz * -qy,
|
|
780
|
-
iy * qw + iw * -qy + iz * -qx - ix * -qz,
|
|
781
|
-
iz * qw + iw * -qz + ix * -qy - iy * -qx,
|
|
782
|
-
a[3],
|
|
783
|
-
];
|
|
784
|
-
}
|
|
785
|
-
vec4.transformQuat = transformQuat;
|
|
786
|
-
/**
|
|
787
|
-
* Transforms a vec4 with a matrix or quaternion, automatically choosing the appropriate transformation function
|
|
788
|
-
* @param p The vector to transform
|
|
789
|
-
* @param m The transformation (mat4 or quat)
|
|
790
|
-
* @returns The transformed vector
|
|
791
|
-
*
|
|
792
|
-
* @shorthands
|
|
793
|
-
* - {@link xform}
|
|
794
|
-
*/
|
|
795
|
-
function transform(p, m) {
|
|
796
|
-
if (m.length === 4) {
|
|
797
|
-
return transformQuat(p, m);
|
|
798
|
-
}
|
|
799
|
-
return transformMat4(p, m);
|
|
800
|
-
}
|
|
801
|
-
vec4.transform = transform;
|
|
802
|
-
/**
|
|
803
|
-
* Alias for {@link vec4.transform}
|
|
804
|
-
* @category Shorthands
|
|
805
|
-
*/
|
|
806
|
-
vec4.xform = transform;
|
|
807
|
-
/**
|
|
808
|
-
* Apply a step function by comparing two values
|
|
809
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/step.xhtml
|
|
810
|
-
* @param edge The location of the edge of the step function.
|
|
811
|
-
* @param x The value to be used to generate the step function.
|
|
812
|
-
* @returns
|
|
813
|
-
*/
|
|
814
|
-
function step(edge, v) {
|
|
815
|
-
if (typeof edge === 'number')
|
|
816
|
-
edge = [edge, edge, edge, edge];
|
|
817
|
-
if (typeof v === 'number')
|
|
818
|
-
v = [v, v, v, v];
|
|
819
|
-
return [
|
|
820
|
-
v[0] < edge[0] ? 0 : 1,
|
|
821
|
-
v[1] < edge[1] ? 0 : 1,
|
|
822
|
-
v[2] < edge[2] ? 0 : 1,
|
|
823
|
-
v[3] < edge[3] ? 0 : 1,
|
|
824
|
-
];
|
|
825
|
-
}
|
|
826
|
-
vec4.step = step;
|
|
827
|
-
/**
|
|
828
|
-
* Perform Hermite interpolation between two values.
|
|
829
|
-
* @see https://registry.khronos.org/OpenGL-Refpages/gl4/html/smoothstep.xhtml
|
|
830
|
-
* @param edge0 Lower edge of the Hermite function.
|
|
831
|
-
* @param edge1 Upper edge of the Hermite function.
|
|
832
|
-
* @param x Source value for interpolation.
|
|
833
|
-
* @returns
|
|
834
|
-
*/
|
|
835
|
-
function smoothstep(edge0, edge1, x) {
|
|
836
|
-
if (typeof edge0 === 'number')
|
|
837
|
-
edge0 = [edge0, edge0, edge0, edge0];
|
|
838
|
-
if (typeof edge1 === 'number')
|
|
839
|
-
edge1 = [edge1, edge1, edge1, edge1];
|
|
840
|
-
const t0 = scalar_1.scalar.clamp((x[0] - edge0[0]) / (edge1[0] - edge0[0]), 0, 1);
|
|
841
|
-
const t1 = scalar_1.scalar.clamp((x[1] - edge0[1]) / (edge1[1] - edge0[1]), 0, 1);
|
|
842
|
-
const t2 = scalar_1.scalar.clamp((x[2] - edge0[2]) / (edge1[2] - edge0[2]), 0, 1);
|
|
843
|
-
const t3 = scalar_1.scalar.clamp((x[3] - edge0[3]) / (edge1[3] - edge0[3]), 0, 1);
|
|
844
|
-
return [
|
|
845
|
-
t0 * t0 * (3 - 2 * t0),
|
|
846
|
-
t1 * t1 * (3 - 2 * t1),
|
|
847
|
-
t2 * t2 * (3 - 2 * t2),
|
|
848
|
-
t3 * t3 * (3 - 2 * t3),
|
|
849
|
-
];
|
|
850
|
-
}
|
|
851
|
-
vec4.smoothstep = smoothstep;
|
|
852
|
-
/**
|
|
853
|
-
* Converts the components of a vec4 from radians to degrees
|
|
854
|
-
* @param rad The input vec4 in radians
|
|
855
|
-
* @returns The degrees equivalent of the input
|
|
856
|
-
*
|
|
857
|
-
* @shorthands
|
|
858
|
-
* - {@link deg}
|
|
859
|
-
*/
|
|
860
|
-
function degrees(rad) {
|
|
861
|
-
return [
|
|
862
|
-
(rad[0] * 180) / Math.PI,
|
|
863
|
-
(rad[1] * 180) / Math.PI,
|
|
864
|
-
(rad[2] * 180) / Math.PI,
|
|
865
|
-
(rad[3] * 180) / Math.PI,
|
|
866
|
-
];
|
|
867
|
-
}
|
|
868
|
-
vec4.degrees = degrees;
|
|
869
|
-
/**
|
|
870
|
-
* Alias for {@link degrees}
|
|
871
|
-
* @category Shorthands
|
|
872
|
-
*/
|
|
873
|
-
vec4.deg = degrees;
|
|
874
|
-
/**
|
|
875
|
-
* Converts the components of a vec4 from degrees to radians
|
|
876
|
-
* @param deg The input vec4 in degrees
|
|
877
|
-
* @returns The radians equivalent of the input
|
|
878
|
-
*
|
|
879
|
-
* @shorthands
|
|
880
|
-
* - {@link rad}
|
|
881
|
-
*/
|
|
882
|
-
function radians(deg) {
|
|
883
|
-
return [
|
|
884
|
-
(deg[0] * Math.PI) / 180,
|
|
885
|
-
(deg[1] * Math.PI) / 180,
|
|
886
|
-
(deg[2] * Math.PI) / 180,
|
|
887
|
-
(deg[3] * Math.PI) / 180,
|
|
888
|
-
];
|
|
889
|
-
}
|
|
890
|
-
vec4.radians = radians;
|
|
891
|
-
/**
|
|
892
|
-
* Alias for {@link radians}
|
|
893
|
-
* @category Shorthands
|
|
894
|
-
*/
|
|
895
|
-
vec4.rad = radians;
|
|
896
|
-
/**
|
|
897
|
-
* Returns the sine of each component, which are angles in degrees
|
|
898
|
-
*/
|
|
899
|
-
function sin(deg) {
|
|
900
|
-
return [
|
|
901
|
-
Math.sin(deg[0] * Common.DEG2RAD),
|
|
902
|
-
Math.sin(deg[1] * Common.DEG2RAD),
|
|
903
|
-
Math.sin(deg[2] * Common.DEG2RAD),
|
|
904
|
-
Math.sin(deg[3] * Common.DEG2RAD),
|
|
905
|
-
];
|
|
906
|
-
}
|
|
907
|
-
vec4.sin = sin;
|
|
908
|
-
/**
|
|
909
|
-
* Returns the cosine of each component, which are angles in degrees
|
|
910
|
-
*/
|
|
911
|
-
function cos(deg) {
|
|
912
|
-
return [
|
|
913
|
-
Math.cos(deg[0] * Common.DEG2RAD),
|
|
914
|
-
Math.cos(deg[1] * Common.DEG2RAD),
|
|
915
|
-
Math.cos(deg[2] * Common.DEG2RAD),
|
|
916
|
-
Math.cos(deg[3] * Common.DEG2RAD),
|
|
917
|
-
];
|
|
918
|
-
}
|
|
919
|
-
vec4.cos = cos;
|
|
920
|
-
/**
|
|
921
|
-
* Returns the tangent of each component, which are angles in degrees
|
|
922
|
-
*/
|
|
923
|
-
function tan(deg) {
|
|
924
|
-
return [
|
|
925
|
-
Math.tan(deg[0] * Common.DEG2RAD),
|
|
926
|
-
Math.tan(deg[1] * Common.DEG2RAD),
|
|
927
|
-
Math.tan(deg[2] * Common.DEG2RAD),
|
|
928
|
-
Math.tan(deg[3] * Common.DEG2RAD),
|
|
929
|
-
];
|
|
930
|
-
}
|
|
931
|
-
vec4.tan = tan;
|
|
932
|
-
/**
|
|
933
|
-
* Returns the arcsine of each component, in degrees
|
|
934
|
-
*/
|
|
935
|
-
function asin(v) {
|
|
936
|
-
return [
|
|
937
|
-
Math.asin(v[0]) * Common.RAD2DEG,
|
|
938
|
-
Math.asin(v[1]) * Common.RAD2DEG,
|
|
939
|
-
Math.asin(v[2]) * Common.RAD2DEG,
|
|
940
|
-
Math.asin(v[3]) * Common.RAD2DEG,
|
|
941
|
-
];
|
|
942
|
-
}
|
|
943
|
-
vec4.asin = asin;
|
|
944
|
-
/**
|
|
945
|
-
* Returns the arc cosine of each component, in degrees
|
|
946
|
-
*/
|
|
947
|
-
function acos(v) {
|
|
948
|
-
return [
|
|
949
|
-
Math.acos(v[0]) * Common.RAD2DEG,
|
|
950
|
-
Math.acos(v[1]) * Common.RAD2DEG,
|
|
951
|
-
Math.acos(v[2]) * Common.RAD2DEG,
|
|
952
|
-
Math.acos(v[3]) * Common.RAD2DEG,
|
|
953
|
-
];
|
|
954
|
-
}
|
|
955
|
-
vec4.acos = acos;
|
|
956
|
-
/**
|
|
957
|
-
* Returns the arc-tangent of the parameters. If `x` is not provided, `y` is regarded as a value of `y/x`.
|
|
958
|
-
* @param y the values of the y-coordinate
|
|
959
|
-
* @param x the values of the x-coordinate
|
|
960
|
-
* @returns the angle in degrees
|
|
961
|
-
* @see https://thebookofshaders.com/glossary/?search=atan
|
|
962
|
-
* */
|
|
963
|
-
function atan(y, x) {
|
|
964
|
-
if (x === undefined) {
|
|
965
|
-
return [
|
|
966
|
-
Math.atan(y[0]) * Common.RAD2DEG,
|
|
967
|
-
Math.atan(y[1]) * Common.RAD2DEG,
|
|
968
|
-
Math.atan(y[2]) * Common.RAD2DEG,
|
|
969
|
-
Math.atan(y[3]) * Common.RAD2DEG,
|
|
970
|
-
];
|
|
971
|
-
}
|
|
972
|
-
else {
|
|
973
|
-
return [
|
|
974
|
-
Math.atan2(y[0], x[0]) * Common.RAD2DEG,
|
|
975
|
-
Math.atan2(y[1], x[1]) * Common.RAD2DEG,
|
|
976
|
-
Math.atan2(y[2], x[2]) * Common.RAD2DEG,
|
|
977
|
-
Math.atan2(y[3], x[3]) * Common.RAD2DEG,
|
|
978
|
-
];
|
|
979
|
-
}
|
|
980
|
-
}
|
|
981
|
-
vec4.atan = atan;
|
|
982
|
-
/**
|
|
983
|
-
* Returns the arc-tangent of the parameters.
|
|
984
|
-
* @param y the values of the y-coordinate
|
|
985
|
-
* @param x the values of the x-coordinate
|
|
986
|
-
* @returns the angle in degrees
|
|
987
|
-
* @see https://thebookofshaders.com/glossary/?search=atan
|
|
988
|
-
* */
|
|
989
|
-
function atan2(y, x) {
|
|
990
|
-
return [
|
|
991
|
-
Math.atan2(y[0], x[0]) * Common.RAD2DEG,
|
|
992
|
-
Math.atan2(y[1], x[1]) * Common.RAD2DEG,
|
|
993
|
-
Math.atan2(y[2], x[2]) * Common.RAD2DEG,
|
|
994
|
-
Math.atan2(y[3], x[3]) * Common.RAD2DEG,
|
|
995
|
-
];
|
|
996
|
-
}
|
|
997
|
-
vec4.atan2 = atan2;
|
|
998
|
-
/**
|
|
999
|
-
* Returns the base to the exponent power, component-wise
|
|
1000
|
-
*/
|
|
1001
|
-
function pow(a, b) {
|
|
1002
|
-
if (typeof b === 'number')
|
|
1003
|
-
b = [b, b, b, b];
|
|
1004
|
-
return [
|
|
1005
|
-
Math.pow(a[0], b[0]),
|
|
1006
|
-
Math.pow(a[1], b[1]),
|
|
1007
|
-
Math.pow(a[2], b[2]),
|
|
1008
|
-
Math.pow(a[3], b[3]),
|
|
1009
|
-
];
|
|
1010
|
-
}
|
|
1011
|
-
vec4.pow = pow;
|
|
1012
|
-
/**
|
|
1013
|
-
* Returns e raised to the power of each component
|
|
1014
|
-
*/
|
|
1015
|
-
function exp(v) {
|
|
1016
|
-
return [Math.exp(v[0]), Math.exp(v[1]), Math.exp(v[2]), Math.exp(v[3])];
|
|
1017
|
-
}
|
|
1018
|
-
vec4.exp = exp;
|
|
1019
|
-
/**
|
|
1020
|
-
* Returns the natural logarithm of each component
|
|
1021
|
-
*/
|
|
1022
|
-
function log(v) {
|
|
1023
|
-
return [Math.log(v[0]), Math.log(v[1]), Math.log(v[2]), Math.log(v[3])];
|
|
1024
|
-
}
|
|
1025
|
-
vec4.log = log;
|
|
1026
|
-
/**
|
|
1027
|
-
* Returns 2 raised to the power of the parameter
|
|
1028
|
-
* @param v the value of the power to which 2 will be raised
|
|
1029
|
-
*/
|
|
1030
|
-
function exp2(v) {
|
|
1031
|
-
return [2 ** v[0], 2 ** v[1], 2 ** v[2], 2 ** v[3]];
|
|
1032
|
-
}
|
|
1033
|
-
vec4.exp2 = exp2;
|
|
1034
|
-
/**
|
|
1035
|
-
* Returns the base-2 logarithm of each component
|
|
1036
|
-
*/
|
|
1037
|
-
function log2(v) {
|
|
1038
|
-
return [Math.log2(v[0]), Math.log2(v[1]), Math.log2(v[2]), Math.log2(v[3])];
|
|
1039
|
-
}
|
|
1040
|
-
vec4.log2 = log2;
|
|
1041
|
-
/**
|
|
1042
|
-
* Returns the square root of each component
|
|
1043
|
-
*/
|
|
1044
|
-
function sqrt(v) {
|
|
1045
|
-
return [Math.sqrt(v[0]), Math.sqrt(v[1]), Math.sqrt(v[2]), Math.sqrt(v[3])];
|
|
1046
|
-
}
|
|
1047
|
-
vec4.sqrt = sqrt;
|
|
1048
|
-
/**
|
|
1049
|
-
* Returns the inverse of the square root of the parameter
|
|
1050
|
-
* @param v the value of which to take the inverse of the square root
|
|
1051
|
-
* @see https://thebookofshaders.com/glossary/?search=inversesqrt
|
|
1052
|
-
*/
|
|
1053
|
-
function inverseSqrt(v) {
|
|
1054
|
-
return [
|
|
1055
|
-
1 / Math.sqrt(v[0]),
|
|
1056
|
-
1 / Math.sqrt(v[1]),
|
|
1057
|
-
1 / Math.sqrt(v[2]),
|
|
1058
|
-
1 / Math.sqrt(v[3]),
|
|
1059
|
-
];
|
|
1060
|
-
}
|
|
1061
|
-
vec4.inverseSqrt = inverseSqrt;
|
|
1062
|
-
/**
|
|
1063
|
-
* Returns the hyperbolic sine of each component
|
|
1064
|
-
*/
|
|
1065
|
-
function sinh(v) {
|
|
1066
|
-
return [Math.sinh(v[0]), Math.sinh(v[1]), Math.sinh(v[2]), Math.sinh(v[3])];
|
|
1067
|
-
}
|
|
1068
|
-
vec4.sinh = sinh;
|
|
1069
|
-
/**
|
|
1070
|
-
* Returns the hyperbolic cosine of each component
|
|
1071
|
-
*/
|
|
1072
|
-
function cosh(v) {
|
|
1073
|
-
return [Math.cosh(v[0]), Math.cosh(v[1]), Math.cosh(v[2]), Math.cosh(v[3])];
|
|
1074
|
-
}
|
|
1075
|
-
vec4.cosh = cosh;
|
|
1076
|
-
/**
|
|
1077
|
-
* Returns the hyperbolic tangent of each component
|
|
1078
|
-
*/
|
|
1079
|
-
function tanh(v) {
|
|
1080
|
-
return [Math.tanh(v[0]), Math.tanh(v[1]), Math.tanh(v[2]), Math.tanh(v[3])];
|
|
1081
|
-
}
|
|
1082
|
-
vec4.tanh = tanh;
|
|
1083
|
-
/**
|
|
1084
|
-
* Returns the inverse hyperbolic sine of each component
|
|
1085
|
-
*/
|
|
1086
|
-
function asinh(v) {
|
|
1087
|
-
return [
|
|
1088
|
-
Math.asinh(v[0]),
|
|
1089
|
-
Math.asinh(v[1]),
|
|
1090
|
-
Math.asinh(v[2]),
|
|
1091
|
-
Math.asinh(v[3]),
|
|
1092
|
-
];
|
|
1093
|
-
}
|
|
1094
|
-
vec4.asinh = asinh;
|
|
1095
|
-
/**
|
|
1096
|
-
* Returns the inverse hyperbolic cosine of each component
|
|
1097
|
-
*/
|
|
1098
|
-
function acosh(v) {
|
|
1099
|
-
return [
|
|
1100
|
-
Math.acosh(v[0]),
|
|
1101
|
-
Math.acosh(v[1]),
|
|
1102
|
-
Math.acosh(v[2]),
|
|
1103
|
-
Math.acosh(v[3]),
|
|
1104
|
-
];
|
|
1105
|
-
}
|
|
1106
|
-
vec4.acosh = acosh;
|
|
1107
|
-
/**
|
|
1108
|
-
* Returns the inverse hyperbolic tangent of each component
|
|
1109
|
-
*/
|
|
1110
|
-
function atanh(v) {
|
|
1111
|
-
return [
|
|
1112
|
-
Math.atanh(v[0]),
|
|
1113
|
-
Math.atanh(v[1]),
|
|
1114
|
-
Math.atanh(v[2]),
|
|
1115
|
-
Math.atanh(v[3]),
|
|
1116
|
-
];
|
|
1117
|
-
}
|
|
1118
|
-
vec4.atanh = atanh;
|
|
1119
|
-
/**
|
|
1120
|
-
* Clamps each component to [0, 1]. Equivalent to HLSL's `saturate`.
|
|
1121
|
-
*/
|
|
1122
|
-
function saturate(v) {
|
|
1123
|
-
return [
|
|
1124
|
-
Math.max(0, Math.min(1, v[0])),
|
|
1125
|
-
Math.max(0, Math.min(1, v[1])),
|
|
1126
|
-
Math.max(0, Math.min(1, v[2])),
|
|
1127
|
-
Math.max(0, Math.min(1, v[3])),
|
|
1128
|
-
];
|
|
1129
|
-
}
|
|
1130
|
-
vec4.saturate = saturate;
|
|
1131
|
-
/**
|
|
1132
|
-
* Returns the sum of all components of a vector.
|
|
1133
|
-
* Equivalent to GLM's `glm::compAdd`.
|
|
1134
|
-
*/
|
|
1135
|
-
function compAdd(v) {
|
|
1136
|
-
return v[0] + v[1] + v[2] + v[3];
|
|
1137
|
-
}
|
|
1138
|
-
vec4.compAdd = compAdd;
|
|
1139
|
-
/**
|
|
1140
|
-
* Returns the product of all components of a vector.
|
|
1141
|
-
* Equivalent to GLM's `glm::compMul`.
|
|
1142
|
-
*/
|
|
1143
|
-
function compMul(v) {
|
|
1144
|
-
return v[0] * v[1] * v[2] * v[3];
|
|
1145
|
-
}
|
|
1146
|
-
vec4.compMul = compMul;
|
|
1147
|
-
/**
|
|
1148
|
-
* Returns whether or not the vectors have exactly the same elements in the same position (when compared with `===`)
|
|
1149
|
-
*
|
|
1150
|
-
* @shorthands
|
|
1151
|
-
* - {@link eq}
|
|
1152
|
-
*/
|
|
1153
|
-
function exactEquals(a, b) {
|
|
1154
|
-
return a[0] === b[0] && a[1] === b[1] && a[2] === b[2] && a[3] === b[3];
|
|
1155
|
-
}
|
|
1156
|
-
vec4.exactEquals = exactEquals;
|
|
1157
|
-
/**
|
|
1158
|
-
* Alias for {@link exactEquals}
|
|
1159
|
-
* @category Shorthands
|
|
1160
|
-
*/
|
|
1161
|
-
vec4.eq = exactEquals;
|
|
1162
|
-
/**
|
|
1163
|
-
* Returns whether or not the vectors have approximately the same elements in the same position.
|
|
1164
|
-
*
|
|
1165
|
-
* @shorthands
|
|
1166
|
-
* - {@link approx}
|
|
1167
|
-
* - {@link equals}
|
|
1168
|
-
*/
|
|
1169
|
-
function approxEquals(a, b) {
|
|
1170
|
-
const [a0, a1, a2, a3] = a;
|
|
1171
|
-
const [b0, b1, b2, b3] = b;
|
|
1172
|
-
return (Math.abs(a0 - b0) <=
|
|
1173
|
-
Common.EPSILON * Math.max(1, Math.abs(a0), Math.abs(b0)) &&
|
|
1174
|
-
Math.abs(a1 - b1) <=
|
|
1175
|
-
Common.EPSILON * Math.max(1, Math.abs(a1), Math.abs(b1)) &&
|
|
1176
|
-
Math.abs(a2 - b2) <=
|
|
1177
|
-
Common.EPSILON * Math.max(1, Math.abs(a2), Math.abs(b2)) &&
|
|
1178
|
-
Math.abs(a3 - b3) <=
|
|
1179
|
-
Common.EPSILON * Math.max(1, Math.abs(a3), Math.abs(b3)));
|
|
1180
|
-
}
|
|
1181
|
-
vec4.approxEquals = approxEquals;
|
|
1182
|
-
/**
|
|
1183
|
-
* Alias for {@link approxEquals}
|
|
1184
|
-
* @category Shorthands
|
|
1185
|
-
*/
|
|
1186
|
-
vec4.approx = approxEquals;
|
|
1187
|
-
/**
|
|
1188
|
-
* Alias for {@link approxEquals}. This is provided for compatibility with gl-matrix.
|
|
1189
|
-
* @category Shorthands
|
|
1190
|
-
* @deprecated Use {@link approxEquals} instead
|
|
1191
|
-
*/
|
|
1192
|
-
vec4.equals = approxEquals;
|
|
1193
|
-
/**
|
|
1194
|
-
* Returns the string representation of a vec4
|
|
1195
|
-
* @param v vector to represent as a string
|
|
1196
|
-
* @param fractionDigits number of digits to appear after the decimal point
|
|
1197
|
-
*/
|
|
1198
|
-
vec4.toString = Common.vecToString;
|
|
1199
|
-
})(vec4 || (exports.vec4 = vec4 = {}));
|
|
1200
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVjNC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZWM0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGlEQUFrQztBQUdsQyxxQ0FBK0I7QUFRL0I7OztHQUdHO0FBQ0gsSUFBaUIsSUFBSSxDQW1zQ3BCO0FBbnNDRCxXQUFpQixJQUFJO0lBT3BCOzs7T0FHRztJQUNILFNBQWdCLEVBQUUsQ0FBQyxDQUFTLEVBQUUsQ0FBVSxFQUFFLENBQVUsRUFBRSxDQUFVO1FBQy9ELElBQUksQ0FBQyxLQUFLLFNBQVMsSUFBSSxDQUFDLEtBQUssU0FBUyxJQUFJLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMzRCxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDZCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDMUIsSUFBSSxDQUFDLEtBQUssU0FBUztZQUFFLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFMUIsT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3BCLENBQUM7SUFUZSxPQUFFLEtBU2pCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNkLENBQUM7SUFGZSxVQUFLLFFBRXBCLENBQUE7SUFFRDs7T0FFRztJQUNVLFNBQUksR0FBUyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVyRDs7T0FFRztJQUNVLFFBQUcsR0FBUyxNQUFN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RCxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0MsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUMzQyxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQzNDLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDM0MsT0FBTyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLENBQUMs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QUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFGZSxTQUFJLE9BRW5CLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPO1lBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDN0MsQ0FBQTtJQUNGLENBQUM7SUFQZSxVQUFLLFFBT3BCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixLQUFLLENBQUMsQ0FBTztRQUM1QixPQUFPLEtB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QWdCLEdBQUcsQ0FBQyxDQUFPLEVBQUUsQ0FBTztRQUNuQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDN0QsQ0FBQztJQUZlLFFBQUcsTUFFbEIsQ0FBQTtJQUVEOztPQUVHO0lBQ0gsU0FBZ0IsS0FBSyxDQUFDLENBQU8sRUFBRSxDQUFPLEVBQUUsQ0FBTztRQUM5QyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ25DLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNuQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxD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
|