angular-three-postprocessing 2.0.0-beta.7 → 2.0.0-beta.9
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/esm2022/index.mjs +4 -3
- package/esm2022/lib/effect-composer.mjs +248 -0
- package/esm2022/lib/effect.mjs +78 -0
- package/esm2022/lib/effects/bloom/bloom.mjs +33 -0
- package/esm2022/lib/effects/brightness-contrast/brightness-contrast.mjs +29 -0
- package/esm2022/lib/effects/color-depth/color-depth.mjs +29 -0
- package/esm2022/lib/effects/depth/depth.mjs +29 -0
- package/esm2022/lib/effects/dot-screen/dot-screen.mjs +29 -0
- package/esm2022/lib/effects/hue-saturation/hue-saturation.mjs +29 -0
- package/esm2022/lib/effects/index.mjs +18 -0
- package/esm2022/lib/effects/lut/lut.mjs +70 -0
- package/esm2022/lib/effects/noise/noise.mjs +33 -0
- package/esm2022/lib/effects/pixelation/pixelation.mjs +33 -0
- package/esm2022/lib/effects/scanline/scanline.mjs +33 -0
- package/esm2022/lib/effects/sepia/sepia.mjs +29 -0
- package/esm2022/lib/effects/shock-wave/shock-wave.mjs +29 -0
- package/esm2022/lib/effects/smaa/smaa.mjs +29 -0
- package/esm2022/lib/effects/ssao/ssao.mjs +213 -0
- package/esm2022/lib/effects/tilt-shift/tilt-shift.mjs +33 -0
- package/esm2022/lib/effects/tone-mapping/tone-mapping.mjs +29 -0
- package/esm2022/lib/effects/vignette/vignette.mjs +29 -0
- package/fesm2022/angular-three-postprocessing.mjs +868 -206
- package/fesm2022/angular-three-postprocessing.mjs.map +1 -1
- package/index.d.ts +3 -2
- package/lib/effect-composer.d.ts +100 -0
- package/lib/effect.d.ts +27 -0
- package/{effects → lib/effects}/bloom/bloom.d.ts +7 -2
- package/{effects → lib/effects}/brightness-contrast/brightness-contrast.d.ts +9 -1
- package/{effects → lib/effects}/color-depth/color-depth.d.ts +8 -1
- package/{effects → lib/effects}/depth/depth.d.ts +8 -1
- package/{effects → lib/effects}/dot-screen/dot-screen.d.ts +9 -1
- package/{effects → lib/effects}/hue-saturation/hue-saturation.d.ts +9 -1
- package/{effects → lib/effects}/index.d.ts +1 -0
- package/lib/effects/lut/lut.d.ts +29 -0
- package/{effects → lib/effects}/noise/noise.d.ts +8 -1
- package/lib/effects/pixelation/pixelation.d.ts +20 -0
- package/{effects → lib/effects}/scanline/scanline.d.ts +8 -1
- package/{effects → lib/effects}/sepia/sepia.d.ts +8 -1
- package/lib/effects/shock-wave/shock-wave.d.ts +17 -0
- package/lib/effects/smaa/smaa.d.ts +16 -0
- package/lib/effects/ssao/ssao.d.ts +42 -0
- package/lib/effects/tilt-shift/tilt-shift.d.ts +23 -0
- package/lib/effects/tone-mapping/tone-mapping.d.ts +22 -0
- package/lib/effects/vignette/vignette.d.ts +17 -0
- package/package.json +3 -14
- package/effect-composer.d.ts +0 -53
- package/effect.d.ts +0 -24
- package/effects/README.md +0 -3
- package/effects/lut/lut.d.ts +0 -19
- package/effects/shock-wave/shock-wave.d.ts +0 -7
- package/effects/smaa/smaa.d.ts +0 -7
- package/effects/ssao/ssao.d.ts +0 -38
- package/effects/tilt-shift/tilt-shift.d.ts +0 -8
- package/effects/tone-mapping/tone-mapping.d.ts +0 -7
- package/effects/vignette/vignette.d.ts +0 -7
- package/esm2022/effect-composer.mjs +0 -242
- package/esm2022/effect.mjs +0 -79
- package/esm2022/effects/angular-three-postprocessing-effects.mjs +0 -5
- package/esm2022/effects/bloom/bloom.mjs +0 -34
- package/esm2022/effects/brightness-contrast/brightness-contrast.mjs +0 -30
- package/esm2022/effects/color-depth/color-depth.mjs +0 -30
- package/esm2022/effects/depth/depth.mjs +0 -30
- package/esm2022/effects/dot-screen/dot-screen.mjs +0 -30
- package/esm2022/effects/hue-saturation/hue-saturation.mjs +0 -30
- package/esm2022/effects/index.mjs +0 -17
- package/esm2022/effects/lut/lut.mjs +0 -77
- package/esm2022/effects/noise/noise.mjs +0 -34
- package/esm2022/effects/scanline/scanline.mjs +0 -34
- package/esm2022/effects/sepia/sepia.mjs +0 -30
- package/esm2022/effects/shock-wave/shock-wave.mjs +0 -30
- package/esm2022/effects/smaa/smaa.mjs +0 -30
- package/esm2022/effects/ssao/ssao.mjs +0 -187
- package/esm2022/effects/tilt-shift/tilt-shift.mjs +0 -34
- package/esm2022/effects/tone-mapping/tone-mapping.mjs +0 -30
- package/esm2022/effects/vignette/vignette.mjs +0 -30
- package/fesm2022/angular-three-postprocessing-effects.mjs +0 -617
- package/fesm2022/angular-three-postprocessing-effects.mjs.map +0 -1
- package/plugin/README.md +0 -11
- package/plugin/generators.json +0 -19
- 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 -4
- package/plugin/src/generators/init/init.js +0 -22
- 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
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { BlendFunction, SSAOEffect } from 'postprocessing';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export type NgtpSSAOState = NonNullable<ConstructorParameters<typeof SSAOEffect>[2]>;
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'ngtp-SSAO': NgtpSSAOState;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export declare class NgtpSSAO {
|
|
10
|
+
private inputs;
|
|
11
|
+
effectRef: import("angular-three").NgtInjectedRef<SSAOEffect>;
|
|
12
|
+
set _blendFunction(blendFunction: BlendFunction);
|
|
13
|
+
set _distanceScaling(distanceScaling: boolean);
|
|
14
|
+
set _depthAwareUpsampling(depthAwareUpsampling: boolean);
|
|
15
|
+
set _normalDepthBuffer(normalDepthBuffer: THREE.Texture);
|
|
16
|
+
set _samples(samples: number);
|
|
17
|
+
set _rings(rings: number);
|
|
18
|
+
set _worldDistanceThreshold(worldDistanceThreshold: number);
|
|
19
|
+
set _worldDistanceFalloff(worldDistanceFalloff: number);
|
|
20
|
+
set _worldProximityThreshold(worldProximityThreshold: number);
|
|
21
|
+
set _worldProximityFalloff(worldProximityFalloff: number);
|
|
22
|
+
set _distanceThreshold(distanceThreshold: number);
|
|
23
|
+
set _distanceFalloff(distanceFalloff: number);
|
|
24
|
+
set _rangeThreshold(rangeThreshold: number);
|
|
25
|
+
set _rangeFalloff(rangeFalloff: number);
|
|
26
|
+
set _minRadiusScale(minRadiusScale: number);
|
|
27
|
+
set _luminanceInfluence(luminanceInfluence: number);
|
|
28
|
+
set _radius(radius: number);
|
|
29
|
+
set _intensity(intensity: number);
|
|
30
|
+
set _bias(bias: number);
|
|
31
|
+
set _fade(fade: number);
|
|
32
|
+
set _color(color: THREE.Color);
|
|
33
|
+
set _resolutionScale(resolutionScale: number);
|
|
34
|
+
set _resolutionX(resolutionX: number);
|
|
35
|
+
set _resolutionY(resolutionY: number);
|
|
36
|
+
set _width(width: number);
|
|
37
|
+
set _height(height: number);
|
|
38
|
+
private effectComposerApi;
|
|
39
|
+
effect: import("@angular/core").Signal<SSAOEffect | null>;
|
|
40
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpSSAO, never>;
|
|
41
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpSSAO, "ngtp-SSAO", never, { "effectRef": { "alias": "effectRef"; "required": false; }; "_blendFunction": { "alias": "blendFunction"; "required": false; }; "_distanceScaling": { "alias": "distanceScaling"; "required": false; }; "_depthAwareUpsampling": { "alias": "depthAwareUpsampling"; "required": false; }; "_normalDepthBuffer": { "alias": "normalDepthBuffer"; "required": false; }; "_samples": { "alias": "samples"; "required": false; }; "_rings": { "alias": "rings"; "required": false; }; "_worldDistanceThreshold": { "alias": "worldDistanceThreshold"; "required": false; }; "_worldDistanceFalloff": { "alias": "worldDistanceFalloff"; "required": false; }; "_worldProximityThreshold": { "alias": "worldProximityThreshold"; "required": false; }; "_worldProximityFalloff": { "alias": "worldProximityFalloff"; "required": false; }; "_distanceThreshold": { "alias": "distanceThreshold"; "required": false; }; "_distanceFalloff": { "alias": "distanceFalloff"; "required": false; }; "_rangeThreshold": { "alias": "rangeThreshold"; "required": false; }; "_rangeFalloff": { "alias": "rangeFalloff"; "required": false; }; "_minRadiusScale": { "alias": "minRadiusScale"; "required": false; }; "_luminanceInfluence": { "alias": "luminanceInfluence"; "required": false; }; "_radius": { "alias": "radius"; "required": false; }; "_intensity": { "alias": "intensity"; "required": false; }; "_bias": { "alias": "bias"; "required": false; }; "_fade": { "alias": "fade"; "required": false; }; "_color": { "alias": "color"; "required": false; }; "_resolutionScale": { "alias": "resolutionScale"; "required": false; }; "_resolutionX": { "alias": "resolutionX"; "required": false; }; "_resolutionY": { "alias": "resolutionY"; "required": false; }; "_width": { "alias": "width"; "required": false; }; "_height": { "alias": "height"; "required": false; }; }, {}, never, never, true, never>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { BlendFunction, KernelSize, TiltShiftEffect } from 'postprocessing';
|
|
2
|
+
import { NgtpEffect, type NgtpEffectState } from '../../effect';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'ngtp-tilt-shift': {
|
|
7
|
+
offset?: number;
|
|
8
|
+
rotation?: number;
|
|
9
|
+
focusArea?: number;
|
|
10
|
+
feather?: number;
|
|
11
|
+
bias?: number;
|
|
12
|
+
kernelSize?: KernelSize;
|
|
13
|
+
resolutionScale?: number;
|
|
14
|
+
resolutionX?: number;
|
|
15
|
+
resolutionY?: number;
|
|
16
|
+
} & NgtpEffectState;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export declare class NgtpTiltShift extends NgtpEffect<TiltShiftEffect> {
|
|
20
|
+
defaultBlendFunction: BlendFunction;
|
|
21
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpTiltShift, never>;
|
|
22
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpTiltShift, "ngtp-tilt-shift", never, {}, {}, never, ["*"], true, never>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ToneMappingEffect, ToneMappingMode } from 'postprocessing';
|
|
2
|
+
import { NgtpEffect, type NgtpEffectState } from '../../effect';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'ngtp-tone-mapping': {
|
|
7
|
+
adaptive?: boolean;
|
|
8
|
+
mode?: ToneMappingMode;
|
|
9
|
+
resolution?: number;
|
|
10
|
+
maxLuminance?: number;
|
|
11
|
+
whitePoint?: number;
|
|
12
|
+
middleGrey?: number;
|
|
13
|
+
minLuminance?: number;
|
|
14
|
+
averageLuminance?: number;
|
|
15
|
+
adaptationRate?: number;
|
|
16
|
+
} & NgtpEffectState;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export declare class NgtpToneMapping extends NgtpEffect<ToneMappingEffect> {
|
|
20
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpToneMapping, never>;
|
|
21
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpToneMapping, "ngtp-tone-mapping", never, {}, {}, never, ["*"], true, never>;
|
|
22
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { VignetteEffect, VignetteTechnique } from 'postprocessing';
|
|
2
|
+
import { NgtpEffect, type NgtpEffectState } from '../../effect';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
declare global {
|
|
5
|
+
interface HTMLElementTagNameMap {
|
|
6
|
+
'ngtp-vignette': {
|
|
7
|
+
technique?: VignetteTechnique;
|
|
8
|
+
eskil?: boolean;
|
|
9
|
+
offset?: number;
|
|
10
|
+
darkness?: number;
|
|
11
|
+
} & NgtpEffectState;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export declare class NgtpVignette extends NgtpEffect<VignetteEffect> {
|
|
15
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpVignette, never>;
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpVignette, "ngtp-vignette", never, {}, {}, never, ["*"], true, never>;
|
|
17
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "angular-three-postprocessing",
|
|
3
|
-
"version": "2.0.0-beta.
|
|
3
|
+
"version": "2.0.0-beta.9",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -26,17 +26,12 @@
|
|
|
26
26
|
"@angular/core": " ^16.0.0",
|
|
27
27
|
"angular-three": "^2.0.0",
|
|
28
28
|
"postprocessing": "^6.0.0",
|
|
29
|
-
"three": "
|
|
30
|
-
"three-stdlib": "2.23.4"
|
|
29
|
+
"three": ">=0.148.0"
|
|
31
30
|
},
|
|
32
31
|
"dependencies": {
|
|
33
|
-
"tslib": "^2.3.0"
|
|
34
|
-
"@nx/devkit": "^16.0.0",
|
|
35
|
-
"nx": "^16.0.0"
|
|
32
|
+
"tslib": "^2.3.0"
|
|
36
33
|
},
|
|
37
34
|
"sideEffects": false,
|
|
38
|
-
"generators": "./plugin/generators.json",
|
|
39
|
-
"schematics": "./plugin/generators.json",
|
|
40
35
|
"module": "fesm2022/angular-three-postprocessing.mjs",
|
|
41
36
|
"typings": "index.d.ts",
|
|
42
37
|
"exports": {
|
|
@@ -48,12 +43,6 @@
|
|
|
48
43
|
"esm2022": "./esm2022/angular-three-postprocessing.mjs",
|
|
49
44
|
"esm": "./esm2022/angular-three-postprocessing.mjs",
|
|
50
45
|
"default": "./fesm2022/angular-three-postprocessing.mjs"
|
|
51
|
-
},
|
|
52
|
-
"./effects": {
|
|
53
|
-
"types": "./effects/index.d.ts",
|
|
54
|
-
"esm2022": "./esm2022/effects/angular-three-postprocessing-effects.mjs",
|
|
55
|
-
"esm": "./esm2022/effects/angular-three-postprocessing-effects.mjs",
|
|
56
|
-
"default": "./fesm2022/angular-three-postprocessing-effects.mjs"
|
|
57
46
|
}
|
|
58
47
|
}
|
|
59
48
|
}
|
package/effect-composer.d.ts
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { InjectionToken, Signal } from '@angular/core';
|
|
2
|
-
import { NgtSignalStore } from 'angular-three';
|
|
3
|
-
import { DepthDownsamplingPass, EffectComposer, NormalPass } from 'postprocessing';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
export interface NgtpEffectComposerState {
|
|
7
|
-
enabled: boolean;
|
|
8
|
-
depthBuffer?: boolean;
|
|
9
|
-
disableNormalPass?: boolean;
|
|
10
|
-
stencilBuffer?: boolean;
|
|
11
|
-
autoClear: boolean;
|
|
12
|
-
resolutionScale?: number;
|
|
13
|
-
multisampling: number;
|
|
14
|
-
frameBufferType: THREE.TextureDataType;
|
|
15
|
-
renderPriority: number;
|
|
16
|
-
camera?: THREE.Camera;
|
|
17
|
-
scene?: THREE.Scene;
|
|
18
|
-
}
|
|
19
|
-
export interface NgtpEffectComposerApi {
|
|
20
|
-
composer: EffectComposer;
|
|
21
|
-
normalPass: NormalPass | null;
|
|
22
|
-
downSamplingPass: DepthDownsamplingPass | null;
|
|
23
|
-
camera: THREE.Camera;
|
|
24
|
-
scene: THREE.Scene;
|
|
25
|
-
resolutionScale?: number;
|
|
26
|
-
}
|
|
27
|
-
export declare const NGTP_EFFECT_COMPOSER_API: InjectionToken<Signal<NgtpEffectComposerApi>>;
|
|
28
|
-
export declare class NgtpEffectComposer extends NgtSignalStore<NgtpEffectComposerState> {
|
|
29
|
-
#private;
|
|
30
|
-
readonly composerRef: import("angular-three").NgtInjectedRef<THREE.Group>;
|
|
31
|
-
set enabled(enabled: boolean);
|
|
32
|
-
set depthBuffer(depthBuffer: boolean);
|
|
33
|
-
set disableNormalPass(disableNormalPass: boolean);
|
|
34
|
-
set stencilBuffer(stencilBuffer: boolean);
|
|
35
|
-
set autoClear(autoClear: boolean);
|
|
36
|
-
set resolutionScale(resolutionScale: number);
|
|
37
|
-
set multisampling(multisampling: number);
|
|
38
|
-
set frameBufferType(frameBufferType: THREE.TextureDataType);
|
|
39
|
-
set renderPriority(renderPriority: number);
|
|
40
|
-
set camera(camera: THREE.Camera);
|
|
41
|
-
set scene(scene: THREE.Scene);
|
|
42
|
-
readonly api: Signal<{
|
|
43
|
-
composer: EffectComposer;
|
|
44
|
-
normalPass: NormalPass | null;
|
|
45
|
-
downSamplingPass: DepthDownsamplingPass | null;
|
|
46
|
-
resolutionScale: number | undefined;
|
|
47
|
-
camera: THREE.Camera;
|
|
48
|
-
scene: THREE.Scene;
|
|
49
|
-
}>;
|
|
50
|
-
constructor();
|
|
51
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpEffectComposer, never>;
|
|
52
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpEffectComposer, "ngtp-effect-composer", never, { "enabled": { "alias": "enabled"; "required": false; }; "depthBuffer": { "alias": "depthBuffer"; "required": false; }; "disableNormalPass": { "alias": "disableNormalPass"; "required": false; }; "stencilBuffer": { "alias": "stencilBuffer"; "required": false; }; "autoClear": { "alias": "autoClear"; "required": false; }; "resolutionScale": { "alias": "resolutionScale"; "required": false; }; "multisampling": { "alias": "multisampling"; "required": false; }; "frameBufferType": { "alias": "frameBufferType"; "required": false; }; "renderPriority": { "alias": "renderPriority"; "required": false; }; "camera": { "alias": "camera"; "required": false; }; "scene": { "alias": "scene"; "required": false; }; }, {}, never, ["*"], true, never>;
|
|
53
|
-
}
|
package/effect.d.ts
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { NgtSignalStore, NgtStore } from 'angular-three';
|
|
2
|
-
import { BlendFunction, Effect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare abstract class NgtpEffect<T extends Effect> extends NgtSignalStore<{
|
|
5
|
-
blendFunction?: BlendFunction;
|
|
6
|
-
opacity?: number;
|
|
7
|
-
}> {
|
|
8
|
-
#private;
|
|
9
|
-
effectRef: import("angular-three").NgtInjectedRef<T>;
|
|
10
|
-
set blendFunction(blendFunction: BlendFunction);
|
|
11
|
-
set opacity(opacity: number);
|
|
12
|
-
protected defaultBlendFunction: BlendFunction;
|
|
13
|
-
protected nativeArgs: () => never[];
|
|
14
|
-
readonly effectBlendFunction: import("@angular/core").Signal<BlendFunction | undefined>;
|
|
15
|
-
readonly effectOpacity: import("@angular/core").Signal<number | undefined>;
|
|
16
|
-
protected readonly store: NgtStore;
|
|
17
|
-
protected readonly camera: import("@angular/core").Signal<import("angular-three").NgtCameraManual>;
|
|
18
|
-
protected readonly args: import("@angular/core").Signal<{
|
|
19
|
-
[x: string]: any;
|
|
20
|
-
}[]>;
|
|
21
|
-
constructor();
|
|
22
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpEffect<any>, never>;
|
|
23
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtpEffect<any>, never, never, { "effectRef": { "alias": "effectRef"; "required": false; }; "blendFunction": { "alias": "blendFunction"; "required": false; }; "opacity": { "alias": "opacity"; "required": false; }; }, {}, never, never, false, never>;
|
|
24
|
-
}
|
package/effects/README.md
DELETED
package/effects/lut/lut.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { NgtSignalStore } from 'angular-three';
|
|
2
|
-
import { BlendFunction, LUT3DEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export interface NgtpLUTState {
|
|
5
|
-
lut: THREE.Texture;
|
|
6
|
-
blendFunction?: BlendFunction;
|
|
7
|
-
tetrahedralInterpolation?: boolean;
|
|
8
|
-
}
|
|
9
|
-
export declare class NgtpLUT extends NgtSignalStore<NgtpLUTState> {
|
|
10
|
-
#private;
|
|
11
|
-
effectRef: import("angular-three").NgtInjectedRef<LUT3DEffect>;
|
|
12
|
-
set lut(lut: THREE.Texture);
|
|
13
|
-
set blendFunction(blendFunction: BlendFunction);
|
|
14
|
-
set tetrahedralInterpolation(tetrahedralInterpolation: boolean);
|
|
15
|
-
readonly effect: import("@angular/core").Signal<LUT3DEffect>;
|
|
16
|
-
constructor();
|
|
17
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpLUT, never>;
|
|
18
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpLUT, "ngtp-lut", never, { "effectRef": { "alias": "effectRef"; "required": false; }; "lut": { "alias": "lut"; "required": true; }; "blendFunction": { "alias": "blendFunction"; "required": false; }; "tetrahedralInterpolation": { "alias": "tetrahedralInterpolation"; "required": false; }; }, {}, never, never, true, never>;
|
|
19
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
2
|
-
import { ShockWaveEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtpShockWave extends NgtpEffect<ShockWaveEffect> {
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpShockWave, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpShockWave, "ngtp-noise", never, {}, {}, never, ["*"], true, never>;
|
|
7
|
-
}
|
package/effects/smaa/smaa.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
2
|
-
import { SMAAEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtpSMAA extends NgtpEffect<SMAAEffect> {
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpSMAA, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpSMAA, "ngtp-SMAA", never, {}, {}, never, ["*"], true, never>;
|
|
7
|
-
}
|
package/effects/ssao/ssao.d.ts
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
import { NgtSignalStore } from 'angular-three';
|
|
2
|
-
import { BlendFunction, SSAOEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export type NgtpSSAOState = NonNullable<ConstructorParameters<typeof SSAOEffect>[2]>;
|
|
5
|
-
export declare class NgtpSSAO extends NgtSignalStore<NgtpSSAOState> {
|
|
6
|
-
#private;
|
|
7
|
-
effectRef: import("angular-three").NgtInjectedRef<SSAOEffect>;
|
|
8
|
-
set blendFunction(blendFunction: BlendFunction);
|
|
9
|
-
set distanceScaling(distanceScaling: boolean);
|
|
10
|
-
set depthAwareUpsampling(depthAwareUpsampling: boolean);
|
|
11
|
-
set normalDepthBuffer(normalDepthBuffer: THREE.Texture);
|
|
12
|
-
set samples(samples: number);
|
|
13
|
-
set rings(rings: number);
|
|
14
|
-
set worldDistanceThreshold(worldDistanceThreshold: number);
|
|
15
|
-
set worldDistanceFalloff(worldDistanceFalloff: number);
|
|
16
|
-
set worldProximityThreshold(worldProximityThreshold: number);
|
|
17
|
-
set worldProximityFalloff(worldProximityFalloff: number);
|
|
18
|
-
set distanceThreshold(distanceThreshold: number);
|
|
19
|
-
set distanceFalloff(distanceFalloff: number);
|
|
20
|
-
set rangeThreshold(rangeThreshold: number);
|
|
21
|
-
set rangeFalloff(rangeFalloff: number);
|
|
22
|
-
set minRadiusScale(minRadiusScale: number);
|
|
23
|
-
set luminanceInfluence(luminanceInfluence: number);
|
|
24
|
-
set radius(radius: number);
|
|
25
|
-
set intensity(intensity: number);
|
|
26
|
-
set bias(bias: number);
|
|
27
|
-
set fade(fade: number);
|
|
28
|
-
set color(color: THREE.Color);
|
|
29
|
-
set resolutionScale(resolutionScale: number);
|
|
30
|
-
set resolutionX(resolutionX: number);
|
|
31
|
-
set resolutionY(resolutionY: number);
|
|
32
|
-
set width(width: number);
|
|
33
|
-
set height(height: number);
|
|
34
|
-
readonly effect: import("@angular/core").Signal<{}>;
|
|
35
|
-
constructor();
|
|
36
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpSSAO, never>;
|
|
37
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpSSAO, "ngtp-SSAO", never, { "effectRef": { "alias": "effectRef"; "required": false; }; "blendFunction": { "alias": "blendFunction"; "required": false; }; "distanceScaling": { "alias": "distanceScaling"; "required": false; }; "depthAwareUpsampling": { "alias": "depthAwareUpsampling"; "required": false; }; "normalDepthBuffer": { "alias": "normalDepthBuffer"; "required": false; }; "samples": { "alias": "samples"; "required": false; }; "rings": { "alias": "rings"; "required": false; }; "worldDistanceThreshold": { "alias": "worldDistanceThreshold"; "required": false; }; "worldDistanceFalloff": { "alias": "worldDistanceFalloff"; "required": false; }; "worldProximityThreshold": { "alias": "worldProximityThreshold"; "required": false; }; "worldProximityFalloff": { "alias": "worldProximityFalloff"; "required": false; }; "distanceThreshold": { "alias": "distanceThreshold"; "required": false; }; "distanceFalloff": { "alias": "distanceFalloff"; "required": false; }; "rangeThreshold": { "alias": "rangeThreshold"; "required": false; }; "rangeFalloff": { "alias": "rangeFalloff"; "required": false; }; "minRadiusScale": { "alias": "minRadiusScale"; "required": false; }; "luminanceInfluence": { "alias": "luminanceInfluence"; "required": false; }; "radius": { "alias": "radius"; "required": false; }; "intensity": { "alias": "intensity"; "required": false; }; "bias": { "alias": "bias"; "required": false; }; "fade": { "alias": "fade"; "required": false; }; "color": { "alias": "color"; "required": false; }; "resolutionScale": { "alias": "resolutionScale"; "required": false; }; "resolutionX": { "alias": "resolutionX"; "required": false; }; "resolutionY": { "alias": "resolutionY"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; }, {}, never, never, true, never>;
|
|
38
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
2
|
-
import { BlendFunction, TiltShiftEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtpTiltShift extends NgtpEffect<TiltShiftEffect> {
|
|
5
|
-
defaultBlendFunction: BlendFunction;
|
|
6
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpTiltShift, never>;
|
|
7
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpTiltShift, "ngtp-tilt-shift", never, {}, {}, never, ["*"], true, never>;
|
|
8
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
2
|
-
import { ToneMappingEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtpToneMapping extends NgtpEffect<ToneMappingEffect> {
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpToneMapping, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpToneMapping, "ngtp-tone-mapping", never, {}, {}, never, ["*"], true, never>;
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { NgtpEffect } from 'angular-three-postprocessing';
|
|
2
|
-
import { VignetteEffect } from 'postprocessing';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class NgtpVignette extends NgtpEffect<VignetteEffect> {
|
|
5
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NgtpVignette, never>;
|
|
6
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<NgtpVignette, "ngtp-vignette", never, {}, {}, never, ["*"], true, never>;
|
|
7
|
-
}
|
|
@@ -1,242 +0,0 @@
|
|
|
1
|
-
import { CUSTOM_ELEMENTS_SCHEMA, Component, InjectionToken, Input, computed, effect, inject, } from '@angular/core';
|
|
2
|
-
import { NgtSignalStore, NgtStore, extend, injectBeforeRender, injectNgtRef, requestAnimationFrameInInjectionContext, } from 'angular-three';
|
|
3
|
-
import { DepthDownsamplingPass, EffectComposer, EffectPass, NormalPass, RenderPass } from 'postprocessing';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { Group } from 'three';
|
|
6
|
-
import { isWebGL2Available } from 'three-stdlib';
|
|
7
|
-
import * as i0 from "@angular/core";
|
|
8
|
-
extend({ Group });
|
|
9
|
-
export const NGTP_EFFECT_COMPOSER_API = new InjectionToken('NgtpEffectComposer API');
|
|
10
|
-
class NgtpEffectComposer extends NgtSignalStore {
|
|
11
|
-
set enabled(enabled) {
|
|
12
|
-
this.set({ enabled });
|
|
13
|
-
}
|
|
14
|
-
set depthBuffer(depthBuffer) {
|
|
15
|
-
this.set({ depthBuffer });
|
|
16
|
-
}
|
|
17
|
-
set disableNormalPass(disableNormalPass) {
|
|
18
|
-
this.set({ disableNormalPass });
|
|
19
|
-
}
|
|
20
|
-
set stencilBuffer(stencilBuffer) {
|
|
21
|
-
this.set({ stencilBuffer });
|
|
22
|
-
}
|
|
23
|
-
set autoClear(autoClear) {
|
|
24
|
-
this.set({ autoClear });
|
|
25
|
-
}
|
|
26
|
-
set resolutionScale(resolutionScale) {
|
|
27
|
-
this.set({ resolutionScale });
|
|
28
|
-
}
|
|
29
|
-
set multisampling(multisampling) {
|
|
30
|
-
this.set({ multisampling });
|
|
31
|
-
}
|
|
32
|
-
set frameBufferType(frameBufferType) {
|
|
33
|
-
this.set({ frameBufferType });
|
|
34
|
-
}
|
|
35
|
-
set renderPriority(renderPriority) {
|
|
36
|
-
this.set({ renderPriority });
|
|
37
|
-
}
|
|
38
|
-
set camera(camera) {
|
|
39
|
-
this.set({ camera });
|
|
40
|
-
}
|
|
41
|
-
set scene(scene) {
|
|
42
|
-
this.set({ scene });
|
|
43
|
-
}
|
|
44
|
-
#store;
|
|
45
|
-
#gl;
|
|
46
|
-
#size;
|
|
47
|
-
#defaultScene;
|
|
48
|
-
#defaultCamera;
|
|
49
|
-
#scene;
|
|
50
|
-
#camera;
|
|
51
|
-
#depthBuffer;
|
|
52
|
-
#stencilBuffer;
|
|
53
|
-
#multisampling;
|
|
54
|
-
#frameBufferType;
|
|
55
|
-
#disableNormalPass;
|
|
56
|
-
#resolutionScale;
|
|
57
|
-
#activeScene;
|
|
58
|
-
#activeCamera;
|
|
59
|
-
#composerEntities;
|
|
60
|
-
constructor() {
|
|
61
|
-
super({
|
|
62
|
-
enabled: true,
|
|
63
|
-
renderPriority: 1,
|
|
64
|
-
autoClear: true,
|
|
65
|
-
multisampling: 8,
|
|
66
|
-
frameBufferType: THREE.HalfFloatType,
|
|
67
|
-
});
|
|
68
|
-
this.composerRef = injectNgtRef();
|
|
69
|
-
this.#store = inject(NgtStore);
|
|
70
|
-
this.#gl = this.#store.select('gl');
|
|
71
|
-
this.#size = this.#store.select('size');
|
|
72
|
-
this.#defaultScene = this.#store.select('scene');
|
|
73
|
-
this.#defaultCamera = this.#store.select('camera');
|
|
74
|
-
this.#scene = this.select('scene');
|
|
75
|
-
this.#camera = this.select('camera');
|
|
76
|
-
this.#depthBuffer = this.select('depthBuffer');
|
|
77
|
-
this.#stencilBuffer = this.select('stencilBuffer');
|
|
78
|
-
this.#multisampling = this.select('multisampling');
|
|
79
|
-
this.#frameBufferType = this.select('frameBufferType');
|
|
80
|
-
this.#disableNormalPass = this.select('disableNormalPass');
|
|
81
|
-
this.#resolutionScale = this.select('resolutionScale');
|
|
82
|
-
this.#activeScene = computed(() => this.#scene() || this.#defaultScene());
|
|
83
|
-
this.#activeCamera = computed(() => this.#camera() || this.#defaultCamera());
|
|
84
|
-
this.#composerEntities = computed(() => {
|
|
85
|
-
const gl = this.#gl();
|
|
86
|
-
const camera = this.#activeCamera();
|
|
87
|
-
const scene = this.#activeScene();
|
|
88
|
-
const depthBuffer = this.#depthBuffer();
|
|
89
|
-
const stencilBuffer = this.#stencilBuffer();
|
|
90
|
-
const multisampling = this.#multisampling();
|
|
91
|
-
const frameBufferType = this.#frameBufferType();
|
|
92
|
-
const disableNormalPass = this.#disableNormalPass();
|
|
93
|
-
const resolutionScale = this.#resolutionScale();
|
|
94
|
-
const webGL2Available = isWebGL2Available();
|
|
95
|
-
// Initialize composer
|
|
96
|
-
const effectComposer = new EffectComposer(gl, {
|
|
97
|
-
depthBuffer,
|
|
98
|
-
stencilBuffer,
|
|
99
|
-
multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
|
|
100
|
-
frameBufferType,
|
|
101
|
-
});
|
|
102
|
-
// Add render pass
|
|
103
|
-
effectComposer.addPass(new RenderPass(scene, camera));
|
|
104
|
-
// Create normal pass
|
|
105
|
-
let downSamplingPass = null;
|
|
106
|
-
let normalPass = null;
|
|
107
|
-
if (!disableNormalPass) {
|
|
108
|
-
normalPass = new NormalPass(scene, camera);
|
|
109
|
-
normalPass.enabled = false;
|
|
110
|
-
effectComposer.addPass(normalPass);
|
|
111
|
-
if (resolutionScale !== undefined && webGL2Available) {
|
|
112
|
-
downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale });
|
|
113
|
-
downSamplingPass.enabled = false;
|
|
114
|
-
effectComposer.addPass(downSamplingPass);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
return { effectComposer, normalPass, downSamplingPass };
|
|
118
|
-
});
|
|
119
|
-
this.api = computed(() => {
|
|
120
|
-
const { effectComposer, normalPass, downSamplingPass } = this.#composerEntities();
|
|
121
|
-
return {
|
|
122
|
-
composer: effectComposer,
|
|
123
|
-
normalPass,
|
|
124
|
-
downSamplingPass,
|
|
125
|
-
resolutionScale: this.#resolutionScale(),
|
|
126
|
-
camera: this.#activeCamera(),
|
|
127
|
-
scene: this.#activeScene(),
|
|
128
|
-
};
|
|
129
|
-
});
|
|
130
|
-
requestAnimationFrameInInjectionContext(() => {
|
|
131
|
-
this.#setComposerSize();
|
|
132
|
-
this.#updateEffectPasses();
|
|
133
|
-
this.#setBeforeRender();
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
#setComposerSize() {
|
|
137
|
-
const trigger = computed(() => ({ composer: this.#composerEntities().effectComposer, size: this.#size() }));
|
|
138
|
-
effect(() => {
|
|
139
|
-
const { composer, size } = trigger();
|
|
140
|
-
if (!composer)
|
|
141
|
-
return;
|
|
142
|
-
composer.setSize(size.width, size.height);
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
#updateEffectPasses() {
|
|
146
|
-
const trigger = computed(() => ({
|
|
147
|
-
composerEntities: this.#composerEntities(),
|
|
148
|
-
instance: this.composerRef.nativeElement,
|
|
149
|
-
children: this.composerRef.children('nonObjects')(),
|
|
150
|
-
camera: this.#activeCamera(),
|
|
151
|
-
}));
|
|
152
|
-
effect((onCleanup) => {
|
|
153
|
-
const { composerEntities: { effectComposer, normalPass, downSamplingPass }, instance, children, camera, } = trigger();
|
|
154
|
-
let effectPass;
|
|
155
|
-
if (instance && children.length && effectComposer) {
|
|
156
|
-
effectPass = new EffectPass(camera, ...children);
|
|
157
|
-
effectPass.renderToScreen = true;
|
|
158
|
-
effectComposer.addPass(effectPass);
|
|
159
|
-
if (normalPass)
|
|
160
|
-
normalPass.enabled = true;
|
|
161
|
-
if (downSamplingPass)
|
|
162
|
-
downSamplingPass.enabled = true;
|
|
163
|
-
}
|
|
164
|
-
onCleanup(() => {
|
|
165
|
-
if (effectPass)
|
|
166
|
-
effectComposer?.removePass(effectPass);
|
|
167
|
-
if (normalPass)
|
|
168
|
-
normalPass.enabled = false;
|
|
169
|
-
if (downSamplingPass)
|
|
170
|
-
downSamplingPass.enabled = false;
|
|
171
|
-
});
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
#setBeforeRender() {
|
|
175
|
-
injectBeforeRender(({ delta }) => {
|
|
176
|
-
const enabled = this.get('enabled');
|
|
177
|
-
const autoClear = this.get('autoClear');
|
|
178
|
-
const gl = this.#store.get('gl');
|
|
179
|
-
const { effectComposer } = this.#composerEntities();
|
|
180
|
-
if (enabled && effectComposer) {
|
|
181
|
-
gl.autoClear = autoClear;
|
|
182
|
-
effectComposer.render(delta);
|
|
183
|
-
}
|
|
184
|
-
}, { priority: this.get('enabled') ? this.get('renderPriority') : 0 });
|
|
185
|
-
}
|
|
186
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
187
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { enabled: "enabled", depthBuffer: "depthBuffer", disableNormalPass: "disableNormalPass", stencilBuffer: "stencilBuffer", autoClear: "autoClear", resolutionScale: "resolutionScale", multisampling: "multisampling", frameBufferType: "frameBufferType", renderPriority: "renderPriority", camera: "camera", scene: "scene" }, providers: [
|
|
188
|
-
{
|
|
189
|
-
provide: NGTP_EFFECT_COMPOSER_API,
|
|
190
|
-
useFactory: (composer) => composer.api,
|
|
191
|
-
deps: [NgtpEffectComposer],
|
|
192
|
-
},
|
|
193
|
-
], usesInheritance: true, ngImport: i0, template: `
|
|
194
|
-
<ngt-group [ref]="composerRef">
|
|
195
|
-
<ng-content />
|
|
196
|
-
</ngt-group>
|
|
197
|
-
`, isInline: true }); }
|
|
198
|
-
}
|
|
199
|
-
export { NgtpEffectComposer };
|
|
200
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: NgtpEffectComposer, decorators: [{
|
|
201
|
-
type: Component,
|
|
202
|
-
args: [{
|
|
203
|
-
selector: 'ngtp-effect-composer',
|
|
204
|
-
standalone: true,
|
|
205
|
-
template: `
|
|
206
|
-
<ngt-group [ref]="composerRef">
|
|
207
|
-
<ng-content />
|
|
208
|
-
</ngt-group>
|
|
209
|
-
`,
|
|
210
|
-
providers: [
|
|
211
|
-
{
|
|
212
|
-
provide: NGTP_EFFECT_COMPOSER_API,
|
|
213
|
-
useFactory: (composer) => composer.api,
|
|
214
|
-
deps: [NgtpEffectComposer],
|
|
215
|
-
},
|
|
216
|
-
],
|
|
217
|
-
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
218
|
-
}]
|
|
219
|
-
}], ctorParameters: function () { return []; }, propDecorators: { enabled: [{
|
|
220
|
-
type: Input
|
|
221
|
-
}], depthBuffer: [{
|
|
222
|
-
type: Input
|
|
223
|
-
}], disableNormalPass: [{
|
|
224
|
-
type: Input
|
|
225
|
-
}], stencilBuffer: [{
|
|
226
|
-
type: Input
|
|
227
|
-
}], autoClear: [{
|
|
228
|
-
type: Input
|
|
229
|
-
}], resolutionScale: [{
|
|
230
|
-
type: Input
|
|
231
|
-
}], multisampling: [{
|
|
232
|
-
type: Input
|
|
233
|
-
}], frameBufferType: [{
|
|
234
|
-
type: Input
|
|
235
|
-
}], renderPriority: [{
|
|
236
|
-
type: Input
|
|
237
|
-
}], camera: [{
|
|
238
|
-
type: Input
|
|
239
|
-
}], scene: [{
|
|
240
|
-
type: Input
|
|
241
|
-
}] } });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvZWZmZWN0LWNvbXBvc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxzQkFBc0IsRUFDdEIsU0FBUyxFQUNULGNBQWMsRUFDZCxLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNILGNBQWMsRUFDZCxRQUFRLEVBQ1IsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixZQUFZLEVBQ1osdUNBQXVDLEdBQzFDLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRyxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFFakQsTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztBQXlCbEIsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxjQUFjLENBQWdDLHdCQUF3QixDQUFDLENBQUM7QUFFcEgsTUFpQmEsa0JBQW1CLFNBQVEsY0FBdUM7SUFHM0UsSUFBYSxPQUFPLENBQUMsT0FBZ0I7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQWEsV0FBVyxDQUFDLFdBQW9CO1FBQ3pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxJQUFhLGlCQUFpQixDQUFDLGlCQUEwQjtR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RSxDQUFDLHNCQUFzQixDQUFDO2lCQUNwQzswRUFJZ0IsT0FBTztzQkFBbkIsS0FBSztnQkFJTyxXQUFXO3NCQUF2QixLQUFLO2dCQUlPLGlCQUFpQjtzQkFBN0IsS0FBSztnQkFJTyxhQUFhO3NCQUF6QixLQUFLO2dCQUlPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBSU8sZUFBZTtzQkFBM0IsS0FBSztnQkFJTyxhQUFhO3NCQUF6QixLQUFLO2dCQUlPLGVBQWU7c0JBQTNCLEtBQUs7Z0JBSU8sY0FBYztzQkFBMUIsS0FBSztnQkFJTyxNQUFNO3NCQUFsQixLQUFLO2dCQUlPLEtBQUs7c0JBQWpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG4gICAgQ29tcG9uZW50LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIFNpZ25hbCxcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTmd0U2lnbmFsU3RvcmUsXG4gICAgTmd0U3RvcmUsXG4gICAgZXh0ZW5kLFxuICAgIGluamVjdEJlZm9yZVJlbmRlcixcbiAgICBpbmplY3ROZ3RSZWYsXG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5JbmplY3Rpb25Db250ZXh0LFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IERlcHRoRG93bnNhbXBsaW5nUGFzcywgRWZmZWN0Q29tcG9zZXIsIEVmZmVjdFBhc3MsIE5vcm1hbFBhc3MsIFJlbmRlclBhc3MgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyU3RhdGUge1xuICAgIGVuYWJsZWQ6IGJvb2xlYW47XG4gICAgZGVwdGhCdWZmZXI/OiBib29sZWFuO1xuICAgIGRpc2FibGVOb3JtYWxQYXNzPzogYm9vbGVhbjtcbiAgICBzdGVuY2lsQnVmZmVyPzogYm9vbGVhbjtcbiAgICBhdXRvQ2xlYXI6IGJvb2xlYW47XG4gICAgcmVzb2x1dGlvblNjYWxlPzogbnVtYmVyO1xuICAgIG11bHRpc2FtcGxpbmc6IG51bWJlcjtcbiAgICBmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLlRleHR1cmVEYXRhVHlwZTtcbiAgICByZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuICAgIGNhbWVyYT86IFRIUkVFLkNhbWVyYTtcbiAgICBzY2VuZT86IFRIUkVFLlNjZW5lO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHBFZmZlY3RDb21wb3NlckFwaSB7XG4gICAgY29tcG9zZXI6IEVmZmVjdENvbXBvc2VyO1xuICAgIG5vcm1hbFBhc3M6IE5vcm1hbFBhc3MgfCBudWxsO1xuICAgIGRvd25TYW1wbGluZ1Bhc3M6IERlcHRoRG93bnNhbXBsaW5nUGFzcyB8IG51bGw7XG4gICAgY2FtZXJhOiBUSFJFRS5DYW1lcmE7XG4gICAgc2NlbmU6IFRIUkVFLlNjZW5lO1xuICAgIHJlc29sdXRpb25TY2FsZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTaWduYWw8Tmd0cEVmZmVjdENvbXBvc2VyQXBpPj4oJ05ndHBFZmZlY3RDb21wb3NlciBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RwLWVmZmVjdC1jb21wb3NlcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmd0LWdyb3VwIFtyZWZdPVwiY29tcG9zZXJSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgICAgIDwvbmd0LWdyb3VwPlxuICAgIGAsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HVFBfRUZGRUNUX0NPTVBPU0VSX0FQSSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IChjb21wb3NlcjogTmd0cEVmZmVjdENvbXBvc2VyKSA9PiBjb21wb3Nlci5hcGksXG4gICAgICAgICAgICBkZXBzOiBbTmd0cEVmZmVjdENvbXBvc2VyXSxcbiAgICAgICAgfSxcbiAgICBdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEVmZmVjdENvbXBvc2VyIGV4dGVuZHMgTmd0U2lnbmFsU3RvcmU8Tmd0cEVmZmVjdENvbXBvc2VyU3RhdGU+IHtcbiAgICByZWFkb25seSBjb21wb3NlclJlZiA9IGluamVjdE5ndFJlZjxUSFJFRS5Hcm91cD4oKTtcblxuICAgIEBJbnB1dCgpIHNldCBlbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBlbmFibGVkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZXB0aEJ1ZmZlcihkZXB0aEJ1ZmZlcjogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGRlcHRoQnVmZmVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkaXNhYmxlTm9ybWFsUGFzcyhkaXNhYmxlTm9ybWFsUGFzczogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNldCh7IGRpc2FibGVOb3JtYWxQYXNzIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBzdGVuY2lsQnVmZmVyKHN0ZW5jaWxCdWZmZXI6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBzdGVuY2lsQnVmZmVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBhdXRvQ2xlYXIoYXV0b0NsZWFyOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXV0b0NsZWFyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZXNvbHV0aW9uU2NhbGUocmVzb2x1dGlvblNjYWxlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5zZXQoeyByZXNvbHV0aW9uU2NhbGUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IG11bHRpc2FtcGxpbmcobXVsdGlzYW1wbGluZzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgbXVsdGlzYW1wbGluZyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgZnJhbWVCdWZmZXJUeXBlKGZyYW1lQnVmZmVyVHlwZTogVEhSRUUuVGV4dHVyZURhdGFUeXBlKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgZnJhbWVCdWZmZXJUeXBlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCByZW5kZXJQcmlvcml0eShyZW5kZXJQcmlvcml0eTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgcmVuZGVyUHJpb3JpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGNhbWVyYShjYW1lcmE6IFRIUkVFLkNhbWVyYSkge1xuICAgICAgICB0aGlzLnNldCh7IGNhbWVyYSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2NlbmUoc2NlbmU6IFRIUkVFLlNjZW5lKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2NlbmUgfSk7XG4gICAgfVxuXG4gICAgcmVhZG9ubHkgI3N0b3JlID0gaW5qZWN0KE5ndFN0b3JlKTtcbiAgICByZWFkb25seSAjZ2wgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ2dsJyk7XG4gICAgcmVhZG9ubHkgI3NpemUgPSB0aGlzLiNzdG9yZS5zZWxlY3QoJ3NpemUnKTtcbiAgICByZWFkb25seSAjZGVmYXVsdFNjZW5lID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdzY2VuZScpO1xuICAgIHJlYWRvbmx5ICNkZWZhdWx0Q2FtZXJhID0gdGhpcy4jc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblxuICAgIHJlYWRvbmx5ICNzY2VuZSA9IHRoaXMuc2VsZWN0KCdzY2VuZScpO1xuICAgIHJlYWRvbmx5ICNjYW1lcmEgPSB0aGlzLnNlbGVjdCgnY2FtZXJhJyk7XG5cbiAgICByZWFkb25seSAjZGVwdGhCdWZmZXIgPSB0aGlzLnNlbGVjdCgnZGVwdGhCdWZmZXInKTtcbiAgICByZWFkb25seSAjc3RlbmNpbEJ1ZmZlciA9IHRoaXMuc2VsZWN0KCdzdGVuY2lsQnVmZmVyJyk7XG4gICAgcmVhZG9ubHkgI211bHRpc2FtcGxpbmcgPSB0aGlzLnNlbGVjdCgnbXVsdGlzYW1wbGluZycpO1xuICAgIHJlYWRvbmx5ICNmcmFtZUJ1ZmZlclR5cGUgPSB0aGlzLnNlbGVjdCgnZnJhbWVCdWZmZXJUeXBlJyk7XG4gICAgcmVhZG9ubHkgI2Rpc2FibGVOb3JtYWxQYXNzID0gdGhpcy5zZWxlY3QoJ2Rpc2FibGVOb3JtYWxQYXNzJyk7XG4gICAgcmVhZG9ubHkgI3Jlc29sdXRpb25TY2FsZSA9IHRoaXMuc2VsZWN0KCdyZXNvbHV0aW9uU2NhbGUnKTtcblxuICAgIHJlYWRvbmx5ICNhY3RpdmVTY2VuZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuI3NjZW5lKCkgfHwgdGhpcy4jZGVmYXVsdFNjZW5lKCkpO1xuICAgIHJlYWRvbmx5ICNhY3RpdmVDYW1lcmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNjYW1lcmEoKSB8fCB0aGlzLiNkZWZhdWx0Q2FtZXJhKCkpO1xuXG4gICAgcmVhZG9ubHkgI2NvbXBvc2VyRW50aXRpZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdsID0gdGhpcy4jZ2woKTtcbiAgICAgICAgY29uc3QgY2FtZXJhID0gdGhpcy4jYWN0aXZlQ2FtZXJhKCk7XG4gICAgICAgIGNvbnN0IHNjZW5lID0gdGhpcy4jYWN0aXZlU2NlbmUoKTtcbiAgICAgICAgY29uc3QgZGVwdGhCdWZmZXIgPSB0aGlzLiNkZXB0aEJ1ZmZlcigpO1xuICAgICAgICBjb25zdCBzdGVuY2lsQnVmZmVyID0gdGhpcy4jc3RlbmNpbEJ1ZmZlcigpO1xuICAgICAgICBjb25zdCBtdWx0aXNhbXBsaW5nID0gdGhpcy4jbXVsdGlzYW1wbGluZygpO1xuICAgICAgICBjb25zdCBmcmFtZUJ1ZmZlclR5cGUgPSB0aGlzLiNmcmFtZUJ1ZmZlclR5cGUoKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZU5vcm1hbFBhc3MgPSB0aGlzLiNkaXNhYmxlTm9ybWFsUGFzcygpO1xuICAgICAgICBjb25zdCByZXNvbHV0aW9uU2NhbGUgPSB0aGlzLiNyZXNvbHV0aW9uU2NhbGUoKTtcblxuICAgICAgICBjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuICAgICAgICAvLyBJbml0aWFsaXplIGNvbXBvc2VyXG4gICAgICAgIGNvbnN0IGVmZmVjdENvbXBvc2VyID0gbmV3IEVmZmVjdENvbXBvc2VyKGdsLCB7XG4gICAgICAgICAgICBkZXB0aEJ1ZmZlcixcbiAgICAgICAgICAgIHN0ZW5jaWxCdWZmZXIsXG4gICAgICAgICAgICBtdWx0aXNhbXBsaW5nOiBtdWx0aXNhbXBsaW5nID4gMCAmJiB3ZWJHTDJBdmFpbGFibGUgPyBtdWx0aXNhbXBsaW5nIDogMCxcbiAgICAgICAgICAgIGZyYW1lQnVmZmVyVHlwZSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gQWRkIHJlbmRlciBwYXNzXG4gICAgICAgIGVmZmVjdENvbXBvc2VyLmFkZFBhc3MobmV3IFJlbmRlclBhc3Moc2NlbmUsIGNhbWVyYSkpO1xuXG4gICAgICAgIC8vIENyZWF0ZSBub3JtYWwgcGFzc1xuICAgICAgICBsZXQgZG93blNhbXBsaW5nUGFzcyA9IG51bGw7XG4gICAgICAgIGxldCBub3JtYWxQYXNzID0gbnVsbDtcbiAgICAgICAgaWYgKCFkaXNhYmxlTm9ybWFsUGFzcykge1xuICAgICAgICAgICAgbm9ybWFsUGFzcyA9IG5ldyBOb3JtYWxQYXNzKHNjZW5lLCBjYW1lcmEpO1xuICAgICAgICAgICAgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICBlZmZlY3RDb21wb3Nlci5hZGRQYXNzKG5vcm1hbFBhc3MpO1xuICAgICAgICAgICAgaWYgKHJlc29sdXRpb25TY2FsZSAhPT0gdW5kZWZpbmVkICYmIHdlYkdMMkF2YWlsYWJsZSkge1xuICAgICAgICAgICAgICAgIGRvd25TYW1wbGluZ1Bhc3MgPSBuZXcgRGVwdGhEb3duc2FtcGxpbmdQYXNzKHsgbm9ybWFsQnVmZmVyOiBub3JtYWxQYXNzLnRleHR1cmUsIHJlc29sdXRpb25TY2FsZSB9KTtcbiAgICAgICAgICAgICAgICBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBlZmZlY3RDb21wb3Nlci5hZGRQYXNzKGRvd25TYW1wbGluZ1Bhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgZWZmZWN0Q29tcG9zZXIsIG5vcm1hbFBhc3MsIGRvd25TYW1wbGluZ1Bhc3MgfTtcbiAgICB9KTtcblxuICAgIHJlYWRvbmx5IGFwaSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBlZmZlY3RDb21wb3Nlciwgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzcyB9ID0gdGhpcy4jY29tcG9zZXJFbnRpdGllcygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29tcG9zZXI6IGVmZmVjdENvbXBvc2VyLFxuICAgICAgICAgICAgbm9ybWFsUGFzcyxcbiAgICAgICAgICAgIGRvd25TYW1wbGluZ1Bhc3MsXG4gICAgICAgICAgICByZXNvbHV0aW9uU2NhbGU6IHRoaXMuI3Jlc29sdXRpb25TY2FsZSgpLFxuICAgICAgICAgICAgY2FtZXJhOiB0aGlzLiNhY3RpdmVDYW1lcmEoKSxcbiAgICAgICAgICAgIHNjZW5lOiB0aGlzLiNhY3RpdmVTY2VuZSgpLFxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgICByZW5kZXJQcmlvcml0eTogMSxcbiAgICAgICAgICAgIGF1dG9DbGVhcjogdHJ1ZSxcbiAgICAgICAgICAgIG11bHRpc2FtcGxpbmc6IDgsXG4gICAgICAgICAgICBmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWVJbkluamVjdGlvbkNvbnRleHQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jc2V0Q29tcG9zZXJTaXplKCk7XG4gICAgICAgICAgICB0aGlzLiN1cGRhdGVFZmZlY3RQYXNzZXMoKTtcbiAgICAgICAgICAgIHRoaXMuI3NldEJlZm9yZVJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjc2V0Q29tcG9zZXJTaXplKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gY29tcHV0ZWQoKCkgPT4gKHsgY29tcG9zZXI6IHRoaXMuI2NvbXBvc2VyRW50aXRpZXMoKS5lZmZlY3RDb21wb3Nlciwgc2l6ZTogdGhpcy4jc2l6ZSgpIH0pKTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY29tcG9zZXIsIHNpemUgfSA9IHRyaWdnZXIoKTtcbiAgICAgICAgICAgIGlmICghY29tcG9zZXIpIHJldHVybjtcbiAgICAgICAgICAgIGNvbXBvc2VyLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAjdXBkYXRlRWZmZWN0UGFzc2VzKCkge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICAgICAgICAgIGNvbXBvc2VyRW50aXRpZXM6IHRoaXMuI2NvbXBvc2VyRW50aXRpZXMoKSxcbiAgICAgICAgICAgIGluc3RhbmNlOiB0aGlzLmNvbXBvc2VyUmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICBjaGlsZHJlbjogdGhpcy5jb21wb3NlclJlZi5jaGlsZHJlbignbm9uT2JqZWN0cycpKCksXG4gICAgICAgICAgICBjYW1lcmE6IHRoaXMuI2FjdGl2ZUNhbWVyYSgpLFxuICAgICAgICB9KSk7XG4gICAgICAgIGVmZmVjdCgob25DbGVhbnVwKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICAgICAgY29tcG9zZXJFbnRpdGllczogeyBlZmZlY3RDb21wb3Nlciwgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzcyB9LFxuICAgICAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNhbWVyYSxcbiAgICAgICAgICAgIH0gPSB0cmlnZ2VyKCk7XG5cbiAgICAgICAgICAgIGxldCBlZmZlY3RQYXNzOiBFZmZlY3RQYXNzO1xuICAgICAgICAgICAgaWYgKGluc3RhbmNlICYmIGNoaWxkcmVuLmxlbmd0aCAmJiBlZmZlY3RDb21wb3Nlcikge1xuICAgICAgICAgICAgICAgIGVmZmVjdFBhc3MgPSBuZXcgRWZmZWN0UGFzcyhjYW1lcmEsIC4uLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBlZmZlY3RQYXNzLnJlbmRlclRvU2NyZWVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBlZmZlY3RDb21wb3Nlci5hZGRQYXNzKGVmZmVjdFBhc3MpO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxQYXNzKSBub3JtYWxQYXNzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbkNsZWFudXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChlZmZlY3RQYXNzKSBlZmZlY3RDb21wb3Nlcj8ucmVtb3ZlUGFzcyhlZmZlY3RQYXNzKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsUGFzcykgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGRvd25TYW1wbGluZ1Bhc3MpIGRvd25TYW1wbGluZ1Bhc3MuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICNzZXRCZWZvcmVSZW5kZXIoKSB7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcihcbiAgICAgICAgICAgICh7IGRlbHRhIH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbmFibGVkID0gdGhpcy5nZXQoJ2VuYWJsZWQnKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhdXRvQ2xlYXIgPSB0aGlzLmdldCgnYXV0b0NsZWFyJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2wgPSB0aGlzLiNzdG9yZS5nZXQoJ2dsJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlZmZlY3RDb21wb3NlciB9ID0gdGhpcy4jY29tcG9zZXJFbnRpdGllcygpO1xuICAgICAgICAgICAgICAgIGlmIChlbmFibGVkICYmIGVmZmVjdENvbXBvc2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIGdsLmF1dG9DbGVhciA9IGF1dG9DbGVhcjtcbiAgICAgICAgICAgICAgICAgICAgZWZmZWN0Q29tcG9zZXIucmVuZGVyKGRlbHRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBwcmlvcml0eTogdGhpcy5nZXQoJ2VuYWJsZWQnKSA/IHRoaXMuZ2V0KCdyZW5kZXJQcmlvcml0eScpIDogMCB9XG4gICAgICAgICk7XG4gICAgfVxufVxuIl19
|