angular-three-soba 2.0.0-beta.7 → 2.0.0-beta.8
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/abstractions/billboard/billboard.d.ts +11 -7
- package/abstractions/detailed/detailed.d.ts +26 -0
- package/abstractions/edges/edges.d.ts +23 -11
- package/abstractions/grid/grid.d.ts +41 -50
- package/abstractions/index.d.ts +1 -7
- package/abstractions/text/text.d.ts +10 -4
- package/abstractions/text-3d/text-3d.d.ts +47 -40
- package/cameras/camera/camera-content.d.ts +1 -1
- package/cameras/camera/camera.d.ts +16 -13
- package/cameras/cube-camera/cube-camera.d.ts +50 -23
- package/cameras/index.d.ts +0 -1
- package/cameras/orthographic-camera/orthographic-camera.d.ts +29 -18
- package/cameras/perspective-camera/perspective-camera.d.ts +10 -1
- package/controls/orbit-controls/orbit-controls.d.ts +30 -13
- package/esm2022/abstractions/billboard/billboard.mjs +36 -33
- package/esm2022/abstractions/detailed/detailed.mjs +64 -0
- package/esm2022/abstractions/edges/edges.mjs +58 -63
- package/esm2022/abstractions/grid/grid.mjs +140 -110
- package/esm2022/abstractions/index.mjs +2 -8
- package/esm2022/abstractions/text/text.mjs +123 -122
- package/esm2022/abstractions/text-3d/text-3d.mjs +119 -121
- package/esm2022/cameras/camera/camera-content.mjs +5 -6
- package/esm2022/cameras/camera/camera.mjs +48 -42
- package/esm2022/cameras/cube-camera/cube-camera.mjs +129 -99
- package/esm2022/cameras/index.mjs +1 -2
- package/esm2022/cameras/orthographic-camera/orthographic-camera.mjs +78 -75
- package/esm2022/cameras/perspective-camera/perspective-camera.mjs +25 -26
- package/esm2022/controls/orbit-controls/orbit-controls.mjs +94 -90
- package/esm2022/loaders/gltf-loader/gltf-loader.mjs +3 -6
- package/esm2022/loaders/loader/loader.mjs +92 -87
- package/esm2022/loaders/progress/progress.mjs +1 -1
- package/esm2022/loaders/texture-loader/texture-loader.mjs +4 -4
- package/esm2022/materials/index.mjs +2 -1
- package/esm2022/materials/mesh-distort-material/mesh-distort-material.mjs +60 -51
- package/esm2022/materials/mesh-reflector-material/mesh-reflector-material.mjs +239 -255
- package/esm2022/materials/mesh-refraction-material/mesh-refraction-material.mjs +99 -97
- package/esm2022/materials/mesh-transmission-material/mesh-transmission-material.mjs +167 -146
- package/esm2022/materials/mesh-wobble-material/mesh-wobble-material.mjs +44 -42
- package/esm2022/materials/point-material/point-material.mjs +46 -0
- package/esm2022/misc/animations/animations.mjs +20 -16
- package/esm2022/misc/bake-shadows/bake-shadows.mjs +13 -13
- package/esm2022/misc/caustics/caustics.mjs +387 -0
- package/esm2022/misc/decal/decal.mjs +187 -0
- package/esm2022/misc/depth-buffer/depth-buffer.mjs +33 -35
- package/esm2022/misc/example/example.mjs +160 -0
- package/esm2022/misc/fbo/fbo.mjs +35 -35
- package/esm2022/misc/html/html-wrapper.mjs +478 -0
- package/esm2022/misc/html/html.mjs +304 -0
- package/esm2022/misc/index.mjs +10 -1
- package/esm2022/misc/sampler/sampler.mjs +142 -0
- package/esm2022/misc/shadow/shadow.mjs +111 -0
- package/esm2022/misc/stats-gl/stats-gl.mjs +61 -0
- package/esm2022/misc/trail/trail.mjs +209 -0
- package/esm2022/misc/trail-texture/inject-trail-texture.mjs +17 -0
- package/esm2022/misc/trail-texture/trail-texture.mjs +106 -0
- package/esm2022/modifiers/angular-three-soba-modifiers.mjs +5 -0
- package/esm2022/modifiers/curve-modifier/curve-modifier.mjs +64 -0
- package/esm2022/modifiers/index.mjs +2 -0
- package/esm2022/performances/adaptive-dpr/adaptive-dpr.mjs +44 -0
- package/esm2022/performances/adaptive-events/adaptive-events.mjs +27 -0
- package/esm2022/performances/angular-three-soba-performances.mjs +5 -0
- package/esm2022/performances/index.mjs +6 -0
- package/esm2022/performances/points/points-input.mjs +64 -0
- package/esm2022/performances/points/points.mjs +329 -0
- package/esm2022/performances/points/position-point.mjs +54 -0
- package/esm2022/performances/segments/segment-object.mjs +9 -0
- package/esm2022/performances/segments/segments.mjs +182 -0
- package/esm2022/shaders/blur-pass/blur-pass.mjs +1 -1
- package/esm2022/shaders/caustics/caustics-material.mjs +130 -0
- package/esm2022/shaders/caustics/caustics-projection-material.mjs +31 -0
- package/esm2022/shaders/convolution-material/convolution-material.mjs +1 -1
- package/esm2022/shaders/discard-material/discard-material.mjs +1 -1
- package/esm2022/shaders/grid-material/grid-material.mjs +29 -14
- package/esm2022/shaders/index.mjs +5 -3
- package/esm2022/shaders/mesh-distort-material/mesh-distort-material.mjs +42 -41
- package/esm2022/shaders/mesh-reflector-material/mesh-reflector-material.mjs +1 -1
- package/esm2022/shaders/mesh-refraction-material/mesh-refraction-material.mjs +2 -2
- package/esm2022/shaders/mesh-transmission-material/mesh-transmission-material.mjs +4 -4
- package/esm2022/shaders/mesh-wobble-material/mesh-wobble-material.mjs +1 -1
- package/esm2022/shaders/shader-material/shader-material.mjs +1 -1
- package/esm2022/shaders/soft-shadow-material/soft-shadow-material.mjs +17 -25
- package/esm2022/shaders/sparkles-material/sparkles-material.mjs +32 -46
- package/esm2022/shaders/spot-light-material/spot-light-material.mjs +7 -7
- package/esm2022/shaders/star-field-material/star-field-material.mjs +3 -2
- package/esm2022/shaders/wireframe-material/wireframe-material.mjs +247 -0
- package/esm2022/staging/accumulative-shadows/accumulative-shadows.mjs +160 -176
- package/esm2022/staging/accumulative-shadows/progressive-light-map.mjs +1 -1
- package/esm2022/staging/accumulative-shadows/randomized-lights.mjs +126 -128
- package/esm2022/staging/backdrop/backdrop.mjs +77 -0
- package/esm2022/staging/bb-anchor/bb-anchor.mjs +70 -0
- package/esm2022/staging/bounds/bounds.mjs +144 -143
- package/esm2022/staging/camera-shake/camera-shake.mjs +86 -80
- package/esm2022/staging/center/center.mjs +106 -91
- package/esm2022/staging/cloud/cloud.mjs +118 -124
- package/esm2022/staging/contact-shadows/contact-shadows.mjs +131 -134
- package/esm2022/staging/environment/assets.mjs +12 -12
- package/esm2022/staging/environment/environment-cube.mjs +28 -30
- package/esm2022/staging/environment/environment-ground.mjs +18 -20
- package/esm2022/staging/environment/environment-input.mjs +97 -84
- package/esm2022/staging/environment/environment-map.mjs +33 -33
- package/esm2022/staging/environment/environment-portal.mjs +75 -97
- package/esm2022/staging/environment/environment.mjs +34 -51
- package/esm2022/staging/environment/utils.mjs +35 -14
- package/esm2022/staging/float/float.mjs +70 -58
- package/esm2022/staging/index.mjs +7 -3
- package/esm2022/staging/matcap-texture/matcap-texture.mjs +64 -0
- package/esm2022/staging/normal-texture/normal-texture.mjs +53 -0
- package/esm2022/staging/sky/sky.mjs +85 -80
- package/esm2022/staging/sparkles/sparkles.mjs +108 -105
- package/esm2022/staging/spot-light/shadow-mesh-input.mjs +63 -0
- package/esm2022/staging/spot-light/shadow-mesh.mjs +266 -0
- package/esm2022/staging/spot-light/spot-light-input.mjs +67 -58
- package/esm2022/staging/spot-light/spot-light.mjs +51 -64
- package/esm2022/staging/spot-light/volumetric-mesh.mjs +61 -78
- package/esm2022/staging/stage/stage.mjs +304 -290
- package/esm2022/staging/stars/stars.mjs +101 -102
- package/esm2022/staging/wireframe/wireframe-input.mjs +191 -0
- package/esm2022/staging/wireframe/wireframe.mjs +224 -0
- package/esm2022/utils/angular-three-soba-utils.mjs +5 -0
- package/esm2022/utils/content/content.mjs +15 -0
- package/esm2022/utils/index.mjs +2 -0
- package/fesm2022/angular-three-soba-abstractions.mjs +505 -2087
- package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
- package/fesm2022/angular-three-soba-cameras.mjs +302 -259
- package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
- package/fesm2022/angular-three-soba-controls.mjs +93 -88
- package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
- package/fesm2022/angular-three-soba-loaders.mjs +94 -90
- package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-materials.mjs +655 -590
- package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
- package/fesm2022/angular-three-soba-misc.mjs +2198 -89
- package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
- package/fesm2022/angular-three-soba-modifiers.mjs +71 -0
- package/fesm2022/angular-three-soba-modifiers.mjs.map +1 -0
- package/fesm2022/angular-three-soba-performances.mjs +697 -0
- package/fesm2022/angular-three-soba-performances.mjs.map +1 -0
- package/fesm2022/angular-three-soba-shaders.mjs +501 -264
- package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
- package/fesm2022/angular-three-soba-staging.mjs +2870 -2555
- package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
- package/fesm2022/angular-three-soba-utils.mjs +22 -0
- package/fesm2022/angular-three-soba-utils.mjs.map +1 -0
- package/loaders/gltf-loader/gltf-loader.d.ts +4 -3
- package/loaders/loader/loader.d.ts +19 -17
- package/loaders/progress/progress.d.ts +1 -1
- package/loaders/texture-loader/texture-loader.d.ts +2 -2
- package/materials/index.d.ts +1 -0
- package/materials/mesh-distort-material/mesh-distort-material.d.ts +25 -15
- package/materials/mesh-reflector-material/mesh-reflector-material.d.ts +74 -56
- package/materials/mesh-refraction-material/mesh-refraction-material.d.ts +33 -21
- package/materials/mesh-transmission-material/mesh-transmission-material.d.ts +55 -39
- package/materials/mesh-wobble-material/mesh-wobble-material.d.ts +19 -10
- package/materials/point-material/point-material.d.ts +24 -0
- package/metadata.json +1 -0
- package/misc/animations/animations.d.ts +6 -4
- package/misc/caustics/caustics.d.ts +87 -0
- package/misc/decal/decal.d.ts +49 -0
- package/misc/depth-buffer/depth-buffer.d.ts +2 -2
- package/misc/example/example.d.ts +81 -0
- package/misc/fbo/fbo.d.ts +2 -2
- package/misc/html/html-wrapper.d.ts +559 -0
- package/misc/html/html.d.ts +214 -0
- package/misc/index.d.ts +9 -0
- package/misc/sampler/sampler.d.ts +67 -0
- package/misc/shadow/shadow.d.ts +37 -0
- package/misc/stats-gl/stats-gl.d.ts +24 -0
- package/misc/trail/trail.d.ts +57 -0
- package/misc/trail-texture/inject-trail-texture.d.ts +9 -0
- package/misc/trail-texture/trail-texture.d.ts +50 -0
- package/modifiers/README.md +3 -0
- package/modifiers/curve-modifier/curve-modifier.d.ts +23 -0
- package/modifiers/index.d.ts +1 -0
- package/package.json +30 -22
- package/performances/README.md +3 -0
- package/performances/adaptive-dpr/adaptive-dpr.d.ts +14 -0
- package/{performance/adaptive → performances/adaptive-events}/adaptive-events.d.ts +3 -0
- package/performances/index.d.ts +5 -0
- package/performances/points/points-input.d.ts +32 -0
- package/performances/points/points.d.ts +92 -0
- package/{performance/instances/position-mesh.d.ts → performances/points/position-point.d.ts} +4 -3
- package/performances/segments/segment-object.d.ts +7 -0
- package/performances/segments/segments.d.ts +124 -0
- package/shaders/grid-material/grid-material.d.ts +33 -0
- package/shaders/index.d.ts +4 -2
- package/shaders/mesh-distort-material/mesh-distort-material.d.ts +146 -1
- package/shaders/mesh-transmission-material/mesh-transmission-material.d.ts +1 -1
- package/shaders/shader-material/shader-material.d.ts +2 -2
- package/shaders/soft-shadow-material/soft-shadow-material.d.ts +10 -1
- package/shaders/sparkles-material/sparkles-material.d.ts +15 -1
- package/shaders/spot-light-material/spot-light-material.d.ts +11 -2
- package/shaders/star-field-material/star-field-material.d.ts +11 -1
- package/shaders/wireframe-material/wireframe-material.d.ts +58 -0
- package/staging/accumulative-shadows/accumulative-shadows.d.ts +89 -39
- package/staging/accumulative-shadows/randomized-lights.d.ts +40 -27
- package/staging/backdrop/backdrop.d.ts +30 -0
- package/staging/bb-anchor/bb-anchor.d.ts +27 -0
- package/staging/bounds/bounds.d.ts +100 -24
- package/staging/camera-shake/camera-shake.d.ts +30 -19
- package/staging/center/center.d.ts +43 -35
- package/staging/cloud/cloud.d.ts +26 -23
- package/staging/contact-shadows/contact-shadows.d.ts +41 -28
- package/staging/environment/assets.d.ts +9 -9
- package/staging/environment/environment-cube.d.ts +9 -5
- package/staging/environment/environment-ground.d.ts +7 -7
- package/staging/environment/environment-input.d.ts +36 -36
- package/staging/environment/environment-map.d.ts +10 -5
- package/staging/environment/environment-portal.d.ts +10 -5
- package/staging/environment/environment.d.ts +0 -4
- package/staging/environment/utils.d.ts +2 -2
- package/staging/float/float.d.ts +14 -10
- package/staging/index.d.ts +6 -2
- package/staging/matcap-texture/matcap-texture.d.ts +13 -0
- package/staging/normal-texture/normal-texture.d.ts +16 -0
- package/staging/sky/sky.d.ts +28 -21
- package/staging/sparkles/sparkles.d.ts +35 -21
- package/staging/spot-light/shadow-mesh-input.d.ts +29 -0
- package/staging/spot-light/shadow-mesh.d.ts +37 -0
- package/staging/spot-light/spot-light-input.d.ts +25 -25
- package/staging/spot-light/spot-light.d.ts +31 -15
- package/staging/spot-light/volumetric-mesh.d.ts +15 -9
- package/staging/stage/stage.d.ts +88 -63
- package/staging/stars/stars.d.ts +27 -16
- package/staging/wireframe/wireframe-input.d.ts +65 -0
- package/staging/wireframe/wireframe.d.ts +28 -0
- package/utils/README.md +3 -0
- package/utils/content/content.d.ts +8 -0
- package/utils/index.d.ts +1 -0
- package/web-types.json +1 -0
- package/abstractions/catmull-rom-line/catmull-rom-line.d.ts +0 -25
- package/abstractions/cubic-bezier-line/cubic-bezier-line.d.ts +0 -25
- package/abstractions/gizmo-helper/gizmo-helper.d.ts +0 -34
- package/abstractions/gizmo-helper/gizmo-viewcube/constants.d.ts +0 -12
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.d.ts +0 -22
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.d.ts +0 -30
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.d.ts +0 -32
- package/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.d.ts +0 -14
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.d.ts +0 -47
- package/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.d.ts +0 -40
- package/abstractions/line/line-input.d.ts +0 -42
- package/abstractions/line/line.d.ts +0 -35
- package/abstractions/quadratic-bezier-line/quadratic-bezier-line.d.ts +0 -23
- package/esm2022/abstractions/catmull-rom-line/catmull-rom-line.mjs +0 -131
- package/esm2022/abstractions/cubic-bezier-line/cubic-bezier-line.mjs +0 -113
- package/esm2022/abstractions/gizmo-helper/gizmo-helper.mjs +0 -210
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/constants.mjs +0 -31
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-edge.mjs +0 -95
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-face.mjs +0 -155
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube-inputs.mjs +0 -62
- package/esm2022/abstractions/gizmo-helper/gizmo-viewcube/gizmo-viewcube.mjs +0 -80
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport-axis.mjs +0 -206
- package/esm2022/abstractions/gizmo-helper/gizmo-viewport/gizmo-viewport.mjs +0 -273
- package/esm2022/abstractions/line/line-input.mjs +0 -113
- package/esm2022/abstractions/line/line.mjs +0 -165
- package/esm2022/abstractions/quadratic-bezier-line/quadratic-bezier-line.mjs +0 -128
- package/esm2022/performance/adaptive/adaptive-dpr.mjs +0 -46
- package/esm2022/performance/adaptive/adaptive-events.mjs +0 -31
- package/esm2022/performance/angular-three-soba-performance.mjs +0 -5
- package/esm2022/performance/detailed/detailed.mjs +0 -61
- package/esm2022/performance/index.mjs +0 -7
- package/esm2022/performance/instances/instance.mjs +0 -48
- package/esm2022/performance/instances/instances.mjs +0 -189
- package/esm2022/performance/instances/position-mesh.mjs +0 -52
- package/esm2022/performance/stats/stats.mjs +0 -79
- package/esm2022/shaders/caustics-material/caustics-material.mjs +0 -128
- package/esm2022/shaders/caustics-material/caustics-projection-material.mjs +0 -33
- package/esm2022/staging/caustics/caustisc.mjs +0 -384
- package/esm2022/staging/spot-light/spot-light-shadow-mesh-input.mjs +0 -57
- package/esm2022/staging/spot-light/spot-light-shadow-mesh.mjs +0 -258
- package/fesm2022/angular-three-soba-performance.mjs +0 -487
- package/fesm2022/angular-three-soba-performance.mjs.map +0 -1
- package/performance/README.md +0 -3
- package/performance/adaptive/adaptive-dpr.d.ts +0 -8
- package/performance/detailed/detailed.d.ts +0 -20
- package/performance/index.d.ts +0 -6
- package/performance/instances/instance.d.ts +0 -9
- package/performance/instances/instances.d.ts +0 -35
- package/performance/stats/stats.d.ts +0 -18
- package/plugin/generators.json +0 -19
- package/plugin/libs/plugin/README.md +0 -11
- package/plugin/package.json +0 -9
- package/plugin/src/generators/init/compat.d.ts +0 -2
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/init.d.ts +0 -7
- package/plugin/src/generators/init/init.js +0 -28
- package/plugin/src/generators/init/init.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -6
- package/plugin/src/index.d.ts +0 -1
- package/plugin/src/index.js +0 -6
- package/plugin/src/index.js.map +0 -1
- package/staging/caustics/caustisc.d.ts +0 -70
- package/staging/spot-light/spot-light-shadow-mesh-input.d.ts +0 -29
- package/staging/spot-light/spot-light-shadow-mesh.d.ts +0 -38
- /package/shaders/{caustics-material → caustics}/caustics-material.d.ts +0 -0
- /package/shaders/{caustics-material → caustics}/caustics-projection-material.d.ts +0 -0
|
@@ -1,81 +1,52 @@
|
|
|
1
1
|
import { NgIf } from '@angular/common';
|
|
2
|
-
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA,
|
|
3
|
-
import { extend, getLocalState, injectBeforeRender, injectNgtRef,
|
|
2
|
+
import { Component, computed, CUSTOM_ELEMENTS_SCHEMA, Input } from '@angular/core';
|
|
3
|
+
import { extend, getLocalState, injectBeforeRender, injectNgtRef, injectNgtStore, NgtKey, signalStore, } from 'angular-three';
|
|
4
4
|
import { BlurPass, MeshReflectorMaterial } from 'angular-three-soba/shaders';
|
|
5
5
|
import * as THREE from 'three';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
extend({ MeshReflectorMaterial });
|
|
8
|
-
class NgtsMeshReflectorMaterial
|
|
9
|
-
set
|
|
10
|
-
this.set({ resolution });
|
|
8
|
+
export class NgtsMeshReflectorMaterial {
|
|
9
|
+
set _resolution(resolution) {
|
|
10
|
+
this.inputs.set({ resolution });
|
|
11
11
|
}
|
|
12
|
-
set
|
|
13
|
-
this.set({ mixBlur });
|
|
12
|
+
set _mixBlur(mixBlur) {
|
|
13
|
+
this.inputs.set({ mixBlur });
|
|
14
14
|
}
|
|
15
|
-
set
|
|
16
|
-
this.set({ mixStrength });
|
|
15
|
+
set _mixStrength(mixStrength) {
|
|
16
|
+
this.inputs.set({ mixStrength });
|
|
17
17
|
}
|
|
18
|
-
set
|
|
19
|
-
this.set({ blur });
|
|
18
|
+
set _blur(blur) {
|
|
19
|
+
this.inputs.set({ blur });
|
|
20
20
|
}
|
|
21
|
-
set
|
|
22
|
-
this.set({ mirror });
|
|
21
|
+
set _mirror(mirror) {
|
|
22
|
+
this.inputs.set({ mirror });
|
|
23
23
|
}
|
|
24
|
-
set
|
|
25
|
-
this.set({ minDepthThreshold });
|
|
24
|
+
set _minDepthThreshold(minDepthThreshold) {
|
|
25
|
+
this.inputs.set({ minDepthThreshold });
|
|
26
26
|
}
|
|
27
|
-
set
|
|
28
|
-
this.set({ maxDepthThreshold });
|
|
27
|
+
set _maxDepthThreshold(maxDepthThreshold) {
|
|
28
|
+
this.inputs.set({ maxDepthThreshold });
|
|
29
29
|
}
|
|
30
|
-
set
|
|
31
|
-
this.set({ depthScale });
|
|
30
|
+
set _depthScale(depthScale) {
|
|
31
|
+
this.inputs.set({ depthScale });
|
|
32
32
|
}
|
|
33
|
-
set
|
|
34
|
-
this.set({ depthToBlurRatioBias });
|
|
33
|
+
set _depthToBlurRatioBias(depthToBlurRatioBias) {
|
|
34
|
+
this.inputs.set({ depthToBlurRatioBias });
|
|
35
35
|
}
|
|
36
|
-
set
|
|
37
|
-
this.set({ distortionMap });
|
|
36
|
+
set _distortionMap(distortionMap) {
|
|
37
|
+
this.inputs.set({ distortionMap });
|
|
38
38
|
}
|
|
39
|
-
set
|
|
40
|
-
this.set({ distortion });
|
|
39
|
+
set _distortion(distortion) {
|
|
40
|
+
this.inputs.set({ distortion });
|
|
41
41
|
}
|
|
42
|
-
set
|
|
43
|
-
this.set({ mixContrast });
|
|
42
|
+
set _mixContrast(mixContrast) {
|
|
43
|
+
this.inputs.set({ mixContrast });
|
|
44
44
|
}
|
|
45
|
-
set
|
|
46
|
-
this.set({ reflectorOffset });
|
|
45
|
+
set _reflectorOffset(reflectorOffset) {
|
|
46
|
+
this.inputs.set({ reflectorOffset });
|
|
47
47
|
}
|
|
48
|
-
#store;
|
|
49
|
-
#gl;
|
|
50
|
-
#reflectorPlane;
|
|
51
|
-
#normal;
|
|
52
|
-
#reflectorWorldPosition;
|
|
53
|
-
#cameraWorldPosition;
|
|
54
|
-
#rotationMatrix;
|
|
55
|
-
#lookAtPosition;
|
|
56
|
-
#clipPlane;
|
|
57
|
-
#view;
|
|
58
|
-
#target;
|
|
59
|
-
#q;
|
|
60
|
-
#textureMatrix;
|
|
61
|
-
#virtualCamera;
|
|
62
|
-
#blur;
|
|
63
|
-
#resolution;
|
|
64
|
-
#mirror;
|
|
65
|
-
#mixBlur;
|
|
66
|
-
#mixStrength;
|
|
67
|
-
#minDepthThreshold;
|
|
68
|
-
#maxDepthThreshold;
|
|
69
|
-
#depthScale;
|
|
70
|
-
#depthToBlurRatioBias;
|
|
71
|
-
#distortion;
|
|
72
|
-
#distortionMap;
|
|
73
|
-
#mixContrast;
|
|
74
|
-
#normalizedBlur;
|
|
75
|
-
#hasBlur;
|
|
76
|
-
#reflectorEntities;
|
|
77
48
|
constructor() {
|
|
78
|
-
|
|
49
|
+
this.inputs = signalStore({
|
|
79
50
|
mixBlur: 0,
|
|
80
51
|
mixStrength: 1,
|
|
81
52
|
resolution: 256,
|
|
@@ -90,76 +61,75 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
|
|
|
90
61
|
reflectorOffset: 0,
|
|
91
62
|
});
|
|
92
63
|
this.materialRef = injectNgtRef();
|
|
93
|
-
this.reflectorProps = computed(() => this
|
|
64
|
+
this.reflectorProps = computed(() => this.states().reflectorProps);
|
|
94
65
|
this.defines = computed(() => this.reflectorProps().defines);
|
|
95
|
-
this.
|
|
96
|
-
this.
|
|
97
|
-
this.
|
|
98
|
-
this.
|
|
99
|
-
this.
|
|
100
|
-
this.
|
|
101
|
-
this.
|
|
102
|
-
this.
|
|
103
|
-
this.
|
|
104
|
-
this.
|
|
105
|
-
this.
|
|
106
|
-
this.
|
|
107
|
-
this.
|
|
108
|
-
this.
|
|
109
|
-
this.
|
|
110
|
-
this
|
|
111
|
-
this
|
|
112
|
-
this
|
|
113
|
-
this
|
|
114
|
-
this
|
|
115
|
-
this
|
|
116
|
-
this
|
|
117
|
-
this
|
|
118
|
-
this
|
|
119
|
-
this
|
|
120
|
-
this
|
|
121
|
-
this
|
|
122
|
-
this
|
|
123
|
-
this
|
|
124
|
-
this
|
|
125
|
-
this
|
|
126
|
-
this
|
|
127
|
-
this
|
|
128
|
-
this
|
|
129
|
-
this
|
|
130
|
-
this
|
|
131
|
-
this
|
|
132
|
-
this
|
|
133
|
-
this
|
|
134
|
-
this
|
|
135
|
-
this
|
|
136
|
-
this
|
|
137
|
-
const blur = this
|
|
66
|
+
this.mirror = computed(() => this.reflectorProps().mirror);
|
|
67
|
+
this.textureMatrix = computed(() => this.reflectorProps().textureMatrix);
|
|
68
|
+
this.mixBlur = computed(() => this.reflectorProps().mixBlur);
|
|
69
|
+
this.tDiffuse = computed(() => this.reflectorProps().tDiffuse);
|
|
70
|
+
this.tDepth = computed(() => this.reflectorProps().tDepth);
|
|
71
|
+
this.tDiffuseBlur = computed(() => this.reflectorProps().tDiffuseBlur);
|
|
72
|
+
this.hasBlur = computed(() => this.reflectorProps().hasBlur);
|
|
73
|
+
this.mixStrength = computed(() => this.reflectorProps().mixStrength);
|
|
74
|
+
this.minDepthThreshold = computed(() => this.reflectorProps().minDepthThreshold);
|
|
75
|
+
this.maxDepthThreshold = computed(() => this.reflectorProps().maxDepthThreshold);
|
|
76
|
+
this.depthScale = computed(() => this.reflectorProps().depthScale);
|
|
77
|
+
this.depthToBlurRatioBias = computed(() => this.reflectorProps().depthToBlurRatioBias);
|
|
78
|
+
this.distortion = computed(() => this.reflectorProps().distortion);
|
|
79
|
+
this.distortionMap = computed(() => this.reflectorProps().distortionMap);
|
|
80
|
+
this.mixContrast = computed(() => this.reflectorProps().mixContrast);
|
|
81
|
+
this.store = injectNgtStore();
|
|
82
|
+
this.gl = this.store.select('gl');
|
|
83
|
+
this.reflectorPlane = new THREE.Plane();
|
|
84
|
+
this.normal = new THREE.Vector3();
|
|
85
|
+
this.reflectorWorldPosition = new THREE.Vector3();
|
|
86
|
+
this.cameraWorldPosition = new THREE.Vector3();
|
|
87
|
+
this.rotationMatrix = new THREE.Matrix4();
|
|
88
|
+
this.lookAtPosition = new THREE.Vector3(0, 0, -1);
|
|
89
|
+
this.clipPlane = new THREE.Vector4();
|
|
90
|
+
this.view = new THREE.Vector3();
|
|
91
|
+
this.target = new THREE.Vector3();
|
|
92
|
+
this.q = new THREE.Vector4();
|
|
93
|
+
this.virtualCamera = new THREE.PerspectiveCamera();
|
|
94
|
+
this._textureMatrix = new THREE.Matrix4();
|
|
95
|
+
this.__blur = this.inputs.select('blur');
|
|
96
|
+
this.__resolution = this.inputs.select('resolution');
|
|
97
|
+
this.__mirror = this.inputs.select('mirror');
|
|
98
|
+
this.__mixBlur = this.inputs.select('mixBlur');
|
|
99
|
+
this.__mixStrength = this.inputs.select('mixStrength');
|
|
100
|
+
this.__minDepthThreshold = this.inputs.select('minDepthThreshold');
|
|
101
|
+
this.__maxDepthThreshold = this.inputs.select('maxDepthThreshold');
|
|
102
|
+
this.__depthScale = this.inputs.select('depthScale');
|
|
103
|
+
this.__depthToBlurRatioBias = this.inputs.select('depthToBlurRatioBias');
|
|
104
|
+
this.__distortion = this.inputs.select('distortion');
|
|
105
|
+
this.__distortionMap = this.inputs.select('distortionMap');
|
|
106
|
+
this.__mixContrast = this.inputs.select('mixContrast');
|
|
107
|
+
this.normalizedBlur = computed(() => {
|
|
108
|
+
const blur = this.__blur();
|
|
138
109
|
return Array.isArray(blur) ? blur : [blur, blur];
|
|
139
110
|
});
|
|
140
|
-
this
|
|
141
|
-
const [x, y] = this
|
|
111
|
+
this.__hasBlur = computed(() => {
|
|
112
|
+
const [x, y] = this.normalizedBlur();
|
|
142
113
|
return x + y > 0;
|
|
143
114
|
});
|
|
144
|
-
this
|
|
145
|
-
const gl = this
|
|
146
|
-
const resolution = this
|
|
147
|
-
const blur = this
|
|
148
|
-
const minDepthThreshold = this
|
|
149
|
-
const maxDepthThreshold = this
|
|
150
|
-
const depthScale = this
|
|
151
|
-
const depthToBlurRatioBias = this
|
|
152
|
-
const mirror = this
|
|
153
|
-
const mixBlur = this
|
|
154
|
-
const mixStrength = this
|
|
155
|
-
const mixContrast = this
|
|
156
|
-
const distortion = this
|
|
157
|
-
const distortionMap = this
|
|
158
|
-
const hasBlur = this
|
|
115
|
+
this.states = computed(() => {
|
|
116
|
+
const gl = this.gl();
|
|
117
|
+
const resolution = this.__resolution();
|
|
118
|
+
const blur = this.normalizedBlur();
|
|
119
|
+
const minDepthThreshold = this.__minDepthThreshold();
|
|
120
|
+
const maxDepthThreshold = this.__maxDepthThreshold();
|
|
121
|
+
const depthScale = this.__depthScale();
|
|
122
|
+
const depthToBlurRatioBias = this.__depthToBlurRatioBias();
|
|
123
|
+
const mirror = this.__mirror();
|
|
124
|
+
const mixBlur = this.__mixBlur();
|
|
125
|
+
const mixStrength = this.__mixStrength();
|
|
126
|
+
const mixContrast = this.__mixContrast();
|
|
127
|
+
const distortion = this.__distortion();
|
|
128
|
+
const distortionMap = this.__distortionMap();
|
|
129
|
+
const hasBlur = this.__hasBlur();
|
|
159
130
|
const parameters = {
|
|
160
131
|
minFilter: THREE.LinearFilter,
|
|
161
132
|
magFilter: THREE.LinearFilter,
|
|
162
|
-
encoding: gl.outputEncoding,
|
|
163
133
|
type: THREE.HalfFloatType,
|
|
164
134
|
};
|
|
165
135
|
const fbo1 = new THREE.WebGLRenderTarget(resolution, resolution, parameters);
|
|
@@ -180,7 +150,7 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
|
|
|
180
150
|
});
|
|
181
151
|
const reflectorProps = {
|
|
182
152
|
mirror,
|
|
183
|
-
textureMatrix: this
|
|
153
|
+
textureMatrix: this._textureMatrix,
|
|
184
154
|
mixBlur,
|
|
185
155
|
tDiffuse: fbo1.texture,
|
|
186
156
|
tDepth: fbo1.depthTexture,
|
|
@@ -202,29 +172,29 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
|
|
|
202
172
|
};
|
|
203
173
|
return { fbo1, fbo2, blurPass, reflectorProps };
|
|
204
174
|
});
|
|
205
|
-
injectBeforeRender(this
|
|
175
|
+
injectBeforeRender(this.onBeforeRender.bind(this));
|
|
206
176
|
}
|
|
207
|
-
|
|
177
|
+
onBeforeRender(state) {
|
|
208
178
|
if (!this.materialRef.nativeElement)
|
|
209
179
|
return;
|
|
210
|
-
const parent = getLocalState(this.materialRef.nativeElement).parent?.
|
|
180
|
+
const parent = getLocalState(this.materialRef.nativeElement).parent?.();
|
|
211
181
|
if (!parent)
|
|
212
182
|
return;
|
|
213
183
|
const { gl, scene } = state;
|
|
214
|
-
const hasBlur = this
|
|
215
|
-
const { fbo1, fbo2, blurPass } = this
|
|
184
|
+
const hasBlur = this.__hasBlur();
|
|
185
|
+
const { fbo1, fbo2, blurPass } = this.states();
|
|
216
186
|
if (fbo1 && fbo2 && blurPass) {
|
|
217
187
|
parent.visible = false;
|
|
218
188
|
const currentXrEnabled = gl.xr.enabled;
|
|
219
189
|
const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
|
|
220
|
-
this
|
|
190
|
+
this.beforeRender(state);
|
|
221
191
|
gl.xr.enabled = false;
|
|
222
192
|
gl.shadowMap.autoUpdate = false;
|
|
223
193
|
gl.setRenderTarget(fbo1);
|
|
224
194
|
gl.state.buffers.depth.setMask(true);
|
|
225
195
|
if (!gl.autoClear)
|
|
226
196
|
gl.clear();
|
|
227
|
-
gl.render(scene, this
|
|
197
|
+
gl.render(scene, this.virtualCamera);
|
|
228
198
|
if (hasBlur)
|
|
229
199
|
blurPass.render(gl, fbo1, fbo2);
|
|
230
200
|
gl.xr.enabled = currentXrEnabled;
|
|
@@ -233,151 +203,165 @@ class NgtsMeshReflectorMaterial extends NgtSignalStore {
|
|
|
233
203
|
gl.setRenderTarget(null);
|
|
234
204
|
}
|
|
235
205
|
}
|
|
236
|
-
|
|
237
|
-
const parent = getLocalState(this.materialRef.nativeElement).parent?.
|
|
206
|
+
beforeRender(state) {
|
|
207
|
+
const parent = getLocalState(this.materialRef.nativeElement).parent?.();
|
|
238
208
|
if (!parent)
|
|
239
209
|
return;
|
|
240
210
|
const { camera } = state;
|
|
241
|
-
this
|
|
242
|
-
this
|
|
243
|
-
this
|
|
244
|
-
this
|
|
245
|
-
this
|
|
246
|
-
this
|
|
247
|
-
this
|
|
211
|
+
this.reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
|
|
212
|
+
this.cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
|
|
213
|
+
this.rotationMatrix.extractRotation(parent.matrixWorld);
|
|
214
|
+
this.normal.set(0, 0, 1);
|
|
215
|
+
this.normal.applyMatrix4(this.rotationMatrix);
|
|
216
|
+
this.reflectorWorldPosition.addScaledVector(this.normal, this.inputs.get('reflectorOffset'));
|
|
217
|
+
this.view.subVectors(this.reflectorWorldPosition, this.cameraWorldPosition);
|
|
248
218
|
// Avoid rendering when reflector is facing away
|
|
249
|
-
if (this
|
|
219
|
+
if (this.view.dot(this.normal) > 0)
|
|
250
220
|
return;
|
|
251
|
-
this
|
|
252
|
-
this
|
|
253
|
-
this
|
|
254
|
-
this
|
|
255
|
-
this
|
|
256
|
-
this
|
|
257
|
-
this
|
|
258
|
-
this
|
|
259
|
-
this
|
|
260
|
-
this
|
|
261
|
-
this
|
|
262
|
-
this
|
|
263
|
-
this
|
|
264
|
-
this
|
|
265
|
-
this
|
|
266
|
-
this
|
|
267
|
-
this
|
|
221
|
+
this.view.reflect(this.normal).negate();
|
|
222
|
+
this.view.add(this.reflectorWorldPosition);
|
|
223
|
+
this.rotationMatrix.extractRotation(camera.matrixWorld);
|
|
224
|
+
this.lookAtPosition.set(0, 0, -1);
|
|
225
|
+
this.lookAtPosition.applyMatrix4(this.rotationMatrix);
|
|
226
|
+
this.lookAtPosition.add(this.cameraWorldPosition);
|
|
227
|
+
this.target.subVectors(this.reflectorWorldPosition, this.lookAtPosition);
|
|
228
|
+
this.target.reflect(this.normal).negate();
|
|
229
|
+
this.target.add(this.reflectorWorldPosition);
|
|
230
|
+
this.virtualCamera.position.copy(this.view);
|
|
231
|
+
this.virtualCamera.up.set(0, 1, 0);
|
|
232
|
+
this.virtualCamera.up.applyMatrix4(this.rotationMatrix);
|
|
233
|
+
this.virtualCamera.up.reflect(this.normal);
|
|
234
|
+
this.virtualCamera.lookAt(this.target);
|
|
235
|
+
this.virtualCamera.far = camera.far; // Used in WebGLBackground
|
|
236
|
+
this.virtualCamera.updateMatrixWorld();
|
|
237
|
+
this.virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
|
|
268
238
|
// Update the texture matrix
|
|
269
|
-
this
|
|
270
|
-
this
|
|
271
|
-
this
|
|
272
|
-
this
|
|
239
|
+
this._textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
|
|
240
|
+
this._textureMatrix.multiply(this.virtualCamera.projectionMatrix);
|
|
241
|
+
this._textureMatrix.multiply(this.virtualCamera.matrixWorldInverse);
|
|
242
|
+
this._textureMatrix.multiply(parent.matrixWorld);
|
|
273
243
|
// Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
|
|
274
244
|
// Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
|
|
275
|
-
this
|
|
276
|
-
this
|
|
277
|
-
this
|
|
278
|
-
const projectionMatrix = this
|
|
279
|
-
this
|
|
280
|
-
this
|
|
281
|
-
this
|
|
282
|
-
this
|
|
245
|
+
this.reflectorPlane.setFromNormalAndCoplanarPoint(this.normal, this.reflectorWorldPosition);
|
|
246
|
+
this.reflectorPlane.applyMatrix4(this.virtualCamera.matrixWorldInverse);
|
|
247
|
+
this.clipPlane.set(this.reflectorPlane.normal.x, this.reflectorPlane.normal.y, this.reflectorPlane.normal.z, this.reflectorPlane.constant);
|
|
248
|
+
const projectionMatrix = this.virtualCamera.projectionMatrix;
|
|
249
|
+
this.q.x = (Math.sign(this.clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
|
|
250
|
+
this.q.y = (Math.sign(this.clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
|
|
251
|
+
this.q.z = -1.0;
|
|
252
|
+
this.q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
|
|
283
253
|
// Calculate the scaled plane vector
|
|
284
|
-
this
|
|
254
|
+
this.clipPlane.multiplyScalar(2.0 / this.clipPlane.dot(this.q));
|
|
285
255
|
// Replacing the third row of the projection matrix
|
|
286
|
-
projectionMatrix.elements[2] = this
|
|
287
|
-
projectionMatrix.elements[6] = this
|
|
288
|
-
projectionMatrix.elements[10] = this
|
|
289
|
-
projectionMatrix.elements[14] = this
|
|
256
|
+
projectionMatrix.elements[2] = this.clipPlane.x;
|
|
257
|
+
projectionMatrix.elements[6] = this.clipPlane.y;
|
|
258
|
+
projectionMatrix.elements[10] = this.clipPlane.z + 1.0;
|
|
259
|
+
projectionMatrix.elements[14] = this.clipPlane.w;
|
|
290
260
|
}
|
|
291
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.
|
|
292
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
261
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshReflectorMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
262
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NgtsMeshReflectorMaterial, isStandalone: true, selector: "ngts-mesh-reflector-material", inputs: { materialRef: "materialRef", _resolution: ["resolution", "_resolution"], _mixBlur: ["mixBlur", "_mixBlur"], _mixStrength: ["mixStrength", "_mixStrength"], _blur: ["blur", "_blur"], _mirror: ["mirror", "_mirror"], _minDepthThreshold: ["minDepthThreshold", "_minDepthThreshold"], _maxDepthThreshold: ["maxDepthThreshold", "_maxDepthThreshold"], _depthScale: ["depthScale", "_depthScale"], _depthToBlurRatioBias: ["depthToBlurRatioBias", "_depthToBlurRatioBias"], _distortionMap: ["distortionMap", "_distortionMap"], _distortion: ["distortion", "_distortion"], _mixContrast: ["mixContrast", "_mixContrast"], _reflectorOffset: ["reflectorOffset", "_reflectorOffset"] }, ngImport: i0, template: `
|
|
263
|
+
<ngt-mesh-reflector-material
|
|
264
|
+
*ngIf="defines() as defines"
|
|
265
|
+
[key]="defines"
|
|
266
|
+
ngtCompound
|
|
267
|
+
attach="material"
|
|
268
|
+
[ref]="materialRef"
|
|
269
|
+
[defines]="defines"
|
|
270
|
+
[mirror]="mirror()"
|
|
271
|
+
[textureMatrix]="textureMatrix()"
|
|
272
|
+
[mixBlur]="mixBlur()"
|
|
273
|
+
[tDiffuse]="tDiffuse()"
|
|
274
|
+
[tDepth]="tDepth()"
|
|
275
|
+
[tDiffuseBlur]="tDiffuseBlur()"
|
|
276
|
+
[hasBlur]="hasBlur()"
|
|
277
|
+
[mixStrength]="mixStrength()"
|
|
278
|
+
[minDepthThreshold]="minDepthThreshold()"
|
|
279
|
+
[maxDepthThreshold]="maxDepthThreshold()"
|
|
280
|
+
[depthScale]="depthScale()"
|
|
281
|
+
[depthToBlurRatioBias]="depthToBlurRatioBias()"
|
|
282
|
+
[distortion]="distortion()"
|
|
283
|
+
[distortionMap]="distortionMap()"
|
|
284
|
+
[mixContrast]="mixContrast()"
|
|
285
|
+
>
|
|
286
|
+
<ng-content />
|
|
287
|
+
</ngt-mesh-reflector-material>
|
|
288
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
318
289
|
}
|
|
319
|
-
|
|
320
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
|
|
290
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NgtsMeshReflectorMaterial, decorators: [{
|
|
321
291
|
type: Component,
|
|
322
292
|
args: [{
|
|
323
293
|
selector: 'ngts-mesh-reflector-material',
|
|
324
294
|
standalone: true,
|
|
325
295
|
template: `
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
296
|
+
<ngt-mesh-reflector-material
|
|
297
|
+
*ngIf="defines() as defines"
|
|
298
|
+
[key]="defines"
|
|
299
|
+
ngtCompound
|
|
300
|
+
attach="material"
|
|
301
|
+
[ref]="materialRef"
|
|
302
|
+
[defines]="defines"
|
|
303
|
+
[mirror]="mirror()"
|
|
304
|
+
[textureMatrix]="textureMatrix()"
|
|
305
|
+
[mixBlur]="mixBlur()"
|
|
306
|
+
[tDiffuse]="tDiffuse()"
|
|
307
|
+
[tDepth]="tDepth()"
|
|
308
|
+
[tDiffuseBlur]="tDiffuseBlur()"
|
|
309
|
+
[hasBlur]="hasBlur()"
|
|
310
|
+
[mixStrength]="mixStrength()"
|
|
311
|
+
[minDepthThreshold]="minDepthThreshold()"
|
|
312
|
+
[maxDepthThreshold]="maxDepthThreshold()"
|
|
313
|
+
[depthScale]="depthScale()"
|
|
314
|
+
[depthToBlurRatioBias]="depthToBlurRatioBias()"
|
|
315
|
+
[distortion]="distortion()"
|
|
316
|
+
[distortionMap]="distortionMap()"
|
|
317
|
+
[mixContrast]="mixContrast()"
|
|
318
|
+
>
|
|
319
|
+
<ng-content />
|
|
320
|
+
</ngt-mesh-reflector-material>
|
|
321
|
+
`,
|
|
322
|
+
imports: [NgIf, NgtKey],
|
|
352
323
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
353
324
|
}]
|
|
354
325
|
}], ctorParameters: function () { return []; }, propDecorators: { materialRef: [{
|
|
355
326
|
type: Input
|
|
356
|
-
}],
|
|
357
|
-
type: Input
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
}],
|
|
363
|
-
type: Input
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
}],
|
|
369
|
-
type: Input
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
}],
|
|
375
|
-
type: Input
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
}],
|
|
381
|
-
type: Input
|
|
327
|
+
}], _resolution: [{
|
|
328
|
+
type: Input,
|
|
329
|
+
args: [{ alias: 'resolution' }]
|
|
330
|
+
}], _mixBlur: [{
|
|
331
|
+
type: Input,
|
|
332
|
+
args: [{ alias: 'mixBlur' }]
|
|
333
|
+
}], _mixStrength: [{
|
|
334
|
+
type: Input,
|
|
335
|
+
args: [{ alias: 'mixStrength' }]
|
|
336
|
+
}], _blur: [{
|
|
337
|
+
type: Input,
|
|
338
|
+
args: [{ alias: 'blur' }]
|
|
339
|
+
}], _mirror: [{
|
|
340
|
+
type: Input,
|
|
341
|
+
args: [{ alias: 'mirror' }]
|
|
342
|
+
}], _minDepthThreshold: [{
|
|
343
|
+
type: Input,
|
|
344
|
+
args: [{ alias: 'minDepthThreshold' }]
|
|
345
|
+
}], _maxDepthThreshold: [{
|
|
346
|
+
type: Input,
|
|
347
|
+
args: [{ alias: 'maxDepthThreshold' }]
|
|
348
|
+
}], _depthScale: [{
|
|
349
|
+
type: Input,
|
|
350
|
+
args: [{ alias: 'depthScale' }]
|
|
351
|
+
}], _depthToBlurRatioBias: [{
|
|
352
|
+
type: Input,
|
|
353
|
+
args: [{ alias: 'depthToBlurRatioBias' }]
|
|
354
|
+
}], _distortionMap: [{
|
|
355
|
+
type: Input,
|
|
356
|
+
args: [{ alias: 'distortionMap' }]
|
|
357
|
+
}], _distortion: [{
|
|
358
|
+
type: Input,
|
|
359
|
+
args: [{ alias: 'distortion' }]
|
|
360
|
+
}], _mixContrast: [{
|
|
361
|
+
type: Input,
|
|
362
|
+
args: [{ alias: 'mixContrast' }]
|
|
363
|
+
}], _reflectorOffset: [{
|
|
364
|
+
type: Input,
|
|
365
|
+
args: [{ alias: 'reflectorOffset' }]
|
|
382
366
|
}] } });
|
|
383
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQ0gsTUFBTSxFQUNOLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLE9BQU8sRUFFUCxjQUFjLEVBQ2QsUUFBUSxHQUNYLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM3RSxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQzs7QUFFL0IsTUFBTSxDQUFDLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxDQUFDO0FBa0JsQyxNQWdDYSx5QkFBMEIsU0FBUSxjQUE4QztJQUd6RixJQUFhLFVBQVUsQ0FBQyxVQUFrQjtRQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBYSxPQUFPLENBQUMsT0FBZTtRQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBYSxXQUFXLENBQUMsV0FBbUI7UUFDeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELElBQWEsSUFBSSxDQUFDLElBQStCO1FBQzdDLElBQUksQ0FBQyxHQUFH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QUFDO1FBQ2pELGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDeEQsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0lBQ3RELENBQUM7OEdBM1JRLHlCQUF5QjtrR0FBekIseUJBQXlCLG1oQkE3QnhCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJULDREQUNrQixJQUFJOztTQUdkLHlCQUF5QjsyRkFBekIseUJBQXlCO2tCQWhDckMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsOEJBQThCO29CQUN4QyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBeUJUO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUM7b0JBQ3hCLE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFFWSxXQUFXO3NCQUFuQixLQUFLO2dCQUVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sT0FBTztzQkFBbkIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLElBQUk7c0JBQWhCLEtBQUs7Z0JBSU8sTUFBTTtzQkFBbEIsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sb0JBQW9CO3NCQUFoQyxLQUFLO2dCQUlPLGFBQWE7c0JBQXpCLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgY29tcHV0ZWQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgZXh0ZW5kLFxuICAgIGdldExvY2FsU3RhdGUsXG4gICAgaW5qZWN0QmVmb3JlUmVuZGVyLFxuICAgIGluamVjdE5ndFJlZixcbiAgICBOZ3RBcmdzLFxuICAgIE5ndFJlbmRlclN0YXRlLFxuICAgIE5ndFNpZ25hbFN0b3JlLFxuICAgIE5ndFN0b3JlLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEJsdXJQYXNzLCBNZXNoUmVmbGVjdG9yTWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc2hhZGVycyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4dGVuZCh7IE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsU3RhdGUge1xuICAgIHJlc29sdXRpb246IG51bWJlcjtcbiAgICBtaXhCbHVyOiBudW1iZXI7XG4gICAgbWl4U3RyZW5ndGg6IG51bWJlcjtcbiAgICBibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyO1xuICAgIG1pcnJvcjogbnVtYmVyO1xuICAgIG1pbkRlcHRoVGhyZXNob2xkOiBudW1iZXI7XG4gICAgbWF4RGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBkZXB0aFNjYWxlOiBudW1iZXI7XG4gICAgZGVwdGhUb0JsdXJSYXRpb0JpYXM6IG51bWJlcjtcbiAgICBkaXN0b3J0aW9uTWFwPzogVEhSRUUuVGV4dHVyZTtcbiAgICBkaXN0b3J0aW9uOiBudW1iZXI7XG4gICAgbWl4Q29udHJhc3Q6IG51bWJlcjtcbiAgICByZWZsZWN0b3JPZmZzZXQ6IG51bWJlcjtcbn1cblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RzLW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWxcbiAgICAgICAgICAgIG5ndENvbXBvdW5kXG4gICAgICAgICAgICBhdHRhY2g9XCJtYXRlcmlhbFwiXG4gICAgICAgICAgICAqbmdJZj1cImRlZmluZXMoKVwiXG4gICAgICAgICAgICBbcmVmXT1cIm1hdGVyaWFsUmVmXCJcbiAgICAgICAgICAgIFtkZWZpbmVzXT1cImRlZmluZXMoKVwiXG4gICAgICAgICAgICBbbWlycm9yXT1cInJlZmxlY3Rvck1pcnJvcigpXCJcbiAgICAgICAgICAgIFt0ZXh0dXJlTWF0cml4XT1cInJlZmxlY3RvclRleHR1cmVNYXRyaXgoKVwiXG4gICAgICAgICAgICBbbWl4Qmx1cl09XCJyZWZsZWN0b3JNaXhCbHVyKClcIlxuICAgICAgICAgICAgW3REaWZmdXNlXT1cInJlZmxlY3RvclREaWZmdXNlKClcIlxuICAgICAgICAgICAgW3REZXB0aF09XCJyZWZsZWN0b3JURGVwdGgoKVwiXG4gICAgICAgICAgICBbdERpZmZ1c2VCbHVyXT1cInJlZmxlY3RvclREaWZmdXNlQmx1cigpXCJcbiAgICAgICAgICAgIFtoYXNCbHVyXT1cInJlZmxlY3Rvckhhc0JsdXIoKVwiXG4gICAgICAgICAgICBbbWl4U3RyZW5ndGhdPVwicmVmbGVjdG9yTWl4U3RyZW5ndGgoKVwiXG4gICAgICAgICAgICBbbWluRGVwdGhUaHJlc2hvbGRdPVwicmVmbGVjdG9yTWluRGVwdGhUaHJlc2hvbGQoKVwiXG4gICAgICAgICAgICBbbWF4RGVwdGhUaHJlc2hvbGRdPVwicmVmbGVjdG9yTWF4RGVwdGhUaHJlc2hvbGQoKVwiXG4gICAgICAgICAgICBbZGVwdGhTY2FsZV09XCJyZWZsZWN0b3JEZXB0aFNjYWxlKClcIlxuICAgICAgICAgICAgW2RlcHRoVG9CbHVyUmF0aW9CaWFzXT1cInJlZmxlY3RvckRlcHRoVG9CbHVyUmF0aW9CaWFzKClcIlxuICAgICAgICAgICAgW2Rpc3RvcnRpb25dPVwicmVmbGVjdG9yRGlzdG9ydGlvbigpXCJcbiAgICAgICAgICAgIFtkaXN0b3J0aW9uTWFwXT1cInJlZmxlY3RvckRpc3RvcnRpb25NYXAoKVwiXG4gICAgICAgICAgICBbbWl4Q29udHJhc3RdPVwicmVmbGVjdG9yTWl4Q29udHJhc3QoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LW1lc2gtcmVmbGVjdG9yLW1hdGVyaWFsPlxuICAgIGAsXG4gICAgaW1wb3J0czogW05ndEFyZ3MsIE5nSWZdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hSZWZsZWN0b3JNYXRlcmlhbCBleHRlbmRzIE5ndFNpZ25hbFN0b3JlPE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZT4ge1xuICAgIEBJbnB1dCgpIG1hdGVyaWFsUmVmID0gaW5qZWN0Tmd0UmVmPE1lc2hSZWZsZWN0b3JNYXRlcmlhbD4oKTtcblxuICAgIEBJbnB1dCgpIHNldCByZXNvbHV0aW9uKHJlc29sdXRpb246IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlc29sdXRpb24gfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1peEJsdXIobWl4Qmx1cjogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWl4Qmx1ciB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWl4U3RyZW5ndGgobWl4U3RyZW5ndGg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1peFN0cmVuZ3RoIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBibHVyKGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBibHVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaXJyb3IobWlycm9yOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaXJyb3IgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG1pbkRlcHRoVGhyZXNob2xkKG1pbkRlcHRoVGhyZXNob2xkOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtaW5EZXB0aFRocmVzaG9sZCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgbWF4RGVwdGhUaHJlc2hvbGQobWF4RGVwdGhUaHJlc2hvbGQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IG1heERlcHRoVGhyZXNob2xkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZXB0aFNjYWxlKGRlcHRoU2NhbGU6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IGRlcHRoU2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGRlcHRoVG9CbHVyUmF0aW9CaWFzKGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZXB0aFRvQmx1clJhdGlvQmlhcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGlzdG9ydGlvbk1hcChkaXN0b3J0aW9uTWFwOiBUSFJFRS5UZXh0dXJlKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZGlzdG9ydGlvbk1hcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZGlzdG9ydGlvbihkaXN0b3J0aW9uOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkaXN0b3J0aW9uIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtaXhDb250cmFzdChtaXhDb250cmFzdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbWl4Q29udHJhc3QgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHJlZmxlY3Rvck9mZnNldChyZWZsZWN0b3JPZmZzZXQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNldCh7IHJlZmxlY3Rvck9mZnNldCB9KTtcbiAgICB9XG5cbiAgICByZWFkb25seSByZWZsZWN0b3JQcm9wcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuI3JlZmxlY3RvckVudGl0aWVzKCkucmVmbGVjdG9yUHJvcHMpO1xuICAgIHJlYWRvbmx5IGRlZmluZXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGVmaW5lcyk7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yTWlycm9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1pcnJvcik7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yVGV4dHVyZU1hdHJpeCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50ZXh0dXJlTWF0cml4KTtcbiAgICByZWFkb25seSByZWZsZWN0b3JNaXhCbHVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peEJsdXIpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3RvclREaWZmdXNlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnREaWZmdXNlKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JURGVwdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERlcHRoKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JURGlmZnVzZUJsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERpZmZ1c2VCbHVyKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JIYXNCbHVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmhhc0JsdXIpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3Rvck1peFN0cmVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peFN0cmVuZ3RoKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JNaW5EZXB0aFRocmVzaG9sZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5taW5EZXB0aFRocmVzaG9sZCk7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yTWF4RGVwdGhUaHJlc2hvbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWF4RGVwdGhUaHJlc2hvbGQpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3RvckRlcHRoU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGVwdGhTY2FsZSk7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yRGVwdGhUb0JsdXJSYXRpb0JpYXMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGVwdGhUb0JsdXJSYXRpb0JpYXMpO1xuICAgIHJlYWRvbmx5IHJlZmxlY3RvckRpc3RvcnRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGlzdG9ydGlvbik7XG4gICAgcmVhZG9ubHkgcmVmbGVjdG9yRGlzdG9ydGlvbk1hcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uTWFwKTtcbiAgICByZWFkb25seSByZWZsZWN0b3JNaXhDb250cmFzdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5taXhDb250cmFzdCk7XG5cbiAgICByZWFkb25seSAjc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIHJlYWRvbmx5ICNnbCA9IHRoaXMuI3N0b3JlLnNlbGVjdCgnZ2wnKTtcblxuICAgIHJlYWRvbmx5ICNyZWZsZWN0b3JQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xuICAgIHJlYWRvbmx5ICNub3JtYWwgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHJlYWRvbmx5ICNyZWZsZWN0b3JXb3JsZFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcbiAgICByZWFkb25seSAjY2FtZXJhV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG4gICAgcmVhZG9ubHkgI3JvdGF0aW9uTWF0cml4ID0gbmV3IFRIUkVFLk1hdHJpeDQoKTtcbiAgICByZWFkb25seSAjbG9va0F0UG9zaXRpb24gPSBuZXcgVEhSRUUuVmVjdG9yMygwLCAwLCAtMSk7XG4gICAgcmVhZG9ubHkgI2NsaXBQbGFuZSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG4gICAgcmVhZG9ubHkgI3ZpZXcgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHJlYWRvbmx5ICN0YXJnZXQgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuICAgIHJlYWRvbmx5ICNxID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcbiAgICByZWFkb25seSAjdGV4dHVyZU1hdHJpeCA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG4gICAgcmVhZG9ubHkgI3ZpcnR1YWxDYW1lcmEgPSBuZXcgVEhSRUUuUGVyc3BlY3RpdmVDYW1lcmEoKTtcblxuICAgIHJlYWRvbmx5ICNibHVyID0gdGhpcy5zZWxlY3QoJ2JsdXInKTtcbiAgICByZWFkb25seSAjcmVzb2x1dGlvbiA9IHRoaXMuc2VsZWN0KCdyZXNvbHV0aW9uJyk7XG4gICAgcmVhZG9ubHkgI21pcnJvciA9IHRoaXMuc2VsZWN0KCdtaXJyb3InKTtcbiAgICByZWFkb25seSAjbWl4Qmx1ciA9IHRoaXMuc2VsZWN0KCdtaXhCbHVyJyk7XG4gICAgcmVhZG9ubHkgI21peFN0cmVuZ3RoID0gdGhpcy5zZWxlY3QoJ21peFN0cmVuZ3RoJyk7XG4gICAgcmVhZG9ubHkgI21pbkRlcHRoVGhyZXNob2xkID0gdGhpcy5zZWxlY3QoJ21pbkRlcHRoVGhyZXNob2xkJyk7XG4gICAgcmVhZG9ubHkgI21heERlcHRoVGhyZXNob2xkID0gdGhpcy5zZWxlY3QoJ21heERlcHRoVGhyZXNob2xkJyk7XG4gICAgcmVhZG9ubHkgI2RlcHRoU2NhbGUgPSB0aGlzLnNlbGVjdCgnZGVwdGhTY2FsZScpO1xuICAgIHJlYWRvbmx5ICNkZXB0aFRvQmx1clJhdGlvQmlhcyA9IHRoaXMuc2VsZWN0KCdkZXB0aFRvQmx1clJhdGlvQmlhcycpO1xuICAgIHJlYWRvbmx5ICNkaXN0b3J0aW9uID0gdGhpcy5zZWxlY3QoJ2Rpc3RvcnRpb24nKTtcbiAgICByZWFkb25seSAjZGlzdG9ydGlvbk1hcCA9IHRoaXMuc2VsZWN0KCdkaXN0b3J0aW9uTWFwJyk7XG4gICAgcmVhZG9ubHkgI21peENvbnRyYXN0ID0gdGhpcy5zZWxlY3QoJ21peENvbnRyYXN0Jyk7XG5cbiAgICByZWFkb25seSAjbm9ybWFsaXplZEJsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJsdXIgPSB0aGlzLiNibHVyKCk7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGJsdXIpID8gYmx1ciA6IFtibHVyLCBibHVyXTtcbiAgICB9KTtcblxuICAgIHJlYWRvbmx5ICNoYXNCbHVyID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBbeCwgeV0gPSB0aGlzLiNub3JtYWxpemVkQmx1cigpO1xuICAgICAgICByZXR1cm4geCArIHkgPiAwO1xuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgI3JlZmxlY3RvckVudGl0aWVzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBnbCA9IHRoaXMuI2dsKCk7XG4gICAgICAgIGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLiNyZXNvbHV0aW9uKCk7XG4gICAgICAgIGNvbnN0IGJsdXIgPSB0aGlzLiNub3JtYWxpemVkQmx1cigpO1xuICAgICAgICBjb25zdCBtaW5EZXB0aFRocmVzaG9sZCA9IHRoaXMuI21pbkRlcHRoVGhyZXNob2xkKCk7XG4gICAgICAgIGNvbnN0IG1heERlcHRoVGhyZXNob2xkID0gdGhpcy4jbWF4RGVwdGhUaHJlc2hvbGQoKTtcbiAgICAgICAgY29uc3QgZGVwdGhTY2FsZSA9IHRoaXMuI2RlcHRoU2NhbGUoKTtcbiAgICAgICAgY29uc3QgZGVwdGhUb0JsdXJSYXRpb0JpYXMgPSB0aGlzLiNkZXB0aFRvQmx1clJhdGlvQmlhcygpO1xuICAgICAgICBjb25zdCBtaXJyb3IgPSB0aGlzLiNtaXJyb3IoKTtcbiAgICAgICAgY29uc3QgbWl4Qmx1ciA9IHRoaXMuI21peEJsdXIoKTtcbiAgICAgICAgY29uc3QgbWl4U3RyZW5ndGggPSB0aGlzLiNtaXhTdHJlbmd0aCgpO1xuICAgICAgICBjb25zdCBtaXhDb250cmFzdCA9IHRoaXMuI21peENvbnRyYXN0KCk7XG4gICAgICAgIGNvbnN0IGRpc3RvcnRpb24gPSB0aGlzLiNkaXN0b3J0aW9uKCk7XG4gICAgICAgIGNvbnN0IGRpc3RvcnRpb25NYXAgPSB0aGlzLiNkaXN0b3J0aW9uTWFwKCk7XG4gICAgICAgIGNvbnN0IGhhc0JsdXIgPSB0aGlzLiNoYXNCbHVyKCk7XG5cbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHtcbiAgICAgICAgICAgIG1pbkZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuICAgICAgICAgICAgbWFnRmlsdGVyOiBUSFJFRS5MaW5lYXJGaWx0ZXIsXG4gICAgICAgICAgICBlbmNvZGluZzogZ2wub3V0cHV0RW5jb2RpbmcsXG4gICAgICAgICAgICB0eXBlOiBUSFJFRS5IYWxmRmxvYXRUeXBlLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmYm8xID0gbmV3IFRIUkVFLldlYkdMUmVuZGVyVGFyZ2V0KHJlc29sdXRpb24sIHJlc29sdXRpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICBmYm8xLmRlcHRoQnVmZmVyID0gdHJ1ZTtcbiAgICAgICAgZmJvMS5kZXB0aFRleHR1cmUgPSBuZXcgVEhSRUUuRGVwdGhUZXh0dXJlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuICAgICAgICBmYm8xLmRlcHRoVGV4dHVyZS5mb3JtYXQgPSBUSFJFRS5EZXB0aEZvcm1hdDtcbiAgICAgICAgZmJvMS5kZXB0aFRleHR1cmUudHlwZSA9IFRIUkVFLlVuc2lnbmVkU2hvcnRUeXBlO1xuXG4gICAgICAgIGNvbnN0IGZibzIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG4gICAgICAgIGNvbnN0IGJsdXJQYXNzID0gbmV3IEJsdXJQYXNzKHtcbiAgICAgICAgICAgIGdsLFxuICAgICAgICAgICAgcmVzb2x1dGlvbixcbiAgICAgICAgICAgIHdpZHRoOiBibHVyWzBdLFxuICAgICAgICAgICAgaGVpZ2h0OiBibHVyWzFdLFxuICAgICAgICAgICAgbWluRGVwdGhUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhEZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgIGRlcHRoU2NhbGUsXG4gICAgICAgICAgICBkZXB0aFRvQmx1clJhdGlvQmlhcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlZmxlY3RvclByb3BzID0ge1xuICAgICAgICAgICAgbWlycm9yLFxuICAgICAgICAgICAgdGV4dHVyZU1hdHJpeDogdGhpcy4jdGV4dHVyZU1hdHJpeCxcbiAgICAgICAgICAgIG1peEJsdXIsXG4gICAgICAgICAgICB0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuICAgICAgICAgICAgdERlcHRoOiBmYm8xLmRlcHRoVGV4dHVyZSxcbiAgICAgICAgICAgIHREaWZmdXNlQmx1cjogZmJvMi50ZXh0dXJlLFxuICAgICAgICAgICAgaGFzQmx1cixcbiAgICAgICAgICAgIG1peFN0cmVuZ3RoLFxuICAgICAgICAgICAgbWluRGVwdGhUaHJlc2hvbGQsXG4gICAgICAgICAgICBtYXhEZXB0aFRocmVzaG9sZCxcbiAgICAgICAgICAgIGRlcHRoU2NhbGUsXG4gICAgICAgICAgICBkZXB0aFRvQmx1clJhdGlvQmlhcyxcbiAgICAgICAgICAgIGRpc3RvcnRpb24sXG4gICAgICAgICAgICBkaXN0b3J0aW9uTWFwLFxuICAgICAgICAgICAgbWl4Q29udHJhc3QsXG4gICAgICAgICAgICBkZWZpbmVzOiB7XG4gICAgICAgICAgICAgICAgVVNFX0JMVVI6IGhhc0JsdXIgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBVU0VfREVQVEg6IGRlcHRoU2NhbGUgPiAwID8gJycgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgVVNFX0RJU1RPUlRJT046IGRpc3RvcnRpb25NYXAgPyAnJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHsgZmJvMSwgZmJvMiwgYmx1clBhc3MsIHJlZmxlY3RvclByb3BzIH07XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgbWl4Qmx1cjogMCxcbiAgICAgICAgICAgIG1peFN0cmVuZ3RoOiAxLFxuICAgICAgICAgICAgcmVzb2x1dGlvbjogMjU2LFxuICAgICAgICAgICAgYmx1cjogWzAsIDBdLFxuICAgICAgICAgICAgbWluRGVwdGhUaHJlc2hvbGQ6IDAuOSxcbiAgICAgICAgICAgIG1heERlcHRoVGhyZXNob2xkOiAxLFxuICAgICAgICAgICAgZGVwdGhTY2FsZTogMCxcbiAgICAgICAgICAgIGRlcHRoVG9CbHVyUmF0aW9CaWFzOiAwLjI1LFxuICAgICAgICAgICAgbWlycm9yOiAwLFxuICAgICAgICAgICAgZGlzdG9ydGlvbjogMSxcbiAgICAgICAgICAgIG1peENvbnRyYXN0OiAxLFxuICAgICAgICAgICAgcmVmbGVjdG9yT2Zmc2V0OiAwLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbmplY3RCZWZvcmVSZW5kZXIodGhpcy4jb25CZWZvcmVSZW5kZXIuYmluZCh0aGlzKSk7XG4gICAgfVxuXG4gICAgI29uQmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICBpZiAoIXRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50Py52YWx1ZTtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGdsLCBzY2VuZSB9ID0gc3RhdGU7XG4gICAgICAgIGNvbnN0IGhhc0JsdXIgPSB0aGlzLiNoYXNCbHVyKCk7XG4gICAgICAgIGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMuI3JlZmxlY3RvckVudGl0aWVzKCk7XG5cbiAgICAgICAgaWYgKGZibzEgJiYgZmJvMiAmJiBibHVyUGFzcykge1xuICAgICAgICAgICAgcGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYckVuYWJsZWQgPSBnbC54ci5lbmFibGVkO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFNoYWRvd0F1dG9VcGRhdGUgPSBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZTtcbiAgICAgICAgICAgIHRoaXMuI2JlZm9yZVJlbmRlcihzdGF0ZSk7XG4gICAgICAgICAgICBnbC54ci5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBnbC5zaGFkb3dNYXAuYXV0b1VwZGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgZ2wuc2V0UmVuZGVyVGFyZ2V0KGZibzEpO1xuICAgICAgICAgICAgZ2wuc3RhdGUuYnVmZmVycy5kZXB0aC5zZXRNYXNrKHRydWUpO1xuICAgICAgICAgICAgaWYgKCFnbC5hdXRvQ2xlYXIpIGdsLmNsZWFyKCk7XG4gICAgICAgICAgICBnbC5yZW5kZXIoc2NlbmUsIHRoaXMuI3ZpcnR1YWxDYW1lcmEpO1xuICAgICAgICAgICAgaWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG4gICAgICAgICAgICBnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcbiAgICAgICAgICAgIGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG4gICAgICAgICAgICBwYXJlbnQudmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICBnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAjYmVmb3JlUmVuZGVyKHN0YXRlOiBOZ3RSZW5kZXJTdGF0ZSkge1xuICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50Py52YWx1ZTtcbiAgICAgICAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICAgICAgICBjb25zdCB7IGNhbWVyYSB9ID0gc3RhdGU7XG5cbiAgICAgICAgdGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy4jY2FtZXJhV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24oY2FtZXJhLm1hdHJpeFdvcmxkKTtcbiAgICAgICAgdGhpcy4jcm90YXRpb25NYXRyaXguZXh0cmFjdFJvdGF0aW9uKHBhcmVudC5tYXRyaXhXb3JsZCk7XG4gICAgICAgIHRoaXMuI25vcm1hbC5zZXQoMCwgMCwgMSk7XG4gICAgICAgIHRoaXMuI25vcm1hbC5hcHBseU1hdHJpeDQodGhpcy4jcm90YXRpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLiNyZWZsZWN0b3JXb3JsZFBvc2l0aW9uLmFkZFNjYWxlZFZlY3Rvcih0aGlzLiNub3JtYWwsIHRoaXMuZ2V0KCdyZWZsZWN0b3JPZmZzZXQnKSk7XG4gICAgICAgIHRoaXMuI3ZpZXcuc3ViVmVjdG9ycyh0aGlzLiNyZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLiNjYW1lcmFXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgLy8gQXZvaWQgcmVuZGVyaW5nIHdoZW4gcmVmbGVjdG9yIGlzIGZhY2luZyBhd2F5XG4gICAgICAgIGlmICh0aGlzLiN2aWV3LmRvdCh0aGlzLiNub3JtYWwpID4gMCkgcmV0dXJuO1xuICAgICAgICB0aGlzLiN2aWV3LnJlZmxlY3QodGhpcy4jbm9ybWFsKS5uZWdhdGUoKTtcbiAgICAgICAgdGhpcy4jdmlldy5hZGQodGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3JvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuICAgICAgICB0aGlzLiNsb29rQXRQb3NpdGlvbi5zZXQoMCwgMCwgLTEpO1xuICAgICAgICB0aGlzLiNsb29rQXRQb3NpdGlvbi5hcHBseU1hdHJpeDQodGhpcy4jcm90YXRpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLiNsb29rQXRQb3NpdGlvbi5hZGQodGhpcy4jY2FtZXJhV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3RhcmdldC5zdWJWZWN0b3JzKHRoaXMuI3JlZmxlY3RvcldvcmxkUG9zaXRpb24sIHRoaXMuI2xvb2tBdFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy4jdGFyZ2V0LnJlZmxlY3QodGhpcy4jbm9ybWFsKS5uZWdhdGUoKTtcbiAgICAgICAgdGhpcy4jdGFyZ2V0LmFkZCh0aGlzLiNyZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS5wb3NpdGlvbi5jb3B5KHRoaXMuI3ZpZXcpO1xuICAgICAgICB0aGlzLiN2aXJ0dWFsQ2FtZXJhLnVwLnNldCgwLCAxLCAwKTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS51cC5hcHBseU1hdHJpeDQodGhpcy4jcm90YXRpb25NYXRyaXgpO1xuICAgICAgICB0aGlzLiN2aXJ0dWFsQ2FtZXJhLnVwLnJlZmxlY3QodGhpcy4jbm9ybWFsKTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS5sb29rQXQodGhpcy4jdGFyZ2V0KTtcbiAgICAgICAgdGhpcy4jdmlydHVhbENhbWVyYS5mYXIgPSBjYW1lcmEuZmFyOyAvLyBVc2VkIGluIFdlYkdMQmFja2dyb3VuZFxuICAgICAgICB0aGlzLiN2aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG4gICAgICAgIHRoaXMuI3ZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeC5jb3B5KGNhbWVyYS5wcm9qZWN0aW9uTWF0cml4KTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeFxuICAgICAgICB0aGlzLiN0ZXh0dXJlTWF0cml4LnNldCgwLjUsIDAuMCwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuNSwgMC4wLCAwLjAsIDAuNSwgMC41LCAwLjAsIDAuMCwgMC4wLCAxLjApO1xuICAgICAgICB0aGlzLiN0ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHRoaXMuI3ZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG4gICAgICAgIHRoaXMuI3RleHR1cmVNYXRyaXgubXVsdGlwbHkodGhpcy4jdmlydHVhbENhbWVyYS5tYXRyaXhXb3JsZEludmVyc2UpO1xuICAgICAgICB0aGlzLiN0ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG4gICAgICAgIC8vIE5vdyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggd2l0aCBuZXcgY2xpcCBwbGFuZSwgaW1wbGVtZW50aW5nIGNvZGUgZnJvbTogaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vY29kZS9vYmxpcXVlLmh0bWxcbiAgICAgICAgLy8gUGFwZXIgZXhwbGFpbmluZyB0aGlzIHRlY2huaXF1ZTogaHR0cDovL3d3dy50ZXJhdGhvbi5jb20vbGVuZ3llbC9MZW5neWVsLU9ibGlxdWUucGRmXG4gICAgICAgIHRoaXMuI3JlZmxlY3RvclBsYW5lLnNldEZyb21Ob3JtYWxBbmRDb3BsYW5hclBvaW50KHRoaXMuI25vcm1hbCwgdGhpcy4jcmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG4gICAgICAgIHRoaXMuI3JlZmxlY3RvclBsYW5lLmFwcGx5TWF0cml4NCh0aGlzLiN2aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG4gICAgICAgIHRoaXMuI2NsaXBQbGFuZS5zZXQoXG4gICAgICAgICAgICB0aGlzLiNyZWZsZWN0b3JQbGFuZS5ub3JtYWwueCxcbiAgICAgICAgICAgIHRoaXMuI3JlZmxlY3RvclBsYW5lLm5vcm1hbC55LFxuICAgICAgICAgICAgdGhpcy4jcmVmbGVjdG9yUGxhbmUubm9ybWFsLnosXG4gICAgICAgICAgICB0aGlzLiNyZWZsZWN0b3JQbGFuZS5jb25zdGFudFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBwcm9qZWN0aW9uTWF0cml4ID0gdGhpcy4jdmlydHVhbENhbWVyYS5wcm9qZWN0aW9uTWF0cml4O1xuICAgICAgICB0aGlzLiNxLnggPSAoTWF0aC5zaWduKHRoaXMuI2NsaXBQbGFuZS54KSArIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbOF0pIC8gcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1swXTtcbiAgICAgICAgdGhpcy4jcS55ID0gKE1hdGguc2lnbih0aGlzLiNjbGlwUGxhbmUueSkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzldKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbNV07XG4gICAgICAgIHRoaXMuI3EueiA9IC0xLjA7XG4gICAgICAgIHRoaXMuI3EudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBzY2FsZWQgcGxhbmUgdmVjdG9yXG4gICAgICAgIHRoaXMuI2NsaXBQbGFuZS5tdWx0aXBseVNjYWxhcigyLjAgLyB0aGlzLiNjbGlwUGxhbmUuZG90KHRoaXMuI3EpKTtcbiAgICAgICAgLy8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG4gICAgICAgIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMl0gPSB0aGlzLiNjbGlwUGxhbmUueDtcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s2XSA9IHRoaXMuI2NsaXBQbGFuZS55O1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSA9IHRoaXMuI2NsaXBQbGFuZS56ICsgMS4wO1xuICAgICAgICBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XSA9IHRoaXMuI2NsaXBQbGFuZS53O1xuICAgIH1cbn1cbiJdfQ==
|
|
367
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25GLE9BQU8sRUFDTixNQUFNLEVBQ04sYUFBYSxFQUNiLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osY0FBYyxFQUNkLE1BQU0sRUFHTixXQUFXLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsRUFBRSxxQkFBcUIsRUFBRSxDQUFDLENBQUM7QUE0RGxDLE1BQU0sT0FBTyx5QkFBeUI7SUFrQnJDLElBQW9DLFdBQVcsQ0FBQyxVQUFrQjtRQUNqRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQUVELElBQWlDLFFBQVEsQ0FBQyxPQUFlO1FBQ3hELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBcUMsWUFBWSxDQUFDLFdBQW1CO1FBQ3BFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBOEIsS0FBSyxDQUFDLElBQStCO1FB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aUIsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQSwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3ROZ3RSZWYsXG5cdGluamVjdE5ndFN0b3JlLFxuXHROZ3RLZXksXG5cdE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsLFxuXHROZ3RSZW5kZXJTdGF0ZSxcblx0c2lnbmFsU3RvcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmx1clBhc3MsIE1lc2hSZWZsZWN0b3JNYXRlcmlhbCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9zaGFkZXJzJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcblxuZXh0ZW5kKHsgTWVzaFJlZmxlY3Rvck1hdGVyaWFsIH0pO1xuXG5leHBvcnQgdHlwZSBOZ3RzTWVzaFJlZmxlY3Rvck1hdGVyaWFsU3RhdGUgPSB7XG5cdHJlc29sdXRpb246IG51bWJlcjtcblx0bWl4Qmx1cjogbnVtYmVyO1xuXHRtaXhTdHJlbmd0aDogbnVtYmVyO1xuXHRibHVyOiBbbnVtYmVyLCBudW1iZXJdIHwgbnVtYmVyO1xuXHRtaXJyb3I6IG51bWJlcjtcblx0bWluRGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0bWF4RGVwdGhUaHJlc2hvbGQ6IG51bWJlcjtcblx0ZGVwdGhTY2FsZTogbnVtYmVyO1xuXHRkZXB0aFRvQmx1clJhdGlvQmlhczogbnVtYmVyO1xuXHRkaXN0b3J0aW9uTWFwPzogVEhSRUUuVGV4dHVyZTtcblx0ZGlzdG9ydGlvbjogbnVtYmVyO1xuXHRtaXhDb250cmFzdDogbnVtYmVyO1xuXHRyZWZsZWN0b3JPZmZzZXQ6IG51bWJlcjtcbn07XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LW1lc2gtc3RhbmRhcmQtbWF0ZXJpYWxcblx0XHQgKi9cblx0XHQnbmd0cy1tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc6IE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZSAmIE5ndE1lc2hTdGFuZGFyZE1hdGVyaWFsO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWxcblx0XHRcdCpuZ0lmPVwiZGVmaW5lcygpIGFzIGRlZmluZXNcIlxuXHRcdFx0W2tleV09XCJkZWZpbmVzXCJcblx0XHRcdG5ndENvbXBvdW5kXG5cdFx0XHRhdHRhY2g9XCJtYXRlcmlhbFwiXG5cdFx0XHRbcmVmXT1cIm1hdGVyaWFsUmVmXCJcblx0XHRcdFtkZWZpbmVzXT1cImRlZmluZXNcIlxuXHRcdFx0W21pcnJvcl09XCJtaXJyb3IoKVwiXG5cdFx0XHRbdGV4dHVyZU1hdHJpeF09XCJ0ZXh0dXJlTWF0cml4KClcIlxuXHRcdFx0W21peEJsdXJdPVwibWl4Qmx1cigpXCJcblx0XHRcdFt0RGlmZnVzZV09XCJ0RGlmZnVzZSgpXCJcblx0XHRcdFt0RGVwdGhdPVwidERlcHRoKClcIlxuXHRcdFx0W3REaWZmdXNlQmx1cl09XCJ0RGlmZnVzZUJsdXIoKVwiXG5cdFx0XHRbaGFzQmx1cl09XCJoYXNCbHVyKClcIlxuXHRcdFx0W21peFN0cmVuZ3RoXT1cIm1peFN0cmVuZ3RoKClcIlxuXHRcdFx0W21pbkRlcHRoVGhyZXNob2xkXT1cIm1pbkRlcHRoVGhyZXNob2xkKClcIlxuXHRcdFx0W21heERlcHRoVGhyZXNob2xkXT1cIm1heERlcHRoVGhyZXNob2xkKClcIlxuXHRcdFx0W2RlcHRoU2NhbGVdPVwiZGVwdGhTY2FsZSgpXCJcblx0XHRcdFtkZXB0aFRvQmx1clJhdGlvQmlhc109XCJkZXB0aFRvQmx1clJhdGlvQmlhcygpXCJcblx0XHRcdFtkaXN0b3J0aW9uXT1cImRpc3RvcnRpb24oKVwiXG5cdFx0XHRbZGlzdG9ydGlvbk1hcF09XCJkaXN0b3J0aW9uTWFwKClcIlxuXHRcdFx0W21peENvbnRyYXN0XT1cIm1peENvbnRyYXN0KClcIlxuXHRcdD5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWw+XG5cdGAsXG5cdGltcG9ydHM6IFtOZ0lmLCBOZ3RLZXldLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWwge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHNNZXNoUmVmbGVjdG9yTWF0ZXJpYWxTdGF0ZT4oe1xuXHRcdG1peEJsdXI6IDAsXG5cdFx0bWl4U3RyZW5ndGg6IDEsXG5cdFx0cmVzb2x1dGlvbjogMjU2LFxuXHRcdGJsdXI6IFswLCAwXSxcblx0XHRtaW5EZXB0aFRocmVzaG9sZDogMC45LFxuXHRcdG1heERlcHRoVGhyZXNob2xkOiAxLFxuXHRcdGRlcHRoU2NhbGU6IDAsXG5cdFx0ZGVwdGhUb0JsdXJSYXRpb0JpYXM6IDAuMjUsXG5cdFx0bWlycm9yOiAwLFxuXHRcdGRpc3RvcnRpb246IDEsXG5cdFx0bWl4Q29udHJhc3Q6IDEsXG5cdFx0cmVmbGVjdG9yT2Zmc2V0OiAwLFxuXHR9KTtcblxuXHRASW5wdXQoKSBtYXRlcmlhbFJlZiA9IGluamVjdE5ndFJlZjxNZXNoUmVmbGVjdG9yTWF0ZXJpYWw+KCk7XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZXNvbHV0aW9uJyB9KSBzZXQgX3Jlc29sdXRpb24ocmVzb2x1dGlvbjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVzb2x1dGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWl4Qmx1cicgfSkgc2V0IF9taXhCbHVyKG1peEJsdXI6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1peEJsdXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21peFN0cmVuZ3RoJyB9KSBzZXQgX21peFN0cmVuZ3RoKG1peFN0cmVuZ3RoOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtaXhTdHJlbmd0aCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnYmx1cicgfSkgc2V0IF9ibHVyKGJsdXI6IFtudW1iZXIsIG51bWJlcl0gfCBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBibHVyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtaXJyb3InIH0pIHNldCBfbWlycm9yKG1pcnJvcjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWlycm9yIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtaW5EZXB0aFRocmVzaG9sZCcgfSkgc2V0IF9taW5EZXB0aFRocmVzaG9sZChtaW5EZXB0aFRocmVzaG9sZDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbWluRGVwdGhUaHJlc2hvbGQgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ21heERlcHRoVGhyZXNob2xkJyB9KSBzZXQgX21heERlcHRoVGhyZXNob2xkKG1heERlcHRoVGhyZXNob2xkOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBtYXhEZXB0aFRocmVzaG9sZCB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZGVwdGhTY2FsZScgfSkgc2V0IF9kZXB0aFNjYWxlKGRlcHRoU2NhbGU6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRlcHRoU2NhbGUgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyB9KSBzZXQgX2RlcHRoVG9CbHVyUmF0aW9CaWFzKGRlcHRoVG9CbHVyUmF0aW9CaWFzOiBudW1iZXIpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkZXB0aFRvQmx1clJhdGlvQmlhcyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZGlzdG9ydGlvbk1hcCcgfSkgc2V0IF9kaXN0b3J0aW9uTWFwKGRpc3RvcnRpb25NYXA6IFRIUkVFLlRleHR1cmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBkaXN0b3J0aW9uTWFwIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkaXN0b3J0aW9uJyB9KSBzZXQgX2Rpc3RvcnRpb24oZGlzdG9ydGlvbjogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgZGlzdG9ydGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnbWl4Q29udHJhc3QnIH0pIHNldCBfbWl4Q29udHJhc3QobWl4Q29udHJhc3Q6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG1peENvbnRyYXN0IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZWZsZWN0b3JPZmZzZXQnIH0pIHNldCBfcmVmbGVjdG9yT2Zmc2V0KHJlZmxlY3Rvck9mZnNldDogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVmbGVjdG9yT2Zmc2V0IH0pO1xuXHR9XG5cblx0cHJpdmF0ZSByZWZsZWN0b3JQcm9wcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuc3RhdGVzKCkucmVmbGVjdG9yUHJvcHMpO1xuXHRkZWZpbmVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRlZmluZXMpO1xuXHRtaXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWlycm9yKTtcblx0dGV4dHVyZU1hdHJpeCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS50ZXh0dXJlTWF0cml4KTtcblx0bWl4Qmx1ciA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5taXhCbHVyKTtcblx0dERpZmZ1c2UgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERpZmZ1c2UpO1xuXHR0RGVwdGggPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkudERlcHRoKTtcblx0dERpZmZ1c2VCbHVyID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLnREaWZmdXNlQmx1cik7XG5cdGhhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuaGFzQmx1cik7XG5cdG1peFN0cmVuZ3RoID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLm1peFN0cmVuZ3RoKTtcblx0bWluRGVwdGhUaHJlc2hvbGQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWluRGVwdGhUaHJlc2hvbGQpO1xuXHRtYXhEZXB0aFRocmVzaG9sZCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5tYXhEZXB0aFRocmVzaG9sZCk7XG5cdGRlcHRoU2NhbGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkuZGVwdGhTY2FsZSk7XG5cdGRlcHRoVG9CbHVyUmF0aW9CaWFzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5yZWZsZWN0b3JQcm9wcygpLmRlcHRoVG9CbHVyUmF0aW9CaWFzKTtcblx0ZGlzdG9ydGlvbiA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uKTtcblx0ZGlzdG9ydGlvbk1hcCA9IGNvbXB1dGVkKCgpID0+IHRoaXMucmVmbGVjdG9yUHJvcHMoKS5kaXN0b3J0aW9uTWFwKTtcblx0bWl4Q29udHJhc3QgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnJlZmxlY3RvclByb3BzKCkubWl4Q29udHJhc3QpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cblx0cHJpdmF0ZSByZWZsZWN0b3JQbGFuZSA9IG5ldyBUSFJFRS5QbGFuZSgpO1xuXHRwcml2YXRlIG5vcm1hbCA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgcmVmbGVjdG9yV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgY2FtZXJhV29ybGRQb3NpdGlvbiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgcm90YXRpb25NYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXHRwcml2YXRlIGxvb2tBdFBvc2l0aW9uID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMCwgLTEpO1xuXHRwcml2YXRlIGNsaXBQbGFuZSA9IG5ldyBUSFJFRS5WZWN0b3I0KCk7XG5cdHByaXZhdGUgdmlldyA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5cdHByaXZhdGUgdGFyZ2V0ID0gbmV3IFRIUkVFLlZlY3RvcjMoKTtcblx0cHJpdmF0ZSBxID0gbmV3IFRIUkVFLlZlY3RvcjQoKTtcblx0cHJpdmF0ZSB2aXJ0dWFsQ2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKCk7XG5cdHByaXZhdGUgX3RleHR1cmVNYXRyaXggPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXG5cdHByaXZhdGUgX19ibHVyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdibHVyJyk7XG5cdHByaXZhdGUgX19yZXNvbHV0aW9uID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdyZXNvbHV0aW9uJyk7XG5cdHByaXZhdGUgX19taXJyb3IgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21pcnJvcicpO1xuXHRwcml2YXRlIF9fbWl4Qmx1ciA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWl4Qmx1cicpO1xuXHRwcml2YXRlIF9fbWl4U3RyZW5ndGggPSB0aGlzLmlucHV0cy5zZWxlY3QoJ21peFN0cmVuZ3RoJyk7XG5cdHByaXZhdGUgX19taW5EZXB0aFRocmVzaG9sZCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWluRGVwdGhUaHJlc2hvbGQnKTtcblx0cHJpdmF0ZSBfX21heERlcHRoVGhyZXNob2xkID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtYXhEZXB0aFRocmVzaG9sZCcpO1xuXHRwcml2YXRlIF9fZGVwdGhTY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnZGVwdGhTY2FsZScpO1xuXHRwcml2YXRlIF9fZGVwdGhUb0JsdXJSYXRpb0JpYXMgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2RlcHRoVG9CbHVyUmF0aW9CaWFzJyk7XG5cdHByaXZhdGUgX19kaXN0b3J0aW9uID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0b3J0aW9uJyk7XG5cdHByaXZhdGUgX19kaXN0b3J0aW9uTWFwID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXN0b3J0aW9uTWFwJyk7XG5cdHByaXZhdGUgX19taXhDb250cmFzdCA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnbWl4Q29udHJhc3QnKTtcblxuXHRwcml2YXRlIG5vcm1hbGl6ZWRCbHVyID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGJsdXIgPSB0aGlzLl9fYmx1cigpO1xuXHRcdHJldHVybiBBcnJheS5pc0FycmF5KGJsdXIpID8gYmx1ciA6IFtibHVyLCBibHVyXTtcblx0fSk7XG5cblx0cHJpdmF0ZSBfX2hhc0JsdXIgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3gsIHldID0gdGhpcy5ub3JtYWxpemVkQmx1cigpO1xuXHRcdHJldHVybiB4ICsgeSA+IDA7XG5cdH0pO1xuXG5cdHByaXZhdGUgc3RhdGVzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGdsID0gdGhpcy5nbCgpO1xuXHRcdGNvbnN0IHJlc29sdXRpb24gPSB0aGlzLl9fcmVzb2x1dGlvbigpO1xuXHRcdGNvbnN0IGJsdXIgPSB0aGlzLm5vcm1hbGl6ZWRCbHVyKCk7XG5cdFx0Y29uc3QgbWluRGVwdGhUaHJlc2hvbGQgPSB0aGlzLl9fbWluRGVwdGhUaHJlc2hvbGQoKTtcblx0XHRjb25zdCBtYXhEZXB0aFRocmVzaG9sZCA9IHRoaXMuX19tYXhEZXB0aFRocmVzaG9sZCgpO1xuXHRcdGNvbnN0IGRlcHRoU2NhbGUgPSB0aGlzLl9fZGVwdGhTY2FsZSgpO1xuXHRcdGNvbnN0IGRlcHRoVG9CbHVyUmF0aW9CaWFzID0gdGhpcy5fX2RlcHRoVG9CbHVyUmF0aW9CaWFzKCk7XG5cdFx0Y29uc3QgbWlycm9yID0gdGhpcy5fX21pcnJvcigpO1xuXHRcdGNvbnN0IG1peEJsdXIgPSB0aGlzLl9fbWl4Qmx1cigpO1xuXHRcdGNvbnN0IG1peFN0cmVuZ3RoID0gdGhpcy5fX21peFN0cmVuZ3RoKCk7XG5cdFx0Y29uc3QgbWl4Q29udHJhc3QgPSB0aGlzLl9fbWl4Q29udHJhc3QoKTtcblx0XHRjb25zdCBkaXN0b3J0aW9uID0gdGhpcy5fX2Rpc3RvcnRpb24oKTtcblx0XHRjb25zdCBkaXN0b3J0aW9uTWFwID0gdGhpcy5fX2Rpc3RvcnRpb25NYXAoKTtcblx0XHRjb25zdCBoYXNCbHVyID0gdGhpcy5fX2hhc0JsdXIoKTtcblxuXHRcdGNvbnN0IHBhcmFtZXRlcnMgPSB7XG5cdFx0XHRtaW5GaWx0ZXI6IFRIUkVFLkxpbmVhckZpbHRlcixcblx0XHRcdG1hZ0ZpbHRlcjogVEhSRUUuTGluZWFyRmlsdGVyLFxuXHRcdFx0dHlwZTogVEhSRUUuSGFsZkZsb2F0VHlwZSxcblx0XHR9O1xuXHRcdGNvbnN0IGZibzEgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0ZmJvMS5kZXB0aEJ1ZmZlciA9IHRydWU7XG5cdFx0ZmJvMS5kZXB0aFRleHR1cmUgPSBuZXcgVEhSRUUuRGVwdGhUZXh0dXJlKHJlc29sdXRpb24sIHJlc29sdXRpb24pO1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLmZvcm1hdCA9IFRIUkVFLkRlcHRoRm9ybWF0O1xuXHRcdGZibzEuZGVwdGhUZXh0dXJlLnR5cGUgPSBUSFJFRS5VbnNpZ25lZFNob3J0VHlwZTtcblxuXHRcdGNvbnN0IGZibzIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJUYXJnZXQocmVzb2x1dGlvbiwgcmVzb2x1dGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgYmx1clBhc3MgPSBuZXcgQmx1clBhc3Moe1xuXHRcdFx0Z2wsXG5cdFx0XHRyZXNvbHV0aW9uLFxuXHRcdFx0d2lkdGg6IGJsdXJbMF0sXG5cdFx0XHRoZWlnaHQ6IGJsdXJbMV0sXG5cdFx0XHRtaW5EZXB0aFRocmVzaG9sZCxcblx0XHRcdG1heERlcHRoVGhyZXNob2xkLFxuXHRcdFx0ZGVwdGhTY2FsZSxcblx0XHRcdGRlcHRoVG9CbHVyUmF0aW9CaWFzLFxuXHRcdH0pO1xuXHRcdGNvbnN0IHJlZmxlY3RvclByb3BzID0ge1xuXHRcdFx0bWlycm9yLFxuXHRcdFx0dGV4dHVyZU1hdHJpeDogdGhpcy5fdGV4dHVyZU1hdHJpeCxcblx0XHRcdG1peEJsdXIsXG5cdFx0XHR0RGlmZnVzZTogZmJvMS50ZXh0dXJlLFxuXHRcdFx0dERlcHRoOiBmYm8xLmRlcHRoVGV4dHVyZSxcblx0XHRcdHREaWZmdXNlQmx1cjogZmJvMi50ZXh0dXJlLFxuXHRcdFx0aGFzQmx1cixcblx0XHRcdG1peFN0cmVuZ3RoLFxuXHRcdFx0bWluRGVwdGhUaHJlc2hvbGQsXG5cdFx0XHRtYXhEZXB0aFRocmVzaG9sZCxcblx0XHRcdGRlcHRoU2NhbGUsXG5cdFx0XHRkZXB0aFRvQmx1clJhdGlvQmlhcyxcblx0XHRcdGRpc3RvcnRpb24sXG5cdFx0XHRkaXN0b3J0aW9uTWFwLFxuXHRcdFx0bWl4Q29udHJhc3QsXG5cdFx0XHRkZWZpbmVzOiB7XG5cdFx0XHRcdFVTRV9CTFVSOiBoYXNCbHVyID8gJycgOiB1bmRlZmluZWQsXG5cdFx0XHRcdFVTRV9ERVBUSDogZGVwdGhTY2FsZSA+IDAgPyAnJyA6IHVuZGVmaW5lZCxcblx0XHRcdFx0VVNFX0RJU1RPUlRJT046IGRpc3RvcnRpb25NYXAgPyAnJyA6IHVuZGVmaW5lZCxcblx0XHRcdH0sXG5cdFx0fTtcblxuXHRcdHJldHVybiB7IGZibzEsIGZibzIsIGJsdXJQYXNzLCByZWZsZWN0b3JQcm9wcyB9O1xuXHR9KTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRpbmplY3RCZWZvcmVSZW5kZXIodGhpcy5vbkJlZm9yZVJlbmRlci5iaW5kKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgb25CZWZvcmVSZW5kZXIoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpIHJldHVybjtcblx0XHRjb25zdCBwYXJlbnQgPSBnZXRMb2NhbFN0YXRlKHRoaXMubWF0ZXJpYWxSZWYubmF0aXZlRWxlbWVudCkucGFyZW50Py4oKTtcblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgeyBnbCwgc2NlbmUgfSA9IHN0YXRlO1xuXHRcdGNvbnN0IGhhc0JsdXIgPSB0aGlzLl9faGFzQmx1cigpO1xuXHRcdGNvbnN0IHsgZmJvMSwgZmJvMiwgYmx1clBhc3MgfSA9IHRoaXMuc3RhdGVzKCk7XG5cblx0XHRpZiAoZmJvMSAmJiBmYm8yICYmIGJsdXJQYXNzKSB7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgY3VycmVudFhyRW5hYmxlZCA9IGdsLnhyLmVuYWJsZWQ7XG5cdFx0XHRjb25zdCBjdXJyZW50U2hhZG93QXV0b1VwZGF0ZSA9IGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlO1xuXHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoc3RhdGUpO1xuXHRcdFx0Z2wueHIuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0Z2wuc2hhZG93TWFwLmF1dG9VcGRhdGUgPSBmYWxzZTtcblx0XHRcdGdsLnNldFJlbmRlclRhcmdldChmYm8xKTtcblx0XHRcdGdsLnN0YXRlLmJ1ZmZlcnMuZGVwdGguc2V0TWFzayh0cnVlKTtcblx0XHRcdGlmICghZ2wuYXV0b0NsZWFyKSBnbC5jbGVhcigpO1xuXHRcdFx0Z2wucmVuZGVyKHNjZW5lLCB0aGlzLnZpcnR1YWxDYW1lcmEpO1xuXHRcdFx0aWYgKGhhc0JsdXIpIGJsdXJQYXNzLnJlbmRlcihnbCwgZmJvMSwgZmJvMik7XG5cdFx0XHRnbC54ci5lbmFibGVkID0gY3VycmVudFhyRW5hYmxlZDtcblx0XHRcdGdsLnNoYWRvd01hcC5hdXRvVXBkYXRlID0gY3VycmVudFNoYWRvd0F1dG9VcGRhdGU7XG5cdFx0XHRwYXJlbnQudmlzaWJsZSA9IHRydWU7XG5cdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQobnVsbCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBiZWZvcmVSZW5kZXIoc3RhdGU6IE5ndFJlbmRlclN0YXRlKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gZ2V0TG9jYWxTdGF0ZSh0aGlzLm1hdGVyaWFsUmVmLm5hdGl2ZUVsZW1lbnQpLnBhcmVudD8uKCk7XG5cdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdGNvbnN0IHsgY2FtZXJhIH0gPSBzdGF0ZTtcblxuXHRcdHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKGNhbWVyYS5tYXRyaXhXb3JsZCk7XG5cdFx0dGhpcy5yb3RhdGlvbk1hdHJpeC5leHRyYWN0Um90YXRpb24ocGFyZW50Lm1hdHJpeFdvcmxkKTtcblx0XHR0aGlzLm5vcm1hbC5zZXQoMCwgMCwgMSk7XG5cdFx0dGhpcy5ub3JtYWwuYXBwbHlNYXRyaXg0KHRoaXMucm90YXRpb25NYXRyaXgpO1xuXHRcdHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbi5hZGRTY2FsZWRWZWN0b3IodGhpcy5ub3JtYWwsIHRoaXMuaW5wdXRzLmdldCgncmVmbGVjdG9yT2Zmc2V0JykpO1xuXHRcdHRoaXMudmlldy5zdWJWZWN0b3JzKHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbiwgdGhpcy5jYW1lcmFXb3JsZFBvc2l0aW9uKTtcblx0XHQvLyBBdm9pZCByZW5kZXJpbmcgd2hlbiByZWZsZWN0b3IgaXMgZmFjaW5nIGF3YXlcblx0XHRpZiAodGhpcy52aWV3LmRvdCh0aGlzLm5vcm1hbCkgPiAwKSByZXR1cm47XG5cdFx0dGhpcy52aWV3LnJlZmxlY3QodGhpcy5ub3JtYWwpLm5lZ2F0ZSgpO1xuXHRcdHRoaXMudmlldy5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnJvdGF0aW9uTWF0cml4LmV4dHJhY3RSb3RhdGlvbihjYW1lcmEubWF0cml4V29ybGQpO1xuXHRcdHRoaXMubG9va0F0UG9zaXRpb24uc2V0KDAsIDAsIC0xKTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLmxvb2tBdFBvc2l0aW9uLmFkZCh0aGlzLmNhbWVyYVdvcmxkUG9zaXRpb24pO1xuXHRcdHRoaXMudGFyZ2V0LnN1YlZlY3RvcnModGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uLCB0aGlzLmxvb2tBdFBvc2l0aW9uKTtcblx0XHR0aGlzLnRhcmdldC5yZWZsZWN0KHRoaXMubm9ybWFsKS5uZWdhdGUoKTtcblx0XHR0aGlzLnRhcmdldC5hZGQodGhpcy5yZWZsZWN0b3JXb3JsZFBvc2l0aW9uKTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEucG9zaXRpb24uY29weSh0aGlzLnZpZXcpO1xuXHRcdHRoaXMudmlydHVhbENhbWVyYS51cC5zZXQoMCwgMSwgMCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwLmFwcGx5TWF0cml4NCh0aGlzLnJvdGF0aW9uTWF0cml4KTtcblx0XHR0aGlzLnZpcnR1YWxDYW1lcmEudXAucmVmbGVjdCh0aGlzLm5vcm1hbCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmxvb2tBdCh0aGlzLnRhcmdldCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLmZhciA9IGNhbWVyYS5mYXI7IC8vIFVzZWQgaW4gV2ViR0xCYWNrZ3JvdW5kXG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0dGhpcy52aXJ0dWFsQ2FtZXJhLnByb2plY3Rpb25NYXRyaXguY29weShjYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0Ly8gVXBkYXRlIHRoZSB0ZXh0dXJlIG1hdHJpeFxuXHRcdHRoaXMuX3RleHR1cmVNYXRyaXguc2V0KDAuNSwgMC4wLCAwLjAsIDAuNSwgMC4wLCAwLjUsIDAuMCwgMC41LCAwLjAsIDAuMCwgMC41LCAwLjUsIDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5cdFx0dGhpcy5fdGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeCk7XG5cdFx0dGhpcy5fdGV4dHVyZU1hdHJpeC5tdWx0aXBseSh0aGlzLnZpcnR1YWxDYW1lcmEubWF0cml4V29ybGRJbnZlcnNlKTtcblx0XHR0aGlzLl90ZXh0dXJlTWF0cml4Lm11bHRpcGx5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0Ly8gTm93IHVwZGF0ZSBwcm9qZWN0aW9uIG1hdHJpeCB3aXRoIG5ldyBjbGlwIHBsYW5lLCBpbXBsZW1lbnRpbmcgY29kZSBmcm9tOiBodHRwOi8vd3d3LnRlcmF0aG9uLmNvbS9jb2RlL29ibGlxdWUuaHRtbFxuXHRcdC8vIFBhcGVyIGV4cGxhaW5pbmcgdGhpcyB0ZWNobmlxdWU6IGh0dHA6Ly93d3cudGVyYXRob24uY29tL2xlbmd5ZWwvTGVuZ3llbC1PYmxpcXVlLnBkZlxuXHRcdHRoaXMucmVmbGVjdG9yUGxhbmUuc2V0RnJvbU5vcm1hbEFuZENvcGxhbmFyUG9pbnQodGhpcy5ub3JtYWwsIHRoaXMucmVmbGVjdG9yV29ybGRQb3NpdGlvbik7XG5cdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5hcHBseU1hdHJpeDQodGhpcy52aXJ0dWFsQ2FtZXJhLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG5cdFx0dGhpcy5jbGlwUGxhbmUuc2V0KFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5ub3JtYWwueCxcblx0XHRcdHRoaXMucmVmbGVjdG9yUGxhbmUubm9ybWFsLnksXG5cdFx0XHR0aGlzLnJlZmxlY3RvclBsYW5lLm5vcm1hbC56LFxuXHRcdFx0dGhpcy5yZWZsZWN0b3JQbGFuZS5jb25zdGFudCxcblx0XHQpO1xuXHRcdGNvbnN0IHByb2plY3Rpb25NYXRyaXggPSB0aGlzLnZpcnR1YWxDYW1lcmEucHJvamVjdGlvbk1hdHJpeDtcblx0XHR0aGlzLnEueCA9IChNYXRoLnNpZ24odGhpcy5jbGlwUGxhbmUueCkgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzhdKSAvIHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMF07XG5cdFx0dGhpcy5xLnkgPSAoTWF0aC5zaWduKHRoaXMuY2xpcFBsYW5lLnkpICsgcHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s5XSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzVdO1xuXHRcdHRoaXMucS56ID0gLTEuMDtcblx0XHR0aGlzLnEudyA9ICgxLjAgKyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzEwXSkgLyBwcm9qZWN0aW9uTWF0cml4LmVsZW1lbnRzWzE0XTtcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHNjYWxlZCBwbGFuZSB2ZWN0b3Jcblx0XHR0aGlzLmNsaXBQbGFuZS5tdWx0aXBseVNjYWxhcigyLjAgLyB0aGlzLmNsaXBQbGFuZS5kb3QodGhpcy5xKSk7XG5cdFx0Ly8gUmVwbGFjaW5nIHRoZSB0aGlyZCByb3cgb2YgdGhlIHByb2plY3Rpb24gbWF0cml4XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1syXSA9IHRoaXMuY2xpcFBsYW5lLng7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1s2XSA9IHRoaXMuY2xpcFBsYW5lLnk7XG5cdFx0cHJvamVjdGlvbk1hdHJpeC5lbGVtZW50c1sxMF0gPSB0aGlzLmNsaXBQbGFuZS56ICsgMS4wO1xuXHRcdHByb2plY3Rpb25NYXRyaXguZWxlbWVudHNbMTRdID0gdGhpcy5jbGlwUGxhbmUudztcblx0fVxufVxuIl19
|