@rocketshow/designer 1.36.0 → 1.38.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/assets/i18n/de.json +11 -8
- package/assets/i18n/en.json +11 -8
- package/esm2022/lib/designer.component.mjs +10 -10
- package/esm2022/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.mjs +181 -33
- package/esm2022/lib/fixture/fixture-capability/fixture-capability.component.mjs +30 -8
- package/esm2022/lib/models/fixture-capability.mjs +47 -4
- package/esm2022/lib/preview/models/color-changer-3d.mjs +15 -27
- package/esm2022/lib/preview/models/fixture-3d.mjs +91 -105
- package/esm2022/lib/preview/models/moving-head-3d.mjs +32 -41
- package/esm2022/lib/preview/preview.component.mjs +4 -4
- package/esm2022/lib/services/fixture.service.mjs +1 -1
- package/esm2022/lib/services/preset.service.mjs +3 -3
- package/esm2022/lib/services/preview.service.mjs +19 -3
- package/esm2022/lib/user/user-register/user-register.component.mjs +3 -3
- package/fesm2022/rocketshow-designer.mjs +422 -229
- package/fesm2022/rocketshow-designer.mjs.map +1 -1
- package/lib/fixture/fixture-capability/fixture-capability-channel/fixture-capability-channel.component.d.ts +9 -2
- package/lib/fixture/fixture-capability/fixture-capability.component.d.ts +5 -1
- package/lib/models/fixture-capability.d.ts +47 -4
- package/lib/preview/models/color-changer-3d.d.ts +4 -5
- package/lib/preview/models/fixture-3d.d.ts +17 -16
- package/lib/preview/models/moving-head-3d.d.ts +4 -5
- package/lib/services/preview.service.d.ts +5 -1
- package/package.json +1 -1
- package/rocketshow-designer-1.38.0.tgz +0 -0
- package/rocketshow-designer-1.36.0.tgz +0 -0
|
@@ -2,8 +2,9 @@ import * as THREE from 'three';
|
|
|
2
2
|
import { Positioning } from '../../models/fixture';
|
|
3
3
|
import { FixtureCapabilityColor, FixtureCapabilityType } from '../../models/fixture-capability';
|
|
4
4
|
export class Fixture3d {
|
|
5
|
-
constructor(fixtureService, fixture, scene) {
|
|
5
|
+
constructor(fixtureService, previewService, fixture, scene, hasSpotLight = false) {
|
|
6
6
|
this.fixtureService = fixtureService;
|
|
7
|
+
this.previewService = previewService;
|
|
7
8
|
this.pointLightMaxIntensity = 2;
|
|
8
9
|
this.spotLightLightMaxIntensity = 10;
|
|
9
10
|
this.fixtureHasDimmer = false;
|
|
@@ -12,13 +13,10 @@ export class Fixture3d {
|
|
|
12
13
|
this.dimmer = 0;
|
|
13
14
|
this.isSelected = false;
|
|
14
15
|
this.isLoaded = false;
|
|
16
|
+
this.hasSpotLight = false;
|
|
15
17
|
this.fixture = fixture;
|
|
16
18
|
this.scene = scene;
|
|
17
|
-
|
|
18
|
-
this.selectedMaterial = new THREE.MeshLambertMaterial({
|
|
19
|
-
color: 0xff00ff,
|
|
20
|
-
emissive: 0xff00ff,
|
|
21
|
-
});
|
|
19
|
+
this.hasSpotLight = hasSpotLight;
|
|
22
20
|
// evaluate, various capabilities of this fixture
|
|
23
21
|
for (const cachedChannel of this.fixture.channels) {
|
|
24
22
|
if (cachedChannel.channel) {
|
|
@@ -38,28 +36,88 @@ export class Fixture3d {
|
|
|
38
36
|
}
|
|
39
37
|
}
|
|
40
38
|
}
|
|
39
|
+
createSpotlightMaterial() {
|
|
40
|
+
const vertexShader = `
|
|
41
|
+
varying vec3 vNormal;
|
|
42
|
+
varying vec3 vWorldPosition;
|
|
43
|
+
|
|
44
|
+
void main(){
|
|
45
|
+
vNormal = normalize(normalMatrix * normal);
|
|
46
|
+
|
|
47
|
+
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
48
|
+
vWorldPosition = worldPosition.xyz;
|
|
49
|
+
|
|
50
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
51
|
+
}`;
|
|
52
|
+
const fragmentShader = `
|
|
53
|
+
varying vec3 vNormal;
|
|
54
|
+
varying vec3 vWorldPosition;
|
|
55
|
+
|
|
56
|
+
uniform vec3 lightColor;
|
|
57
|
+
uniform float opacity;
|
|
58
|
+
uniform vec3 spotPosition;
|
|
59
|
+
uniform float attenuation;
|
|
60
|
+
uniform float anglePower;
|
|
61
|
+
|
|
62
|
+
void main(){
|
|
63
|
+
float intensity;
|
|
64
|
+
|
|
65
|
+
intensity = distance(vWorldPosition, spotPosition) / attenuation;
|
|
66
|
+
intensity = 1.0 - clamp(intensity, 0.0, 1.0);
|
|
67
|
+
|
|
68
|
+
vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
|
|
69
|
+
float angleIntensity = pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);
|
|
70
|
+
intensity = intensity * angleIntensity * opacity;
|
|
71
|
+
|
|
72
|
+
gl_FragColor = vec4(lightColor, intensity);
|
|
73
|
+
}`;
|
|
74
|
+
this.spotlightMaterial = new THREE.ShaderMaterial({
|
|
75
|
+
uniforms: {
|
|
76
|
+
attenuation: {
|
|
77
|
+
type: 'f',
|
|
78
|
+
value: 800.0,
|
|
79
|
+
},
|
|
80
|
+
anglePower: {
|
|
81
|
+
type: 'f',
|
|
82
|
+
value: 2,
|
|
83
|
+
},
|
|
84
|
+
spotPosition: {
|
|
85
|
+
type: 'v3',
|
|
86
|
+
value: new THREE.Vector3(0, 0, 0),
|
|
87
|
+
},
|
|
88
|
+
lightColor: {
|
|
89
|
+
type: 'c',
|
|
90
|
+
value: new THREE.Color('white'),
|
|
91
|
+
},
|
|
92
|
+
opacity: {
|
|
93
|
+
type: 'f',
|
|
94
|
+
value: 1.0,
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
vertexShader,
|
|
98
|
+
fragmentShader,
|
|
99
|
+
transparent: true,
|
|
100
|
+
depthWrite: false,
|
|
101
|
+
});
|
|
102
|
+
}
|
|
41
103
|
createObjects() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
// Add the point light for the surrounding light
|
|
60
|
-
this.pointLight = new THREE.PointLight(0xffffff, 500, 0, 0.1);
|
|
61
|
-
this.spotlightGroup.add(this.pointLight);
|
|
62
|
-
this.pointLight.position.set(0, -1.4, 0);
|
|
104
|
+
if (this.hasSpotLight) {
|
|
105
|
+
this.createSpotlightMaterial();
|
|
106
|
+
this.spotLight = new THREE.SpotLight(0xffffff, 50000);
|
|
107
|
+
this.spotLight.angle = 2;
|
|
108
|
+
this.spotLight.penumbra = 1;
|
|
109
|
+
this.spotLight.decay = 0.01;
|
|
110
|
+
this.spotLight.distance = 0;
|
|
111
|
+
this.spotLight.intensity = 1;
|
|
112
|
+
const spotLightTarget = new THREE.Object3D();
|
|
113
|
+
this.spotLight.target = spotLightTarget;
|
|
114
|
+
this.spotlightGroup = new THREE.Object3D();
|
|
115
|
+
this.spotlightGroup.add(this.spotLight);
|
|
116
|
+
this.spotlightGroup.add(spotLightTarget);
|
|
117
|
+
this.spotLight.position.set(0, -1.4, 0);
|
|
118
|
+
spotLightTarget.position.set(0, -10, 0);
|
|
119
|
+
this.createSpotLightBeam();
|
|
120
|
+
}
|
|
63
121
|
}
|
|
64
122
|
getCapabilityInValue(channel, value) {
|
|
65
123
|
for (const capability of channel.capabilities) {
|
|
@@ -140,11 +198,7 @@ export class Fixture3d {
|
|
|
140
198
|
// Take the color into account for the beam (don't show a black beam)
|
|
141
199
|
const color = new THREE.Color('rgb(' + this.colorRed + ', ' + this.colorGreen + ', ' + this.colorBlue + ')');
|
|
142
200
|
const intensityColor = Math.max(this.colorRed, this.colorGreen, this.colorBlue);
|
|
143
|
-
if (this.
|
|
144
|
-
this.pointLight.color = color;
|
|
145
|
-
this.pointLight.intensity = this.pointLightMaxIntensity * this.dimmer;
|
|
146
|
-
}
|
|
147
|
-
if (this.spotLight) {
|
|
201
|
+
if (this.hasSpotLight) {
|
|
148
202
|
this.spotLight.color = color;
|
|
149
203
|
this.spotLightBeam.material.uniforms.lightColor.value = color;
|
|
150
204
|
this.spotLightBeam.material.uniforms.opacity.value = Math.min(intensityColor, this.dimmer);
|
|
@@ -184,82 +238,13 @@ export class Fixture3d {
|
|
|
184
238
|
}
|
|
185
239
|
}
|
|
186
240
|
}
|
|
187
|
-
atmosphereMat() {
|
|
188
|
-
const vertexShader = `
|
|
189
|
-
varying vec3 vNormal;
|
|
190
|
-
varying vec3 vWorldPosition;
|
|
191
|
-
|
|
192
|
-
void main(){
|
|
193
|
-
vNormal = normalize(normalMatrix * normal);
|
|
194
|
-
|
|
195
|
-
vec4 worldPosition = modelMatrix * vec4(position, 1.0);
|
|
196
|
-
vWorldPosition = worldPosition.xyz;
|
|
197
|
-
|
|
198
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
|
|
199
|
-
}`;
|
|
200
|
-
const fragmentShader = `
|
|
201
|
-
varying vec3 vNormal;
|
|
202
|
-
varying vec3 vWorldPosition;
|
|
203
|
-
|
|
204
|
-
uniform vec3 lightColor;
|
|
205
|
-
uniform float opacity;
|
|
206
|
-
uniform vec3 spotPosition;
|
|
207
|
-
uniform float attenuation;
|
|
208
|
-
uniform float anglePower;
|
|
209
|
-
|
|
210
|
-
void main(){
|
|
211
|
-
float intensity;
|
|
212
|
-
|
|
213
|
-
intensity = distance(vWorldPosition, spotPosition) / attenuation;
|
|
214
|
-
intensity = 1.0 - clamp(intensity, 0.0, 1.0);
|
|
215
|
-
|
|
216
|
-
vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));
|
|
217
|
-
float angleIntensity = pow(dot(normal, vec3(0.0, 0.0, 1.0)), anglePower);
|
|
218
|
-
intensity = intensity * angleIntensity * opacity;
|
|
219
|
-
|
|
220
|
-
gl_FragColor = vec4(lightColor, intensity);
|
|
221
|
-
}`;
|
|
222
|
-
const material = new THREE.ShaderMaterial({
|
|
223
|
-
uniforms: {
|
|
224
|
-
attenuation: {
|
|
225
|
-
type: 'f',
|
|
226
|
-
value: 800.0,
|
|
227
|
-
},
|
|
228
|
-
anglePower: {
|
|
229
|
-
type: 'f',
|
|
230
|
-
value: 2,
|
|
231
|
-
},
|
|
232
|
-
spotPosition: {
|
|
233
|
-
type: 'v3',
|
|
234
|
-
value: new THREE.Vector3(0, 0, 0),
|
|
235
|
-
},
|
|
236
|
-
lightColor: {
|
|
237
|
-
type: 'c',
|
|
238
|
-
value: new THREE.Color('white'),
|
|
239
|
-
},
|
|
240
|
-
opacity: {
|
|
241
|
-
type: 'f',
|
|
242
|
-
value: 1.0,
|
|
243
|
-
},
|
|
244
|
-
},
|
|
245
|
-
vertexShader,
|
|
246
|
-
fragmentShader,
|
|
247
|
-
transparent: true,
|
|
248
|
-
depthWrite: false,
|
|
249
|
-
});
|
|
250
|
-
return material;
|
|
251
|
-
}
|
|
252
241
|
createSpotLightBeam() {
|
|
253
|
-
if (this.spotLightBeam) {
|
|
254
|
-
this.spotlightGroup.remove(this.spotLightBeam);
|
|
255
|
-
}
|
|
256
242
|
// TODO set the correct angle from the profile
|
|
257
243
|
const beamAngleDegrees = 14;
|
|
258
244
|
const geometry = new THREE.CylinderGeometry(0.1, beamAngleDegrees * 1.2, 100, 64, 20, false);
|
|
259
245
|
geometry.applyMatrix4(new THREE.Matrix4().makeTranslation(0, -geometry.parameters.height / 2, 0));
|
|
260
246
|
geometry.applyMatrix4(new THREE.Matrix4().makeRotationX(-Math.PI / 2));
|
|
261
|
-
this.
|
|
262
|
-
this.spotLightBeam = new THREE.Mesh(geometry, this.atmosphereMaterial);
|
|
247
|
+
this.spotLightBeam = new THREE.Mesh(geometry, this.spotlightMaterial);
|
|
263
248
|
this.spotLightBeam.position.set(0, -0.02, 0);
|
|
264
249
|
this.spotLightBeam.receiveShadow = false;
|
|
265
250
|
this.spotLightBeam.castShadow = false;
|
|
@@ -267,8 +252,9 @@ export class Fixture3d {
|
|
|
267
252
|
this.spotLightBeam.rotation.x = Math.PI / 2;
|
|
268
253
|
}
|
|
269
254
|
destroy() {
|
|
270
|
-
this.
|
|
271
|
-
|
|
255
|
+
if (this.hasSpotLight) {
|
|
256
|
+
this.spotlightMaterial.dispose();
|
|
257
|
+
}
|
|
272
258
|
}
|
|
273
259
|
}
|
|
274
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvZml4dHVyZS0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFJaEcsTUFBTSxPQUFnQixTQUFTO0lBOEI3QixZQUFtQixjQUE4QixFQUFFLE9BQXNCLEVBQUUsS0FBVTtRQUFsRSxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUE3QmhDLDJCQUFzQixHQUFXLENBQUMsQ0FBQztRQUNuQywrQkFBMEIsR0FBVyxFQUFFLENBQUM7UUFHekQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQVF4QixXQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRVgsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsNkVBQTZFO1FBQzdFLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNwRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEQsSUFBSSxhQUFhLENBQUMsT0FBTyxF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QUFLLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xHLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXZFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQztRQUV0QyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZUNoYW5uZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvY2FjaGVkLWZpeHR1cmUtY2hhbm5lbCc7XG5pbXBvcnQgeyBQb3NpdGlvbmluZyB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IsIEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml4dHVyZTNkIHtcbiAgcHJpdmF0ZSByZWFkb25seSBwb2ludExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAyO1xuICBwcml2YXRlIHJlYWRvbmx5IHNwb3RMaWdodExpZ2h0TWF4SW50ZW5zaXR5OiBudW1iZXIgPSAxMDtcblxuICBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlO1xuICBmaXh0dXJlSGFzRGltbWVyID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvcldoZWVsID0gZmFsc2U7XG4gIGZpeHR1cmVIYXNDb2xvciA9IGZhbHNlO1xuXG4gIHNjZW5lOiBhbnk7XG5cbiAgY29sb3JSZWQ6IG51bWJlcjtcbiAgY29sb3JHcmVlbjogbnVtYmVyO1xuICBjb2xvckJsdWU6IG51bWJlcjtcblxuICBkaW1tZXIgPSAwO1xuXG4gIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgaXNMb2FkZWQgPSBmYWxzZTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0ZWRNYXRlcmlhbDogVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbDtcblxuICBwcm90ZWN0ZWQgcG9pbnRMaWdodDogVEhSRUUuUG9pbnRMaWdodDtcblxuICBwcm90ZWN0ZWQgYXRtb3NwaGVyZU1hdGVyaWFsOiBUSFJFRS5TaGFkZXJNYXRlcmlhbDtcbiAgcHJvdGVjdGVkIHNwb3RMaWdodDogVEhSRUUuU3BvdExpZ2h0O1xuICBwcm90ZWN0ZWQgc3BvdExpZ2h0SGVscGVyOiBUSFJFRS5TcG90TGlnaHRIZWxwZXI7XG4gIHByb3RlY3RlZCBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuICBwcm90ZWN0ZWQgc3BvdGxpZ2h0R3JvdXA6IFRIUkVFLk9iamVjdDNEO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIGZpeHR1cmU6IENhY2hlZEZpeHR1cmUsIHNjZW5lOiBhbnkpIHtcbiAgICB0aGlzLmZpeHR1cmUgPSBmaXh0dXJlO1xuICAgIHRoaXMuc2NlbmUgPSBzY2VuZTtcblxuICAgIC8vIFRPRE8gRG9uJ3QgY3JlYXRlIGl0IGZvciBlYWNoIGZpeHR1cmUgYnV0IHBhc3MgaXQgZnJvbSB0aGUgcHJldmlldyBzZXJ2aWNlXG4gICAgdGhpcy5zZWxlY3RlZE1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hMYW1iZXJ0TWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4ZmYwMGZmLFxuICAgICAgZW1pc3NpdmU6IDB4ZmYwMGZmLFxuICAgIH0pO1xuXG4gICAgLy8gZXZhbHVhdGUsIHZhcmlvdXMgY2FwYWJpbGl0aWVzIG9mIHRoaXMgZml4dHVyZVxuICAgIGZvciAoY29uc3QgY2FjaGVkQ2hhbm5lbCBvZiB0aGlzLmZpeHR1cmUuY2hhbm5lbHMpIHtcbiAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNoYW5uZWwpIHtcbiAgICAgICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNhY2hlZENoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuSW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNEaW1tZXIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OlxuICAgICAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjYWNoZWRDaGFubmVsLmNvbG9yV2hlZWwpIHtcbiAgICAgICAgICB0aGlzLmZpeHR1cmVIYXNDb2xvcldoZWVsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYmplY3RzKCkge1xuICAgIC8vIEFkZCB0aGUgc3BvdGxpZ2h0XG4gICAgdGhpcy5zcG90TGlnaHQgPSBuZXcgVEhSRUUuU3BvdExpZ2h0KDB4ZmZmZmZmLCA1MDAwMCk7XG4gICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSAyO1xuICAgIHRoaXMuc3BvdExpZ2h0LnBlbnVtYnJhID0gMTtcbiAgICB0aGlzLnNwb3RMaWdodC5kZWNheSA9IDAuMDE7XG4gICAgdGhpcy5zcG90TGlnaHQuZGlzdGFuY2UgPSAwO1xuICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IDE7XG5cbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlciA9IG5ldyBUSFJFRS5TcG90TGlnaHRIZWxwZXIodGhpcy5zcG90TGlnaHQpO1xuICAgIHRoaXMuc2NlbmUuYWRkKHRoaXMuc3BvdExpZ2h0SGVscGVyKTtcblxuICAgIGNvbnN0IHNwb3RMaWdodFRhcmdldCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIHRoaXMuc3BvdExpZ2h0LnRhcmdldCA9IHNwb3RMaWdodFRhcmdldDtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodCk7XG4gICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQoc3BvdExpZ2h0VGFyZ2V0KTtcbiAgICB0aGlzLnNwb3RMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG4gICAgc3BvdExpZ2h0VGFyZ2V0LnBvc2l0aW9uLnNldCgwLCAtMTAsIDApO1xuICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuXG4gICAgLy8gQWRkIHRoZSBwb2ludCBsaWdodCBmb3IgdGhlIHN1cnJvdW5kaW5nIGxpZ2h0XG4gICAgdGhpcy5wb2ludExpZ2h0ID0gbmV3IFRIUkVFLlBvaW50TGlnaHQoMHhmZmZmZmYsIDUwMCwgMCwgMC4xKTtcbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnBvaW50TGlnaHQpO1xuICAgIHRoaXMucG9pbnRMaWdodC5wb3NpdGlvbi5zZXQoMCwgLTEuNCwgMCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbDogQ2FjaGVkRml4dHVyZUNoYW5uZWwsIHZhbHVlOiBudW1iZXIpOiBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB7XG4gICAgZm9yIChjb25zdCBjYXBhYmlsaXR5IG9mIGNoYW5uZWwuY2FwYWJpbGl0aWVzKSB7XG4gICAgICBpZiAoXG4gICAgICAgIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgKHZhbHVlID49IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSAmJiB2YWx1ZSA8PSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0pXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGNhcGFiaWxpdHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIEFwcGx5IHRoZSBwcm9wZXJ0aWVzIG9mIHRoZSBiYXNlIGZpeHR1cmUgdG8gdGhlIHByZXZpZXdcbiAgdXBkYXRlUHJldmlldyhjaGFubmVsVmFsdWVzOiBGaXh0dXJlQ2hhbm5lbFZhbHVlW10sIG1hc3RlckRpbW1lclZhbHVlOiBudW1iZXIpIHtcbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgaWYgKHRoaXMuZml4dHVyZUhhc0RpbW1lcikge1xuICAgICAgdGhpcy5kaW1tZXIgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5jb2xvclJlZCA9IDI1NTtcbiAgICB0aGlzLmNvbG9yR3JlZW4gPSAyNTU7XG4gICAgdGhpcy5jb2xvckJsdWUgPSAyNTU7XG5cbiAgICBpZiAoIXRoaXMuZml4dHVyZUhhc0NvbG9yV2hlZWwgJiYgdGhpcy5maXh0dXJlSGFzQ29sb3IpIHtcbiAgICAgIHRoaXMuY29sb3JSZWQgPSAwO1xuICAgICAgdGhpcy5jb2xvckdyZWVuID0gMDtcbiAgICAgIHRoaXMuY29sb3JCbHVlID0gMDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG5cbiAgICAgIGlmIChjYXBhYmlsaXR5KSB7XG4gICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LnR5cGUpIHtcbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGxldCB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcjtcbiAgICAgICAgICAgIGlmIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICB2YWx1ZVBlcmNlbnRhZ2UgPVxuICAgICAgICAgICAgICAgIChjaGFubmVsVmFsdWUudmFsdWUgLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pIC9cbiAgICAgICAgICAgICAgICAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzFdIC0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpbW1lciA9IHZhbHVlUGVyY2VudGFnZSAqIG1hc3RlckRpbW1lclZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkNvbG9ySW50ZW5zaXR5OiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVBlcmNlbnRhZ2UgPSAoMjU1ICogY2hhbm5lbFZhbHVlLnZhbHVlKSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5jb2xvcikge1xuICAgICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5Q29sb3IuUmVkOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5HcmVlbjpcbiAgICAgICAgICAgICAgICAvLyBSb3VuZCBuZWVkZWQgZm9yIHRocmVlanNcbiAgICAgICAgICAgICAgICB0aGlzLmNvbG9yR3JlZW4gPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5CbHVlOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZCh2YWx1ZVBlcmNlbnRhZ2UpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLldoZWVsU2xvdDoge1xuICAgICAgICAgICAgY29uc3QgbWl4ZWRDb2xvciA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0TWl4ZWRXaGVlbFNsb3RDb2xvcihjYXBhYmlsaXR5LndoZWVsLCBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuc2xvdE51bWJlcik7XG4gICAgICAgICAgICBpZiAobWl4ZWRDb2xvcikge1xuICAgICAgICAgICAgICB0aGlzLmNvbG9yUmVkID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLnJlZCk7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQobWl4ZWRDb2xvci5ncmVlbik7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JCbHVlID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmJsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgdGhlIGNvbG9ycyBhbmQgaW50ZW5zaXRpZXNcbiAgICAvLyBBcHBseSB0aGUgZGltbWVyIHZhbHVlXG4gICAgLy8gVGFrZSB0aGUgY29sb3IgaW50byBhY2NvdW50IGZvciB0aGUgYmVhbSAoZG9uJ3Qgc2hvdyBhIGJsYWNrIGJlYW0pXG4gICAgY29uc3QgY29sb3IgPSBuZXcgVEhSRUUuQ29sb3IoJ3JnYignICsgdGhpcy5jb2xvclJlZCArICcsICcgKyB0aGlzLmNvbG9yR3JlZW4gKyAnLCAnICsgdGhpcy5jb2xvckJsdWUgKyAnKScpO1xuICAgIGNvbnN0IGludGVuc2l0eUNvbG9yID0gTWF0aC5tYXgodGhpcy5jb2xvclJlZCwgdGhpcy5jb2xvckdyZWVuLCB0aGlzLmNvbG9yQmx1ZSk7XG5cbiAgICBpZiAodGhpcy5wb2ludExpZ2h0KSB7XG4gICAgICB0aGlzLnBvaW50TGlnaHQuY29sb3IgPSBjb2xvcjtcbiAgICAgIHRoaXMucG9pbnRMaWdodC5pbnRlbnNpdHkgPSB0aGlzLnBvaW50TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0KSB7XG4gICAgICB0aGlzLnNwb3RMaWdodC5jb2xvciA9IGNvbG9yO1xuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLmxpZ2h0Q29sb3IudmFsdWUgPSBjb2xvcjtcblxuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLm9wYWNpdHkudmFsdWUgPSBNYXRoLm1pbihpbnRlbnNpdHlDb2xvciwgdGhpcy5kaW1tZXIpO1xuICAgICAgdGhpcy5zcG90TGlnaHQuaW50ZW5zaXR5ID0gdGhpcy5zcG90TGlnaHRMaWdodE1heEludGVuc2l0eSAqIHRoaXMuZGltbWVyO1xuICAgICAgdGhpcy5zcG90TGlnaHRCZWFtLm1hdGVyaWFsLnVuaWZvcm1zLnNwb3RQb3NpdGlvbi52YWx1ZSA9IHRoaXMuc3BvdGxpZ2h0R3JvdXAucG9zaXRpb247XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlUG9zaXRpb24ob2JqZWN0OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIC8vIFVwZGF0ZSB0aGUgcG9zaXRpb25cbiAgICBzd2l0Y2ggKHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uaW5nKSB7XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLnRvcEZyb250OiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21Gcm9udDoge1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCgxODApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZICsgMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy50b3BCYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDApO1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZIC0gMTMsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSBQb3NpdGlvbmluZy5ib3R0b21CYWNrOiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLm1hbnVhbDoge1xuICAgICAgICBvYmplY3QucG9zaXRpb24uc2V0KHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWCwgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25ZLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblgpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblkpO1xuICAgICAgICBvYmplY3Qucm90YXRpb24ueiA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aGlzLmZpeHR1cmUuZml4dHVyZS5yb3RhdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYXRtb3NwaGVyZU1hdCgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgICB2YXJ5aW5nIHZlYzMgdk5vcm1hbDtcbiAgICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblxuICAgICAgdm9pZCBtYWluKCl7XG4gICAgICAgIHZOb3JtYWwgPSBub3JtYWxpemUobm9ybWFsTWF0cml4ICogbm9ybWFsKTtcblxuICAgICAgICB2ZWM0IHdvcmxkUG9zaXRpb24gPSBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cbiAgICAgICAgZ2xfUG9zaXRpb25cdD0gcHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlld01hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICB9YDtcbiAgICBjb25zdCBmcmFnbWVudFNoYWRlciA9IGBcbiAgICAgIHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuICAgICAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXG4gICAgICB1bmlmb3JtIHZlYzMgbGlnaHRDb2xvcjtcbiAgICAgIHVuaWZvcm0gZmxvYXRcdG9wYWNpdHk7XG4gICAgICB1bmlmb3JtIHZlYzMgc3BvdFBvc2l0aW9uO1xuICAgICAgdW5pZm9ybSBmbG9hdCBhdHRlbnVhdGlvbjtcbiAgICAgIHVuaWZvcm0gZmxvYXRcdGFuZ2xlUG93ZXI7XG5cbiAgICAgIHZvaWQgbWFpbigpe1xuICAgICAgICBmbG9hdCBpbnRlbnNpdHk7XG5cbiAgICAgICAgaW50ZW5zaXR5XHQ9IGRpc3RhbmNlKHZXb3JsZFBvc2l0aW9uLCBzcG90UG9zaXRpb24pIC8gYXR0ZW51YXRpb247XG4gICAgICAgIGludGVuc2l0eVx0PSAxLjAgLSBjbGFtcChpbnRlbnNpdHksIDAuMCwgMS4wKTtcblxuICAgICAgICB2ZWMzIG5vcm1hbFx0PSB2ZWMzKHZOb3JtYWwueCwgdk5vcm1hbC55LCBhYnModk5vcm1hbC56KSk7XG4gICAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyhkb3Qobm9ybWFsLCB2ZWMzKDAuMCwgMC4wLCAxLjApKSwgYW5nbGVQb3dlcik7XG4gICAgICAgIGludGVuc2l0eVx0PSBpbnRlbnNpdHkgKiBhbmdsZUludGVuc2l0eSAqIG9wYWNpdHk7XG5cbiAgICAgICAgZ2xfRnJhZ0NvbG9yXHQ9IHZlYzQobGlnaHRDb2xvciwgaW50ZW5zaXR5KTtcbiAgICAgIH1gO1xuXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgdW5pZm9ybXM6IHtcbiAgICAgICAgYXR0ZW51YXRpb246IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDgwMC4wLFxuICAgICAgICB9LFxuICAgICAgICBhbmdsZVBvd2VyOiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAyLFxuICAgICAgICB9LFxuICAgICAgICBzcG90UG9zaXRpb246IHtcbiAgICAgICAgICB0eXBlOiAndjMnLFxuICAgICAgICAgIHZhbHVlOiBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAwKSxcbiAgICAgICAgfSxcbiAgICAgICAgbGlnaHRDb2xvcjoge1xuICAgICAgICAgIHR5cGU6ICdjJyxcbiAgICAgICAgICB2YWx1ZTogbmV3IFRIUkVFLkNvbG9yKCd3aGl0ZScpLFxuICAgICAgICB9LFxuICAgICAgICBvcGFjaXR5OiB7XG4gICAgICAgICAgdHlwZTogJ2YnLFxuICAgICAgICAgIHZhbHVlOiAxLjAsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgdmVydGV4U2hhZGVyLFxuICAgICAgZnJhZ21lbnRTaGFkZXIsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1hdGVyaWFsO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNwb3RMaWdodEJlYW0oKSB7XG4gICAgaWYgKHRoaXMuc3BvdExpZ2h0QmVhbSkge1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5yZW1vdmUodGhpcy5zcG90TGlnaHRCZWFtKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPIHNldCB0aGUgY29ycmVjdCBhbmdsZSBmcm9tIHRoZSBwcm9maWxlXG4gICAgY29uc3QgYmVhbUFuZ2xlRGVncmVlcyA9IDE0O1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLkN5bGluZGVyR2VvbWV0cnkoMC4xLCBiZWFtQW5nbGVEZWdyZWVzICogMS4yLCAxMDAsIDY0LCAyMCwgZmFsc2UpO1xuICAgIGdlb21ldHJ5LmFwcGx5TWF0cml4NChuZXcgVEhSRUUuTWF0cml4NCgpLm1ha2VUcmFuc2xhdGlvbigwLCAtZ2VvbWV0cnkucGFyYW1ldGVycy5oZWlnaHQgLyAyLCAwKSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVJvdGF0aW9uWCgtTWF0aC5QSSAvIDIpKTtcblxuICAgIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsID0gdGhpcy5hdG1vc3BoZXJlTWF0KCk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuYXRtb3NwaGVyZU1hdGVyaWFsKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucG9zaXRpb24uc2V0KDAsIC0wLjAyLCAwKTtcbiAgICB0aGlzLnNwb3RMaWdodEJlYW0ucmVjZWl2ZVNoYWRvdyA9IGZhbHNlO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5jYXN0U2hhZG93ID0gZmFsc2U7XG5cbiAgICB0aGlzLnNwb3RsaWdodEdyb3VwLmFkZCh0aGlzLnNwb3RMaWdodEJlYW0pO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5yb3RhdGlvbi54ID0gTWF0aC5QSSAvIDI7XG4gIH1cblxuICBkZXN0cm95KCkge1xuICAgIHRoaXMuc2VsZWN0ZWRNYXRlcmlhbC5kaXNwb3NlKCk7XG4gICAgdGhpcy5hdG1vc3BoZXJlTWF0ZXJpYWwuZGlzcG9zZSgpO1xuICB9XG59XG4iXX0=
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4dHVyZS0zZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbmVyL3NyYy9saWIvcHJldmlldy9tb2RlbHMvZml4dHVyZS0zZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUkvQixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLHFCQUFxQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFLaEcsTUFBTSxPQUFnQixTQUFTO0lBMEI3QixZQUNTLGNBQThCLEVBQzlCLGNBQThCLEVBQ3JDLE9BQXNCLEVBQ3RCLEtBQVUsRUFDVixlQUF3QixLQUFLO1FBSnRCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUEzQnRCLDJCQUFzQixHQUFXLENBQUMsQ0FBQztRQUNuQywrQkFBMEIsR0FBVyxFQUFFLENBQUM7UUFLakQscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUt4QixXQUFNLEdBQVcsQ0FBQyxDQUFDO1FBR3BCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWF0QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUVqQyxpREFBaUQ7UUFDakQsS0FBSyxNQUFNLGFBQWEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xELElBQUksYUFBYSxDQUFDLE9BQU8sRUFB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Q0FBQztJQUM5QyxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlQ2FwYWJpbGl0eSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IENhY2hlZEZpeHR1cmVDaGFubmVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlLWNoYW5uZWwnO1xuaW1wb3J0IHsgUG9zaXRpb25pbmcgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLCBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy5zZXJ2aWNlJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEZpeHR1cmUzZCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcG9pbnRMaWdodE1heEludGVuc2l0eTogbnVtYmVyID0gMjtcbiAgcHJpdmF0ZSByZWFkb25seSBzcG90TGlnaHRMaWdodE1heEludGVuc2l0eTogbnVtYmVyID0gMTA7XG5cbiAgcHJvdGVjdGVkIHNjZW5lOiBhbnk7XG5cbiAgcHVibGljIGZpeHR1cmU6IENhY2hlZEZpeHR1cmU7XG4gIHByaXZhdGUgZml4dHVyZUhhc0RpbW1lciA9IGZhbHNlO1xuICBwcml2YXRlIGZpeHR1cmVIYXNDb2xvcldoZWVsID0gZmFsc2U7XG4gIHByaXZhdGUgZml4dHVyZUhhc0NvbG9yID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb2xvclJlZDogbnVtYmVyO1xuICBwcml2YXRlIGNvbG9yR3JlZW46IG51bWJlcjtcbiAgcHJpdmF0ZSBjb2xvckJsdWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBkaW1tZXI6IG51bWJlciA9IDA7XG5cbiAgcHJvdGVjdGVkIGxhc3RTZWxlY3RlZDogYm9vbGVhbjtcbiAgcHVibGljIGlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGlzTG9hZGVkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGhhc1Nwb3RMaWdodDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgc3BvdExpZ2h0OiBUSFJFRS5TcG90TGlnaHQ7XG4gIHByb3RlY3RlZCBzcG90TGlnaHRCZWFtOiBUSFJFRS5NZXNoO1xuICBwcm90ZWN0ZWQgc3BvdGxpZ2h0R3JvdXA6IFRIUkVFLk9iamVjdDNEO1xuICBwcm90ZWN0ZWQgc3BvdGxpZ2h0TWF0ZXJpYWw6IFRIUkVFLlNoYWRlck1hdGVyaWFsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsXG4gICAgcHVibGljIHByZXZpZXdTZXJ2aWNlOiBQcmV2aWV3U2VydmljZSxcbiAgICBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlLFxuICAgIHNjZW5lOiBhbnksXG4gICAgaGFzU3BvdExpZ2h0OiBib29sZWFuID0gZmFsc2VcbiAgKSB7XG4gICAgdGhpcy5maXh0dXJlID0gZml4dHVyZTtcbiAgICB0aGlzLnNjZW5lID0gc2NlbmU7XG4gICAgdGhpcy5oYXNTcG90TGlnaHQgPSBoYXNTcG90TGlnaHQ7XG5cbiAgICAvLyBldmFsdWF0ZSwgdmFyaW91cyBjYXBhYmlsaXRpZXMgb2YgdGhpcyBmaXh0dXJlXG4gICAgZm9yIChjb25zdCBjYWNoZWRDaGFubmVsIG9mIHRoaXMuZml4dHVyZS5jaGFubmVscykge1xuICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY2hhbm5lbCkge1xuICAgICAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2FjaGVkQ2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5JbnRlbnNpdHk6XG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZUhhc0RpbW1lciA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHk6XG4gICAgICAgICAgICAgIHRoaXMuZml4dHVyZUhhc0NvbG9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhY2hlZENoYW5uZWwuY29sb3JXaGVlbCkge1xuICAgICAgICAgIHRoaXMuZml4dHVyZUhhc0NvbG9yV2hlZWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVTcG90bGlnaHRNYXRlcmlhbCgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhTaGFkZXIgPSBgXG4gICAgdmFyeWluZyB2ZWMzIHZOb3JtYWw7XG4gICAgdmFyeWluZyB2ZWMzIHZXb3JsZFBvc2l0aW9uO1xuXG4gICAgdm9pZCBtYWluKCl7XG4gICAgICB2Tm9ybWFsID0gbm9ybWFsaXplKG5vcm1hbE1hdHJpeCAqIG5vcm1hbCk7XG5cbiAgICAgIHZlYzQgd29ybGRQb3NpdGlvbiA9IG1vZGVsTWF0cml4ICogdmVjNChwb3NpdGlvbiwgMS4wKTtcbiAgICAgIHZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XG5cbiAgICAgIGdsX1Bvc2l0aW9uXHQ9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIH1gO1xuICAgIGNvbnN0IGZyYWdtZW50U2hhZGVyID0gYFxuICAgIHZhcnlpbmcgdmVjMyB2Tm9ybWFsO1xuICAgIHZhcnlpbmcgdmVjMyB2V29ybGRQb3NpdGlvbjtcblxuICAgIHVuaWZvcm0gdmVjMyBsaWdodENvbG9yO1xuICAgIHVuaWZvcm0gZmxvYXRcdG9wYWNpdHk7XG4gICAgdW5pZm9ybSB2ZWMzIHNwb3RQb3NpdGlvbjtcbiAgICB1bmlmb3JtIGZsb2F0IGF0dGVudWF0aW9uO1xuICAgIHVuaWZvcm0gZmxvYXRcdGFuZ2xlUG93ZXI7XG5cbiAgICB2b2lkIG1haW4oKXtcbiAgICAgIGZsb2F0IGludGVuc2l0eTtcblxuICAgICAgaW50ZW5zaXR5XHQ9IGRpc3RhbmNlKHZXb3JsZFBvc2l0aW9uLCBzcG90UG9zaXRpb24pIC8gYXR0ZW51YXRpb247XG4gICAgICBpbnRlbnNpdHlcdD0gMS4wIC0gY2xhbXAoaW50ZW5zaXR5LCAwLjAsIDEuMCk7XG5cbiAgICAgIHZlYzMgbm9ybWFsXHQ9IHZlYzModk5vcm1hbC54LCB2Tm9ybWFsLnksIGFicyh2Tm9ybWFsLnopKTtcbiAgICAgIGZsb2F0IGFuZ2xlSW50ZW5zaXR5XHQ9IHBvdyhkb3Qobm9ybWFsLCB2ZWMzKDAuMCwgMC4wLCAxLjApKSwgYW5nbGVQb3dlcik7XG4gICAgICBpbnRlbnNpdHlcdD0gaW50ZW5zaXR5ICogYW5nbGVJbnRlbnNpdHkgKiBvcGFjaXR5O1xuXG4gICAgICBnbF9GcmFnQ29sb3JcdD0gdmVjNChsaWdodENvbG9yLCBpbnRlbnNpdHkpO1xuICAgIH1gO1xuXG4gICAgdGhpcy5zcG90bGlnaHRNYXRlcmlhbCA9IG5ldyBUSFJFRS5TaGFkZXJNYXRlcmlhbCh7XG4gICAgICB1bmlmb3Jtczoge1xuICAgICAgICBhdHRlbnVhdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICdmJyxcbiAgICAgICAgICB2YWx1ZTogODAwLjAsXG4gICAgICAgIH0sXG4gICAgICAgIGFuZ2xlUG93ZXI6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDIsXG4gICAgICAgIH0sXG4gICAgICAgIHNwb3RQb3NpdGlvbjoge1xuICAgICAgICAgIHR5cGU6ICd2MycsXG4gICAgICAgICAgdmFsdWU6IG5ldyBUSFJFRS5WZWN0b3IzKDAsIDAsIDApLFxuICAgICAgICB9LFxuICAgICAgICBsaWdodENvbG9yOiB7XG4gICAgICAgICAgdHlwZTogJ2MnLFxuICAgICAgICAgIHZhbHVlOiBuZXcgVEhSRUUuQ29sb3IoJ3doaXRlJyksXG4gICAgICAgIH0sXG4gICAgICAgIG9wYWNpdHk6IHtcbiAgICAgICAgICB0eXBlOiAnZicsXG4gICAgICAgICAgdmFsdWU6IDEuMCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB2ZXJ0ZXhTaGFkZXIsXG4gICAgICBmcmFnbWVudFNoYWRlcixcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlT2JqZWN0cygpIHtcbiAgICBpZiAodGhpcy5oYXNTcG90TGlnaHQpIHtcbiAgICAgIHRoaXMuY3JlYXRlU3BvdGxpZ2h0TWF0ZXJpYWwoKTtcblxuICAgICAgdGhpcy5zcG90TGlnaHQgPSBuZXcgVEhSRUUuU3BvdExpZ2h0KDB4ZmZmZmZmLCA1MDAwMCk7XG4gICAgICB0aGlzLnNwb3RMaWdodC5hbmdsZSA9IDI7XG4gICAgICB0aGlzLnNwb3RMaWdodC5wZW51bWJyYSA9IDE7XG4gICAgICB0aGlzLnNwb3RMaWdodC5kZWNheSA9IDAuMDE7XG4gICAgICB0aGlzLnNwb3RMaWdodC5kaXN0YW5jZSA9IDA7XG4gICAgICB0aGlzLnNwb3RMaWdodC5pbnRlbnNpdHkgPSAxO1xuXG4gICAgICBjb25zdCBzcG90TGlnaHRUYXJnZXQgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICAgIHRoaXMuc3BvdExpZ2h0LnRhcmdldCA9IHNwb3RMaWdodFRhcmdldDtcblxuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQodGhpcy5zcG90TGlnaHQpO1xuICAgICAgdGhpcy5zcG90bGlnaHRHcm91cC5hZGQoc3BvdExpZ2h0VGFyZ2V0KTtcbiAgICAgIHRoaXMuc3BvdExpZ2h0LnBvc2l0aW9uLnNldCgwLCAtMS40LCAwKTtcbiAgICAgIHNwb3RMaWdodFRhcmdldC5wb3NpdGlvbi5zZXQoMCwgLTEwLCAwKTtcbiAgICAgIHRoaXMuY3JlYXRlU3BvdExpZ2h0QmVhbSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRDYXBhYmlsaXR5SW5WYWx1ZShjaGFubmVsOiBDYWNoZWRGaXh0dXJlQ2hhbm5lbCwgdmFsdWU6IG51bWJlcik6IENhY2hlZEZpeHR1cmVDYXBhYmlsaXR5IHtcbiAgICBmb3IgKGNvbnN0IGNhcGFiaWxpdHkgb2YgY2hhbm5lbC5jYXBhYmlsaXRpZXMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlLmxlbmd0aCA9PT0gMCB8fFxuICAgICAgICAodmFsdWUgPj0gY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmRteFJhbmdlWzBdICYmIHZhbHVlIDw9IGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVsxXSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gY2FwYWJpbGl0eTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gQXBwbHkgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGJhc2UgZml4dHVyZSB0byB0aGUgcHJldmlld1xuICB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcikge1xuICAgIC8vIEFwcGx5IGRlZmF1bHQgc2V0dGluZ3NcbiAgICBpZiAodGhpcy5maXh0dXJlSGFzRGltbWVyKSB7XG4gICAgICB0aGlzLmRpbW1lciA9IDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGltbWVyID0gMTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbG9yUmVkID0gMjU1O1xuICAgIHRoaXMuY29sb3JHcmVlbiA9IDI1NTtcbiAgICB0aGlzLmNvbG9yQmx1ZSA9IDI1NTtcblxuICAgIGlmICghdGhpcy5maXh0dXJlSGFzQ29sb3JXaGVlbCAmJiB0aGlzLmZpeHR1cmVIYXNDb2xvcikge1xuICAgICAgdGhpcy5jb2xvclJlZCA9IDA7XG4gICAgICB0aGlzLmNvbG9yR3JlZW4gPSAwO1xuICAgICAgdGhpcy5jb2xvckJsdWUgPSAwO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgY2hhbm5lbFZhbHVlIG9mIGNoYW5uZWxWYWx1ZXMpIHtcbiAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldENoYW5uZWxCeU5hbWUodGhpcy5maXh0dXJlLCBjaGFubmVsVmFsdWUuY2hhbm5lbE5hbWUpO1xuICAgICAgY29uc3QgY2FwYWJpbGl0eSA9IHRoaXMuZ2V0Q2FwYWJpbGl0eUluVmFsdWUoY2hhbm5lbCwgY2hhbm5lbFZhbHVlLnZhbHVlKTtcblxuICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLkludGVuc2l0eToge1xuICAgICAgICAgICAgbGV0IHZhbHVlUGVyY2VudGFnZTogbnVtYmVyO1xuICAgICAgICAgICAgaWYgKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHZhbHVlUGVyY2VudGFnZSA9XG4gICAgICAgICAgICAgICAgKGNoYW5uZWxWYWx1ZS52YWx1ZSAtIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5kbXhSYW5nZVswXSkgL1xuICAgICAgICAgICAgICAgIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMV0gLSBjYXBhYmlsaXR5LmNhcGFiaWxpdHkuZG14UmFuZ2VbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWVQZXJjZW50YWdlID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGltbWVyID0gdmFsdWVQZXJjZW50YWdlICogbWFzdGVyRGltbWVyVmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuQ29sb3JJbnRlbnNpdHk6IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlUGVyY2VudGFnZSA9ICgyNTUgKiBjaGFubmVsVmFsdWUudmFsdWUpIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHN3aXRjaCAoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmNvbG9yKSB7XG4gICAgICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlDb2xvci5SZWQ6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvclJlZCA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkdyZWVuOlxuICAgICAgICAgICAgICAgIC8vIFJvdW5kIG5lZWRlZCBmb3IgdGhyZWVqc1xuICAgICAgICAgICAgICAgIHRoaXMuY29sb3JHcmVlbiA9IE1hdGgucm91bmQodmFsdWVQZXJjZW50YWdlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eUNvbG9yLkJsdWU6XG4gICAgICAgICAgICAgICAgLy8gUm91bmQgbmVlZGVkIGZvciB0aHJlZWpzXG4gICAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKHZhbHVlUGVyY2VudGFnZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuV2hlZWxTbG90OiB7XG4gICAgICAgICAgICBjb25zdCBtaXhlZENvbG9yID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRNaXhlZFdoZWVsU2xvdENvbG9yKGNhcGFiaWxpdHkud2hlZWwsIGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5zbG90TnVtYmVyKTtcbiAgICAgICAgICAgIGlmIChtaXhlZENvbG9yKSB7XG4gICAgICAgICAgICAgIHRoaXMuY29sb3JSZWQgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IucmVkKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckdyZWVuID0gTWF0aC5yb3VuZChtaXhlZENvbG9yLmdyZWVuKTtcbiAgICAgICAgICAgICAgdGhpcy5jb2xvckJsdWUgPSBNYXRoLnJvdW5kKG1peGVkQ29sb3IuYmx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBcHBseSB0aGUgY29sb3JzIGFuZCBpbnRlbnNpdGllc1xuICAgIC8vIEFwcGx5IHRoZSBkaW1tZXIgdmFsdWVcbiAgICAvLyBUYWtlIHRoZSBjb2xvciBpbnRvIGFjY291bnQgZm9yIHRoZSBiZWFtIChkb24ndCBzaG93IGEgYmxhY2sgYmVhbSlcbiAgICBjb25zdCBjb2xvciA9IG5ldyBUSFJFRS5Db2xvcigncmdiKCcgKyB0aGlzLmNvbG9yUmVkICsgJywgJyArIHRoaXMuY29sb3JHcmVlbiArICcsICcgKyB0aGlzLmNvbG9yQmx1ZSArICcpJyk7XG4gICAgY29uc3QgaW50ZW5zaXR5Q29sb3IgPSBNYXRoLm1heCh0aGlzLmNvbG9yUmVkLCB0aGlzLmNvbG9yR3JlZW4sIHRoaXMuY29sb3JCbHVlKTtcblxuICAgIGlmICh0aGlzLmhhc1Nwb3RMaWdodCkge1xuICAgICAgdGhpcy5zcG90TGlnaHQuY29sb3IgPSBjb2xvcjtcbiAgICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbC51bmlmb3Jtcy5saWdodENvbG9yLnZhbHVlID0gY29sb3I7XG5cbiAgICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbC51bmlmb3Jtcy5vcGFjaXR5LnZhbHVlID0gTWF0aC5taW4oaW50ZW5zaXR5Q29sb3IsIHRoaXMuZGltbWVyKTtcbiAgICAgIHRoaXMuc3BvdExpZ2h0LmludGVuc2l0eSA9IHRoaXMuc3BvdExpZ2h0TGlnaHRNYXhJbnRlbnNpdHkgKiB0aGlzLmRpbW1lcjtcbiAgICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5tYXRlcmlhbC51bmlmb3Jtcy5zcG90UG9zaXRpb24udmFsdWUgPSB0aGlzLnNwb3RsaWdodEdyb3VwLnBvc2l0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVQb3NpdGlvbihvYmplY3Q6IFRIUkVFLk9iamVjdDNEKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBwb3NpdGlvblxuICAgIHN3aXRjaCAodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25pbmcpIHtcbiAgICAgIGNhc2UgUG9zaXRpb25pbmcudG9wRnJvbnQ6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoMCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgLSAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLmJvdHRvbUZyb250OiB7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKDE4MCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgKyAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLnRvcEJhY2s6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoMCk7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblkgLSAxMywgdGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25aKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlIFBvc2l0aW9uaW5nLmJvdHRvbUJhY2s6IHtcbiAgICAgICAgb2JqZWN0LnJvdGF0aW9uLnggPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoMTgwKTtcbiAgICAgICAgb2JqZWN0LnBvc2l0aW9uLnNldCh0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblgsIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWSArIDEzLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblopO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgUG9zaXRpb25pbmcubWFudWFsOiB7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQodGhpcy5maXh0dXJlLmZpeHR1cmUucG9zaXRpb25YLCB0aGlzLmZpeHR1cmUuZml4dHVyZS5wb3NpdGlvblksIHRoaXMuZml4dHVyZS5maXh0dXJlLnBvc2l0aW9uWik7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMuZml4dHVyZS5maXh0dXJlLnJvdGF0aW9uWCk7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi55ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMuZml4dHVyZS5maXh0dXJlLnJvdGF0aW9uWSk7XG4gICAgICAgIG9iamVjdC5yb3RhdGlvbi56ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRoaXMuZml4dHVyZS5maXh0dXJlLnJvdGF0aW9uWik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTcG90TGlnaHRCZWFtKCkge1xuICAgIC8vIFRPRE8gc2V0IHRoZSBjb3JyZWN0IGFuZ2xlIGZyb20gdGhlIHByb2ZpbGVcbiAgICBjb25zdCBiZWFtQW5nbGVEZWdyZWVzID0gMTQ7XG4gICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuQ3lsaW5kZXJHZW9tZXRyeSgwLjEsIGJlYW1BbmdsZURlZ3JlZXMgKiAxLjIsIDEwMCwgNjQsIDIwLCBmYWxzZSk7XG4gICAgZ2VvbWV0cnkuYXBwbHlNYXRyaXg0KG5ldyBUSFJFRS5NYXRyaXg0KCkubWFrZVRyYW5zbGF0aW9uKDAsIC1nZW9tZXRyeS5wYXJhbWV0ZXJzLmhlaWdodCAvIDIsIDApKTtcbiAgICBnZW9tZXRyeS5hcHBseU1hdHJpeDQobmV3IFRIUkVFLk1hdHJpeDQoKS5tYWtlUm90YXRpb25YKC1NYXRoLlBJIC8gMikpO1xuXG4gICAgdGhpcy5zcG90TGlnaHRCZWFtID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIHRoaXMuc3BvdGxpZ2h0TWF0ZXJpYWwpO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5wb3NpdGlvbi5zZXQoMCwgLTAuMDIsIDApO1xuICAgIHRoaXMuc3BvdExpZ2h0QmVhbS5yZWNlaXZlU2hhZG93ID0gZmFsc2U7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtLmNhc3RTaGFkb3cgPSBmYWxzZTtcblxuICAgIHRoaXMuc3BvdGxpZ2h0R3JvdXAuYWRkKHRoaXMuc3BvdExpZ2h0QmVhbSk7XG4gICAgdGhpcy5zcG90TGlnaHRCZWFtLnJvdGF0aW9uLnggPSBNYXRoLlBJIC8gMjtcbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuaGFzU3BvdExpZ2h0KSB7XG4gICAgICB0aGlzLnNwb3RsaWdodE1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,15 +4,31 @@ import * as THREE from 'three';
|
|
|
4
4
|
import { FixtureCapabilityType } from '../../models/fixture-capability';
|
|
5
5
|
import { Fixture3d } from './fixture-3d';
|
|
6
6
|
export class MovingHead3d extends Fixture3d {
|
|
7
|
+
constructor(fixtureService, previewService, previewMeshService, fixture, scene) {
|
|
8
|
+
super(fixtureService, previewService, fixture, scene, true);
|
|
9
|
+
this.fixtureService = fixtureService;
|
|
10
|
+
this.previewService = previewService;
|
|
11
|
+
this.headGroup = new THREE.Object3D();
|
|
12
|
+
this.armGroup = new THREE.Object3D();
|
|
13
|
+
this.objectGroup = new THREE.Object3D();
|
|
14
|
+
forkJoin([
|
|
15
|
+
previewMeshService.getMesh('moving_head_socket'),
|
|
16
|
+
previewMeshService.getMesh('moving_head_arm'),
|
|
17
|
+
previewMeshService.getMesh('moving_head_head'),
|
|
18
|
+
])
|
|
19
|
+
.pipe(map(([socket, arm, head]) => {
|
|
20
|
+
this.socket = socket;
|
|
21
|
+
this.arm = arm;
|
|
22
|
+
this.head = head;
|
|
23
|
+
this.createObjects();
|
|
24
|
+
}))
|
|
25
|
+
.subscribe();
|
|
26
|
+
}
|
|
7
27
|
createObjects() {
|
|
8
28
|
super.createObjects();
|
|
9
|
-
this.material =
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
});
|
|
13
|
-
this.socket.material = this.material;
|
|
14
|
-
this.arm.material = this.material;
|
|
15
|
-
this.head.material = this.material;
|
|
29
|
+
this.socket.material = this.previewService.fixtureMaterial;
|
|
30
|
+
this.arm.material = this.previewService.fixtureMaterial;
|
|
31
|
+
this.head.material = this.previewService.fixtureMaterial;
|
|
16
32
|
// Add the head
|
|
17
33
|
this.head.scale.multiplyScalar(0.9);
|
|
18
34
|
this.head.position.set(-0.1, 0, 0);
|
|
@@ -33,32 +49,12 @@ export class MovingHead3d extends Fixture3d {
|
|
|
33
49
|
this.scene.add(this.objectGroup);
|
|
34
50
|
this.isLoaded = true;
|
|
35
51
|
}
|
|
36
|
-
constructor(fixtureService, previewMeshService, fixture, scene) {
|
|
37
|
-
super(fixtureService, fixture, scene);
|
|
38
|
-
this.headGroup = new THREE.Object3D();
|
|
39
|
-
this.armGroup = new THREE.Object3D();
|
|
40
|
-
this.objectGroup = new THREE.Object3D();
|
|
41
|
-
forkJoin([
|
|
42
|
-
previewMeshService.getMesh('moving_head_socket'),
|
|
43
|
-
previewMeshService.getMesh('moving_head_arm'),
|
|
44
|
-
previewMeshService.getMesh('moving_head_head'),
|
|
45
|
-
])
|
|
46
|
-
.pipe(map(([socket, arm, head]) => {
|
|
47
|
-
this.socket = socket;
|
|
48
|
-
this.arm = arm;
|
|
49
|
-
this.head = head;
|
|
50
|
-
this.createObjects();
|
|
51
|
-
}))
|
|
52
|
-
.subscribe();
|
|
53
|
-
}
|
|
54
|
-
getObject() {
|
|
55
|
-
return this.objectGroup;
|
|
56
|
-
}
|
|
57
52
|
updatePreview(channelValues, masterDimmerValue) {
|
|
58
53
|
if (!this.isLoaded) {
|
|
59
54
|
return;
|
|
60
55
|
}
|
|
61
56
|
super.updatePreview(channelValues, masterDimmerValue);
|
|
57
|
+
this.updatePosition(this.objectGroup);
|
|
62
58
|
// Apply default settings
|
|
63
59
|
let panStart = 0;
|
|
64
60
|
let panEnd = 255;
|
|
@@ -87,38 +83,33 @@ export class MovingHead3d extends Fixture3d {
|
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
85
|
}
|
|
90
|
-
this.updatePosition(this.objectGroup);
|
|
91
86
|
// calculate the y/x rotation in radiants based on pan/tilt (0-1) respecting the max pan/tilt
|
|
92
87
|
this.armGroup.rotation.y = THREE.MathUtils.degToRad(panEnd * this.pan + panStart) - THREE.MathUtils.degToRad(panEnd / 2);
|
|
93
88
|
this.headGroup.rotation.x = THREE.MathUtils.degToRad(tiltEnd * this.tilt + tiltStart) - THREE.MathUtils.degToRad(tiltEnd / 2);
|
|
94
|
-
// Update the angle
|
|
89
|
+
// Update the angle only on change, because it's expensive
|
|
95
90
|
// TODO update the correct angle from the profile
|
|
96
91
|
const beamAngleDregrees = 14;
|
|
97
92
|
if (this.lastBeamAngleDegrees !== beamAngleDregrees) {
|
|
98
93
|
this.spotLight.angle = THREE.MathUtils.degToRad(beamAngleDregrees);
|
|
99
|
-
this.createSpotLightBeam();
|
|
100
94
|
this.lastBeamAngleDegrees = beamAngleDregrees;
|
|
101
95
|
}
|
|
102
96
|
// Update the material
|
|
103
97
|
if (this.lastSelected !== this.isSelected) {
|
|
104
98
|
if (this.isSelected) {
|
|
105
|
-
this.socket.material = this.
|
|
106
|
-
this.arm.material = this.
|
|
107
|
-
this.head.material = this.
|
|
99
|
+
this.socket.material = this.previewService.fixtureSelectedMaterial;
|
|
100
|
+
this.arm.material = this.previewService.fixtureSelectedMaterial;
|
|
101
|
+
this.head.material = this.previewService.fixtureSelectedMaterial;
|
|
108
102
|
}
|
|
109
103
|
else {
|
|
110
|
-
this.socket.material = this.
|
|
111
|
-
this.arm.material = this.
|
|
112
|
-
this.head.material = this.
|
|
104
|
+
this.socket.material = this.previewService.fixtureMaterial;
|
|
105
|
+
this.arm.material = this.previewService.fixtureMaterial;
|
|
106
|
+
this.head.material = this.previewService.fixtureMaterial;
|
|
113
107
|
}
|
|
114
108
|
this.lastSelected = this.isSelected;
|
|
115
109
|
}
|
|
116
|
-
// this.spotLightHelper.update();
|
|
117
110
|
}
|
|
118
111
|
destroy() {
|
|
119
112
|
this.scene.remove(this.objectGroup);
|
|
120
|
-
this.material.dispose();
|
|
121
|
-
this.spotLightHelper.dispose();
|
|
122
113
|
}
|
|
123
114
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLWhlYWQtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvbW9kZWxzL21vdmluZy1oZWFkLTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBaUIvQixhQUFhO1FBQ3JCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUVyQixJQUFJLENBQUMsUUFBZ0IsR0FBRyxJQUFJLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQztZQUNyRCxLQUFLLEVBQUUsUUFBUTtZQUNmLFFBQVEsRUFBRSxRQUFRO1NBQ25CLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRW5DLGVBQWU7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLGNBQWMs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QUFFLENBQUM7WUFDMUMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDN0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7Z0JBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDckMsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUN0QyxDQUFDO1FBRUQsaUNBQWlDO0lBQ25DLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JrSm9pbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FjaGVkRml4dHVyZSB9IGZyb20gJy4uLy4uL21vZGVscy9jYWNoZWQtZml4dHVyZSc7XG5pbXBvcnQgeyBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jYXBhYmlsaXR5JztcbmltcG9ydCB7IEZpeHR1cmVDaGFubmVsVmFsdWUgfSBmcm9tICcuLi8uLi9tb2RlbHMvZml4dHVyZS1jaGFubmVsLXZhbHVlJztcbmltcG9ydCB7IEZpeHR1cmVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZml4dHVyZS5zZXJ2aWNlJztcbmltcG9ydCB7IFByZXZpZXdNZXNoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByZXZpZXctbWVzaC5zZXJ2aWNlJztcbmltcG9ydCB7IEZpeHR1cmUzZCB9IGZyb20gJy4vZml4dHVyZS0zZCc7XG5cbmV4cG9ydCBjbGFzcyBNb3ZpbmdIZWFkM2QgZXh0ZW5kcyBGaXh0dXJlM2Qge1xuICBwcml2YXRlIHBhbjogbnVtYmVyO1xuICBwcml2YXRlIHRpbHQ6IG51bWJlcjtcblxuICBwcml2YXRlIHNvY2tldDogVEhSRUUuTWVzaDtcbiAgcHJpdmF0ZSBhcm06IFRIUkVFLk1lc2g7XG4gIHByaXZhdGUgaGVhZDogVEhSRUUuTWVzaDtcblxuICBwcml2YXRlIGhlYWRHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBhcm1Hcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgcHJpdmF0ZSBvYmplY3RHcm91cDogVEhSRUUuT2JqZWN0M0QgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcblxuICBwcml2YXRlIGxhc3RCZWFtQW5nbGVEZWdyZWVzOiBudW1iZXI7XG4gIHByaXZhdGUgbGFzdFNlbGVjdGVkOiBib29sZWFuO1xuXG4gIHByaXZhdGUgbWF0ZXJpYWw6IFRIUkVFLk1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuXG4gIHByb3RlY3RlZCBjcmVhdGVPYmplY3RzKCkge1xuICAgIHN1cGVyLmNyZWF0ZU9iamVjdHMoKTtcblxuICAgICh0aGlzLm1hdGVyaWFsIGFzIGFueSkgPSBuZXcgVEhSRUUuTWVzaExhbWJlcnRNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHgwZDBkMGQsXG4gICAgICBlbWlzc2l2ZTogMHgwZDBkMGQsXG4gICAgfSk7XG5cbiAgICB0aGlzLnNvY2tldC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG5cbiAgICAvLyBBZGQgdGhlIGhlYWRcbiAgICB0aGlzLmhlYWQuc2NhbGUubXVsdGlwbHlTY2FsYXIoMC45KTtcbiAgICB0aGlzLmhlYWQucG9zaXRpb24uc2V0KC0wLjEsIDAsIDApO1xuICAgIGNvbnN0IGhlYWRQaXZvdEdyb3VwID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgaGVhZFBpdm90R3JvdXAuYWRkKHRoaXMuaGVhZCk7XG4gICAgdGhpcy5oZWFkR3JvdXAuYWRkKGhlYWRQaXZvdEdyb3VwKTtcblxuICAgIHRoaXMuaGVhZEdyb3VwLmFkZCh0aGlzLnNwb3RsaWdodEdyb3VwKTtcblxuICAgIC8vIEFkZCB0aGUgYXJtXG4gICAgdGhpcy5hcm1Hcm91cC5hZGQodGhpcy5oZWFkR3JvdXApO1xuICAgIHRoaXMuaGVhZEdyb3VwLnBvc2l0aW9uLnNldCgwLCAtMC42LCAwKTtcbiAgICB0aGlzLmFybUdyb3VwLmFkZCh0aGlzLmFybSk7XG5cbiAgICAvLyBBZGQgdGhlIHNvY2tldFxuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuYXJtR3JvdXApO1xuICAgIHRoaXMub2JqZWN0R3JvdXAuYWRkKHRoaXMuc29ja2V0KTtcbiAgICB0aGlzLnNvY2tldC5wb3NpdGlvbi5zZXQoMCwgMS4yLCAwKTtcblxuICAgIC8vIEEgbW92aW5nIGhlYWQgaGFzIGFib3V0IDMyIGNtIGluIHdpZHRoXG4gICAgdGhpcy5vYmplY3RHcm91cC5zY2FsZS5tdWx0aXBseVNjYWxhcig5KTtcblxuICAgIHRoaXMuc2NlbmUuYWRkKHRoaXMub2JqZWN0R3JvdXApO1xuXG4gICAgdGhpcy5pc0xvYWRlZCA9IHRydWU7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihmaXh0dXJlU2VydmljZTogRml4dHVyZVNlcnZpY2UsIHByZXZpZXdNZXNoU2VydmljZTogUHJldmlld01lc2hTZXJ2aWNlLCBmaXh0dXJlOiBDYWNoZWRGaXh0dXJlLCBzY2VuZTogYW55KSB7XG4gICAgc3VwZXIoZml4dHVyZVNlcnZpY2UsIGZpeHR1cmUsIHNjZW5lKTtcblxuICAgIGZvcmtKb2luKFtcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9zb2NrZXQnKSxcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9hcm0nKSxcbiAgICAgIHByZXZpZXdNZXNoU2VydmljZS5nZXRNZXNoKCdtb3ZpbmdfaGVhZF9oZWFkJyksXG4gICAgXSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKFtzb2NrZXQsIGFybSwgaGVhZF0pID0+IHtcbiAgICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgICB0aGlzLmFybSA9IGFybTtcbiAgICAgICAgICB0aGlzLmhlYWQgPSBoZWFkO1xuXG4gICAgICAgICAgdGhpcy5jcmVhdGVPYmplY3RzKCk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0T2JqZWN0KCk6IFRIUkVFLk9iamVjdDNEIHtcbiAgICByZXR1cm4gdGhpcy5vYmplY3RHcm91cDtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLnVwZGF0ZVByZXZpZXcoY2hhbm5lbFZhbHVlcywgbWFzdGVyRGltbWVyVmFsdWUpO1xuXG4gICAgLy8gQXBwbHkgZGVmYXVsdCBzZXR0aW5nc1xuICAgIGxldCBwYW5TdGFydCA9IDA7XG4gICAgbGV0IHBhbkVuZCA9IDI1NTtcblxuICAgIGxldCB0aWx0U3RhcnQgPSAwO1xuICAgIGxldCB0aWx0RW5kID0gMjU1O1xuXG4gICAgdGhpcy5wYW4gPSAwO1xuICAgIHRoaXMudGlsdCA9IDA7XG5cbiAgICAvLyBBcHBseSB0aGUga25vd24gcHJvcGVydHkgdmFsdWVzXG4gICAgZm9yIChjb25zdCBjaGFubmVsVmFsdWUgb2YgY2hhbm5lbFZhbHVlcykge1xuICAgICAgY29uc3QgY2hhbm5lbCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Q2hhbm5lbEJ5TmFtZSh0aGlzLmZpeHR1cmUsIGNoYW5uZWxWYWx1ZS5jaGFubmVsTmFtZSk7XG4gICAgICBjb25zdCBjYXBhYmlsaXR5ID0gdGhpcy5nZXRDYXBhYmlsaXR5SW5WYWx1ZShjaGFubmVsLCBjaGFubmVsVmFsdWUudmFsdWUpO1xuICAgICAgaWYgKGNhcGFiaWxpdHkpIHtcbiAgICAgICAgc3dpdGNoIChjYXBhYmlsaXR5LmNhcGFiaWxpdHkudHlwZSkge1xuICAgICAgICAgIGNhc2UgRml4dHVyZUNhcGFiaWxpdHlUeXBlLlBhbjoge1xuICAgICAgICAgICAgcGFuU3RhcnQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlU3RhcnQpIHx8IDA7XG4gICAgICAgICAgICBwYW5FbmQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlRW5kKSB8fCA1NDA7XG4gICAgICAgICAgICB0aGlzLnBhbiA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuVGlsdDoge1xuICAgICAgICAgICAgdGlsdFN0YXJ0ID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZVN0YXJ0KSB8fCAwO1xuICAgICAgICAgICAgdGlsdEVuZCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVFbmQpIHx8IDI3MDA7XG4gICAgICAgICAgICB0aGlzLnRpbHQgPSBjaGFubmVsVmFsdWUudmFsdWUgLyBjaGFubmVsLm1heFZhbHVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQb3NpdGlvbih0aGlzLm9iamVjdEdyb3VwKTtcblxuICAgIC8vIGNhbGN1bGF0ZSB0aGUgeS94IHJvdGF0aW9uIGluIHJhZGlhbnRzIGJhc2VkIG9uIHBhbi90aWx0ICgwLTEpIHJlc3BlY3RpbmcgdGhlIG1heCBwYW4vdGlsdFxuICAgIHRoaXMuYXJtR3JvdXAucm90YXRpb24ueSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChwYW5FbmQgKiB0aGlzLnBhbiArIHBhblN0YXJ0KSAtIFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChwYW5FbmQgLyAyKTtcbiAgICB0aGlzLmhlYWRHcm91cC5yb3RhdGlvbi54ID0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRpbHRFbmQgKiB0aGlzLnRpbHQgKyB0aWx0U3RhcnQpIC0gVEhSRUUuTWF0aFV0aWxzLmRlZ1RvUmFkKHRpbHRFbmQgLyAyKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgYW5nbGUgKG9ubHkgb24gY2hhbmdlLCBiZWNhdXNlIGl0J3MgZXhwZW5zaXZlKVxuICAgIC8vIFRPRE8gdXBkYXRlIHRoZSBjb3JyZWN0IGFuZ2xlIGZyb20gdGhlIHByb2ZpbGVcbiAgICBjb25zdCBiZWFtQW5nbGVEcmVncmVlcyA9IDE0O1xuICAgIGlmICh0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzICE9PSBiZWFtQW5nbGVEcmVncmVlcykge1xuICAgICAgdGhpcy5zcG90TGlnaHQuYW5nbGUgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQoYmVhbUFuZ2xlRHJlZ3JlZXMpO1xuICAgICAgdGhpcy5jcmVhdGVTcG90TGlnaHRCZWFtKCk7XG4gICAgICB0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzID0gYmVhbUFuZ2xlRHJlZ3JlZXM7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBtYXRlcmlhbFxuICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZCAhPT0gdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5zZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgICB0aGlzLmFybS5tYXRlcmlhbCA9IHRoaXMuc2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5oZWFkLm1hdGVyaWFsID0gdGhpcy5zZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsO1xuICAgICAgICB0aGlzLmFybS5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgICAgIHRoaXMuaGVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkO1xuICAgIH1cblxuICAgIC8vIHRoaXMuc3BvdExpZ2h0SGVscGVyLnVwZGF0ZSgpO1xuICB9XG5cbiAgZGVzdHJveSgpIHtcbiAgICB0aGlzLnNjZW5lLnJlbW92ZSh0aGlzLm9iamVjdEdyb3VwKTtcbiAgICB0aGlzLm1hdGVyaWFsLmRpc3Bvc2UoKTtcbiAgICB0aGlzLnNwb3RMaWdodEhlbHBlci5kaXNwb3NlKCk7XG4gIH1cbn1cbiJdfQ==
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92aW5nLWhlYWQtM2QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ25lci9zcmMvbGliL3ByZXZpZXcvbW9kZWxzL21vdmluZy1oZWFkLTNkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBSXhFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsTUFBTSxPQUFPLFlBQWEsU0FBUSxTQUFTO0lBY3pDLFlBQ1MsY0FBOEIsRUFDOUIsY0FBOEIsRUFDckMsa0JBQXNDLEVBQ3RDLE9BQXNCLEVBQ3RCLEtBQVU7UUFFVixLQUFLLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBTnJELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFSL0IsY0FBUyxHQUFtQixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqRCxhQUFRLEdBQW1CLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hELGdCQUFXLEdBQW1CLElBQUksS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBYXpELFFBQVEsQ0FBQztZQUNQLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztZQUNoRCxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFDN0Msa0JBQWtCLENBQUMsT0FBTyxDQUFDLGtCQUFrQixDQUFDO1NBQy9DLENBQUM7YUFDQyxJQUFJLENBQ0gs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R0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDO2dCQUNuRSxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDO2dCQUNoRSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHVCQUF1QixDQUFDO1lBQ25FLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQztnQkFDM0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7Z0JBQ3hELElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDO1lBQzNELENBQUM7WUFFRCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDdEMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBDYWNoZWRGaXh0dXJlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2NhY2hlZC1maXh0dXJlJztcbmltcG9ydCB7IEZpeHR1cmVDYXBhYmlsaXR5VHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNhcGFiaWxpdHknO1xuaW1wb3J0IHsgRml4dHVyZUNoYW5uZWxWYWx1ZSB9IGZyb20gJy4uLy4uL21vZGVscy9maXh0dXJlLWNoYW5uZWwtdmFsdWUnO1xuaW1wb3J0IHsgRml4dHVyZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maXh0dXJlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUHJldmlld01lc2hTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy1tZXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgRml4dHVyZTNkIH0gZnJvbSAnLi9maXh0dXJlLTNkJztcbmltcG9ydCB7IFByZXZpZXdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJldmlldy5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIE1vdmluZ0hlYWQzZCBleHRlbmRzIEZpeHR1cmUzZCB7XG4gIHByaXZhdGUgcGFuOiBudW1iZXI7XG4gIHByaXZhdGUgdGlsdDogbnVtYmVyO1xuXG4gIHByaXZhdGUgc29ja2V0OiBUSFJFRS5NZXNoO1xuICBwcml2YXRlIGFybTogVEhSRUUuTWVzaDtcbiAgcHJpdmF0ZSBoZWFkOiBUSFJFRS5NZXNoO1xuXG4gIHByaXZhdGUgaGVhZEdyb3VwOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICBwcml2YXRlIGFybUdyb3VwOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICBwcml2YXRlIG9iamVjdEdyb3VwOiBUSFJFRS5PYmplY3QzRCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuXG4gIHByaXZhdGUgbGFzdEJlYW1BbmdsZURlZ3JlZXM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZml4dHVyZVNlcnZpY2U6IEZpeHR1cmVTZXJ2aWNlLFxuICAgIHB1YmxpYyBwcmV2aWV3U2VydmljZTogUHJldmlld1NlcnZpY2UsXG4gICAgcHJldmlld01lc2hTZXJ2aWNlOiBQcmV2aWV3TWVzaFNlcnZpY2UsXG4gICAgZml4dHVyZTogQ2FjaGVkRml4dHVyZSxcbiAgICBzY2VuZTogYW55XG4gICkge1xuICAgIHN1cGVyKGZpeHR1cmVTZXJ2aWNlLCBwcmV2aWV3U2VydmljZSwgZml4dHVyZSwgc2NlbmUsIHRydWUpO1xuXG4gICAgZm9ya0pvaW4oW1xuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX3NvY2tldCcpLFxuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX2FybScpLFxuICAgICAgcHJldmlld01lc2hTZXJ2aWNlLmdldE1lc2goJ21vdmluZ19oZWFkX2hlYWQnKSxcbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgoW3NvY2tldCwgYXJtLCBoZWFkXSkgPT4ge1xuICAgICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgICAgICAgIHRoaXMuYXJtID0gYXJtO1xuICAgICAgICAgIHRoaXMuaGVhZCA9IGhlYWQ7XG5cbiAgICAgICAgICB0aGlzLmNyZWF0ZU9iamVjdHMoKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVPYmplY3RzKCkge1xuICAgIHN1cGVyLmNyZWF0ZU9iamVjdHMoKTtcblxuICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5wcmV2aWV3U2VydmljZS5maXh0dXJlTWF0ZXJpYWw7XG4gICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVNYXRlcmlhbDtcbiAgICB0aGlzLmhlYWQubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVNYXRlcmlhbDtcblxuICAgIC8vIEFkZCB0aGUgaGVhZFxuICAgIHRoaXMuaGVhZC5zY2FsZS5tdWx0aXBseVNjYWxhcigwLjkpO1xuICAgIHRoaXMuaGVhZC5wb3NpdGlvbi5zZXQoLTAuMSwgMCwgMCk7XG4gICAgY29uc3QgaGVhZFBpdm90R3JvdXAgPSBuZXcgVEhSRUUuT2JqZWN0M0QoKTtcbiAgICBoZWFkUGl2b3RHcm91cC5hZGQodGhpcy5oZWFkKTtcbiAgICB0aGlzLmhlYWRHcm91cC5hZGQoaGVhZFBpdm90R3JvdXApO1xuXG4gICAgdGhpcy5oZWFkR3JvdXAuYWRkKHRoaXMuc3BvdGxpZ2h0R3JvdXApO1xuXG4gICAgLy8gQWRkIHRoZSBhcm1cbiAgICB0aGlzLmFybUdyb3VwLmFkZCh0aGlzLmhlYWRHcm91cCk7XG4gICAgdGhpcy5oZWFkR3JvdXAucG9zaXRpb24uc2V0KDAsIC0wLjYsIDApO1xuICAgIHRoaXMuYXJtR3JvdXAuYWRkKHRoaXMuYXJtKTtcblxuICAgIC8vIEFkZCB0aGUgc29ja2V0XG4gICAgdGhpcy5vYmplY3RHcm91cC5hZGQodGhpcy5hcm1Hcm91cCk7XG4gICAgdGhpcy5vYmplY3RHcm91cC5hZGQodGhpcy5zb2NrZXQpO1xuICAgIHRoaXMuc29ja2V0LnBvc2l0aW9uLnNldCgwLCAxLjIsIDApO1xuXG4gICAgLy8gQSBtb3ZpbmcgaGVhZCBoYXMgYWJvdXQgMzIgY20gaW4gd2lkdGhcbiAgICB0aGlzLm9iamVjdEdyb3VwLnNjYWxlLm11bHRpcGx5U2NhbGFyKDkpO1xuXG4gICAgdGhpcy5zY2VuZS5hZGQodGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVQcmV2aWV3KGNoYW5uZWxWYWx1ZXM6IEZpeHR1cmVDaGFubmVsVmFsdWVbXSwgbWFzdGVyRGltbWVyVmFsdWU6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN1cGVyLnVwZGF0ZVByZXZpZXcoY2hhbm5lbFZhbHVlcywgbWFzdGVyRGltbWVyVmFsdWUpO1xuICAgIHRoaXMudXBkYXRlUG9zaXRpb24odGhpcy5vYmplY3RHcm91cCk7XG5cbiAgICAvLyBBcHBseSBkZWZhdWx0IHNldHRpbmdzXG4gICAgbGV0IHBhblN0YXJ0ID0gMDtcbiAgICBsZXQgcGFuRW5kID0gMjU1O1xuXG4gICAgbGV0IHRpbHRTdGFydCA9IDA7XG4gICAgbGV0IHRpbHRFbmQgPSAyNTU7XG5cbiAgICB0aGlzLnBhbiA9IDA7XG4gICAgdGhpcy50aWx0ID0gMDtcblxuICAgIC8vIEFwcGx5IHRoZSBrbm93biBwcm9wZXJ0eSB2YWx1ZXNcbiAgICBmb3IgKGNvbnN0IGNoYW5uZWxWYWx1ZSBvZiBjaGFubmVsVmFsdWVzKSB7XG4gICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRDaGFubmVsQnlOYW1lKHRoaXMuZml4dHVyZSwgY2hhbm5lbFZhbHVlLmNoYW5uZWxOYW1lKTtcbiAgICAgIGNvbnN0IGNhcGFiaWxpdHkgPSB0aGlzLmdldENhcGFiaWxpdHlJblZhbHVlKGNoYW5uZWwsIGNoYW5uZWxWYWx1ZS52YWx1ZSk7XG4gICAgICBpZiAoY2FwYWJpbGl0eSkge1xuICAgICAgICBzd2l0Y2ggKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS50eXBlKSB7XG4gICAgICAgICAgY2FzZSBGaXh0dXJlQ2FwYWJpbGl0eVR5cGUuUGFuOiB7XG4gICAgICAgICAgICBwYW5TdGFydCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVTdGFydCkgfHwgMDtcbiAgICAgICAgICAgIHBhbkVuZCA9IHRoaXMuZml4dHVyZVNlcnZpY2UuZ2V0Um90YXRpb25BbmdsZURlZyhjYXBhYmlsaXR5LmNhcGFiaWxpdHkuYW5nbGVFbmQpIHx8IDU0MDtcbiAgICAgICAgICAgIHRoaXMucGFuID0gY2hhbm5lbFZhbHVlLnZhbHVlIC8gY2hhbm5lbC5tYXhWYWx1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlIEZpeHR1cmVDYXBhYmlsaXR5VHlwZS5UaWx0OiB7XG4gICAgICAgICAgICB0aWx0U3RhcnQgPSB0aGlzLmZpeHR1cmVTZXJ2aWNlLmdldFJvdGF0aW9uQW5nbGVEZWcoY2FwYWJpbGl0eS5jYXBhYmlsaXR5LmFuZ2xlU3RhcnQpIHx8IDA7XG4gICAgICAgICAgICB0aWx0RW5kID0gdGhpcy5maXh0dXJlU2VydmljZS5nZXRSb3RhdGlvbkFuZ2xlRGVnKGNhcGFiaWxpdHkuY2FwYWJpbGl0eS5hbmdsZUVuZCkgfHwgMjcwMDtcbiAgICAgICAgICAgIHRoaXMudGlsdCA9IGNoYW5uZWxWYWx1ZS52YWx1ZSAvIGNoYW5uZWwubWF4VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjYWxjdWxhdGUgdGhlIHkveCByb3RhdGlvbiBpbiByYWRpYW50cyBiYXNlZCBvbiBwYW4vdGlsdCAoMC0xKSByZXNwZWN0aW5nIHRoZSBtYXggcGFuL3RpbHRcbiAgICB0aGlzLmFybUdyb3VwLnJvdGF0aW9uLnkgPSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQocGFuRW5kICogdGhpcy5wYW4gKyBwYW5TdGFydCkgLSBUSFJFRS5NYXRoVXRpbHMuZGVnVG9SYWQocGFuRW5kIC8gMik7XG4gICAgdGhpcy5oZWFkR3JvdXAucm90YXRpb24ueCA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aWx0RW5kICogdGhpcy50aWx0ICsgdGlsdFN0YXJ0KSAtIFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZCh0aWx0RW5kIC8gMik7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGFuZ2xlIG9ubHkgb24gY2hhbmdlLCBiZWNhdXNlIGl0J3MgZXhwZW5zaXZlXG4gICAgLy8gVE9ETyB1cGRhdGUgdGhlIGNvcnJlY3QgYW5nbGUgZnJvbSB0aGUgcHJvZmlsZVxuICAgIGNvbnN0IGJlYW1BbmdsZURyZWdyZWVzID0gMTQ7XG4gICAgaWYgKHRoaXMubGFzdEJlYW1BbmdsZURlZ3JlZXMgIT09IGJlYW1BbmdsZURyZWdyZWVzKSB7XG4gICAgICB0aGlzLnNwb3RMaWdodC5hbmdsZSA9IFRIUkVFLk1hdGhVdGlscy5kZWdUb1JhZChiZWFtQW5nbGVEcmVncmVlcyk7XG4gICAgICB0aGlzLmxhc3RCZWFtQW5nbGVEZWdyZWVzID0gYmVhbUFuZ2xlRHJlZ3JlZXM7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHRoZSBtYXRlcmlhbFxuICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZCAhPT0gdGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICBpZiAodGhpcy5pc1NlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm1hdGVyaWFsID0gdGhpcy5wcmV2aWV3U2VydmljZS5maXh0dXJlU2VsZWN0ZWRNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVTZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgICB0aGlzLmhlYWQubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVTZWxlY3RlZE1hdGVyaWFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb2NrZXQubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5hcm0ubWF0ZXJpYWwgPSB0aGlzLnByZXZpZXdTZXJ2aWNlLmZpeHR1cmVNYXRlcmlhbDtcbiAgICAgICAgdGhpcy5oZWFkLm1hdGVyaWFsID0gdGhpcy5wcmV2aWV3U2VydmljZS5maXh0dXJlTWF0ZXJpYWw7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubGFzdFNlbGVjdGVkID0gdGhpcy5pc1NlbGVjdGVkO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5zY2VuZS5yZW1vdmUodGhpcy5vYmplY3RHcm91cCk7XG4gIH1cbn1cbiJdfQ==
|