three-nebula 11.0.0 → 11.1.1
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/CHANGELOG.md +16 -0
- package/dist/three-nebula.cjs +109 -0
- package/dist/three-nebula.cjs.map +1 -0
- package/dist/three-nebula.mjs +2969 -0
- package/dist/three-nebula.mjs.map +1 -0
- package/dist/three-nebula.umd.js +109 -0
- package/dist/three-nebula.umd.js.map +1 -0
- package/package.json +23 -47
- package/specs/01-emitter-hierarchy.md +200 -0
- package/specs/02-determinism-scrubbing.md +188 -0
- package/specs/03-sound-renderer.md +183 -0
- package/specs/04-schema-versioning.md +140 -0
- package/specs/05-content-addressed-assets.md +288 -0
- package/specs/README.md +80 -0
- package/build/cjs/behaviour/Alpha.js +0 -189
- package/build/cjs/behaviour/Attraction.js +0 -189
- package/build/cjs/behaviour/Behaviour.js +0 -253
- package/build/cjs/behaviour/Collision.js +0 -146
- package/build/cjs/behaviour/Color.js +0 -148
- package/build/cjs/behaviour/CrossZone.js +0 -141
- package/build/cjs/behaviour/Force.js +0 -126
- package/build/cjs/behaviour/Gravity.js +0 -78
- package/build/cjs/behaviour/RandomDrift.js +0 -153
- package/build/cjs/behaviour/Repulsion.js +0 -123
- package/build/cjs/behaviour/Rotate.js +0 -265
- package/build/cjs/behaviour/Scale.js +0 -177
- package/build/cjs/behaviour/Spring.js +0 -133
- package/build/cjs/behaviour/constants.js +0 -28
- package/build/cjs/behaviour/index.js +0 -112
- package/build/cjs/behaviour/types.js +0 -33
- package/build/cjs/constants/index.js +0 -61
- package/build/cjs/core/Particle.js +0 -390
- package/build/cjs/core/Pool.js +0 -203
- package/build/cjs/core/System.js +0 -366
- package/build/cjs/core/constants.js +0 -163
- package/build/cjs/core/fromJSON.js +0 -128
- package/build/cjs/core/fromJSONAsync.js +0 -239
- package/build/cjs/core/index.js +0 -32
- package/build/cjs/core/three/Euler.js +0 -233
- package/build/cjs/core/three/Math.js +0 -91
- package/build/cjs/core/three/Matrix4.js +0 -745
- package/build/cjs/core/three/Quaternion.js +0 -451
- package/build/cjs/core/three/Vector3.js +0 -464
- package/build/cjs/core/three/constants.js +0 -298
- package/build/cjs/core/three/index.js +0 -48
- package/build/cjs/core/types.js +0 -13
- package/build/cjs/debug/Debug.js +0 -209
- package/build/cjs/debug/constants.js +0 -19
- package/build/cjs/debug/index.js +0 -24
- package/build/cjs/debug/log.js +0 -38
- package/build/cjs/ease/index.js +0 -149
- package/build/cjs/emitter/Emitter.js +0 -798
- package/build/cjs/emitter/FollowEmitter.js +0 -146
- package/build/cjs/emitter/constants.js +0 -20
- package/build/cjs/emitter/index.js +0 -24
- package/build/cjs/emitter/types.js +0 -11
- package/build/cjs/events/EventDispatcher.js +0 -105
- package/build/cjs/events/constants.js +0 -23
- package/build/cjs/events/index.js +0 -27
- package/build/cjs/index.js +0 -151
- package/build/cjs/initializer/Body.js +0 -122
- package/build/cjs/initializer/BodySprite.js +0 -146
- package/build/cjs/initializer/Initializer.js +0 -109
- package/build/cjs/initializer/InitializerUtil.js +0 -54
- package/build/cjs/initializer/Life.js +0 -106
- package/build/cjs/initializer/Mass.js +0 -101
- package/build/cjs/initializer/Position.js +0 -152
- package/build/cjs/initializer/Radius.js +0 -118
- package/build/cjs/initializer/Rate.js +0 -150
- package/build/cjs/initializer/Rotation.js +0 -95
- package/build/cjs/initializer/Texture.js +0 -139
- package/build/cjs/initializer/Velocity/PolarVelocity.js +0 -102
- package/build/cjs/initializer/Velocity/RadialVelocity.js +0 -111
- package/build/cjs/initializer/Velocity/VectorVelocity.js +0 -108
- package/build/cjs/initializer/Velocity/Velocity.js +0 -94
- package/build/cjs/initializer/Velocity/index.js +0 -32
- package/build/cjs/initializer/constants.js +0 -43
- package/build/cjs/initializer/index.js +0 -108
- package/build/cjs/initializer/types.js +0 -37
- package/build/cjs/math/ArraySpan.js +0 -103
- package/build/cjs/math/Box.js +0 -46
- package/build/cjs/math/ColorSpan.js +0 -113
- package/build/cjs/math/MathUtils.js +0 -57
- package/build/cjs/math/Polar3D.js +0 -115
- package/build/cjs/math/Span.js +0 -88
- package/build/cjs/math/Vector3D.js +0 -76
- package/build/cjs/math/constants.js +0 -35
- package/build/cjs/math/index.js +0 -122
- package/build/cjs/math/integration.js +0 -59
- package/build/cjs/math/types.js +0 -19
- package/build/cjs/renderer/BaseRenderer.js +0 -108
- package/build/cjs/renderer/CustomRenderer.js +0 -65
- package/build/cjs/renderer/GPURenderer/Desktop/index.js +0 -371
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -17
- package/build/cjs/renderer/GPURenderer/Mobile/index.js +0 -385
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -13
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -15
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -58
- package/build/cjs/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -93
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/TextureAtlas/index.js +0 -221
- package/build/cjs/renderer/GPURenderer/common/constants.js +0 -22
- package/build/cjs/renderer/GPURenderer/common/index.js +0 -38
- package/build/cjs/renderer/GPURenderer/common/shaders/constants.js +0 -9
- package/build/cjs/renderer/GPURenderer/common/stores/Target.js +0 -45
- package/build/cjs/renderer/GPURenderer/common/stores/UniqueList.js +0 -51
- package/build/cjs/renderer/GPURenderer/common/stores/index.js +0 -22
- package/build/cjs/renderer/GPURenderer/index.js +0 -97
- package/build/cjs/renderer/MeshRenderer.js +0 -136
- package/build/cjs/renderer/SpriteRenderer.js +0 -68
- package/build/cjs/renderer/index.js +0 -40
- package/build/cjs/renderer/types.js +0 -21
- package/build/cjs/utils/ColorUtil.js +0 -39
- package/build/cjs/utils/PUID.js +0 -26
- package/build/cjs/utils/THREEUtil.js +0 -40
- package/build/cjs/utils/Util.js +0 -69
- package/build/cjs/utils/index.js +0 -61
- package/build/cjs/utils/uid.js +0 -12
- package/build/cjs/zone/BoxZone.js +0 -178
- package/build/cjs/zone/LineZone.js +0 -101
- package/build/cjs/zone/MeshZone.js +0 -101
- package/build/cjs/zone/PointZone.js +0 -99
- package/build/cjs/zone/ScreenZone.js +0 -164
- package/build/cjs/zone/SphereZone.js +0 -155
- package/build/cjs/zone/Zone.js +0 -172
- package/build/cjs/zone/index.js +0 -56
- package/build/cjs/zone/types.js +0 -21
- package/build/esm/behaviour/Alpha.js +0 -134
- package/build/esm/behaviour/Attraction.js +0 -135
- package/build/esm/behaviour/Behaviour.js +0 -215
- package/build/esm/behaviour/Collision.js +0 -100
- package/build/esm/behaviour/Color.js +0 -101
- package/build/esm/behaviour/CrossZone.js +0 -82
- package/build/esm/behaviour/Force.js +0 -83
- package/build/esm/behaviour/Gravity.js +0 -40
- package/build/esm/behaviour/RandomDrift.js +0 -97
- package/build/esm/behaviour/Repulsion.js +0 -81
- package/build/esm/behaviour/Rotate.js +0 -214
- package/build/esm/behaviour/Scale.js +0 -131
- package/build/esm/behaviour/Spring.js +0 -90
- package/build/esm/behaviour/constants.js +0 -11
- package/build/esm/behaviour/index.js +0 -14
- package/build/esm/behaviour/types.js +0 -14
- package/build/esm/constants/index.js +0 -42
- package/build/esm/core/Particle.js +0 -357
- package/build/esm/core/Pool.js +0 -161
- package/build/esm/core/System.js +0 -320
- package/build/esm/core/constants.js +0 -127
- package/build/esm/core/fromJSON.js +0 -107
- package/build/esm/core/fromJSONAsync.js +0 -210
- package/build/esm/core/index.js +0 -4
- package/build/esm/core/three/Euler.js +0 -224
- package/build/esm/core/three/Math.js +0 -84
- package/build/esm/core/three/Matrix4.js +0 -739
- package/build/esm/core/three/Quaternion.js +0 -445
- package/build/esm/core/three/Vector3.js +0 -457
- package/build/esm/core/three/constants.js +0 -148
- package/build/esm/core/three/index.js +0 -5
- package/build/esm/core/types.js +0 -4
- package/build/esm/debug/Debug.js +0 -195
- package/build/esm/debug/constants.js +0 -7
- package/build/esm/debug/index.js +0 -3
- package/build/esm/debug/log.js +0 -31
- package/build/esm/ease/index.js +0 -113
- package/build/esm/emitter/Emitter.js +0 -708
- package/build/esm/emitter/FollowEmitter.js +0 -97
- package/build/esm/emitter/constants.js +0 -7
- package/build/esm/emitter/index.js +0 -3
- package/build/esm/emitter/types.js +0 -3
- package/build/esm/events/EventDispatcher.js +0 -82
- package/build/esm/events/constants.js +0 -9
- package/build/esm/events/index.js +0 -4
- package/build/esm/index.js +0 -13
- package/build/esm/initializer/Body.js +0 -83
- package/build/esm/initializer/BodySprite.js +0 -108
- package/build/esm/initializer/Initializer.js +0 -84
- package/build/esm/initializer/InitializerUtil.js +0 -48
- package/build/esm/initializer/Life.js +0 -66
- package/build/esm/initializer/Mass.js +0 -60
- package/build/esm/initializer/Position.js +0 -98
- package/build/esm/initializer/Radius.js +0 -75
- package/build/esm/initializer/Rate.js +0 -107
- package/build/esm/initializer/Rotation.js +0 -54
- package/build/esm/initializer/Texture.js +0 -101
- package/build/esm/initializer/Velocity/PolarVelocity.js +0 -63
- package/build/esm/initializer/Velocity/RadialVelocity.js +0 -72
- package/build/esm/initializer/Velocity/VectorVelocity.js +0 -69
- package/build/esm/initializer/Velocity/Velocity.js +0 -52
- package/build/esm/initializer/Velocity/index.js +0 -4
- package/build/esm/initializer/constants.js +0 -26
- package/build/esm/initializer/index.js +0 -12
- package/build/esm/initializer/types.js +0 -16
- package/build/esm/math/ArraySpan.js +0 -62
- package/build/esm/math/Box.js +0 -25
- package/build/esm/math/ColorSpan.js +0 -71
- package/build/esm/math/MathUtils.js +0 -48
- package/build/esm/math/Polar3D.js +0 -81
- package/build/esm/math/Span.js +0 -63
- package/build/esm/math/Vector3D.js +0 -34
- package/build/esm/math/constants.js +0 -24
- package/build/esm/math/index.js +0 -10
- package/build/esm/math/integration.js +0 -47
- package/build/esm/math/types.js +0 -7
- package/build/esm/renderer/BaseRenderer.js +0 -78
- package/build/esm/renderer/CustomRenderer.js +0 -23
- package/build/esm/renderer/GPURenderer/Desktop/index.js +0 -357
- package/build/esm/renderer/GPURenderer/Desktop/shaders/fragmentShader.js +0 -30
- package/build/esm/renderer/GPURenderer/Desktop/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Desktop/shaders/vertexShader.js +0 -36
- package/build/esm/renderer/GPURenderer/Mobile/index.js +0 -375
- package/build/esm/renderer/GPURenderer/Mobile/shaders/fragmentShader.js +0 -27
- package/build/esm/renderer/GPURenderer/Mobile/shaders/index.js +0 -3
- package/build/esm/renderer/GPURenderer/Mobile/shaders/vertexShader.js +0 -33
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/constants.js +0 -30
- package/build/esm/renderer/GPURenderer/common/ParticleBuffer/index.js +0 -70
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/TextureAtlas/index.js +0 -206
- package/build/esm/renderer/GPURenderer/common/constants.js +0 -13
- package/build/esm/renderer/GPURenderer/common/index.js +0 -4
- package/build/esm/renderer/GPURenderer/common/shaders/constants.js +0 -2
- package/build/esm/renderer/GPURenderer/common/stores/Target.js +0 -26
- package/build/esm/renderer/GPURenderer/common/stores/UniqueList.js +0 -29
- package/build/esm/renderer/GPURenderer/common/stores/index.js +0 -3
- package/build/esm/renderer/GPURenderer/index.js +0 -57
- package/build/esm/renderer/MeshRenderer.js +0 -93
- package/build/esm/renderer/SpriteRenderer.js +0 -30
- package/build/esm/renderer/index.js +0 -5
- package/build/esm/renderer/types.js +0 -8
- package/build/esm/utils/ColorUtil.js +0 -32
- package/build/esm/utils/PUID.js +0 -19
- package/build/esm/utils/THREEUtil.js +0 -31
- package/build/esm/utils/Util.js +0 -60
- package/build/esm/utils/index.js +0 -13
- package/build/esm/utils/uid.js +0 -3
- package/build/esm/zone/BoxZone.js +0 -133
- package/build/esm/zone/LineZone.js +0 -61
- package/build/esm/zone/MeshZone.js +0 -60
- package/build/esm/zone/PointZone.js +0 -59
- package/build/esm/zone/ScreenZone.js +0 -116
- package/build/esm/zone/SphereZone.js +0 -113
- package/build/esm/zone/Zone.js +0 -141
- package/build/esm/zone/index.js +0 -7
- package/build/esm/zone/types.js +0 -8
- package/build/three-nebula.js +0 -2
- package/build/three-nebula.js.map +0 -1
|
@@ -1,745 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.Matrix4 = Matrix4;
|
|
7
|
-
|
|
8
|
-
var _Vector = require("./Vector3.js");
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* @author mrdoob / http://mrdoob.com/
|
|
12
|
-
* @author supereggbert / http://www.paulbrunt.co.uk/
|
|
13
|
-
* @author philogb / http://blog.thejit.org/
|
|
14
|
-
* @author jordi_ros / http://plattsoft.com
|
|
15
|
-
* @author D1plo1d / http://github.com/D1plo1d
|
|
16
|
-
* @author alteredq / http://alteredqualia.com/
|
|
17
|
-
* @author mikael emtinger / http://gomo.se/
|
|
18
|
-
* @author timknip / http://www.floorplanner.com/
|
|
19
|
-
* @author bhouston / http://clara.io
|
|
20
|
-
* @author WestLangley / http://github.com/WestLangley
|
|
21
|
-
*/
|
|
22
|
-
function Matrix4() {
|
|
23
|
-
this.elements = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
|
|
24
|
-
|
|
25
|
-
if (arguments.length > 0) {
|
|
26
|
-
console.error('THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.');
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
Object.assign(Matrix4.prototype, {
|
|
31
|
-
isMatrix4: true,
|
|
32
|
-
set: function set(n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44) {
|
|
33
|
-
var te = this.elements;
|
|
34
|
-
te[0] = n11;
|
|
35
|
-
te[4] = n12;
|
|
36
|
-
te[8] = n13;
|
|
37
|
-
te[12] = n14;
|
|
38
|
-
te[1] = n21;
|
|
39
|
-
te[5] = n22;
|
|
40
|
-
te[9] = n23;
|
|
41
|
-
te[13] = n24;
|
|
42
|
-
te[2] = n31;
|
|
43
|
-
te[6] = n32;
|
|
44
|
-
te[10] = n33;
|
|
45
|
-
te[14] = n34;
|
|
46
|
-
te[3] = n41;
|
|
47
|
-
te[7] = n42;
|
|
48
|
-
te[11] = n43;
|
|
49
|
-
te[15] = n44;
|
|
50
|
-
return this;
|
|
51
|
-
},
|
|
52
|
-
identity: function identity() {
|
|
53
|
-
this.set(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
54
|
-
return this;
|
|
55
|
-
},
|
|
56
|
-
clone: function clone() {
|
|
57
|
-
return new Matrix4().fromArray(this.elements);
|
|
58
|
-
},
|
|
59
|
-
copy: function copy(m) {
|
|
60
|
-
var te = this.elements;
|
|
61
|
-
var me = m.elements;
|
|
62
|
-
te[0] = me[0];
|
|
63
|
-
te[1] = me[1];
|
|
64
|
-
te[2] = me[2];
|
|
65
|
-
te[3] = me[3];
|
|
66
|
-
te[4] = me[4];
|
|
67
|
-
te[5] = me[5];
|
|
68
|
-
te[6] = me[6];
|
|
69
|
-
te[7] = me[7];
|
|
70
|
-
te[8] = me[8];
|
|
71
|
-
te[9] = me[9];
|
|
72
|
-
te[10] = me[10];
|
|
73
|
-
te[11] = me[11];
|
|
74
|
-
te[12] = me[12];
|
|
75
|
-
te[13] = me[13];
|
|
76
|
-
te[14] = me[14];
|
|
77
|
-
te[15] = me[15];
|
|
78
|
-
return this;
|
|
79
|
-
},
|
|
80
|
-
copyPosition: function copyPosition(m) {
|
|
81
|
-
var te = this.elements,
|
|
82
|
-
me = m.elements;
|
|
83
|
-
te[12] = me[12];
|
|
84
|
-
te[13] = me[13];
|
|
85
|
-
te[14] = me[14];
|
|
86
|
-
return this;
|
|
87
|
-
},
|
|
88
|
-
extractBasis: function extractBasis(xAxis, yAxis, zAxis) {
|
|
89
|
-
xAxis.setFromMatrixColumn(this, 0);
|
|
90
|
-
yAxis.setFromMatrixColumn(this, 1);
|
|
91
|
-
zAxis.setFromMatrixColumn(this, 2);
|
|
92
|
-
return this;
|
|
93
|
-
},
|
|
94
|
-
makeBasis: function makeBasis(xAxis, yAxis, zAxis) {
|
|
95
|
-
this.set(xAxis.x, yAxis.x, zAxis.x, 0, xAxis.y, yAxis.y, zAxis.y, 0, xAxis.z, yAxis.z, zAxis.z, 0, 0, 0, 0, 1);
|
|
96
|
-
return this;
|
|
97
|
-
},
|
|
98
|
-
extractRotation: function () {
|
|
99
|
-
var v1 = new _Vector.Vector3();
|
|
100
|
-
return function extractRotation(m) {
|
|
101
|
-
// this method does not support reflection matrices
|
|
102
|
-
var te = this.elements;
|
|
103
|
-
var me = m.elements;
|
|
104
|
-
var scaleX = 1 / v1.setFromMatrixColumn(m, 0).length();
|
|
105
|
-
var scaleY = 1 / v1.setFromMatrixColumn(m, 1).length();
|
|
106
|
-
var scaleZ = 1 / v1.setFromMatrixColumn(m, 2).length();
|
|
107
|
-
te[0] = me[0] * scaleX;
|
|
108
|
-
te[1] = me[1] * scaleX;
|
|
109
|
-
te[2] = me[2] * scaleX;
|
|
110
|
-
te[3] = 0;
|
|
111
|
-
te[4] = me[4] * scaleY;
|
|
112
|
-
te[5] = me[5] * scaleY;
|
|
113
|
-
te[6] = me[6] * scaleY;
|
|
114
|
-
te[7] = 0;
|
|
115
|
-
te[8] = me[8] * scaleZ;
|
|
116
|
-
te[9] = me[9] * scaleZ;
|
|
117
|
-
te[10] = me[10] * scaleZ;
|
|
118
|
-
te[11] = 0;
|
|
119
|
-
te[12] = 0;
|
|
120
|
-
te[13] = 0;
|
|
121
|
-
te[14] = 0;
|
|
122
|
-
te[15] = 1;
|
|
123
|
-
return this;
|
|
124
|
-
};
|
|
125
|
-
}(),
|
|
126
|
-
makeRotationFromEuler: function makeRotationFromEuler(euler) {
|
|
127
|
-
if (!(euler && euler.isEuler)) {
|
|
128
|
-
console.error('THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.');
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
var te = this.elements;
|
|
132
|
-
var x = euler.x,
|
|
133
|
-
y = euler.y,
|
|
134
|
-
z = euler.z;
|
|
135
|
-
var a = Math.cos(x),
|
|
136
|
-
b = Math.sin(x);
|
|
137
|
-
var c = Math.cos(y),
|
|
138
|
-
d = Math.sin(y);
|
|
139
|
-
var e = Math.cos(z),
|
|
140
|
-
f = Math.sin(z);
|
|
141
|
-
|
|
142
|
-
if (euler.order === 'XYZ') {
|
|
143
|
-
var ae = a * e,
|
|
144
|
-
af = a * f,
|
|
145
|
-
be = b * e,
|
|
146
|
-
bf = b * f;
|
|
147
|
-
te[0] = c * e;
|
|
148
|
-
te[4] = -c * f;
|
|
149
|
-
te[8] = d;
|
|
150
|
-
te[1] = af + be * d;
|
|
151
|
-
te[5] = ae - bf * d;
|
|
152
|
-
te[9] = -b * c;
|
|
153
|
-
te[2] = bf - ae * d;
|
|
154
|
-
te[6] = be + af * d;
|
|
155
|
-
te[10] = a * c;
|
|
156
|
-
} else if (euler.order === 'YXZ') {
|
|
157
|
-
var ce = c * e,
|
|
158
|
-
cf = c * f,
|
|
159
|
-
de = d * e,
|
|
160
|
-
df = d * f;
|
|
161
|
-
te[0] = ce + df * b;
|
|
162
|
-
te[4] = de * b - cf;
|
|
163
|
-
te[8] = a * d;
|
|
164
|
-
te[1] = a * f;
|
|
165
|
-
te[5] = a * e;
|
|
166
|
-
te[9] = -b;
|
|
167
|
-
te[2] = cf * b - de;
|
|
168
|
-
te[6] = df + ce * b;
|
|
169
|
-
te[10] = a * c;
|
|
170
|
-
} else if (euler.order === 'ZXY') {
|
|
171
|
-
var ce = c * e,
|
|
172
|
-
cf = c * f,
|
|
173
|
-
de = d * e,
|
|
174
|
-
df = d * f;
|
|
175
|
-
te[0] = ce - df * b;
|
|
176
|
-
te[4] = -a * f;
|
|
177
|
-
te[8] = de + cf * b;
|
|
178
|
-
te[1] = cf + de * b;
|
|
179
|
-
te[5] = a * e;
|
|
180
|
-
te[9] = df - ce * b;
|
|
181
|
-
te[2] = -a * d;
|
|
182
|
-
te[6] = b;
|
|
183
|
-
te[10] = a * c;
|
|
184
|
-
} else if (euler.order === 'ZYX') {
|
|
185
|
-
var ae = a * e,
|
|
186
|
-
af = a * f,
|
|
187
|
-
be = b * e,
|
|
188
|
-
bf = b * f;
|
|
189
|
-
te[0] = c * e;
|
|
190
|
-
te[4] = be * d - af;
|
|
191
|
-
te[8] = ae * d + bf;
|
|
192
|
-
te[1] = c * f;
|
|
193
|
-
te[5] = bf * d + ae;
|
|
194
|
-
te[9] = af * d - be;
|
|
195
|
-
te[2] = -d;
|
|
196
|
-
te[6] = b * c;
|
|
197
|
-
te[10] = a * c;
|
|
198
|
-
} else if (euler.order === 'YZX') {
|
|
199
|
-
var ac = a * c,
|
|
200
|
-
ad = a * d,
|
|
201
|
-
bc = b * c,
|
|
202
|
-
bd = b * d;
|
|
203
|
-
te[0] = c * e;
|
|
204
|
-
te[4] = bd - ac * f;
|
|
205
|
-
te[8] = bc * f + ad;
|
|
206
|
-
te[1] = f;
|
|
207
|
-
te[5] = a * e;
|
|
208
|
-
te[9] = -b * e;
|
|
209
|
-
te[2] = -d * e;
|
|
210
|
-
te[6] = ad * f + bc;
|
|
211
|
-
te[10] = ac - bd * f;
|
|
212
|
-
} else if (euler.order === 'XZY') {
|
|
213
|
-
var ac = a * c,
|
|
214
|
-
ad = a * d,
|
|
215
|
-
bc = b * c,
|
|
216
|
-
bd = b * d;
|
|
217
|
-
te[0] = c * e;
|
|
218
|
-
te[4] = -f;
|
|
219
|
-
te[8] = d * e;
|
|
220
|
-
te[1] = ac * f + bd;
|
|
221
|
-
te[5] = a * e;
|
|
222
|
-
te[9] = ad * f - bc;
|
|
223
|
-
te[2] = bc * f - ad;
|
|
224
|
-
te[6] = b * e;
|
|
225
|
-
te[10] = bd * f + ac;
|
|
226
|
-
} // bottom row
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
te[3] = 0;
|
|
230
|
-
te[7] = 0;
|
|
231
|
-
te[11] = 0; // last column
|
|
232
|
-
|
|
233
|
-
te[12] = 0;
|
|
234
|
-
te[13] = 0;
|
|
235
|
-
te[14] = 0;
|
|
236
|
-
te[15] = 1;
|
|
237
|
-
return this;
|
|
238
|
-
},
|
|
239
|
-
makeRotationFromQuaternion: function () {
|
|
240
|
-
var zero = new _Vector.Vector3(0, 0, 0);
|
|
241
|
-
var one = new _Vector.Vector3(1, 1, 1);
|
|
242
|
-
return function makeRotationFromQuaternion(q) {
|
|
243
|
-
return this.compose(zero, q, one);
|
|
244
|
-
};
|
|
245
|
-
}(),
|
|
246
|
-
lookAt: function () {
|
|
247
|
-
var x = new _Vector.Vector3();
|
|
248
|
-
var y = new _Vector.Vector3();
|
|
249
|
-
var z = new _Vector.Vector3();
|
|
250
|
-
return function lookAt(eye, target, up) {
|
|
251
|
-
var te = this.elements;
|
|
252
|
-
z.subVectors(eye, target);
|
|
253
|
-
|
|
254
|
-
if (z.lengthSq() === 0) {
|
|
255
|
-
// eye and target are in the same position
|
|
256
|
-
z.z = 1;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
z.normalize();
|
|
260
|
-
x.crossVectors(up, z);
|
|
261
|
-
|
|
262
|
-
if (x.lengthSq() === 0) {
|
|
263
|
-
// up and z are parallel
|
|
264
|
-
if (Math.abs(up.z) === 1) {
|
|
265
|
-
z.x += 0.0001;
|
|
266
|
-
} else {
|
|
267
|
-
z.z += 0.0001;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
z.normalize();
|
|
271
|
-
x.crossVectors(up, z);
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
x.normalize();
|
|
275
|
-
y.crossVectors(z, x);
|
|
276
|
-
te[0] = x.x;
|
|
277
|
-
te[4] = y.x;
|
|
278
|
-
te[8] = z.x;
|
|
279
|
-
te[1] = x.y;
|
|
280
|
-
te[5] = y.y;
|
|
281
|
-
te[9] = z.y;
|
|
282
|
-
te[2] = x.z;
|
|
283
|
-
te[6] = y.z;
|
|
284
|
-
te[10] = z.z;
|
|
285
|
-
return this;
|
|
286
|
-
};
|
|
287
|
-
}(),
|
|
288
|
-
multiply: function multiply(m, n) {
|
|
289
|
-
if (n !== undefined) {
|
|
290
|
-
console.warn('THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.');
|
|
291
|
-
return this.multiplyMatrices(m, n);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return this.multiplyMatrices(this, m);
|
|
295
|
-
},
|
|
296
|
-
premultiply: function premultiply(m) {
|
|
297
|
-
return this.multiplyMatrices(m, this);
|
|
298
|
-
},
|
|
299
|
-
multiplyMatrices: function multiplyMatrices(a, b) {
|
|
300
|
-
var ae = a.elements;
|
|
301
|
-
var be = b.elements;
|
|
302
|
-
var te = this.elements;
|
|
303
|
-
var a11 = ae[0],
|
|
304
|
-
a12 = ae[4],
|
|
305
|
-
a13 = ae[8],
|
|
306
|
-
a14 = ae[12];
|
|
307
|
-
var a21 = ae[1],
|
|
308
|
-
a22 = ae[5],
|
|
309
|
-
a23 = ae[9],
|
|
310
|
-
a24 = ae[13];
|
|
311
|
-
var a31 = ae[2],
|
|
312
|
-
a32 = ae[6],
|
|
313
|
-
a33 = ae[10],
|
|
314
|
-
a34 = ae[14];
|
|
315
|
-
var a41 = ae[3],
|
|
316
|
-
a42 = ae[7],
|
|
317
|
-
a43 = ae[11],
|
|
318
|
-
a44 = ae[15];
|
|
319
|
-
var b11 = be[0],
|
|
320
|
-
b12 = be[4],
|
|
321
|
-
b13 = be[8],
|
|
322
|
-
b14 = be[12];
|
|
323
|
-
var b21 = be[1],
|
|
324
|
-
b22 = be[5],
|
|
325
|
-
b23 = be[9],
|
|
326
|
-
b24 = be[13];
|
|
327
|
-
var b31 = be[2],
|
|
328
|
-
b32 = be[6],
|
|
329
|
-
b33 = be[10],
|
|
330
|
-
b34 = be[14];
|
|
331
|
-
var b41 = be[3],
|
|
332
|
-
b42 = be[7],
|
|
333
|
-
b43 = be[11],
|
|
334
|
-
b44 = be[15];
|
|
335
|
-
te[0] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
|
|
336
|
-
te[4] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
|
|
337
|
-
te[8] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
|
|
338
|
-
te[12] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;
|
|
339
|
-
te[1] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
|
|
340
|
-
te[5] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
|
|
341
|
-
te[9] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
|
|
342
|
-
te[13] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;
|
|
343
|
-
te[2] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
|
|
344
|
-
te[6] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
|
|
345
|
-
te[10] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
|
|
346
|
-
te[14] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;
|
|
347
|
-
te[3] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
|
|
348
|
-
te[7] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
|
|
349
|
-
te[11] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
|
|
350
|
-
te[15] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
|
|
351
|
-
return this;
|
|
352
|
-
},
|
|
353
|
-
multiplyScalar: function multiplyScalar(s) {
|
|
354
|
-
var te = this.elements;
|
|
355
|
-
te[0] *= s;
|
|
356
|
-
te[4] *= s;
|
|
357
|
-
te[8] *= s;
|
|
358
|
-
te[12] *= s;
|
|
359
|
-
te[1] *= s;
|
|
360
|
-
te[5] *= s;
|
|
361
|
-
te[9] *= s;
|
|
362
|
-
te[13] *= s;
|
|
363
|
-
te[2] *= s;
|
|
364
|
-
te[6] *= s;
|
|
365
|
-
te[10] *= s;
|
|
366
|
-
te[14] *= s;
|
|
367
|
-
te[3] *= s;
|
|
368
|
-
te[7] *= s;
|
|
369
|
-
te[11] *= s;
|
|
370
|
-
te[15] *= s;
|
|
371
|
-
return this;
|
|
372
|
-
},
|
|
373
|
-
applyToBufferAttribute: function () {
|
|
374
|
-
var v1 = new _Vector.Vector3();
|
|
375
|
-
return function applyToBufferAttribute(attribute) {
|
|
376
|
-
for (var i = 0, l = attribute.count; i < l; i++) {
|
|
377
|
-
v1.x = attribute.getX(i);
|
|
378
|
-
v1.y = attribute.getY(i);
|
|
379
|
-
v1.z = attribute.getZ(i);
|
|
380
|
-
v1.applyMatrix4(this);
|
|
381
|
-
attribute.setXYZ(i, v1.x, v1.y, v1.z);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
return attribute;
|
|
385
|
-
};
|
|
386
|
-
}(),
|
|
387
|
-
determinant: function determinant() {
|
|
388
|
-
var te = this.elements;
|
|
389
|
-
var n11 = te[0],
|
|
390
|
-
n12 = te[4],
|
|
391
|
-
n13 = te[8],
|
|
392
|
-
n14 = te[12];
|
|
393
|
-
var n21 = te[1],
|
|
394
|
-
n22 = te[5],
|
|
395
|
-
n23 = te[9],
|
|
396
|
-
n24 = te[13];
|
|
397
|
-
var n31 = te[2],
|
|
398
|
-
n32 = te[6],
|
|
399
|
-
n33 = te[10],
|
|
400
|
-
n34 = te[14];
|
|
401
|
-
var n41 = te[3],
|
|
402
|
-
n42 = te[7],
|
|
403
|
-
n43 = te[11],
|
|
404
|
-
n44 = te[15]; //TODO: make this more efficient
|
|
405
|
-
//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
|
|
406
|
-
|
|
407
|
-
return n41 * (+n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34) + n42 * (+n11 * n23 * n34 - n11 * n24 * n33 + n14 * n21 * n33 - n13 * n21 * n34 + n13 * n24 * n31 - n14 * n23 * n31) + n43 * (+n11 * n24 * n32 - n11 * n22 * n34 - n14 * n21 * n32 + n12 * n21 * n34 + n14 * n22 * n31 - n12 * n24 * n31) + n44 * (-n13 * n22 * n31 - n11 * n23 * n32 + n11 * n22 * n33 + n13 * n21 * n32 - n12 * n21 * n33 + n12 * n23 * n31);
|
|
408
|
-
},
|
|
409
|
-
transpose: function transpose() {
|
|
410
|
-
var te = this.elements;
|
|
411
|
-
var tmp;
|
|
412
|
-
tmp = te[1];
|
|
413
|
-
te[1] = te[4];
|
|
414
|
-
te[4] = tmp;
|
|
415
|
-
tmp = te[2];
|
|
416
|
-
te[2] = te[8];
|
|
417
|
-
te[8] = tmp;
|
|
418
|
-
tmp = te[6];
|
|
419
|
-
te[6] = te[9];
|
|
420
|
-
te[9] = tmp;
|
|
421
|
-
tmp = te[3];
|
|
422
|
-
te[3] = te[12];
|
|
423
|
-
te[12] = tmp;
|
|
424
|
-
tmp = te[7];
|
|
425
|
-
te[7] = te[13];
|
|
426
|
-
te[13] = tmp;
|
|
427
|
-
tmp = te[11];
|
|
428
|
-
te[11] = te[14];
|
|
429
|
-
te[14] = tmp;
|
|
430
|
-
return this;
|
|
431
|
-
},
|
|
432
|
-
setPosition: function setPosition(x, y, z) {
|
|
433
|
-
var te = this.elements;
|
|
434
|
-
|
|
435
|
-
if (x.isVector3) {
|
|
436
|
-
te[12] = x.x;
|
|
437
|
-
te[13] = x.y;
|
|
438
|
-
te[14] = x.z;
|
|
439
|
-
} else {
|
|
440
|
-
te[12] = x;
|
|
441
|
-
te[13] = y;
|
|
442
|
-
te[14] = z;
|
|
443
|
-
}
|
|
444
|
-
|
|
445
|
-
return this;
|
|
446
|
-
},
|
|
447
|
-
getInverse: function getInverse(m, throwOnDegenerate) {
|
|
448
|
-
// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
|
|
449
|
-
var te = this.elements,
|
|
450
|
-
me = m.elements,
|
|
451
|
-
n11 = me[0],
|
|
452
|
-
n21 = me[1],
|
|
453
|
-
n31 = me[2],
|
|
454
|
-
n41 = me[3],
|
|
455
|
-
n12 = me[4],
|
|
456
|
-
n22 = me[5],
|
|
457
|
-
n32 = me[6],
|
|
458
|
-
n42 = me[7],
|
|
459
|
-
n13 = me[8],
|
|
460
|
-
n23 = me[9],
|
|
461
|
-
n33 = me[10],
|
|
462
|
-
n43 = me[11],
|
|
463
|
-
n14 = me[12],
|
|
464
|
-
n24 = me[13],
|
|
465
|
-
n34 = me[14],
|
|
466
|
-
n44 = me[15],
|
|
467
|
-
t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,
|
|
468
|
-
t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,
|
|
469
|
-
t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,
|
|
470
|
-
t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
|
|
471
|
-
var det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
|
|
472
|
-
|
|
473
|
-
if (det === 0) {
|
|
474
|
-
var msg = "THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0";
|
|
475
|
-
|
|
476
|
-
if (throwOnDegenerate === true) {
|
|
477
|
-
throw new Error(msg);
|
|
478
|
-
} else {
|
|
479
|
-
console.warn(msg);
|
|
480
|
-
}
|
|
481
|
-
|
|
482
|
-
return this.identity();
|
|
483
|
-
}
|
|
484
|
-
|
|
485
|
-
var detInv = 1 / det;
|
|
486
|
-
te[0] = t11 * detInv;
|
|
487
|
-
te[1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * detInv;
|
|
488
|
-
te[2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * detInv;
|
|
489
|
-
te[3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * detInv;
|
|
490
|
-
te[4] = t12 * detInv;
|
|
491
|
-
te[5] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * detInv;
|
|
492
|
-
te[6] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * detInv;
|
|
493
|
-
te[7] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * detInv;
|
|
494
|
-
te[8] = t13 * detInv;
|
|
495
|
-
te[9] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * detInv;
|
|
496
|
-
te[10] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * detInv;
|
|
497
|
-
te[11] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * detInv;
|
|
498
|
-
te[12] = t14 * detInv;
|
|
499
|
-
te[13] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * detInv;
|
|
500
|
-
te[14] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * detInv;
|
|
501
|
-
te[15] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * detInv;
|
|
502
|
-
return this;
|
|
503
|
-
},
|
|
504
|
-
scale: function scale(v) {
|
|
505
|
-
var te = this.elements;
|
|
506
|
-
var x = v.x,
|
|
507
|
-
y = v.y,
|
|
508
|
-
z = v.z;
|
|
509
|
-
te[0] *= x;
|
|
510
|
-
te[4] *= y;
|
|
511
|
-
te[8] *= z;
|
|
512
|
-
te[1] *= x;
|
|
513
|
-
te[5] *= y;
|
|
514
|
-
te[9] *= z;
|
|
515
|
-
te[2] *= x;
|
|
516
|
-
te[6] *= y;
|
|
517
|
-
te[10] *= z;
|
|
518
|
-
te[3] *= x;
|
|
519
|
-
te[7] *= y;
|
|
520
|
-
te[11] *= z;
|
|
521
|
-
return this;
|
|
522
|
-
},
|
|
523
|
-
getMaxScaleOnAxis: function getMaxScaleOnAxis() {
|
|
524
|
-
var te = this.elements;
|
|
525
|
-
var scaleXSq = te[0] * te[0] + te[1] * te[1] + te[2] * te[2];
|
|
526
|
-
var scaleYSq = te[4] * te[4] + te[5] * te[5] + te[6] * te[6];
|
|
527
|
-
var scaleZSq = te[8] * te[8] + te[9] * te[9] + te[10] * te[10];
|
|
528
|
-
return Math.sqrt(Math.max(scaleXSq, scaleYSq, scaleZSq));
|
|
529
|
-
},
|
|
530
|
-
makeTranslation: function makeTranslation(x, y, z) {
|
|
531
|
-
this.set(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);
|
|
532
|
-
return this;
|
|
533
|
-
},
|
|
534
|
-
makeRotationX: function makeRotationX(theta) {
|
|
535
|
-
var c = Math.cos(theta),
|
|
536
|
-
s = Math.sin(theta);
|
|
537
|
-
this.set(1, 0, 0, 0, 0, c, -s, 0, 0, s, c, 0, 0, 0, 0, 1);
|
|
538
|
-
return this;
|
|
539
|
-
},
|
|
540
|
-
makeRotationY: function makeRotationY(theta) {
|
|
541
|
-
var c = Math.cos(theta),
|
|
542
|
-
s = Math.sin(theta);
|
|
543
|
-
this.set(c, 0, s, 0, 0, 1, 0, 0, -s, 0, c, 0, 0, 0, 0, 1);
|
|
544
|
-
return this;
|
|
545
|
-
},
|
|
546
|
-
makeRotationZ: function makeRotationZ(theta) {
|
|
547
|
-
var c = Math.cos(theta),
|
|
548
|
-
s = Math.sin(theta);
|
|
549
|
-
this.set(c, -s, 0, 0, s, c, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
550
|
-
return this;
|
|
551
|
-
},
|
|
552
|
-
makeRotationAxis: function makeRotationAxis(axis, angle) {
|
|
553
|
-
// Based on http://www.gamedev.net/reference/articles/article1199.asp
|
|
554
|
-
var c = Math.cos(angle);
|
|
555
|
-
var s = Math.sin(angle);
|
|
556
|
-
var t = 1 - c;
|
|
557
|
-
var x = axis.x,
|
|
558
|
-
y = axis.y,
|
|
559
|
-
z = axis.z;
|
|
560
|
-
var tx = t * x,
|
|
561
|
-
ty = t * y;
|
|
562
|
-
this.set(tx * x + c, tx * y - s * z, tx * z + s * y, 0, tx * y + s * z, ty * y + c, ty * z - s * x, 0, tx * z - s * y, ty * z + s * x, t * z * z + c, 0, 0, 0, 0, 1);
|
|
563
|
-
return this;
|
|
564
|
-
},
|
|
565
|
-
makeScale: function makeScale(x, y, z) {
|
|
566
|
-
this.set(x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0, 0, 0, 0, 1);
|
|
567
|
-
return this;
|
|
568
|
-
},
|
|
569
|
-
makeShear: function makeShear(x, y, z) {
|
|
570
|
-
this.set(1, y, z, 0, x, 1, z, 0, x, y, 1, 0, 0, 0, 0, 1);
|
|
571
|
-
return this;
|
|
572
|
-
},
|
|
573
|
-
compose: function compose(position, quaternion, scale) {
|
|
574
|
-
var te = this.elements;
|
|
575
|
-
var x = quaternion._x,
|
|
576
|
-
y = quaternion._y,
|
|
577
|
-
z = quaternion._z,
|
|
578
|
-
w = quaternion._w;
|
|
579
|
-
var x2 = x + x,
|
|
580
|
-
y2 = y + y,
|
|
581
|
-
z2 = z + z;
|
|
582
|
-
var xx = x * x2,
|
|
583
|
-
xy = x * y2,
|
|
584
|
-
xz = x * z2;
|
|
585
|
-
var yy = y * y2,
|
|
586
|
-
yz = y * z2,
|
|
587
|
-
zz = z * z2;
|
|
588
|
-
var wx = w * x2,
|
|
589
|
-
wy = w * y2,
|
|
590
|
-
wz = w * z2;
|
|
591
|
-
var sx = scale.x,
|
|
592
|
-
sy = scale.y,
|
|
593
|
-
sz = scale.z;
|
|
594
|
-
te[0] = (1 - (yy + zz)) * sx;
|
|
595
|
-
te[1] = (xy + wz) * sx;
|
|
596
|
-
te[2] = (xz - wy) * sx;
|
|
597
|
-
te[3] = 0;
|
|
598
|
-
te[4] = (xy - wz) * sy;
|
|
599
|
-
te[5] = (1 - (xx + zz)) * sy;
|
|
600
|
-
te[6] = (yz + wx) * sy;
|
|
601
|
-
te[7] = 0;
|
|
602
|
-
te[8] = (xz + wy) * sz;
|
|
603
|
-
te[9] = (yz - wx) * sz;
|
|
604
|
-
te[10] = (1 - (xx + yy)) * sz;
|
|
605
|
-
te[11] = 0;
|
|
606
|
-
te[12] = position.x;
|
|
607
|
-
te[13] = position.y;
|
|
608
|
-
te[14] = position.z;
|
|
609
|
-
te[15] = 1;
|
|
610
|
-
return this;
|
|
611
|
-
},
|
|
612
|
-
decompose: function () {
|
|
613
|
-
var vector = new _Vector.Vector3();
|
|
614
|
-
var matrix = new Matrix4();
|
|
615
|
-
return function decompose(position, quaternion, scale) {
|
|
616
|
-
var te = this.elements;
|
|
617
|
-
var sx = vector.set(te[0], te[1], te[2]).length();
|
|
618
|
-
var sy = vector.set(te[4], te[5], te[6]).length();
|
|
619
|
-
var sz = vector.set(te[8], te[9], te[10]).length(); // if determine is negative, we need to invert one scale
|
|
620
|
-
|
|
621
|
-
var det = this.determinant();
|
|
622
|
-
if (det < 0) sx = -sx;
|
|
623
|
-
position.x = te[12];
|
|
624
|
-
position.y = te[13];
|
|
625
|
-
position.z = te[14]; // scale the rotation part
|
|
626
|
-
|
|
627
|
-
matrix.copy(this);
|
|
628
|
-
var invSX = 1 / sx;
|
|
629
|
-
var invSY = 1 / sy;
|
|
630
|
-
var invSZ = 1 / sz;
|
|
631
|
-
matrix.elements[0] *= invSX;
|
|
632
|
-
matrix.elements[1] *= invSX;
|
|
633
|
-
matrix.elements[2] *= invSX;
|
|
634
|
-
matrix.elements[4] *= invSY;
|
|
635
|
-
matrix.elements[5] *= invSY;
|
|
636
|
-
matrix.elements[6] *= invSY;
|
|
637
|
-
matrix.elements[8] *= invSZ;
|
|
638
|
-
matrix.elements[9] *= invSZ;
|
|
639
|
-
matrix.elements[10] *= invSZ;
|
|
640
|
-
quaternion.setFromRotationMatrix(matrix);
|
|
641
|
-
scale.x = sx;
|
|
642
|
-
scale.y = sy;
|
|
643
|
-
scale.z = sz;
|
|
644
|
-
return this;
|
|
645
|
-
};
|
|
646
|
-
}(),
|
|
647
|
-
makePerspective: function makePerspective(left, right, top, bottom, near, far) {
|
|
648
|
-
if (far === undefined) {
|
|
649
|
-
console.warn('THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.');
|
|
650
|
-
}
|
|
651
|
-
|
|
652
|
-
var te = this.elements;
|
|
653
|
-
var x = 2 * near / (right - left);
|
|
654
|
-
var y = 2 * near / (top - bottom);
|
|
655
|
-
var a = (right + left) / (right - left);
|
|
656
|
-
var b = (top + bottom) / (top - bottom);
|
|
657
|
-
var c = -(far + near) / (far - near);
|
|
658
|
-
var d = -2 * far * near / (far - near);
|
|
659
|
-
te[0] = x;
|
|
660
|
-
te[4] = 0;
|
|
661
|
-
te[8] = a;
|
|
662
|
-
te[12] = 0;
|
|
663
|
-
te[1] = 0;
|
|
664
|
-
te[5] = y;
|
|
665
|
-
te[9] = b;
|
|
666
|
-
te[13] = 0;
|
|
667
|
-
te[2] = 0;
|
|
668
|
-
te[6] = 0;
|
|
669
|
-
te[10] = c;
|
|
670
|
-
te[14] = d;
|
|
671
|
-
te[3] = 0;
|
|
672
|
-
te[7] = 0;
|
|
673
|
-
te[11] = -1;
|
|
674
|
-
te[15] = 0;
|
|
675
|
-
return this;
|
|
676
|
-
},
|
|
677
|
-
makeOrthographic: function makeOrthographic(left, right, top, bottom, near, far) {
|
|
678
|
-
var te = this.elements;
|
|
679
|
-
var w = 1.0 / (right - left);
|
|
680
|
-
var h = 1.0 / (top - bottom);
|
|
681
|
-
var p = 1.0 / (far - near);
|
|
682
|
-
var x = (right + left) * w;
|
|
683
|
-
var y = (top + bottom) * h;
|
|
684
|
-
var z = (far + near) * p;
|
|
685
|
-
te[0] = 2 * w;
|
|
686
|
-
te[4] = 0;
|
|
687
|
-
te[8] = 0;
|
|
688
|
-
te[12] = -x;
|
|
689
|
-
te[1] = 0;
|
|
690
|
-
te[5] = 2 * h;
|
|
691
|
-
te[9] = 0;
|
|
692
|
-
te[13] = -y;
|
|
693
|
-
te[2] = 0;
|
|
694
|
-
te[6] = 0;
|
|
695
|
-
te[10] = -2 * p;
|
|
696
|
-
te[14] = -z;
|
|
697
|
-
te[3] = 0;
|
|
698
|
-
te[7] = 0;
|
|
699
|
-
te[11] = 0;
|
|
700
|
-
te[15] = 1;
|
|
701
|
-
return this;
|
|
702
|
-
},
|
|
703
|
-
equals: function equals(matrix) {
|
|
704
|
-
var te = this.elements;
|
|
705
|
-
var me = matrix.elements;
|
|
706
|
-
|
|
707
|
-
for (var i = 0; i < 16; i++) {
|
|
708
|
-
if (te[i] !== me[i]) return false;
|
|
709
|
-
}
|
|
710
|
-
|
|
711
|
-
return true;
|
|
712
|
-
},
|
|
713
|
-
fromArray: function fromArray(array, offset) {
|
|
714
|
-
if (offset === undefined) offset = 0;
|
|
715
|
-
|
|
716
|
-
for (var i = 0; i < 16; i++) {
|
|
717
|
-
this.elements[i] = array[i + offset];
|
|
718
|
-
}
|
|
719
|
-
|
|
720
|
-
return this;
|
|
721
|
-
},
|
|
722
|
-
toArray: function toArray(array, offset) {
|
|
723
|
-
if (array === undefined) array = [];
|
|
724
|
-
if (offset === undefined) offset = 0;
|
|
725
|
-
var te = this.elements;
|
|
726
|
-
array[offset] = te[0];
|
|
727
|
-
array[offset + 1] = te[1];
|
|
728
|
-
array[offset + 2] = te[2];
|
|
729
|
-
array[offset + 3] = te[3];
|
|
730
|
-
array[offset + 4] = te[4];
|
|
731
|
-
array[offset + 5] = te[5];
|
|
732
|
-
array[offset + 6] = te[6];
|
|
733
|
-
array[offset + 7] = te[7];
|
|
734
|
-
array[offset + 8] = te[8];
|
|
735
|
-
array[offset + 9] = te[9];
|
|
736
|
-
array[offset + 10] = te[10];
|
|
737
|
-
array[offset + 11] = te[11];
|
|
738
|
-
array[offset + 12] = te[12];
|
|
739
|
-
array[offset + 13] = te[13];
|
|
740
|
-
array[offset + 14] = te[14];
|
|
741
|
-
array[offset + 15] = te[15];
|
|
742
|
-
return array;
|
|
743
|
-
}
|
|
744
|
-
});
|
|
745
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb3JlL3RocmVlL01hdHJpeDQuanMiXSwibmFtZXMiOlsiTWF0cml4NCIsImVsZW1lbnRzIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiY29uc29sZSIsImVycm9yIiwiT2JqZWN0IiwiYXNzaWduIiwicHJvdG90eXBlIiwiaXNNYXRyaXg0Iiwic2V0IiwibjExIiwibjEyIiwibjEzIiwibjE0IiwibjIxIiwibjIyIiwibjIzIiwibjI0IiwibjMxIiwibjMyIiwibjMzIiwibjM0IiwibjQxIiwibjQyIiwibjQzIiwibjQ0IiwidGUiLCJpZGVudGl0eSIsImNsb25lIiwiZnJvbUFycmF5IiwiY29weSIsIm0iLCJtZSIsImNvcHlQb3NpdGlvbiIsImV4dHJhY3RCYXNpcyIsInhBeGlzIiwieUF4aXMiLCJ6QXhpcyIsInNldEZyb21NYXRyaXhDb2x1bW4iLCJtYWtlQmFzaXMiLCJ4IiwieSIsInoiLCJleHRyYWN0Um90YXRpb24iLCJ2MSIsIlZlY3RvcjMiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZVoiLCJtYWtlUm90YXRpb25Gcm9tRXVsZXIiLCJldWxlciIsImlzRXVsZXIiLCJhIiwiTWF0aCIsImNvcyIsImIiLCJzaW4iLCJjIiwiZCIsImUiLCJmIiwib3JkZXIiLCJhZSIsImFmIiwiYmUiLCJiZiIsImNlIiwiY2YiLCJkZSIsImRmIiwiYWMiLCJhZCIsImJjIiwiYmQiLCJtYWtlUm90YXRpb25Gcm9tUXVhdGVybmlvbiIsInplcm8iLCJvbmUiLCJxIiwiY29tcG9zZSIsImxvb2tBdCIsImV5ZSIsInRhcmdldCIsInVwIiwic3ViVmVjdG9ycyIsImxlbmd0aFNxIiwibm9ybWFsaXplIiwiY3Jvc3NWZWN0b3JzIiwiYWJzIiwibXVsdGlwbHkiLCJuIiwidW5kZWZpbmVkIiwid2FybiIsIm11bHRpcGx5TWF0cmljZXMiLCJwcmVtdWx0aXBseSIsImExMSIsImExMiIsImExMyIsImExNCIsImEyMSIsImEyMiIsImEyMyIsImEyNCIsImEzMSIsImEzMiIsImEzMyIsImEzNCIsImE0MSIsImE0MiIsImE0MyIsImE0NCIsImIxMSIsImIxMiIsImIxMyIsImIxNCIsImIyMSIsImIyMiIsImIyMyIsImIyNCIsImIzMSIsImIzMiIsImIzMyIsImIzNCIsImI0MSIsImI0MiIsImI0MyIsImI0NCIsIm11bHRpcGx5U2NhbGFyIiwicyIsImFwcGx5VG9CdWZmZXJBdHRyaWJ1dGUiLCJhdHRyaWJ1dGUiLCJpIiwibCIsImNvdW50IiwiZ2V0WCIsImdldFkiLCJnZXRaIiwiYXBwbHlNYXRyaXg0Iiwic2V0WFlaIiwiZGV0ZXJtaW5hbnQiLCJ0cmFuc3Bvc2UiLCJ0bXAiLCJzZXRQb3NpdGlvbiIsImlzVmVjdG9yMyIsImdldEludmVyc2UiLCJ0aHJvd09uRGVnZW5lcmF0ZSIsInQxMSIsInQxMiIsInQxMyIsInQxNCIsImRldCIsIm1zZyIsIkVycm9yIiwiZGV0SW52Iiwic2NhbGUiLCJ2IiwiZ2V0TWF4U2NhbGVPbkF4aXMiLCJzY2FsZVhTcSIsInNjYWxlWVNxIiwic2NhbGVaU3EiLCJzcXJ0IiwibWF4IiwibWFrZVRyYW5zbGF0aW9uIiwibWFrZVJvdGF0aW9uWCIsInRoZXRhIiwibWFrZVJvdGF0aW9uWSIsIm1ha2VSb3RhdGlvbloiLCJtYWtlUm90YXRpb25BeGlzIiwiYXhpcyIsImFuZ2xlIiwidCIsInR4IiwidHkiLCJtYWtlU2NhbGUiLCJtYWtlU2hlYXIiLCJwb3NpdGlvbiIsInF1YXRlcm5pb24iLCJfeCIsIl95IiwiX3oiLCJ3IiwiX3ciLCJ4MiIsInkyIiwiejIiLCJ4eCIsInh5IiwieHoiLCJ5eSIsInl6IiwienoiLCJ3eCIsInd5Iiwid3oiLCJzeCIsInN5Iiwic3oiLCJkZWNvbXBvc2UiLCJ2ZWN0b3IiLCJtYXRyaXgiLCJpbnZTWCIsImludlNZIiwiaW52U1oiLCJzZXRGcm9tUm90YXRpb25NYXRyaXgiLCJtYWtlUGVyc3BlY3RpdmUiLCJsZWZ0IiwicmlnaHQiLCJ0b3AiLCJib3R0b20iLCJuZWFyIiwiZmFyIiwibWFrZU9y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N0wsRUFBRSxDQUFFLEVBQUYsQ0FBekI7QUFFQSxXQUFPNEwsS0FBUDtBQUVBO0FBNTRCZ0MsQ0FBbEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBWZWN0b3IzIH0gZnJvbSAnLi9WZWN0b3IzLmpzJztcblxuLyoqXG4gKiBAYXV0aG9yIG1yZG9vYiAvIGh0dHA6Ly9tcmRvb2IuY29tL1xuICogQGF1dGhvciBzdXBlcmVnZ2JlcnQgLyBodHRwOi8vd3d3LnBhdWxicnVudC5jby51ay9cbiAqIEBhdXRob3IgcGhpbG9nYiAvIGh0dHA6Ly9ibG9nLnRoZWppdC5vcmcvXG4gKiBAYXV0aG9yIGpvcmRpX3JvcyAvIGh0dHA6Ly9wbGF0dHNvZnQuY29tXG4gKiBAYXV0aG9yIEQxcGxvMWQgLyBodHRwOi8vZ2l0aHViLmNvbS9EMXBsbzFkXG4gKiBAYXV0aG9yIGFsdGVyZWRxIC8gaHR0cDovL2FsdGVyZWRxdWFsaWEuY29tL1xuICogQGF1dGhvciBtaWthZWwgZW10aW5nZXIgLyBodHRwOi8vZ29tby5zZS9cbiAqIEBhdXRob3IgdGlta25pcCAvIGh0dHA6Ly93d3cuZmxvb3JwbGFubmVyLmNvbS9cbiAqIEBhdXRob3IgYmhvdXN0b24gLyBodHRwOi8vY2xhcmEuaW9cbiAqIEBhdXRob3IgV2VzdExhbmdsZXkgLyBodHRwOi8vZ2l0aHViLmNvbS9XZXN0TGFuZ2xleVxuICovXG5cbmZ1bmN0aW9uIE1hdHJpeDQoKSB7XG5cblx0dGhpcy5lbGVtZW50cyA9IFtcblxuXHRcdDEsIDAsIDAsIDAsXG5cdFx0MCwgMSwgMCwgMCxcblx0XHQwLCAwLCAxLCAwLFxuXHRcdDAsIDAsIDAsIDFcblxuXHRdO1xuXG5cdGlmICggYXJndW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cblx0XHRjb25zb2xlLmVycm9yKCAnVEhSRUUuTWF0cml4NDogdGhlIGNvbnN0cnVjdG9yIG5vIGxvbmdlciByZWFkcyBhcmd1bWVudHMuIHVzZSAuc2V0KCkgaW5zdGVhZC4nICk7XG5cblx0fVxuXG59XG5cbk9iamVjdC5hc3NpZ24oIE1hdHJpeDQucHJvdG90eXBlLCB7XG5cblx0aXNNYXRyaXg0OiB0cnVlLFxuXG5cdHNldDogZnVuY3Rpb24gKCBuMTEsIG4xMiwgbjEzLCBuMTQsIG4yMSwgbjIyLCBuMjMsIG4yNCwgbjMxLCBuMzIsIG4zMywgbjM0LCBuNDEsIG40MiwgbjQzLCBuNDQgKSB7XG5cblx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0dGVbIDAgXSA9IG4xMTsgdGVbIDQgXSA9IG4xMjsgdGVbIDggXSA9IG4xMzsgdGVbIDEyIF0gPSBuMTQ7XG5cdFx0dGVbIDEgXSA9IG4yMTsgdGVbIDUgXSA9IG4yMjsgdGVbIDkgXSA9IG4yMzsgdGVbIDEzIF0gPSBuMjQ7XG5cdFx0dGVbIDIgXSA9IG4zMTsgdGVbIDYgXSA9IG4zMjsgdGVbIDEwIF0gPSBuMzM7IHRlWyAxNCBdID0gbjM0O1xuXHRcdHRlWyAzIF0gPSBuNDE7IHRlWyA3IF0gPSBuNDI7IHRlWyAxMSBdID0gbjQzOyB0ZVsgMTUgXSA9IG40NDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0aWRlbnRpdHk6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCAwLCAwLCAwLFxuXHRcdFx0MCwgMSwgMCwgMCxcblx0XHRcdDAsIDAsIDEsIDAsXG5cdFx0XHQwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24gKCkge1xuXG5cdFx0cmV0dXJuIG5ldyBNYXRyaXg0KCkuZnJvbUFycmF5KCB0aGlzLmVsZW1lbnRzICk7XG5cblx0fSxcblxuXHRjb3B5OiBmdW5jdGlvbiAoIG0gKSB7XG5cblx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXHRcdHZhciBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0ZVsgMCBdID0gbWVbIDAgXTsgdGVbIDEgXSA9IG1lWyAxIF07IHRlWyAyIF0gPSBtZVsgMiBdOyB0ZVsgMyBdID0gbWVbIDMgXTtcblx0XHR0ZVsgNCBdID0gbWVbIDQgXTsgdGVbIDUgXSA9IG1lWyA1IF07IHRlWyA2IF0gPSBtZVsgNiBdOyB0ZVsgNyBdID0gbWVbIDcgXTtcblx0XHR0ZVsgOCBdID0gbWVbIDggXTsgdGVbIDkgXSA9IG1lWyA5IF07IHRlWyAxMCBdID0gbWVbIDEwIF07IHRlWyAxMSBdID0gbWVbIDExIF07XG5cdFx0dGVbIDEyIF0gPSBtZVsgMTIgXTsgdGVbIDEzIF0gPSBtZVsgMTMgXTsgdGVbIDE0IF0gPSBtZVsgMTQgXTsgdGVbIDE1IF0gPSBtZVsgMTUgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Y29weVBvc2l0aW9uOiBmdW5jdGlvbiAoIG0gKSB7XG5cblx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzLCBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHR0ZVsgMTIgXSA9IG1lWyAxMiBdO1xuXHRcdHRlWyAxMyBdID0gbWVbIDEzIF07XG5cdFx0dGVbIDE0IF0gPSBtZVsgMTQgXTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0ZXh0cmFjdEJhc2lzOiBmdW5jdGlvbiAoIHhBeGlzLCB5QXhpcywgekF4aXMgKSB7XG5cblx0XHR4QXhpcy5zZXRGcm9tTWF0cml4Q29sdW1uKCB0aGlzLCAwICk7XG5cdFx0eUF4aXMuc2V0RnJvbU1hdHJpeENvbHVtbiggdGhpcywgMSApO1xuXHRcdHpBeGlzLnNldEZyb21NYXRyaXhDb2x1bW4oIHRoaXMsIDIgKTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bWFrZUJhc2lzOiBmdW5jdGlvbiAoIHhBeGlzLCB5QXhpcywgekF4aXMgKSB7XG5cblx0XHR0aGlzLnNldChcblx0XHRcdHhBeGlzLngsIHlBeGlzLngsIHpBeGlzLngsIDAsXG5cdFx0XHR4QXhpcy55LCB5QXhpcy55LCB6QXhpcy55LCAwLFxuXHRcdFx0eEF4aXMueiwgeUF4aXMueiwgekF4aXMueiwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRleHRyYWN0Um90YXRpb246IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gZXh0cmFjdFJvdGF0aW9uKCBtICkge1xuXG5cdFx0XHQvLyB0aGlzIG1ldGhvZCBkb2VzIG5vdCBzdXBwb3J0IHJlZmxlY3Rpb24gbWF0cmljZXNcblxuXHRcdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblx0XHRcdHZhciBtZSA9IG0uZWxlbWVudHM7XG5cblx0XHRcdHZhciBzY2FsZVggPSAxIC8gdjEuc2V0RnJvbU1hdHJpeENvbHVtbiggbSwgMCApLmxlbmd0aCgpO1xuXHRcdFx0dmFyIHNjYWxlWSA9IDEgLyB2MS5zZXRGcm9tTWF0cml4Q29sdW1uKCBtLCAxICkubGVuZ3RoKCk7XG5cdFx0XHR2YXIgc2NhbGVaID0gMSAvIHYxLnNldEZyb21NYXRyaXhDb2x1bW4oIG0sIDIgKS5sZW5ndGgoKTtcblxuXHRcdFx0dGVbIDAgXSA9IG1lWyAwIF0gKiBzY2FsZVg7XG5cdFx0XHR0ZVsgMSBdID0gbWVbIDEgXSAqIHNjYWxlWDtcblx0XHRcdHRlWyAyIF0gPSBtZVsgMiBdICogc2NhbGVYO1xuXHRcdFx0dGVbIDMgXSA9IDA7XG5cblx0XHRcdHRlWyA0IF0gPSBtZVsgNCBdICogc2NhbGVZO1xuXHRcdFx0dGVbIDUgXSA9IG1lWyA1IF0gKiBzY2FsZVk7XG5cdFx0XHR0ZVsgNiBdID0gbWVbIDYgXSAqIHNjYWxlWTtcblx0XHRcdHRlWyA3IF0gPSAwO1xuXG5cdFx0XHR0ZVsgOCBdID0gbWVbIDggXSAqIHNjYWxlWjtcblx0XHRcdHRlWyA5IF0gPSBtZVsgOSBdICogc2NhbGVaO1xuXHRcdFx0dGVbIDEwIF0gPSBtZVsgMTAgXSAqIHNjYWxlWjtcblx0XHRcdHRlWyAxMSBdID0gMDtcblxuXHRcdFx0dGVbIDEyIF0gPSAwO1xuXHRcdFx0dGVbIDEzIF0gPSAwO1xuXHRcdFx0dGVbIDE0IF0gPSAwO1xuXHRcdFx0dGVbIDE1IF0gPSAxO1xuXG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdH07XG5cblx0fSgpLFxuXG5cdG1ha2VSb3RhdGlvbkZyb21FdWxlcjogZnVuY3Rpb24gKCBldWxlciApIHtcblxuXHRcdGlmICggISAoIGV1bGVyICYmIGV1bGVyLmlzRXVsZXIgKSApIHtcblxuXHRcdFx0Y29uc29sZS5lcnJvciggJ1RIUkVFLk1hdHJpeDQ6IC5tYWtlUm90YXRpb25Gcm9tRXVsZXIoKSBub3cgZXhwZWN0cyBhIEV1bGVyIHJvdGF0aW9uIHJhdGhlciB0aGFuIGEgVmVjdG9yMyBhbmQgb3JkZXIuJyApO1xuXG5cdFx0fVxuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHZhciB4ID0gZXVsZXIueCwgeSA9IGV1bGVyLnksIHogPSBldWxlci56O1xuXHRcdHZhciBhID0gTWF0aC5jb3MoIHggKSwgYiA9IE1hdGguc2luKCB4ICk7XG5cdFx0dmFyIGMgPSBNYXRoLmNvcyggeSApLCBkID0gTWF0aC5zaW4oIHkgKTtcblx0XHR2YXIgZSA9IE1hdGguY29zKCB6ICksIGYgPSBNYXRoLnNpbiggeiApO1xuXG5cdFx0aWYgKCBldWxlci5vcmRlciA9PT0gJ1hZWicgKSB7XG5cblx0XHRcdHZhciBhZSA9IGEgKiBlLCBhZiA9IGEgKiBmLCBiZSA9IGIgKiBlLCBiZiA9IGIgKiBmO1xuXG5cdFx0XHR0ZVsgMCBdID0gYyAqIGU7XG5cdFx0XHR0ZVsgNCBdID0gLSBjICogZjtcblx0XHRcdHRlWyA4IF0gPSBkO1xuXG5cdFx0XHR0ZVsgMSBdID0gYWYgKyBiZSAqIGQ7XG5cdFx0XHR0ZVsgNSBdID0gYWUgLSBiZiAqIGQ7XG5cdFx0XHR0ZVsgOSBdID0gLSBiICogYztcblxuXHRcdFx0dGVbIDIgXSA9IGJmIC0gYWUgKiBkO1xuXHRcdFx0dGVbIDYgXSA9IGJlICsgYWYgKiBkO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWVhaJyApIHtcblxuXHRcdFx0dmFyIGNlID0gYyAqIGUsIGNmID0gYyAqIGYsIGRlID0gZCAqIGUsIGRmID0gZCAqIGY7XG5cblx0XHRcdHRlWyAwIF0gPSBjZSArIGRmICogYjtcblx0XHRcdHRlWyA0IF0gPSBkZSAqIGIgLSBjZjtcblx0XHRcdHRlWyA4IF0gPSBhICogZDtcblxuXHRcdFx0dGVbIDEgXSA9IGEgKiBmO1xuXHRcdFx0dGVbIDUgXSA9IGEgKiBlO1xuXHRcdFx0dGVbIDkgXSA9IC0gYjtcblxuXHRcdFx0dGVbIDIgXSA9IGNmICogYiAtIGRlO1xuXHRcdFx0dGVbIDYgXSA9IGRmICsgY2UgKiBiO1xuXHRcdFx0dGVbIDEwIF0gPSBhICogYztcblxuXHRcdH0gZWxzZSBpZiAoIGV1bGVyLm9yZGVyID09PSAnWlhZJyApIHtcblxuXHRcdFx0dmFyIGNlID0gYyAqIGUsIGNmID0gYyAqIGYsIGRlID0gZCAqIGUsIGRmID0gZCAqIGY7XG5cblx0XHRcdHRlWyAwIF0gPSBjZSAtIGRmICogYjtcblx0XHRcdHRlWyA0IF0gPSAtIGEgKiBmO1xuXHRcdFx0dGVbIDggXSA9IGRlICsgY2YgKiBiO1xuXG5cdFx0XHR0ZVsgMSBdID0gY2YgKyBkZSAqIGI7XG5cdFx0XHR0ZVsgNSBdID0gYSAqIGU7XG5cdFx0XHR0ZVsgOSBdID0gZGYgLSBjZSAqIGI7XG5cblx0XHRcdHRlWyAyIF0gPSAtIGEgKiBkO1xuXHRcdFx0dGVbIDYgXSA9IGI7XG5cdFx0XHR0ZVsgMTAgXSA9IGEgKiBjO1xuXG5cdFx0fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdaWVgnICkge1xuXG5cdFx0XHR2YXIgYWUgPSBhICogZSwgYWYgPSBhICogZiwgYmUgPSBiICogZSwgYmYgPSBiICogZjtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IGJlICogZCAtIGFmO1xuXHRcdFx0dGVbIDggXSA9IGFlICogZCArIGJmO1xuXG5cdFx0XHR0ZVsgMSBdID0gYyAqIGY7XG5cdFx0XHR0ZVsgNSBdID0gYmYgKiBkICsgYWU7XG5cdFx0XHR0ZVsgOSBdID0gYWYgKiBkIC0gYmU7XG5cblx0XHRcdHRlWyAyIF0gPSAtIGQ7XG5cdFx0XHR0ZVsgNiBdID0gYiAqIGM7XG5cdFx0XHR0ZVsgMTAgXSA9IGEgKiBjO1xuXG5cdFx0fSBlbHNlIGlmICggZXVsZXIub3JkZXIgPT09ICdZWlgnICkge1xuXG5cdFx0XHR2YXIgYWMgPSBhICogYywgYWQgPSBhICogZCwgYmMgPSBiICogYywgYmQgPSBiICogZDtcblxuXHRcdFx0dGVbIDAgXSA9IGMgKiBlO1xuXHRcdFx0dGVbIDQgXSA9IGJkIC0gYWMgKiBmO1xuXHRcdFx0dGVbIDggXSA9IGJjICogZiArIGFkO1xuXG5cdFx0XHR0ZVsgMSBdID0gZjtcblx0XHRcdHRlWyA1IF0gPSBhICogZTtcblx0XHRcdHRlWyA5IF0gPSAtIGIgKiBlO1xuXG5cdFx0XHR0ZVsgMiBdID0gLSBkICogZTtcblx0XHRcdHRlWyA2IF0gPSBhZCAqIGYgKyBiYztcblx0XHRcdHRlWyAxMCBdID0gYWMgLSBiZCAqIGY7XG5cblx0XHR9IGVsc2UgaWYgKCBldWxlci5vcmRlciA9PT0gJ1haWScgKSB7XG5cblx0XHRcdHZhciBhYyA9IGEgKiBjLCBhZCA9IGEgKiBkLCBiYyA9IGIgKiBjLCBiZCA9IGIgKiBkO1xuXG5cdFx0XHR0ZVsgMCBdID0gYyAqIGU7XG5cdFx0XHR0ZVsgNCBdID0gLSBmO1xuXHRcdFx0dGVbIDggXSA9IGQgKiBlO1xuXG5cdFx0XHR0ZVsgMSBdID0gYWMgKiBmICsgYmQ7XG5cdFx0XHR0ZVsgNSBdID0gYSAqIGU7XG5cdFx0XHR0ZVsgOSBdID0gYWQgKiBmIC0gYmM7XG5cblx0XHRcdHRlWyAyIF0gPSBiYyAqIGYgLSBhZDtcblx0XHRcdHRlWyA2IF0gPSBiICogZTtcblx0XHRcdHRlWyAxMCBdID0gYmQgKiBmICsgYWM7XG5cblx0XHR9XG5cblx0XHQvLyBib3R0b20gcm93XG5cdFx0dGVbIDMgXSA9IDA7XG5cdFx0dGVbIDcgXSA9IDA7XG5cdFx0dGVbIDExIF0gPSAwO1xuXG5cdFx0Ly8gbGFzdCBjb2x1bW5cblx0XHR0ZVsgMTIgXSA9IDA7XG5cdFx0dGVbIDEzIF0gPSAwO1xuXHRcdHRlWyAxNCBdID0gMDtcblx0XHR0ZVsgMTUgXSA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG1ha2VSb3RhdGlvbkZyb21RdWF0ZXJuaW9uOiBmdW5jdGlvbiAoKSB7XG5cblx0XHR2YXIgemVybyA9IG5ldyBWZWN0b3IzKCAwLCAwLCAwICk7XG5cdFx0dmFyIG9uZSA9IG5ldyBWZWN0b3IzKCAxLCAxLCAxICk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gbWFrZVJvdGF0aW9uRnJvbVF1YXRlcm5pb24oIHEgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmNvbXBvc2UoIHplcm8sIHEsIG9uZSApO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0bG9va0F0OiBmdW5jdGlvbiAoKSB7XG5cblx0XHR2YXIgeCA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0dmFyIHkgPSBuZXcgVmVjdG9yMygpO1xuXHRcdHZhciB6ID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdHJldHVybiBmdW5jdGlvbiBsb29rQXQoIGV5ZSwgdGFyZ2V0LCB1cCApIHtcblxuXHRcdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdFx0ei5zdWJWZWN0b3JzKCBleWUsIHRhcmdldCApO1xuXG5cdFx0XHRpZiAoIHoubGVuZ3RoU3EoKSA9PT0gMCApIHtcblxuXHRcdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cblxuXHRcdFx0XHR6LnogPSAxO1xuXG5cdFx0XHR9XG5cblx0XHRcdHoubm9ybWFsaXplKCk7XG5cdFx0XHR4LmNyb3NzVmVjdG9ycyggdXAsIHogKTtcblxuXHRcdFx0aWYgKCB4Lmxlbmd0aFNxKCkgPT09IDAgKSB7XG5cblx0XHRcdFx0Ly8gdXAgYW5kIHogYXJlIHBhcmFsbGVsXG5cblx0XHRcdFx0aWYgKCBNYXRoLmFicyggdXAueiApID09PSAxICkge1xuXG5cdFx0XHRcdFx0ei54ICs9IDAuMDAwMTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0ei56ICs9IDAuMDAwMTtcblxuXHRcdFx0XHR9XG5cblx0XHRcdFx0ei5ub3JtYWxpemUoKTtcblx0XHRcdFx0eC5jcm9zc1ZlY3RvcnMoIHVwLCB6ICk7XG5cblx0XHRcdH1cblxuXHRcdFx0eC5ub3JtYWxpemUoKTtcblx0XHRcdHkuY3Jvc3NWZWN0b3JzKCB6LCB4ICk7XG5cblx0XHRcdHRlWyAwIF0gPSB4Lng7IHRlWyA0IF0gPSB5Lng7IHRlWyA4IF0gPSB6Lng7XG5cdFx0XHR0ZVsgMSBdID0geC55OyB0ZVsgNSBdID0geS55OyB0ZVsgOSBdID0gei55O1xuXHRcdFx0dGVbIDIgXSA9IHguejsgdGVbIDYgXSA9IHkuejsgdGVbIDEwIF0gPSB6Lno7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0bXVsdGlwbHk6IGZ1bmN0aW9uICggbSwgbiApIHtcblxuXHRcdGlmICggbiAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRjb25zb2xlLndhcm4oICdUSFJFRS5NYXRyaXg0OiAubXVsdGlwbHkoKSBub3cgb25seSBhY2NlcHRzIG9uZSBhcmd1bWVudC4gVXNlIC5tdWx0aXBseU1hdHJpY2VzKCBhLCBiICkgaW5zdGVhZC4nICk7XG5cdFx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCBtLCBuICk7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5tdWx0aXBseU1hdHJpY2VzKCB0aGlzLCBtICk7XG5cblx0fSxcblxuXHRwcmVtdWx0aXBseTogZnVuY3Rpb24gKCBtICkge1xuXG5cdFx0cmV0dXJuIHRoaXMubXVsdGlwbHlNYXRyaWNlcyggbSwgdGhpcyApO1xuXG5cdH0sXG5cblx0bXVsdGlwbHlNYXRyaWNlczogZnVuY3Rpb24gKCBhLCBiICkge1xuXG5cdFx0dmFyIGFlID0gYS5lbGVtZW50cztcblx0XHR2YXIgYmUgPSBiLmVsZW1lbnRzO1xuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR2YXIgYTExID0gYWVbIDAgXSwgYTEyID0gYWVbIDQgXSwgYTEzID0gYWVbIDggXSwgYTE0ID0gYWVbIDEyIF07XG5cdFx0dmFyIGEyMSA9IGFlWyAxIF0sIGEyMiA9IGFlWyA1IF0sIGEyMyA9IGFlWyA5IF0sIGEyNCA9IGFlWyAxMyBdO1xuXHRcdHZhciBhMzEgPSBhZVsgMiBdLCBhMzIgPSBhZVsgNiBdLCBhMzMgPSBhZVsgMTAgXSwgYTM0ID0gYWVbIDE0IF07XG5cdFx0dmFyIGE0MSA9IGFlWyAzIF0sIGE0MiA9IGFlWyA3IF0sIGE0MyA9IGFlWyAxMSBdLCBhNDQgPSBhZVsgMTUgXTtcblxuXHRcdHZhciBiMTEgPSBiZVsgMCBdLCBiMTIgPSBiZVsgNCBdLCBiMTMgPSBiZVsgOCBdLCBiMTQgPSBiZVsgMTIgXTtcblx0XHR2YXIgYjIxID0gYmVbIDEgXSwgYjIyID0gYmVbIDUgXSwgYjIzID0gYmVbIDkgXSwgYjI0ID0gYmVbIDEzIF07XG5cdFx0dmFyIGIzMSA9IGJlWyAyIF0sIGIzMiA9IGJlWyA2IF0sIGIzMyA9IGJlWyAxMCBdLCBiMzQgPSBiZVsgMTQgXTtcblx0XHR2YXIgYjQxID0gYmVbIDMgXSwgYjQyID0gYmVbIDcgXSwgYjQzID0gYmVbIDExIF0sIGI0NCA9IGJlWyAxNSBdO1xuXG5cdFx0dGVbIDAgXSA9IGExMSAqIGIxMSArIGExMiAqIGIyMSArIGExMyAqIGIzMSArIGExNCAqIGI0MTtcblx0XHR0ZVsgNCBdID0gYTExICogYjEyICsgYTEyICogYjIyICsgYTEzICogYjMyICsgYTE0ICogYjQyO1xuXHRcdHRlWyA4IF0gPSBhMTEgKiBiMTMgKyBhMTIgKiBiMjMgKyBhMTMgKiBiMzMgKyBhMTQgKiBiNDM7XG5cdFx0dGVbIDEyIF0gPSBhMTEgKiBiMTQgKyBhMTIgKiBiMjQgKyBhMTMgKiBiMzQgKyBhMTQgKiBiNDQ7XG5cblx0XHR0ZVsgMSBdID0gYTIxICogYjExICsgYTIyICogYjIxICsgYTIzICogYjMxICsgYTI0ICogYjQxO1xuXHRcdHRlWyA1IF0gPSBhMjEgKiBiMTIgKyBhMjIgKiBiMjIgKyBhMjMgKiBiMzIgKyBhMjQgKiBiNDI7XG5cdFx0dGVbIDkgXSA9IGEyMSAqIGIxMyArIGEyMiAqIGIyMyArIGEyMyAqIGIzMyArIGEyNCAqIGI0Mztcblx0XHR0ZVsgMTMgXSA9IGEyMSAqIGIxNCArIGEyMiAqIGIyNCArIGEyMyAqIGIzNCArIGEyNCAqIGI0NDtcblxuXHRcdHRlWyAyIF0gPSBhMzEgKiBiMTEgKyBhMzIgKiBiMjEgKyBhMzMgKiBiMzEgKyBhMzQgKiBiNDE7XG5cdFx0dGVbIDYgXSA9IGEzMSAqIGIxMiArIGEzMiAqIGIyMiArIGEzMyAqIGIzMiArIGEzNCAqIGI0Mjtcblx0XHR0ZVsgMTAgXSA9IGEzMSAqIGIxMyArIGEzMiAqIGIyMyArIGEzMyAqIGIzMyArIGEzNCAqIGI0Mztcblx0XHR0ZVsgMTQgXSA9IGEzMSAqIGIxNCArIGEzMiAqIGIyNCArIGEzMyAqIGIzNCArIGEzNCAqIGI0NDtcblxuXHRcdHRlWyAzIF0gPSBhNDEgKiBiMTEgKyBhNDIgKiBiMjEgKyBhNDMgKiBiMzEgKyBhNDQgKiBiNDE7XG5cdFx0dGVbIDcgXSA9IGE0MSAqIGIxMiArIGE0MiAqIGIyMiArIGE0MyAqIGIzMiArIGE0NCAqIGI0Mjtcblx0XHR0ZVsgMTEgXSA9IGE0MSAqIGIxMyArIGE0MiAqIGIyMyArIGE0MyAqIGIzMyArIGE0NCAqIGI0Mztcblx0XHR0ZVsgMTUgXSA9IGE0MSAqIGIxNCArIGE0MiAqIGIyNCArIGE0MyAqIGIzNCArIGE0NCAqIGI0NDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bXVsdGlwbHlTY2FsYXI6IGZ1bmN0aW9uICggcyApIHtcblxuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR0ZVsgMCBdICo9IHM7IHRlWyA0IF0gKj0gczsgdGVbIDggXSAqPSBzOyB0ZVsgMTIgXSAqPSBzO1xuXHRcdHRlWyAxIF0gKj0gczsgdGVbIDUgXSAqPSBzOyB0ZVsgOSBdICo9IHM7IHRlWyAxMyBdICo9IHM7XG5cdFx0dGVbIDIgXSAqPSBzOyB0ZVsgNiBdICo9IHM7IHRlWyAxMCBdICo9IHM7IHRlWyAxNCBdICo9IHM7XG5cdFx0dGVbIDMgXSAqPSBzOyB0ZVsgNyBdICo9IHM7IHRlWyAxMSBdICo9IHM7IHRlWyAxNSBdICo9IHM7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGFwcGx5VG9CdWZmZXJBdHRyaWJ1dGU6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB2MSA9IG5ldyBWZWN0b3IzKCk7XG5cblx0XHRyZXR1cm4gZnVuY3Rpb24gYXBwbHlUb0J1ZmZlckF0dHJpYnV0ZSggYXR0cmlidXRlICkge1xuXG5cdFx0XHRmb3IgKCB2YXIgaSA9IDAsIGwgPSBhdHRyaWJ1dGUuY291bnQ7IGkgPCBsOyBpICsrICkge1xuXG5cdFx0XHRcdHYxLnggPSBhdHRyaWJ1dGUuZ2V0WCggaSApO1xuXHRcdFx0XHR2MS55ID0gYXR0cmlidXRlLmdldFkoIGkgKTtcblx0XHRcdFx0djEueiA9IGF0dHJpYnV0ZS5nZXRaKCBpICk7XG5cblx0XHRcdFx0djEuYXBwbHlNYXRyaXg0KCB0aGlzICk7XG5cblx0XHRcdFx0YXR0cmlidXRlLnNldFhZWiggaSwgdjEueCwgdjEueSwgdjEueiApO1xuXG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhdHRyaWJ1dGU7XG5cblx0XHR9O1xuXG5cdH0oKSxcblxuXHRkZXRlcm1pbmFudDogZnVuY3Rpb24gKCkge1xuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHZhciBuMTEgPSB0ZVsgMCBdLCBuMTIgPSB0ZVsgNCBdLCBuMTMgPSB0ZVsgOCBdLCBuMTQgPSB0ZVsgMTIgXTtcblx0XHR2YXIgbjIxID0gdGVbIDEgXSwgbjIyID0gdGVbIDUgXSwgbjIzID0gdGVbIDkgXSwgbjI0ID0gdGVbIDEzIF07XG5cdFx0dmFyIG4zMSA9IHRlWyAyIF0sIG4zMiA9IHRlWyA2IF0sIG4zMyA9IHRlWyAxMCBdLCBuMzQgPSB0ZVsgMTQgXTtcblx0XHR2YXIgbjQxID0gdGVbIDMgXSwgbjQyID0gdGVbIDcgXSwgbjQzID0gdGVbIDExIF0sIG40NCA9IHRlWyAxNSBdO1xuXG5cdFx0Ly9UT0RPOiBtYWtlIHRoaXMgbW9yZSBlZmZpY2llbnRcblx0XHQvLyggYmFzZWQgb24gaHR0cDovL3d3dy5ldWNsaWRlYW5zcGFjZS5jb20vbWF0aHMvYWxnZWJyYS9tYXRyaXgvZnVuY3Rpb25zL2ludmVyc2UvZm91ckQvaW5kZXguaHRtIClcblxuXHRcdHJldHVybiAoXG5cdFx0XHRuNDEgKiAoXG5cdFx0XHRcdCsgbjE0ICogbjIzICogbjMyXG5cdFx0XHRcdCAtIG4xMyAqIG4yNCAqIG4zMlxuXHRcdFx0XHQgLSBuMTQgKiBuMjIgKiBuMzNcblx0XHRcdFx0ICsgbjEyICogbjI0ICogbjMzXG5cdFx0XHRcdCArIG4xMyAqIG4yMiAqIG4zNFxuXHRcdFx0XHQgLSBuMTIgKiBuMjMgKiBuMzRcblx0XHRcdCkgK1xuXHRcdFx0bjQyICogKFxuXHRcdFx0XHQrIG4xMSAqIG4yMyAqIG4zNFxuXHRcdFx0XHQgLSBuMTEgKiBuMjQgKiBuMzNcblx0XHRcdFx0ICsgbjE0ICogbjIxICogbjMzXG5cdFx0XHRcdCAtIG4xMyAqIG4yMSAqIG4zNFxuXHRcdFx0XHQgKyBuMTMgKiBuMjQgKiBuMzFcblx0XHRcdFx0IC0gbjE0ICogbjIzICogbjMxXG5cdFx0XHQpICtcblx0XHRcdG40MyAqIChcblx0XHRcdFx0KyBuMTEgKiBuMjQgKiBuMzJcblx0XHRcdFx0IC0gbjExICogbjIyICogbjM0XG5cdFx0XHRcdCAtIG4xNCAqIG4yMSAqIG4zMlxuXHRcdFx0XHQgKyBuMTIgKiBuMjEgKiBuMzRcblx0XHRcdFx0ICsgbjE0ICogbjIyICogbjMxXG5cdFx0XHRcdCAtIG4xMiAqIG4yNCAqIG4zMVxuXHRcdFx0KSArXG5cdFx0XHRuNDQgKiAoXG5cdFx0XHRcdC0gbjEzICogbjIyICogbjMxXG5cdFx0XHRcdCAtIG4xMSAqIG4yMyAqIG4zMlxuXHRcdFx0XHQgKyBuMTEgKiBuMjIgKiBuMzNcblx0XHRcdFx0ICsgbjEzICogbjIxICogbjMyXG5cdFx0XHRcdCAtIG4xMiAqIG4yMSAqIG4zM1xuXHRcdFx0XHQgKyBuMTIgKiBuMjMgKiBuMzFcblx0XHRcdClcblxuXHRcdCk7XG5cblx0fSxcblxuXHR0cmFuc3Bvc2U6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dmFyIHRtcDtcblxuXHRcdHRtcCA9IHRlWyAxIF07IHRlWyAxIF0gPSB0ZVsgNCBdOyB0ZVsgNCBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyAyIF07IHRlWyAyIF0gPSB0ZVsgOCBdOyB0ZVsgOCBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyA2IF07IHRlWyA2IF0gPSB0ZVsgOSBdOyB0ZVsgOSBdID0gdG1wO1xuXG5cdFx0dG1wID0gdGVbIDMgXTsgdGVbIDMgXSA9IHRlWyAxMiBdOyB0ZVsgMTIgXSA9IHRtcDtcblx0XHR0bXAgPSB0ZVsgNyBdOyB0ZVsgNyBdID0gdGVbIDEzIF07IHRlWyAxMyBdID0gdG1wO1xuXHRcdHRtcCA9IHRlWyAxMSBdOyB0ZVsgMTEgXSA9IHRlWyAxNCBdOyB0ZVsgMTQgXSA9IHRtcDtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0c2V0UG9zaXRpb246IGZ1bmN0aW9uICggeCwgeSwgeiApIHtcblxuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHRpZiAoIHguaXNWZWN0b3IzICkge1xuXG5cdFx0XHR0ZVsgMTIgXSA9IHgueDtcblx0XHRcdHRlWyAxMyBdID0geC55O1xuXHRcdFx0dGVbIDE0IF0gPSB4Lno7XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR0ZVsgMTIgXSA9IHg7XG5cdFx0XHR0ZVsgMTMgXSA9IHk7XG5cdFx0XHR0ZVsgMTQgXSA9IHo7XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGdldEludmVyc2U6IGZ1bmN0aW9uICggbSwgdGhyb3dPbkRlZ2VuZXJhdGUgKSB7XG5cblx0XHQvLyBiYXNlZCBvbiBodHRwOi8vd3d3LmV1Y2xpZGVhbnNwYWNlLmNvbS9tYXRocy9hbGdlYnJhL21hdHJpeC9mdW5jdGlvbnMvaW52ZXJzZS9mb3VyRC9pbmRleC5odG1cblx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzLFxuXHRcdFx0bWUgPSBtLmVsZW1lbnRzLFxuXG5cdFx0XHRuMTEgPSBtZVsgMCBdLCBuMjEgPSBtZVsgMSBdLCBuMzEgPSBtZVsgMiBdLCBuNDEgPSBtZVsgMyBdLFxuXHRcdFx0bjEyID0gbWVbIDQgXSwgbjIyID0gbWVbIDUgXSwgbjMyID0gbWVbIDYgXSwgbjQyID0gbWVbIDcgXSxcblx0XHRcdG4xMyA9IG1lWyA4IF0sIG4yMyA9IG1lWyA5IF0sIG4zMyA9IG1lWyAxMCBdLCBuNDMgPSBtZVsgMTEgXSxcblx0XHRcdG4xNCA9IG1lWyAxMiBdLCBuMjQgPSBtZVsgMTMgXSwgbjM0ID0gbWVbIDE0IF0sIG40NCA9IG1lWyAxNSBdLFxuXG5cdFx0XHR0MTEgPSBuMjMgKiBuMzQgKiBuNDIgLSBuMjQgKiBuMzMgKiBuNDIgKyBuMjQgKiBuMzIgKiBuNDMgLSBuMjIgKiBuMzQgKiBuNDMgLSBuMjMgKiBuMzIgKiBuNDQgKyBuMjIgKiBuMzMgKiBuNDQsXG5cdFx0XHR0MTIgPSBuMTQgKiBuMzMgKiBuNDIgLSBuMTMgKiBuMzQgKiBuNDIgLSBuMTQgKiBuMzIgKiBuNDMgKyBuMTIgKiBuMzQgKiBuNDMgKyBuMTMgKiBuMzIgKiBuNDQgLSBuMTIgKiBuMzMgKiBuNDQsXG5cdFx0XHR0MTMgPSBuMTMgKiBuMjQgKiBuNDIgLSBuMTQgKiBuMjMgKiBuNDIgKyBuMTQgKiBuMjIgKiBuNDMgLSBuMTIgKiBuMjQgKiBuNDMgLSBuMTMgKiBuMjIgKiBuNDQgKyBuMTIgKiBuMjMgKiBuNDQsXG5cdFx0XHR0MTQgPSBuMTQgKiBuMjMgKiBuMzIgLSBuMTMgKiBuMjQgKiBuMzIgLSBuMTQgKiBuMjIgKiBuMzMgKyBuMTIgKiBuMjQgKiBuMzMgKyBuMTMgKiBuMjIgKiBuMzQgLSBuMTIgKiBuMjMgKiBuMzQ7XG5cblx0XHR2YXIgZGV0ID0gbjExICogdDExICsgbjIxICogdDEyICsgbjMxICogdDEzICsgbjQxICogdDE0O1xuXG5cdFx0aWYgKCBkZXQgPT09IDAgKSB7XG5cblx0XHRcdHZhciBtc2cgPSBcIlRIUkVFLk1hdHJpeDQ6IC5nZXRJbnZlcnNlKCkgY2FuJ3QgaW52ZXJ0IG1hdHJpeCwgZGV0ZXJtaW5hbnQgaXMgMFwiO1xuXG5cdFx0XHRpZiAoIHRocm93T25EZWdlbmVyYXRlID09PSB0cnVlICkge1xuXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Y29uc29sZS53YXJuKCBtc2cgKTtcblxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdGhpcy5pZGVudGl0eSgpO1xuXG5cdFx0fVxuXG5cdFx0dmFyIGRldEludiA9IDEgLyBkZXQ7XG5cblx0XHR0ZVsgMCBdID0gdDExICogZGV0SW52O1xuXHRcdHRlWyAxIF0gPSAoIG4yNCAqIG4zMyAqIG40MSAtIG4yMyAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMSAqIG40MyArIG4yMSAqIG4zNCAqIG40MyArIG4yMyAqIG4zMSAqIG40NCAtIG4yMSAqIG4zMyAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyAyIF0gPSAoIG4yMiAqIG4zNCAqIG40MSAtIG4yNCAqIG4zMiAqIG40MSArIG4yNCAqIG4zMSAqIG40MiAtIG4yMSAqIG4zNCAqIG40MiAtIG4yMiAqIG4zMSAqIG40NCArIG4yMSAqIG4zMiAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyAzIF0gPSAoIG4yMyAqIG4zMiAqIG40MSAtIG4yMiAqIG4zMyAqIG40MSAtIG4yMyAqIG4zMSAqIG40MiArIG4yMSAqIG4zMyAqIG40MiArIG4yMiAqIG4zMSAqIG40MyAtIG4yMSAqIG4zMiAqIG40MyApICogZGV0SW52O1xuXG5cdFx0dGVbIDQgXSA9IHQxMiAqIGRldEludjtcblx0XHR0ZVsgNSBdID0gKCBuMTMgKiBuMzQgKiBuNDEgLSBuMTQgKiBuMzMgKiBuNDEgKyBuMTQgKiBuMzEgKiBuNDMgLSBuMTEgKiBuMzQgKiBuNDMgLSBuMTMgKiBuMzEgKiBuNDQgKyBuMTEgKiBuMzMgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgNiBdID0gKCBuMTQgKiBuMzIgKiBuNDEgLSBuMTIgKiBuMzQgKiBuNDEgLSBuMTQgKiBuMzEgKiBuNDIgKyBuMTEgKiBuMzQgKiBuNDIgKyBuMTIgKiBuMzEgKiBuNDQgLSBuMTEgKiBuMzIgKiBuNDQgKSAqIGRldEludjtcblx0XHR0ZVsgNyBdID0gKCBuMTIgKiBuMzMgKiBuNDEgLSBuMTMgKiBuMzIgKiBuNDEgKyBuMTMgKiBuMzEgKiBuNDIgLSBuMTEgKiBuMzMgKiBuNDIgLSBuMTIgKiBuMzEgKiBuNDMgKyBuMTEgKiBuMzIgKiBuNDMgKSAqIGRldEludjtcblxuXHRcdHRlWyA4IF0gPSB0MTMgKiBkZXRJbnY7XG5cdFx0dGVbIDkgXSA9ICggbjE0ICogbjIzICogbjQxIC0gbjEzICogbjI0ICogbjQxIC0gbjE0ICogbjIxICogbjQzICsgbjExICogbjI0ICogbjQzICsgbjEzICogbjIxICogbjQ0IC0gbjExICogbjIzICogbjQ0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDEwIF0gPSAoIG4xMiAqIG4yNCAqIG40MSAtIG4xNCAqIG4yMiAqIG40MSArIG4xNCAqIG4yMSAqIG40MiAtIG4xMSAqIG4yNCAqIG40MiAtIG4xMiAqIG4yMSAqIG40NCArIG4xMSAqIG4yMiAqIG40NCApICogZGV0SW52O1xuXHRcdHRlWyAxMSBdID0gKCBuMTMgKiBuMjIgKiBuNDEgLSBuMTIgKiBuMjMgKiBuNDEgLSBuMTMgKiBuMjEgKiBuNDIgKyBuMTEgKiBuMjMgKiBuNDIgKyBuMTIgKiBuMjEgKiBuNDMgLSBuMTEgKiBuMjIgKiBuNDMgKSAqIGRldEludjtcblxuXHRcdHRlWyAxMiBdID0gdDE0ICogZGV0SW52O1xuXHRcdHRlWyAxMyBdID0gKCBuMTMgKiBuMjQgKiBuMzEgLSBuMTQgKiBuMjMgKiBuMzEgKyBuMTQgKiBuMjEgKiBuMzMgLSBuMTEgKiBuMjQgKiBuMzMgLSBuMTMgKiBuMjEgKiBuMzQgKyBuMTEgKiBuMjMgKiBuMzQgKSAqIGRldEludjtcblx0XHR0ZVsgMTQgXSA9ICggbjE0ICogbjIyICogbjMxIC0gbjEyICogbjI0ICogbjMxIC0gbjE0ICogbjIxICogbjMyICsgbjExICogbjI0ICogbjMyICsgbjEyICogbjIxICogbjM0IC0gbjExICogbjIyICogbjM0ICkgKiBkZXRJbnY7XG5cdFx0dGVbIDE1IF0gPSAoIG4xMiAqIG4yMyAqIG4zMSAtIG4xMyAqIG4yMiAqIG4zMSArIG4xMyAqIG4yMSAqIG4zMiAtIG4xMSAqIG4yMyAqIG4zMiAtIG4xMiAqIG4yMSAqIG4zMyArIG4xMSAqIG4yMiAqIG4zMyApICogZGV0SW52O1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRzY2FsZTogZnVuY3Rpb24gKCB2ICkge1xuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR2YXIgeCA9IHYueCwgeSA9IHYueSwgeiA9IHYuejtcblxuXHRcdHRlWyAwIF0gKj0geDsgdGVbIDQgXSAqPSB5OyB0ZVsgOCBdICo9IHo7XG5cdFx0dGVbIDEgXSAqPSB4OyB0ZVsgNSBdICo9IHk7IHRlWyA5IF0gKj0gejtcblx0XHR0ZVsgMiBdICo9IHg7IHRlWyA2IF0gKj0geTsgdGVbIDEwIF0gKj0gejtcblx0XHR0ZVsgMyBdICo9IHg7IHRlWyA3IF0gKj0geTsgdGVbIDExIF0gKj0gejtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0Z2V0TWF4U2NhbGVPbkF4aXM6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cblx0XHR2YXIgc2NhbGVYU3EgPSB0ZVsgMCBdICogdGVbIDAgXSArIHRlWyAxIF0gKiB0ZVsgMSBdICsgdGVbIDIgXSAqIHRlWyAyIF07XG5cdFx0dmFyIHNjYWxlWVNxID0gdGVbIDQgXSAqIHRlWyA0IF0gKyB0ZVsgNSBdICogdGVbIDUgXSArIHRlWyA2IF0gKiB0ZVsgNiBdO1xuXHRcdHZhciBzY2FsZVpTcSA9IHRlWyA4IF0gKiB0ZVsgOCBdICsgdGVbIDkgXSAqIHRlWyA5IF0gKyB0ZVsgMTAgXSAqIHRlWyAxMCBdO1xuXG5cdFx0cmV0dXJuIE1hdGguc3FydCggTWF0aC5tYXgoIHNjYWxlWFNxLCBzY2FsZVlTcSwgc2NhbGVaU3EgKSApO1xuXG5cdH0sXG5cblx0bWFrZVRyYW5zbGF0aW9uOiBmdW5jdGlvbiAoIHgsIHksIHogKSB7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0MSwgMCwgMCwgeCxcblx0XHRcdDAsIDEsIDAsIHksXG5cdFx0XHQwLCAwLCAxLCB6LFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bWFrZVJvdGF0aW9uWDogZnVuY3Rpb24gKCB0aGV0YSApIHtcblxuXHRcdHZhciBjID0gTWF0aC5jb3MoIHRoZXRhICksIHMgPSBNYXRoLnNpbiggdGhldGEgKTtcblxuXHRcdHRoaXMuc2V0KFxuXG5cdFx0XHQxLCAwLCAwLCAwLFxuXHRcdFx0MCwgYywgLSBzLCAwLFxuXHRcdFx0MCwgcywgYywgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG1ha2VSb3RhdGlvblk6IGZ1bmN0aW9uICggdGhldGEgKSB7XG5cblx0XHR2YXIgYyA9IE1hdGguY29zKCB0aGV0YSApLCBzID0gTWF0aC5zaW4oIHRoZXRhICk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0IGMsIDAsIHMsIDAsXG5cdFx0XHQgMCwgMSwgMCwgMCxcblx0XHRcdC0gcywgMCwgYywgMCxcblx0XHRcdCAwLCAwLCAwLCAxXG5cblx0XHQpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtYWtlUm90YXRpb25aOiBmdW5jdGlvbiAoIHRoZXRhICkge1xuXG5cdFx0dmFyIGMgPSBNYXRoLmNvcyggdGhldGEgKSwgcyA9IE1hdGguc2luKCB0aGV0YSApO1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdGMsIC0gcywgMCwgMCxcblx0XHRcdHMsIGMsIDAsIDAsXG5cdFx0XHQwLCAwLCAxLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdHJldHVybiB0aGlzO1xuXG5cdH0sXG5cblx0bWFrZVJvdGF0aW9uQXhpczogZnVuY3Rpb24gKCBheGlzLCBhbmdsZSApIHtcblxuXHRcdC8vIEJhc2VkIG9uIGh0dHA6Ly93d3cuZ2FtZWRldi5uZXQvcmVmZXJlbmNlL2FydGljbGVzL2FydGljbGUxMTk5LmFzcFxuXG5cdFx0dmFyIGMgPSBNYXRoLmNvcyggYW5nbGUgKTtcblx0XHR2YXIgcyA9IE1hdGguc2luKCBhbmdsZSApO1xuXHRcdHZhciB0ID0gMSAtIGM7XG5cdFx0dmFyIHggPSBheGlzLngsIHkgPSBheGlzLnksIHogPSBheGlzLno7XG5cdFx0dmFyIHR4ID0gdCAqIHgsIHR5ID0gdCAqIHk7XG5cblx0XHR0aGlzLnNldChcblxuXHRcdFx0dHggKiB4ICsgYywgdHggKiB5IC0gcyAqIHosIHR4ICogeiArIHMgKiB5LCAwLFxuXHRcdFx0dHggKiB5ICsgcyAqIHosIHR5ICogeSArIGMsIHR5ICogeiAtIHMgKiB4LCAwLFxuXHRcdFx0dHggKiB6IC0gcyAqIHksIHR5ICogeiArIHMgKiB4LCB0ICogeiAqIHogKyBjLCAwLFxuXHRcdFx0MCwgMCwgMCwgMVxuXG5cdFx0KTtcblxuXHRcdCByZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG1ha2VTY2FsZTogZnVuY3Rpb24gKCB4LCB5LCB6ICkge1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdHgsIDAsIDAsIDAsXG5cdFx0XHQwLCB5LCAwLCAwLFxuXHRcdFx0MCwgMCwgeiwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdG1ha2VTaGVhcjogZnVuY3Rpb24gKCB4LCB5LCB6ICkge1xuXG5cdFx0dGhpcy5zZXQoXG5cblx0XHRcdDEsIHksIHosIDAsXG5cdFx0XHR4LCAxLCB6LCAwLFxuXHRcdFx0eCwgeSwgMSwgMCxcblx0XHRcdDAsIDAsIDAsIDFcblxuXHRcdCk7XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdGNvbXBvc2U6IGZ1bmN0aW9uICggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkge1xuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblxuXHRcdHZhciB4ID0gcXVhdGVybmlvbi5feCwgeSA9IHF1YXRlcm5pb24uX3ksIHogPSBxdWF0ZXJuaW9uLl96LCB3ID0gcXVhdGVybmlvbi5fdztcblx0XHR2YXIgeDIgPSB4ICsgeCxcdHkyID0geSArIHksIHoyID0geiArIHo7XG5cdFx0dmFyIHh4ID0geCAqIHgyLCB4eSA9IHggKiB5MiwgeHogPSB4ICogejI7XG5cdFx0dmFyIHl5ID0geSAqIHkyLCB5eiA9IHkgKiB6MiwgenogPSB6ICogejI7XG5cdFx0dmFyIHd4ID0gdyAqIHgyLCB3eSA9IHcgKiB5Miwgd3ogPSB3ICogejI7XG5cblx0XHR2YXIgc3ggPSBzY2FsZS54LCBzeSA9IHNjYWxlLnksIHN6ID0gc2NhbGUuejtcblxuXHRcdHRlWyAwIF0gPSAoIDEgLSAoIHl5ICsgenogKSApICogc3g7XG5cdFx0dGVbIDEgXSA9ICggeHkgKyB3eiApICogc3g7XG5cdFx0dGVbIDIgXSA9ICggeHogLSB3eSApICogc3g7XG5cdFx0dGVbIDMgXSA9IDA7XG5cblx0XHR0ZVsgNCBdID0gKCB4eSAtIHd6ICkgKiBzeTtcblx0XHR0ZVsgNSBdID0gKCAxIC0gKCB4eCArIHp6ICkgKSAqIHN5O1xuXHRcdHRlWyA2IF0gPSAoIHl6ICsgd3ggKSAqIHN5O1xuXHRcdHRlWyA3IF0gPSAwO1xuXG5cdFx0dGVbIDggXSA9ICggeHogKyB3eSApICogc3o7XG5cdFx0dGVbIDkgXSA9ICggeXogLSB3eCApICogc3o7XG5cdFx0dGVbIDEwIF0gPSAoIDEgLSAoIHh4ICsgeXkgKSApICogc3o7XG5cdFx0dGVbIDExIF0gPSAwO1xuXG5cdFx0dGVbIDEyIF0gPSBwb3NpdGlvbi54O1xuXHRcdHRlWyAxMyBdID0gcG9zaXRpb24ueTtcblx0XHR0ZVsgMTQgXSA9IHBvc2l0aW9uLno7XG5cdFx0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRkZWNvbXBvc2U6IGZ1bmN0aW9uICgpIHtcblxuXHRcdHZhciB2ZWN0b3IgPSBuZXcgVmVjdG9yMygpO1xuXHRcdHZhciBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXG5cdFx0cmV0dXJuIGZ1bmN0aW9uIGRlY29tcG9zZSggcG9zaXRpb24sIHF1YXRlcm5pb24sIHNjYWxlICkge1xuXG5cdFx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0XHR2YXIgc3ggPSB2ZWN0b3Iuc2V0KCB0ZVsgMCBdLCB0ZVsgMSBdLCB0ZVsgMiBdICkubGVuZ3RoKCk7XG5cdFx0XHR2YXIgc3kgPSB2ZWN0b3Iuc2V0KCB0ZVsgNCBdLCB0ZVsgNSBdLCB0ZVsgNiBdICkubGVuZ3RoKCk7XG5cdFx0XHR2YXIgc3ogPSB2ZWN0b3Iuc2V0KCB0ZVsgOCBdLCB0ZVsgOSBdLCB0ZVsgMTAgXSApLmxlbmd0aCgpO1xuXG5cdFx0XHQvLyBpZiBkZXRlcm1pbmUgaXMgbmVnYXRpdmUsIHdlIG5lZWQgdG8gaW52ZXJ0IG9uZSBzY2FsZVxuXHRcdFx0dmFyIGRldCA9IHRoaXMuZGV0ZXJtaW5hbnQoKTtcblx0XHRcdGlmICggZGV0IDwgMCApIHN4ID0gLSBzeDtcblxuXHRcdFx0cG9zaXRpb24ueCA9IHRlWyAxMiBdO1xuXHRcdFx0cG9zaXRpb24ueSA9IHRlWyAxMyBdO1xuXHRcdFx0cG9zaXRpb24ueiA9IHRlWyAxNCBdO1xuXG5cdFx0XHQvLyBzY2FsZSB0aGUgcm90YXRpb24gcGFydFxuXHRcdFx0bWF0cml4LmNvcHkoIHRoaXMgKTtcblxuXHRcdFx0dmFyIGludlNYID0gMSAvIHN4O1xuXHRcdFx0dmFyIGludlNZID0gMSAvIHN5O1xuXHRcdFx0dmFyIGludlNaID0gMSAvIHN6O1xuXG5cdFx0XHRtYXRyaXguZWxlbWVudHNbIDAgXSAqPSBpbnZTWDtcblx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMSBdICo9IGludlNYO1xuXHRcdFx0bWF0cml4LmVsZW1lbnRzWyAyIF0gKj0gaW52U1g7XG5cblx0XHRcdG1hdHJpeC5lbGVtZW50c1sgNCBdICo9IGludlNZO1xuXHRcdFx0bWF0cml4LmVsZW1lbnRzWyA1IF0gKj0gaW52U1k7XG5cdFx0XHRtYXRyaXguZWxlbWVudHNbIDYgXSAqPSBpbnZTWTtcblxuXHRcdFx0bWF0cml4LmVsZW1lbnRzWyA4IF0gKj0gaW52U1o7XG5cdFx0XHRtYXRyaXguZWxlbWVudHNbIDkgXSAqPSBpbnZTWjtcblx0XHRcdG1hdHJpeC5lbGVtZW50c1sgMTAgXSAqPSBpbnZTWjtcblxuXHRcdFx0cXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoIG1hdHJpeCApO1xuXG5cdFx0XHRzY2FsZS54ID0gc3g7XG5cdFx0XHRzY2FsZS55ID0gc3k7XG5cdFx0XHRzY2FsZS56ID0gc3o7XG5cblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0fTtcblxuXHR9KCksXG5cblx0bWFrZVBlcnNwZWN0aXZlOiBmdW5jdGlvbiAoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkge1xuXG5cdFx0aWYgKCBmYXIgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Y29uc29sZS53YXJuKCAnVEhSRUUuTWF0cml4NDogLm1ha2VQZXJzcGVjdGl2ZSgpIGhhcyBiZWVuIHJlZGVmaW5lZCBhbmQgaGFzIGEgbmV3IHNpZ25hdHVyZS4gUGxlYXNlIGNoZWNrIHRoZSBkb2NzLicgKTtcblxuXHRcdH1cblxuXHRcdHZhciB0ZSA9IHRoaXMuZWxlbWVudHM7XG5cdFx0dmFyIHggPSAyICogbmVhciAvICggcmlnaHQgLSBsZWZ0ICk7XG5cdFx0dmFyIHkgPSAyICogbmVhciAvICggdG9wIC0gYm90dG9tICk7XG5cblx0XHR2YXIgYSA9ICggcmlnaHQgKyBsZWZ0ICkgLyAoIHJpZ2h0IC0gbGVmdCApO1xuXHRcdHZhciBiID0gKCB0b3AgKyBib3R0b20gKSAvICggdG9wIC0gYm90dG9tICk7XG5cdFx0dmFyIGMgPSAtICggZmFyICsgbmVhciApIC8gKCBmYXIgLSBuZWFyICk7XG5cdFx0dmFyIGQgPSAtIDIgKiBmYXIgKiBuZWFyIC8gKCBmYXIgLSBuZWFyICk7XG5cblx0XHR0ZVsgMCBdID0geDtcdHRlWyA0IF0gPSAwO1x0dGVbIDggXSA9IGE7XHR0ZVsgMTIgXSA9IDA7XG5cdFx0dGVbIDEgXSA9IDA7XHR0ZVsgNSBdID0geTtcdHRlWyA5IF0gPSBiO1x0dGVbIDEzIF0gPSAwO1xuXHRcdHRlWyAyIF0gPSAwO1x0dGVbIDYgXSA9IDA7XHR0ZVsgMTAgXSA9IGM7XHR0ZVsgMTQgXSA9IGQ7XG5cdFx0dGVbIDMgXSA9IDA7XHR0ZVsgNyBdID0gMDtcdHRlWyAxMSBdID0gLSAxO1x0dGVbIDE1IF0gPSAwO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRtYWtlT3J0aG9ncmFwaGljOiBmdW5jdGlvbiAoIGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgbmVhciwgZmFyICkge1xuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR2YXIgdyA9IDEuMCAvICggcmlnaHQgLSBsZWZ0ICk7XG5cdFx0dmFyIGggPSAxLjAgLyAoIHRvcCAtIGJvdHRvbSApO1xuXHRcdHZhciBwID0gMS4wIC8gKCBmYXIgLSBuZWFyICk7XG5cblx0XHR2YXIgeCA9ICggcmlnaHQgKyBsZWZ0ICkgKiB3O1xuXHRcdHZhciB5ID0gKCB0b3AgKyBib3R0b20gKSAqIGg7XG5cdFx0dmFyIHogPSAoIGZhciArIG5lYXIgKSAqIHA7XG5cblx0XHR0ZVsgMCBdID0gMiAqIHc7XHR0ZVsgNCBdID0gMDtcdHRlWyA4IF0gPSAwO1x0dGVbIDEyIF0gPSAtIHg7XG5cdFx0dGVbIDEgXSA9IDA7XHR0ZVsgNSBdID0gMiAqIGg7XHR0ZVsgOSBdID0gMDtcdHRlWyAxMyBdID0gLSB5O1xuXHRcdHRlWyAyIF0gPSAwO1x0dGVbIDYgXSA9IDA7XHR0ZVsgMTAgXSA9IC0gMiAqIHA7XHR0ZVsgMTQgXSA9IC0gejtcblx0XHR0ZVsgMyBdID0gMDtcdHRlWyA3IF0gPSAwO1x0dGVbIDExIF0gPSAwO1x0dGVbIDE1IF0gPSAxO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cblx0fSxcblxuXHRlcXVhbHM6IGZ1bmN0aW9uICggbWF0cml4ICkge1xuXG5cdFx0dmFyIHRlID0gdGhpcy5lbGVtZW50cztcblx0XHR2YXIgbWUgPSBtYXRyaXguZWxlbWVudHM7XG5cblx0XHRmb3IgKCB2YXIgaSA9IDA7IGkgPCAxNjsgaSArKyApIHtcblxuXHRcdFx0aWYgKCB0ZVsgaSBdICE9PSBtZVsgaSBdICkgcmV0dXJuIGZhbHNlO1xuXG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cblx0fSxcblxuXHRmcm9tQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggb2Zmc2V0ID09PSB1bmRlZmluZWQgKSBvZmZzZXQgPSAwO1xuXG5cdFx0Zm9yICggdmFyIGkgPSAwOyBpIDwgMTY7IGkgKysgKSB7XG5cblx0XHRcdHRoaXMuZWxlbWVudHNbIGkgXSA9IGFycmF5WyBpICsgb2Zmc2V0IF07XG5cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblxuXHR9LFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uICggYXJyYXksIG9mZnNldCApIHtcblxuXHRcdGlmICggYXJyYXkgPT09IHVuZGVmaW5lZCApIGFycmF5ID0gW107XG5cdFx0aWYgKCBvZmZzZXQgPT09IHVuZGVmaW5lZCApIG9mZnNldCA9IDA7XG5cblx0XHR2YXIgdGUgPSB0aGlzLmVsZW1lbnRzO1xuXG5cdFx0YXJyYXlbIG9mZnNldCBdID0gdGVbIDAgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMSBdID0gdGVbIDEgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMiBdID0gdGVbIDIgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMyBdID0gdGVbIDMgXTtcblxuXHRcdGFycmF5WyBvZmZzZXQgKyA0IF0gPSB0ZVsgNCBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA1IF0gPSB0ZVsgNSBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA2IF0gPSB0ZVsgNiBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyA3IF0gPSB0ZVsgNyBdO1xuXG5cdFx0YXJyYXlbIG9mZnNldCArIDggXSA9IHRlWyA4IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDkgXSA9IHRlWyA5IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDEwIF0gPSB0ZVsgMTAgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMTEgXSA9IHRlWyAxMSBdO1xuXG5cdFx0YXJyYXlbIG9mZnNldCArIDEyIF0gPSB0ZVsgMTIgXTtcblx0XHRhcnJheVsgb2Zmc2V0ICsgMTMgXSA9IHRlWyAxMyBdO1xuXHRcdGFycmF5WyBvZmZzZXQgKyAxNCBdID0gdGVbIDE0IF07XG5cdFx0YXJyYXlbIG9mZnNldCArIDE1IF0gPSB0ZVsgMTUgXTtcblxuXHRcdHJldHVybiBhcnJheTtcblxuXHR9XG5cbn0gKTtcblxuXG5leHBvcnQgeyBNYXRyaXg0IH07Il19
|