mage-engine 3.17.5 → 3.17.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/dist/mage.js +1776 -1461
- package/package.json +1 -1
package/dist/mage.js
CHANGED
|
@@ -224,6 +224,10 @@ function _get() {
|
|
|
224
224
|
return _get.apply(this, arguments);
|
|
225
225
|
}
|
|
226
226
|
|
|
227
|
+
function _slicedToArray(arr, i) {
|
|
228
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
229
|
+
}
|
|
230
|
+
|
|
227
231
|
function _toConsumableArray(arr) {
|
|
228
232
|
return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
|
|
229
233
|
}
|
|
@@ -232,10 +236,44 @@ function _arrayWithoutHoles(arr) {
|
|
|
232
236
|
if (Array.isArray(arr)) return _arrayLikeToArray(arr);
|
|
233
237
|
}
|
|
234
238
|
|
|
239
|
+
function _arrayWithHoles(arr) {
|
|
240
|
+
if (Array.isArray(arr)) return arr;
|
|
241
|
+
}
|
|
242
|
+
|
|
235
243
|
function _iterableToArray(iter) {
|
|
236
244
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
237
245
|
}
|
|
238
246
|
|
|
247
|
+
function _iterableToArrayLimit(arr, i) {
|
|
248
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
249
|
+
|
|
250
|
+
if (_i == null) return;
|
|
251
|
+
var _arr = [];
|
|
252
|
+
var _n = true;
|
|
253
|
+
var _d = false;
|
|
254
|
+
|
|
255
|
+
var _s, _e;
|
|
256
|
+
|
|
257
|
+
try {
|
|
258
|
+
for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {
|
|
259
|
+
_arr.push(_s.value);
|
|
260
|
+
|
|
261
|
+
if (i && _arr.length === i) break;
|
|
262
|
+
}
|
|
263
|
+
} catch (err) {
|
|
264
|
+
_d = true;
|
|
265
|
+
_e = err;
|
|
266
|
+
} finally {
|
|
267
|
+
try {
|
|
268
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
269
|
+
} finally {
|
|
270
|
+
if (_d) throw _e;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return _arr;
|
|
275
|
+
}
|
|
276
|
+
|
|
239
277
|
function _unsupportedIterableToArray(o, minLen) {
|
|
240
278
|
if (!o) return;
|
|
241
279
|
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
@@ -257,6 +295,10 @@ function _nonIterableSpread() {
|
|
|
257
295
|
throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
258
296
|
}
|
|
259
297
|
|
|
298
|
+
function _nonIterableRest() {
|
|
299
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
300
|
+
}
|
|
301
|
+
|
|
260
302
|
function _createForOfIteratorHelper(o, allowArrayLike) {
|
|
261
303
|
var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"];
|
|
262
304
|
|
|
@@ -50438,7 +50480,7 @@ class ArrowHelper extends Object3D {
|
|
|
50438
50480
|
|
|
50439
50481
|
}
|
|
50440
50482
|
|
|
50441
|
-
class AxesHelper extends LineSegments {
|
|
50483
|
+
class AxesHelper$1 extends LineSegments {
|
|
50442
50484
|
|
|
50443
50485
|
constructor( size = 1 ) {
|
|
50444
50486
|
|
|
@@ -51672,7 +51714,7 @@ Path.prototype.fromPoints = function ( points ) {
|
|
|
51672
51714
|
function AxisHelper( size ) {
|
|
51673
51715
|
|
|
51674
51716
|
console.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );
|
|
51675
|
-
return new AxesHelper( size );
|
|
51717
|
+
return new AxesHelper$1( size );
|
|
51676
51718
|
|
|
51677
51719
|
}
|
|
51678
51720
|
|
|
@@ -53542,10 +53584,13 @@ if ( typeof window !== 'undefined' ) {
|
|
|
53542
53584
|
|
|
53543
53585
|
}
|
|
53544
53586
|
|
|
53545
|
-
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping:ACESFilmicToneMapping,AddEquation:AddEquation,AddOperation:AddOperation,AdditiveAnimationBlendMode:AdditiveAnimationBlendMode,AdditiveBlending:AdditiveBlending,AlphaFormat:AlphaFormat,AlwaysDepth:AlwaysDepth,AlwaysStencilFunc:AlwaysStencilFunc,AmbientLight:AmbientLight$1,AmbientLightProbe:AmbientLightProbe,AnimationClip:AnimationClip,AnimationLoader:AnimationLoader,AnimationMixer:AnimationMixer,AnimationObjectGroup:AnimationObjectGroup,AnimationUtils:AnimationUtils,ArcCurve:ArcCurve,ArrayCamera:ArrayCamera,ArrowHelper:ArrowHelper,Audio:Audio$2,AudioAnalyser:AudioAnalyser,AudioContext:AudioContext,AudioListener:AudioListener,AudioLoader:AudioLoader,AxesHelper:AxesHelper,AxisHelper:AxisHelper,BackSide:BackSide,BasicDepthPacking:BasicDepthPacking,BasicShadowMap:BasicShadowMap,BinaryTextureLoader:BinaryTextureLoader,Bone:Bone,BooleanKeyframeTrack:BooleanKeyframeTrack,BoundingBoxHelper:BoundingBoxHelper,Box2:Box2,Box3:Box3,Box3Helper:Box3Helper,BoxBufferGeometry:BoxGeometry,BoxGeometry:BoxGeometry,BoxHelper:BoxHelper,BufferAttribute:BufferAttribute,BufferGeometry:BufferGeometry,BufferGeometryLoader:BufferGeometryLoader,ByteType:ByteType,Cache:Cache,Camera:Camera$1,CameraHelper:CameraHelper,CanvasRenderer:CanvasRenderer,CanvasTexture:CanvasTexture,CatmullRomCurve3:CatmullRomCurve3,CineonToneMapping:CineonToneMapping,CircleBufferGeometry:CircleGeometry,CircleGeometry:CircleGeometry,ClampToEdgeWrapping:ClampToEdgeWrapping,Clock:Clock,Color:Color$1,ColorKeyframeTrack:ColorKeyframeTrack,CompressedTexture:CompressedTexture,CompressedTextureLoader:CompressedTextureLoader,ConeBufferGeometry:ConeGeometry,ConeGeometry:ConeGeometry,CubeCamera:CubeCamera,CubeReflectionMapping:CubeReflectionMapping,CubeRefractionMapping:CubeRefractionMapping,CubeTexture:CubeTexture,CubeTextureLoader:CubeTextureLoader,CubeUVReflectionMapping:CubeUVReflectionMapping,CubeUVRefractionMapping:CubeUVRefractionMapping,CubicBezierCurve:CubicBezierCurve,CubicBezierCurve3:CubicBezierCurve3,CubicInterpolant:CubicInterpolant,CullFaceBack:CullFaceBack,CullFaceFront:CullFaceFront,CullFaceFrontBack:CullFaceFrontBack,CullFaceNone:CullFaceNone,Curve:Curve,CurvePath:CurvePath,CustomBlending:CustomBlending,CustomToneMapping:CustomToneMapping,CylinderBufferGeometry:CylinderGeometry,CylinderGeometry:CylinderGeometry,Cylindrical:Cylindrical,DataTexture:DataTexture,DataTexture2DArray:DataTexture2DArray,DataTexture3D:DataTexture3D,DataTextureLoader:DataTextureLoader,DataUtils:DataUtils,DecrementStencilOp:DecrementStencilOp,DecrementWrapStencilOp:DecrementWrapStencilOp,DefaultLoadingManager:DefaultLoadingManager,DepthFormat:DepthFormat,DepthStencilFormat:DepthStencilFormat,DepthTexture:DepthTexture,DirectionalLight:DirectionalLight,DirectionalLightHelper:DirectionalLightHelper,DiscreteInterpolant:DiscreteInterpolant,DodecahedronBufferGeometry:DodecahedronGeometry,DodecahedronGeometry:DodecahedronGeometry,DoubleSide:DoubleSide,DstAlphaFactor:DstAlphaFactor,DstColorFactor:DstColorFactor,DynamicBufferAttribute:DynamicBufferAttribute,DynamicCopyUsage:DynamicCopyUsage,DynamicDrawUsage:DynamicDrawUsage,DynamicReadUsage:DynamicReadUsage,EdgesGeometry:EdgesGeometry,EdgesHelper:EdgesHelper,EllipseCurve:EllipseCurve,EqualDepth:EqualDepth,EqualStencilFunc:EqualStencilFunc,EquirectangularReflectionMapping:EquirectangularReflectionMapping,EquirectangularRefractionMapping:EquirectangularRefractionMapping,Euler:Euler,EventDispatcher:EventDispatcher,ExtrudeBufferGeometry:ExtrudeGeometry,ExtrudeGeometry:ExtrudeGeometry,FaceColors:FaceColors,FileLoader:FileLoader,FlatShading:FlatShading,Float16BufferAttribute:Float16BufferAttribute,Float32Attribute:Float32Attribute,Float32BufferAttribute:Float32BufferAttribute,Float64Attribute:Float64Attribute,Float64BufferAttribute:Float64BufferAttribute,FloatType:FloatType$1,Fog:Fog,FogExp2:FogExp2,Font:Font,FontLoader:FontLoader,FrontSide:FrontSide,Frustum:Frustum$1,GLBufferAttribute:GLBufferAttribute,GLSL1:GLSL1,GLSL3:GLSL3,GammaEncoding:GammaEncoding,GreaterDepth:GreaterDepth,GreaterEqualDepth:GreaterEqualDepth,GreaterEqualStencilFunc:GreaterEqualStencilFunc,GreaterStencilFunc:GreaterStencilFunc,GridHelper:GridHelper,Group:Group,HalfFloatType:HalfFloatType,HemisphereLight:HemisphereLight$1,HemisphereLightHelper:HemisphereLightHelper,HemisphereLightProbe:HemisphereLightProbe,IcosahedronBufferGeometry:IcosahedronGeometry,IcosahedronGeometry:IcosahedronGeometry,ImageBitmapLoader:ImageBitmapLoader,ImageLoader:ImageLoader,ImageUtils:ImageUtils,ImmediateRenderObject:ImmediateRenderObject,IncrementStencilOp:IncrementStencilOp,IncrementWrapStencilOp:IncrementWrapStencilOp,InstancedBufferAttribute:InstancedBufferAttribute,InstancedBufferGeometry:InstancedBufferGeometry,InstancedInterleavedBuffer:InstancedInterleavedBuffer,InstancedMesh:InstancedMesh,Int16Attribute:Int16Attribute,Int16BufferAttribute:Int16BufferAttribute,Int32Attribute:Int32Attribute,Int32BufferAttribute:Int32BufferAttribute,Int8Attribute:Int8Attribute,Int8BufferAttribute:Int8BufferAttribute,IntType:IntType,InterleavedBuffer:InterleavedBuffer,InterleavedBufferAttribute:InterleavedBufferAttribute,Interpolant:Interpolant,InterpolateDiscrete:InterpolateDiscrete,InterpolateLinear:InterpolateLinear,InterpolateSmooth:InterpolateSmooth,InvertStencilOp:InvertStencilOp,JSONLoader:JSONLoader,KeepStencilOp:KeepStencilOp,KeyframeTrack:KeyframeTrack,LOD:LOD,LatheBufferGeometry:LatheGeometry,LatheGeometry:LatheGeometry,Layers:Layers,LensFlare:LensFlare,LessDepth:LessDepth,LessEqualDepth:LessEqualDepth,LessEqualStencilFunc:LessEqualStencilFunc,LessStencilFunc:LessStencilFunc,Light:Light$1,LightProbe:LightProbe,Line:Line$1,Line3:Line3,LineBasicMaterial:LineBasicMaterial,LineCurve:LineCurve,LineCurve3:LineCurve3,LineDashedMaterial:LineDashedMaterial,LineLoop:LineLoop,LinePieces:LinePieces,LineSegments:LineSegments,LineStrip:LineStrip,LinearEncoding:LinearEncoding,LinearFilter:LinearFilter,LinearInterpolant:LinearInterpolant,LinearMipMapLinearFilter:LinearMipMapLinearFilter,LinearMipMapNearestFilter:LinearMipMapNearestFilter,LinearMipmapLinearFilter:LinearMipmapLinearFilter,LinearMipmapNearestFilter:LinearMipmapNearestFilter,LinearToneMapping:LinearToneMapping,Loader:Loader$1,LoaderUtils:LoaderUtils,LoadingManager:LoadingManager,LogLuvEncoding:LogLuvEncoding,LoopOnce:LoopOnce,LoopPingPong:LoopPingPong,LoopRepeat:LoopRepeat,LuminanceAlphaFormat:LuminanceAlphaFormat,LuminanceFormat:LuminanceFormat,MOUSE:MOUSE,Material:Material,MaterialLoader:MaterialLoader,Math:MathUtils,MathUtils:MathUtils,Matrix3:Matrix3,Matrix4:Matrix4,MaxEquation:MaxEquation,Mesh:Mesh,MeshBasicMaterial:MeshBasicMaterial,MeshDepthMaterial:MeshDepthMaterial,MeshDistanceMaterial:MeshDistanceMaterial,MeshFaceMaterial:MeshFaceMaterial,MeshLambertMaterial:MeshLambertMaterial,MeshMatcapMaterial:MeshMatcapMaterial,MeshNormalMaterial:MeshNormalMaterial,MeshPhongMaterial:MeshPhongMaterial,MeshPhysicalMaterial:MeshPhysicalMaterial,MeshStandardMaterial:MeshStandardMaterial,MeshToonMaterial:MeshToonMaterial,MinEquation:MinEquation,MirroredRepeatWrapping:MirroredRepeatWrapping,MixOperation:MixOperation,MultiMaterial:MultiMaterial,MultiplyBlending:MultiplyBlending,MultiplyOperation:MultiplyOperation,NearestFilter:NearestFilter,NearestMipMapLinearFilter:NearestMipMapLinearFilter,NearestMipMapNearestFilter:NearestMipMapNearestFilter,NearestMipmapLinearFilter:NearestMipmapLinearFilter,NearestMipmapNearestFilter:NearestMipmapNearestFilter,NeverDepth:NeverDepth,NeverStencilFunc:NeverStencilFunc,NoBlending:NoBlending,NoColors:NoColors,NoToneMapping:NoToneMapping,NormalAnimationBlendMode:NormalAnimationBlendMode,NormalBlending:NormalBlending,NotEqualDepth:NotEqualDepth,NotEqualStencilFunc:NotEqualStencilFunc,NumberKeyframeTrack:NumberKeyframeTrack,Object3D:Object3D,ObjectLoader:ObjectLoader,ObjectSpaceNormalMap:ObjectSpaceNormalMap,OctahedronBufferGeometry:OctahedronGeometry,OctahedronGeometry:OctahedronGeometry,OneFactor:OneFactor,OneMinusDstAlphaFactor:OneMinusDstAlphaFactor,OneMinusDstColorFactor:OneMinusDstColorFactor,OneMinusSrcAlphaFactor:OneMinusSrcAlphaFactor,OneMinusSrcColorFactor:OneMinusSrcColorFactor,OrthographicCamera:OrthographicCamera,PCFShadowMap:PCFShadowMap,PCFSoftShadowMap:PCFSoftShadowMap,PMREMGenerator:PMREMGenerator,ParametricBufferGeometry:ParametricGeometry,ParametricGeometry:ParametricGeometry,Particle:Particle,ParticleBasicMaterial:ParticleBasicMaterial,ParticleSystem:ParticleSystem,ParticleSystemMaterial:ParticleSystemMaterial,Path:Path,PerspectiveCamera:PerspectiveCamera,Plane:Plane$1,PlaneBufferGeometry:PlaneGeometry,PlaneGeometry:PlaneGeometry,PlaneHelper:PlaneHelper,PointCloud:PointCloud,PointCloudMaterial:PointCloudMaterial,PointLight:PointLight$1,PointLightHelper:PointLightHelper,Points:Points,PointsMaterial:PointsMaterial,PolarGridHelper:PolarGridHelper,PolyhedronBufferGeometry:PolyhedronGeometry,PolyhedronGeometry:PolyhedronGeometry,PositionalAudio:PositionalAudio,PropertyBinding:PropertyBinding,PropertyMixer:PropertyMixer,QuadraticBezierCurve:QuadraticBezierCurve,QuadraticBezierCurve3:QuadraticBezierCurve3,Quaternion:Quaternion,QuaternionKeyframeTrack:QuaternionKeyframeTrack,QuaternionLinearInterpolant:QuaternionLinearInterpolant,REVISION:REVISION,RGBADepthPacking:RGBADepthPacking,RGBAFormat:RGBAFormat,RGBAIntegerFormat:RGBAIntegerFormat,RGBA_ASTC_10x10_Format:RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format:RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format:RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format:RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format:RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format:RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format:RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format:RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format:RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format:RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format:RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format:RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format:RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format:RGBA_ASTC_8x8_Format,RGBA_BPTC_Format:RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format:RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format:RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format:RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format:RGBA_S3TC_DXT5_Format,RGBDEncoding:RGBDEncoding,RGBEEncoding:RGBEEncoding,RGBEFormat:RGBEFormat,RGBFormat:RGBFormat,RGBIntegerFormat:RGBIntegerFormat,RGBM16Encoding:RGBM16Encoding,RGBM7Encoding:RGBM7Encoding,RGB_ETC1_Format:RGB_ETC1_Format,RGB_ETC2_Format:RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format:RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format:RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:RGB_S3TC_DXT1_Format,RGFormat:RGFormat,RGIntegerFormat:RGIntegerFormat,RawShaderMaterial:RawShaderMaterial,Ray:Ray,Raycaster:Raycaster,RectAreaLight:RectAreaLight,RedFormat:RedFormat,RedIntegerFormat:RedIntegerFormat,ReinhardToneMapping:ReinhardToneMapping,RepeatWrapping:RepeatWrapping$1,ReplaceStencilOp:ReplaceStencilOp,ReverseSubtractEquation:ReverseSubtractEquation,RingBufferGeometry:RingGeometry,RingGeometry:RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format:SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format:SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format:SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format:SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format:SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format:SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format:SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format:SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format:SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format:SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format:SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format:SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format:SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format:SRGB8_ALPHA8_ASTC_8x8_Format,Scene:Scene$2,SceneUtils:SceneUtils,ShaderChunk:ShaderChunk,ShaderLib:ShaderLib,ShaderMaterial:ShaderMaterial,ShadowMaterial:ShadowMaterial,Shape:Shape,ShapeBufferGeometry:ShapeGeometry,ShapeGeometry:ShapeGeometry,ShapePath:ShapePath,ShapeUtils:ShapeUtils,ShortType:ShortType,Skeleton:Skeleton,SkeletonHelper:SkeletonHelper,SkinnedMesh:SkinnedMesh,SmoothShading:SmoothShading,Sphere:Sphere$1,SphereBufferGeometry:SphereGeometry,SphereGeometry:SphereGeometry,Spherical:Spherical,SphericalHarmonics3:SphericalHarmonics3,SplineCurve:SplineCurve,SpotLight:SpotLight$1,SpotLightHelper:SpotLightHelper,Sprite:Sprite$1,SpriteMaterial:SpriteMaterial,SrcAlphaFactor:SrcAlphaFactor,SrcAlphaSaturateFactor:SrcAlphaSaturateFactor,SrcColorFactor:SrcColorFactor,StaticCopyUsage:StaticCopyUsage,StaticDrawUsage:StaticDrawUsage,StaticReadUsage:StaticReadUsage,StereoCamera:StereoCamera,StreamCopyUsage:StreamCopyUsage,StreamDrawUsage:StreamDrawUsage,StreamReadUsage:StreamReadUsage,StringKeyframeTrack:StringKeyframeTrack,SubtractEquation:SubtractEquation,SubtractiveBlending:SubtractiveBlending,TOUCH:TOUCH,TangentSpaceNormalMap:TangentSpaceNormalMap,TetrahedronBufferGeometry:TetrahedronGeometry,TetrahedronGeometry:TetrahedronGeometry,TextBufferGeometry:TextGeometry,TextGeometry:TextGeometry,Texture:Texture,TextureLoader:TextureLoader,TorusBufferGeometry:TorusGeometry,TorusGeometry:TorusGeometry,TorusKnotBufferGeometry:TorusKnotGeometry,TorusKnotGeometry:TorusKnotGeometry,Triangle:Triangle,TriangleFanDrawMode:TriangleFanDrawMode,TriangleStripDrawMode:TriangleStripDrawMode,TrianglesDrawMode:TrianglesDrawMode,TubeBufferGeometry:TubeGeometry,TubeGeometry:TubeGeometry,UVMapping:UVMapping,Uint16Attribute:Uint16Attribute,Uint16BufferAttribute:Uint16BufferAttribute,Uint32Attribute:Uint32Attribute,Uint32BufferAttribute:Uint32BufferAttribute,Uint8Attribute:Uint8Attribute,Uint8BufferAttribute:Uint8BufferAttribute,Uint8ClampedAttribute:Uint8ClampedAttribute,Uint8ClampedBufferAttribute:Uint8ClampedBufferAttribute,Uniform:Uniform,UniformsLib:UniformsLib,UniformsUtils:UniformsUtils,UnsignedByteType:UnsignedByteType,UnsignedInt248Type:UnsignedInt248Type,UnsignedIntType:UnsignedIntType,UnsignedShort4444Type:UnsignedShort4444Type,UnsignedShort5551Type:UnsignedShort5551Type,UnsignedShort565Type:UnsignedShort565Type,UnsignedShortType:UnsignedShortType,VSMShadowMap:VSMShadowMap,Vector2:Vector2,Vector3:Vector3$1,Vector4:Vector4,VectorKeyframeTrack:VectorKeyframeTrack,Vertex:Vertex,VertexColors:VertexColors,VideoTexture:VideoTexture,WebGL1Renderer:WebGL1Renderer,WebGLCubeRenderTarget:WebGLCubeRenderTarget,WebGLMultisampleRenderTarget:WebGLMultisampleRenderTarget,WebGLRenderTarget:WebGLRenderTarget,WebGLRenderTargetCube:WebGLRenderTargetCube,WebGLRenderer:WebGLRenderer,WebGLUtils:WebGLUtils,WireframeGeometry:WireframeGeometry,WireframeHelper:WireframeHelper,WrapAroundEnding:WrapAroundEnding,XHRLoader:XHRLoader,ZeroCurvatureEnding:ZeroCurvatureEnding,ZeroFactor:ZeroFactor,ZeroSlopeEnding:ZeroSlopeEnding,ZeroStencilOp:ZeroStencilOp,sRGBEncoding:sRGBEncoding});var PREFIX = '[Mage]';
|
|
53587
|
+
}var three_module=/*#__PURE__*/Object.freeze({__proto__:null,ACESFilmicToneMapping:ACESFilmicToneMapping,AddEquation:AddEquation,AddOperation:AddOperation,AdditiveAnimationBlendMode:AdditiveAnimationBlendMode,AdditiveBlending:AdditiveBlending,AlphaFormat:AlphaFormat,AlwaysDepth:AlwaysDepth,AlwaysStencilFunc:AlwaysStencilFunc,AmbientLight:AmbientLight$1,AmbientLightProbe:AmbientLightProbe,AnimationClip:AnimationClip,AnimationLoader:AnimationLoader,AnimationMixer:AnimationMixer,AnimationObjectGroup:AnimationObjectGroup,AnimationUtils:AnimationUtils,ArcCurve:ArcCurve,ArrayCamera:ArrayCamera,ArrowHelper:ArrowHelper,Audio:Audio$2,AudioAnalyser:AudioAnalyser,AudioContext:AudioContext,AudioListener:AudioListener,AudioLoader:AudioLoader,AxesHelper:AxesHelper$1,AxisHelper:AxisHelper,BackSide:BackSide,BasicDepthPacking:BasicDepthPacking,BasicShadowMap:BasicShadowMap,BinaryTextureLoader:BinaryTextureLoader,Bone:Bone,BooleanKeyframeTrack:BooleanKeyframeTrack,BoundingBoxHelper:BoundingBoxHelper,Box2:Box2,Box3:Box3,Box3Helper:Box3Helper,BoxBufferGeometry:BoxGeometry,BoxGeometry:BoxGeometry,BoxHelper:BoxHelper,BufferAttribute:BufferAttribute,BufferGeometry:BufferGeometry,BufferGeometryLoader:BufferGeometryLoader,ByteType:ByteType,Cache:Cache,Camera:Camera$1,CameraHelper:CameraHelper,CanvasRenderer:CanvasRenderer,CanvasTexture:CanvasTexture,CatmullRomCurve3:CatmullRomCurve3,CineonToneMapping:CineonToneMapping,CircleBufferGeometry:CircleGeometry,CircleGeometry:CircleGeometry,ClampToEdgeWrapping:ClampToEdgeWrapping,Clock:Clock,Color:Color$1,ColorKeyframeTrack:ColorKeyframeTrack,CompressedTexture:CompressedTexture,CompressedTextureLoader:CompressedTextureLoader,ConeBufferGeometry:ConeGeometry,ConeGeometry:ConeGeometry,CubeCamera:CubeCamera,CubeReflectionMapping:CubeReflectionMapping,CubeRefractionMapping:CubeRefractionMapping,CubeTexture:CubeTexture,CubeTextureLoader:CubeTextureLoader,CubeUVReflectionMapping:CubeUVReflectionMapping,CubeUVRefractionMapping:CubeUVRefractionMapping,CubicBezierCurve:CubicBezierCurve,CubicBezierCurve3:CubicBezierCurve3,CubicInterpolant:CubicInterpolant,CullFaceBack:CullFaceBack,CullFaceFront:CullFaceFront,CullFaceFrontBack:CullFaceFrontBack,CullFaceNone:CullFaceNone,Curve:Curve,CurvePath:CurvePath,CustomBlending:CustomBlending,CustomToneMapping:CustomToneMapping,CylinderBufferGeometry:CylinderGeometry,CylinderGeometry:CylinderGeometry,Cylindrical:Cylindrical,DataTexture:DataTexture,DataTexture2DArray:DataTexture2DArray,DataTexture3D:DataTexture3D,DataTextureLoader:DataTextureLoader,DataUtils:DataUtils,DecrementStencilOp:DecrementStencilOp,DecrementWrapStencilOp:DecrementWrapStencilOp,DefaultLoadingManager:DefaultLoadingManager,DepthFormat:DepthFormat,DepthStencilFormat:DepthStencilFormat,DepthTexture:DepthTexture,DirectionalLight:DirectionalLight,DirectionalLightHelper:DirectionalLightHelper,DiscreteInterpolant:DiscreteInterpolant,DodecahedronBufferGeometry:DodecahedronGeometry,DodecahedronGeometry:DodecahedronGeometry,DoubleSide:DoubleSide,DstAlphaFactor:DstAlphaFactor,DstColorFactor:DstColorFactor,DynamicBufferAttribute:DynamicBufferAttribute,DynamicCopyUsage:DynamicCopyUsage,DynamicDrawUsage:DynamicDrawUsage,DynamicReadUsage:DynamicReadUsage,EdgesGeometry:EdgesGeometry,EdgesHelper:EdgesHelper,EllipseCurve:EllipseCurve,EqualDepth:EqualDepth,EqualStencilFunc:EqualStencilFunc,EquirectangularReflectionMapping:EquirectangularReflectionMapping,EquirectangularRefractionMapping:EquirectangularRefractionMapping,Euler:Euler,EventDispatcher:EventDispatcher,ExtrudeBufferGeometry:ExtrudeGeometry,ExtrudeGeometry:ExtrudeGeometry,FaceColors:FaceColors,FileLoader:FileLoader,FlatShading:FlatShading,Float16BufferAttribute:Float16BufferAttribute,Float32Attribute:Float32Attribute,Float32BufferAttribute:Float32BufferAttribute,Float64Attribute:Float64Attribute,Float64BufferAttribute:Float64BufferAttribute,FloatType:FloatType$1,Fog:Fog,FogExp2:FogExp2,Font:Font,FontLoader:FontLoader,FrontSide:FrontSide,Frustum:Frustum$1,GLBufferAttribute:GLBufferAttribute,GLSL1:GLSL1,GLSL3:GLSL3,GammaEncoding:GammaEncoding,GreaterDepth:GreaterDepth,GreaterEqualDepth:GreaterEqualDepth,GreaterEqualStencilFunc:GreaterEqualStencilFunc,GreaterStencilFunc:GreaterStencilFunc,GridHelper:GridHelper,Group:Group,HalfFloatType:HalfFloatType,HemisphereLight:HemisphereLight$1,HemisphereLightHelper:HemisphereLightHelper,HemisphereLightProbe:HemisphereLightProbe,IcosahedronBufferGeometry:IcosahedronGeometry,IcosahedronGeometry:IcosahedronGeometry,ImageBitmapLoader:ImageBitmapLoader,ImageLoader:ImageLoader,ImageUtils:ImageUtils,ImmediateRenderObject:ImmediateRenderObject,IncrementStencilOp:IncrementStencilOp,IncrementWrapStencilOp:IncrementWrapStencilOp,InstancedBufferAttribute:InstancedBufferAttribute,InstancedBufferGeometry:InstancedBufferGeometry,InstancedInterleavedBuffer:InstancedInterleavedBuffer,InstancedMesh:InstancedMesh,Int16Attribute:Int16Attribute,Int16BufferAttribute:Int16BufferAttribute,Int32Attribute:Int32Attribute,Int32BufferAttribute:Int32BufferAttribute,Int8Attribute:Int8Attribute,Int8BufferAttribute:Int8BufferAttribute,IntType:IntType,InterleavedBuffer:InterleavedBuffer,InterleavedBufferAttribute:InterleavedBufferAttribute,Interpolant:Interpolant,InterpolateDiscrete:InterpolateDiscrete,InterpolateLinear:InterpolateLinear,InterpolateSmooth:InterpolateSmooth,InvertStencilOp:InvertStencilOp,JSONLoader:JSONLoader,KeepStencilOp:KeepStencilOp,KeyframeTrack:KeyframeTrack,LOD:LOD,LatheBufferGeometry:LatheGeometry,LatheGeometry:LatheGeometry,Layers:Layers,LensFlare:LensFlare,LessDepth:LessDepth,LessEqualDepth:LessEqualDepth,LessEqualStencilFunc:LessEqualStencilFunc,LessStencilFunc:LessStencilFunc,Light:Light$1,LightProbe:LightProbe,Line:Line$1,Line3:Line3,LineBasicMaterial:LineBasicMaterial,LineCurve:LineCurve,LineCurve3:LineCurve3,LineDashedMaterial:LineDashedMaterial,LineLoop:LineLoop,LinePieces:LinePieces,LineSegments:LineSegments,LineStrip:LineStrip,LinearEncoding:LinearEncoding,LinearFilter:LinearFilter,LinearInterpolant:LinearInterpolant,LinearMipMapLinearFilter:LinearMipMapLinearFilter,LinearMipMapNearestFilter:LinearMipMapNearestFilter,LinearMipmapLinearFilter:LinearMipmapLinearFilter,LinearMipmapNearestFilter:LinearMipmapNearestFilter,LinearToneMapping:LinearToneMapping,Loader:Loader$1,LoaderUtils:LoaderUtils,LoadingManager:LoadingManager,LogLuvEncoding:LogLuvEncoding,LoopOnce:LoopOnce,LoopPingPong:LoopPingPong,LoopRepeat:LoopRepeat,LuminanceAlphaFormat:LuminanceAlphaFormat,LuminanceFormat:LuminanceFormat,MOUSE:MOUSE,Material:Material,MaterialLoader:MaterialLoader,Math:MathUtils,MathUtils:MathUtils,Matrix3:Matrix3,Matrix4:Matrix4,MaxEquation:MaxEquation,Mesh:Mesh,MeshBasicMaterial:MeshBasicMaterial,MeshDepthMaterial:MeshDepthMaterial,MeshDistanceMaterial:MeshDistanceMaterial,MeshFaceMaterial:MeshFaceMaterial,MeshLambertMaterial:MeshLambertMaterial,MeshMatcapMaterial:MeshMatcapMaterial,MeshNormalMaterial:MeshNormalMaterial,MeshPhongMaterial:MeshPhongMaterial,MeshPhysicalMaterial:MeshPhysicalMaterial,MeshStandardMaterial:MeshStandardMaterial,MeshToonMaterial:MeshToonMaterial,MinEquation:MinEquation,MirroredRepeatWrapping:MirroredRepeatWrapping,MixOperation:MixOperation,MultiMaterial:MultiMaterial,MultiplyBlending:MultiplyBlending,MultiplyOperation:MultiplyOperation,NearestFilter:NearestFilter,NearestMipMapLinearFilter:NearestMipMapLinearFilter,NearestMipMapNearestFilter:NearestMipMapNearestFilter,NearestMipmapLinearFilter:NearestMipmapLinearFilter,NearestMipmapNearestFilter:NearestMipmapNearestFilter,NeverDepth:NeverDepth,NeverStencilFunc:NeverStencilFunc,NoBlending:NoBlending,NoColors:NoColors,NoToneMapping:NoToneMapping,NormalAnimationBlendMode:NormalAnimationBlendMode,NormalBlending:NormalBlending,NotEqualDepth:NotEqualDepth,NotEqualStencilFunc:NotEqualStencilFunc,NumberKeyframeTrack:NumberKeyframeTrack,Object3D:Object3D,ObjectLoader:ObjectLoader,ObjectSpaceNormalMap:ObjectSpaceNormalMap,OctahedronBufferGeometry:OctahedronGeometry,OctahedronGeometry:OctahedronGeometry,OneFactor:OneFactor,OneMinusDstAlphaFactor:OneMinusDstAlphaFactor,OneMinusDstColorFactor:OneMinusDstColorFactor,OneMinusSrcAlphaFactor:OneMinusSrcAlphaFactor,OneMinusSrcColorFactor:OneMinusSrcColorFactor,OrthographicCamera:OrthographicCamera,PCFShadowMap:PCFShadowMap,PCFSoftShadowMap:PCFSoftShadowMap,PMREMGenerator:PMREMGenerator,ParametricBufferGeometry:ParametricGeometry,ParametricGeometry:ParametricGeometry,Particle:Particle,ParticleBasicMaterial:ParticleBasicMaterial,ParticleSystem:ParticleSystem,ParticleSystemMaterial:ParticleSystemMaterial,Path:Path,PerspectiveCamera:PerspectiveCamera,Plane:Plane$1,PlaneBufferGeometry:PlaneGeometry,PlaneGeometry:PlaneGeometry,PlaneHelper:PlaneHelper,PointCloud:PointCloud,PointCloudMaterial:PointCloudMaterial,PointLight:PointLight$1,PointLightHelper:PointLightHelper,Points:Points,PointsMaterial:PointsMaterial,PolarGridHelper:PolarGridHelper,PolyhedronBufferGeometry:PolyhedronGeometry,PolyhedronGeometry:PolyhedronGeometry,PositionalAudio:PositionalAudio,PropertyBinding:PropertyBinding,PropertyMixer:PropertyMixer,QuadraticBezierCurve:QuadraticBezierCurve,QuadraticBezierCurve3:QuadraticBezierCurve3,Quaternion:Quaternion,QuaternionKeyframeTrack:QuaternionKeyframeTrack,QuaternionLinearInterpolant:QuaternionLinearInterpolant,REVISION:REVISION,RGBADepthPacking:RGBADepthPacking,RGBAFormat:RGBAFormat,RGBAIntegerFormat:RGBAIntegerFormat,RGBA_ASTC_10x10_Format:RGBA_ASTC_10x10_Format,RGBA_ASTC_10x5_Format:RGBA_ASTC_10x5_Format,RGBA_ASTC_10x6_Format:RGBA_ASTC_10x6_Format,RGBA_ASTC_10x8_Format:RGBA_ASTC_10x8_Format,RGBA_ASTC_12x10_Format:RGBA_ASTC_12x10_Format,RGBA_ASTC_12x12_Format:RGBA_ASTC_12x12_Format,RGBA_ASTC_4x4_Format:RGBA_ASTC_4x4_Format,RGBA_ASTC_5x4_Format:RGBA_ASTC_5x4_Format,RGBA_ASTC_5x5_Format:RGBA_ASTC_5x5_Format,RGBA_ASTC_6x5_Format:RGBA_ASTC_6x5_Format,RGBA_ASTC_6x6_Format:RGBA_ASTC_6x6_Format,RGBA_ASTC_8x5_Format:RGBA_ASTC_8x5_Format,RGBA_ASTC_8x6_Format:RGBA_ASTC_8x6_Format,RGBA_ASTC_8x8_Format:RGBA_ASTC_8x8_Format,RGBA_BPTC_Format:RGBA_BPTC_Format,RGBA_ETC2_EAC_Format:RGBA_ETC2_EAC_Format,RGBA_PVRTC_2BPPV1_Format:RGBA_PVRTC_2BPPV1_Format,RGBA_PVRTC_4BPPV1_Format:RGBA_PVRTC_4BPPV1_Format,RGBA_S3TC_DXT1_Format:RGBA_S3TC_DXT1_Format,RGBA_S3TC_DXT3_Format:RGBA_S3TC_DXT3_Format,RGBA_S3TC_DXT5_Format:RGBA_S3TC_DXT5_Format,RGBDEncoding:RGBDEncoding,RGBEEncoding:RGBEEncoding,RGBEFormat:RGBEFormat,RGBFormat:RGBFormat,RGBIntegerFormat:RGBIntegerFormat,RGBM16Encoding:RGBM16Encoding,RGBM7Encoding:RGBM7Encoding,RGB_ETC1_Format:RGB_ETC1_Format,RGB_ETC2_Format:RGB_ETC2_Format,RGB_PVRTC_2BPPV1_Format:RGB_PVRTC_2BPPV1_Format,RGB_PVRTC_4BPPV1_Format:RGB_PVRTC_4BPPV1_Format,RGB_S3TC_DXT1_Format:RGB_S3TC_DXT1_Format,RGFormat:RGFormat,RGIntegerFormat:RGIntegerFormat,RawShaderMaterial:RawShaderMaterial,Ray:Ray,Raycaster:Raycaster,RectAreaLight:RectAreaLight,RedFormat:RedFormat,RedIntegerFormat:RedIntegerFormat,ReinhardToneMapping:ReinhardToneMapping,RepeatWrapping:RepeatWrapping$1,ReplaceStencilOp:ReplaceStencilOp,ReverseSubtractEquation:ReverseSubtractEquation,RingBufferGeometry:RingGeometry,RingGeometry:RingGeometry,SRGB8_ALPHA8_ASTC_10x10_Format:SRGB8_ALPHA8_ASTC_10x10_Format,SRGB8_ALPHA8_ASTC_10x5_Format:SRGB8_ALPHA8_ASTC_10x5_Format,SRGB8_ALPHA8_ASTC_10x6_Format:SRGB8_ALPHA8_ASTC_10x6_Format,SRGB8_ALPHA8_ASTC_10x8_Format:SRGB8_ALPHA8_ASTC_10x8_Format,SRGB8_ALPHA8_ASTC_12x10_Format:SRGB8_ALPHA8_ASTC_12x10_Format,SRGB8_ALPHA8_ASTC_12x12_Format:SRGB8_ALPHA8_ASTC_12x12_Format,SRGB8_ALPHA8_ASTC_4x4_Format:SRGB8_ALPHA8_ASTC_4x4_Format,SRGB8_ALPHA8_ASTC_5x4_Format:SRGB8_ALPHA8_ASTC_5x4_Format,SRGB8_ALPHA8_ASTC_5x5_Format:SRGB8_ALPHA8_ASTC_5x5_Format,SRGB8_ALPHA8_ASTC_6x5_Format:SRGB8_ALPHA8_ASTC_6x5_Format,SRGB8_ALPHA8_ASTC_6x6_Format:SRGB8_ALPHA8_ASTC_6x6_Format,SRGB8_ALPHA8_ASTC_8x5_Format:SRGB8_ALPHA8_ASTC_8x5_Format,SRGB8_ALPHA8_ASTC_8x6_Format:SRGB8_ALPHA8_ASTC_8x6_Format,SRGB8_ALPHA8_ASTC_8x8_Format:SRGB8_ALPHA8_ASTC_8x8_Format,Scene:Scene$2,SceneUtils:SceneUtils,ShaderChunk:ShaderChunk,ShaderLib:ShaderLib,ShaderMaterial:ShaderMaterial,ShadowMaterial:ShadowMaterial,Shape:Shape,ShapeBufferGeometry:ShapeGeometry,ShapeGeometry:ShapeGeometry,ShapePath:ShapePath,ShapeUtils:ShapeUtils,ShortType:ShortType,Skeleton:Skeleton,SkeletonHelper:SkeletonHelper,SkinnedMesh:SkinnedMesh,SmoothShading:SmoothShading,Sphere:Sphere$1,SphereBufferGeometry:SphereGeometry,SphereGeometry:SphereGeometry,Spherical:Spherical,SphericalHarmonics3:SphericalHarmonics3,SplineCurve:SplineCurve,SpotLight:SpotLight$1,SpotLightHelper:SpotLightHelper,Sprite:Sprite$1,SpriteMaterial:SpriteMaterial,SrcAlphaFactor:SrcAlphaFactor,SrcAlphaSaturateFactor:SrcAlphaSaturateFactor,SrcColorFactor:SrcColorFactor,StaticCopyUsage:StaticCopyUsage,StaticDrawUsage:StaticDrawUsage,StaticReadUsage:StaticReadUsage,StereoCamera:StereoCamera,StreamCopyUsage:StreamCopyUsage,StreamDrawUsage:StreamDrawUsage,StreamReadUsage:StreamReadUsage,StringKeyframeTrack:StringKeyframeTrack,SubtractEquation:SubtractEquation,SubtractiveBlending:SubtractiveBlending,TOUCH:TOUCH,TangentSpaceNormalMap:TangentSpaceNormalMap,TetrahedronBufferGeometry:TetrahedronGeometry,TetrahedronGeometry:TetrahedronGeometry,TextBufferGeometry:TextGeometry,TextGeometry:TextGeometry,Texture:Texture,TextureLoader:TextureLoader,TorusBufferGeometry:TorusGeometry,TorusGeometry:TorusGeometry,TorusKnotBufferGeometry:TorusKnotGeometry,TorusKnotGeometry:TorusKnotGeometry,Triangle:Triangle,TriangleFanDrawMode:TriangleFanDrawMode,TriangleStripDrawMode:TriangleStripDrawMode,TrianglesDrawMode:TrianglesDrawMode,TubeBufferGeometry:TubeGeometry,TubeGeometry:TubeGeometry,UVMapping:UVMapping,Uint16Attribute:Uint16Attribute,Uint16BufferAttribute:Uint16BufferAttribute,Uint32Attribute:Uint32Attribute,Uint32BufferAttribute:Uint32BufferAttribute,Uint8Attribute:Uint8Attribute,Uint8BufferAttribute:Uint8BufferAttribute,Uint8ClampedAttribute:Uint8ClampedAttribute,Uint8ClampedBufferAttribute:Uint8ClampedBufferAttribute,Uniform:Uniform,UniformsLib:UniformsLib,UniformsUtils:UniformsUtils,UnsignedByteType:UnsignedByteType,UnsignedInt248Type:UnsignedInt248Type,UnsignedIntType:UnsignedIntType,UnsignedShort4444Type:UnsignedShort4444Type,UnsignedShort5551Type:UnsignedShort5551Type,UnsignedShort565Type:UnsignedShort565Type,UnsignedShortType:UnsignedShortType,VSMShadowMap:VSMShadowMap,Vector2:Vector2,Vector3:Vector3$1,Vector4:Vector4,VectorKeyframeTrack:VectorKeyframeTrack,Vertex:Vertex,VertexColors:VertexColors,VideoTexture:VideoTexture,WebGL1Renderer:WebGL1Renderer,WebGLCubeRenderTarget:WebGLCubeRenderTarget,WebGLMultisampleRenderTarget:WebGLMultisampleRenderTarget,WebGLRenderTarget:WebGLRenderTarget,WebGLRenderTargetCube:WebGLRenderTargetCube,WebGLRenderer:WebGLRenderer,WebGLUtils:WebGLUtils,WireframeGeometry:WireframeGeometry,WireframeHelper:WireframeHelper,WrapAroundEnding:WrapAroundEnding,XHRLoader:XHRLoader,ZeroCurvatureEnding:ZeroCurvatureEnding,ZeroFactor:ZeroFactor,ZeroSlopeEnding:ZeroSlopeEnding,ZeroStencilOp:ZeroStencilOp,sRGBEncoding:sRGBEncoding});var PREFIX = '[Mage]';
|
|
53588
|
+
var DEPRECATED = '[DEPRECATED]';
|
|
53546
53589
|
var DEPRECATIONS = {
|
|
53547
|
-
|
|
53548
|
-
|
|
53590
|
+
PARTICLES_ADD_PARTICLE_EMITTER: "".concat(PREFIX, " ").concat(DEPRECATED, " Particles.addParticleEmitter is deprecated, use Particles.add instead. Will be removed in the next major release"),
|
|
53591
|
+
MODELS_GETMODEL: "".concat(PREFIX, " ").concat(DEPRECATED, " Models.getModel is deprecated, use Models.get instead. Will be removed in next major release"),
|
|
53592
|
+
SCRIPTS_CREATE: "".concat(PREFIX, " ").concat(DEPRECATED, " Scripts.create is deprecated, use Scripts.register instead. Will be removed in next major release."),
|
|
53593
|
+
ELEMENT_SET_TEXTURE_MAP: "".concat(PREFIX, " ").concat(DEPRECATED, " Element.setTextureMap is deprecated, use Element.setTexture() instead. Will be removed in next major release.")
|
|
53549
53594
|
};
|
|
53550
53595
|
var ONCREATE_NOT_AVAILABLE = "".concat(PREFIX, " Your scene needs a onCreate method.");
|
|
53551
53596
|
var PATH_NOT_FOUND = "".concat(PREFIX, " can't find requested path");
|
|
@@ -53560,10 +53605,11 @@ var METHOD_NOT_SUPPORTED = "".concat(PREFIX, " This method is not supported.");
|
|
|
53560
53605
|
var ANIMATION_NOT_FOUND = "".concat(PREFIX, " Required animation can't be found.");
|
|
53561
53606
|
var ANIMATION_HANDLER_NOT_FOUND = "".concat(PREFIX, " AnimationHander hasn't been defined yet.");
|
|
53562
53607
|
var ELEMENT_NOT_SET$1 = "".concat(PREFIX, " Body hasn't been defined yet.");
|
|
53563
|
-
var ELEMENT_NAME_NOT_PROVIDED = "".concat(PREFIX, " Desired element name wasn't provided.");
|
|
53564
53608
|
var ELEMENT_SET_COLOR_MISSING_COLOR = "".concat(PREFIX, " Can't set color for this element, missing color");
|
|
53565
53609
|
var ELEMENT_MATERIAL_NO_SUPPORT_FOR_TEXTURE = "".concat(PREFIX, " This element's material does not support texture: ");
|
|
53610
|
+
var ENTITY_NOT_SET = "".concat(PREFIX, " This entity does not have a body.");
|
|
53566
53611
|
var ENTITY_TYPE_NOT_ALLOWED = "".concat(PREFIX, " The desired Entity type is not allowed.");
|
|
53612
|
+
var ENTITY_CANT_ADD_NOT_ENTITY = "".concat(PREFIX, " Entity.add requires an Entity.");
|
|
53567
53613
|
var ERROR_LOADING_TEXTURE = "".concat(PREFIX, " Error while loading texture:");
|
|
53568
53614
|
var TAG_CANT_BE_REMOVED = "".concat(PREFIX, " The default tag can't be removed.");
|
|
53569
53615
|
var TAG_ALREADY_EXISTS = "".concat(PREFIX, " The following tag has already been added: ");
|
|
@@ -53591,9 +53637,24 @@ var LIGHT_HOLDER_MODEL_NOT_FOUND = "".concat(PREFIX, " This light holder model c
|
|
|
53591
53637
|
}
|
|
53592
53638
|
}, {
|
|
53593
53639
|
key: "__hasStarted",
|
|
53594
|
-
value: function __hasStarted(
|
|
53640
|
+
value: function __hasStarted() {
|
|
53641
|
+
return this.hasStarted;
|
|
53642
|
+
}
|
|
53643
|
+
}, {
|
|
53644
|
+
key: "__isDisposed",
|
|
53645
|
+
value: function __isDisposed() {
|
|
53646
|
+
return this.isDisposed;
|
|
53647
|
+
}
|
|
53648
|
+
}, {
|
|
53649
|
+
key: "__setStartedFlag",
|
|
53650
|
+
value: function __setStartedFlag(flag) {
|
|
53595
53651
|
this.hasStarted = flag;
|
|
53596
53652
|
}
|
|
53653
|
+
}, {
|
|
53654
|
+
key: "__setDisposedFlag",
|
|
53655
|
+
value: function __setDisposedFlag(flag) {
|
|
53656
|
+
this.isDisposed = flag;
|
|
53657
|
+
}
|
|
53597
53658
|
}]);
|
|
53598
53659
|
|
|
53599
53660
|
function BaseScript(name) {
|
|
@@ -54476,9 +54537,8 @@ var Config$1 = new Config();var Universe = /*#__PURE__*/function () {
|
|
|
54476
54537
|
});
|
|
54477
54538
|
|
|
54478
54539
|
_defineProperty$1(this, "forEach", function (callback) {
|
|
54479
|
-
|
|
54480
|
-
|
|
54481
|
-
return callback(_this.reality[k]);
|
|
54540
|
+
Object.keys(_this.reality).forEach(function (k) {
|
|
54541
|
+
return callback(_this.reality[k], k);
|
|
54482
54542
|
});
|
|
54483
54543
|
});
|
|
54484
54544
|
|
|
@@ -54486,14 +54546,14 @@ var Config$1 = new Config();var Universe = /*#__PURE__*/function () {
|
|
|
54486
54546
|
var keys = Object.keys(_this.reality);
|
|
54487
54547
|
return new Promise(function (resolve) {
|
|
54488
54548
|
Promise.all(keys.map(function (k) {
|
|
54489
|
-
return callback(_this.reality[k]);
|
|
54549
|
+
return callback(_this.reality[k], k);
|
|
54490
54550
|
})).then(resolve);
|
|
54491
54551
|
});
|
|
54492
54552
|
});
|
|
54493
54553
|
|
|
54494
54554
|
_defineProperty$1(this, "bigfreeze", function () {
|
|
54495
54555
|
_this.forEach(function (o) {
|
|
54496
|
-
|
|
54556
|
+
o && o.dispose && o.dispose();
|
|
54497
54557
|
});
|
|
54498
54558
|
|
|
54499
54559
|
_this.reset();
|
|
@@ -54697,9 +54757,10 @@ var ROOT = '/';
|
|
|
54697
54757
|
var DIVIDER = '/';
|
|
54698
54758
|
var HASH = '#';
|
|
54699
54759
|
var EMPTY$1 = '';
|
|
54760
|
+
var QUERY_START = '?';
|
|
54700
54761
|
var DEFAULT_SELECTOR = '#gameContainer';
|
|
54701
54762
|
var BEFORE_UNLOAD = 'beforeunload';
|
|
54702
|
-
var HASH_CHANGE = 'hashchange';var lib_constants=/*#__PURE__*/Object.freeze({__proto__:null,UP:UP$1,DOWN:DOWN$1,LEFT:LEFT,RIGHT:RIGHT,FRONT:FRONT,BACK:BACK,VECTOR_UP:VECTOR_UP,VECTOR_DOWN:VECTOR_DOWN,VECTOR_LEFT:VECTOR_LEFT,VECTOR_RIGHT:VECTOR_RIGHT,VECTOR_FRONT:VECTOR_FRONT,VECTOR_BACK:VECTOR_BACK,ORIGIN:ORIGIN,ZERO_QUATERNION:ZERO_QUATERNION,MATERIALS:MATERIALS,TEXTURES:TEXTURES,EFFECTS:EFFECTS,COLLISION_EVENT:COLLISION_EVENT,COLORS:COLORS,ASSETS_TYPES:ASSETS_TYPES,OUTPUT_ENCODINGS:OUTPUT_ENCODINGS,DEFAULT_OUTPUT_ENCODING:DEFAULT_OUTPUT_ENCODING,ROOT:ROOT,DIVIDER:DIVIDER,HASH:HASH,EMPTY:EMPTY$1,DEFAULT_SELECTOR:DEFAULT_SELECTOR,BEFORE_UNLOAD:BEFORE_UNLOAD,HASH_CHANGE:HASH_CHANGE});var buildAssetId = function buildAssetId(name, level) {
|
|
54763
|
+
var HASH_CHANGE = 'hashchange';var lib_constants=/*#__PURE__*/Object.freeze({__proto__:null,UP:UP$1,DOWN:DOWN$1,LEFT:LEFT,RIGHT:RIGHT,FRONT:FRONT,BACK:BACK,VECTOR_UP:VECTOR_UP,VECTOR_DOWN:VECTOR_DOWN,VECTOR_LEFT:VECTOR_LEFT,VECTOR_RIGHT:VECTOR_RIGHT,VECTOR_FRONT:VECTOR_FRONT,VECTOR_BACK:VECTOR_BACK,ORIGIN:ORIGIN,ZERO_QUATERNION:ZERO_QUATERNION,MATERIALS:MATERIALS,TEXTURES:TEXTURES,EFFECTS:EFFECTS,COLLISION_EVENT:COLLISION_EVENT,COLORS:COLORS,ASSETS_TYPES:ASSETS_TYPES,OUTPUT_ENCODINGS:OUTPUT_ENCODINGS,DEFAULT_OUTPUT_ENCODING:DEFAULT_OUTPUT_ENCODING,ROOT:ROOT,DIVIDER:DIVIDER,HASH:HASH,EMPTY:EMPTY$1,QUERY_START:QUERY_START,DEFAULT_SELECTOR:DEFAULT_SELECTOR,BEFORE_UNLOAD:BEFORE_UNLOAD,HASH_CHANGE:HASH_CHANGE});var buildAssetId = function buildAssetId(name, level) {
|
|
54703
54764
|
return level ? "".concat(level, "_").concat(name) : name;
|
|
54704
54765
|
};
|
|
54705
54766
|
var isLevelName = function isLevelName(level) {
|
|
@@ -54865,7 +54926,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
54865
54926
|
url = url || createURL(base64, sourcemapArg, enableUnicodeArg);
|
|
54866
54927
|
return new Worker(url, options);
|
|
54867
54928
|
};
|
|
54868
|
-
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIEFQUExZOiB7CiAgICAgICAgICBJTVBVTFNFOiAncGh5c2ljczplbGVtZW50OmFwcGx5OmltcHVsc2UnCiAgICAgICAgfQogICAgICB9LAogICAgICBWRUhJQ0xFOiB7CiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6dmVoaWNsZTpzZXQ6cXVhdGVybmlvbicKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczp2ZWhpY2xlOnJlc2V0JywKICAgICAgICBTUEVFRDogJ3BoeXNpY3M6dmVoaWNsZTpzcGVlZCcsCiAgICAgICAgRElSRUNUSU9OOiAncGh5c2ljczp2ZWhpY2xlOmRpcmVjdGlvbicKICAgICAgfSwKICAgICAgRUZGRUNUUzogewogICAgICAgIEVYUExPU0lPTjogJ3BoeXNpY3M6ZWZmZWN0czpleHBsb3Npb24nCiAgICAgIH0KICAgIH07CgogICAgZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7CiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsKCiAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7CiAgICAgICAgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7CiAgICAgICAgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsKICAgICAgICB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGtleXM7CiAgICB9CgogICAgZnVuY3Rpb24gX29iamVjdFNwcmVhZDIodGFyZ2V0KSB7CiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307CiAgICAgICAgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7CiAgICAgICAgICBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsKICAgICAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7CiAgICAgICAgfSk7CiAgICAgIH0KCiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CgogICAgZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgewogICAgICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgewogICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgewogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsKICAgICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7CiAgICAgICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlOwogICAgICAgIGlmICgidmFsdWUiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOwogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsKICAgICAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7CiAgICAgIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCAicHJvdG90eXBlIiwgewogICAgICAgIHdyaXRhYmxlOiBmYWxzZQogICAgICB9KTsKICAgICAgcmV0dXJuIENvbnN0cnVjdG9yOwogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsKICAgICAgaWYgKGtleSBpbiBvYmopIHsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsKICAgICAgICAgIHZhbHVlOiB2YWx1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIG9ialtrZXldID0gdmFsdWU7CiAgICAgIH0KCiAgICAgIHJldHVybiBvYmo7CiAgICB9CgogICAgdmFyIERpc3BhdGNoZXIgPSBmdW5jdGlvbiBEaXNwYXRjaGVyKCkgewogICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgRGlzcGF0Y2hlcik7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRQaHlzaWNzVXBkYXRlIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5VUERBVEUsCiAgICAgICAgICBkdDogZHQKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRSZWFkeUV2ZW50IiwgZnVuY3Rpb24gKCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuUkVBRFkKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRUZXJtaW5hdGVFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlRFUk1JTkFURQogICAgICAgIH0pOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZEJvZHlVcGRhdGUiLCBmdW5jdGlvbiAodXVpZCwgcG9zaXRpb24sIHJvdGF0aW9uLCBkdCwgZXh0cmFEYXRhKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlVQREFURSwKICAgICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgICBwb3NpdGlvbjogewogICAgICAgICAgICB4OiBwb3NpdGlvbi54KCksCiAgICAgICAgICAgIHk6IHBvc2l0aW9uLnkoKSwKICAgICAgICAgICAgejogcG9zaXRpb24ueigpCiAgICAgICAgICB9LAogICAgICAgICAgcXVhdGVybmlvbjogewogICAgICAgICAgICB4OiByb3RhdGlvbi54KCksCiAgICAgICAgICAgIHk6IHJvdGF0aW9uLnkoKSwKICAgICAgICAgICAgejogcm90YXRpb24ueigpLAogICAgICAgICAgICB3OiByb3RhdGlvbi53KCkKICAgICAgICAgIH0KICAgICAgICB9LCBleHRyYURhdGEpLCB7fSwgewogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSkpOwogICAgICB9KTsKCiAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic2VuZERpc3BhdGNoRXZlbnQiLCBmdW5jdGlvbiAodXVpZCwgZXZlbnROYW1lLCBldmVudERhdGEpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLkRJU1BBVENILAogICAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICAgIGV2ZW50TmFtZTogZXZlbnROYW1lLAogICAgICAgICAgZXZlbnREYXRhOiBldmVudERhdGEKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGRpc3BhdGNoZXIkMSA9IG5ldyBEaXNwYXRjaGVyKCk7CgogICAgdmFyIGFwcGx5TWF0cml4NFRvVmVjdG9yMyA9IGZ1bmN0aW9uIGFwcGx5TWF0cml4NFRvVmVjdG9yMyhfcmVmKSB7CiAgICAgIHZhciBfcmVmJHggPSBfcmVmLngsCiAgICAgICAgICB4ID0gX3JlZiR4ID09PSB2b2lkIDAgPyAwIDogX3JlZiR4LAogICAgICAgICAgX3JlZiR5ID0gX3JlZi55LAogICAgICAgICAgeSA9IF9yZWYkeSA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeSwKICAgICAgICAgIF9yZWYkeiA9IF9yZWYueiwKICAgICAgICAgIHogPSBfcmVmJHogPT09IHZvaWQgMCA/IDAgOiBfcmVmJHo7CiAgICAgIHZhciBtYXRyaXggPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IFtdOwogICAgICB2YXIgdyA9IDEgLyAobWF0cml4WzNdICogeCArIG1hdHJpeFs3XSAqIHkgKyBtYXRyaXhbMTFdICogeiArIG1hdHJpeFsxNV0pOwogICAgICByZXR1cm4gewogICAgICAgIHg6IChtYXRyaXhbMF0gKiB4ICsgbWF0cml4WzRdICogeSArIG1hdHJpeFs4XSAqIHogKyBtYXRyaXhbMTJdKSAqIHcsCiAgICAgICAgeTogKG1hdHJpeFsxXSAqIHggKyBtYXRyaXhbNV0gKiB5ICsgbWF0cml4WzldICogeiArIG1hdHJpeFsxM10pICogdywKICAgICAgICB6OiAobWF0cml4WzJdICogeCArIG1hdHJpeFs2XSAqIHkgKyBtYXRyaXhbMTBdICogeiArIG1hdHJpeFsxNF0pICogdwogICAgICB9OwogICAgfTsKCiAgICB2YXIgY3JlYXRlUmlnaWRCb2R5ID0gZnVuY3Rpb24gY3JlYXRlUmlnaWRCb2R5KHNoYXBlLCBvcHRpb25zKSB7CiAgICAgIHZhciB1dWlkID0gb3B0aW9ucy51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9IG9wdGlvbnMucmVzdGl0dXRpb24sCiAgICAgICAgICByZXN0aXR1dGlvbiA9IF9vcHRpb25zJHJlc3RpdHV0aW9uID09PSB2b2lkIDAgPyAuOSA6IF9vcHRpb25zJHJlc3RpdHV0aW9uLAogICAgICAgICAgX29wdGlvbnMkZGFtcGluZyA9IG9wdGlvbnMuZGFtcGluZywKICAgICAgICAgIGRhbXBpbmcgPSBfb3B0aW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyB7CiAgICAgICAgbGluZWFyOiAwLjIsCiAgICAgICAgYW5ndWxhcjogMC4yCiAgICAgIH0gOiBfb3B0aW9ucyRkYW1waW5nOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgc2hhcGUuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciByYkluZm8gPSBuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIHNoYXBlLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgYm9keSA9IG5ldyBBbW1vLmJ0UmlnaWRCb2R5KHJiSW5mbyk7CgogICAgICBpZiAobWFzcyA+IDApIHsKICAgICAgICBib2R5LnNldEZyaWN0aW9uKGZyaWN0aW9uKTsKICAgICAgICBib2R5LnNldFJlc3RpdHV0aW9uKHJlc3RpdHV0aW9uKTsKICAgICAgICBib2R5LnNldERhbXBpbmcoZGFtcGluZy5saW5lYXIsIGRhbXBpbmcuYW5ndWxhcik7CiAgICAgICAgYm9keS5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB9IC8vIHN0b3JpbmcgdXVpZCBmb3IgZnV0dXJlIHJlZmVyZW5jZQoKCiAgICAgIGJvZHkudXVpZCA9IHV1aWQ7CiAgICAgIHdvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgcmV0dXJuIGJvZHk7CiAgICB9OwogICAgdmFyIGFkZE1vZGVsID0gZnVuY3Rpb24gYWRkTW9kZWwob3B0aW9ucykgewogICAgICB2YXIgdXVpZCA9IG9wdGlvbnMudXVpZCwKICAgICAgICAgIHZlcnRpY2VzID0gb3B0aW9ucy52ZXJ0aWNlcywKICAgICAgICAgIG1hdHJpY2VzID0gb3B0aW9ucy5tYXRyaWNlcywKICAgICAgICAgIGluZGV4ZXMgPSBvcHRpb25zLmluZGV4ZXMsCiAgICAgICAgICBwb3NpdGlvbiA9IG9wdGlvbnMucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gb3B0aW9ucy5xdWF0ZXJuaW9uLAogICAgICAgICAgX29wdGlvbnMkbWFzcyA9IG9wdGlvbnMubWFzcywKICAgICAgICAgIG1hc3MgPSBfb3B0aW9ucyRtYXNzID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkbWFzcywKICAgICAgICAgIF9vcHRpb25zJGZyaWN0aW9uID0gb3B0aW9ucy5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX29wdGlvbnMkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfb3B0aW9ucyRmcmljdGlvbjsKICAgICAgdmFyIHNjYWxlID0gREVGQVVMVF9TQ0FMRTsKICAgICAgdmFyIGJ0YSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgYnRiID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciBidGMgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIHRyaU1lc2ggPSBuZXcgQW1tby5idFRyaWFuZ2xlTWVzaCh0cnVlLCBmYWxzZSk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlcnRpY2VzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgdmFyIGNvbXBvbmVudHMgPSB2ZXJ0aWNlc1tpXTsKICAgICAgICB2YXIgaW5kZXggPSBpbmRleGVzW2ldID8gaW5kZXhlc1tpXSA6IG51bGw7CiAgICAgICAgdmFyIG1hdHJpeCA9IEFycmF5LmZyb20obWF0cmljZXNbaV0pOwoKICAgICAgICBpZiAoaW5kZXgpIHsKICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaW5kZXgubGVuZ3RoOyBqICs9IDMpIHsKICAgICAgICAgICAgdmFyIGFpID0gaW5kZXhbal0gKiAzOwogICAgICAgICAgICB2YXIgYmkgPSBpbmRleFtqICsgMV0gKiAzOwogICAgICAgICAgICB2YXIgY2kgPSBpbmRleFtqICsgMl0gKiAzOwogICAgICAgICAgICB2YXIgdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbYWldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbYWkgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2FpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgdmFyIHZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2JpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2JpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tiaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIHZhciB2YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tjaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tjaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbY2kgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICBidGEuc2V0VmFsdWUodmEueCwgdmEueSwgdmEueik7CiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZSh2Yi54LCB2Yi55LCB2Yi56KTsKICAgICAgICAgICAgYnRjLnNldFZhbHVlKHZjLngsIHZjLnksIHZjLnopOwogICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGNvbXBvbmVudHMubGVuZ3RoOyBfaiArPSA5KSB7CiAgICAgICAgICAgIHZhciBfdmEgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyAwXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICB2YXIgX3ZiID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgM10sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDRdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyA1XQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgdmFyIF92YyA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDZdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyA3XSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgOF0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIGJ0YS5zZXRWYWx1ZShfdmEueCwgX3ZhLnksIF92YS56KTsKICAgICAgICAgICAgYnRiLnNldFZhbHVlKF92Yi54LCBfdmIueSwgX3ZiLnopOwogICAgICAgICAgICBidGMuc2V0VmFsdWUoX3ZjLngsIF92Yy55LCBfdmMueik7CiAgICAgICAgICAgIHRyaU1lc2guYWRkVHJpYW5nbGUoYnRhLCBidGIsIGJ0YywgZmFsc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGxvY2FsU2NhbGUgPSBuZXcgQW1tby5idFZlY3RvcjMoc2NhbGUueCwgc2NhbGUueSwgc2NhbGUueik7CiAgICAgIHRyaU1lc2guc2V0U2NhbGluZyhsb2NhbFNjYWxlKTsKICAgICAgQW1tby5kZXN0cm95KGxvY2FsU2NhbGUpOwogICAgICB2YXIgY29sbGlzaW9uU2hhcGUgPSBuZXcgQW1tby5idEJ2aFRyaWFuZ2xlTWVzaFNoYXBlKHRyaU1lc2gsIHRydWUsIHRydWUpOwogICAgICBjb2xsaXNpb25TaGFwZS5yZXNvdXJjZXMgPSBbdHJpTWVzaF07CiAgICAgIEFtbW8uZGVzdHJveShidGEpOwogICAgICBBbW1vLmRlc3Ryb3koYnRiKTsKICAgICAgQW1tby5kZXN0cm95KGJ0Yyk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGNvbGxpc2lvblNoYXBlLCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLk1FU0gsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBhZGRCb3ggPSBmdW5jdGlvbiBhZGRCb3goZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdpZHRoID0gZGF0YS53aWR0aCwKICAgICAgICAgIGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzID09PSB2b2lkIDAgPyAwIDogX2RhdGEkbWFzcywKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24gPT09IHZvaWQgMCA/IDIgOiBfZGF0YSRmcmljdGlvbjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAwLjUsIGhlaWdodCAqIDAuNSwgbGVuZ3RoICogMC41KSk7CiAgICAgIHZhciBib2R5ID0gY3JlYXRlUmlnaWRCb2R5KGdlb21ldHJ5LCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBib2R5OiBib2R5LAogICAgICAgIHR5cGU6IFRZUEVTLkJPWCwKICAgICAgICBzdGF0ZTogREVGQVVMVF9SSUdJREJPRFlfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIGFkZFNwaGVyZSA9IGZ1bmN0aW9uIGFkZFNwaGVyZShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcmFkaXVzID0gZGF0YS5yYWRpdXMsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgX2RhdGEkbWFzczIgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzczIgPT09IHZvaWQgMCA/IDAgOiBfZGF0YSRtYXNzMiwKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uMiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uMiA9PT0gdm9pZCAwID8gMiA6IF9kYXRhJGZyaWN0aW9uMjsKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLmFkZEVsZW1lbnQoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5TUEhFUkUsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRMaW5lYXJWZWxvY2l0eSA9IGZ1bmN0aW9uIHNldExpbmVhclZlbG9jaXR5KGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBfZGF0YSR2ZWxvY2l0eSA9IGRhdGEudmVsb2NpdHksCiAgICAgICAgICB2ZWxvY2l0eSA9IF9kYXRhJHZlbG9jaXR5ID09PSB2b2lkIDAgPyBERUZBVUxUX0xJTkVBUl9WRUxPQ0lUWSA6IF9kYXRhJHZlbG9jaXR5OwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKSwKICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudC5ib2R5OwoKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIGxpbmVhclZlbG9jaXR5ID0gbmV3IEFtbW8uYnRWZWN0b3IzKHZlbG9jaXR5LngsIHZlbG9jaXR5LnksIHZlbG9jaXR5LnopOwogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIEFtbW8uZGVzdHJveShsaW5lYXJWZWxvY2l0eSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgc2V0UG9zaXRpb24gPSBmdW5jdGlvbiBzZXRQb3NpdGlvbihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MiA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQyLmJvZHk7CgogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgIH07CiAgICB2YXIgYXBwbHlJbXB1c2UgPSBmdW5jdGlvbiBhcHBseUltcHVzZShfcmVmKSB7CiAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRpbXB1bHNlID0gX3JlZi5pbXB1bHNlLAogICAgICAgICAgaW1wdWxzZSA9IF9yZWYkaW1wdWxzZSA9PT0gdm9pZCAwID8gREVGQVVMVF9JTVBVTFNFIDogX3JlZiRpbXB1bHNlOwoKICAgICAgdmFyIF93b3JsZCRnZXRFbGVtZW50MyA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQzLmJvZHk7CgogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgaW1wdWxzZVZlY3RvciA9IG5ldyBBbW1vLmJ0VmVjdG9yMyhpbXB1bHNlLngsIGltcHVsc2UueSwgaW1wdWxzZS56KTsKICAgICAgICBib2R5LmFwcGx5Q2VudHJhbEltcHVsc2UoaW1wdWxzZVZlY3Rvcik7CiAgICAgICAgQW1tby5kZXN0cm95KGltcHVsc2VWZWN0b3IpOwogICAgICB9CiAgICB9OwogICAgdmFyIGhhbmRsZUVsZW1lbnRVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVFbGVtZW50VXBkYXRlKF9yZWYyLCBkdCkgewogICAgICB2YXIgYm9keSA9IF9yZWYyLmJvZHksCiAgICAgICAgICB1dWlkID0gX3JlZjIudXVpZDsKICAgICAgICAgIF9yZWYyLnN0YXRlOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgdmFyIHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgYWRkUGxheWVyID0gZnVuY3Rpb24gYWRkUGxheWVyKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICBoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uOwogICAgICB2YXIgY2Fwc3VsZSA9IG5ldyBBbW1vLmJ0Q2Fwc3VsZVNoYXBlKHdpZHRoLCBoZWlnaHQpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjYXBzdWxlLCB7CiAgICAgICAgdXVpZDogdXVpZCwKICAgICAgICBwb3NpdGlvbjogcG9zaXRpb24sCiAgICAgICAgcXVhdGVybmlvbjogcXVhdGVybmlvbiwKICAgICAgICBtYXNzOiBtYXNzLAogICAgICAgIGZyaWN0aW9uOiBmcmljdGlvbgogICAgICB9KTsgLy8gZGlzYWJsaWluZyByb3RhdGlvbiBmb3IgY29sbGlzaW9ucwoKICAgICAgYm9keS5zZXRBbmd1bGFyRmFjdG9yKDApOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgIHdvcmxkLmFkZEVsZW1lbnQoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5QTEFZRVIsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBoYW5kbGVQbGF5ZXJVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVQbGF5ZXJVcGRhdGUoX3JlZiwgZHQpIHsKICAgICAgdmFyIGJvZHkgPSBfcmVmLmJvZHksCiAgICAgICAgICB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRzdGF0ZSA9IF9yZWYuc3RhdGUsCiAgICAgICAgICBzdGF0ZSA9IF9yZWYkc3RhdGUgPT09IHZvaWQgMCA/IERFRkFVTFRfUklHSURCT0RZX1NUQVRFIDogX3JlZiRzdGF0ZTsKICAgICAgdmFyIG1vdmVtZW50ID0gc3RhdGUubW92ZW1lbnQ7CiAgICAgICAgICBzdGF0ZS5kaXJlY3Rpb247CiAgICAgICAgICB2YXIgY2FtZXJhRGlyZWN0aW9uID0gc3RhdGUuY2FtZXJhRGlyZWN0aW9uOwogICAgICAgICAgc3RhdGUucXVhdGVybmlvbjsKICAgICAgICAgIHN0YXRlLnBvc2l0aW9uOwogICAgICB2YXIgTUFYX1NQRUVEID0gMTsKICAgICAgdmFyIHdhbGtWZWxvY2l0eSA9IC4xOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CgogICAgICBpZiAobW90aW9uU3RhdGUpIHsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBtb3Rpb25TdGF0ZS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IGJvZHkuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICB2YXIgc3BlZWQgPSBsaW5lYXJWZWxvY2l0eS5sZW5ndGgoKTsKICAgICAgICB2YXIgZm9yd2FyZERpciA9IHRyYW5zZm9ybS5nZXRCYXNpcygpLmdldFJvdygyKTsKICAgICAgICBmb3J3YXJkRGlyLm5vcm1hbGl6ZSgpOwogICAgICAgIHZhciB3YWxrRGlyZWN0aW9uID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAuMCwgMC4wLCAwLjApOwogICAgICAgIHZhciB3YWxrU3BlZWQgPSB3YWxrVmVsb2NpdHkgKiBkdDsKCiAgICAgICAgaWYgKG1vdmVtZW50LmZvcndhcmQpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSArIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpICsgZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSArIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmIChtb3ZlbWVudC5iYWNrd2FyZHMpIHsKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0WCh3YWxrRGlyZWN0aW9uLngoKSAtIGZvcndhcmREaXIueCgpKTsgLy93YWxrRGlyZWN0aW9uLnNldFkoIHdhbGtEaXJlY3Rpb24ueSgpIC0gZm9yd2FyZERpci55KCkpOwoKICAgICAgICAgIHdhbGtEaXJlY3Rpb24uc2V0Wih3YWxrRGlyZWN0aW9uLnooKSAtIGZvcndhcmREaXIueigpKTsKICAgICAgICB9CgogICAgICAgIGlmICghbW92ZW1lbnQuZm9yd2FyZCAmJiAhbW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRYKGxpbmVhclZlbG9jaXR5LngoKSAqIDAuMik7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSAqIDAuMik7CiAgICAgICAgfSBlbHNlIGlmIChzcGVlZCA8IE1BWF9TUEVFRCkgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKyBjYW1lcmFEaXJlY3Rpb24ueCAqIHdhbGtTcGVlZCk7CiAgICAgICAgICBsaW5lYXJWZWxvY2l0eS5zZXRaKGxpbmVhclZlbG9jaXR5LnooKSArIGNhbWVyYURpcmVjdGlvbi56ICogd2Fsa1NwZWVkKTsKICAgICAgICB9CgogICAgICAgIGJvZHkuc2V0TGluZWFyVmVsb2NpdHkobGluZWFyVmVsb2NpdHkpOwogICAgICAgIGJvZHkuZ2V0TW90aW9uU3RhdGUoKS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGJvZHkuc2V0Q2VudGVyT2ZNYXNzVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdmFyIG9yaWdpbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgICB2YXIgcm90YXRpb24gPSB0cmFuc2Zvcm0uZ2V0Um90YXRpb24oKTsKICAgICAgICBkaXNwYXRjaGVyLnNlbmRCb2R5VXBkYXRlKHV1aWQsIG9yaWdpbiwgcm90YXRpb24sIGR0KTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgQ2xvY2sgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBDbG9jaygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgQ2xvY2spOwoKICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IG51bGw7CiAgICAgIH0KCiAgICAgIF9jcmVhdGVDbGFzcyhDbG9jaywgW3sKICAgICAgICBrZXk6ICJnZXREZWx0YSIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGdldERlbHRhKCkgewogICAgICAgICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpOwoKICAgICAgICAgIGlmICh0aGlzLnRpbWVzdGFtcCkgewogICAgICAgICAgICB2YXIgZGVsdGEgPSB0aW1lIC0gdGhpcy50aW1lc3RhbXA7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIGRlbHRhOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lOwogICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBDbG9jazsKICAgIH0oKTsKCiAgICB2YXIgV29ybGQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICBmdW5jdGlvbiBXb3JsZCgpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwoKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgV29ybGQpOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImluaXQiLCBmdW5jdGlvbiAob3B0aW9ucykgewogICAgICAgICAgdmFyIF9vcHRpb25zJGdyYXZpdHkgPSBvcHRpb25zLmdyYXZpdHksCiAgICAgICAgICAgICAgZ3Jhdml0eSA9IF9vcHRpb25zJGdyYXZpdHkgPT09IHZvaWQgMCA/IEdSQVZJVFkgOiBfb3B0aW9ucyRncmF2aXR5OwogICAgICAgICAgX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbiA9IG5ldyBBbW1vLmJ0RGVmYXVsdENvbGxpc2lvbkNvbmZpZ3VyYXRpb24oKTsKICAgICAgICAgIF90aGlzLmRpc3BhdGNoZXIgPSBuZXcgQW1tby5idENvbGxpc2lvbkRpc3BhdGNoZXIoX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBfdGhpcy5icm9hZHBoYXNlID0gbmV3IEFtbW8uYnREYnZ0QnJvYWRwaGFzZSgpOwogICAgICAgICAgX3RoaXMuc29sdmVyID0gbmV3IEFtbW8uYnRTZXF1ZW50aWFsSW1wdWxzZUNvbnN0cmFpbnRTb2x2ZXIoKTsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQgPSBuZXcgQW1tby5idERpc2NyZXRlRHluYW1pY3NXb3JsZChfdGhpcy5kaXNwYXRjaGVyLCBfdGhpcy5icm9hZHBoYXNlLCBfdGhpcy5zb2x2ZXIsIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwoKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc2V0R3Jhdml0eShuZXcgQW1tby5idFZlY3RvcjMoZ3Jhdml0eS54LCBncmF2aXR5LnksIGdyYXZpdHkueikpOyAvLyB0aGlzIGlzIG5lZWRlZCBmb3IgZ2hvc3RPYmplY3QgY29sbGlzaW9ucwoKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmdldEJyb2FkcGhhc2UoKS5nZXRPdmVybGFwcGluZ1BhaXJDYWNoZSgpLnNldEludGVybmFsR2hvc3RQYWlyQ2FsbGJhY2sobmV3IEFtbW8uYnRHaG9zdFBhaXJDYWxsYmFjaygpKTsKCiAgICAgICAgICBfdGhpcy5pbml0aWFsaXNlZCA9IHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5kZWxldGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJyZW1vdmVEZWxldGVkRWxlbWVudHMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZpbHRlcihmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgICByZXR1cm4gX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZDsKICAgICAgICAgIH0pLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgZGVsZXRlIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiaGFzRWxlbWVudCIsIGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmluY2x1ZGVzKHV1aWQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldEVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImlzSW5pdGlhbGlzZWQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuaW5pdGlhbGlzZWQ7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiZ2V0RHluYW1pY3NXb3JsZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5keW5hbWljc1dvcmxkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZFJpZ2lkQm9keSIsIGZ1bmN0aW9uIChib2R5KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZFJpZ2lkQm9keShib2R5KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRBY3Rpb24iLCBmdW5jdGlvbiAoYWN0aW9uKSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZENvbGxpc2lvbk9iamVjdCIsIGZ1bmN0aW9uIChjb2xsaXNpb25PYmplY3QpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGNvbGxpc2lvbk9iamVjdCk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAic3RlcFNpbXVsYXRpb24iLCBmdW5jdGlvbiAoZHQpIHsKICAgICAgICAgIF90aGlzLmR5bmFtaWNzV29ybGQuc3RlcFNpbXVsYXRpb24oZHQpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNpbXVsYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGR0ID0gX3RoaXMuY2xvY2suZ2V0RGVsdGEoKTsKCiAgICAgICAgICBfdGhpcy5zdGVwU2ltdWxhdGlvbihkdCk7CgogICAgICAgICAgT2JqZWN0LmtleXMoX3RoaXMuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBfdGhpcy5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKGVsZW1lbnQudHlwZSkgewogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5CT1g6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlNQSEVSRToKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuTUVTSDoKICAgICAgICAgICAgICAgICAgaGFuZGxlRWxlbWVudFVwZGF0ZShlbGVtZW50LCBkdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuUExBWUVSOgogICAgICAgICAgICAgICAgICBoYW5kbGVQbGF5ZXJVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlZFSElDTEU6CiAgICAgICAgICAgICAgICAgIGhhbmRsZVZlaGljbGVVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwoKICAgICAgICAgIF90aGlzLmNhbGN1bGF0ZUNvbGxpc2lvbnMoKTsKCiAgICAgICAgICBfdGhpcy5yZW1vdmVEZWxldGVkRWxlbWVudHMoKTsKCiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFBoeXNpY3NVcGRhdGUoZHQpOwogICAgICAgICAgX3RoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoX3RoaXMuc2ltdWxhdGUuYmluZChfdGhpcykpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImNhbGN1bGF0ZUNvbGxpc2lvbnMiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgYW1tb0Rpc3BhdGNoZXIgPSBfdGhpcy5keW5hbWljc1dvcmxkLmdldERpc3BhdGNoZXIoKTsKCiAgICAgICAgICB2YXIgbnVtTWFuaWZvbGRzID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TnVtTWFuaWZvbGRzKCk7CgogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1NYW5pZm9sZHM7IGkrKykgewogICAgICAgICAgICB2YXIgY29udGFjdE1hbmlmb2xkID0gYW1tb0Rpc3BhdGNoZXIuZ2V0TWFuaWZvbGRCeUluZGV4SW50ZXJuYWwoaSk7CiAgICAgICAgICAgIHZhciByYjAgPSBBbW1vLmNhc3RPYmplY3QoY29udGFjdE1hbmlmb2xkLmdldEJvZHkwKCksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgICAgICB2YXIgcmIxID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MSgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIG51bUNvbnRhY3RzID0gY29udGFjdE1hbmlmb2xkLmdldE51bUNvbnRhY3RzKCk7IC8vIHRoaXMgaXRlcmF0aW9uIGRvZXNuJ3QgaGF2ZSB1dWlkcwoKICAgICAgICAgICAgaWYgKCFyYjAudXVpZCB8fCAhcmIxLnV1aWQpIGNvbnRpbnVlOwogICAgICAgICAgICB2YXIgY29udGFjdHMgPSBbXTsKCiAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbnVtQ29udGFjdHM7IGorKykgewogICAgICAgICAgICAgIHZhciBjb250YWN0UG9pbnQgPSBjb250YWN0TWFuaWZvbGQuZ2V0Q29udGFjdFBvaW50KGopOwogICAgICAgICAgICAgIHZhciBkaXN0YW5jZSA9IGNvbnRhY3RQb2ludC5nZXREaXN0YW5jZSgpOwogICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IDAuMCkgY29udGludWU7CiAgICAgICAgICAgICAgdmFyIHZlbG9jaXR5MCA9IHJiMC5nZXRMaW5lYXJWZWxvY2l0eSgpOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTEgPSByYjEuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MwID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkEoKTsKICAgICAgICAgICAgICB2YXIgd29ybGRQb3MxID0gY29udGFjdFBvaW50LmdldF9tX3Bvc2l0aW9uV29ybGRPbkIoKTsKICAgICAgICAgICAgICB2YXIgbG9jYWxQb3MwID0gY29udGFjdFBvaW50LmdldF9tX2xvY2FsUG9pbnRBKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QigpOwogICAgICAgICAgICAgIGNvbnRhY3RzLnB1c2goewogICAgICAgICAgICAgICAgZGlzdGFuY2U6IGRpc3RhbmNlLAogICAgICAgICAgICAgICAgZWxlbWVudHM6IFt7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMC51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMC55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MwLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIHV1aWQ6IHJiMS51dWlkLAogICAgICAgICAgICAgICAgICB2ZWxvY2l0eTogewogICAgICAgICAgICAgICAgICAgIHg6IHZlbG9jaXR5MS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogdmVsb2NpdHkxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB2ZWxvY2l0eTEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIHdvcmxkUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogd29ybGRQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiB3b3JsZFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IHdvcmxkUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgbG9jYWxQb3M6IHsKICAgICAgICAgICAgICAgICAgICB4OiBsb2NhbFBvczEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IGxvY2FsUG9zMS55KCksCiAgICAgICAgICAgICAgICAgICAgejogbG9jYWxQb3MxLnooKQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIwLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZERpc3BhdGNoRXZlbnQocmIxLnV1aWQsIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuQ09MTElTSU9OLCB7CiAgICAgICAgICAgICAgY29udGFjdHM6IGNvbnRhY3RzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImFkZEVsZW1lbnQiLCBmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgX3RoaXMuZWxlbWVudHNbZGF0YS51dWlkXSA9IGRhdGE7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidXBkYXRlQm9keVN0YXRlIiwgZnVuY3Rpb24gKF9yZWYpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgICAgIHN0YXRlID0gX3JlZi5zdGF0ZTsKCiAgICAgICAgICBpZiAoX3RoaXMuaGFzRWxlbWVudCh1dWlkKSkgewogICAgICAgICAgICBfdGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfdGhpcy5lbGVtZW50c1t1dWlkXS5zdGF0ZSksIHN0YXRlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJ0ZXJtaW5hdGUiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuZHluYW1pY3NXb3JsZCk7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuc29sdmVyKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5kaXNwYXRjaGVyKTsKICAgICAgICAgIEFtbW8uZGVzdHJveShfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKF90aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkKTsKICAgICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kVGVybWluYXRlRXZlbnQoKTsKICAgICAgICB9KTsKCiAgICAgICAgdGhpcy5lbGVtZW50cyA9IHt9OwogICAgICAgIHRoaXMuaW5pdGlhbGlzZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuYnJvYWRwaGFzZSA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLnNvbHZlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCA9IG51bGw7CiAgICAgICAgdGhpcy5jbG9jayA9IG5ldyBDbG9jaygpOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoV29ybGQsIFt7CiAgICAgICAga2V5OiAiZGlzcG9zZUJvZHkiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBkaXNwb3NlQm9keShfcmVmMikgewogICAgICAgICAgdmFyIHV1aWQgPSBfcmVmMi51dWlkOwogICAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLmdldEVsZW1lbnQodXVpZCk7CiAgICAgICAgICB0aGlzLmR5bmFtaWNzV29ybGQucmVtb3ZlUmlnaWRCb2R5KGVsZW1lbnQuYm9keSk7CiAgICAgICAgICB0aGlzLnJlbW92ZUVsZW1lbnQodXVpZCk7CiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZEVsZW1lbnREaXNwb3NlZCh7CiAgICAgICAgICAgIHV1aWQ6IHV1aWQKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfV0pOwoKICAgICAgcmV0dXJuIFdvcmxkOwogICAgfSgpOwogICAgdmFyIHdvcmxkID0gbmV3IFdvcmxkKCk7CgogICAgdmFyIERFRkFVTFRfUk9MTF9JTkZMVUVOQ0UgPSAwLjI7CiAgICB2YXIgREVGQVVMVF9GUklDVElPTiA9IDEwMDA7CiAgICB2YXIgREVGQVVMVF9NQVNTID0gODAwOwogICAgdmFyIGFkZFZlaGljbGUgPSBmdW5jdGlvbiBhZGRWZWhpY2xlKGRhdGEpIHsKICAgICAgdmFyIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2hlZWxzID0gZGF0YS53aGVlbHMsCiAgICAgICAgICBfZGF0YSRtYXNzID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFTUyA6IF9kYXRhJG1hc3MsCiAgICAgICAgICBfZGF0YSR3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICB3aWR0aCA9IF9kYXRhJHdpZHRoID09PSB2b2lkIDAgPyAxLjggOiBfZGF0YSR3aWR0aCwKICAgICAgICAgIF9kYXRhJGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgaGVpZ2h0ID0gX2RhdGEkaGVpZ2h0ID09PSB2b2lkIDAgPyAuNiA6IF9kYXRhJGhlaWdodCwKICAgICAgICAgIF9kYXRhJGxlbmd0aCA9IGRhdGEubGVuZ3RoLAogICAgICAgICAgbGVuZ3RoID0gX2RhdGEkbGVuZ3RoID09PSB2b2lkIDAgPyA0IDogX2RhdGEkbGVuZ3RoLAogICAgICAgICAgX2RhdGEkZnJpY3Rpb24gPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbiA9PT0gdm9pZCAwID8gREVGQVVMVF9GUklDVElPTiA6IF9kYXRhJGZyaWN0aW9uLAogICAgICAgICAgX2RhdGEkcm9sbEluZmx1ZW5jZSA9IGRhdGEucm9sbEluZmx1ZW5jZSwKICAgICAgICAgIHJvbGxJbmZsdWVuY2UgPSBfZGF0YSRyb2xsSW5mbHVlbmNlID09PSB2b2lkIDAgPyBERUZBVUxUX1JPTExfSU5GTFVFTkNFIDogX2RhdGEkcm9sbEluZmx1ZW5jZSwKICAgICAgICAgIF9kYXRhJHdoZWVsc09wdGlvbnMgPSBkYXRhLndoZWVsc09wdGlvbnMsCiAgICAgICAgICB3aGVlbHNPcHRpb25zID0gX2RhdGEkd2hlZWxzT3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSR3aGVlbHNPcHRpb25zLAogICAgICAgICAgX2RhdGEkc3VzcGVuc2lvbnMgPSBkYXRhLnN1c3BlbnNpb25zLAogICAgICAgICAgc3VzcGVuc2lvbnMgPSBfZGF0YSRzdXNwZW5zaW9ucyA9PT0gdm9pZCAwID8ge30gOiBfZGF0YSRzdXNwZW5zaW9uczsKICAgICAgdmFyIF93aGVlbHNPcHRpb25zJGJhY2sgPSB3aGVlbHNPcHRpb25zLmJhY2ssCiAgICAgICAgICBiYWNrID0gX3doZWVsc09wdGlvbnMkYmFjayA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRiYWNrLAogICAgICAgICAgX3doZWVsc09wdGlvbnMkZnJvbnQgPSB3aGVlbHNPcHRpb25zLmZyb250LAogICAgICAgICAgZnJvbnQgPSBfd2hlZWxzT3B0aW9ucyRmcm9udCA9PT0gdm9pZCAwID8ge30gOiBfd2hlZWxzT3B0aW9ucyRmcm9udDsKICAgICAgdmFyIF9iYWNrJGF4aXNQb3NpdGlvbiA9IGJhY2suYXhpc1Bvc2l0aW9uLAogICAgICAgICAgYXhpc1Bvc2l0aW9uQmFjayA9IF9iYWNrJGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gLTEgOiBfYmFjayRheGlzUG9zaXRpb24sCiAgICAgICAgICBfYmFjayRyYWRpdXMgPSBiYWNrLnJhZGl1cywKICAgICAgICAgIHdoZWVsUmFkaXVzQmFjayA9IF9iYWNrJHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfYmFjayRyYWRpdXMsCiAgICAgICAgICBfYmFjayRoYWxmVHJhY2sgPSBiYWNrLmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrQmFjayA9IF9iYWNrJGhhbGZUcmFjayA9PT0gdm9pZCAwID8gMSA6IF9iYWNrJGhhbGZUcmFjaywKICAgICAgICAgIF9iYWNrJGF4aXNIZWlnaHQgPSBiYWNrLmF4aXNIZWlnaHQsCiAgICAgICAgICB3aGVlbEF4aXNIZWlnaHRCYWNrID0gX2JhY2skYXhpc0hlaWdodCA9PT0gdm9pZCAwID8gLjMgOiBfYmFjayRheGlzSGVpZ2h0OwogICAgICB2YXIgX2Zyb250JGF4aXNQb3NpdGlvbiA9IGZyb250LmF4aXNQb3NpdGlvbiwKICAgICAgICAgIGF4aXNQb3NpdGlvbkZyb250ID0gX2Zyb250JGF4aXNQb3NpdGlvbiA9PT0gdm9pZCAwID8gMS43IDogX2Zyb250JGF4aXNQb3NpdGlvbiwKICAgICAgICAgIF9mcm9udCRyYWRpdXMgPSBmcm9udC5yYWRpdXMsCiAgICAgICAgICB3aGVlbFJhZGl1c0Zyb250ID0gX2Zyb250JHJhZGl1cyA9PT0gdm9pZCAwID8gLjQgOiBfZnJvbnQkcmFkaXVzLAogICAgICAgICAgX2Zyb250JGhhbGZUcmFjayA9IGZyb250LmhhbGZUcmFjaywKICAgICAgICAgIHdoZWVsSGFsZlRyYWNrRnJvbnQgPSBfZnJvbnQkaGFsZlRyYWNrID09PSB2b2lkIDAgPyAxIDogX2Zyb250JGhhbGZUcmFjaywKICAgICAgICAgIF9mcm9udCRheGlzSGVpZ2h0ID0gZnJvbnQuYXhpc0hlaWdodCwKICAgICAgICAgIHdoZWVsQXhpc0hlaWdodEZyb250ID0gX2Zyb250JGF4aXNIZWlnaHQgPT09IHZvaWQgMCA/IC4zIDogX2Zyb250JGF4aXNIZWlnaHQ7CiAgICAgIHZhciBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPSBzdXNwZW5zaW9ucy5zdGlmZm5lc3MsCiAgICAgICAgICBzdGlmZm5lc3MgPSBfc3VzcGVuc2lvbnMkc3RpZmZuZXMgPT09IHZvaWQgMCA/IDIwLjAgOiBfc3VzcGVuc2lvbnMkc3RpZmZuZXMsCiAgICAgICAgICBfc3VzcGVuc2lvbnMkZGFtcGluZyA9IHN1c3BlbnNpb25zLmRhbXBpbmcsCiAgICAgICAgICBkYW1waW5nID0gX3N1c3BlbnNpb25zJGRhbXBpbmcgPT09IHZvaWQgMCA/IDIuMyA6IF9zdXNwZW5zaW9ucyRkYW1waW5nLAogICAgICAgICAgX3N1c3BlbnNpb25zJGNvbXByZXNzID0gc3VzcGVuc2lvbnMuY29tcHJlc3Npb24sCiAgICAgICAgICBjb21wcmVzc2lvbiA9IF9zdXNwZW5zaW9ucyRjb21wcmVzcyA9PT0gdm9pZCAwID8gNC40IDogX3N1c3BlbnNpb25zJGNvbXByZXNzLAogICAgICAgICAgX3N1c3BlbnNpb25zJHJlc3RMZW5nID0gc3VzcGVuc2lvbnMucmVzdExlbmd0aCwKICAgICAgICAgIHJlc3RMZW5ndGggPSBfc3VzcGVuc2lvbnMkcmVzdExlbmcgPT09IHZvaWQgMCA/IDAuNiA6IF9zdXNwZW5zaW9ucyRyZXN0TGVuZzsgLy8gQ2hhc3NpcwoKICAgICAgdmFyIGdlb21ldHJ5ID0gbmV3IEFtbW8uYnRCb3hTaGFwZShuZXcgQW1tby5idFZlY3RvcjMod2lkdGggKiAuNSwgaGVpZ2h0ICogLjUsIGxlbmd0aCAqIC41KSk7CiAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICB2YXIgbW90aW9uU3RhdGUgPSBuZXcgQW1tby5idERlZmF1bHRNb3Rpb25TdGF0ZSh0cmFuc2Zvcm0pOwogICAgICB2YXIgbG9jYWxJbmVydGlhID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIDAsIDApOwogICAgICBnZW9tZXRyeS5jYWxjdWxhdGVMb2NhbEluZXJ0aWEobWFzcywgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIGNoYXNzaXMgPSBuZXcgQW1tby5idFJpZ2lkQm9keShuZXcgQW1tby5idFJpZ2lkQm9keUNvbnN0cnVjdGlvbkluZm8obWFzcywgbW90aW9uU3RhdGUsIGdlb21ldHJ5LCBsb2NhbEluZXJ0aWEpKTsKICAgICAgY2hhc3Npcy5zZXRBY3RpdmF0aW9uU3RhdGUoRElTQUJMRV9ERUFDVElWQVRJT04pOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoY2hhc3Npcyk7IC8vIFJheWNhc3QgVmVoaWNsZQoKICAgICAgdmFyIHR1bmluZyA9IG5ldyBBbW1vLmJ0VmVoaWNsZVR1bmluZygpOwogICAgICB2YXIgcmF5Q2FzdGVyID0gbmV3IEFtbW8uYnREZWZhdWx0VmVoaWNsZVJheWNhc3Rlcih3b3JsZC5nZXREeW5hbWljc1dvcmxkKCkpOwogICAgICB2YXIgdmVoaWNsZSA9IG5ldyBBbW1vLmJ0UmF5Y2FzdFZlaGljbGUodHVuaW5nLCBjaGFzc2lzLCByYXlDYXN0ZXIpOwogICAgICB2ZWhpY2xlLnNldENvb3JkaW5hdGVTeXN0ZW0oMCwgMSwgMik7CiAgICAgIHdvcmxkLmFkZEFjdGlvbih2ZWhpY2xlKTsKICAgICAgdmFyIHdoZWVsRGlyZWN0aW9uQ1MwID0gbmV3IEFtbW8uYnRWZWN0b3IzKDAsIC0xLCAwKTsKICAgICAgdmFyIHdoZWVsQXhsZUNTID0gbmV3IEFtbW8uYnRWZWN0b3IzKC0xLCAwLCAwKTsKCiAgICAgIHZhciBhZGRXaGVlbCA9IGZ1bmN0aW9uIGFkZFdoZWVsKGlzRnJvbnQsIHBvcywgcmFkaXVzKSB7CiAgICAgICAgdmFyIHdoZWVsSW5mbyA9IHZlaGljbGUuYWRkV2hlZWwocG9zLCB3aGVlbERpcmVjdGlvbkNTMCwgd2hlZWxBeGxlQ1MsIHJlc3RMZW5ndGgsIHJhZGl1cywgdHVuaW5nLCBpc0Zyb250KTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fc3VzcGVuc2lvblN0aWZmbmVzcyhzdGlmZm5lc3MpOwogICAgICAgIHdoZWVsSW5mby5zZXRfbV93aGVlbHNEYW1waW5nUmVsYXhhdGlvbihkYW1waW5nKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ0NvbXByZXNzaW9uKGNvbXByZXNzaW9uKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fZnJpY3Rpb25TbGlwKGZyaWN0aW9uKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fcm9sbEluZmx1ZW5jZShyb2xsSW5mbHVlbmNlKTsKICAgICAgfTsKCiAgICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTsKICAgICAgYWRkV2hlZWwodHJ1ZSwgbmV3IEFtbW8uYnRWZWN0b3IzKC13aGVlbEhhbGZUcmFja0Zyb250LCB3aGVlbEF4aXNIZWlnaHRGcm9udCwgYXhpc1Bvc2l0aW9uRnJvbnQpLCB3aGVlbFJhZGl1c0Zyb250KTsKICAgICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMygtd2hlZWxIYWxmVHJhY2tCYWNrLCB3aGVlbEF4aXNIZWlnaHRCYWNrLCBheGlzUG9zaXRpb25CYWNrKSwgd2hlZWxSYWRpdXNCYWNrKTsKICAgICAgYWRkV2hlZWwoZmFsc2UsIG5ldyBBbW1vLmJ0VmVjdG9yMyh3aGVlbEhhbGZUcmFja0JhY2ssIHdoZWVsQXhpc0hlaWdodEJhY2ssIGF4aXNQb3NpdGlvbkJhY2spLCB3aGVlbFJhZGl1c0JhY2spOwogICAgICB2ZWhpY2xlLnV1aWQgPSB1dWlkOwogICAgICB3b3JsZC5hZGRFbGVtZW50KHsKICAgICAgICB0eXBlOiBUWVBFUy5WRUhJQ0xFLAogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgdmVoaWNsZTogdmVoaWNsZSwKICAgICAgICB3aGVlbHM6IHdoZWVscywKICAgICAgICBvcHRpb25zOiBkYXRhLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1ZFSElDTEVfU1RBVEUKICAgICAgfSk7CiAgICB9OwogICAgdmFyIHNldFZlaGljbGVQb3NpdGlvbiA9IGZ1bmN0aW9uIHNldFZlaGljbGVQb3NpdGlvbihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgc2V0VmVoaWNsZVF1YXRlcm5pb24gPSBmdW5jdGlvbiBzZXRWZWhpY2xlUXVhdGVybmlvbihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciByZXNldFZlaGljbGUgPSBmdW5jdGlvbiByZXNldFZlaGljbGUoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb24sCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIGhhbmRsZVZlaGljbGVVcGRhdGUgPSBmdW5jdGlvbiBoYW5kbGVWZWhpY2xlVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciB2ZWhpY2xlID0gX3JlZi52ZWhpY2xlLAogICAgICAgICAgd2hlZWxzID0gX3JlZi53aGVlbHMsCiAgICAgICAgICB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgX3JlZiRzdGF0ZSA9IF9yZWYuc3RhdGUsCiAgICAgICAgICBzdGF0ZSA9IF9yZWYkc3RhdGUgPT09IHZvaWQgMCA/IERFRkFVTFRfVkVISUNMRV9TVEFURSA6IF9yZWYkc3RhdGUsCiAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsCiAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9uczsKICAgICAgdmFyIGJyZWFraW5nRm9yY2UgPSAwOwogICAgICB2YXIgZW5naW5lRm9yY2UgPSAwOwogICAgICB2YXIgX29wdGlvbnMkc3RlZXJpbmdDbGFtID0gb3B0aW9ucy5zdGVlcmluZ0NsYW1wLAogICAgICAgICAgc3RlZXJpbmdDbGFtcCA9IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19DTEFNUCA6IF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSwKICAgICAgICAgIF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9IG9wdGlvbnMuc3RlZXJpbmdJbmNyZW1lbnQsCiAgICAgICAgICBzdGVlcmluZ0luY3JlbWVudCA9IF9vcHRpb25zJHN0ZWVyaW5nSW5jciA9PT0gdm9pZCAwID8gREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgOiBfb3B0aW9ucyRzdGVlcmluZ0luY3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPSBvcHRpb25zLm1heEVuZ2luZUZvcmNlLAogICAgICAgICAgbWF4RW5naW5lRm9yY2UgPSBfb3B0aW9ucyRtYXhFbmdpbmVGb3IgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA6IF9vcHRpb25zJG1heEVuZ2luZUZvciwKICAgICAgICAgIF9vcHRpb25zJG1heEJyZWFraW5nRiA9IG9wdGlvbnMubWF4QnJlYWtpbmdGb3JjZSwKICAgICAgICAgIG1heEJyZWFraW5nRm9yY2UgPSBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPT09IHZvaWQgMCA/IERFRkFVTFRfTUFYX0JSRUFLSU5HX0ZPUkNFIDogX29wdGlvbnMkbWF4QnJlYWtpbmdGOwoKICAgICAgaWYgKHN0YXRlLmFjY2VsZXJhdGlvbikgewogICAgICAgIGlmIChzcGVlZCA8IC0xKSBicmVha2luZ0ZvcmNlID0gbWF4QnJlYWtpbmdGb3JjZTtlbHNlIGVuZ2luZUZvcmNlID0gbWF4RW5naW5lRm9yY2U7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5icmFraW5nKSB7CiAgICAgICAgaWYgKHNwZWVkID4gMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IC1tYXhFbmdpbmVGb3JjZSAvIDI7CiAgICAgIH0KCiAgICAgIGlmIChzdGF0ZS5sZWZ0KSB7CiAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IHN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyArPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgfSBlbHNlIHsKICAgICAgICBpZiAoc3RhdGUucmlnaHQpIHsKICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiAtc3RlZXJpbmdDbGFtcCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nIDwgLXN0ZWVyaW5nSW5jcmVtZW50KSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7ZWxzZSB7CiAgICAgICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPiBzdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nIC09IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICAgIHN0YXRlLnZlaGljbGVTdGVlcmluZyA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5hcHBseUVuZ2luZUZvcmNlKGVuZ2luZUZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlIC8gMiwgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UsIEJBQ0tfUklHSFQpOwogICAgICB2ZWhpY2xlLnNldFN0ZWVyaW5nVmFsdWUoc3RhdGUudmVoaWNsZVN0ZWVyaW5nLCBGUk9OVF9MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfUklHSFQpOwogICAgICB2YXIgdG0sIHAsIHEsIGk7CiAgICAgIHZhciBuID0gdmVoaWNsZS5nZXROdW1XaGVlbHMoKTsKCiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICB2ZWhpY2xlLnVwZGF0ZVdoZWVsVHJhbnNmb3JtKGksIHRydWUpOwogICAgICAgIHRtID0gdmVoaWNsZS5nZXRXaGVlbFRyYW5zZm9ybVdTKGkpOwogICAgICAgIHAgPSB0bS5nZXRPcmlnaW4oKTsKICAgICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgICB2YXIgd2hlZWxVVUlEID0gd2hlZWxzW2ldOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh3aGVlbFVVSUQsIHAsIHEsIGR0KTsKICAgICAgfQoKICAgICAgdG0gPSB2ZWhpY2xlLmdldENoYXNzaXNXb3JsZFRyYW5zZm9ybSgpOwogICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgIHEgPSB0bS5nZXRSb3RhdGlvbigpOwogICAgICB2YXIgZGlyZWN0aW9uID0gdmVoaWNsZS5nZXRGb3J3YXJkVmVjdG9yKCk7CiAgICAgIHZhciBzcGVlZCA9IHZlaGljbGUuZ2V0Q3VycmVudFNwZWVkS21Ib3VyKCk7CiAgICAgIHZhciBleHRyYURhdGEgPSB7CiAgICAgICAgZGlyZWN0aW9uOiB7CiAgICAgICAgICB4OiBkaXJlY3Rpb24ueCgpLAogICAgICAgICAgeTogZGlyZWN0aW9uLnkoKSwKICAgICAgICAgIHo6IGRpcmVjdGlvbi56KCkKICAgICAgICB9LAogICAgICAgIHNwZWVkOiBzcGVlZAogICAgICB9OwogICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUodXVpZCwgcCwgcSwgZHQsIGV4dHJhRGF0YSk7CiAgICAgIHdvcmxkLnVwZGF0ZUJvZHlTdGF0ZSh1dWlkLCBzdGF0ZSk7CiAgICB9OwoKICAgIHZhciBjcmVhdGVHaG9zdENvbGxpZGVyID0gZnVuY3Rpb24gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIHBvc2l0aW9uKSB7CiAgICAgIHZhciBnaG9zdENvbGxpZGVyID0gbmV3IEFtbW8uYnRHaG9zdE9iamVjdCgpOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgZ2hvc3RDb2xsaWRlci5zZXRDb2xsaXNpb25TaGFwZShuZXcgQW1tby5idFNwaGVyZVNoYXBlKHJhZGl1cykpOwogICAgICBnaG9zdENvbGxpZGVyLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKHBvc2l0aW9uKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbigwLCAwLCAwLCAxKSk7CiAgICAgIGdob3N0Q29sbGlkZXIuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBnaG9zdENvbGxpZGVyOiBnaG9zdENvbGxpZGVyLAogICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtCiAgICAgIH07CiAgICB9OwogICAgdmFyIGZvckVhY2hHaG9zdENvbGxpc2lvbiA9IGZ1bmN0aW9uIGZvckVhY2hHaG9zdENvbGxpc2lvbihnaG9zdENvbGxpZGVyKSB7CiAgICAgIHZhciBmb3JFYWNoQ2FsbGJhY2sgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGZ1bmN0aW9uICgpIHt9OwogICAgICB2YXIgY29sbGlzaW9ucyA9IGdob3N0Q29sbGlkZXIuZ2V0TnVtT3ZlcmxhcHBpbmdPYmplY3RzKCk7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbGxpc2lvbnM7IGkrKykgewogICAgICAgIHZhciBvYmplY3QgPSBBbW1vLmNhc3RPYmplY3QoZ2hvc3RDb2xsaWRlci5nZXRPdmVybGFwcGluZ09iamVjdChpKSwgQW1tby5idFJpZ2lkQm9keSk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgb2JqZWN0LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgZm9yRWFjaENhbGxiYWNrKG9iamVjdCwgdHJhbnNmb3JtLCBpKTsKICAgICAgICBBbW1vLmRlc3Ryb3kodHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBnZXRFeHBsb3Npb25Qb3NpdGlvbiA9IGZ1bmN0aW9uIGdldEV4cGxvc2lvblBvc2l0aW9uKHV1aWQsIHBvc2l0aW9uKSB7CiAgICAgIHZhciBleHBsb3Npb25Qb3NpdGlvbiA9IHBvc2l0aW9uOwoKICAgICAgaWYgKCFleHBsb3Npb25Qb3NpdGlvbikgewogICAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICAgIGJvZHkgPSBfd29ybGQkZ2V0RWxlbWVudC5ib2R5OwoKICAgICAgICB2YXIgbW90aW9uU3RhdGUgPSBib2R5LmdldE1vdGlvblN0YXRlKCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBleHBsb3Npb25Qb3NpdGlvbiA9IHRyYW5zZm9ybS5nZXRPcmlnaW4oKTsKICAgICAgfQoKICAgICAgcmV0dXJuIGV4cGxvc2lvblBvc2l0aW9uOwogICAgfTsKICAgIHZhciBnZXRFeHBsb3Npb25JbXB1bHNlID0gZnVuY3Rpb24gZ2V0RXhwbG9zaW9uSW1wdWxzZShwb3NpdGlvbiwgZXhwbG9zaW9uUG9zaXRpb24sIHN0cmVuZ3RoKSB7CiAgICAgIHZhciBkaXN0YW5jZSA9IHBvc2l0aW9uLm9wX3N1YihleHBsb3Npb25Qb3NpdGlvbik7CiAgICAgIGRpc3RhbmNlLm5vcm1hbGl6ZSgpOwogICAgICB2YXIgaW1wdWxzZSA9IGRpc3RhbmNlLm9wX211bChzdHJlbmd0aCk7CiAgICAgIGltcHVsc2Uuc2V0WShpbXB1bHNlLnkoKSArIHN0cmVuZ3RoKTsKICAgICAgcmV0dXJuIGltcHVsc2U7CiAgICB9OwogICAgdmFyIGNyZWF0ZUV4cGxvc2lvbiA9IGZ1bmN0aW9uIGNyZWF0ZUV4cGxvc2lvbihfcmVmKSB7CiAgICAgIHZhciB1dWlkID0gX3JlZi51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBfcmVmLnBvc2l0aW9uLAogICAgICAgICAgX3JlZiRyYWRpdXMgPSBfcmVmLnJhZGl1cywKICAgICAgICAgIHJhZGl1cyA9IF9yZWYkcmFkaXVzID09PSB2b2lkIDAgPyBFWFBMT1NJT05fU0laRVMuU01BTEwgOiBfcmVmJHJhZGl1cywKICAgICAgICAgIF9yZWYkc3RyZW5ndGggPSBfcmVmLnN0cmVuZ3RoLAogICAgICAgICAgc3RyZW5ndGggPSBfcmVmJHN0cmVuZ3RoID09PSB2b2lkIDAgPyBFWFBMT1NJT05fU1RSRU5HVEhTLk1FRElVTSA6IF9yZWYkc3RyZW5ndGg7CgogICAgICB0cnkgewogICAgICAgIHZhciBleHBsb3Npb25Qb3NpdGlvbiA9IGdldEV4cGxvc2lvblBvc2l0aW9uKHV1aWQsIHBvc2l0aW9uKTsKCiAgICAgICAgdmFyIF9jcmVhdGVHaG9zdENvbGxpZGVyID0gY3JlYXRlR2hvc3RDb2xsaWRlcihyYWRpdXMsIGV4cGxvc2lvblBvc2l0aW9uKSwKICAgICAgICAgICAgZ2hvc3RDb2xsaWRlciA9IF9jcmVhdGVHaG9zdENvbGxpZGVyLmdob3N0Q29sbGlkZXIsCiAgICAgICAgICAgIHRyYW5zZm9ybSA9IF9jcmVhdGVHaG9zdENvbGxpZGVyLnRyYW5zZm9ybTsKCiAgICAgICAgd29ybGQuYWRkQ29sbGlzaW9uT2JqZWN0KGdob3N0Q29sbGlkZXIpOwogICAgICAgIGZvckVhY2hHaG9zdENvbGxpc2lvbihnaG9zdENvbGxpZGVyLCBmdW5jdGlvbiAob2JqZWN0LCBvYmplY3RUcmFuc2Zvcm0pIHsKICAgICAgICAgIHZhciBvcmlnaW4gPSBvYmplY3RUcmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgICBvYmplY3QuYWN0aXZhdGUodHJ1ZSk7CiAgICAgICAgICBvYmplY3QuYXBwbHlDZW50cmFsSW1wdWxzZShnZXRFeHBsb3Npb25JbXB1bHNlKG9yaWdpbiwgZXhwbG9zaW9uUG9zaXRpb24sIHN0cmVuZ3RoKSk7CiAgICAgICAgfSk7CiAgICAgICAgd29ybGQuZ2V0RHluYW1pY3NXb3JsZCgpLnJlbW92ZUNvbGxpc2lvbk9iamVjdChnaG9zdENvbGxpZGVyKTsKICAgICAgICBBbW1vLmRlc3Ryb3koZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zb2xlLmxvZyhlKTsKICAgICAgfQogICAgfTsKCiAgICB2YXIgaGFuZGxlTG9hZEV2ZW50ID0gZnVuY3Rpb24gaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIChBbW1vKSB7CiAgICAgICAgc2VsZi5BbW1vID0gQW1tbzsKCiAgICAgICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYpIHsKICAgICAgICAgIHZhciBkYXRhID0gX3JlZi5kYXRhOwoKICAgICAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5CT1g6CiAgICAgICAgICAgICAgYWRkQm94KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuU1BIRVJFOgogICAgICAgICAgICAgIGFkZFNwaGVyZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlZFSElDTEU6CiAgICAgICAgICAgICAgYWRkVmVoaWNsZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELk1PREVMOgogICAgICAgICAgICAgIGFkZE1vZGVsKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuUExBWUVSOgogICAgICAgICAgICAgIGFkZFBsYXllcihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5TRVQuTElORUFSX1ZFTE9DSVRZOgogICAgICAgICAgICAgIHNldExpbmVhclZlbG9jaXR5KGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRQb3NpdGlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUE9TSVRJT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5RVUFURVJOSU9OOgogICAgICAgICAgICAgIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlJFU0VUOgogICAgICAgICAgICAgIHJlc2V0VmVoaWNsZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5BUFBMWS5JTVBVTFNFOgogICAgICAgICAgICAgIGFwcGx5SW1wdXNlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlVQREFURToKICAgICAgICAgICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuRElTUE9TRToKICAgICAgICAgICAgICB3b3JsZC5kaXNwb3NlQm9keShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUZGRUNUUy5FWFBMT1NJT046CiAgICAgICAgICAgICAgY3JlYXRlRXhwbG9zaW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5URVJNSU5BVEU6CiAgICAgICAgICAgICAgd29ybGQudGVybWluYXRlKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgd29ybGQuaW5pdChvcHRpb25zKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFJlYWR5RXZlbnQoKTsKICAgICAgICB3b3JsZC5zaW11bGF0ZSgpOwogICAgICB9OwogICAgfTsKCiAgICB2YXIgbG9hZEFtbW8gPSBmdW5jdGlvbiBsb2FkQW1tbyhvcHRpb25zKSB7CiAgICAgIHZhciBzY3JpcHRVcmwgPSBvcHRpb25zLmhvc3QgKyAnLycgKyAob3B0aW9ucy5wYXRoIHx8IExJQlJBUllfTkFNRSk7CiAgICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0VXJsKTsKICAgICAgQW1tbygpLnRoZW4oaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpKTsKICAgIH07CgogICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYyKSB7CiAgICAgIHZhciBkYXRhID0gX3JlZjIuZGF0YTsKCiAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuTE9BRC5BTU1POgogICAgICAgICAgbG9hZEFtbW8oZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKCn0pKCk7Cgo=', null, false);
|
|
54929
|
+
}var WorkerFactory = createBase64WorkerFactory('Lyogcm9sbHVwLXBsdWdpbi13ZWItd29ya2VyLWxvYWRlciAqLwooZnVuY3Rpb24gKCkgewogICAgJ3VzZSBzdHJpY3QnOwoKICAgIHZhciBMSUJSQVJZX05BTUUgPSAnYW1tby5qcyc7CiAgICB2YXIgVFlQRVMgPSB7CiAgICAgIEJPWDogJ0JPWCcsCiAgICAgIFNQSEVSRTogJ1NQSEVSRScsCiAgICAgIFZFSElDTEU6ICdWRUhJQ0xFJywKICAgICAgTUVTSDogJ01FU0gnLAogICAgICBQTEFZRVI6ICdQTEFZRVInCiAgICB9OwogICAgdmFyIERFRkFVTFRfVkVISUNMRV9TVEFURSA9IHsKICAgICAgdmVoaWNsZVN0ZWVyaW5nOiAwLAogICAgICBhY2NlbGVyYXRpb246IGZhbHNlLAogICAgICBicmVha2luZzogZmFsc2UsCiAgICAgIHJpZ2h0OiBmYWxzZSwKICAgICAgbGVmdDogZmFsc2UKICAgIH07CiAgICB2YXIgREVGQVVMVF9SSUdJREJPRFlfU1RBVEUgPSB7CiAgICAgIHZlbG9jaXR5OiB7CiAgICAgICAgeDogMCwKICAgICAgICB5OiAwLAogICAgICAgIHo6IDAKICAgICAgfSwKICAgICAgbW92ZW1lbnQ6IHsKICAgICAgICBmb3J3YXJkOiBmYWxzZSwKICAgICAgICBiYWNrd2FyZHM6IGZhbHNlLAogICAgICAgIGxlZnQ6IGZhbHNlLAogICAgICAgIHJpZ2h0OiBmYWxzZQogICAgICB9LAogICAgICBkaXJlY3Rpb246IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgejogMAogICAgICB9CiAgICB9OwogICAgdmFyIERFRkFVTFRfU0NBTEUgPSB7CiAgICAgIHg6IDEsCiAgICAgIHk6IDEsCiAgICAgIHo6IDEKICAgIH07CiAgICB2YXIgREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgPSB7CiAgICAgIHg6IDAsCiAgICAgIHk6IDAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgREVGQVVMVF9JTVBVTFNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB6OiAwCiAgICB9OwogICAgdmFyIERJU0FCTEVfREVBQ1RJVkFUSU9OID0gNDsKICAgIHZhciBHUkFWSVRZID0gewogICAgICB4OiAwLAogICAgICB5OiAtMTAsCiAgICAgIHo6IDAKICAgIH07CiAgICB2YXIgRlJPTlRfTEVGVCA9IDA7CiAgICB2YXIgRlJPTlRfUklHSFQgPSAxOwogICAgdmFyIEJBQ0tfTEVGVCA9IDI7CiAgICB2YXIgQkFDS19SSUdIVCA9IDM7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19JTkNSRU1FTlQgPSAuMDQ7CiAgICB2YXIgREVGQVVMVF9TVEVFUklOR19DTEFNUCA9IC41OwogICAgdmFyIERFRkFVTFRfTUFYX0VOR0lORV9GT1JDRSA9IDIwMDA7CiAgICB2YXIgREVGQVVMVF9NQVhfQlJFQUtJTkdfRk9SQ0UgPSAxMDA7CiAgICB2YXIgRVhQTE9TSU9OX1NJWkVTID0gewogICAgICBTTUFMTDogNCwKICAgICAgTUVESVVNOiA2LAogICAgICBMQVJHRTogOCwKICAgICAgTUFTU0lWRTogMTIKICAgIH07CiAgICB2YXIgRVhQTE9TSU9OX1NUUkVOR1RIUyA9IHsKICAgICAgVkVSWV9XRUFLOiAyLAogICAgICBXRUFLOiA0LAogICAgICBNRURJVU06IDgsCiAgICAgIExBUkdFOiAxNiwKICAgICAgTUFTU0lWRTogMzIsCiAgICAgIE9LX05POiA2NAogICAgfTsKCiAgICB2YXIgUEhZU0lDU19FVkVOVFMgPSB7CiAgICAgIERJU1BBVENIOiAncGh5c2ljczpkaXNwYXRjaCcsCiAgICAgIFRFUk1JTkFURTogJ3BoeXNpY3M6dGVybWluYXRlJywKICAgICAgTE9BRDogewogICAgICAgIEFNTU86ICdwaHlzaWNzOmxvYWQ6YW1tbycKICAgICAgfSwKICAgICAgUkVBRFk6ICdwaHlzaWNzOnJlYWR5JywKICAgICAgSU5JVDogJ3BoeXNpY3M6aW5pdCcsCiAgICAgIFVQREFURTogJ3BoeXNpY3M6dXBkYXRlJywKICAgICAgQUREOiB7CiAgICAgICAgQk9YOiAncGh5c2ljczphZGQ6Ym94JywKICAgICAgICBWRUhJQ0xFOiAncGh5c2ljczphZGQ6dmVoaWNsZScsCiAgICAgICAgTU9ERUw6ICdwaHlzaWNzOmFkZDptb2RlbCcsCiAgICAgICAgUExBWUVSOiAncGh5c2ljczphZGQ6cGxheWVyJywKICAgICAgICBTUEhFUkU6ICdwaHlzaWNzOmFkZDpzcGhlcmUnCiAgICAgIH0sCiAgICAgIEVMRU1FTlQ6IHsKICAgICAgICBESVNQT1NFOiAncGh5c2ljczplbGVtZW50OmRpc3Bvc2UnLAogICAgICAgIENPTExJU0lPTjogJ3BoeXNpY3M6ZWxlbWVudDpjb2xsaXNpb24nLAogICAgICAgIFVQREFURTogJ3BoeXNpY3M6ZWxlbWVudDp1cGRhdGUnLAogICAgICAgIENSRUFURUQ6ICdwaHlzaWNzOmVsZW1lbnQ6Y3JlYXRlZCcsCiAgICAgICAgU0VUOiB7CiAgICAgICAgICBQT1NJVElPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cG9zaXRpb24nLAogICAgICAgICAgUVVBVEVSTklPTjogJ3BoeXNpY3M6ZWxlbWVudDpzZXQ6cXVhdGVybmlvbicsCiAgICAgICAgICBMSU5FQVJfVkVMT0NJVFk6ICdwaHlzaWNzOmVsZW1lbnQ6c2V0OmxpbmVhcl92ZWxvY2l0eScKICAgICAgICB9LAogICAgICAgIFJFU0VUOiAncGh5c2ljczplbGVtZW50OnJlc2V0JywKICAgICAgICBBUFBMWTogewogICAgICAgICAgSU1QVUxTRTogJ3BoeXNpY3M6ZWxlbWVudDphcHBseTppbXB1bHNlJwogICAgICAgIH0KICAgICAgfSwKICAgICAgVkVISUNMRTogewogICAgICAgIFNFVDogewogICAgICAgICAgUE9TSVRJT046ICdwaHlzaWNzOnZlaGljbGU6c2V0OnBvc2l0aW9uJywKICAgICAgICAgIFFVQVRFUk5JT046ICdwaHlzaWNzOnZlaGljbGU6c2V0OnF1YXRlcm5pb24nCiAgICAgICAgfSwKICAgICAgICBSRVNFVDogJ3BoeXNpY3M6dmVoaWNsZTpyZXNldCcsCiAgICAgICAgU1BFRUQ6ICdwaHlzaWNzOnZlaGljbGU6c3BlZWQnLAogICAgICAgIERJUkVDVElPTjogJ3BoeXNpY3M6dmVoaWNsZTpkaXJlY3Rpb24nCiAgICAgIH0sCiAgICAgIEVGRkVDVFM6IHsKICAgICAgICBFWFBMT1NJT046ICdwaHlzaWNzOmVmZmVjdHM6ZXhwbG9zaW9uJwogICAgICB9CiAgICB9OwoKICAgIGZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgewogICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7CgogICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgewogICAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOwogICAgICAgIGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7CiAgICAgICAgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7CiAgICAgIH0KCiAgICAgIHJldHVybiBrZXlzOwogICAgfQoKICAgIGZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKHRhcmdldCkgewogICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OwogICAgICAgIGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7CiAgICAgICAgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOwogICAgICAgIH0pOwogICAgICB9CgogICAgICByZXR1cm4gdGFyZ2V0OwogICAgfQoKICAgIGZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsKICAgICAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsKICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07CiAgICAgICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOwogICAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsKICAgICAgICBpZiAoInZhbHVlIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsKICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7CiAgICAgIGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOwogICAgICBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgInByb3RvdHlwZSIsIHsKICAgICAgICB3cml0YWJsZTogZmFsc2UKICAgICAgfSk7CiAgICAgIHJldHVybiBDb25zdHJ1Y3RvcjsKICAgIH0KCiAgICBmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7CiAgICAgIGlmIChrZXkgaW4gb2JqKSB7CiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7CiAgICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgd3JpdGFibGU6IHRydWUKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvYmpba2V5XSA9IHZhbHVlOwogICAgICB9CgogICAgICByZXR1cm4gb2JqOwogICAgfQoKICAgIHZhciBEaXNwYXRjaGVyID0gZnVuY3Rpb24gRGlzcGF0Y2hlcigpIHsKICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIERpc3BhdGNoZXIpOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kUGh5c2ljc1VwZGF0ZSIsIGZ1bmN0aW9uIChkdCkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZSh7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuVVBEQVRFLAogICAgICAgICAgZHQ6IGR0CiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kUmVhZHlFdmVudCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gcG9zdE1lc3NhZ2UoewogICAgICAgICAgZXZlbnQ6IFBIWVNJQ1NfRVZFTlRTLlJFQURZCiAgICAgICAgfSk7CiAgICAgIH0pOwoKICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzZW5kVGVybWluYXRlRXZlbnQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5URVJNSU5BVEUKICAgICAgICB9KTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmRCb2R5VXBkYXRlIiwgZnVuY3Rpb24gKHV1aWQsIHBvc2l0aW9uLCByb3RhdGlvbiwgZHQsIGV4dHJhRGF0YSkgewogICAgICAgIHJldHVybiBwb3N0TWVzc2FnZShfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7CiAgICAgICAgICBldmVudDogUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5VUERBVEUsCiAgICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgICAgcG9zaXRpb246IHsKICAgICAgICAgICAgeDogcG9zaXRpb24ueCgpLAogICAgICAgICAgICB5OiBwb3NpdGlvbi55KCksCiAgICAgICAgICAgIHo6IHBvc2l0aW9uLnooKQogICAgICAgICAgfSwKICAgICAgICAgIHF1YXRlcm5pb246IHsKICAgICAgICAgICAgeDogcm90YXRpb24ueCgpLAogICAgICAgICAgICB5OiByb3RhdGlvbi55KCksCiAgICAgICAgICAgIHo6IHJvdGF0aW9uLnooKSwKICAgICAgICAgICAgdzogcm90YXRpb24udygpCiAgICAgICAgICB9CiAgICAgICAgfSwgZXh0cmFEYXRhKSwge30sIHsKICAgICAgICAgIGR0OiBkdAogICAgICAgIH0pKTsKICAgICAgfSk7CgogICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInNlbmREaXNwYXRjaEV2ZW50IiwgZnVuY3Rpb24gKHV1aWQsIGV2ZW50TmFtZSwgZXZlbnREYXRhKSB7CiAgICAgICAgcmV0dXJuIHBvc3RNZXNzYWdlKHsKICAgICAgICAgIGV2ZW50OiBQSFlTSUNTX0VWRU5UUy5ESVNQQVRDSCwKICAgICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgICBldmVudE5hbWU6IGV2ZW50TmFtZSwKICAgICAgICAgIGV2ZW50RGF0YTogZXZlbnREYXRhCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfTsKICAgIHZhciBkaXNwYXRjaGVyJDEgPSBuZXcgRGlzcGF0Y2hlcigpOwoKICAgIHZhciBhcHBseU1hdHJpeDRUb1ZlY3RvcjMgPSBmdW5jdGlvbiBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoX3JlZikgewogICAgICB2YXIgX3JlZiR4ID0gX3JlZi54LAogICAgICAgICAgeCA9IF9yZWYkeCA9PT0gdm9pZCAwID8gMCA6IF9yZWYkeCwKICAgICAgICAgIF9yZWYkeSA9IF9yZWYueSwKICAgICAgICAgIHkgPSBfcmVmJHkgPT09IHZvaWQgMCA/IDAgOiBfcmVmJHksCiAgICAgICAgICBfcmVmJHogPSBfcmVmLnosCiAgICAgICAgICB6ID0gX3JlZiR6ID09PSB2b2lkIDAgPyAwIDogX3JlZiR6OwogICAgICB2YXIgbWF0cml4ID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBbXTsKICAgICAgdmFyIHcgPSAxIC8gKG1hdHJpeFszXSAqIHggKyBtYXRyaXhbN10gKiB5ICsgbWF0cml4WzExXSAqIHogKyBtYXRyaXhbMTVdKTsKICAgICAgcmV0dXJuIHsKICAgICAgICB4OiAobWF0cml4WzBdICogeCArIG1hdHJpeFs0XSAqIHkgKyBtYXRyaXhbOF0gKiB6ICsgbWF0cml4WzEyXSkgKiB3LAogICAgICAgIHk6IChtYXRyaXhbMV0gKiB4ICsgbWF0cml4WzVdICogeSArIG1hdHJpeFs5XSAqIHogKyBtYXRyaXhbMTNdKSAqIHcsCiAgICAgICAgejogKG1hdHJpeFsyXSAqIHggKyBtYXRyaXhbNl0gKiB5ICsgbWF0cml4WzEwXSAqIHogKyBtYXRyaXhbMTRdKSAqIHcKICAgICAgfTsKICAgIH07CgogICAgdmFyIGNyZWF0ZVJpZ2lkQm9keSA9IGZ1bmN0aW9uIGNyZWF0ZVJpZ2lkQm9keShzaGFwZSwgb3B0aW9ucykgewogICAgICB2YXIgdXVpZCA9IG9wdGlvbnMudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiwKICAgICAgICAgIHF1YXRlcm5pb24gPSBvcHRpb25zLnF1YXRlcm5pb24sCiAgICAgICAgICBtYXNzID0gb3B0aW9ucy5tYXNzLAogICAgICAgICAgZnJpY3Rpb24gPSBvcHRpb25zLmZyaWN0aW9uLAogICAgICAgICAgX29wdGlvbnMkcmVzdGl0dXRpb24gPSBvcHRpb25zLnJlc3RpdHV0aW9uLAogICAgICAgICAgcmVzdGl0dXRpb24gPSBfb3B0aW9ucyRyZXN0aXR1dGlvbiA9PT0gdm9pZCAwID8gLjkgOiBfb3B0aW9ucyRyZXN0aXR1dGlvbiwKICAgICAgICAgIF9vcHRpb25zJGRhbXBpbmcgPSBvcHRpb25zLmRhbXBpbmcsCiAgICAgICAgICBkYW1waW5nID0gX29wdGlvbnMkZGFtcGluZyA9PT0gdm9pZCAwID8gewogICAgICAgIGxpbmVhcjogMC4yLAogICAgICAgIGFuZ3VsYXI6IDAuMgogICAgICB9IDogX29wdGlvbnMkZGFtcGluZzsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KSk7CiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IG5ldyBBbW1vLmJ0RGVmYXVsdE1vdGlvblN0YXRlKHRyYW5zZm9ybSk7CiAgICAgIHZhciBsb2NhbEluZXJ0aWEgPSBuZXcgQW1tby5idFZlY3RvcjMoMCwgMCwgMCk7CiAgICAgIHNoYXBlLmNhbGN1bGF0ZUxvY2FsSW5lcnRpYShtYXNzLCBsb2NhbEluZXJ0aWEpOwogICAgICB2YXIgcmJJbmZvID0gbmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBzaGFwZSwgbG9jYWxJbmVydGlhKTsKICAgICAgdmFyIGJvZHkgPSBuZXcgQW1tby5idFJpZ2lkQm9keShyYkluZm8pOwoKICAgICAgaWYgKG1hc3MgPiAwKSB7CiAgICAgICAgYm9keS5zZXRGcmljdGlvbihmcmljdGlvbik7CiAgICAgICAgYm9keS5zZXRSZXN0aXR1dGlvbihyZXN0aXR1dGlvbik7CiAgICAgICAgYm9keS5zZXREYW1waW5nKGRhbXBpbmcubGluZWFyLCBkYW1waW5nLmFuZ3VsYXIpOwogICAgICAgIGJvZHkuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTsKICAgICAgfSAvLyBzdG9yaW5nIHV1aWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UKCgogICAgICBib2R5LnV1aWQgPSB1dWlkOwogICAgICB3b3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgIHJldHVybiBib2R5OwogICAgfTsKICAgIHZhciBhZGRNb2RlbCA9IGZ1bmN0aW9uIGFkZE1vZGVsKG9wdGlvbnMpIHsKICAgICAgdmFyIHV1aWQgPSBvcHRpb25zLnV1aWQsCiAgICAgICAgICB2ZXJ0aWNlcyA9IG9wdGlvbnMudmVydGljZXMsCiAgICAgICAgICBtYXRyaWNlcyA9IG9wdGlvbnMubWF0cmljZXMsCiAgICAgICAgICBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzLAogICAgICAgICAgcG9zaXRpb24gPSBvcHRpb25zLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IG9wdGlvbnMucXVhdGVybmlvbiwKICAgICAgICAgIF9vcHRpb25zJG1hc3MgPSBvcHRpb25zLm1hc3MsCiAgICAgICAgICBtYXNzID0gX29wdGlvbnMkbWFzcyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJG1hc3MsCiAgICAgICAgICBfb3B0aW9ucyRmcmljdGlvbiA9IG9wdGlvbnMuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9vcHRpb25zJGZyaWN0aW9uID09PSB2b2lkIDAgPyAyIDogX29wdGlvbnMkZnJpY3Rpb247CiAgICAgIHZhciBzY2FsZSA9IERFRkFVTFRfU0NBTEU7CiAgICAgIHZhciBidGEgPSBuZXcgQW1tby5idFZlY3RvcjMoKTsKICAgICAgdmFyIGJ0YiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygpOwogICAgICB2YXIgYnRjID0gbmV3IEFtbW8uYnRWZWN0b3IzKCk7CiAgICAgIHZhciB0cmlNZXNoID0gbmV3IEFtbW8uYnRUcmlhbmdsZU1lc2godHJ1ZSwgZmFsc2UpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZXJ0aWNlcy5sZW5ndGg7IGkrKykgewogICAgICAgIHZhciBjb21wb25lbnRzID0gdmVydGljZXNbaV07CiAgICAgICAgdmFyIGluZGV4ID0gaW5kZXhlc1tpXSA/IGluZGV4ZXNbaV0gOiBudWxsOwogICAgICAgIHZhciBtYXRyaXggPSBBcnJheS5mcm9tKG1hdHJpY2VzW2ldKTsKCiAgICAgICAgaWYgKGluZGV4KSB7CiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGluZGV4Lmxlbmd0aDsgaiArPSAzKSB7CiAgICAgICAgICAgIHZhciBhaSA9IGluZGV4W2pdICogMzsKICAgICAgICAgICAgdmFyIGJpID0gaW5kZXhbaiArIDFdICogMzsKICAgICAgICAgICAgdmFyIGNpID0gaW5kZXhbaiArIDJdICogMzsKICAgICAgICAgICAgdmFyIHZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW2FpXSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW2FpICsgMV0sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1thaSArIDJdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CiAgICAgICAgICAgIHZhciB2YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tiaV0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tiaSArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbYmkgKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwogICAgICAgICAgICB2YXIgdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbY2ldLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbY2kgKyAxXSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW2NpICsgMl0KICAgICAgICAgICAgfSwgbWF0cml4KTsKICAgICAgICAgICAgYnRhLnNldFZhbHVlKHZhLngsIHZhLnksIHZhLnopOwogICAgICAgICAgICBidGIuc2V0VmFsdWUodmIueCwgdmIueSwgdmIueik7CiAgICAgICAgICAgIGJ0Yy5zZXRWYWx1ZSh2Yy54LCB2Yy55LCB2Yy56KTsKICAgICAgICAgICAgdHJpTWVzaC5hZGRUcmlhbmdsZShidGEsIGJ0YiwgYnRjLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBjb21wb25lbnRzLmxlbmd0aDsgX2ogKz0gOSkgewogICAgICAgICAgICB2YXIgX3ZhID0gYXBwbHlNYXRyaXg0VG9WZWN0b3IzKHsKICAgICAgICAgICAgICB4OiBjb21wb25lbnRzW19qICsgMF0sCiAgICAgICAgICAgICAgeTogY29tcG9uZW50c1tfaiArIDFdLAogICAgICAgICAgICAgIHo6IGNvbXBvbmVudHNbX2ogKyAyXQogICAgICAgICAgICB9LCBtYXRyaXgpOwoKICAgICAgICAgICAgdmFyIF92YiA9IGFwcGx5TWF0cml4NFRvVmVjdG9yMyh7CiAgICAgICAgICAgICAgeDogY29tcG9uZW50c1tfaiArIDNdLAogICAgICAgICAgICAgIHk6IGNvbXBvbmVudHNbX2ogKyA0XSwKICAgICAgICAgICAgICB6OiBjb21wb25lbnRzW19qICsgNV0KICAgICAgICAgICAgfSwgbWF0cml4KTsKCiAgICAgICAgICAgIHZhciBfdmMgPSBhcHBseU1hdHJpeDRUb1ZlY3RvcjMoewogICAgICAgICAgICAgIHg6IGNvbXBvbmVudHNbX2ogKyA2XSwKICAgICAgICAgICAgICB5OiBjb21wb25lbnRzW19qICsgN10sCiAgICAgICAgICAgICAgejogY29tcG9uZW50c1tfaiArIDhdCiAgICAgICAgICAgIH0sIG1hdHJpeCk7CgogICAgICAgICAgICBidGEuc2V0VmFsdWUoX3ZhLngsIF92YS55LCBfdmEueik7CiAgICAgICAgICAgIGJ0Yi5zZXRWYWx1ZShfdmIueCwgX3ZiLnksIF92Yi56KTsKICAgICAgICAgICAgYnRjLnNldFZhbHVlKF92Yy54LCBfdmMueSwgX3ZjLnopOwogICAgICAgICAgICB0cmlNZXNoLmFkZFRyaWFuZ2xlKGJ0YSwgYnRiLCBidGMsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KCiAgICAgIHZhciBsb2NhbFNjYWxlID0gbmV3IEFtbW8uYnRWZWN0b3IzKHNjYWxlLngsIHNjYWxlLnksIHNjYWxlLnopOwogICAgICB0cmlNZXNoLnNldFNjYWxpbmcobG9jYWxTY2FsZSk7CiAgICAgIEFtbW8uZGVzdHJveShsb2NhbFNjYWxlKTsKICAgICAgdmFyIGNvbGxpc2lvblNoYXBlID0gbmV3IEFtbW8uYnRCdmhUcmlhbmdsZU1lc2hTaGFwZSh0cmlNZXNoLCB0cnVlLCB0cnVlKTsKICAgICAgY29sbGlzaW9uU2hhcGUucmVzb3VyY2VzID0gW3RyaU1lc2hdOwogICAgICBBbW1vLmRlc3Ryb3koYnRhKTsKICAgICAgQW1tby5kZXN0cm95KGJ0Yik7CiAgICAgIEFtbW8uZGVzdHJveShidGMpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShjb2xsaXNpb25TaGFwZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLmFkZEVsZW1lbnQoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5NRVNILAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgYWRkQm94ID0gZnVuY3Rpb24gYWRkQm94KGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICB3aWR0aCA9IGRhdGEud2lkdGgsCiAgICAgICAgICBsZW5ndGggPSBkYXRhLmxlbmd0aCwKICAgICAgICAgIGhlaWdodCA9IGRhdGEuaGVpZ2h0LAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIF9kYXRhJG1hc3MgPSBkYXRhLm1hc3MsCiAgICAgICAgICBtYXNzID0gX2RhdGEkbWFzcyA9PT0gdm9pZCAwID8gMCA6IF9kYXRhJG1hc3MsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbiA9IGRhdGEuZnJpY3Rpb24sCiAgICAgICAgICBmcmljdGlvbiA9IF9kYXRhJGZyaWN0aW9uID09PSB2b2lkIDAgPyAyIDogX2RhdGEkZnJpY3Rpb247CiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogMC41LCBoZWlnaHQgKiAwLjUsIGxlbmd0aCAqIDAuNSkpOwogICAgICB2YXIgYm9keSA9IGNyZWF0ZVJpZ2lkQm9keShnZW9tZXRyeSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7CiAgICAgIHdvcmxkLmFkZEVsZW1lbnQoewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgYm9keTogYm9keSwKICAgICAgICB0eXBlOiBUWVBFUy5CT1gsCiAgICAgICAgc3RhdGU6IERFRkFVTFRfUklHSURCT0RZX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBhZGRTcGhlcmUgPSBmdW5jdGlvbiBhZGRTcGhlcmUoZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHJhZGl1cyA9IGRhdGEucmFkaXVzLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbiwKICAgICAgICAgIF9kYXRhJG1hc3MyID0gZGF0YS5tYXNzLAogICAgICAgICAgbWFzcyA9IF9kYXRhJG1hc3MyID09PSB2b2lkIDAgPyAwIDogX2RhdGEkbWFzczIsCiAgICAgICAgICBfZGF0YSRmcmljdGlvbjIgPSBkYXRhLmZyaWN0aW9uLAogICAgICAgICAgZnJpY3Rpb24gPSBfZGF0YSRmcmljdGlvbjIgPT09IHZvaWQgMCA/IDIgOiBfZGF0YSRmcmljdGlvbjI7CiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0U3BoZXJlU2hhcGUocmFkaXVzKTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoZ2VvbWV0cnksIHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbiwKICAgICAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLAogICAgICAgIG1hc3M6IG1hc3MsCiAgICAgICAgZnJpY3Rpb246IGZyaWN0aW9uCiAgICAgIH0pOwogICAgICB3b3JsZC5hZGRFbGVtZW50KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuU1BIRVJFLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgc2V0TGluZWFyVmVsb2NpdHkgPSBmdW5jdGlvbiBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgX2RhdGEkdmVsb2NpdHkgPSBkYXRhLnZlbG9jaXR5LAogICAgICAgICAgdmVsb2NpdHkgPSBfZGF0YSR2ZWxvY2l0eSA9PT0gdm9pZCAwID8gREVGQVVMVF9MSU5FQVJfVkVMT0NJVFkgOiBfZGF0YSR2ZWxvY2l0eTsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCksCiAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQuYm9keTsKCiAgICAgIHZhciBtb3Rpb25TdGF0ZSA9IGJvZHkuZ2V0TW90aW9uU3RhdGUoKTsKCiAgICAgIGlmIChtb3Rpb25TdGF0ZSkgewogICAgICAgIHZhciBsaW5lYXJWZWxvY2l0eSA9IG5ldyBBbW1vLmJ0VmVjdG9yMyh2ZWxvY2l0eS54LCB2ZWxvY2l0eS55LCB2ZWxvY2l0eS56KTsKICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTsKICAgICAgICBBbW1vLmRlc3Ryb3kobGluZWFyVmVsb2NpdHkpOwogICAgICB9CiAgICB9OwogICAgdmFyIHNldFBvc2l0aW9uID0gZnVuY3Rpb24gc2V0UG9zaXRpb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudDIgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50Mi5ib2R5OwoKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICB9OwogICAgdmFyIHJlc2V0RWxlbWVudCA9IGZ1bmN0aW9uIHJlc2V0RWxlbWVudChkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uLAogICAgICAgICAgcXVhdGVybmlvbiA9IGRhdGEucXVhdGVybmlvbjsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudDMgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50My5ib2R5OwoKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihuZXcgQW1tby5idFZlY3RvcjMocG9zaXRpb24ueCwgcG9zaXRpb24ueSwgcG9zaXRpb24ueikpOwogICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICB9OwogICAgdmFyIGFwcGx5SW1wdXNlID0gZnVuY3Rpb24gYXBwbHlJbXB1c2UoX3JlZikgewogICAgICB2YXIgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkaW1wdWxzZSA9IF9yZWYuaW1wdWxzZSwKICAgICAgICAgIGltcHVsc2UgPSBfcmVmJGltcHVsc2UgPT09IHZvaWQgMCA/IERFRkFVTFRfSU1QVUxTRSA6IF9yZWYkaW1wdWxzZTsKCiAgICAgIHZhciBfd29ybGQkZ2V0RWxlbWVudDQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgYm9keSA9IF93b3JsZCRnZXRFbGVtZW50NC5ib2R5OwoKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIGltcHVsc2VWZWN0b3IgPSBuZXcgQW1tby5idFZlY3RvcjMoaW1wdWxzZS54LCBpbXB1bHNlLnksIGltcHVsc2Uueik7CiAgICAgICAgYm9keS5hcHBseUNlbnRyYWxJbXB1bHNlKGltcHVsc2VWZWN0b3IpOwogICAgICAgIEFtbW8uZGVzdHJveShpbXB1bHNlVmVjdG9yKTsKICAgICAgfQogICAgfTsKICAgIHZhciBoYW5kbGVFbGVtZW50VXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlRWxlbWVudFVwZGF0ZShfcmVmMiwgZHQpIHsKICAgICAgdmFyIGJvZHkgPSBfcmVmMi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYyLnV1aWQ7CiAgICAgICAgICBfcmVmMi5zdGF0ZTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgb3JpZ2luID0gdHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgIHZhciByb3RhdGlvbiA9IHRyYW5zZm9ybS5nZXRSb3RhdGlvbigpOwogICAgICAgIGRpc3BhdGNoZXIkMS5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGFkZFBsYXllciA9IGZ1bmN0aW9uIGFkZFBsYXllcihkYXRhKSB7CiAgICAgIHZhciB1dWlkID0gZGF0YS51dWlkLAogICAgICAgICAgd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgaGVpZ2h0ID0gZGF0YS5oZWlnaHQsCiAgICAgICAgICBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbjsKICAgICAgdmFyIGNhcHN1bGUgPSBuZXcgQW1tby5idENhcHN1bGVTaGFwZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgdmFyIGJvZHkgPSBjcmVhdGVSaWdpZEJvZHkoY2Fwc3VsZSwgewogICAgICAgIHV1aWQ6IHV1aWQsCiAgICAgICAgcG9zaXRpb246IHBvc2l0aW9uLAogICAgICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sCiAgICAgICAgbWFzczogbWFzcywKICAgICAgICBmcmljdGlvbjogZnJpY3Rpb24KICAgICAgfSk7IC8vIGRpc2FibGlpbmcgcm90YXRpb24gZm9yIGNvbGxpc2lvbnMKCiAgICAgIGJvZHkuc2V0QW5ndWxhckZhY3RvcigwKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGJvZHkpOwogICAgICB3b3JsZC5hZGRFbGVtZW50KHsKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIGJvZHk6IGJvZHksCiAgICAgICAgdHlwZTogVFlQRVMuUExBWUVSLAogICAgICAgIHN0YXRlOiBERUZBVUxUX1JJR0lEQk9EWV9TVEFURQogICAgICB9KTsKICAgIH07CiAgICB2YXIgaGFuZGxlUGxheWVyVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlUGxheWVyVXBkYXRlKF9yZWYsIGR0KSB7CiAgICAgIHZhciBib2R5ID0gX3JlZi5ib2R5LAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1JJR0lEQk9EWV9TVEFURSA6IF9yZWYkc3RhdGU7CiAgICAgIHZhciBtb3ZlbWVudCA9IHN0YXRlLm1vdmVtZW50OwogICAgICAgICAgc3RhdGUuZGlyZWN0aW9uOwogICAgICAgICAgdmFyIGNhbWVyYURpcmVjdGlvbiA9IHN0YXRlLmNhbWVyYURpcmVjdGlvbjsKICAgICAgICAgIHN0YXRlLnF1YXRlcm5pb247CiAgICAgICAgICBzdGF0ZS5wb3NpdGlvbjsKICAgICAgdmFyIE1BWF9TUEVFRCA9IDE7CiAgICAgIHZhciB3YWxrVmVsb2NpdHkgPSAuMTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwoKICAgICAgaWYgKG1vdGlvblN0YXRlKSB7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgbW90aW9uU3RhdGUuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB2YXIgbGluZWFyVmVsb2NpdHkgPSBib2R5LmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgdmFyIHNwZWVkID0gbGluZWFyVmVsb2NpdHkubGVuZ3RoKCk7CiAgICAgICAgdmFyIGZvcndhcmREaXIgPSB0cmFuc2Zvcm0uZ2V0QmFzaXMoKS5nZXRSb3coMik7CiAgICAgICAgZm9yd2FyZERpci5ub3JtYWxpemUoKTsKICAgICAgICB2YXIgd2Fsa0RpcmVjdGlvbiA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLjAsIDAuMCwgMC4wKTsKICAgICAgICB2YXIgd2Fsa1NwZWVkID0gd2Fsa1ZlbG9jaXR5ICogZHQ7CgogICAgICAgIGlmIChtb3ZlbWVudC5mb3J3YXJkKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgKyBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSArIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgKyBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAobW92ZW1lbnQuYmFja3dhcmRzKSB7CiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFgod2Fsa0RpcmVjdGlvbi54KCkgLSBmb3J3YXJkRGlyLngoKSk7IC8vd2Fsa0RpcmVjdGlvbi5zZXRZKCB3YWxrRGlyZWN0aW9uLnkoKSAtIGZvcndhcmREaXIueSgpKTsKCiAgICAgICAgICB3YWxrRGlyZWN0aW9uLnNldFood2Fsa0RpcmVjdGlvbi56KCkgLSBmb3J3YXJkRGlyLnooKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoIW1vdmVtZW50LmZvcndhcmQgJiYgIW1vdmVtZW50LmJhY2t3YXJkcykgewogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WChsaW5lYXJWZWxvY2l0eS54KCkgKiAwLjIpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKiAwLjIpOwogICAgICAgIH0gZWxzZSBpZiAoc3BlZWQgPCBNQVhfU1BFRUQpIHsKICAgICAgICAgIGxpbmVhclZlbG9jaXR5LnNldFgobGluZWFyVmVsb2NpdHkueCgpICsgY2FtZXJhRGlyZWN0aW9uLnggKiB3YWxrU3BlZWQpOwogICAgICAgICAgbGluZWFyVmVsb2NpdHkuc2V0WihsaW5lYXJWZWxvY2l0eS56KCkgKyBjYW1lcmFEaXJlY3Rpb24ueiAqIHdhbGtTcGVlZCk7CiAgICAgICAgfQoKICAgICAgICBib2R5LnNldExpbmVhclZlbG9jaXR5KGxpbmVhclZlbG9jaXR5KTsKICAgICAgICBib2R5LmdldE1vdGlvblN0YXRlKCkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICBib2R5LnNldENlbnRlck9mTWFzc1RyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHZhciBvcmlnaW4gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgICAgdmFyIHJvdGF0aW9uID0gdHJhbnNmb3JtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgZGlzcGF0Y2hlci5zZW5kQm9keVVwZGF0ZSh1dWlkLCBvcmlnaW4sIHJvdGF0aW9uLCBkdCk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIENsb2NrID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gQ2xvY2soKSB7CiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENsb2NrKTsKCiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSBudWxsOwogICAgICB9CgogICAgICBfY3JlYXRlQ2xhc3MoQ2xvY2ssIFt7CiAgICAgICAga2V5OiAiZ2V0RGVsdGEiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBnZXREZWx0YSgpIHsKICAgICAgICAgIHZhciB0aW1lID0gRGF0ZS5ub3coKTsKCiAgICAgICAgICBpZiAodGhpcy50aW1lc3RhbXApIHsKICAgICAgICAgICAgdmFyIGRlbHRhID0gdGltZSAtIHRoaXMudGltZXN0YW1wOwogICAgICAgICAgICB0aGlzLnRpbWVzdGFtcCA9IHRpbWU7CiAgICAgICAgICAgIHJldHVybiBkZWx0YTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gdGltZTsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9XSk7CgogICAgICByZXR1cm4gQ2xvY2s7CiAgICB9KCk7CgogICAgdmFyIFdvcmxkID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgZnVuY3Rpb24gV29ybGQoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKCiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFdvcmxkKTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpbml0IiwgZnVuY3Rpb24gKG9wdGlvbnMpIHsKICAgICAgICAgIHZhciBfb3B0aW9ucyRncmF2aXR5ID0gb3B0aW9ucy5ncmF2aXR5LAogICAgICAgICAgICAgIGdyYXZpdHkgPSBfb3B0aW9ucyRncmF2aXR5ID09PSB2b2lkIDAgPyBHUkFWSVRZIDogX29wdGlvbnMkZ3Jhdml0eTsKICAgICAgICAgIF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24gPSBuZXcgQW1tby5idERlZmF1bHRDb2xsaXNpb25Db25maWd1cmF0aW9uKCk7CiAgICAgICAgICBfdGhpcy5kaXNwYXRjaGVyID0gbmV3IEFtbW8uYnRDb2xsaXNpb25EaXNwYXRjaGVyKF90aGlzLmNvbGxpc2lvbkNvbmZpZ3VyYXRpb24pOwogICAgICAgICAgX3RoaXMuYnJvYWRwaGFzZSA9IG5ldyBBbW1vLmJ0RGJ2dEJyb2FkcGhhc2UoKTsKICAgICAgICAgIF90aGlzLnNvbHZlciA9IG5ldyBBbW1vLmJ0U2VxdWVudGlhbEltcHVsc2VDb25zdHJhaW50U29sdmVyKCk7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkID0gbmV3IEFtbW8uYnREaXNjcmV0ZUR5bmFtaWNzV29ybGQoX3RoaXMuZGlzcGF0Y2hlciwgX3RoaXMuYnJvYWRwaGFzZSwgX3RoaXMuc29sdmVyLCBfdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uKTsKCiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLnNldEdyYXZpdHkobmV3IEFtbW8uYnRWZWN0b3IzKGdyYXZpdHkueCwgZ3Jhdml0eS55LCBncmF2aXR5LnopKTsgLy8gdGhpcyBpcyBuZWVkZWQgZm9yIGdob3N0T2JqZWN0IGNvbGxpc2lvbnMKCgogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5nZXRCcm9hZHBoYXNlKCkuZ2V0T3ZlcmxhcHBpbmdQYWlyQ2FjaGUoKS5zZXRJbnRlcm5hbEdob3N0UGFpckNhbGxiYWNrKG5ldyBBbW1vLmJ0R2hvc3RQYWlyQ2FsbGJhY2soKSk7CgogICAgICAgICAgX3RoaXMuaW5pdGlhbGlzZWQgPSB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInJlbW92ZUVsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgaWYgKF90aGlzLmhhc0VsZW1lbnQodXVpZCkpIHsKICAgICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uZGVsZXRlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAicmVtb3ZlRGVsZXRlZEVsZW1lbnRzIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5maWx0ZXIoZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLmVsZW1lbnRzW3V1aWRdLmRlbGV0ZWQ7CiAgICAgICAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIGRlbGV0ZSBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImhhc0VsZW1lbnQiLCBmdW5jdGlvbiAodXVpZCkgewogICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5pbmNsdWRlcyh1dWlkKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJnZXRFbGVtZW50IiwgZnVuY3Rpb24gKHV1aWQpIHsKICAgICAgICAgIHJldHVybiBfdGhpcy5lbGVtZW50c1t1dWlkXTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJpc0luaXRpYWxpc2VkIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzLmluaXRpYWxpc2VkOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgImdldER5bmFtaWNzV29ybGQiLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZHluYW1pY3NXb3JsZDsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRSaWdpZEJvZHkiLCBmdW5jdGlvbiAoYm9keSkgewogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5hZGRSaWdpZEJvZHkoYm9keSk7CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAiYWRkQWN0aW9uIiwgZnVuY3Rpb24gKGFjdGlvbikgewogICAgICAgICAgX3RoaXMuZHluYW1pY3NXb3JsZC5hZGRBY3Rpb24oYWN0aW9uKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRDb2xsaXNpb25PYmplY3QiLCBmdW5jdGlvbiAoY29sbGlzaW9uT2JqZWN0KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLmFkZENvbGxpc2lvbk9iamVjdChjb2xsaXNpb25PYmplY3QpOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInN0ZXBTaW11bGF0aW9uIiwgZnVuY3Rpb24gKGR0KSB7CiAgICAgICAgICBfdGhpcy5keW5hbWljc1dvcmxkLnN0ZXBTaW11bGF0aW9uKGR0KTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJzaW11bGF0ZSIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHZhciBkdCA9IF90aGlzLmNsb2NrLmdldERlbHRhKCk7CgogICAgICAgICAgX3RoaXMuc3RlcFNpbXVsYXRpb24oZHQpOwoKICAgICAgICAgIE9iamVjdC5rZXlzKF90aGlzLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uICh1dWlkKSB7CiAgICAgICAgICAgIHZhciBlbGVtZW50ID0gX3RoaXMuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgICAgICAgIGlmIChlbGVtZW50KSB7CiAgICAgICAgICAgICAgc3dpdGNoIChlbGVtZW50LnR5cGUpIHsKICAgICAgICAgICAgICAgIGNhc2UgVFlQRVMuQk9YOgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5TUEhFUkU6CiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLk1FU0g6CiAgICAgICAgICAgICAgICAgIGhhbmRsZUVsZW1lbnRVcGRhdGUoZWxlbWVudCwgZHQpOwogICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlIFRZUEVTLlBMQVlFUjoKICAgICAgICAgICAgICAgICAgaGFuZGxlUGxheWVyVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSBUWVBFUy5WRUhJQ0xFOgogICAgICAgICAgICAgICAgICBoYW5kbGVWZWhpY2xlVXBkYXRlKGVsZW1lbnQsIGR0KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKCiAgICAgICAgICBfdGhpcy5jYWxjdWxhdGVDb2xsaXNpb25zKCk7CgogICAgICAgICAgX3RoaXMucmVtb3ZlRGVsZXRlZEVsZW1lbnRzKCk7CgogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRQaHlzaWNzVXBkYXRlKGR0KTsKICAgICAgICAgIF90aGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKF90aGlzLnNpbXVsYXRlLmJpbmQoX3RoaXMpKTsKICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJjYWxjdWxhdGVDb2xsaXNpb25zIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIGFtbW9EaXNwYXRjaGVyID0gX3RoaXMuZHluYW1pY3NXb3JsZC5nZXREaXNwYXRjaGVyKCk7CgogICAgICAgICAgdmFyIG51bU1hbmlmb2xkcyA9IGFtbW9EaXNwYXRjaGVyLmdldE51bU1hbmlmb2xkcygpOwoKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtTWFuaWZvbGRzOyBpKyspIHsKICAgICAgICAgICAgdmFyIGNvbnRhY3RNYW5pZm9sZCA9IGFtbW9EaXNwYXRjaGVyLmdldE1hbmlmb2xkQnlJbmRleEludGVybmFsKGkpOwogICAgICAgICAgICB2YXIgcmIwID0gQW1tby5jYXN0T2JqZWN0KGNvbnRhY3RNYW5pZm9sZC5nZXRCb2R5MCgpLCBBbW1vLmJ0UmlnaWRCb2R5KTsKICAgICAgICAgICAgdmFyIHJiMSA9IEFtbW8uY2FzdE9iamVjdChjb250YWN0TWFuaWZvbGQuZ2V0Qm9keTEoKSwgQW1tby5idFJpZ2lkQm9keSk7CiAgICAgICAgICAgIHZhciBudW1Db250YWN0cyA9IGNvbnRhY3RNYW5pZm9sZC5nZXROdW1Db250YWN0cygpOyAvLyB0aGlzIGl0ZXJhdGlvbiBkb2Vzbid0IGhhdmUgdXVpZHMKCiAgICAgICAgICAgIGlmICghcmIwLnV1aWQgfHwgIXJiMS51dWlkKSBjb250aW51ZTsKICAgICAgICAgICAgdmFyIGNvbnRhY3RzID0gW107CgogICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG51bUNvbnRhY3RzOyBqKyspIHsKICAgICAgICAgICAgICB2YXIgY29udGFjdFBvaW50ID0gY29udGFjdE1hbmlmb2xkLmdldENvbnRhY3RQb2ludChqKTsKICAgICAgICAgICAgICB2YXIgZGlzdGFuY2UgPSBjb250YWN0UG9pbnQuZ2V0RGlzdGFuY2UoKTsKICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiAwLjApIGNvbnRpbnVlOwogICAgICAgICAgICAgIHZhciB2ZWxvY2l0eTAgPSByYjAuZ2V0TGluZWFyVmVsb2NpdHkoKTsKICAgICAgICAgICAgICB2YXIgdmVsb2NpdHkxID0gcmIxLmdldExpbmVhclZlbG9jaXR5KCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25BKCk7CiAgICAgICAgICAgICAgdmFyIHdvcmxkUG9zMSA9IGNvbnRhY3RQb2ludC5nZXRfbV9wb3NpdGlvbldvcmxkT25CKCk7CiAgICAgICAgICAgICAgdmFyIGxvY2FsUG9zMCA9IGNvbnRhY3RQb2ludC5nZXRfbV9sb2NhbFBvaW50QSgpOwogICAgICAgICAgICAgIHZhciBsb2NhbFBvczEgPSBjb250YWN0UG9pbnQuZ2V0X21fbG9jYWxQb2ludEIoKTsKICAgICAgICAgICAgICBjb250YWN0cy5wdXNoKHsKICAgICAgICAgICAgICAgIGRpc3RhbmNlOiBkaXN0YW5jZSwKICAgICAgICAgICAgICAgIGVsZW1lbnRzOiBbewogICAgICAgICAgICAgICAgICB1dWlkOiByYjAudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTAueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MC55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkwLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMC54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MwLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczAueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MwLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczAueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMC56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICB1dWlkOiByYjEudXVpZCwKICAgICAgICAgICAgICAgICAgdmVsb2NpdHk6IHsKICAgICAgICAgICAgICAgICAgICB4OiB2ZWxvY2l0eTEueCgpLAogICAgICAgICAgICAgICAgICAgIHk6IHZlbG9jaXR5MS55KCksCiAgICAgICAgICAgICAgICAgICAgejogdmVsb2NpdHkxLnooKQogICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICB3b3JsZFBvczogewogICAgICAgICAgICAgICAgICAgIHg6IHdvcmxkUG9zMS54KCksCiAgICAgICAgICAgICAgICAgICAgeTogd29ybGRQb3MxLnkoKSwKICAgICAgICAgICAgICAgICAgICB6OiB3b3JsZFBvczEueigpCiAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgIGxvY2FsUG9zOiB7CiAgICAgICAgICAgICAgICAgICAgeDogbG9jYWxQb3MxLngoKSwKICAgICAgICAgICAgICAgICAgICB5OiBsb2NhbFBvczEueSgpLAogICAgICAgICAgICAgICAgICAgIHo6IGxvY2FsUG9zMS56KCkKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMC51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgewogICAgICAgICAgICAgIGNvbnRhY3RzOiBjb250YWN0cwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmREaXNwYXRjaEV2ZW50KHJiMS51dWlkLCBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULkNPTExJU0lPTiwgewogICAgICAgICAgICAgIGNvbnRhY3RzOiBjb250YWN0cwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgX2RlZmluZVByb3BlcnR5KHRoaXMsICJhZGRFbGVtZW50IiwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIF90aGlzLmVsZW1lbnRzW2RhdGEudXVpZF0gPSBkYXRhOwogICAgICAgIH0pOwoKICAgICAgICBfZGVmaW5lUHJvcGVydHkodGhpcywgInVwZGF0ZUJvZHlTdGF0ZSIsIGZ1bmN0aW9uIChfcmVmKSB7CiAgICAgICAgICB2YXIgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgICAgICBzdGF0ZSA9IF9yZWYuc3RhdGU7CgogICAgICAgICAgaWYgKF90aGlzLmhhc0VsZW1lbnQodXVpZCkpIHsKICAgICAgICAgICAgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMuZWxlbWVudHNbdXVpZF0uc3RhdGUpLCBzdGF0ZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0aGlzLCAidGVybWluYXRlIiwgZnVuY3Rpb24gKCkgewogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLmR5bmFtaWNzV29ybGQpOwogICAgICAgICAgQW1tby5kZXN0cm95KF90aGlzLnNvbHZlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuZGlzcGF0Y2hlcik7CiAgICAgICAgICBBbW1vLmRlc3Ryb3koX3RoaXMuY29sbGlzaW9uQ29uZmlndXJhdGlvbik7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShfdGhpcy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJZCk7CiAgICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFRlcm1pbmF0ZUV2ZW50KCk7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuZWxlbWVudHMgPSB7fTsKICAgICAgICB0aGlzLmluaXRpYWxpc2VkID0gZmFsc2U7CiAgICAgICAgdGhpcy5jb2xsaXNpb25Db25maWd1cmF0aW9uID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hlciA9IHVuZGVmaW5lZDsKICAgICAgICB0aGlzLmJyb2FkcGhhc2UgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5zb2x2ZXIgPSB1bmRlZmluZWQ7CiAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkID0gdW5kZWZpbmVkOwogICAgICAgIHRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lSWQgPSBudWxsOwogICAgICAgIHRoaXMuY2xvY2sgPSBuZXcgQ2xvY2soKTsKICAgICAgfQoKICAgICAgX2NyZWF0ZUNsYXNzKFdvcmxkLCBbewogICAgICAgIGtleTogImRpc3Bvc2VCb2R5IiwKICAgICAgICB2YWx1ZTogZnVuY3Rpb24gZGlzcG9zZUJvZHkoX3JlZjIpIHsKICAgICAgICAgIHZhciB1dWlkID0gX3JlZjIudXVpZDsKICAgICAgICAgIHZhciBlbGVtZW50ID0gdGhpcy5nZXRFbGVtZW50KHV1aWQpOwogICAgICAgICAgdGhpcy5keW5hbWljc1dvcmxkLnJlbW92ZVJpZ2lkQm9keShlbGVtZW50LmJvZHkpOwogICAgICAgICAgdGhpcy5yZW1vdmVFbGVtZW50KHV1aWQpOwogICAgICAgICAgZGlzcGF0Y2hlciQxLnNlbmRFbGVtZW50RGlzcG9zZWQoewogICAgICAgICAgICB1dWlkOiB1dWlkCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH1dKTsKCiAgICAgIHJldHVybiBXb3JsZDsKICAgIH0oKTsKICAgIHZhciB3b3JsZCA9IG5ldyBXb3JsZCgpOwoKICAgIHZhciBERUZBVUxUX1JPTExfSU5GTFVFTkNFID0gMC4yOwogICAgdmFyIERFRkFVTFRfRlJJQ1RJT04gPSAxMDAwOwogICAgdmFyIERFRkFVTFRfTUFTUyA9IDgwMDsKICAgIHZhciBhZGRWZWhpY2xlID0gZnVuY3Rpb24gYWRkVmVoaWNsZShkYXRhKSB7CiAgICAgIHZhciBwb3NpdGlvbiA9IGRhdGEucG9zaXRpb24sCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHdoZWVscyA9IGRhdGEud2hlZWxzLAogICAgICAgICAgX2RhdGEkbWFzcyA9IGRhdGEubWFzcywKICAgICAgICAgIG1hc3MgPSBfZGF0YSRtYXNzID09PSB2b2lkIDAgPyBERUZBVUxUX01BU1MgOiBfZGF0YSRtYXNzLAogICAgICAgICAgX2RhdGEkd2lkdGggPSBkYXRhLndpZHRoLAogICAgICAgICAgd2lkdGggPSBfZGF0YSR3aWR0aCA9PT0gdm9pZCAwID8gMS44IDogX2RhdGEkd2lkdGgsCiAgICAgICAgICBfZGF0YSRoZWlnaHQgPSBkYXRhLmhlaWdodCwKICAgICAgICAgIGhlaWdodCA9IF9kYXRhJGhlaWdodCA9PT0gdm9pZCAwID8gLjYgOiBfZGF0YSRoZWlnaHQsCiAgICAgICAgICBfZGF0YSRsZW5ndGggPSBkYXRhLmxlbmd0aCwKICAgICAgICAgIGxlbmd0aCA9IF9kYXRhJGxlbmd0aCA9PT0gdm9pZCAwID8gNCA6IF9kYXRhJGxlbmd0aCwKICAgICAgICAgIF9kYXRhJGZyaWN0aW9uID0gZGF0YS5mcmljdGlvbiwKICAgICAgICAgIGZyaWN0aW9uID0gX2RhdGEkZnJpY3Rpb24gPT09IHZvaWQgMCA/IERFRkFVTFRfRlJJQ1RJT04gOiBfZGF0YSRmcmljdGlvbiwKICAgICAgICAgIF9kYXRhJHJvbGxJbmZsdWVuY2UgPSBkYXRhLnJvbGxJbmZsdWVuY2UsCiAgICAgICAgICByb2xsSW5mbHVlbmNlID0gX2RhdGEkcm9sbEluZmx1ZW5jZSA9PT0gdm9pZCAwID8gREVGQVVMVF9ST0xMX0lORkxVRU5DRSA6IF9kYXRhJHJvbGxJbmZsdWVuY2UsCiAgICAgICAgICBfZGF0YSR3aGVlbHNPcHRpb25zID0gZGF0YS53aGVlbHNPcHRpb25zLAogICAgICAgICAgd2hlZWxzT3B0aW9ucyA9IF9kYXRhJHdoZWVsc09wdGlvbnMgPT09IHZvaWQgMCA/IHt9IDogX2RhdGEkd2hlZWxzT3B0aW9ucywKICAgICAgICAgIF9kYXRhJHN1c3BlbnNpb25zID0gZGF0YS5zdXNwZW5zaW9ucywKICAgICAgICAgIHN1c3BlbnNpb25zID0gX2RhdGEkc3VzcGVuc2lvbnMgPT09IHZvaWQgMCA/IHt9IDogX2RhdGEkc3VzcGVuc2lvbnM7CiAgICAgIHZhciBfd2hlZWxzT3B0aW9ucyRiYWNrID0gd2hlZWxzT3B0aW9ucy5iYWNrLAogICAgICAgICAgYmFjayA9IF93aGVlbHNPcHRpb25zJGJhY2sgPT09IHZvaWQgMCA/IHt9IDogX3doZWVsc09wdGlvbnMkYmFjaywKICAgICAgICAgIF93aGVlbHNPcHRpb25zJGZyb250ID0gd2hlZWxzT3B0aW9ucy5mcm9udCwKICAgICAgICAgIGZyb250ID0gX3doZWVsc09wdGlvbnMkZnJvbnQgPT09IHZvaWQgMCA/IHt9IDogX3doZWVsc09wdGlvbnMkZnJvbnQ7CiAgICAgIHZhciBfYmFjayRheGlzUG9zaXRpb24gPSBiYWNrLmF4aXNQb3NpdGlvbiwKICAgICAgICAgIGF4aXNQb3NpdGlvbkJhY2sgPSBfYmFjayRheGlzUG9zaXRpb24gPT09IHZvaWQgMCA/IC0xIDogX2JhY2skYXhpc1Bvc2l0aW9uLAogICAgICAgICAgX2JhY2skcmFkaXVzID0gYmFjay5yYWRpdXMsCiAgICAgICAgICB3aGVlbFJhZGl1c0JhY2sgPSBfYmFjayRyYWRpdXMgPT09IHZvaWQgMCA/IC40IDogX2JhY2skcmFkaXVzLAogICAgICAgICAgX2JhY2skaGFsZlRyYWNrID0gYmFjay5oYWxmVHJhY2ssCiAgICAgICAgICB3aGVlbEhhbGZUcmFja0JhY2sgPSBfYmFjayRoYWxmVHJhY2sgPT09IHZvaWQgMCA/IDEgOiBfYmFjayRoYWxmVHJhY2ssCiAgICAgICAgICBfYmFjayRheGlzSGVpZ2h0ID0gYmFjay5heGlzSGVpZ2h0LAogICAgICAgICAgd2hlZWxBeGlzSGVpZ2h0QmFjayA9IF9iYWNrJGF4aXNIZWlnaHQgPT09IHZvaWQgMCA/IC4zIDogX2JhY2skYXhpc0hlaWdodDsKICAgICAgdmFyIF9mcm9udCRheGlzUG9zaXRpb24gPSBmcm9udC5heGlzUG9zaXRpb24sCiAgICAgICAgICBheGlzUG9zaXRpb25Gcm9udCA9IF9mcm9udCRheGlzUG9zaXRpb24gPT09IHZvaWQgMCA/IDEuNyA6IF9mcm9udCRheGlzUG9zaXRpb24sCiAgICAgICAgICBfZnJvbnQkcmFkaXVzID0gZnJvbnQucmFkaXVzLAogICAgICAgICAgd2hlZWxSYWRpdXNGcm9udCA9IF9mcm9udCRyYWRpdXMgPT09IHZvaWQgMCA/IC40IDogX2Zyb250JHJhZGl1cywKICAgICAgICAgIF9mcm9udCRoYWxmVHJhY2sgPSBmcm9udC5oYWxmVHJhY2ssCiAgICAgICAgICB3aGVlbEhhbGZUcmFja0Zyb250ID0gX2Zyb250JGhhbGZUcmFjayA9PT0gdm9pZCAwID8gMSA6IF9mcm9udCRoYWxmVHJhY2ssCiAgICAgICAgICBfZnJvbnQkYXhpc0hlaWdodCA9IGZyb250LmF4aXNIZWlnaHQsCiAgICAgICAgICB3aGVlbEF4aXNIZWlnaHRGcm9udCA9IF9mcm9udCRheGlzSGVpZ2h0ID09PSB2b2lkIDAgPyAuMyA6IF9mcm9udCRheGlzSGVpZ2h0OwogICAgICB2YXIgX3N1c3BlbnNpb25zJHN0aWZmbmVzID0gc3VzcGVuc2lvbnMuc3RpZmZuZXNzLAogICAgICAgICAgc3RpZmZuZXNzID0gX3N1c3BlbnNpb25zJHN0aWZmbmVzID09PSB2b2lkIDAgPyAyMC4wIDogX3N1c3BlbnNpb25zJHN0aWZmbmVzLAogICAgICAgICAgX3N1c3BlbnNpb25zJGRhbXBpbmcgPSBzdXNwZW5zaW9ucy5kYW1waW5nLAogICAgICAgICAgZGFtcGluZyA9IF9zdXNwZW5zaW9ucyRkYW1waW5nID09PSB2b2lkIDAgPyAyLjMgOiBfc3VzcGVuc2lvbnMkZGFtcGluZywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRjb21wcmVzcyA9IHN1c3BlbnNpb25zLmNvbXByZXNzaW9uLAogICAgICAgICAgY29tcHJlc3Npb24gPSBfc3VzcGVuc2lvbnMkY29tcHJlc3MgPT09IHZvaWQgMCA/IDQuNCA6IF9zdXNwZW5zaW9ucyRjb21wcmVzcywKICAgICAgICAgIF9zdXNwZW5zaW9ucyRyZXN0TGVuZyA9IHN1c3BlbnNpb25zLnJlc3RMZW5ndGgsCiAgICAgICAgICByZXN0TGVuZ3RoID0gX3N1c3BlbnNpb25zJHJlc3RMZW5nID09PSB2b2lkIDAgPyAwLjYgOiBfc3VzcGVuc2lvbnMkcmVzdExlbmc7IC8vIENoYXNzaXMKCiAgICAgIHZhciBnZW9tZXRyeSA9IG5ldyBBbW1vLmJ0Qm94U2hhcGUobmV3IEFtbW8uYnRWZWN0b3IzKHdpZHRoICogLjUsIGhlaWdodCAqIC41LCBsZW5ndGggKiAuNSkpOwogICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgdHJhbnNmb3JtLnNldElkZW50aXR5KCk7CiAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgdmFyIG1vdGlvblN0YXRlID0gbmV3IEFtbW8uYnREZWZhdWx0TW90aW9uU3RhdGUodHJhbnNmb3JtKTsKICAgICAgdmFyIGxvY2FsSW5lcnRpYSA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAwLCAwKTsKICAgICAgZ2VvbWV0cnkuY2FsY3VsYXRlTG9jYWxJbmVydGlhKG1hc3MsIGxvY2FsSW5lcnRpYSk7CiAgICAgIHZhciBjaGFzc2lzID0gbmV3IEFtbW8uYnRSaWdpZEJvZHkobmV3IEFtbW8uYnRSaWdpZEJvZHlDb25zdHJ1Y3Rpb25JbmZvKG1hc3MsIG1vdGlvblN0YXRlLCBnZW9tZXRyeSwgbG9jYWxJbmVydGlhKSk7CiAgICAgIGNoYXNzaXMuc2V0QWN0aXZhdGlvblN0YXRlKERJU0FCTEVfREVBQ1RJVkFUSU9OKTsKICAgICAgd29ybGQuYWRkUmlnaWRCb2R5KGNoYXNzaXMpOyAvLyBSYXljYXN0IFZlaGljbGUKCiAgICAgIHZhciB0dW5pbmcgPSBuZXcgQW1tby5idFZlaGljbGVUdW5pbmcoKTsKICAgICAgdmFyIHJheUNhc3RlciA9IG5ldyBBbW1vLmJ0RGVmYXVsdFZlaGljbGVSYXljYXN0ZXIod29ybGQuZ2V0RHluYW1pY3NXb3JsZCgpKTsKICAgICAgdmFyIHZlaGljbGUgPSBuZXcgQW1tby5idFJheWNhc3RWZWhpY2xlKHR1bmluZywgY2hhc3NpcywgcmF5Q2FzdGVyKTsKICAgICAgdmVoaWNsZS5zZXRDb29yZGluYXRlU3lzdGVtKDAsIDEsIDIpOwogICAgICB3b3JsZC5hZGRBY3Rpb24odmVoaWNsZSk7CiAgICAgIHZhciB3aGVlbERpcmVjdGlvbkNTMCA9IG5ldyBBbW1vLmJ0VmVjdG9yMygwLCAtMSwgMCk7CiAgICAgIHZhciB3aGVlbEF4bGVDUyA9IG5ldyBBbW1vLmJ0VmVjdG9yMygtMSwgMCwgMCk7CgogICAgICB2YXIgYWRkV2hlZWwgPSBmdW5jdGlvbiBhZGRXaGVlbChpc0Zyb250LCBwb3MsIHJhZGl1cykgewogICAgICAgIHZhciB3aGVlbEluZm8gPSB2ZWhpY2xlLmFkZFdoZWVsKHBvcywgd2hlZWxEaXJlY3Rpb25DUzAsIHdoZWVsQXhsZUNTLCByZXN0TGVuZ3RoLCByYWRpdXMsIHR1bmluZywgaXNGcm9udCk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3N1c3BlbnNpb25TdGlmZm5lc3Moc3RpZmZuZXNzKTsKICAgICAgICB3aGVlbEluZm8uc2V0X21fd2hlZWxzRGFtcGluZ1JlbGF4YXRpb24oZGFtcGluZyk7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3doZWVsc0RhbXBpbmdDb21wcmVzc2lvbihjb21wcmVzc2lvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX2ZyaWN0aW9uU2xpcChmcmljdGlvbik7CiAgICAgICAgd2hlZWxJbmZvLnNldF9tX3JvbGxJbmZsdWVuY2Uocm9sbEluZmx1ZW5jZSk7CiAgICAgIH07CgogICAgICBhZGRXaGVlbCh0cnVlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKHRydWUsIG5ldyBBbW1vLmJ0VmVjdG9yMygtd2hlZWxIYWxmVHJhY2tGcm9udCwgd2hlZWxBeGlzSGVpZ2h0RnJvbnQsIGF4aXNQb3NpdGlvbkZyb250KSwgd2hlZWxSYWRpdXNGcm9udCk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMoLXdoZWVsSGFsZlRyYWNrQmFjaywgd2hlZWxBeGlzSGVpZ2h0QmFjaywgYXhpc1Bvc2l0aW9uQmFjayksIHdoZWVsUmFkaXVzQmFjayk7CiAgICAgIGFkZFdoZWVsKGZhbHNlLCBuZXcgQW1tby5idFZlY3RvcjMod2hlZWxIYWxmVHJhY2tCYWNrLCB3aGVlbEF4aXNIZWlnaHRCYWNrLCBheGlzUG9zaXRpb25CYWNrKSwgd2hlZWxSYWRpdXNCYWNrKTsKICAgICAgdmVoaWNsZS51dWlkID0gdXVpZDsKICAgICAgd29ybGQuYWRkRWxlbWVudCh7CiAgICAgICAgdHlwZTogVFlQRVMuVkVISUNMRSwKICAgICAgICB1dWlkOiB1dWlkLAogICAgICAgIHZlaGljbGU6IHZlaGljbGUsCiAgICAgICAgd2hlZWxzOiB3aGVlbHMsCiAgICAgICAgb3B0aW9uczogZGF0YSwKICAgICAgICBzdGF0ZTogREVGQVVMVF9WRUhJQ0xFX1NUQVRFCiAgICAgIH0pOwogICAgfTsKICAgIHZhciBzZXRWZWhpY2xlUG9zaXRpb24gPSBmdW5jdGlvbiBzZXRWZWhpY2xlUG9zaXRpb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gZGF0YS5wb3NpdGlvbjsKICAgICAgdmFyIGVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpOwoKICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gVFlQRVMuVkVISUNMRSkgewogICAgICAgIHZhciBib2R5ID0gZWxlbWVudC52ZWhpY2xlLmdldFJpZ2lkQm9keSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIGJvZHkuZ2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0T3JpZ2luKG5ldyBBbW1vLmJ0VmVjdG9yMyhwb3NpdGlvbi54LCBwb3NpdGlvbi55LCBwb3NpdGlvbi56KSk7CiAgICAgICAgYm9keS5zZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB9CiAgICB9OwogICAgdmFyIHNldFZlaGljbGVRdWF0ZXJuaW9uID0gZnVuY3Rpb24gc2V0VmVoaWNsZVF1YXRlcm5pb24oZGF0YSkgewogICAgICB2YXIgdXVpZCA9IGRhdGEudXVpZCwKICAgICAgICAgIHF1YXRlcm5pb24gPSBkYXRhLnF1YXRlcm5pb247CiAgICAgIHZhciBlbGVtZW50ID0gd29ybGQuZ2V0RWxlbWVudCh1dWlkKTsKCiAgICAgIGlmIChlbGVtZW50LnR5cGUgPT09IFRZUEVTLlZFSElDTEUpIHsKICAgICAgICB2YXIgYm9keSA9IGVsZW1lbnQudmVoaWNsZS5nZXRSaWdpZEJvZHkoKTsKICAgICAgICB2YXIgdHJhbnNmb3JtID0gbmV3IEFtbW8uYnRUcmFuc2Zvcm0oKTsKICAgICAgICBib2R5LmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgdHJhbnNmb3JtLnNldFJvdGF0aW9uKG5ldyBBbW1vLmJ0UXVhdGVybmlvbihxdWF0ZXJuaW9uLngsIHF1YXRlcm5pb24ueSwgcXVhdGVybmlvbi56LCBxdWF0ZXJuaW9uLncpKTsKICAgICAgICBib2R5LnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgcmVzZXRWZWhpY2xlID0gZnVuY3Rpb24gcmVzZXRWZWhpY2xlKGRhdGEpIHsKICAgICAgdmFyIHV1aWQgPSBkYXRhLnV1aWQsCiAgICAgICAgICBxdWF0ZXJuaW9uID0gZGF0YS5xdWF0ZXJuaW9uLAogICAgICAgICAgcG9zaXRpb24gPSBkYXRhLnBvc2l0aW9uOwogICAgICB2YXIgZWxlbWVudCA9IHdvcmxkLmdldEVsZW1lbnQodXVpZCk7CgogICAgICBpZiAoZWxlbWVudC50eXBlID09PSBUWVBFUy5WRUhJQ0xFKSB7CiAgICAgICAgdmFyIGJvZHkgPSBlbGVtZW50LnZlaGljbGUuZ2V0UmlnaWRCb2R5KCk7CiAgICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgICAgYm9keS5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIHRyYW5zZm9ybS5zZXRJZGVudGl0eSgpOwogICAgICAgIHRyYW5zZm9ybS5zZXRPcmlnaW4obmV3IEFtbW8uYnRWZWN0b3IzKHBvc2l0aW9uLngsIHBvc2l0aW9uLnksIHBvc2l0aW9uLnopKTsKICAgICAgICB0cmFuc2Zvcm0uc2V0Um90YXRpb24obmV3IEFtbW8uYnRRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udykpOwogICAgICAgIGJvZHkuc2V0V29ybGRUcmFuc2Zvcm0odHJhbnNmb3JtKTsKICAgICAgfQogICAgfTsKICAgIHZhciBoYW5kbGVWZWhpY2xlVXBkYXRlID0gZnVuY3Rpb24gaGFuZGxlVmVoaWNsZVVwZGF0ZShfcmVmLCBkdCkgewogICAgICB2YXIgdmVoaWNsZSA9IF9yZWYudmVoaWNsZSwKICAgICAgICAgIHdoZWVscyA9IF9yZWYud2hlZWxzLAogICAgICAgICAgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIF9yZWYkc3RhdGUgPSBfcmVmLnN0YXRlLAogICAgICAgICAgc3RhdGUgPSBfcmVmJHN0YXRlID09PSB2b2lkIDAgPyBERUZBVUxUX1ZFSElDTEVfU1RBVEUgOiBfcmVmJHN0YXRlLAogICAgICAgICAgX3JlZiRvcHRpb25zID0gX3JlZi5vcHRpb25zLAogICAgICAgICAgb3B0aW9ucyA9IF9yZWYkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmJG9wdGlvbnM7CiAgICAgIHZhciBicmVha2luZ0ZvcmNlID0gMDsKICAgICAgdmFyIGVuZ2luZUZvcmNlID0gMDsKICAgICAgdmFyIF9vcHRpb25zJHN0ZWVyaW5nQ2xhbSA9IG9wdGlvbnMuc3RlZXJpbmdDbGFtcCwKICAgICAgICAgIHN0ZWVyaW5nQ2xhbXAgPSBfb3B0aW9ucyRzdGVlcmluZ0NsYW0gPT09IHZvaWQgMCA/IERFRkFVTFRfU1RFRVJJTkdfQ0xBTVAgOiBfb3B0aW9ucyRzdGVlcmluZ0NsYW0sCiAgICAgICAgICBfb3B0aW9ucyRzdGVlcmluZ0luY3IgPSBvcHRpb25zLnN0ZWVyaW5nSW5jcmVtZW50LAogICAgICAgICAgc3RlZXJpbmdJbmNyZW1lbnQgPSBfb3B0aW9ucyRzdGVlcmluZ0luY3IgPT09IHZvaWQgMCA/IERFRkFVTFRfU1RFRVJJTkdfSU5DUkVNRU5UIDogX29wdGlvbnMkc3RlZXJpbmdJbmNyLAogICAgICAgICAgX29wdGlvbnMkbWF4RW5naW5lRm9yID0gb3B0aW9ucy5tYXhFbmdpbmVGb3JjZSwKICAgICAgICAgIG1heEVuZ2luZUZvcmNlID0gX29wdGlvbnMkbWF4RW5naW5lRm9yID09PSB2b2lkIDAgPyBERUZBVUxUX01BWF9FTkdJTkVfRk9SQ0UgOiBfb3B0aW9ucyRtYXhFbmdpbmVGb3IsCiAgICAgICAgICBfb3B0aW9ucyRtYXhCcmVha2luZ0YgPSBvcHRpb25zLm1heEJyZWFraW5nRm9yY2UsCiAgICAgICAgICBtYXhCcmVha2luZ0ZvcmNlID0gX29wdGlvbnMkbWF4QnJlYWtpbmdGID09PSB2b2lkIDAgPyBERUZBVUxUX01BWF9CUkVBS0lOR19GT1JDRSA6IF9vcHRpb25zJG1heEJyZWFraW5nRjsKCiAgICAgIGlmIChzdGF0ZS5hY2NlbGVyYXRpb24pIHsKICAgICAgICBpZiAoc3BlZWQgPCAtMSkgYnJlYWtpbmdGb3JjZSA9IG1heEJyZWFraW5nRm9yY2U7ZWxzZSBlbmdpbmVGb3JjZSA9IG1heEVuZ2luZUZvcmNlOwogICAgICB9CgogICAgICBpZiAoc3RhdGUuYnJha2luZykgewogICAgICAgIGlmIChzcGVlZCA+IDEpIGJyZWFraW5nRm9yY2UgPSBtYXhCcmVha2luZ0ZvcmNlO2Vsc2UgZW5naW5lRm9yY2UgPSAtbWF4RW5naW5lRm9yY2UgLyAyOwogICAgICB9CgogICAgICBpZiAoc3RhdGUubGVmdCkgewogICAgICAgIGlmIChzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPCBzdGVlcmluZ0NsYW1wKSBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgKz0gc3RlZXJpbmdJbmNyZW1lbnQ7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0YXRlLnJpZ2h0KSB7CiAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nID4gLXN0ZWVyaW5nQ2xhbXApIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKHN0YXRlLnZlaGljbGVTdGVlcmluZyA8IC1zdGVlcmluZ0luY3JlbWVudCkgc3RhdGUudmVoaWNsZVN0ZWVyaW5nICs9IHN0ZWVyaW5nSW5jcmVtZW50O2Vsc2UgewogICAgICAgICAgICBpZiAoc3RhdGUudmVoaWNsZVN0ZWVyaW5nID4gc3RlZXJpbmdJbmNyZW1lbnQpIHN0YXRlLnZlaGljbGVTdGVlcmluZyAtPSBzdGVlcmluZ0luY3JlbWVudDtlbHNlIHsKICAgICAgICAgICAgICBzdGF0ZS52ZWhpY2xlU3RlZXJpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CgogICAgICB2ZWhpY2xlLmFwcGx5RW5naW5lRm9yY2UoZW5naW5lRm9yY2UsIEJBQ0tfTEVGVCk7CiAgICAgIHZlaGljbGUuYXBwbHlFbmdpbmVGb3JjZShlbmdpbmVGb3JjZSwgQkFDS19SSUdIVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSAvIDIsIEZST05UX0xFRlQpOwogICAgICB2ZWhpY2xlLnNldEJyYWtlKGJyZWFraW5nRm9yY2UgLyAyLCBGUk9OVF9SSUdIVCk7CiAgICAgIHZlaGljbGUuc2V0QnJha2UoYnJlYWtpbmdGb3JjZSwgQkFDS19MRUZUKTsKICAgICAgdmVoaWNsZS5zZXRCcmFrZShicmVha2luZ0ZvcmNlLCBCQUNLX1JJR0hUKTsKICAgICAgdmVoaWNsZS5zZXRTdGVlcmluZ1ZhbHVlKHN0YXRlLnZlaGljbGVTdGVlcmluZywgRlJPTlRfTEVGVCk7CiAgICAgIHZlaGljbGUuc2V0U3RlZXJpbmdWYWx1ZShzdGF0ZS52ZWhpY2xlU3RlZXJpbmcsIEZST05UX1JJR0hUKTsKICAgICAgdmFyIHRtLCBwLCBxLCBpOwogICAgICB2YXIgbiA9IHZlaGljbGUuZ2V0TnVtV2hlZWxzKCk7CgogICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgdmVoaWNsZS51cGRhdGVXaGVlbFRyYW5zZm9ybShpLCB0cnVlKTsKICAgICAgICB0bSA9IHZlaGljbGUuZ2V0V2hlZWxUcmFuc2Zvcm1XUyhpKTsKICAgICAgICBwID0gdG0uZ2V0T3JpZ2luKCk7CiAgICAgICAgcSA9IHRtLmdldFJvdGF0aW9uKCk7CiAgICAgICAgdmFyIHdoZWVsVVVJRCA9IHdoZWVsc1tpXTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZEJvZHlVcGRhdGUod2hlZWxVVUlELCBwLCBxLCBkdCk7CiAgICAgIH0KCiAgICAgIHRtID0gdmVoaWNsZS5nZXRDaGFzc2lzV29ybGRUcmFuc2Zvcm0oKTsKICAgICAgcCA9IHRtLmdldE9yaWdpbigpOwogICAgICBxID0gdG0uZ2V0Um90YXRpb24oKTsKICAgICAgdmFyIGRpcmVjdGlvbiA9IHZlaGljbGUuZ2V0Rm9yd2FyZFZlY3RvcigpOwogICAgICB2YXIgc3BlZWQgPSB2ZWhpY2xlLmdldEN1cnJlbnRTcGVlZEttSG91cigpOwogICAgICB2YXIgZXh0cmFEYXRhID0gewogICAgICAgIGRpcmVjdGlvbjogewogICAgICAgICAgeDogZGlyZWN0aW9uLngoKSwKICAgICAgICAgIHk6IGRpcmVjdGlvbi55KCksCiAgICAgICAgICB6OiBkaXJlY3Rpb24ueigpCiAgICAgICAgfSwKICAgICAgICBzcGVlZDogc3BlZWQKICAgICAgfTsKICAgICAgZGlzcGF0Y2hlciQxLnNlbmRCb2R5VXBkYXRlKHV1aWQsIHAsIHEsIGR0LCBleHRyYURhdGEpOwogICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUodXVpZCwgc3RhdGUpOwogICAgfTsKCiAgICB2YXIgY3JlYXRlR2hvc3RDb2xsaWRlciA9IGZ1bmN0aW9uIGNyZWF0ZUdob3N0Q29sbGlkZXIocmFkaXVzLCBwb3NpdGlvbikgewogICAgICB2YXIgZ2hvc3RDb2xsaWRlciA9IG5ldyBBbW1vLmJ0R2hvc3RPYmplY3QoKTsKICAgICAgdmFyIHRyYW5zZm9ybSA9IG5ldyBBbW1vLmJ0VHJhbnNmb3JtKCk7CiAgICAgIGdob3N0Q29sbGlkZXIuc2V0Q29sbGlzaW9uU2hhcGUobmV3IEFtbW8uYnRTcGhlcmVTaGFwZShyYWRpdXMpKTsKICAgICAgZ2hvc3RDb2xsaWRlci5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICB0cmFuc2Zvcm0uc2V0SWRlbnRpdHkoKTsKICAgICAgdHJhbnNmb3JtLnNldE9yaWdpbihwb3NpdGlvbik7CiAgICAgIHRyYW5zZm9ybS5zZXRSb3RhdGlvbihuZXcgQW1tby5idFF1YXRlcm5pb24oMCwgMCwgMCwgMSkpOwogICAgICBnaG9zdENvbGxpZGVyLnNldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgZ2hvc3RDb2xsaWRlcjogZ2hvc3RDb2xsaWRlciwKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybQogICAgICB9OwogICAgfTsKICAgIHZhciBmb3JFYWNoR2hvc3RDb2xsaXNpb24gPSBmdW5jdGlvbiBmb3JFYWNoR2hvc3RDb2xsaXNpb24oZ2hvc3RDb2xsaWRlcikgewogICAgICB2YXIgZm9yRWFjaENhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBmdW5jdGlvbiAoKSB7fTsKICAgICAgdmFyIGNvbGxpc2lvbnMgPSBnaG9zdENvbGxpZGVyLmdldE51bU92ZXJsYXBwaW5nT2JqZWN0cygpOwoKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb2xsaXNpb25zOyBpKyspIHsKICAgICAgICB2YXIgb2JqZWN0ID0gQW1tby5jYXN0T2JqZWN0KGdob3N0Q29sbGlkZXIuZ2V0T3ZlcmxhcHBpbmdPYmplY3QoaSksIEFtbW8uYnRSaWdpZEJvZHkpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG9iamVjdC5nZXRXb3JsZFRyYW5zZm9ybSh0cmFuc2Zvcm0pOwogICAgICAgIGZvckVhY2hDYWxsYmFjayhvYmplY3QsIHRyYW5zZm9ybSwgaSk7CiAgICAgICAgQW1tby5kZXN0cm95KHRyYW5zZm9ybSk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgZ2V0RXhwbG9zaW9uUG9zaXRpb24gPSBmdW5jdGlvbiBnZXRFeHBsb3Npb25Qb3NpdGlvbih1dWlkLCBwb3NpdGlvbikgewogICAgICB2YXIgZXhwbG9zaW9uUG9zaXRpb24gPSBwb3NpdGlvbjsKCiAgICAgIGlmICghZXhwbG9zaW9uUG9zaXRpb24pIHsKICAgICAgICB2YXIgX3dvcmxkJGdldEVsZW1lbnQgPSB3b3JsZC5nZXRFbGVtZW50KHV1aWQpLAogICAgICAgICAgICBib2R5ID0gX3dvcmxkJGdldEVsZW1lbnQuYm9keTsKCiAgICAgICAgdmFyIG1vdGlvblN0YXRlID0gYm9keS5nZXRNb3Rpb25TdGF0ZSgpOwogICAgICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgQW1tby5idFRyYW5zZm9ybSgpOwogICAgICAgIG1vdGlvblN0YXRlLmdldFdvcmxkVHJhbnNmb3JtKHRyYW5zZm9ybSk7CiAgICAgICAgZXhwbG9zaW9uUG9zaXRpb24gPSB0cmFuc2Zvcm0uZ2V0T3JpZ2luKCk7CiAgICAgIH0KCiAgICAgIHJldHVybiBleHBsb3Npb25Qb3NpdGlvbjsKICAgIH07CiAgICB2YXIgZ2V0RXhwbG9zaW9uSW1wdWxzZSA9IGZ1bmN0aW9uIGdldEV4cGxvc2lvbkltcHVsc2UocG9zaXRpb24sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkgewogICAgICB2YXIgZGlzdGFuY2UgPSBwb3NpdGlvbi5vcF9zdWIoZXhwbG9zaW9uUG9zaXRpb24pOwogICAgICBkaXN0YW5jZS5ub3JtYWxpemUoKTsKICAgICAgdmFyIGltcHVsc2UgPSBkaXN0YW5jZS5vcF9tdWwoc3RyZW5ndGgpOwogICAgICBpbXB1bHNlLnNldFkoaW1wdWxzZS55KCkgKyBzdHJlbmd0aCk7CiAgICAgIHJldHVybiBpbXB1bHNlOwogICAgfTsKICAgIHZhciBjcmVhdGVFeHBsb3Npb24gPSBmdW5jdGlvbiBjcmVhdGVFeHBsb3Npb24oX3JlZikgewogICAgICB2YXIgdXVpZCA9IF9yZWYudXVpZCwKICAgICAgICAgIHBvc2l0aW9uID0gX3JlZi5wb3NpdGlvbiwKICAgICAgICAgIF9yZWYkcmFkaXVzID0gX3JlZi5yYWRpdXMsCiAgICAgICAgICByYWRpdXMgPSBfcmVmJHJhZGl1cyA9PT0gdm9pZCAwID8gRVhQTE9TSU9OX1NJWkVTLlNNQUxMIDogX3JlZiRyYWRpdXMsCiAgICAgICAgICBfcmVmJHN0cmVuZ3RoID0gX3JlZi5zdHJlbmd0aCwKICAgICAgICAgIHN0cmVuZ3RoID0gX3JlZiRzdHJlbmd0aCA9PT0gdm9pZCAwID8gRVhQTE9TSU9OX1NUUkVOR1RIUy5NRURJVU0gOiBfcmVmJHN0cmVuZ3RoOwoKICAgICAgdHJ5IHsKICAgICAgICB2YXIgZXhwbG9zaW9uUG9zaXRpb24gPSBnZXRFeHBsb3Npb25Qb3NpdGlvbih1dWlkLCBwb3NpdGlvbik7CgogICAgICAgIHZhciBfY3JlYXRlR2hvc3RDb2xsaWRlciA9IGNyZWF0ZUdob3N0Q29sbGlkZXIocmFkaXVzLCBleHBsb3Npb25Qb3NpdGlvbiksCiAgICAgICAgICAgIGdob3N0Q29sbGlkZXIgPSBfY3JlYXRlR2hvc3RDb2xsaWRlci5naG9zdENvbGxpZGVyLAogICAgICAgICAgICB0cmFuc2Zvcm0gPSBfY3JlYXRlR2hvc3RDb2xsaWRlci50cmFuc2Zvcm07CgogICAgICAgIHdvcmxkLmFkZENvbGxpc2lvbk9iamVjdChnaG9zdENvbGxpZGVyKTsKICAgICAgICBmb3JFYWNoR2hvc3RDb2xsaXNpb24oZ2hvc3RDb2xsaWRlciwgZnVuY3Rpb24gKG9iamVjdCwgb2JqZWN0VHJhbnNmb3JtKSB7CiAgICAgICAgICB2YXIgb3JpZ2luID0gb2JqZWN0VHJhbnNmb3JtLmdldE9yaWdpbigpOwogICAgICAgICAgb2JqZWN0LmFjdGl2YXRlKHRydWUpOwogICAgICAgICAgb2JqZWN0LmFwcGx5Q2VudHJhbEltcHVsc2UoZ2V0RXhwbG9zaW9uSW1wdWxzZShvcmlnaW4sIGV4cGxvc2lvblBvc2l0aW9uLCBzdHJlbmd0aCkpOwogICAgICAgIH0pOwogICAgICAgIHdvcmxkLmdldER5bmFtaWNzV29ybGQoKS5yZW1vdmVDb2xsaXNpb25PYmplY3QoZ2hvc3RDb2xsaWRlcik7CiAgICAgICAgQW1tby5kZXN0cm95KGdob3N0Q29sbGlkZXIpOwogICAgICAgIEFtbW8uZGVzdHJveSh0cmFuc2Zvcm0pOwogICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgY29uc29sZS5sb2coZSk7CiAgICAgIH0KICAgIH07CgogICAgdmFyIGhhbmRsZUxvYWRFdmVudCA9IGZ1bmN0aW9uIGhhbmRsZUxvYWRFdmVudChvcHRpb25zKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiAoQW1tbykgewogICAgICAgIHNlbGYuQW1tbyA9IEFtbW87CgogICAgICAgIG9ubWVzc2FnZSA9IGZ1bmN0aW9uIG9ubWVzc2FnZShfcmVmKSB7CiAgICAgICAgICB2YXIgZGF0YSA9IF9yZWYuZGF0YTsKCiAgICAgICAgICBzd2l0Y2ggKGRhdGEuZXZlbnQpIHsKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5BREQuQk9YOgogICAgICAgICAgICAgIGFkZEJveChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlNQSEVSRToKICAgICAgICAgICAgICBhZGRTcGhlcmUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5WRUhJQ0xFOgogICAgICAgICAgICAgIGFkZFZlaGljbGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkFERC5NT0RFTDoKICAgICAgICAgICAgICBhZGRNb2RlbChkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuQURELlBMQVlFUjoKICAgICAgICAgICAgICBhZGRQbGF5ZXIoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuU0VULkxJTkVBUl9WRUxPQ0lUWToKICAgICAgICAgICAgICBzZXRMaW5lYXJWZWxvY2l0eShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5SRVNFVDoKICAgICAgICAgICAgICByZXNldEVsZW1lbnQoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWtqOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlNFVC5QT1NJVElPTjoKICAgICAgICAgICAgICBzZXRQb3NpdGlvbihkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuVkVISUNMRS5TRVQuUE9TSVRJT046CiAgICAgICAgICAgICAgc2V0VmVoaWNsZVBvc2l0aW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlNFVC5RVUFURVJOSU9OOgogICAgICAgICAgICAgIHNldFZlaGljbGVRdWF0ZXJuaW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5WRUhJQ0xFLlJFU0VUOgogICAgICAgICAgICAgIHJlc2V0VmVoaWNsZShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUxFTUVOVC5BUFBMWS5JTVBVTFNFOgogICAgICAgICAgICAgIGFwcGx5SW1wdXNlKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5FTEVNRU5ULlVQREFURToKICAgICAgICAgICAgICB3b3JsZC51cGRhdGVCb2R5U3RhdGUoZGF0YSk7CiAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlIFBIWVNJQ1NfRVZFTlRTLkVMRU1FTlQuRElTUE9TRToKICAgICAgICAgICAgICB3b3JsZC5kaXNwb3NlQm9keShkYXRhKTsKICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuRUZGRUNUUy5FWFBMT1NJT046CiAgICAgICAgICAgICAgY3JlYXRlRXhwbG9zaW9uKGRhdGEpOwogICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSBQSFlTSUNTX0VWRU5UUy5URVJNSU5BVEU6CiAgICAgICAgICAgICAgd29ybGQudGVybWluYXRlKCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfTsKCiAgICAgICAgd29ybGQuaW5pdChvcHRpb25zKTsKICAgICAgICBkaXNwYXRjaGVyJDEuc2VuZFJlYWR5RXZlbnQoKTsKICAgICAgICB3b3JsZC5zaW11bGF0ZSgpOwogICAgICB9OwogICAgfTsKCiAgICB2YXIgbG9hZEFtbW8gPSBmdW5jdGlvbiBsb2FkQW1tbyhvcHRpb25zKSB7CiAgICAgIHZhciBzY3JpcHRVcmwgPSBvcHRpb25zLmhvc3QgKyAnLycgKyAob3B0aW9ucy5wYXRoIHx8IExJQlJBUllfTkFNRSk7CiAgICAgIGltcG9ydFNjcmlwdHMoc2NyaXB0VXJsKTsKICAgICAgQW1tbygpLnRoZW4oaGFuZGxlTG9hZEV2ZW50KG9wdGlvbnMpKTsKICAgIH07CgogICAgb25tZXNzYWdlID0gZnVuY3Rpb24gb25tZXNzYWdlKF9yZWYyKSB7CiAgICAgIHZhciBkYXRhID0gX3JlZjIuZGF0YTsKCiAgICAgIHN3aXRjaCAoZGF0YS5ldmVudCkgewogICAgICAgIGNhc2UgUEhZU0lDU19FVkVOVFMuTE9BRC5BTU1POgogICAgICAgICAgbG9hZEFtbW8oZGF0YSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfTsKCn0pKCk7Cgo=', null, false);
|
|
54869
54930
|
/* eslint-enable */var PHYSICS_EVENTS = {
|
|
54870
54931
|
DISPATCH: 'physics:dispatch',
|
|
54871
54932
|
TERMINATE: 'physics:terminate',
|
|
@@ -54892,6 +54953,7 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
54892
54953
|
QUATERNION: 'physics:element:set:quaternion',
|
|
54893
54954
|
LINEAR_VELOCITY: 'physics:element:set:linear_velocity'
|
|
54894
54955
|
},
|
|
54956
|
+
RESET: 'physics:element:reset',
|
|
54895
54957
|
APPLY: {
|
|
54896
54958
|
IMPULSE: 'physics:element:apply:impulse'
|
|
54897
54959
|
}
|
|
@@ -54910,8 +54972,12 @@ function createBase64WorkerFactory(base64, sourcemapArg, enableUnicodeArg) {
|
|
|
54910
54972
|
}
|
|
54911
54973
|
};var PI = Math.PI;
|
|
54912
54974
|
var PI_2$1 = PI / 2;
|
|
54913
|
-
var
|
|
54914
|
-
return
|
|
54975
|
+
var identity = function identity(a) {
|
|
54976
|
+
return a;
|
|
54977
|
+
};
|
|
54978
|
+
var pickRandom = function pickRandom() {
|
|
54979
|
+
var list = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
54980
|
+
return list[Math.floor(Math.random() * list.length)];
|
|
54915
54981
|
};
|
|
54916
54982
|
var degToRad = function degToRad(angle) {
|
|
54917
54983
|
return angle * (PI / 180);
|
|
@@ -55038,7 +55104,7 @@ var smoothDampAngle = function smoothDampAngle(current, target, currentVelocity,
|
|
|
55038
55104
|
var dt = arguments.length > 5 ? arguments[5] : undefined;
|
|
55039
55105
|
target = current + deltaAngle(current, target);
|
|
55040
55106
|
return smoothDamp(current, target, currentVelocity, smoothTime, maxSpeed, dt);
|
|
55041
|
-
};var math=/*#__PURE__*/Object.freeze({__proto__:null,PI:PI,PI_2:PI_2$1,pickRandom:pickRandom,degToRad:degToRad,getProportion:getProportion,clamp:clamp,isWithin:isWithin,randomIntFromInterval:randomIntFromInterval,getDistance:getDistance,findPointBetweenAtDistance:findPointBetweenAtDistance,lerpVectors:lerpVectors,lerp:lerp,scaleVector:scaleVector,getSphereVolume:getSphereVolume,repeat:repeat,deltaAngle:deltaAngle,smoothDamp:smoothDamp,smoothDampAngle:smoothDampAngle});var LIBRARY_NAME = 'ammo.js';
|
|
55107
|
+
};var math=/*#__PURE__*/Object.freeze({__proto__:null,PI:PI,PI_2:PI_2$1,identity:identity,pickRandom:pickRandom,degToRad:degToRad,getProportion:getProportion,clamp:clamp,isWithin:isWithin,randomIntFromInterval:randomIntFromInterval,getDistance:getDistance,findPointBetweenAtDistance:findPointBetweenAtDistance,lerpVectors:lerpVectors,lerp:lerp,scaleVector:scaleVector,getSphereVolume:getSphereVolume,repeat:repeat,deltaAngle:deltaAngle,smoothDamp:smoothDamp,smoothDampAngle:smoothDampAngle});var LIBRARY_NAME = 'ammo.js';
|
|
55042
55108
|
var TYPES = {
|
|
55043
55109
|
BOX: 'BOX',
|
|
55044
55110
|
SPHERE: 'SPHERE',
|
|
@@ -55303,7 +55369,7 @@ var convertAmmoVector = function convertAmmoVector(_ref2) {
|
|
|
55303
55369
|
};
|
|
55304
55370
|
};var utils=/*#__PURE__*/Object.freeze({__proto__:null,DEFAULT_DESCRIPTION:DEFAULT_DESCRIPTION$1,mapColliderTypeToAddEvent:mapColliderTypeToAddEvent$1,extractBoundingBox:extractBoundingBox,extractBiggestBoundingBox:extractBiggestBoundingBox,extractBoundingSphere:extractBoundingSphere,extractBiggestBoundingSphere:extractBiggestBoundingSphere,parseBoundingBoxSize:parseBoundingBoxSize,extractPositionAndQuaternion:extractPositionAndQuaternion$1,extractBoxDescription:extractBoxDescription,extractSphereDescription:extractSphereDescription,getBoxDescriptionForElement:getBoxDescriptionForElement$1,getSphereDescriptionForElement:getSphereDescriptionForElement,mapColliderTypeToDescription:mapColliderTypeToDescription$1,iterateGeometries:iterateGeometries$1,convertAmmoVector:convertAmmoVector});var getHostURL = function getHostURL() {
|
|
55305
55371
|
return "".concat(document.location.protocol, "//").concat(document.location.host);
|
|
55306
|
-
};var _excluded$
|
|
55372
|
+
};var _excluded$7 = ["uuid"];
|
|
55307
55373
|
var COLLIDER_TYPES = COLLIDER_TYPES$1;
|
|
55308
55374
|
var getBoxDescriptionForElement = getBoxDescriptionForElement$1,
|
|
55309
55375
|
extractPositionAndQuaternion = extractPositionAndQuaternion$1,
|
|
@@ -55312,6 +55378,12 @@ var getBoxDescriptionForElement = getBoxDescriptionForElement$1,
|
|
|
55312
55378
|
mapColliderTypeToAddEvent = mapColliderTypeToAddEvent$1,
|
|
55313
55379
|
DEFAULT_DESCRIPTION = DEFAULT_DESCRIPTION$1;
|
|
55314
55380
|
var WORKER_READY_TIMEOUT = 200;
|
|
55381
|
+
var PHYSICS_STATE_TIMEOUT = 50;
|
|
55382
|
+
var PHYSICS_STATES = {
|
|
55383
|
+
READY: 'READY',
|
|
55384
|
+
TERMINATING: 'TERMINATING',
|
|
55385
|
+
TERMINATED: 'TERMINATED'
|
|
55386
|
+
};
|
|
55315
55387
|
var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
55316
55388
|
_inherits(Physics, _EventDispatcher);
|
|
55317
55389
|
|
|
@@ -55365,11 +55437,13 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55365
55437
|
|
|
55366
55438
|
_defineProperty$1(_assertThisInitialized(_this), "handleTerminateEvent", function () {
|
|
55367
55439
|
_this.worker.terminate();
|
|
55440
|
+
|
|
55441
|
+
_this.state = PHYSICS_STATES.READY;
|
|
55368
55442
|
});
|
|
55369
55443
|
|
|
55370
55444
|
_defineProperty$1(_assertThisInitialized(_this), "handleBodyUpdate", function (_ref3) {
|
|
55371
55445
|
var uuid = _ref3.uuid,
|
|
55372
|
-
data = _objectWithoutProperties(_ref3, _excluded$
|
|
55446
|
+
data = _objectWithoutProperties(_ref3, _excluded$7);
|
|
55373
55447
|
|
|
55374
55448
|
var element = Universe$1.getByUUID(uuid);
|
|
55375
55449
|
|
|
@@ -55411,6 +55485,10 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55411
55485
|
});
|
|
55412
55486
|
|
|
55413
55487
|
_defineProperty$1(_assertThisInitialized(_this), "setPosition", function (element, position) {
|
|
55488
|
+
_this.setElementPosition(element, position);
|
|
55489
|
+
});
|
|
55490
|
+
|
|
55491
|
+
_defineProperty$1(_assertThisInitialized(_this), "setElementPosition", function (element, position) {
|
|
55414
55492
|
if (Config$1.physics().enabled) {
|
|
55415
55493
|
var uuid = element.uuid();
|
|
55416
55494
|
|
|
@@ -55422,6 +55500,21 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55422
55500
|
}
|
|
55423
55501
|
});
|
|
55424
55502
|
|
|
55503
|
+
_defineProperty$1(_assertThisInitialized(_this), "setElementQuaternion", function (element, quaternion) {});
|
|
55504
|
+
|
|
55505
|
+
_defineProperty$1(_assertThisInitialized(_this), "resetElement", function (element, position, quaternion) {
|
|
55506
|
+
if (Config$1.physics().enabled) {
|
|
55507
|
+
var uuid = element.uuid();
|
|
55508
|
+
|
|
55509
|
+
_this.worker.postMessage({
|
|
55510
|
+
event: PHYSICS_EVENTS.ELEMENT.RESET,
|
|
55511
|
+
uuid: uuid,
|
|
55512
|
+
position: position,
|
|
55513
|
+
quaternion: quaternion
|
|
55514
|
+
});
|
|
55515
|
+
}
|
|
55516
|
+
});
|
|
55517
|
+
|
|
55425
55518
|
_defineProperty$1(_assertThisInitialized(_this), "setVehiclePosition", function (vehicle, _ref5) {
|
|
55426
55519
|
var x = _ref5.x,
|
|
55427
55520
|
y = _ref5.y,
|
|
@@ -55498,17 +55591,6 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55498
55591
|
}
|
|
55499
55592
|
});
|
|
55500
55593
|
|
|
55501
|
-
_defineProperty$1(_assertThisInitialized(_this), "disposeElement", function (element) {
|
|
55502
|
-
if (Config$1.physics().enabled) {
|
|
55503
|
-
var uuid = element.uuid();
|
|
55504
|
-
|
|
55505
|
-
_this.worker.postMessage({
|
|
55506
|
-
event: PHYSICS_EVENTS.ELEMENT.DISPOSE,
|
|
55507
|
-
uuid: uuid
|
|
55508
|
-
});
|
|
55509
|
-
}
|
|
55510
|
-
});
|
|
55511
|
-
|
|
55512
55594
|
_defineProperty$1(_assertThisInitialized(_this), "explosion", function (element, strength, radius) {
|
|
55513
55595
|
if (Config$1.physics().enabled) {
|
|
55514
55596
|
var uuid = element.uuid();
|
|
@@ -55523,6 +55605,8 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55523
55605
|
});
|
|
55524
55606
|
|
|
55525
55607
|
_this.elements = [];
|
|
55608
|
+
_this.isWorkerReady = false;
|
|
55609
|
+
_this.state = PHYSICS_STATES.READY;
|
|
55526
55610
|
return _this;
|
|
55527
55611
|
}
|
|
55528
55612
|
|
|
@@ -55531,12 +55615,52 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55531
55615
|
value: function createWorker() {
|
|
55532
55616
|
this.worker = new WorkerFactory();
|
|
55533
55617
|
this.workerReady = false;
|
|
55618
|
+
this.state = PHYSICS_STATES.READY;
|
|
55534
55619
|
this.worker.onmessage = this.handleWorkerMessages;
|
|
55535
55620
|
}
|
|
55621
|
+
}, {
|
|
55622
|
+
key: "isTerminating",
|
|
55623
|
+
value: function isTerminating() {
|
|
55624
|
+
return this.state === PHYSICS_STATES.TERMINATING;
|
|
55625
|
+
}
|
|
55626
|
+
}, {
|
|
55627
|
+
key: "isTerminated",
|
|
55628
|
+
value: function isTerminated() {
|
|
55629
|
+
return this.state === PHYSICS_STATES.TERMINATED;
|
|
55630
|
+
}
|
|
55631
|
+
}, {
|
|
55632
|
+
key: "isReady",
|
|
55633
|
+
value: function isReady() {
|
|
55634
|
+
return this.state === PHYSICS_STATES.READY;
|
|
55635
|
+
}
|
|
55636
|
+
}, {
|
|
55637
|
+
key: "waitForState",
|
|
55638
|
+
value: function waitForState(state) {
|
|
55639
|
+
var _this2 = this;
|
|
55640
|
+
|
|
55641
|
+
return new Promise(function (resolve) {
|
|
55642
|
+
var isStateReached = function isStateReached() {
|
|
55643
|
+
return _this2.state === state;
|
|
55644
|
+
};
|
|
55645
|
+
|
|
55646
|
+
var check = function check() {
|
|
55647
|
+
setTimeout(function () {
|
|
55648
|
+
if (isStateReached()) {
|
|
55649
|
+
resolve();
|
|
55650
|
+
} else {
|
|
55651
|
+
check();
|
|
55652
|
+
}
|
|
55653
|
+
}, PHYSICS_STATE_TIMEOUT);
|
|
55654
|
+
};
|
|
55655
|
+
|
|
55656
|
+
check();
|
|
55657
|
+
});
|
|
55658
|
+
}
|
|
55536
55659
|
}, {
|
|
55537
55660
|
key: "dispose",
|
|
55538
55661
|
value: function dispose() {
|
|
55539
55662
|
if (Config$1.physics().enabled) {
|
|
55663
|
+
this.state = PHYSICS_STATES.TERMINATING;
|
|
55540
55664
|
this.worker.postMessage({
|
|
55541
55665
|
event: PHYSICS_EVENTS.TERMINATE
|
|
55542
55666
|
});
|
|
@@ -55572,7 +55696,7 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55572
55696
|
}, {
|
|
55573
55697
|
key: "init",
|
|
55574
55698
|
value: function init() {
|
|
55575
|
-
var
|
|
55699
|
+
var _this3 = this;
|
|
55576
55700
|
|
|
55577
55701
|
if (Config$1.physics().enabled) {
|
|
55578
55702
|
this.createWorker();
|
|
@@ -55583,7 +55707,7 @@ var Physics = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
55583
55707
|
}));
|
|
55584
55708
|
return new Promise(function (resolve) {
|
|
55585
55709
|
var isWorkerReady = function isWorkerReady() {
|
|
55586
|
-
return
|
|
55710
|
+
return _this3.workerReady;
|
|
55587
55711
|
};
|
|
55588
55712
|
|
|
55589
55713
|
var check = function check() {
|
|
@@ -55712,11 +55836,12 @@ var Physics$1 = new Physics();var ENTITY_TYPES = {
|
|
|
55712
55836
|
SCENERY: 'EFFECT.SCENERY'
|
|
55713
55837
|
},
|
|
55714
55838
|
HELPER: {
|
|
55715
|
-
GRID: 'HELPER.GRID'
|
|
55839
|
+
GRID: 'HELPER.GRID',
|
|
55840
|
+
AXES: 'HELPER.AXES'
|
|
55716
55841
|
},
|
|
55717
55842
|
UNKNOWN: 'UNKNOWN'
|
|
55718
55843
|
};
|
|
55719
|
-
var FLAT_ENTITY_TYPES = [
|
|
55844
|
+
var FLAT_ENTITY_TYPES = [ENTITY_TYPES.SCENE, ENTITY_TYPES.CAMERA, ENTITY_TYPES.MESH, ENTITY_TYPES.LIGHT.DEFAULT, ENTITY_TYPES.LIGHT.AMBIENT, ENTITY_TYPES.LIGHT.SUN, ENTITY_TYPES.LIGHT.HEMISPHERE, ENTITY_TYPES.LIGHT.POINT, ENTITY_TYPES.LIGHT.SPOT, ENTITY_TYPES.AUDIO.DEFAULT, ENTITY_TYPES.AUDIO.AMBIENT, ENTITY_TYPES.AUDIO.DIRECTIONAL, ENTITY_TYPES.AUDIO.BACKGROUND, ENTITY_TYPES.MODEL, ENTITY_TYPES.SPRITE, ENTITY_TYPES.PARTICLE, ENTITY_TYPES.EFFECT.PARTICLE, ENTITY_TYPES.EFFECT.SCENERY, ENTITY_TYPES.HELPER.GRID, ENTITY_TYPES.HELPER.AXES, ENTITY_TYPES.UNKNOWN];
|
|
55720
55845
|
var ENTITY_EVENTS = {
|
|
55721
55846
|
DISPOSE: 'DISPOSE',
|
|
55722
55847
|
STATE_MACHINE: {
|
|
@@ -57193,7 +57318,7 @@ function applyMiddleware() {
|
|
|
57193
57318
|
|
|
57194
57319
|
var thunk = createThunkMiddleware();
|
|
57195
57320
|
thunk.withExtraArgument = createThunkMiddleware;var name = "mage-engine";
|
|
57196
|
-
var version = "3.17.
|
|
57321
|
+
var version = "3.17.8";
|
|
57197
57322
|
var description = "A WebGL Javascript Game Engine, built on top of THREE.js and many other libraries.";
|
|
57198
57323
|
var main = "dist/mage.js";
|
|
57199
57324
|
var author$1 = {
|
|
@@ -58459,7 +58584,7 @@ if (!self.fetch) {
|
|
|
58459
58584
|
self.Headers = Headers;
|
|
58460
58585
|
self.Request = Request;
|
|
58461
58586
|
self.Response = Response;
|
|
58462
|
-
}var _excluded$
|
|
58587
|
+
}var _excluded$6 = ["wheels", "accelerationKey", "brakingKey", "rightKey", "leftKey", "debug"];
|
|
58463
58588
|
|
|
58464
58589
|
var BaseCar = /*#__PURE__*/function (_BaseScript) {
|
|
58465
58590
|
_inherits(BaseCar, _BaseScript);
|
|
@@ -58485,7 +58610,7 @@ var BaseCar = /*#__PURE__*/function (_BaseScript) {
|
|
|
58485
58610
|
_options$leftKey = options.leftKey,
|
|
58486
58611
|
leftKey = _options$leftKey === void 0 ? 'a' : _options$leftKey;
|
|
58487
58612
|
options.debug;
|
|
58488
|
-
var physicsOptions = _objectWithoutProperties(options, _excluded$
|
|
58613
|
+
var physicsOptions = _objectWithoutProperties(options, _excluded$6);
|
|
58489
58614
|
|
|
58490
58615
|
this.car = element;
|
|
58491
58616
|
this.wheels = wheels;
|
|
@@ -58709,1557 +58834,1648 @@ var Scripts = /*#__PURE__*/function () {
|
|
|
58709
58834
|
|
|
58710
58835
|
return Scripts;
|
|
58711
58836
|
}();
|
|
58712
|
-
var Scripts$1 = new Scripts();var
|
|
58713
|
-
_inherits(Entity, _EventDispatcher);
|
|
58714
|
-
|
|
58715
|
-
var _super = _createSuper(Entity);
|
|
58716
|
-
|
|
58717
|
-
function Entity(_ref) {
|
|
58718
|
-
var _this;
|
|
58837
|
+
var Scripts$1 = new Scripts();var inverseProjectionMatrix = new Matrix4();
|
|
58719
58838
|
|
|
58720
|
-
|
|
58721
|
-
|
|
58722
|
-
|
|
58723
|
-
tag = _ref$tag === void 0 ? '' : _ref$tag,
|
|
58724
|
-
_ref$tags = _ref.tags,
|
|
58725
|
-
tags = _ref$tags === void 0 ? [] : _ref$tags;
|
|
58726
|
-
|
|
58727
|
-
_classCallCheck(this, Entity);
|
|
58728
|
-
|
|
58729
|
-
_this = _super.call(this);
|
|
58730
|
-
|
|
58731
|
-
_defineProperty$1(_assertThisInitialized(_this), "addTag", function (tagName) {
|
|
58732
|
-
if (!tagName) return;
|
|
58733
|
-
|
|
58734
|
-
if (!_this.hasTag(tagName)) {
|
|
58735
|
-
_this.tags.push(tagName);
|
|
58839
|
+
var Frustum = /*#__PURE__*/function () {
|
|
58840
|
+
function Frustum(data) {
|
|
58841
|
+
_classCallCheck(this, Frustum);
|
|
58736
58842
|
|
|
58737
|
-
|
|
58738
|
-
|
|
58739
|
-
|
|
58740
|
-
|
|
58741
|
-
|
|
58742
|
-
});
|
|
58843
|
+
data = data || {};
|
|
58844
|
+
this.vertices = {
|
|
58845
|
+
near: [new Vector3$1(), new Vector3$1(), new Vector3$1(), new Vector3$1()],
|
|
58846
|
+
far: [new Vector3$1(), new Vector3$1(), new Vector3$1(), new Vector3$1()]
|
|
58847
|
+
};
|
|
58743
58848
|
|
|
58744
|
-
|
|
58745
|
-
|
|
58746
|
-
}
|
|
58849
|
+
if (data.projectionMatrix !== undefined) {
|
|
58850
|
+
this.setFromProjectionMatrix(data.projectionMatrix, data.maxFar || 10000);
|
|
58851
|
+
}
|
|
58852
|
+
}
|
|
58747
58853
|
|
|
58748
|
-
|
|
58749
|
-
|
|
58750
|
-
|
|
58854
|
+
_createClass(Frustum, [{
|
|
58855
|
+
key: "setFromProjectionMatrix",
|
|
58856
|
+
value: function setFromProjectionMatrix(projectionMatrix, maxFar) {
|
|
58857
|
+
var isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0;
|
|
58858
|
+
inverseProjectionMatrix.copy(projectionMatrix).invert(); // 3 --- 0 vertices.near/far order
|
|
58859
|
+
// | |
|
|
58860
|
+
// 2 --- 1
|
|
58861
|
+
// clip space spans from [-1, 1]
|
|
58751
58862
|
|
|
58752
|
-
|
|
58753
|
-
|
|
58754
|
-
|
|
58755
|
-
|
|
58756
|
-
|
|
58757
|
-
|
|
58758
|
-
options: options[i]
|
|
58759
|
-
};
|
|
58863
|
+
this.vertices.near[0].set(1, 1, -1);
|
|
58864
|
+
this.vertices.near[1].set(1, -1, -1);
|
|
58865
|
+
this.vertices.near[2].set(-1, -1, -1);
|
|
58866
|
+
this.vertices.near[3].set(-1, 1, -1);
|
|
58867
|
+
this.vertices.near.forEach(function (v) {
|
|
58868
|
+
v.applyMatrix4(inverseProjectionMatrix);
|
|
58760
58869
|
});
|
|
58761
|
-
|
|
58870
|
+
this.vertices.far[0].set(1, 1, 1);
|
|
58871
|
+
this.vertices.far[1].set(1, -1, 1);
|
|
58872
|
+
this.vertices.far[2].set(-1, -1, 1);
|
|
58873
|
+
this.vertices.far[3].set(-1, 1, 1);
|
|
58874
|
+
this.vertices.far.forEach(function (v) {
|
|
58875
|
+
v.applyMatrix4(inverseProjectionMatrix);
|
|
58876
|
+
var absZ = Math.abs(v.z);
|
|
58762
58877
|
|
|
58763
|
-
|
|
58764
|
-
|
|
58765
|
-
|
|
58878
|
+
if (isOrthographic) {
|
|
58879
|
+
v.z *= Math.min(maxFar / absZ, 1.0);
|
|
58880
|
+
} else {
|
|
58881
|
+
v.multiplyScalar(Math.min(maxFar / absZ, 1.0));
|
|
58882
|
+
}
|
|
58883
|
+
});
|
|
58884
|
+
return this.vertices;
|
|
58885
|
+
}
|
|
58886
|
+
}, {
|
|
58887
|
+
key: "split",
|
|
58888
|
+
value: function split(breaks, target) {
|
|
58889
|
+
while (breaks.length > target.length) {
|
|
58890
|
+
target.push(new Frustum());
|
|
58891
|
+
}
|
|
58766
58892
|
|
|
58767
|
-
|
|
58768
|
-
return _this.getEntityType() === ENTITY_TYPES.MODEL;
|
|
58769
|
-
});
|
|
58893
|
+
target.length = breaks.length;
|
|
58770
58894
|
|
|
58771
|
-
|
|
58772
|
-
|
|
58773
|
-
});
|
|
58895
|
+
for (var i = 0; i < breaks.length; i++) {
|
|
58896
|
+
var cascade = target[i];
|
|
58774
58897
|
|
|
58775
|
-
|
|
58776
|
-
|
|
58777
|
-
|
|
58898
|
+
if (i === 0) {
|
|
58899
|
+
for (var j = 0; j < 4; j++) {
|
|
58900
|
+
cascade.vertices.near[j].copy(this.vertices.near[j]);
|
|
58901
|
+
}
|
|
58902
|
+
} else {
|
|
58903
|
+
for (var _j = 0; _j < 4; _j++) {
|
|
58904
|
+
cascade.vertices.near[_j].lerpVectors(this.vertices.near[_j], this.vertices.far[_j], breaks[i - 1]);
|
|
58905
|
+
}
|
|
58906
|
+
}
|
|
58778
58907
|
|
|
58779
|
-
|
|
58780
|
-
|
|
58781
|
-
|
|
58908
|
+
if (i === breaks - 1) {
|
|
58909
|
+
for (var _j2 = 0; _j2 < 4; _j2++) {
|
|
58910
|
+
cascade.vertices.far[_j2].copy(this.vertices.far[_j2]);
|
|
58911
|
+
}
|
|
58912
|
+
} else {
|
|
58913
|
+
for (var _j3 = 0; _j3 < 4; _j3++) {
|
|
58914
|
+
cascade.vertices.far[_j3].lerpVectors(this.vertices.near[_j3], this.vertices.far[_j3], breaks[i]);
|
|
58915
|
+
}
|
|
58916
|
+
}
|
|
58917
|
+
}
|
|
58918
|
+
}
|
|
58919
|
+
}, {
|
|
58920
|
+
key: "toSpace",
|
|
58921
|
+
value: function toSpace(cameraMatrix, target) {
|
|
58922
|
+
for (var i = 0; i < 4; i++) {
|
|
58923
|
+
target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix);
|
|
58924
|
+
target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix);
|
|
58925
|
+
}
|
|
58926
|
+
}
|
|
58927
|
+
}]);
|
|
58782
58928
|
|
|
58783
|
-
|
|
58784
|
-
|
|
58785
|
-
|
|
58929
|
+
return Frustum;
|
|
58930
|
+
}();var Shader$1 = {
|
|
58931
|
+
lights_fragment_begin:
|
|
58932
|
+
/* glsl */
|
|
58933
|
+
"\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n geometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n pointLight = pointLights[ i ];\n\n getPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n SpotLight spotLight;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n spotLight = spotLights[ i ];\n\n getSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n DirectionalLight directionalLight;\n float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n #if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n vec2 cascade;\n float cascadeCenter;\n float closestEdge;\n float margin;\n float csmx;\n float csmy;\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n // NOTE: Depth gets larger away from the camera.\n // cascade.x is closer, cascade.y is further\n cascade = CSM_cascades[ i ];\n cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n margin = 0.25 * pow( closestEdge, 2.0 );\n csmx = cascade.x - margin / 2.0;\n csmy = cascade.y + margin / 2.0;\n if( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n float dist = min( linearDepth - csmx, csmy - linearDepth );\n float ratio = clamp( dist / margin, 0.0, 1.0 );\n if( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) {\n\n vec3 prevColor = directLight.color;\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n }\n\n ReflectedLight prevLight = reflectedLight;\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n float blendRatio = shouldBlend ? ratio : 1.0;\n\n reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n }\n\n }\n #pragma unroll_loop_end\n #else\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n directionalLightShadow = directionalLightShadows[ i ];\n if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n #endif\n\n if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n #endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n RectAreaLight rectAreaLight;\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n vec3 iblIrradiance = vec3( 0.0 );\n\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n irradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n #if ( NUM_HEMI_LIGHTS > 0 )\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n }\n #pragma unroll_loop_end\n\n #endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n",
|
|
58934
|
+
lights_pars_begin:
|
|
58935
|
+
/* glsl */
|
|
58936
|
+
"\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n " + ShaderChunk.lights_pars_begin
|
|
58937
|
+
};var _cameraToLightMatrix = new Matrix4();
|
|
58786
58938
|
|
|
58787
|
-
|
|
58788
|
-
var x = _ref2.x,
|
|
58789
|
-
y = _ref2.y,
|
|
58790
|
-
z = _ref2.z,
|
|
58791
|
-
w = _ref2.w;
|
|
58939
|
+
var _lightSpaceFrustum = new Frustum();
|
|
58792
58940
|
|
|
58793
|
-
|
|
58794
|
-
});
|
|
58941
|
+
var _center = new Vector3$1();
|
|
58795
58942
|
|
|
58796
|
-
|
|
58797
|
-
if (uuid) {
|
|
58798
|
-
_this.body.uuid = uuid;
|
|
58799
|
-
}
|
|
58800
|
-
});
|
|
58943
|
+
var _bbox = new Box3();
|
|
58801
58944
|
|
|
58802
|
-
|
|
58803
|
-
|
|
58804
|
-
|
|
58805
|
-
|
|
58945
|
+
var _uniformArray = [];
|
|
58946
|
+
var _logArray = [];
|
|
58947
|
+
var DEFAULT_MAX_FAR = 100000;
|
|
58948
|
+
var DEFAULT_MODE = 'practical';
|
|
58949
|
+
var DEFAULT_SHADOWMAP_SIZE = 2048;
|
|
58950
|
+
var DEFAULT_CASCADE = 3;
|
|
58951
|
+
var DEFAULT_BIAS$3 = 0.000001;
|
|
58952
|
+
var DEFAULT_INTENSITY$5 = 1;
|
|
58953
|
+
var DEFAULT_NEAR$3 = 1;
|
|
58954
|
+
var DEFAULT_FAR$3 = 2000;
|
|
58955
|
+
var DEFAULT_MARGIN = 200;
|
|
58956
|
+
var CascadeShadowMaps = /*#__PURE__*/function () {
|
|
58957
|
+
function CascadeShadowMaps(_ref) {
|
|
58958
|
+
var _ref$camera = _ref.camera,
|
|
58959
|
+
camera = _ref$camera === void 0 ? Scene$1.getCameraBody() : _ref$camera,
|
|
58960
|
+
_ref$parent = _ref.parent,
|
|
58961
|
+
parent = _ref$parent === void 0 ? Scene$1.getScene() : _ref$parent,
|
|
58962
|
+
_ref$cascades = _ref.cascades,
|
|
58963
|
+
cascades = _ref$cascades === void 0 ? DEFAULT_CASCADE : _ref$cascades,
|
|
58964
|
+
_ref$maxFar = _ref.maxFar,
|
|
58965
|
+
maxFar = _ref$maxFar === void 0 ? DEFAULT_MAX_FAR : _ref$maxFar,
|
|
58966
|
+
_ref$mode = _ref.mode,
|
|
58967
|
+
mode = _ref$mode === void 0 ? DEFAULT_MODE : _ref$mode,
|
|
58968
|
+
_ref$shadowMapSize = _ref.shadowMapSize,
|
|
58969
|
+
shadowMapSize = _ref$shadowMapSize === void 0 ? DEFAULT_SHADOWMAP_SIZE : _ref$shadowMapSize,
|
|
58970
|
+
_ref$shadowBias = _ref.shadowBias,
|
|
58971
|
+
shadowBias = _ref$shadowBias === void 0 ? DEFAULT_BIAS$3 : _ref$shadowBias,
|
|
58972
|
+
_ref$lightDirection = _ref.lightDirection,
|
|
58973
|
+
lightDirection = _ref$lightDirection === void 0 ? new Vector3$1(1, -1, 1).normalize() : _ref$lightDirection,
|
|
58974
|
+
_ref$lightIntensity = _ref.lightIntensity,
|
|
58975
|
+
lightIntensity = _ref$lightIntensity === void 0 ? DEFAULT_INTENSITY$5 : _ref$lightIntensity,
|
|
58976
|
+
_ref$lightNear = _ref.lightNear,
|
|
58977
|
+
lightNear = _ref$lightNear === void 0 ? DEFAULT_NEAR$3 : _ref$lightNear,
|
|
58978
|
+
_ref$lightFar = _ref.lightFar,
|
|
58979
|
+
lightFar = _ref$lightFar === void 0 ? DEFAULT_FAR$3 : _ref$lightFar,
|
|
58980
|
+
_ref$lightMargin = _ref.lightMargin,
|
|
58981
|
+
lightMargin = _ref$lightMargin === void 0 ? DEFAULT_MARGIN : _ref$lightMargin,
|
|
58982
|
+
customSplitsCallback = _ref.customSplitsCallback;
|
|
58806
58983
|
|
|
58807
|
-
|
|
58984
|
+
_classCallCheck(this, CascadeShadowMaps);
|
|
58808
58985
|
|
|
58809
|
-
|
|
58810
|
-
|
|
58986
|
+
this.camera = camera;
|
|
58987
|
+
this.parent = parent;
|
|
58988
|
+
this.cascades = cascades;
|
|
58989
|
+
this.maxFar = maxFar;
|
|
58990
|
+
this.mode = mode;
|
|
58991
|
+
this.shadowMapSize = shadowMapSize;
|
|
58992
|
+
this.shadowBias = shadowBias;
|
|
58993
|
+
this.lightDirection = lightDirection;
|
|
58994
|
+
this.lightIntensity = lightIntensity;
|
|
58995
|
+
this.lightNear = lightNear;
|
|
58996
|
+
this.lightFar = lightFar;
|
|
58997
|
+
this.lightMargin = lightMargin;
|
|
58998
|
+
this.customSplitsCallback = customSplitsCallback;
|
|
58999
|
+
this.fade = false;
|
|
59000
|
+
this.mainFrustum = new Frustum();
|
|
59001
|
+
this.frustums = [];
|
|
59002
|
+
this.breaks = [];
|
|
59003
|
+
this.lights = [];
|
|
59004
|
+
this.shaders = new Map();
|
|
59005
|
+
this.createLights();
|
|
59006
|
+
this.updateFrustums();
|
|
59007
|
+
this.injectInclude();
|
|
58811
59008
|
}
|
|
58812
59009
|
|
|
58813
|
-
_createClass(
|
|
58814
|
-
key: "
|
|
58815
|
-
value: function
|
|
58816
|
-
this.
|
|
58817
|
-
|
|
58818
|
-
|
|
58819
|
-
|
|
58820
|
-
|
|
58821
|
-
|
|
58822
|
-
|
|
58823
|
-
|
|
58824
|
-
|
|
58825
|
-
|
|
58826
|
-
|
|
58827
|
-
|
|
58828
|
-
}
|
|
58829
|
-
}, {
|
|
58830
|
-
key: "setBody",
|
|
58831
|
-
value: function setBody(body) {
|
|
58832
|
-
this.body = body;
|
|
58833
|
-
}
|
|
58834
|
-
}, {
|
|
58835
|
-
key: "hasParent",
|
|
58836
|
-
value: function hasParent() {
|
|
58837
|
-
return !!this.parent;
|
|
58838
|
-
}
|
|
58839
|
-
}, {
|
|
58840
|
-
key: "getParent",
|
|
58841
|
-
value: function getParent() {
|
|
58842
|
-
return this.parent;
|
|
59010
|
+
_createClass(CascadeShadowMaps, [{
|
|
59011
|
+
key: "createLights",
|
|
59012
|
+
value: function createLights() {
|
|
59013
|
+
for (var i = 0; i < this.cascades; i++) {
|
|
59014
|
+
var light = new DirectionalLight(0xffffff, this.lightIntensity);
|
|
59015
|
+
light.castShadow = true;
|
|
59016
|
+
light.shadow.mapSize.width = this.shadowMapSize;
|
|
59017
|
+
light.shadow.mapSize.height = this.shadowMapSize;
|
|
59018
|
+
light.shadow.camera.near = this.lightNear;
|
|
59019
|
+
light.shadow.camera.far = this.lightFar;
|
|
59020
|
+
light.shadow.bias = this.shadowBias;
|
|
59021
|
+
this.parent.add(light);
|
|
59022
|
+
this.parent.add(light.target);
|
|
59023
|
+
this.lights.push(light);
|
|
59024
|
+
}
|
|
58843
59025
|
}
|
|
58844
59026
|
}, {
|
|
58845
|
-
key: "
|
|
58846
|
-
value: function
|
|
58847
|
-
|
|
59027
|
+
key: "initCascades",
|
|
59028
|
+
value: function initCascades() {
|
|
59029
|
+
var camera = this.camera;
|
|
59030
|
+
camera.updateProjectionMatrix();
|
|
59031
|
+
this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar);
|
|
59032
|
+
this.mainFrustum.split(this.breaks, this.frustums);
|
|
58848
59033
|
}
|
|
58849
59034
|
}, {
|
|
58850
|
-
key: "
|
|
58851
|
-
value: function
|
|
58852
|
-
var
|
|
58853
|
-
|
|
58854
|
-
if (this.hasBody()) {
|
|
58855
|
-
var _add = function _add(toAdd) {
|
|
58856
|
-
_this2.children.push(toAdd);
|
|
59035
|
+
key: "updateShadowBounds",
|
|
59036
|
+
value: function updateShadowBounds() {
|
|
59037
|
+
var frustums = this.frustums;
|
|
58857
59038
|
|
|
58858
|
-
|
|
59039
|
+
for (var i = 0; i < frustums.length; i++) {
|
|
59040
|
+
var light = this.lights[i];
|
|
59041
|
+
var shadowCam = light.shadow.camera;
|
|
59042
|
+
var frustum = this.frustums[i]; // Get the two points that represent that furthest points on the frustum assuming
|
|
59043
|
+
// that's either the diagonal across the far plane or the diagonal across the whole
|
|
59044
|
+
// frustum itself.
|
|
58859
59045
|
|
|
58860
|
-
|
|
58861
|
-
|
|
59046
|
+
var nearVerts = frustum.vertices.near;
|
|
59047
|
+
var farVerts = frustum.vertices.far;
|
|
59048
|
+
var point1 = farVerts[0];
|
|
59049
|
+
var point2 = void 0;
|
|
58862
59050
|
|
|
58863
|
-
if (
|
|
58864
|
-
|
|
59051
|
+
if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) {
|
|
59052
|
+
point2 = farVerts[2];
|
|
58865
59053
|
} else {
|
|
58866
|
-
|
|
59054
|
+
point2 = nearVerts[2];
|
|
58867
59055
|
}
|
|
58868
|
-
}
|
|
58869
|
-
}
|
|
58870
|
-
}, {
|
|
58871
|
-
key: "isParentOf",
|
|
58872
|
-
value: function isParentOf(element) {
|
|
58873
|
-
var comparator = function comparator(child) {
|
|
58874
|
-
return !!child.getBody().getObjectById(element.id);
|
|
58875
|
-
};
|
|
58876
59056
|
|
|
58877
|
-
|
|
58878
|
-
comparator = function comparator(child) {
|
|
58879
|
-
return child.getBody().getObjectById(element.id());
|
|
58880
|
-
};
|
|
58881
|
-
}
|
|
59057
|
+
var squaredBBWidth = point1.distanceTo(point2);
|
|
58882
59058
|
|
|
58883
|
-
|
|
58884
|
-
|
|
58885
|
-
|
|
58886
|
-
|
|
58887
|
-
|
|
58888
|
-
|
|
58889
|
-
|
|
58890
|
-
|
|
58891
|
-
|
|
59059
|
+
if (this.fade) {
|
|
59060
|
+
// expand the shadow extents by the fade margin if fade is enabled.
|
|
59061
|
+
var camera = this.camera;
|
|
59062
|
+
var far = Math.max(camera.far, this.maxFar);
|
|
59063
|
+
var linearDepth = frustum.vertices.far[0].z / (far - camera.near);
|
|
59064
|
+
var margin = 0.25 * Math.pow(linearDepth, 2.0) * (far - camera.near);
|
|
59065
|
+
squaredBBWidth += margin;
|
|
59066
|
+
}
|
|
59067
|
+
|
|
59068
|
+
shadowCam.left = -squaredBBWidth / 2;
|
|
59069
|
+
shadowCam.right = squaredBBWidth / 2;
|
|
59070
|
+
shadowCam.top = squaredBBWidth / 2;
|
|
59071
|
+
shadowCam.bottom = -squaredBBWidth / 2;
|
|
59072
|
+
shadowCam.updateProjectionMatrix();
|
|
58892
59073
|
}
|
|
58893
59074
|
}
|
|
58894
59075
|
}, {
|
|
58895
|
-
key: "
|
|
58896
|
-
value: function
|
|
58897
|
-
|
|
58898
|
-
|
|
58899
|
-
|
|
58900
|
-
|
|
58901
|
-
|
|
58902
|
-
|
|
59076
|
+
key: "getBreaks",
|
|
59077
|
+
value: function getBreaks() {
|
|
59078
|
+
var camera = this.camera;
|
|
59079
|
+
var far = Math.min(camera.far, this.maxFar);
|
|
59080
|
+
this.breaks.length = 0;
|
|
59081
|
+
|
|
59082
|
+
switch (this.mode) {
|
|
59083
|
+
case 'uniform':
|
|
59084
|
+
uniformSplit(this.cascades, camera.near, far, this.breaks);
|
|
59085
|
+
break;
|
|
59086
|
+
|
|
59087
|
+
case 'logarithmic':
|
|
59088
|
+
logarithmicSplit(this.cascades, camera.near, far, this.breaks);
|
|
59089
|
+
break;
|
|
59090
|
+
|
|
59091
|
+
case 'practical':
|
|
59092
|
+
practicalSplit(this.cascades, camera.near, far, 0.5, this.breaks);
|
|
59093
|
+
break;
|
|
59094
|
+
|
|
59095
|
+
case 'custom':
|
|
59096
|
+
if (this.customSplitsCallback === undefined) console.error('CSM: Custom split scheme callback not defined.');
|
|
59097
|
+
this.customSplitsCallback(this.cascades, camera.near, far, this.breaks);
|
|
59098
|
+
break;
|
|
58903
59099
|
}
|
|
58904
|
-
|
|
58905
|
-
|
|
58906
|
-
|
|
58907
|
-
|
|
58908
|
-
|
|
58909
|
-
|
|
58910
|
-
|
|
58911
|
-
return e.getHierarchy();
|
|
58912
|
-
})
|
|
58913
|
-
};
|
|
58914
|
-
}
|
|
58915
|
-
}, {
|
|
58916
|
-
key: "addTags",
|
|
58917
|
-
value: function addTags() {
|
|
58918
|
-
var tags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
58919
|
-
tags.forEach(this.addTag);
|
|
58920
|
-
}
|
|
58921
|
-
}, {
|
|
58922
|
-
key: "removeTag",
|
|
58923
|
-
value: function removeTag(tagName) {
|
|
58924
|
-
if (tagName === DEFAULT_TAG) {
|
|
58925
|
-
console.log(TAG_CANT_BE_REMOVED);
|
|
58926
|
-
return;
|
|
59100
|
+
|
|
59101
|
+
function uniformSplit(amount, near, far, target) {
|
|
59102
|
+
for (var i = 1; i < amount; i++) {
|
|
59103
|
+
target.push((near + (far - near) * i / amount) / far);
|
|
59104
|
+
}
|
|
59105
|
+
|
|
59106
|
+
target.push(1);
|
|
58927
59107
|
}
|
|
58928
59108
|
|
|
58929
|
-
|
|
58930
|
-
|
|
58931
|
-
|
|
58932
|
-
|
|
59109
|
+
function logarithmicSplit(amount, near, far, target) {
|
|
59110
|
+
for (var i = 1; i < amount; i++) {
|
|
59111
|
+
target.push(near * Math.pow(far / near, i / amount) / far);
|
|
59112
|
+
}
|
|
59113
|
+
|
|
59114
|
+
target.push(1);
|
|
58933
59115
|
}
|
|
58934
|
-
}
|
|
58935
|
-
}, {
|
|
58936
|
-
key: "removeAllTags",
|
|
58937
|
-
value: function removeAllTags() {
|
|
58938
|
-
this.tags = [DEFAULT_TAG];
|
|
58939
|
-
}
|
|
58940
|
-
}, {
|
|
58941
|
-
key: "hasTag",
|
|
58942
|
-
value: function hasTag(tagName) {
|
|
58943
|
-
return this.tags.includes(tagName);
|
|
58944
|
-
}
|
|
58945
|
-
}, {
|
|
58946
|
-
key: "getTags",
|
|
58947
|
-
value: function getTags() {
|
|
58948
|
-
return this.tags;
|
|
58949
|
-
}
|
|
58950
|
-
}, {
|
|
58951
|
-
key: "stopScripts",
|
|
58952
|
-
value: function stopScripts() {
|
|
58953
|
-
if (this.hasScripts()) {
|
|
58954
|
-
this.scripts.forEach(function (_ref3) {
|
|
58955
|
-
var script = _ref3.script,
|
|
58956
|
-
enabled = _ref3.enabled;
|
|
58957
59116
|
|
|
58958
|
-
|
|
58959
|
-
|
|
59117
|
+
function practicalSplit(amount, near, far, lambda, target) {
|
|
59118
|
+
_uniformArray.length = 0;
|
|
59119
|
+
_logArray.length = 0;
|
|
59120
|
+
logarithmicSplit(amount, near, far, _logArray);
|
|
59121
|
+
uniformSplit(amount, near, far, _uniformArray);
|
|
58960
59122
|
|
|
58961
|
-
|
|
58962
|
-
|
|
58963
|
-
}
|
|
59123
|
+
for (var i = 1; i < amount; i++) {
|
|
59124
|
+
target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda));
|
|
59125
|
+
}
|
|
59126
|
+
|
|
59127
|
+
target.push(1);
|
|
58964
59128
|
}
|
|
58965
59129
|
}
|
|
58966
59130
|
}, {
|
|
58967
|
-
key: "
|
|
58968
|
-
value: function
|
|
58969
|
-
var
|
|
59131
|
+
key: "update",
|
|
59132
|
+
value: function update() {
|
|
59133
|
+
var camera = this.camera;
|
|
59134
|
+
var frustums = this.frustums;
|
|
58970
59135
|
|
|
58971
|
-
|
|
58972
|
-
this.
|
|
58973
|
-
|
|
58974
|
-
|
|
58975
|
-
|
|
59136
|
+
for (var i = 0; i < frustums.length; i++) {
|
|
59137
|
+
var light = this.lights[i];
|
|
59138
|
+
var shadowCam = light.shadow.camera;
|
|
59139
|
+
var texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize;
|
|
59140
|
+
var texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize;
|
|
59141
|
+
light.shadow.camera.updateMatrixWorld(true);
|
|
58976
59142
|
|
|
58977
|
-
|
|
58978
|
-
script.start(_this3, options);
|
|
59143
|
+
_cameraToLightMatrix.multiplyMatrices(light.shadow.camera.matrixWorldInverse, camera.matrixWorld);
|
|
58979
59144
|
|
|
58980
|
-
|
|
58981
|
-
|
|
58982
|
-
|
|
58983
|
-
}
|
|
58984
|
-
}
|
|
58985
|
-
}, {
|
|
58986
|
-
key: "update",
|
|
58987
|
-
value: function update(dt) {
|
|
58988
|
-
if (this.hasScripts()) {
|
|
58989
|
-
this.scripts.forEach(function (_ref5) {
|
|
58990
|
-
var script = _ref5.script,
|
|
58991
|
-
enabled = _ref5.enabled;
|
|
59145
|
+
frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum);
|
|
59146
|
+
var nearVerts = _lightSpaceFrustum.vertices.near;
|
|
59147
|
+
var farVerts = _lightSpaceFrustum.vertices.far;
|
|
58992
59148
|
|
|
58993
|
-
|
|
58994
|
-
script.update(dt);
|
|
58995
|
-
}
|
|
58996
|
-
});
|
|
58997
|
-
}
|
|
58998
|
-
}
|
|
58999
|
-
}, {
|
|
59000
|
-
key: "onPhysicsUpdate",
|
|
59001
|
-
value: function onPhysicsUpdate(dt) {
|
|
59002
|
-
if (this.hasScripts()) {
|
|
59003
|
-
this.scripts.forEach(function (_ref6) {
|
|
59004
|
-
var script = _ref6.script,
|
|
59005
|
-
enabled = _ref6.enabled;
|
|
59149
|
+
_bbox.makeEmpty();
|
|
59006
59150
|
|
|
59007
|
-
|
|
59008
|
-
|
|
59009
|
-
}
|
|
59010
|
-
});
|
|
59011
|
-
}
|
|
59012
|
-
}
|
|
59013
|
-
}, {
|
|
59014
|
-
key: "dispose",
|
|
59015
|
-
value: function dispose() {
|
|
59016
|
-
if (this.hasBody()) {
|
|
59017
|
-
this.stopStateMachine();
|
|
59018
|
-
this.stopScripts();
|
|
59019
|
-
this.reset();
|
|
59020
|
-
}
|
|
59151
|
+
for (var j = 0; j < 4; j++) {
|
|
59152
|
+
_bbox.expandByPoint(nearVerts[j]);
|
|
59021
59153
|
|
|
59022
|
-
|
|
59023
|
-
|
|
59024
|
-
});
|
|
59025
|
-
}
|
|
59026
|
-
}, {
|
|
59027
|
-
key: "addStateMachine",
|
|
59028
|
-
value: function addStateMachine(description) {
|
|
59029
|
-
var _this4 = this;
|
|
59154
|
+
_bbox.expandByPoint(farVerts[j]);
|
|
59155
|
+
}
|
|
59030
59156
|
|
|
59031
|
-
|
|
59032
|
-
_this4.dispatchEvent({
|
|
59033
|
-
type: ENTITY_EVENTS.STATE_MACHINE.CHANGE,
|
|
59034
|
-
state: state
|
|
59035
|
-
});
|
|
59036
|
-
});
|
|
59157
|
+
_bbox.getCenter(_center);
|
|
59037
59158
|
|
|
59038
|
-
|
|
59039
|
-
|
|
59040
|
-
|
|
59041
|
-
|
|
59042
|
-
|
|
59043
|
-
|
|
59044
|
-
|
|
59045
|
-
|
|
59046
|
-
this.
|
|
59047
|
-
|
|
59048
|
-
|
|
59049
|
-
}
|
|
59050
|
-
}
|
|
59051
|
-
}, {
|
|
59052
|
-
key: "stopStateMachine",
|
|
59053
|
-
value: function stopStateMachine() {
|
|
59054
|
-
if (this.hasStateMachine()) {
|
|
59055
|
-
this.stateMachine.stop();
|
|
59159
|
+
_center.z = _bbox.max.z + this.lightMargin;
|
|
59160
|
+
_center.x = Math.floor(_center.x / texelWidth) * texelWidth;
|
|
59161
|
+
_center.y = Math.floor(_center.y / texelHeight) * texelHeight;
|
|
59162
|
+
|
|
59163
|
+
_center.applyMatrix4(light.shadow.camera.matrixWorld);
|
|
59164
|
+
|
|
59165
|
+
light.position.copy(_center);
|
|
59166
|
+
light.target.position.copy(_center);
|
|
59167
|
+
light.target.position.x += this.lightDirection.x;
|
|
59168
|
+
light.target.position.y += this.lightDirection.y;
|
|
59169
|
+
light.target.position.z += this.lightDirection.z;
|
|
59056
59170
|
}
|
|
59057
59171
|
}
|
|
59058
59172
|
}, {
|
|
59059
|
-
key: "
|
|
59060
|
-
value: function
|
|
59061
|
-
|
|
59062
|
-
|
|
59063
|
-
} else {
|
|
59064
|
-
console.log(STATE_MACHINE_NOT_AVAILABLE);
|
|
59065
|
-
}
|
|
59173
|
+
key: "injectInclude",
|
|
59174
|
+
value: function injectInclude() {
|
|
59175
|
+
ShaderChunk.lights_fragment_begin = Shader$1.lights_fragment_begin;
|
|
59176
|
+
ShaderChunk.lights_pars_begin = Shader$1.lights_pars_begin;
|
|
59066
59177
|
}
|
|
59067
59178
|
}, {
|
|
59068
|
-
key: "
|
|
59069
|
-
value: function
|
|
59070
|
-
|
|
59071
|
-
|
|
59072
|
-
|
|
59179
|
+
key: "setupMaterial",
|
|
59180
|
+
value: function setupMaterial(material) {
|
|
59181
|
+
material.defines = material.defines || {};
|
|
59182
|
+
material.defines.USE_CSM = 1;
|
|
59183
|
+
material.defines.CSM_CASCADES = this.cascades;
|
|
59073
59184
|
|
|
59074
|
-
if (
|
|
59075
|
-
|
|
59076
|
-
} else {
|
|
59077
|
-
console.warn(SCRIPT_NOT_FOUND);
|
|
59185
|
+
if (this.fade) {
|
|
59186
|
+
material.defines.CSM_FADE = '';
|
|
59078
59187
|
}
|
|
59079
|
-
}
|
|
59080
|
-
}, {
|
|
59081
|
-
key: "addScripts",
|
|
59082
|
-
value: function addScripts() {
|
|
59083
|
-
var _this5 = this;
|
|
59084
59188
|
|
|
59085
|
-
var
|
|
59086
|
-
var
|
|
59087
|
-
var
|
|
59088
|
-
var parsedScripts = this.parseScripts(scripts, options, enabled);
|
|
59089
|
-
this.scripts = [].concat(_toConsumableArray(this.scripts), [parsedScripts]);
|
|
59189
|
+
var breaksVec2 = [];
|
|
59190
|
+
var scope = this;
|
|
59191
|
+
var shaders = this.shaders;
|
|
59090
59192
|
|
|
59091
|
-
|
|
59092
|
-
|
|
59093
|
-
|
|
59094
|
-
|
|
59095
|
-
|
|
59193
|
+
material.onBeforeCompile = function (shader) {
|
|
59194
|
+
var far = Math.min(scope.camera.far, scope.maxFar);
|
|
59195
|
+
scope.getExtendedBreaks(breaksVec2);
|
|
59196
|
+
shader.uniforms.CSM_cascades = {
|
|
59197
|
+
value: breaksVec2
|
|
59198
|
+
};
|
|
59199
|
+
shader.uniforms.cameraNear = {
|
|
59200
|
+
value: scope.camera.near
|
|
59201
|
+
};
|
|
59202
|
+
shader.uniforms.shadowFar = {
|
|
59203
|
+
value: far
|
|
59204
|
+
};
|
|
59205
|
+
shaders.set(material, shader);
|
|
59206
|
+
};
|
|
59207
|
+
|
|
59208
|
+
shaders.set(material, null);
|
|
59096
59209
|
}
|
|
59097
59210
|
}, {
|
|
59098
|
-
key: "
|
|
59099
|
-
value: function
|
|
59100
|
-
var
|
|
59101
|
-
var
|
|
59102
|
-
|
|
59103
|
-
|
|
59104
|
-
|
|
59105
|
-
|
|
59106
|
-
|
|
59107
|
-
|
|
59108
|
-
name: name,
|
|
59109
|
-
enabled: enabled,
|
|
59110
|
-
options: options
|
|
59111
|
-
});
|
|
59112
|
-
|
|
59113
|
-
if (enabled) {
|
|
59114
|
-
script.start(this, options);
|
|
59211
|
+
key: "updateUniforms",
|
|
59212
|
+
value: function updateUniforms() {
|
|
59213
|
+
var far = Math.min(this.camera.far, this.maxFar);
|
|
59214
|
+
var shaders = this.shaders;
|
|
59215
|
+
shaders.forEach(function (shader, material) {
|
|
59216
|
+
if (shader !== null) {
|
|
59217
|
+
var uniforms = shader.uniforms;
|
|
59218
|
+
this.getExtendedBreaks(uniforms.CSM_cascades.value);
|
|
59219
|
+
uniforms.cameraNear.value = this.camera.near;
|
|
59220
|
+
uniforms.shadowFar.value = far;
|
|
59115
59221
|
}
|
|
59116
|
-
} else {
|
|
59117
|
-
console.log(SCRIPT_NOT_FOUND);
|
|
59118
|
-
}
|
|
59119
59222
|
|
|
59120
|
-
|
|
59121
|
-
|
|
59122
|
-
|
|
59123
|
-
|
|
59124
|
-
|
|
59125
|
-
|
|
59126
|
-
|
|
59127
|
-
|
|
59128
|
-
key: "disableScripts",
|
|
59129
|
-
value: function disableScripts() {
|
|
59130
|
-
this.scriptsEnabled = false;
|
|
59223
|
+
if (!this.fade && 'CSM_FADE' in material.defines) {
|
|
59224
|
+
delete material.defines.CSM_FADE;
|
|
59225
|
+
material.needsUpdate = true;
|
|
59226
|
+
} else if (this.fade && !('CSM_FADE' in material.defines)) {
|
|
59227
|
+
material.defines.CSM_FADE = '';
|
|
59228
|
+
material.needsUpdate = true;
|
|
59229
|
+
}
|
|
59230
|
+
}, this);
|
|
59131
59231
|
}
|
|
59132
59232
|
}, {
|
|
59133
|
-
key: "
|
|
59134
|
-
value: function
|
|
59135
|
-
|
|
59136
|
-
|
|
59137
|
-
} else {
|
|
59138
|
-
console.log(ENTITY_TYPE_NOT_ALLOWED);
|
|
59139
|
-
this.entityType = ENTITY_TYPES.UNKNOWN;
|
|
59233
|
+
key: "getExtendedBreaks",
|
|
59234
|
+
value: function getExtendedBreaks(target) {
|
|
59235
|
+
while (target.length < this.breaks.length) {
|
|
59236
|
+
target.push(new Vector2());
|
|
59140
59237
|
}
|
|
59141
|
-
}
|
|
59142
|
-
}, {
|
|
59143
|
-
key: "getEntityType",
|
|
59144
|
-
value: function getEntityType() {
|
|
59145
|
-
return this.entityType;
|
|
59146
|
-
}
|
|
59147
|
-
}, {
|
|
59148
|
-
key: "addLight",
|
|
59149
|
-
// TODO: sounds should become entities
|
|
59150
|
-
// addSound(name, options) {
|
|
59151
|
-
// const { autoplay = false, ...opts } = options;
|
|
59152
|
-
// this.isPlayingSound = autoplay;
|
|
59153
|
-
// this.sound = new Sound(name, {
|
|
59154
|
-
// autoplay,
|
|
59155
|
-
// ...opts
|
|
59156
|
-
// });
|
|
59157
|
-
// this.sound.setTarget(this);
|
|
59158
|
-
// return this.sound;
|
|
59159
|
-
// }
|
|
59160
|
-
// addDirectionalSound(name, options) {
|
|
59161
|
-
// const { autoplay = false, ...opts } = options;
|
|
59162
|
-
// this.isPlayingSound = autoplay;
|
|
59163
|
-
// this.sound = new DirectionalSound(name, {
|
|
59164
|
-
// autoplay,
|
|
59165
|
-
// ...opts
|
|
59166
|
-
// });
|
|
59167
|
-
// this.sound.setTarget(this);
|
|
59168
|
-
// return this.sound;
|
|
59169
|
-
// }
|
|
59170
|
-
// addAmbientSound(name, options) {
|
|
59171
|
-
// const { autoplay = false, ...opts } = options;
|
|
59172
|
-
// this.isPlayingSound = autoplay;
|
|
59173
|
-
// this.sound = new AmbientSound(name, {
|
|
59174
|
-
// body: this.body,
|
|
59175
|
-
// autoplay,
|
|
59176
|
-
// ...opts
|
|
59177
|
-
// });
|
|
59178
|
-
// return this.sound;
|
|
59179
|
-
// }
|
|
59180
|
-
value: function addLight(light) {
|
|
59181
|
-
var _this$getPosition = this.getPosition(),
|
|
59182
|
-
x = _this$getPosition.x,
|
|
59183
|
-
y = _this$getPosition.y,
|
|
59184
|
-
z = _this$getPosition.z;
|
|
59185
59238
|
|
|
59186
|
-
|
|
59187
|
-
|
|
59188
|
-
|
|
59189
|
-
|
|
59190
|
-
|
|
59191
|
-
|
|
59239
|
+
target.length = this.breaks.length;
|
|
59240
|
+
|
|
59241
|
+
for (var i = 0; i < this.cascades; i++) {
|
|
59242
|
+
var amount = this.breaks[i];
|
|
59243
|
+
var prev = this.breaks[i - 1] || 0;
|
|
59244
|
+
target[i].x = prev;
|
|
59245
|
+
target[i].y = amount;
|
|
59246
|
+
}
|
|
59192
59247
|
}
|
|
59193
59248
|
}, {
|
|
59194
|
-
key: "
|
|
59195
|
-
value: function
|
|
59196
|
-
|
|
59197
|
-
|
|
59198
|
-
|
|
59199
|
-
|
|
59249
|
+
key: "updateFrustums",
|
|
59250
|
+
value: function updateFrustums() {
|
|
59251
|
+
this.getBreaks();
|
|
59252
|
+
this.initCascades();
|
|
59253
|
+
this.updateShadowBounds();
|
|
59254
|
+
this.updateUniforms();
|
|
59200
59255
|
}
|
|
59201
59256
|
}, {
|
|
59202
|
-
key: "
|
|
59203
|
-
value: function
|
|
59204
|
-
|
|
59205
|
-
this.
|
|
59206
|
-
this.isPlayingSound = false;
|
|
59257
|
+
key: "remove",
|
|
59258
|
+
value: function remove() {
|
|
59259
|
+
for (var i = 0; i < this.lights.length; i++) {
|
|
59260
|
+
this.parent.remove(this.lights[i]);
|
|
59207
59261
|
}
|
|
59208
59262
|
}
|
|
59209
59263
|
}, {
|
|
59210
|
-
key: "
|
|
59211
|
-
value: function
|
|
59212
|
-
|
|
59213
|
-
|
|
59214
|
-
|
|
59215
|
-
|
|
59216
|
-
|
|
59264
|
+
key: "dispose",
|
|
59265
|
+
value: function dispose() {
|
|
59266
|
+
var shaders = this.shaders;
|
|
59267
|
+
shaders.forEach(function (shader, material) {
|
|
59268
|
+
delete material.onBeforeCompile;
|
|
59269
|
+
delete material.defines.USE_CSM;
|
|
59270
|
+
delete material.defines.CSM_CASCADES;
|
|
59271
|
+
delete material.defines.CSM_FADE;
|
|
59272
|
+
|
|
59273
|
+
if (shader !== null) {
|
|
59274
|
+
delete shader.uniforms.CSM_cascades;
|
|
59275
|
+
delete shader.uniforms.cameraNear;
|
|
59276
|
+
delete shader.uniforms.shadowFar;
|
|
59277
|
+
}
|
|
59278
|
+
|
|
59279
|
+
material.needsUpdate = true;
|
|
59280
|
+
});
|
|
59281
|
+
shaders.clear();
|
|
59217
59282
|
}
|
|
59218
|
-
}
|
|
59219
|
-
key: "setScale",
|
|
59220
|
-
value: function setScale(howbig) {
|
|
59221
|
-
if (this.hasBody()) {
|
|
59222
|
-
var scale = _objectSpread2$1(_objectSpread2$1({}, this.getScale()), howbig);
|
|
59283
|
+
}]);
|
|
59223
59284
|
|
|
59224
|
-
|
|
59225
|
-
|
|
59285
|
+
return CascadeShadowMaps;
|
|
59286
|
+
}();var POINTLIGHT = 'pointlight';
|
|
59287
|
+
var AMBIENTLIGHT = 'ambientlight';
|
|
59288
|
+
var SUNLIGHT = 'sunlight';
|
|
59289
|
+
var SPOTLIGHT = 'spotlight';
|
|
59290
|
+
var HEMISPHERELIGHT = 'hemisphere';
|
|
59291
|
+
var TIME_TO_UPDATE = 5;
|
|
59292
|
+
var Lights = /*#__PURE__*/function () {
|
|
59293
|
+
function Lights() {
|
|
59294
|
+
_classCallCheck(this, Lights);
|
|
59295
|
+
|
|
59296
|
+
this.delayFactor = 0.1;
|
|
59297
|
+
this.delayStep = 30;
|
|
59298
|
+
this.holderRadius = 0.01;
|
|
59299
|
+
this.holderSegments = 1;
|
|
59300
|
+
this.numLights = 0;
|
|
59301
|
+
this.map = {};
|
|
59302
|
+
this.lights = [];
|
|
59303
|
+
this.csm = undefined;
|
|
59304
|
+
}
|
|
59305
|
+
|
|
59306
|
+
_createClass(Lights, [{
|
|
59307
|
+
key: "isUsingCSM",
|
|
59308
|
+
value: function isUsingCSM() {
|
|
59309
|
+
return !!this.csm;
|
|
59226
59310
|
}
|
|
59227
59311
|
}, {
|
|
59228
|
-
key: "
|
|
59229
|
-
value: function
|
|
59230
|
-
|
|
59231
|
-
|
|
59232
|
-
}
|
|
59312
|
+
key: "setUpCSM",
|
|
59313
|
+
value: function setUpCSM() {
|
|
59314
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
59315
|
+
this.csm = new CascadeShadowMaps(options);
|
|
59233
59316
|
}
|
|
59234
59317
|
}, {
|
|
59235
|
-
key: "
|
|
59236
|
-
value: function
|
|
59237
|
-
|
|
59318
|
+
key: "add",
|
|
59319
|
+
value: function add(light) {
|
|
59320
|
+
this.lights.push(light);
|
|
59238
59321
|
}
|
|
59239
59322
|
}, {
|
|
59240
|
-
key: "
|
|
59241
|
-
value: function
|
|
59242
|
-
if (this.
|
|
59243
|
-
|
|
59244
|
-
x = _this$getPosition2.x,
|
|
59245
|
-
y = _this$getPosition2.y,
|
|
59246
|
-
z = _this$getPosition2.z;
|
|
59247
|
-
|
|
59248
|
-
var position = _objectSpread2$1({
|
|
59249
|
-
x: x,
|
|
59250
|
-
y: y,
|
|
59251
|
-
z: z
|
|
59252
|
-
}, where);
|
|
59253
|
-
|
|
59254
|
-
this.body.position.set(position.x, position.y, position.z);
|
|
59323
|
+
key: "update",
|
|
59324
|
+
value: function update(dt) {
|
|
59325
|
+
if (this.isUsingCSM()) {
|
|
59326
|
+
this.csm.update();
|
|
59255
59327
|
}
|
|
59256
|
-
}
|
|
59257
|
-
}, {
|
|
59258
|
-
key: "getRotation",
|
|
59259
|
-
value: function getRotation() {
|
|
59260
|
-
return this.getBody().rotation.clone();
|
|
59261
|
-
}
|
|
59262
|
-
}, {
|
|
59263
|
-
key: "setRotation",
|
|
59264
|
-
value: function setRotation(how) {
|
|
59265
|
-
if (this.hasBody()) {
|
|
59266
|
-
var _this$getRotation = this.getRotation(),
|
|
59267
|
-
x = _this$getRotation.x,
|
|
59268
|
-
y = _this$getRotation.y,
|
|
59269
|
-
z = _this$getRotation.z;
|
|
59270
59328
|
|
|
59271
|
-
|
|
59272
|
-
x: x,
|
|
59273
|
-
y: y,
|
|
59274
|
-
z: z
|
|
59275
|
-
}, how);
|
|
59329
|
+
var start = new Date();
|
|
59276
59330
|
|
|
59277
|
-
|
|
59331
|
+
for (var index in this.lights) {
|
|
59332
|
+
var light = this.lights[index];
|
|
59333
|
+
light.update(dt);
|
|
59334
|
+
if (+new Date() - start > TIME_TO_UPDATE) break;
|
|
59278
59335
|
}
|
|
59279
59336
|
}
|
|
59280
59337
|
}, {
|
|
59281
|
-
key: "
|
|
59282
|
-
value: function
|
|
59283
|
-
var position = this.getBody().getWorldPosition(new Vector3$1());
|
|
59284
|
-
var quaternion = this.getBody().getWorldQuaternion(new Quaternion(0, 0, 0, 1));
|
|
59285
|
-
var rotation = new Euler(0, 0, 0, 'XYZ').setFromQuaternion(quaternion, 'XYZ');
|
|
59338
|
+
key: "toJSON",
|
|
59339
|
+
value: function toJSON() {
|
|
59286
59340
|
return {
|
|
59287
|
-
|
|
59288
|
-
|
|
59289
|
-
|
|
59341
|
+
lights: this.lights.map(function (l) {
|
|
59342
|
+
return l.toJSON();
|
|
59343
|
+
})
|
|
59290
59344
|
};
|
|
59291
59345
|
}
|
|
59292
|
-
}
|
|
59293
|
-
key: "translate",
|
|
59294
|
-
value: function translate(_ref7) {
|
|
59295
|
-
var _ref7$x = _ref7.x,
|
|
59296
|
-
x = _ref7$x === void 0 ? 0 : _ref7$x,
|
|
59297
|
-
_ref7$y = _ref7.y,
|
|
59298
|
-
y = _ref7$y === void 0 ? 0 : _ref7$y,
|
|
59299
|
-
_ref7$z = _ref7.z,
|
|
59300
|
-
z = _ref7$z === void 0 ? 0 : _ref7$z;
|
|
59346
|
+
}]);
|
|
59301
59347
|
|
|
59302
|
-
|
|
59303
|
-
|
|
59304
|
-
|
|
59305
|
-
|
|
59306
|
-
|
|
59348
|
+
return Lights;
|
|
59349
|
+
}();
|
|
59350
|
+
var Lights$1 = new Lights();var ToonShader = {
|
|
59351
|
+
uniforms: {
|
|
59352
|
+
"uDirLightPos": {
|
|
59353
|
+
type: "v3",
|
|
59354
|
+
value: new Vector3$1()
|
|
59355
|
+
},
|
|
59356
|
+
"uDirLightColor": {
|
|
59357
|
+
type: "c",
|
|
59358
|
+
value: new Color$1(0xffffff)
|
|
59359
|
+
},
|
|
59360
|
+
"uMaterialColor": {
|
|
59361
|
+
type: "c",
|
|
59362
|
+
value: new Color$1(0xffffff)
|
|
59363
|
+
},
|
|
59364
|
+
uKd: {
|
|
59365
|
+
type: "f",
|
|
59366
|
+
value: 1
|
|
59367
|
+
},
|
|
59368
|
+
uBorder: {
|
|
59369
|
+
type: "f",
|
|
59370
|
+
value: 0.4
|
|
59307
59371
|
}
|
|
59308
|
-
},
|
|
59309
|
-
|
|
59310
|
-
|
|
59311
|
-
|
|
59372
|
+
},
|
|
59373
|
+
vertexShader: ["varying vec3 vNormal;", "varying vec3 vViewPosition;", "void main() {", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "vNormal = normalize( normalMatrix * normal );", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", "vViewPosition = -mvPosition.xyz;", "}"].join("\n"),
|
|
59374
|
+
fragmentShader: ["uniform vec3 uMaterialColor;", "uniform vec3 uDirLightPos;", "uniform vec3 uDirLightColor;", "uniform float uKd;", "uniform float uBorder;", "varying vec3 vNormal;", "varying vec3 vViewPosition;", "void main() {", // compute direction to light
|
|
59375
|
+
"vec4 lDirection = viewMatrix * vec4( uDirLightPos, 0.0 );", "vec3 lVector = normalize( lDirection.xyz );", // diffuse: N * L. Normal must be normalized, since it's interpolated.
|
|
59376
|
+
"vec3 normal = normalize( vNormal );", //was: "float diffuse = max( dot( normal, lVector ), 0.0);",
|
|
59377
|
+
// solution
|
|
59378
|
+
"float diffuse = dot( normal, lVector );", "if ( diffuse > 0.6 ) { diffuse = 1.0; }", "else if ( diffuse > -0.2 ) { diffuse = 0.7; }", "else { diffuse = 0.3; }", "gl_FragColor = vec4( uKd * uMaterialColor * uDirLightColor * diffuse, 1.0 );", "}"].join("\n")
|
|
59379
|
+
};
|
|
59312
59380
|
|
|
59313
|
-
|
|
59314
|
-
|
|
59381
|
+
var ToonMaterial = /*#__PURE__*/function (_ShaderMaterial) {
|
|
59382
|
+
_inherits(ToonMaterial, _ShaderMaterial);
|
|
59315
59383
|
|
|
59316
|
-
|
|
59317
|
-
x = _this$getRotation2.x,
|
|
59318
|
-
y = _this$getRotation2.y,
|
|
59319
|
-
z = _this$getRotation2.z;
|
|
59384
|
+
var _super = _createSuper(ToonMaterial);
|
|
59320
59385
|
|
|
59321
|
-
|
|
59322
|
-
|
|
59323
|
-
x: x,
|
|
59324
|
-
y: y,
|
|
59325
|
-
z: z
|
|
59326
|
-
}, rotation).time(time).on('update', function (value) {
|
|
59327
|
-
return _this6.setRotation(value);
|
|
59328
|
-
}).on('complete', resolve);
|
|
59329
|
-
});
|
|
59330
|
-
}
|
|
59331
|
-
}, {
|
|
59332
|
-
key: "goTo",
|
|
59333
|
-
value: function goTo() {
|
|
59334
|
-
var _this7 = this;
|
|
59386
|
+
function ToonMaterial(_ref) {
|
|
59387
|
+
var _this;
|
|
59335
59388
|
|
|
59336
|
-
|
|
59337
|
-
|
|
59389
|
+
var _ref$light = _ref.light,
|
|
59390
|
+
light = _ref$light === void 0 ? {} : _ref$light,
|
|
59391
|
+
color = _ref.color;
|
|
59338
59392
|
|
|
59339
|
-
|
|
59340
|
-
x = _this$getPosition3.x,
|
|
59341
|
-
y = _this$getPosition3.y,
|
|
59342
|
-
z = _this$getPosition3.z;
|
|
59393
|
+
_classCallCheck(this, ToonMaterial);
|
|
59343
59394
|
|
|
59344
|
-
|
|
59345
|
-
|
|
59346
|
-
|
|
59347
|
-
|
|
59348
|
-
|
|
59349
|
-
|
|
59350
|
-
|
|
59351
|
-
|
|
59395
|
+
var uniforms = UniformsUtils.clone(ToonShader.uniforms);
|
|
59396
|
+
var vertexShader = ToonShader.vertexShader,
|
|
59397
|
+
fragmentShader = ToonShader.fragmentShader;
|
|
59398
|
+
_this = _super.call(this, {
|
|
59399
|
+
uniforms: uniforms,
|
|
59400
|
+
vertexShader: vertexShader,
|
|
59401
|
+
fragmentShader: fragmentShader,
|
|
59402
|
+
flatShading: true
|
|
59403
|
+
});
|
|
59404
|
+
var position = light.position,
|
|
59405
|
+
lightColor = light.color;
|
|
59406
|
+
|
|
59407
|
+
if (color) {
|
|
59408
|
+
var materialColor = new Color$1(color);
|
|
59409
|
+
|
|
59410
|
+
_this.uniforms.uMaterialColor.value.copy(materialColor);
|
|
59411
|
+
}
|
|
59412
|
+
|
|
59413
|
+
_this.uniforms.uDirLightPos.value = position;
|
|
59414
|
+
|
|
59415
|
+
_this.uniforms.uDirLightColor.value.copy(new Color$1(lightColor));
|
|
59416
|
+
|
|
59417
|
+
_this.side = DoubleSide;
|
|
59418
|
+
return _this;
|
|
59419
|
+
}
|
|
59420
|
+
|
|
59421
|
+
return ToonMaterial;
|
|
59422
|
+
}(ShaderMaterial);var setUpLightsAndShadows = function setUpLightsAndShadows(mesh) {
|
|
59423
|
+
var _Config$lights = Config$1.lights(),
|
|
59424
|
+
textureAnisotropy = _Config$lights.textureAnisotropy,
|
|
59425
|
+
shadows = _Config$lights.shadows;
|
|
59426
|
+
|
|
59427
|
+
mesh.castShadow = Boolean(shadows);
|
|
59428
|
+
mesh.receiveShadow = Boolean(shadows);
|
|
59429
|
+
|
|
59430
|
+
if (hasMaterial(mesh)) {
|
|
59431
|
+
var setUpMaterial = function setUpMaterial(material) {
|
|
59432
|
+
if (Lights$1.isUsingCSM()) {
|
|
59433
|
+
Lights$1.csm.setupMaterial(material);
|
|
59434
|
+
}
|
|
59435
|
+
|
|
59436
|
+
if (material.map) {
|
|
59437
|
+
material.map.anisotropy = textureAnisotropy;
|
|
59438
|
+
}
|
|
59439
|
+
|
|
59440
|
+
return material;
|
|
59441
|
+
};
|
|
59442
|
+
|
|
59443
|
+
mesh.material = processMaterial(mesh.material, setUpMaterial);
|
|
59444
|
+
}
|
|
59445
|
+
};
|
|
59446
|
+
var isScene = function isScene(mesh) {
|
|
59447
|
+
return mesh.isScene;
|
|
59448
|
+
};
|
|
59449
|
+
|
|
59450
|
+
var hasMaterial = function hasMaterial(mesh) {
|
|
59451
|
+
return Boolean(mesh.material);
|
|
59452
|
+
};
|
|
59453
|
+
var hasGeometry = function hasGeometry(mesh) {
|
|
59454
|
+
return Boolean(mesh.geometry);
|
|
59455
|
+
};
|
|
59456
|
+
var processMaterial = function processMaterial(material, callback) {
|
|
59457
|
+
return Array.isArray(material) ? material.map(callback) : callback(material);
|
|
59458
|
+
};
|
|
59459
|
+
var changeMaterialByName = function changeMaterialByName(name, mesh, materialOptions) {
|
|
59460
|
+
if (!hasMaterial(mesh)) return;
|
|
59461
|
+
|
|
59462
|
+
switch (name) {
|
|
59463
|
+
case MATERIALS.LAMBERT:
|
|
59464
|
+
return cloneMaterial(MeshLambertMaterial, mesh, materialOptions);
|
|
59465
|
+
|
|
59466
|
+
case MATERIALS.PHONG:
|
|
59467
|
+
return cloneMaterial(MeshPhongMaterial, mesh, materialOptions);
|
|
59468
|
+
|
|
59469
|
+
case MATERIALS.DEPTH:
|
|
59470
|
+
return cloneMaterial(MeshDepthMaterial, mesh, materialOptions);
|
|
59471
|
+
|
|
59472
|
+
case MATERIALS.STANDARD:
|
|
59473
|
+
return cloneMaterial(MeshStandardMaterial, mesh, materialOptions);
|
|
59474
|
+
|
|
59475
|
+
case MATERIALS.TOON:
|
|
59476
|
+
return cloneMaterial(ToonMaterial, mesh, materialOptions);
|
|
59477
|
+
|
|
59478
|
+
case MATERIALS.THREE_TOON:
|
|
59479
|
+
return cloneMaterial(MeshToonMaterial, mesh, materialOptions);
|
|
59480
|
+
|
|
59481
|
+
case MATERIALS.BASIC:
|
|
59482
|
+
default:
|
|
59483
|
+
return cloneMaterial(MeshBasicMaterial, mesh, materialOptions);
|
|
59484
|
+
}
|
|
59485
|
+
};
|
|
59486
|
+
|
|
59487
|
+
var cloneMaterial = function cloneMaterial(MeshMaterial, mesh) {
|
|
59488
|
+
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
|
59489
|
+
|
|
59490
|
+
var _cloneMaterial = function _cloneMaterial(material) {
|
|
59491
|
+
var clone = material.clone();
|
|
59492
|
+
var newMaterial = new MeshMaterial(_objectSpread2$1({
|
|
59493
|
+
map: clone.map,
|
|
59494
|
+
color: clone.color
|
|
59495
|
+
}, options));
|
|
59496
|
+
newMaterial.skinning = true;
|
|
59497
|
+
return newMaterial;
|
|
59498
|
+
};
|
|
59499
|
+
|
|
59500
|
+
mesh.material = processMaterial(mesh.material, _cloneMaterial);
|
|
59501
|
+
setUpLightsAndShadows(mesh);
|
|
59502
|
+
};
|
|
59503
|
+
|
|
59504
|
+
var disposeTextures = function disposeTextures(mesh) {
|
|
59505
|
+
if (hasMaterial(mesh)) {
|
|
59506
|
+
var _disposeTexture = function _disposeTexture(material) {
|
|
59507
|
+
Object.values(TEXTURES).forEach(function (key) {
|
|
59508
|
+
if (material[key]) {
|
|
59509
|
+
material[key].dispose();
|
|
59510
|
+
}
|
|
59511
|
+
});
|
|
59512
|
+
};
|
|
59513
|
+
|
|
59514
|
+
processMaterial(mesh.material, _disposeTexture);
|
|
59515
|
+
}
|
|
59516
|
+
};
|
|
59517
|
+
var disposeMaterial = function disposeMaterial(mesh) {
|
|
59518
|
+
if (hasMaterial(mesh)) {
|
|
59519
|
+
mesh.material.dispose && mesh.material.dispose();
|
|
59520
|
+
}
|
|
59521
|
+
};
|
|
59522
|
+
var disposeGeometry = function disposeGeometry(mesh) {
|
|
59523
|
+
if (hasGeometry(mesh)) {
|
|
59524
|
+
mesh.geometry.dispose && mesh.geometry.dispose();
|
|
59525
|
+
}
|
|
59526
|
+
};
|
|
59527
|
+
var prepareModel = function prepareModel(model) {
|
|
59528
|
+
setUpLightsAndShadows(model);
|
|
59529
|
+
model.traverse(function (mesh) {
|
|
59530
|
+
setUpLightsAndShadows(mesh);
|
|
59531
|
+
});
|
|
59532
|
+
return model;
|
|
59533
|
+
};var Entity = /*#__PURE__*/function (_EventDispatcher) {
|
|
59534
|
+
_inherits(Entity, _EventDispatcher);
|
|
59535
|
+
|
|
59536
|
+
var _super = _createSuper(Entity);
|
|
59537
|
+
|
|
59538
|
+
function Entity() {
|
|
59539
|
+
var _this;
|
|
59540
|
+
|
|
59541
|
+
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
59542
|
+
_ref$serializable = _ref.serializable,
|
|
59543
|
+
serializable = _ref$serializable === void 0 ? true : _ref$serializable,
|
|
59544
|
+
_ref$tag = _ref.tag,
|
|
59545
|
+
tag = _ref$tag === void 0 ? '' : _ref$tag,
|
|
59546
|
+
_ref$tags = _ref.tags,
|
|
59547
|
+
tags = _ref$tags === void 0 ? [] : _ref$tags;
|
|
59548
|
+
|
|
59549
|
+
_classCallCheck(this, Entity);
|
|
59550
|
+
|
|
59551
|
+
_this = _super.call(this);
|
|
59552
|
+
|
|
59553
|
+
_defineProperty$1(_assertThisInitialized(_this), "getBodyByName", function (name) {
|
|
59554
|
+
if (name && _this.hasBody()) {
|
|
59555
|
+
return _this.getBody().getObjectByName(name);
|
|
59556
|
+
}
|
|
59557
|
+
|
|
59558
|
+
console.warn(ELEMENT_NAME_NOT_PROVIDED);
|
|
59559
|
+
});
|
|
59560
|
+
|
|
59561
|
+
_defineProperty$1(_assertThisInitialized(_this), "addTag", function (tagName) {
|
|
59562
|
+
if (!tagName) return;
|
|
59563
|
+
|
|
59564
|
+
if (!_this.hasTag(tagName)) {
|
|
59565
|
+
_this.tags.push(tagName);
|
|
59566
|
+
|
|
59567
|
+
return true;
|
|
59568
|
+
} else {
|
|
59569
|
+
console.log(TAG_ALREADY_EXISTS, tagName);
|
|
59570
|
+
return false;
|
|
59571
|
+
}
|
|
59572
|
+
});
|
|
59573
|
+
|
|
59574
|
+
_defineProperty$1(_assertThisInitialized(_this), "hasStateMachine", function () {
|
|
59575
|
+
return !!_this.stateMachine;
|
|
59576
|
+
});
|
|
59577
|
+
|
|
59578
|
+
_defineProperty$1(_assertThisInitialized(_this), "hasScripts", function () {
|
|
59579
|
+
return _this.scripts.length > 0;
|
|
59580
|
+
});
|
|
59581
|
+
|
|
59582
|
+
_defineProperty$1(_assertThisInitialized(_this), "parseScripts", function (list, options, enabled) {
|
|
59583
|
+
return list.map(function (script, i) {
|
|
59584
|
+
return {
|
|
59585
|
+
script: script,
|
|
59586
|
+
name: script.getName(),
|
|
59587
|
+
enabled: enabled,
|
|
59588
|
+
options: options[i]
|
|
59589
|
+
};
|
|
59352
59590
|
});
|
|
59591
|
+
});
|
|
59592
|
+
|
|
59593
|
+
_defineProperty$1(_assertThisInitialized(_this), "isMesh", function () {
|
|
59594
|
+
return _this.getEntityType() === ENTITY_TYPES.MESH;
|
|
59595
|
+
});
|
|
59596
|
+
|
|
59597
|
+
_defineProperty$1(_assertThisInitialized(_this), "isModel", function () {
|
|
59598
|
+
return _this.getEntityType() === ENTITY_TYPES.MODEL;
|
|
59599
|
+
});
|
|
59600
|
+
|
|
59601
|
+
_defineProperty$1(_assertThisInitialized(_this), "isSprite", function () {
|
|
59602
|
+
return _this.getEntityType() === ENTITY_TYPES.SPRITE;
|
|
59603
|
+
});
|
|
59604
|
+
|
|
59605
|
+
_defineProperty$1(_assertThisInitialized(_this), "isLight", function () {
|
|
59606
|
+
return Object.values(ENTITY_TYPES.LIGHT).includes(_this.getEntityType());
|
|
59607
|
+
});
|
|
59608
|
+
|
|
59609
|
+
_defineProperty$1(_assertThisInitialized(_this), "isHelper", function () {
|
|
59610
|
+
return Object.values(ENTITY_TYPES.HELPER).includes(_this.getEntityType());
|
|
59611
|
+
});
|
|
59612
|
+
|
|
59613
|
+
_defineProperty$1(_assertThisInitialized(_this), "isEffect", function () {
|
|
59614
|
+
return Object.values(ENTITY_TYPES.EFFECT).includes(_this.getEntityType());
|
|
59615
|
+
});
|
|
59616
|
+
|
|
59617
|
+
_defineProperty$1(_assertThisInitialized(_this), "setQuaternion", function (_ref2) {
|
|
59618
|
+
var x = _ref2.x,
|
|
59619
|
+
y = _ref2.y,
|
|
59620
|
+
z = _ref2.z,
|
|
59621
|
+
w = _ref2.w;
|
|
59622
|
+
|
|
59623
|
+
_this.body.quaternion.set(x, y, z, w);
|
|
59624
|
+
});
|
|
59625
|
+
|
|
59626
|
+
_defineProperty$1(_assertThisInitialized(_this), "setUuid", function (uuid) {
|
|
59627
|
+
if (uuid) {
|
|
59628
|
+
_this.body.uuid = uuid;
|
|
59629
|
+
}
|
|
59630
|
+
});
|
|
59631
|
+
|
|
59632
|
+
_this.scripts = [];
|
|
59633
|
+
_this.tags = [];
|
|
59634
|
+
_this.children = [];
|
|
59635
|
+
_this.isMage = true;
|
|
59636
|
+
_this.parent = false;
|
|
59637
|
+
_this.disposed = false;
|
|
59638
|
+
|
|
59639
|
+
_this.addTags([DEFAULT_TAG, tag].concat(_toConsumableArray(tags)));
|
|
59640
|
+
|
|
59641
|
+
_this.serializable = serializable;
|
|
59642
|
+
return _this;
|
|
59643
|
+
}
|
|
59644
|
+
|
|
59645
|
+
_createClass(Entity, [{
|
|
59646
|
+
key: "isSerializable",
|
|
59647
|
+
value: function isSerializable() {
|
|
59648
|
+
return !!this.serializable;
|
|
59353
59649
|
}
|
|
59354
59650
|
}, {
|
|
59355
|
-
key: "
|
|
59356
|
-
value: function
|
|
59357
|
-
return this.
|
|
59651
|
+
key: "isDisposed",
|
|
59652
|
+
value: function isDisposed() {
|
|
59653
|
+
return this.disposed;
|
|
59358
59654
|
}
|
|
59359
59655
|
}, {
|
|
59360
|
-
key: "
|
|
59361
|
-
value: function
|
|
59362
|
-
|
|
59656
|
+
key: "reset",
|
|
59657
|
+
value: function reset() {
|
|
59658
|
+
this.scripts = [];
|
|
59659
|
+
this.children = [];
|
|
59660
|
+
this.isMage = true;
|
|
59661
|
+
this.parent = false;
|
|
59662
|
+
this.tags = [DEFAULT_TAG];
|
|
59363
59663
|
}
|
|
59364
59664
|
}, {
|
|
59365
|
-
key: "
|
|
59366
|
-
value: function
|
|
59367
|
-
return this.body
|
|
59665
|
+
key: "hasBody",
|
|
59666
|
+
value: function hasBody() {
|
|
59667
|
+
return !!this.body;
|
|
59368
59668
|
}
|
|
59369
59669
|
}, {
|
|
59370
|
-
key: "
|
|
59371
|
-
value: function
|
|
59372
|
-
|
|
59373
|
-
this.getBody().visible = flag;
|
|
59670
|
+
key: "getBody",
|
|
59671
|
+
value: function getBody() {
|
|
59672
|
+
return this.body;
|
|
59374
59673
|
}
|
|
59375
59674
|
}, {
|
|
59376
|
-
key: "
|
|
59377
|
-
value: function
|
|
59378
|
-
|
|
59379
|
-
return entity.uuid ? this.uuid() === entity.uuid() : false;
|
|
59380
|
-
} catch (e) {
|
|
59381
|
-
return false;
|
|
59382
|
-
}
|
|
59675
|
+
key: "setBody",
|
|
59676
|
+
value: function setBody(body) {
|
|
59677
|
+
this.body = body;
|
|
59383
59678
|
}
|
|
59384
59679
|
}, {
|
|
59385
|
-
key: "
|
|
59386
|
-
value: function
|
|
59387
|
-
this.
|
|
59680
|
+
key: "hasParent",
|
|
59681
|
+
value: function hasParent() {
|
|
59682
|
+
return !!this.parent;
|
|
59388
59683
|
}
|
|
59389
59684
|
}, {
|
|
59390
|
-
key: "
|
|
59391
|
-
value: function
|
|
59392
|
-
return this.
|
|
59685
|
+
key: "getParent",
|
|
59686
|
+
value: function getParent() {
|
|
59687
|
+
return this.parent;
|
|
59393
59688
|
}
|
|
59394
59689
|
}, {
|
|
59395
|
-
key: "
|
|
59396
|
-
value: function
|
|
59397
|
-
|
|
59398
|
-
|
|
59399
|
-
|
|
59690
|
+
key: "setParent",
|
|
59691
|
+
value: function setParent(parent) {
|
|
59692
|
+
this.parent = parent;
|
|
59693
|
+
}
|
|
59694
|
+
}, {
|
|
59695
|
+
key: "add",
|
|
59696
|
+
value: function add(child) {
|
|
59697
|
+
var _this2 = this;
|
|
59698
|
+
|
|
59699
|
+
var container = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.getBody();
|
|
59700
|
+
|
|
59701
|
+
if (this.hasBody()) {
|
|
59702
|
+
var _add = function _add(toAdd) {
|
|
59703
|
+
if (toAdd instanceof Entity) {
|
|
59704
|
+
_this2.children.push(toAdd);
|
|
59705
|
+
|
|
59706
|
+
toAdd.setParent(_this2);
|
|
59707
|
+
container.add(toAdd.getBody());
|
|
59708
|
+
} else {
|
|
59709
|
+
console.log(ENTITY_CANT_ADD_NOT_ENTITY);
|
|
59710
|
+
}
|
|
59711
|
+
};
|
|
59712
|
+
|
|
59713
|
+
if (Array.isArray(child)) {
|
|
59714
|
+
child.forEach(_add);
|
|
59400
59715
|
} else {
|
|
59401
|
-
|
|
59716
|
+
_add(child);
|
|
59402
59717
|
}
|
|
59403
59718
|
} else {
|
|
59404
|
-
console.log(
|
|
59719
|
+
console.log(ENTITY_NOT_SET);
|
|
59405
59720
|
}
|
|
59406
59721
|
}
|
|
59407
59722
|
}, {
|
|
59408
|
-
key: "
|
|
59409
|
-
value: function
|
|
59410
|
-
|
|
59411
|
-
|
|
59412
|
-
|
|
59723
|
+
key: "isParentOf",
|
|
59724
|
+
value: function isParentOf(child) {
|
|
59725
|
+
var comparator = function comparator(child) {
|
|
59726
|
+
return !!child.getBody().getObjectById(child.id);
|
|
59727
|
+
};
|
|
59728
|
+
|
|
59729
|
+
if (child.isMage) {
|
|
59730
|
+
comparator = function comparator(child) {
|
|
59731
|
+
return child.getBody().getObjectById(child.id());
|
|
59732
|
+
};
|
|
59733
|
+
}
|
|
59734
|
+
|
|
59735
|
+
return this.children.filter(comparator).length > 0;
|
|
59736
|
+
}
|
|
59737
|
+
}, {
|
|
59738
|
+
key: "has",
|
|
59739
|
+
value: function has(child) {
|
|
59740
|
+
if (child.isMage) {
|
|
59741
|
+
return this.equals(child) || this.isParentOf(child);
|
|
59742
|
+
} else {
|
|
59743
|
+
return !!this.getBody().getObjectById(child.id);
|
|
59744
|
+
}
|
|
59745
|
+
}
|
|
59746
|
+
}, {
|
|
59747
|
+
key: "remove",
|
|
59748
|
+
value: function remove(element) {
|
|
59749
|
+
if (this.hasBody() && this.has(element)) {
|
|
59750
|
+
if (element.isMage) {
|
|
59751
|
+
this.body.remove(element.getBody());
|
|
59752
|
+
var index = this.children.findIndex(function (m) {
|
|
59753
|
+
return m.equals(element);
|
|
59754
|
+
});
|
|
59755
|
+
if (index) this.children.splice(index, 1);
|
|
59413
59756
|
} else {
|
|
59414
|
-
|
|
59757
|
+
this.body.remove(element.getBody());
|
|
59415
59758
|
}
|
|
59416
|
-
} else {
|
|
59417
|
-
console.log(USER_DATA_IS_MISSING);
|
|
59418
59759
|
}
|
|
59419
59760
|
}
|
|
59420
59761
|
}, {
|
|
59421
|
-
key: "
|
|
59422
|
-
value: function
|
|
59423
|
-
|
|
59424
|
-
|
|
59425
|
-
|
|
59426
|
-
|
|
59427
|
-
|
|
59428
|
-
|
|
59429
|
-
|
|
59430
|
-
}, {
|
|
59431
|
-
names: [],
|
|
59432
|
-
options: []
|
|
59433
|
-
});
|
|
59762
|
+
key: "addTo",
|
|
59763
|
+
value: function addTo(target, childName) {
|
|
59764
|
+
if (target && target.isMage) {
|
|
59765
|
+
if (childName) {
|
|
59766
|
+
target.add(this, target.getBodyByName(childName));
|
|
59767
|
+
} else {
|
|
59768
|
+
target.add(this);
|
|
59769
|
+
}
|
|
59770
|
+
}
|
|
59434
59771
|
}
|
|
59435
59772
|
}, {
|
|
59436
|
-
key: "
|
|
59437
|
-
value: function
|
|
59773
|
+
key: "hasChildren",
|
|
59774
|
+
value: function hasChildren() {
|
|
59775
|
+
return this.children.length > 0;
|
|
59776
|
+
}
|
|
59777
|
+
}, {
|
|
59778
|
+
key: "getHierarchy",
|
|
59779
|
+
value: function getHierarchy() {
|
|
59438
59780
|
return {
|
|
59439
|
-
|
|
59440
|
-
|
|
59441
|
-
|
|
59442
|
-
|
|
59443
|
-
tags: this.getTags()
|
|
59781
|
+
element: this,
|
|
59782
|
+
children: this.children.map(function (e) {
|
|
59783
|
+
return e.getHierarchy();
|
|
59784
|
+
})
|
|
59444
59785
|
};
|
|
59445
59786
|
}
|
|
59446
|
-
}
|
|
59447
|
-
|
|
59448
|
-
|
|
59449
|
-
|
|
59450
|
-
|
|
59451
|
-
|
|
59452
|
-
var _super = _createSuper(AnimationHandler);
|
|
59453
|
-
|
|
59454
|
-
function AnimationHandler(mesh) {
|
|
59455
|
-
var _this;
|
|
59456
|
-
|
|
59457
|
-
var animations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
59458
|
-
|
|
59459
|
-
_classCallCheck(this, AnimationHandler);
|
|
59460
|
-
|
|
59461
|
-
_this = _super.call(this);
|
|
59462
|
-
|
|
59463
|
-
_defineProperty$1(_assertThisInitialized(_this), "getAnimationEventHandler", function (type) {
|
|
59464
|
-
return function (_ref) {
|
|
59465
|
-
var action = _ref.action,
|
|
59466
|
-
direction = _ref.direction;
|
|
59467
|
-
|
|
59468
|
-
_this.dispatchEvent({
|
|
59469
|
-
type: type,
|
|
59470
|
-
action: action,
|
|
59471
|
-
direction: direction
|
|
59472
|
-
});
|
|
59473
|
-
};
|
|
59474
|
-
});
|
|
59475
|
-
|
|
59476
|
-
_this.mixer = new AnimationMixer(mesh);
|
|
59477
|
-
_this.animations = animations;
|
|
59478
|
-
_this.isPlayingAnimation = false;
|
|
59479
|
-
|
|
59480
|
-
_this.addEventsListeners();
|
|
59481
|
-
|
|
59482
|
-
return _this;
|
|
59483
|
-
}
|
|
59484
|
-
|
|
59485
|
-
_createClass(AnimationHandler, [{
|
|
59486
|
-
key: "addEventsListeners",
|
|
59487
|
-
value: function addEventsListeners() {
|
|
59488
|
-
this.mixer.addEventListener('loop', this.getAnimationEventHandler(ENTITY_EVENTS.ANIMATION.LOOP));
|
|
59489
|
-
this.mixer.addEventListener('finished', this.getAnimationEventHandler(ENTITY_EVENTS.ANIMATION.FINISHED));
|
|
59787
|
+
}, {
|
|
59788
|
+
key: "addTags",
|
|
59789
|
+
value: function addTags() {
|
|
59790
|
+
var tags = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
59791
|
+
tags.forEach(this.addTag);
|
|
59490
59792
|
}
|
|
59491
59793
|
}, {
|
|
59492
|
-
key: "
|
|
59493
|
-
value: function
|
|
59494
|
-
|
|
59495
|
-
|
|
59496
|
-
|
|
59497
|
-
action = this.animations[id];
|
|
59498
|
-
} else if (typeof id === 'string') {
|
|
59499
|
-
action = AnimationClip.findByName(this.animations, id);
|
|
59794
|
+
key: "removeTag",
|
|
59795
|
+
value: function removeTag(tagName) {
|
|
59796
|
+
if (tagName === DEFAULT_TAG) {
|
|
59797
|
+
console.log(TAG_CANT_BE_REMOVED);
|
|
59798
|
+
return;
|
|
59500
59799
|
}
|
|
59501
59800
|
|
|
59502
|
-
|
|
59801
|
+
if (this.hasTag(tagName)) {
|
|
59802
|
+
this.tags.splice(this.tags.indexOf(tagName), 1);
|
|
59803
|
+
} else {
|
|
59804
|
+
console.log(TAG_NOT_EXISTING_REMOVAL);
|
|
59805
|
+
}
|
|
59503
59806
|
}
|
|
59504
59807
|
}, {
|
|
59505
|
-
key: "
|
|
59506
|
-
value: function
|
|
59507
|
-
|
|
59508
|
-
var name = _ref2.name;
|
|
59509
|
-
return name;
|
|
59510
|
-
});
|
|
59808
|
+
key: "removeAllTags",
|
|
59809
|
+
value: function removeAllTags() {
|
|
59810
|
+
this.tags = [DEFAULT_TAG];
|
|
59511
59811
|
}
|
|
59512
59812
|
}, {
|
|
59513
|
-
key: "
|
|
59514
|
-
value: function
|
|
59515
|
-
this.
|
|
59516
|
-
this.isPlayingAnimation = false;
|
|
59813
|
+
key: "hasTag",
|
|
59814
|
+
value: function hasTag(tagName) {
|
|
59815
|
+
return this.tags.includes(tagName);
|
|
59517
59816
|
}
|
|
59518
59817
|
}, {
|
|
59519
|
-
key: "
|
|
59520
|
-
value: function
|
|
59521
|
-
|
|
59522
|
-
this.currentAction.stop();
|
|
59523
|
-
}
|
|
59524
|
-
|
|
59525
|
-
this.isPlayingAnimation = false;
|
|
59818
|
+
key: "getTags",
|
|
59819
|
+
value: function getTags() {
|
|
59820
|
+
return this.tags;
|
|
59526
59821
|
}
|
|
59527
59822
|
}, {
|
|
59528
|
-
key: "
|
|
59529
|
-
value: function
|
|
59530
|
-
|
|
59531
|
-
|
|
59532
|
-
loop = _options$loop === void 0 ? LoopRepeat : _options$loop;
|
|
59533
|
-
this.isPlayingAnimation = true;
|
|
59823
|
+
key: "disposeScripts",
|
|
59824
|
+
value: function disposeScripts() {
|
|
59825
|
+
if (this.hasScripts()) {
|
|
59826
|
+
var length = this.scripts.length;
|
|
59534
59827
|
|
|
59535
|
-
|
|
59536
|
-
|
|
59537
|
-
|
|
59538
|
-
|
|
59539
|
-
|
|
59540
|
-
|
|
59828
|
+
for (var i = 0; i < length; i++) {
|
|
59829
|
+
var _this$scripts$i = this.scripts[i],
|
|
59830
|
+
script = _this$scripts$i.script,
|
|
59831
|
+
enabled = _this$scripts$i.enabled;
|
|
59832
|
+
|
|
59833
|
+
if (enabled) {
|
|
59834
|
+
script.onDispose();
|
|
59835
|
+
|
|
59836
|
+
script.__setStartedFlag(false);
|
|
59837
|
+
}
|
|
59838
|
+
|
|
59839
|
+
delete this.scripts[i];
|
|
59840
|
+
}
|
|
59541
59841
|
}
|
|
59542
59842
|
}
|
|
59543
59843
|
}, {
|
|
59544
|
-
key: "
|
|
59545
|
-
value: function
|
|
59546
|
-
var
|
|
59547
|
-
_ref3$duration = _ref3.duration,
|
|
59548
|
-
duration = _ref3$duration === void 0 ? 0.2 : _ref3$duration,
|
|
59549
|
-
_ref3$loop = _ref3.loop,
|
|
59550
|
-
loop = _ref3$loop === void 0 ? LoopRepeat : _ref3$loop;
|
|
59844
|
+
key: "start",
|
|
59845
|
+
value: function start() {
|
|
59846
|
+
var _this3 = this;
|
|
59551
59847
|
|
|
59552
|
-
|
|
59553
|
-
|
|
59848
|
+
if (this.hasScripts()) {
|
|
59849
|
+
this.scripts.forEach(function (_ref3) {
|
|
59850
|
+
var script = _ref3.script,
|
|
59851
|
+
enabled = _ref3.enabled,
|
|
59852
|
+
options = _ref3.options;
|
|
59554
59853
|
|
|
59555
|
-
|
|
59556
|
-
|
|
59557
|
-
}
|
|
59854
|
+
if (enabled) {
|
|
59855
|
+
script.start(_this3, options);
|
|
59558
59856
|
|
|
59559
|
-
|
|
59857
|
+
script.__setStartedFlag(true);
|
|
59858
|
+
}
|
|
59859
|
+
});
|
|
59860
|
+
}
|
|
59560
59861
|
}
|
|
59561
59862
|
}, {
|
|
59562
59863
|
key: "update",
|
|
59563
59864
|
value: function update(dt) {
|
|
59564
|
-
this.
|
|
59565
|
-
|
|
59566
|
-
|
|
59865
|
+
if (this.hasScripts()) {
|
|
59866
|
+
this.scripts.forEach(function (_ref4) {
|
|
59867
|
+
var script = _ref4.script,
|
|
59868
|
+
enabled = _ref4.enabled;
|
|
59567
59869
|
|
|
59568
|
-
|
|
59569
|
-
|
|
59870
|
+
if (script && enabled) {
|
|
59871
|
+
script.update(dt);
|
|
59872
|
+
}
|
|
59873
|
+
});
|
|
59874
|
+
}
|
|
59875
|
+
}
|
|
59876
|
+
}, {
|
|
59877
|
+
key: "onPhysicsUpdate",
|
|
59878
|
+
value: function onPhysicsUpdate(dt) {
|
|
59879
|
+
if (this.hasScripts()) {
|
|
59880
|
+
this.scripts.forEach(function (_ref5) {
|
|
59881
|
+
var script = _ref5.script,
|
|
59882
|
+
enabled = _ref5.enabled;
|
|
59570
59883
|
|
|
59571
|
-
|
|
59572
|
-
|
|
59573
|
-
|
|
59574
|
-
|
|
59575
|
-
|
|
59576
|
-
this.vertices = {
|
|
59577
|
-
near: [new Vector3$1(), new Vector3$1(), new Vector3$1(), new Vector3$1()],
|
|
59578
|
-
far: [new Vector3$1(), new Vector3$1(), new Vector3$1(), new Vector3$1()]
|
|
59579
|
-
};
|
|
59580
|
-
|
|
59581
|
-
if (data.projectionMatrix !== undefined) {
|
|
59582
|
-
this.setFromProjectionMatrix(data.projectionMatrix, data.maxFar || 10000);
|
|
59884
|
+
if (script && enabled) {
|
|
59885
|
+
script.physicsUpdate(dt);
|
|
59886
|
+
}
|
|
59887
|
+
});
|
|
59888
|
+
}
|
|
59583
59889
|
}
|
|
59584
|
-
}
|
|
59585
|
-
|
|
59586
|
-
|
|
59587
|
-
|
|
59588
|
-
value: function setFromProjectionMatrix(projectionMatrix, maxFar) {
|
|
59589
|
-
var isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0;
|
|
59590
|
-
inverseProjectionMatrix.copy(projectionMatrix).invert(); // 3 --- 0 vertices.near/far order
|
|
59591
|
-
// | |
|
|
59592
|
-
// 2 --- 1
|
|
59593
|
-
// clip space spans from [-1, 1]
|
|
59594
|
-
|
|
59595
|
-
this.vertices.near[0].set(1, 1, -1);
|
|
59596
|
-
this.vertices.near[1].set(1, -1, -1);
|
|
59597
|
-
this.vertices.near[2].set(-1, -1, -1);
|
|
59598
|
-
this.vertices.near[3].set(-1, 1, -1);
|
|
59599
|
-
this.vertices.near.forEach(function (v) {
|
|
59600
|
-
v.applyMatrix4(inverseProjectionMatrix);
|
|
59601
|
-
});
|
|
59602
|
-
this.vertices.far[0].set(1, 1, 1);
|
|
59603
|
-
this.vertices.far[1].set(1, -1, 1);
|
|
59604
|
-
this.vertices.far[2].set(-1, -1, 1);
|
|
59605
|
-
this.vertices.far[3].set(-1, 1, 1);
|
|
59606
|
-
this.vertices.far.forEach(function (v) {
|
|
59607
|
-
v.applyMatrix4(inverseProjectionMatrix);
|
|
59608
|
-
var absZ = Math.abs(v.z);
|
|
59890
|
+
}, {
|
|
59891
|
+
key: "disposeBody",
|
|
59892
|
+
value: function disposeBody() {
|
|
59893
|
+
this.getBody().clear();
|
|
59609
59894
|
|
|
59610
|
-
|
|
59611
|
-
|
|
59612
|
-
|
|
59613
|
-
v.multiplyScalar(Math.min(maxFar / absZ, 1.0));
|
|
59614
|
-
}
|
|
59615
|
-
});
|
|
59616
|
-
return this.vertices;
|
|
59895
|
+
if (this.getBody().dispose && !isScene(this.getBody())) {
|
|
59896
|
+
this.getBody().dispose();
|
|
59897
|
+
}
|
|
59617
59898
|
}
|
|
59618
59899
|
}, {
|
|
59619
|
-
key: "
|
|
59620
|
-
value: function
|
|
59621
|
-
|
|
59622
|
-
|
|
59900
|
+
key: "dispose",
|
|
59901
|
+
value: function dispose() {
|
|
59902
|
+
if (this.hasChildren()) {
|
|
59903
|
+
this.children.forEach(function (child) {
|
|
59904
|
+
child.dispose();
|
|
59905
|
+
});
|
|
59623
59906
|
}
|
|
59624
59907
|
|
|
59625
|
-
|
|
59908
|
+
if (this.hasBody()) {
|
|
59909
|
+
this.stopStateMachine();
|
|
59910
|
+
this.disposeScripts();
|
|
59911
|
+
Scene$1.remove(this.getBody());
|
|
59912
|
+
this.disposeBody();
|
|
59913
|
+
}
|
|
59626
59914
|
|
|
59627
|
-
|
|
59628
|
-
|
|
59915
|
+
this.dispatchEvent({
|
|
59916
|
+
type: ENTITY_EVENTS.DISPOSE
|
|
59917
|
+
});
|
|
59918
|
+
this.reset();
|
|
59919
|
+
}
|
|
59920
|
+
}, {
|
|
59921
|
+
key: "addStateMachine",
|
|
59922
|
+
value: function addStateMachine(description) {
|
|
59923
|
+
var _this4 = this;
|
|
59629
59924
|
|
|
59630
|
-
|
|
59631
|
-
|
|
59632
|
-
|
|
59633
|
-
|
|
59634
|
-
}
|
|
59635
|
-
|
|
59636
|
-
cascade.vertices.near[_j].lerpVectors(this.vertices.near[_j], this.vertices.far[_j], breaks[i - 1]);
|
|
59637
|
-
}
|
|
59638
|
-
}
|
|
59925
|
+
this.stateMachine = interpret(createMachine(description)).onTransition(function (state) {
|
|
59926
|
+
_this4.dispatchEvent({
|
|
59927
|
+
type: ENTITY_EVENTS.STATE_MACHINE.CHANGE,
|
|
59928
|
+
state: state
|
|
59929
|
+
});
|
|
59930
|
+
});
|
|
59639
59931
|
|
|
59640
|
-
|
|
59641
|
-
|
|
59642
|
-
cascade.vertices.far[_j2].copy(this.vertices.far[_j2]);
|
|
59643
|
-
}
|
|
59644
|
-
} else {
|
|
59645
|
-
for (var _j3 = 0; _j3 < 4; _j3++) {
|
|
59646
|
-
cascade.vertices.far[_j3].lerpVectors(this.vertices.near[_j3], this.vertices.far[_j3], breaks[i]);
|
|
59647
|
-
}
|
|
59648
|
-
}
|
|
59932
|
+
if (description.autostart) {
|
|
59933
|
+
this.startStateMachine();
|
|
59649
59934
|
}
|
|
59650
59935
|
}
|
|
59651
59936
|
}, {
|
|
59652
|
-
key: "
|
|
59653
|
-
value: function
|
|
59654
|
-
|
|
59655
|
-
|
|
59656
|
-
|
|
59937
|
+
key: "startStateMachine",
|
|
59938
|
+
value: function startStateMachine() {
|
|
59939
|
+
if (this.hasStateMachine()) {
|
|
59940
|
+
this.stateMachine.start();
|
|
59941
|
+
} else {
|
|
59942
|
+
console.log(STATE_MACHINE_NOT_AVAILABLE);
|
|
59657
59943
|
}
|
|
59658
59944
|
}
|
|
59659
|
-
}
|
|
59660
|
-
|
|
59661
|
-
|
|
59662
|
-
|
|
59663
|
-
|
|
59664
|
-
/* glsl */
|
|
59665
|
-
"\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n geometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n PointLight pointLight;\n #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n PointLightShadow pointLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n pointLight = pointLights[ i ];\n\n getPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n pointLightShadow = pointLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n SpotLight spotLight;\n #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n SpotLightShadow spotLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n spotLight = spotLights[ i ];\n\n getSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n spotLightShadow = spotLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n DirectionalLight directionalLight;\n float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n #if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n vec2 cascade;\n float cascadeCenter;\n float closestEdge;\n float margin;\n float csmx;\n float csmy;\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n // NOTE: Depth gets larger away from the camera.\n // cascade.x is closer, cascade.y is further\n cascade = CSM_cascades[ i ];\n cascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n margin = 0.25 * pow( closestEdge, 2.0 );\n csmx = cascade.x - margin / 2.0;\n csmy = cascade.y + margin / 2.0;\n if( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS && linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n float dist = min( linearDepth - csmx, csmy - linearDepth );\n float ratio = clamp( dist / margin, 0.0, 1.0 );\n if( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) {\n\n vec3 prevColor = directLight.color;\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n }\n\n ReflectedLight prevLight = reflectedLight;\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n float blendRatio = shouldBlend ? ratio : 1.0;\n\n reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n }\n\n }\n #pragma unroll_loop_end\n #else\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n directionalLightShadow = directionalLightShadows[ i ];\n if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n #endif\n\n if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n #endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n DirectionalLight directionalLight;\n #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n DirectionalLightShadow directionalLightShadow;\n #endif\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n directionalLight = directionalLights[ i ];\n\n getDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n directionalLightShadow = directionalLightShadows[ i ];\n directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n #endif\n\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n RectAreaLight rectAreaLight;\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n rectAreaLight = rectAreaLights[ i ];\n RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n }\n #pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n vec3 iblIrradiance = vec3( 0.0 );\n\n vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n irradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n #if ( NUM_HEMI_LIGHTS > 0 )\n\n #pragma unroll_loop_start\n for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n }\n #pragma unroll_loop_end\n\n #endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n vec3 radiance = vec3( 0.0 );\n vec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n",
|
|
59666
|
-
lights_pars_begin:
|
|
59667
|
-
/* glsl */
|
|
59668
|
-
"\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n " + ShaderChunk.lights_pars_begin
|
|
59669
|
-
};var _cameraToLightMatrix = new Matrix4();
|
|
59670
|
-
|
|
59671
|
-
var _lightSpaceFrustum = new Frustum();
|
|
59672
|
-
|
|
59673
|
-
var _center = new Vector3$1();
|
|
59674
|
-
|
|
59675
|
-
var _bbox = new Box3();
|
|
59676
|
-
|
|
59677
|
-
var _uniformArray = [];
|
|
59678
|
-
var _logArray = [];
|
|
59679
|
-
var DEFAULT_MAX_FAR = 100000;
|
|
59680
|
-
var DEFAULT_MODE = 'practical';
|
|
59681
|
-
var DEFAULT_SHADOWMAP_SIZE = 2048;
|
|
59682
|
-
var DEFAULT_CASCADE = 3;
|
|
59683
|
-
var DEFAULT_BIAS$3 = 0.000001;
|
|
59684
|
-
var DEFAULT_INTENSITY$5 = 1;
|
|
59685
|
-
var DEFAULT_NEAR$3 = 1;
|
|
59686
|
-
var DEFAULT_FAR$3 = 2000;
|
|
59687
|
-
var DEFAULT_MARGIN = 200;
|
|
59688
|
-
var CascadeShadowMaps = /*#__PURE__*/function () {
|
|
59689
|
-
function CascadeShadowMaps(_ref) {
|
|
59690
|
-
var _ref$camera = _ref.camera,
|
|
59691
|
-
camera = _ref$camera === void 0 ? Scene$1.getCameraBody() : _ref$camera,
|
|
59692
|
-
_ref$parent = _ref.parent,
|
|
59693
|
-
parent = _ref$parent === void 0 ? Scene$1.getScene() : _ref$parent,
|
|
59694
|
-
_ref$cascades = _ref.cascades,
|
|
59695
|
-
cascades = _ref$cascades === void 0 ? DEFAULT_CASCADE : _ref$cascades,
|
|
59696
|
-
_ref$maxFar = _ref.maxFar,
|
|
59697
|
-
maxFar = _ref$maxFar === void 0 ? DEFAULT_MAX_FAR : _ref$maxFar,
|
|
59698
|
-
_ref$mode = _ref.mode,
|
|
59699
|
-
mode = _ref$mode === void 0 ? DEFAULT_MODE : _ref$mode,
|
|
59700
|
-
_ref$shadowMapSize = _ref.shadowMapSize,
|
|
59701
|
-
shadowMapSize = _ref$shadowMapSize === void 0 ? DEFAULT_SHADOWMAP_SIZE : _ref$shadowMapSize,
|
|
59702
|
-
_ref$shadowBias = _ref.shadowBias,
|
|
59703
|
-
shadowBias = _ref$shadowBias === void 0 ? DEFAULT_BIAS$3 : _ref$shadowBias,
|
|
59704
|
-
_ref$lightDirection = _ref.lightDirection,
|
|
59705
|
-
lightDirection = _ref$lightDirection === void 0 ? new Vector3$1(1, -1, 1).normalize() : _ref$lightDirection,
|
|
59706
|
-
_ref$lightIntensity = _ref.lightIntensity,
|
|
59707
|
-
lightIntensity = _ref$lightIntensity === void 0 ? DEFAULT_INTENSITY$5 : _ref$lightIntensity,
|
|
59708
|
-
_ref$lightNear = _ref.lightNear,
|
|
59709
|
-
lightNear = _ref$lightNear === void 0 ? DEFAULT_NEAR$3 : _ref$lightNear,
|
|
59710
|
-
_ref$lightFar = _ref.lightFar,
|
|
59711
|
-
lightFar = _ref$lightFar === void 0 ? DEFAULT_FAR$3 : _ref$lightFar,
|
|
59712
|
-
_ref$lightMargin = _ref.lightMargin,
|
|
59713
|
-
lightMargin = _ref$lightMargin === void 0 ? DEFAULT_MARGIN : _ref$lightMargin,
|
|
59714
|
-
customSplitsCallback = _ref.customSplitsCallback;
|
|
59715
|
-
|
|
59716
|
-
_classCallCheck(this, CascadeShadowMaps);
|
|
59717
|
-
|
|
59718
|
-
this.camera = camera;
|
|
59719
|
-
this.parent = parent;
|
|
59720
|
-
this.cascades = cascades;
|
|
59721
|
-
this.maxFar = maxFar;
|
|
59722
|
-
this.mode = mode;
|
|
59723
|
-
this.shadowMapSize = shadowMapSize;
|
|
59724
|
-
this.shadowBias = shadowBias;
|
|
59725
|
-
this.lightDirection = lightDirection;
|
|
59726
|
-
this.lightIntensity = lightIntensity;
|
|
59727
|
-
this.lightNear = lightNear;
|
|
59728
|
-
this.lightFar = lightFar;
|
|
59729
|
-
this.lightMargin = lightMargin;
|
|
59730
|
-
this.customSplitsCallback = customSplitsCallback;
|
|
59731
|
-
this.fade = false;
|
|
59732
|
-
this.mainFrustum = new Frustum();
|
|
59733
|
-
this.frustums = [];
|
|
59734
|
-
this.breaks = [];
|
|
59735
|
-
this.lights = [];
|
|
59736
|
-
this.shaders = new Map();
|
|
59737
|
-
this.createLights();
|
|
59738
|
-
this.updateFrustums();
|
|
59739
|
-
this.injectInclude();
|
|
59740
|
-
}
|
|
59741
|
-
|
|
59742
|
-
_createClass(CascadeShadowMaps, [{
|
|
59743
|
-
key: "createLights",
|
|
59744
|
-
value: function createLights() {
|
|
59745
|
-
for (var i = 0; i < this.cascades; i++) {
|
|
59746
|
-
var light = new DirectionalLight(0xffffff, this.lightIntensity);
|
|
59747
|
-
light.castShadow = true;
|
|
59748
|
-
light.shadow.mapSize.width = this.shadowMapSize;
|
|
59749
|
-
light.shadow.mapSize.height = this.shadowMapSize;
|
|
59750
|
-
light.shadow.camera.near = this.lightNear;
|
|
59751
|
-
light.shadow.camera.far = this.lightFar;
|
|
59752
|
-
light.shadow.bias = this.shadowBias;
|
|
59753
|
-
this.parent.add(light);
|
|
59754
|
-
this.parent.add(light.target);
|
|
59755
|
-
this.lights.push(light);
|
|
59945
|
+
}, {
|
|
59946
|
+
key: "stopStateMachine",
|
|
59947
|
+
value: function stopStateMachine() {
|
|
59948
|
+
if (this.hasStateMachine()) {
|
|
59949
|
+
this.stateMachine.stop();
|
|
59756
59950
|
}
|
|
59757
59951
|
}
|
|
59758
59952
|
}, {
|
|
59759
|
-
key: "
|
|
59760
|
-
value: function
|
|
59761
|
-
|
|
59762
|
-
|
|
59763
|
-
|
|
59764
|
-
|
|
59953
|
+
key: "changeState",
|
|
59954
|
+
value: function changeState(event) {
|
|
59955
|
+
if (this.hasStateMachine()) {
|
|
59956
|
+
this.stateMachine.send(event);
|
|
59957
|
+
} else {
|
|
59958
|
+
console.log(STATE_MACHINE_NOT_AVAILABLE);
|
|
59959
|
+
}
|
|
59765
59960
|
}
|
|
59766
59961
|
}, {
|
|
59767
|
-
key: "
|
|
59768
|
-
value: function
|
|
59769
|
-
var
|
|
59962
|
+
key: "getScript",
|
|
59963
|
+
value: function getScript(name) {
|
|
59964
|
+
var script = this.scripts.filter(function (script) {
|
|
59965
|
+
return script.name === name;
|
|
59966
|
+
})[0].script;
|
|
59770
59967
|
|
|
59771
|
-
|
|
59772
|
-
|
|
59773
|
-
|
|
59774
|
-
|
|
59775
|
-
|
|
59776
|
-
|
|
59968
|
+
if (script) {
|
|
59969
|
+
return script;
|
|
59970
|
+
} else {
|
|
59971
|
+
console.warn(SCRIPT_NOT_FOUND);
|
|
59972
|
+
}
|
|
59973
|
+
}
|
|
59974
|
+
}, {
|
|
59975
|
+
key: "addScripts",
|
|
59976
|
+
value: function addScripts() {
|
|
59977
|
+
var _this5 = this;
|
|
59777
59978
|
|
|
59778
|
-
|
|
59779
|
-
|
|
59780
|
-
|
|
59781
|
-
|
|
59979
|
+
var scripts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
59980
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
59981
|
+
var enabled = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
|
|
59982
|
+
var parsedScripts = this.parseScripts(scripts, options, enabled);
|
|
59983
|
+
this.scripts = [].concat(_toConsumableArray(this.scripts), [parsedScripts]);
|
|
59782
59984
|
|
|
59783
|
-
|
|
59784
|
-
|
|
59785
|
-
|
|
59786
|
-
|
|
59787
|
-
|
|
59985
|
+
if (enabled) {
|
|
59986
|
+
parsedScripts.forEach(function (parsed) {
|
|
59987
|
+
return parsed.start(_this5, parsed.options);
|
|
59988
|
+
});
|
|
59989
|
+
}
|
|
59990
|
+
}
|
|
59991
|
+
}, {
|
|
59992
|
+
key: "addScript",
|
|
59993
|
+
value: function addScript(name) {
|
|
59994
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
59995
|
+
var script = Scripts$1.get(name);
|
|
59996
|
+
var _options$enabled = options.enabled,
|
|
59997
|
+
enabled = _options$enabled === void 0 ? true : _options$enabled;
|
|
59788
59998
|
|
|
59789
|
-
|
|
59999
|
+
if (script) {
|
|
60000
|
+
this.scripts.push({
|
|
60001
|
+
script: script,
|
|
60002
|
+
name: name,
|
|
60003
|
+
enabled: enabled,
|
|
60004
|
+
options: options
|
|
60005
|
+
});
|
|
59790
60006
|
|
|
59791
|
-
if (
|
|
59792
|
-
|
|
59793
|
-
var camera = this.camera;
|
|
59794
|
-
var far = Math.max(camera.far, this.maxFar);
|
|
59795
|
-
var linearDepth = frustum.vertices.far[0].z / (far - camera.near);
|
|
59796
|
-
var margin = 0.25 * Math.pow(linearDepth, 2.0) * (far - camera.near);
|
|
59797
|
-
squaredBBWidth += margin;
|
|
60007
|
+
if (enabled) {
|
|
60008
|
+
script.start(this, options);
|
|
59798
60009
|
}
|
|
60010
|
+
} else {
|
|
60011
|
+
console.log(SCRIPT_NOT_FOUND);
|
|
60012
|
+
}
|
|
59799
60013
|
|
|
59800
|
-
|
|
59801
|
-
|
|
59802
|
-
|
|
59803
|
-
|
|
59804
|
-
|
|
60014
|
+
return script;
|
|
60015
|
+
}
|
|
60016
|
+
}, {
|
|
60017
|
+
key: "enableScripts",
|
|
60018
|
+
value: function enableScripts() {
|
|
60019
|
+
this.scriptsEnabled = true;
|
|
60020
|
+
}
|
|
60021
|
+
}, {
|
|
60022
|
+
key: "disableScripts",
|
|
60023
|
+
value: function disableScripts() {
|
|
60024
|
+
this.scriptsEnabled = false;
|
|
60025
|
+
}
|
|
60026
|
+
}, {
|
|
60027
|
+
key: "setEntityType",
|
|
60028
|
+
value: function setEntityType(type) {
|
|
60029
|
+
if (FLAT_ENTITY_TYPES.includes(type)) {
|
|
60030
|
+
this.entityType = type;
|
|
60031
|
+
} else {
|
|
60032
|
+
console.log(ENTITY_TYPE_NOT_ALLOWED);
|
|
60033
|
+
this.entityType = ENTITY_TYPES.UNKNOWN;
|
|
59805
60034
|
}
|
|
59806
60035
|
}
|
|
59807
60036
|
}, {
|
|
59808
|
-
key: "
|
|
59809
|
-
value: function
|
|
59810
|
-
|
|
59811
|
-
|
|
59812
|
-
|
|
59813
|
-
|
|
59814
|
-
|
|
59815
|
-
|
|
59816
|
-
|
|
59817
|
-
|
|
59818
|
-
|
|
59819
|
-
|
|
59820
|
-
|
|
59821
|
-
|
|
59822
|
-
|
|
59823
|
-
|
|
59824
|
-
|
|
59825
|
-
|
|
60037
|
+
key: "getEntityType",
|
|
60038
|
+
value: function getEntityType() {
|
|
60039
|
+
return this.entityType;
|
|
60040
|
+
}
|
|
60041
|
+
}, {
|
|
60042
|
+
key: "addLight",
|
|
60043
|
+
// TODO: sounds should become entities
|
|
60044
|
+
// addSound(name, options) {
|
|
60045
|
+
// const { autoplay = false, ...opts } = options;
|
|
60046
|
+
// this.isPlayingSound = autoplay;
|
|
60047
|
+
// this.sound = new Sound(name, {
|
|
60048
|
+
// autoplay,
|
|
60049
|
+
// ...opts
|
|
60050
|
+
// });
|
|
60051
|
+
// this.sound.setTarget(this);
|
|
60052
|
+
// return this.sound;
|
|
60053
|
+
// }
|
|
60054
|
+
// addDirectionalSound(name, options) {
|
|
60055
|
+
// const { autoplay = false, ...opts } = options;
|
|
60056
|
+
// this.isPlayingSound = autoplay;
|
|
60057
|
+
// this.sound = new DirectionalSound(name, {
|
|
60058
|
+
// autoplay,
|
|
60059
|
+
// ...opts
|
|
60060
|
+
// });
|
|
60061
|
+
// this.sound.setTarget(this);
|
|
60062
|
+
// return this.sound;
|
|
60063
|
+
// }
|
|
60064
|
+
// addAmbientSound(name, options) {
|
|
60065
|
+
// const { autoplay = false, ...opts } = options;
|
|
60066
|
+
// this.isPlayingSound = autoplay;
|
|
60067
|
+
// this.sound = new AmbientSound(name, {
|
|
60068
|
+
// body: this.body,
|
|
60069
|
+
// autoplay,
|
|
60070
|
+
// ...opts
|
|
60071
|
+
// });
|
|
60072
|
+
// return this.sound;
|
|
60073
|
+
// }
|
|
60074
|
+
value: function addLight(light) {
|
|
60075
|
+
var _this$getPosition = this.getPosition(),
|
|
60076
|
+
x = _this$getPosition.x,
|
|
60077
|
+
y = _this$getPosition.y,
|
|
60078
|
+
z = _this$getPosition.z;
|
|
59826
60079
|
|
|
59827
|
-
|
|
59828
|
-
|
|
59829
|
-
|
|
59830
|
-
|
|
60080
|
+
light.setPosition({
|
|
60081
|
+
x: x,
|
|
60082
|
+
y: y,
|
|
60083
|
+
z: z
|
|
60084
|
+
});
|
|
60085
|
+
this.light = light;
|
|
60086
|
+
}
|
|
60087
|
+
}, {
|
|
60088
|
+
key: "playSound",
|
|
60089
|
+
value: function playSound() {
|
|
60090
|
+
if (this.sound && !this.isPlayingSound) {
|
|
60091
|
+
this.sound.play();
|
|
60092
|
+
this.isPlayingSound = true;
|
|
59831
60093
|
}
|
|
59832
|
-
|
|
59833
|
-
|
|
59834
|
-
|
|
59835
|
-
|
|
59836
|
-
|
|
59837
|
-
|
|
59838
|
-
|
|
60094
|
+
}
|
|
60095
|
+
}, {
|
|
60096
|
+
key: "stopSound",
|
|
60097
|
+
value: function stopSound() {
|
|
60098
|
+
if (this.sound && this.isPlayingSound) {
|
|
60099
|
+
this.sound.stop();
|
|
60100
|
+
this.isPlayingSound = false;
|
|
59839
60101
|
}
|
|
60102
|
+
}
|
|
60103
|
+
}, {
|
|
60104
|
+
key: "getScale",
|
|
60105
|
+
value: function getScale() {
|
|
60106
|
+
return {
|
|
60107
|
+
x: this.body.scale.x,
|
|
60108
|
+
y: this.body.scale.y,
|
|
60109
|
+
z: this.body.scale.z
|
|
60110
|
+
};
|
|
60111
|
+
}
|
|
60112
|
+
}, {
|
|
60113
|
+
key: "setScale",
|
|
60114
|
+
value: function setScale(howbig) {
|
|
60115
|
+
if (this.hasBody()) {
|
|
60116
|
+
var scale = _objectSpread2$1(_objectSpread2$1({}, this.getScale()), howbig);
|
|
59840
60117
|
|
|
59841
|
-
|
|
59842
|
-
for (var i = 1; i < amount; i++) {
|
|
59843
|
-
target.push(near * Math.pow(far / near, i / amount) / far);
|
|
59844
|
-
}
|
|
59845
|
-
|
|
59846
|
-
target.push(1);
|
|
60118
|
+
this.body.scale.set(scale.x, scale.y, scale.z);
|
|
59847
60119
|
}
|
|
59848
|
-
|
|
59849
|
-
|
|
59850
|
-
|
|
59851
|
-
|
|
59852
|
-
|
|
59853
|
-
|
|
59854
|
-
|
|
59855
|
-
for (var i = 1; i < amount; i++) {
|
|
59856
|
-
target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda));
|
|
59857
|
-
}
|
|
59858
|
-
|
|
59859
|
-
target.push(1);
|
|
60120
|
+
}
|
|
60121
|
+
}, {
|
|
60122
|
+
key: "getQuaternion",
|
|
60123
|
+
value: function getQuaternion() {
|
|
60124
|
+
if (this.hasBody()) {
|
|
60125
|
+
return this.getBody().quaternion.clone();
|
|
59860
60126
|
}
|
|
59861
60127
|
}
|
|
59862
60128
|
}, {
|
|
59863
|
-
key: "
|
|
59864
|
-
value: function
|
|
59865
|
-
|
|
59866
|
-
|
|
59867
|
-
|
|
59868
|
-
|
|
59869
|
-
|
|
59870
|
-
|
|
59871
|
-
var
|
|
59872
|
-
|
|
59873
|
-
|
|
59874
|
-
|
|
59875
|
-
_cameraToLightMatrix.multiplyMatrices(light.shadow.camera.matrixWorldInverse, camera.matrixWorld);
|
|
59876
|
-
|
|
59877
|
-
frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum);
|
|
59878
|
-
var nearVerts = _lightSpaceFrustum.vertices.near;
|
|
59879
|
-
var farVerts = _lightSpaceFrustum.vertices.far;
|
|
59880
|
-
|
|
59881
|
-
_bbox.makeEmpty();
|
|
59882
|
-
|
|
59883
|
-
for (var j = 0; j < 4; j++) {
|
|
59884
|
-
_bbox.expandByPoint(nearVerts[j]);
|
|
59885
|
-
|
|
59886
|
-
_bbox.expandByPoint(farVerts[j]);
|
|
59887
|
-
}
|
|
60129
|
+
key: "getPosition",
|
|
60130
|
+
value: function getPosition() {
|
|
60131
|
+
return this.getBody().position.clone();
|
|
60132
|
+
}
|
|
60133
|
+
}, {
|
|
60134
|
+
key: "setPosition",
|
|
60135
|
+
value: function setPosition(where) {
|
|
60136
|
+
if (this.hasBody()) {
|
|
60137
|
+
var _this$getPosition2 = this.getPosition(),
|
|
60138
|
+
x = _this$getPosition2.x,
|
|
60139
|
+
y = _this$getPosition2.y,
|
|
60140
|
+
z = _this$getPosition2.z;
|
|
59888
60141
|
|
|
59889
|
-
|
|
60142
|
+
var position = _objectSpread2$1({
|
|
60143
|
+
x: x,
|
|
60144
|
+
y: y,
|
|
60145
|
+
z: z
|
|
60146
|
+
}, where);
|
|
59890
60147
|
|
|
59891
|
-
|
|
59892
|
-
|
|
59893
|
-
|
|
60148
|
+
this.body.position.set(position.x, position.y, position.z);
|
|
60149
|
+
}
|
|
60150
|
+
}
|
|
60151
|
+
}, {
|
|
60152
|
+
key: "getRotation",
|
|
60153
|
+
value: function getRotation() {
|
|
60154
|
+
return this.getBody().rotation.clone();
|
|
60155
|
+
}
|
|
60156
|
+
}, {
|
|
60157
|
+
key: "setRotation",
|
|
60158
|
+
value: function setRotation(how) {
|
|
60159
|
+
if (this.hasBody()) {
|
|
60160
|
+
var _this$getRotation = this.getRotation(),
|
|
60161
|
+
x = _this$getRotation.x,
|
|
60162
|
+
y = _this$getRotation.y,
|
|
60163
|
+
z = _this$getRotation.z;
|
|
59894
60164
|
|
|
59895
|
-
|
|
60165
|
+
var rotation = _objectSpread2$1({
|
|
60166
|
+
x: x,
|
|
60167
|
+
y: y,
|
|
60168
|
+
z: z
|
|
60169
|
+
}, how);
|
|
59896
60170
|
|
|
59897
|
-
|
|
59898
|
-
light.target.position.copy(_center);
|
|
59899
|
-
light.target.position.x += this.lightDirection.x;
|
|
59900
|
-
light.target.position.y += this.lightDirection.y;
|
|
59901
|
-
light.target.position.z += this.lightDirection.z;
|
|
60171
|
+
this.body.rotation.set(rotation.x, rotation.y, rotation.z);
|
|
59902
60172
|
}
|
|
59903
60173
|
}
|
|
59904
60174
|
}, {
|
|
59905
|
-
key: "
|
|
59906
|
-
value: function
|
|
59907
|
-
|
|
59908
|
-
|
|
60175
|
+
key: "getWorldTransform",
|
|
60176
|
+
value: function getWorldTransform() {
|
|
60177
|
+
var position = this.getBody().getWorldPosition(new Vector3$1());
|
|
60178
|
+
var quaternion = this.getBody().getWorldQuaternion(new Quaternion(0, 0, 0, 1));
|
|
60179
|
+
var rotation = new Euler(0, 0, 0, 'XYZ').setFromQuaternion(quaternion, 'XYZ');
|
|
60180
|
+
return {
|
|
60181
|
+
position: position,
|
|
60182
|
+
rotation: rotation,
|
|
60183
|
+
quaternion: quaternion
|
|
60184
|
+
};
|
|
59909
60185
|
}
|
|
59910
60186
|
}, {
|
|
59911
|
-
key: "
|
|
59912
|
-
value: function
|
|
59913
|
-
|
|
59914
|
-
|
|
59915
|
-
|
|
60187
|
+
key: "translate",
|
|
60188
|
+
value: function translate(_ref6) {
|
|
60189
|
+
var _ref6$x = _ref6.x,
|
|
60190
|
+
x = _ref6$x === void 0 ? 0 : _ref6$x,
|
|
60191
|
+
_ref6$y = _ref6.y,
|
|
60192
|
+
y = _ref6$y === void 0 ? 0 : _ref6$y,
|
|
60193
|
+
_ref6$z = _ref6.z,
|
|
60194
|
+
z = _ref6$z === void 0 ? 0 : _ref6$z;
|
|
59916
60195
|
|
|
59917
|
-
if (this.
|
|
59918
|
-
|
|
60196
|
+
if (this.hasBody()) {
|
|
60197
|
+
this.body.translateX(x);
|
|
60198
|
+
this.body.translateY(y);
|
|
60199
|
+
this.body.translateZ(z);
|
|
59919
60200
|
}
|
|
60201
|
+
}
|
|
60202
|
+
}, {
|
|
60203
|
+
key: "rotateTo",
|
|
60204
|
+
value: function rotateTo() {
|
|
60205
|
+
var _this6 = this;
|
|
59920
60206
|
|
|
59921
|
-
var
|
|
59922
|
-
var
|
|
59923
|
-
var
|
|
60207
|
+
var rotation = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getRotation();
|
|
60208
|
+
var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 250;
|
|
60209
|
+
var easing = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Between.Easing.Linear;
|
|
59924
60210
|
|
|
59925
|
-
|
|
59926
|
-
|
|
59927
|
-
|
|
59928
|
-
|
|
59929
|
-
value: breaksVec2
|
|
59930
|
-
};
|
|
59931
|
-
shader.uniforms.cameraNear = {
|
|
59932
|
-
value: scope.camera.near
|
|
59933
|
-
};
|
|
59934
|
-
shader.uniforms.shadowFar = {
|
|
59935
|
-
value: far
|
|
59936
|
-
};
|
|
59937
|
-
shaders.set(material, shader);
|
|
59938
|
-
};
|
|
60211
|
+
var _this$getRotation2 = this.getRotation(),
|
|
60212
|
+
x = _this$getRotation2.x,
|
|
60213
|
+
y = _this$getRotation2.y,
|
|
60214
|
+
z = _this$getRotation2.z;
|
|
59939
60215
|
|
|
59940
|
-
|
|
60216
|
+
return new Promise(function (resolve) {
|
|
60217
|
+
return new Between({
|
|
60218
|
+
x: x,
|
|
60219
|
+
y: y,
|
|
60220
|
+
z: z
|
|
60221
|
+
}, rotation).time(time).easing(easing).on('update', function (value) {
|
|
60222
|
+
return !_this6.isDisposed() && _this6.setRotation(value);
|
|
60223
|
+
}).on('complete', resolve);
|
|
60224
|
+
});
|
|
59941
60225
|
}
|
|
59942
60226
|
}, {
|
|
59943
|
-
key: "
|
|
59944
|
-
value: function
|
|
59945
|
-
var
|
|
59946
|
-
var shaders = this.shaders;
|
|
59947
|
-
shaders.forEach(function (shader, material) {
|
|
59948
|
-
if (shader !== null) {
|
|
59949
|
-
var uniforms = shader.uniforms;
|
|
59950
|
-
this.getExtendedBreaks(uniforms.CSM_cascades.value);
|
|
59951
|
-
uniforms.cameraNear.value = this.camera.near;
|
|
59952
|
-
uniforms.shadowFar.value = far;
|
|
59953
|
-
}
|
|
60227
|
+
key: "goTo",
|
|
60228
|
+
value: function goTo() {
|
|
60229
|
+
var _this7 = this;
|
|
59954
60230
|
|
|
59955
|
-
|
|
59956
|
-
|
|
59957
|
-
|
|
59958
|
-
} else if (this.fade && !('CSM_FADE' in material.defines)) {
|
|
59959
|
-
material.defines.CSM_FADE = '';
|
|
59960
|
-
material.needsUpdate = true;
|
|
59961
|
-
}
|
|
59962
|
-
}, this);
|
|
59963
|
-
}
|
|
59964
|
-
}, {
|
|
59965
|
-
key: "getExtendedBreaks",
|
|
59966
|
-
value: function getExtendedBreaks(target) {
|
|
59967
|
-
while (target.length < this.breaks.length) {
|
|
59968
|
-
target.push(new Vector2());
|
|
59969
|
-
}
|
|
60231
|
+
var position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.getPosition();
|
|
60232
|
+
var time = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 250;
|
|
60233
|
+
var easing = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Between.Easing.Linear;
|
|
59970
60234
|
|
|
59971
|
-
|
|
60235
|
+
var _this$getPosition3 = this.getPosition(),
|
|
60236
|
+
x = _this$getPosition3.x,
|
|
60237
|
+
y = _this$getPosition3.y,
|
|
60238
|
+
z = _this$getPosition3.z;
|
|
59972
60239
|
|
|
59973
|
-
|
|
59974
|
-
|
|
59975
|
-
|
|
59976
|
-
|
|
59977
|
-
|
|
59978
|
-
|
|
60240
|
+
return new Promise(function (resolve) {
|
|
60241
|
+
return new Between({
|
|
60242
|
+
x: x,
|
|
60243
|
+
y: y,
|
|
60244
|
+
z: z
|
|
60245
|
+
}, position).time(time).easing(easing).on('update', function (value) {
|
|
60246
|
+
return !_this7.isDisposed() && _this7.setPosition(value);
|
|
60247
|
+
}).on('complete', resolve);
|
|
60248
|
+
});
|
|
59979
60249
|
}
|
|
59980
60250
|
}, {
|
|
59981
|
-
key: "
|
|
59982
|
-
value: function
|
|
59983
|
-
this.
|
|
59984
|
-
|
|
59985
|
-
|
|
59986
|
-
|
|
60251
|
+
key: "uuid",
|
|
60252
|
+
value: function uuid() {
|
|
60253
|
+
return this.body.uuid;
|
|
60254
|
+
}
|
|
60255
|
+
}, {
|
|
60256
|
+
key: "setId",
|
|
60257
|
+
value: function setId() {
|
|
60258
|
+
return this.body.id;
|
|
60259
|
+
}
|
|
60260
|
+
}, {
|
|
60261
|
+
key: "id",
|
|
60262
|
+
value: function id() {
|
|
60263
|
+
return this.body.id;
|
|
59987
60264
|
}
|
|
59988
60265
|
}, {
|
|
59989
|
-
key: "
|
|
59990
|
-
value: function
|
|
59991
|
-
|
|
59992
|
-
|
|
59993
|
-
}
|
|
60266
|
+
key: "setVisible",
|
|
60267
|
+
value: function setVisible() {
|
|
60268
|
+
var flag = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
|
|
60269
|
+
this.getBody().visible = flag;
|
|
59994
60270
|
}
|
|
59995
60271
|
}, {
|
|
59996
|
-
key: "
|
|
59997
|
-
value: function
|
|
59998
|
-
|
|
59999
|
-
|
|
60000
|
-
|
|
60001
|
-
|
|
60002
|
-
|
|
60003
|
-
delete material.defines.CSM_FADE;
|
|
60004
|
-
|
|
60005
|
-
if (shader !== null) {
|
|
60006
|
-
delete shader.uniforms.CSM_cascades;
|
|
60007
|
-
delete shader.uniforms.cameraNear;
|
|
60008
|
-
delete shader.uniforms.shadowFar;
|
|
60009
|
-
}
|
|
60010
|
-
|
|
60011
|
-
material.needsUpdate = true;
|
|
60012
|
-
});
|
|
60013
|
-
shaders.clear();
|
|
60014
|
-
}
|
|
60015
|
-
}]);
|
|
60016
|
-
|
|
60017
|
-
return CascadeShadowMaps;
|
|
60018
|
-
}();var POINTLIGHT = 'pointlight';
|
|
60019
|
-
var AMBIENTLIGHT = 'ambientlight';
|
|
60020
|
-
var SUNLIGHT = 'sunlight';
|
|
60021
|
-
var SPOTLIGHT = 'spotlight';
|
|
60022
|
-
var HEMISPHERELIGHT = 'hemisphere';
|
|
60023
|
-
var TIME_TO_UPDATE = 5;
|
|
60024
|
-
var Lights = /*#__PURE__*/function () {
|
|
60025
|
-
function Lights() {
|
|
60026
|
-
_classCallCheck(this, Lights);
|
|
60027
|
-
|
|
60028
|
-
this.delayFactor = 0.1;
|
|
60029
|
-
this.delayStep = 30;
|
|
60030
|
-
this.holderRadius = 0.01;
|
|
60031
|
-
this.holderSegments = 1;
|
|
60032
|
-
this.numLights = 0;
|
|
60033
|
-
this.map = {};
|
|
60034
|
-
this.lights = [];
|
|
60035
|
-
this.csm = undefined;
|
|
60036
|
-
}
|
|
60037
|
-
|
|
60038
|
-
_createClass(Lights, [{
|
|
60039
|
-
key: "isUsingCSM",
|
|
60040
|
-
value: function isUsingCSM() {
|
|
60041
|
-
return !!this.csm;
|
|
60272
|
+
key: "equals",
|
|
60273
|
+
value: function equals(entity) {
|
|
60274
|
+
try {
|
|
60275
|
+
return entity.uuid ? this.uuid() === entity.uuid() : false;
|
|
60276
|
+
} catch (e) {
|
|
60277
|
+
return false;
|
|
60278
|
+
}
|
|
60042
60279
|
}
|
|
60043
60280
|
}, {
|
|
60044
|
-
key: "
|
|
60045
|
-
value: function
|
|
60046
|
-
|
|
60047
|
-
this.csm = new CascadeShadowMaps(options);
|
|
60281
|
+
key: "setName",
|
|
60282
|
+
value: function setName(name) {
|
|
60283
|
+
this.name = name;
|
|
60048
60284
|
}
|
|
60049
60285
|
}, {
|
|
60050
|
-
key: "
|
|
60051
|
-
value: function
|
|
60052
|
-
this.
|
|
60286
|
+
key: "getName",
|
|
60287
|
+
value: function getName() {
|
|
60288
|
+
return this.name;
|
|
60053
60289
|
}
|
|
60054
60290
|
}, {
|
|
60055
|
-
key: "
|
|
60056
|
-
value: function
|
|
60057
|
-
if (this.
|
|
60058
|
-
|
|
60291
|
+
key: "setData",
|
|
60292
|
+
value: function setData(key, value) {
|
|
60293
|
+
if (this.getBody().userData) {
|
|
60294
|
+
if (key && value) {
|
|
60295
|
+
this.getBody().userData[key] = value;
|
|
60296
|
+
} else {
|
|
60297
|
+
console.log(KEY_VALUE_IS_MISSING);
|
|
60298
|
+
}
|
|
60299
|
+
} else {
|
|
60300
|
+
console.log(USER_DATA_IS_MISSING);
|
|
60059
60301
|
}
|
|
60060
|
-
|
|
60061
|
-
|
|
60062
|
-
|
|
60063
|
-
|
|
60064
|
-
|
|
60065
|
-
|
|
60066
|
-
|
|
60302
|
+
}
|
|
60303
|
+
}, {
|
|
60304
|
+
key: "getData",
|
|
60305
|
+
value: function getData(key) {
|
|
60306
|
+
if (this.getBody().userData) {
|
|
60307
|
+
if (key) {
|
|
60308
|
+
return this.getBody().userData[key];
|
|
60309
|
+
} else {
|
|
60310
|
+
console.log(KEY_IS_MISSING);
|
|
60311
|
+
}
|
|
60312
|
+
} else {
|
|
60313
|
+
console.log(USER_DATA_IS_MISSING);
|
|
60067
60314
|
}
|
|
60068
60315
|
}
|
|
60316
|
+
}, {
|
|
60317
|
+
key: "mapScriptsToJSON",
|
|
60318
|
+
value: function mapScriptsToJSON() {
|
|
60319
|
+
this.scripts.reduce(function (acc, _ref7) {
|
|
60320
|
+
var name = _ref7.name,
|
|
60321
|
+
_ref7$options = _ref7.options,
|
|
60322
|
+
options = _ref7$options === void 0 ? {} : _ref7$options;
|
|
60323
|
+
acc.names.push(name);
|
|
60324
|
+
acc.options.push(options);
|
|
60325
|
+
return acc;
|
|
60326
|
+
}, {
|
|
60327
|
+
names: [],
|
|
60328
|
+
options: []
|
|
60329
|
+
});
|
|
60330
|
+
}
|
|
60069
60331
|
}, {
|
|
60070
60332
|
key: "toJSON",
|
|
60071
60333
|
value: function toJSON() {
|
|
60072
|
-
|
|
60073
|
-
|
|
60074
|
-
|
|
60075
|
-
|
|
60076
|
-
|
|
60334
|
+
if (this.isSerializable()) {
|
|
60335
|
+
return {
|
|
60336
|
+
position: this.getPosition(),
|
|
60337
|
+
rotation: this.getRotation(),
|
|
60338
|
+
scale: this.getScale(),
|
|
60339
|
+
entityType: this.getEntityType(),
|
|
60340
|
+
scripts: this.mapScriptsToJSON(),
|
|
60341
|
+
tags: this.getTags()
|
|
60342
|
+
};
|
|
60343
|
+
}
|
|
60077
60344
|
}
|
|
60078
|
-
}]
|
|
60079
|
-
|
|
60080
|
-
|
|
60081
|
-
}
|
|
60082
|
-
|
|
60083
|
-
uniforms: {
|
|
60084
|
-
"uDirLightPos": {
|
|
60085
|
-
type: "v3",
|
|
60086
|
-
value: new Vector3$1()
|
|
60087
|
-
},
|
|
60088
|
-
"uDirLightColor": {
|
|
60089
|
-
type: "c",
|
|
60090
|
-
value: new Color$1(0xffffff)
|
|
60091
|
-
},
|
|
60092
|
-
"uMaterialColor": {
|
|
60093
|
-
type: "c",
|
|
60094
|
-
value: new Color$1(0xffffff)
|
|
60095
|
-
},
|
|
60096
|
-
uKd: {
|
|
60097
|
-
type: "f",
|
|
60098
|
-
value: 1
|
|
60099
|
-
},
|
|
60100
|
-
uBorder: {
|
|
60101
|
-
type: "f",
|
|
60102
|
-
value: 0.4
|
|
60345
|
+
}], [{
|
|
60346
|
+
key: "create",
|
|
60347
|
+
value: function create() {
|
|
60348
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
60349
|
+
return new this(options);
|
|
60103
60350
|
}
|
|
60104
|
-
}
|
|
60105
|
-
vertexShader: ["varying vec3 vNormal;", "varying vec3 vViewPosition;", "void main() {", "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", "vNormal = normalize( normalMatrix * normal );", "vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );", "vViewPosition = -mvPosition.xyz;", "}"].join("\n"),
|
|
60106
|
-
fragmentShader: ["uniform vec3 uMaterialColor;", "uniform vec3 uDirLightPos;", "uniform vec3 uDirLightColor;", "uniform float uKd;", "uniform float uBorder;", "varying vec3 vNormal;", "varying vec3 vViewPosition;", "void main() {", // compute direction to light
|
|
60107
|
-
"vec4 lDirection = viewMatrix * vec4( uDirLightPos, 0.0 );", "vec3 lVector = normalize( lDirection.xyz );", // diffuse: N * L. Normal must be normalized, since it's interpolated.
|
|
60108
|
-
"vec3 normal = normalize( vNormal );", //was: "float diffuse = max( dot( normal, lVector ), 0.0);",
|
|
60109
|
-
// solution
|
|
60110
|
-
"float diffuse = dot( normal, lVector );", "if ( diffuse > 0.6 ) { diffuse = 1.0; }", "else if ( diffuse > -0.2 ) { diffuse = 0.7; }", "else { diffuse = 0.3; }", "gl_FragColor = vec4( uKd * uMaterialColor * uDirLightColor * diffuse, 1.0 );", "}"].join("\n")
|
|
60111
|
-
};
|
|
60351
|
+
}]);
|
|
60112
60352
|
|
|
60113
|
-
|
|
60114
|
-
|
|
60353
|
+
return Entity;
|
|
60354
|
+
}(EventDispatcher);var AnimationHandler = /*#__PURE__*/function (_EventDispatcher) {
|
|
60355
|
+
_inherits(AnimationHandler, _EventDispatcher);
|
|
60115
60356
|
|
|
60116
|
-
var _super = _createSuper(
|
|
60357
|
+
var _super = _createSuper(AnimationHandler);
|
|
60117
60358
|
|
|
60118
|
-
function
|
|
60359
|
+
function AnimationHandler(mesh) {
|
|
60119
60360
|
var _this;
|
|
60120
60361
|
|
|
60121
|
-
var
|
|
60122
|
-
light = _ref$light === void 0 ? {} : _ref$light,
|
|
60123
|
-
color = _ref.color;
|
|
60362
|
+
var animations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
60124
60363
|
|
|
60125
|
-
_classCallCheck(this,
|
|
60364
|
+
_classCallCheck(this, AnimationHandler);
|
|
60126
60365
|
|
|
60127
|
-
|
|
60128
|
-
var vertexShader = ToonShader.vertexShader,
|
|
60129
|
-
fragmentShader = ToonShader.fragmentShader;
|
|
60130
|
-
_this = _super.call(this, {
|
|
60131
|
-
uniforms: uniforms,
|
|
60132
|
-
vertexShader: vertexShader,
|
|
60133
|
-
fragmentShader: fragmentShader,
|
|
60134
|
-
flatShading: true
|
|
60135
|
-
});
|
|
60136
|
-
var position = light.position,
|
|
60137
|
-
lightColor = light.color;
|
|
60366
|
+
_this = _super.call(this);
|
|
60138
60367
|
|
|
60139
|
-
|
|
60140
|
-
|
|
60368
|
+
_defineProperty$1(_assertThisInitialized(_this), "getAnimationEventHandler", function (type) {
|
|
60369
|
+
return function (_ref) {
|
|
60370
|
+
var action = _ref.action,
|
|
60371
|
+
direction = _ref.direction;
|
|
60141
60372
|
|
|
60142
|
-
|
|
60143
|
-
|
|
60373
|
+
_this.dispatchEvent({
|
|
60374
|
+
type: type,
|
|
60375
|
+
action: action,
|
|
60376
|
+
direction: direction
|
|
60377
|
+
});
|
|
60378
|
+
};
|
|
60379
|
+
});
|
|
60144
60380
|
|
|
60145
|
-
_this.
|
|
60381
|
+
_this.mixer = new AnimationMixer(mesh);
|
|
60382
|
+
_this.animations = animations;
|
|
60383
|
+
_this.isPlaying = false;
|
|
60146
60384
|
|
|
60147
|
-
_this.
|
|
60385
|
+
_this.addEventsListeners();
|
|
60148
60386
|
|
|
60149
|
-
_this.side = DoubleSide;
|
|
60150
60387
|
return _this;
|
|
60151
60388
|
}
|
|
60152
60389
|
|
|
60153
|
-
|
|
60154
|
-
|
|
60155
|
-
|
|
60156
|
-
|
|
60157
|
-
|
|
60158
|
-
|
|
60159
|
-
|
|
60160
|
-
|
|
60390
|
+
_createClass(AnimationHandler, [{
|
|
60391
|
+
key: "addEventsListeners",
|
|
60392
|
+
value: function addEventsListeners() {
|
|
60393
|
+
this.mixer.addEventListener('loop', this.getAnimationEventHandler(ENTITY_EVENTS.ANIMATION.LOOP));
|
|
60394
|
+
this.mixer.addEventListener('finished', this.getAnimationEventHandler(ENTITY_EVENTS.ANIMATION.FINISHED));
|
|
60395
|
+
}
|
|
60396
|
+
}, {
|
|
60397
|
+
key: "getAction",
|
|
60398
|
+
value: function getAction(id) {
|
|
60399
|
+
var action;
|
|
60161
60400
|
|
|
60162
|
-
|
|
60163
|
-
|
|
60164
|
-
if (
|
|
60165
|
-
|
|
60401
|
+
if (typeof id === 'number') {
|
|
60402
|
+
action = this.animations[id];
|
|
60403
|
+
} else if (typeof id === 'string') {
|
|
60404
|
+
action = AnimationClip.findByName(this.animations, id);
|
|
60166
60405
|
}
|
|
60167
60406
|
|
|
60168
|
-
|
|
60169
|
-
|
|
60407
|
+
return action;
|
|
60408
|
+
}
|
|
60409
|
+
}, {
|
|
60410
|
+
key: "getAvailableAnimations",
|
|
60411
|
+
value: function getAvailableAnimations() {
|
|
60412
|
+
return this.animations.map(function (_ref2) {
|
|
60413
|
+
var name = _ref2.name;
|
|
60414
|
+
return name;
|
|
60415
|
+
});
|
|
60416
|
+
}
|
|
60417
|
+
}, {
|
|
60418
|
+
key: "stopAll",
|
|
60419
|
+
value: function stopAll() {
|
|
60420
|
+
this.mixer.stopAllAction();
|
|
60421
|
+
this.isPlaying = false;
|
|
60422
|
+
}
|
|
60423
|
+
}, {
|
|
60424
|
+
key: "stopCurrentAnimation",
|
|
60425
|
+
value: function stopCurrentAnimation() {
|
|
60426
|
+
if (this.currentAction) {
|
|
60427
|
+
this.currentAction.stop();
|
|
60170
60428
|
}
|
|
60171
60429
|
|
|
60172
|
-
|
|
60173
|
-
}
|
|
60174
|
-
|
|
60175
|
-
|
|
60176
|
-
|
|
60177
|
-
|
|
60178
|
-
|
|
60179
|
-
|
|
60180
|
-
|
|
60181
|
-
};
|
|
60182
|
-
var hasGeometry = function hasGeometry(mesh) {
|
|
60183
|
-
return Boolean(mesh.geometry);
|
|
60184
|
-
};
|
|
60185
|
-
var processMaterial = function processMaterial(material, callback) {
|
|
60186
|
-
return Array.isArray(material) ? material.map(callback) : callback(material);
|
|
60187
|
-
};
|
|
60188
|
-
var changeMaterialByName = function changeMaterialByName(name, mesh, materialOptions) {
|
|
60189
|
-
if (!hasMaterial(mesh)) return;
|
|
60190
|
-
|
|
60191
|
-
switch (name) {
|
|
60192
|
-
case MATERIALS.LAMBERT:
|
|
60193
|
-
return cloneMaterial(MeshLambertMaterial, mesh, materialOptions);
|
|
60194
|
-
|
|
60195
|
-
case MATERIALS.PHONG:
|
|
60196
|
-
return cloneMaterial(MeshPhongMaterial, mesh, materialOptions);
|
|
60197
|
-
|
|
60198
|
-
case MATERIALS.DEPTH:
|
|
60199
|
-
return cloneMaterial(MeshDepthMaterial, mesh, materialOptions);
|
|
60200
|
-
|
|
60201
|
-
case MATERIALS.STANDARD:
|
|
60202
|
-
return cloneMaterial(MeshStandardMaterial, mesh, materialOptions);
|
|
60203
|
-
|
|
60204
|
-
case MATERIALS.TOON:
|
|
60205
|
-
return cloneMaterial(ToonMaterial, mesh, materialOptions);
|
|
60206
|
-
|
|
60207
|
-
case MATERIALS.THREE_TOON:
|
|
60208
|
-
return cloneMaterial(MeshToonMaterial, mesh, materialOptions);
|
|
60209
|
-
|
|
60210
|
-
case MATERIALS.BASIC:
|
|
60211
|
-
default:
|
|
60212
|
-
return cloneMaterial(MeshBasicMaterial, mesh, materialOptions);
|
|
60213
|
-
}
|
|
60214
|
-
};
|
|
60430
|
+
this.isPlaying = false;
|
|
60431
|
+
}
|
|
60432
|
+
}, {
|
|
60433
|
+
key: "playAnimation",
|
|
60434
|
+
value: function playAnimation(id, options) {
|
|
60435
|
+
var action = this.getAction(id);
|
|
60436
|
+
var _options$loop = options.loop,
|
|
60437
|
+
loop = _options$loop === void 0 ? LoopRepeat : _options$loop;
|
|
60438
|
+
this.isPlaying = true;
|
|
60215
60439
|
|
|
60216
|
-
|
|
60217
|
-
|
|
60440
|
+
if (this.currentAction) {
|
|
60441
|
+
this.fadeToAnimation(action, options);
|
|
60442
|
+
} else if (action) {
|
|
60443
|
+
this.currentAction = this.mixer.clipAction(action).setLoop(loop).play();
|
|
60444
|
+
} else {
|
|
60445
|
+
console.warn(ANIMATION_NOT_FOUND);
|
|
60446
|
+
}
|
|
60447
|
+
}
|
|
60448
|
+
}, {
|
|
60449
|
+
key: "fadeToAnimation",
|
|
60450
|
+
value: function fadeToAnimation(action) {
|
|
60451
|
+
var _ref3 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
|
|
60452
|
+
_ref3$duration = _ref3.duration,
|
|
60453
|
+
duration = _ref3$duration === void 0 ? 0.2 : _ref3$duration,
|
|
60454
|
+
_ref3$loop = _ref3.loop,
|
|
60455
|
+
loop = _ref3$loop === void 0 ? LoopRepeat : _ref3$loop;
|
|
60218
60456
|
|
|
60219
|
-
|
|
60220
|
-
|
|
60221
|
-
var newMaterial = new MeshMaterial(_objectSpread2$1({
|
|
60222
|
-
map: clone.map,
|
|
60223
|
-
color: clone.color
|
|
60224
|
-
}, options));
|
|
60225
|
-
newMaterial.skinning = true;
|
|
60226
|
-
return newMaterial;
|
|
60227
|
-
};
|
|
60457
|
+
var previousAction = this.currentAction;
|
|
60458
|
+
this.currentAction = this.mixer.clipAction(action);
|
|
60228
60459
|
|
|
60229
|
-
|
|
60230
|
-
|
|
60231
|
-
}
|
|
60460
|
+
if (previousAction !== this.currentAction) {
|
|
60461
|
+
previousAction.fadeOut(duration);
|
|
60462
|
+
}
|
|
60232
60463
|
|
|
60233
|
-
|
|
60234
|
-
|
|
60235
|
-
|
|
60236
|
-
|
|
60237
|
-
|
|
60464
|
+
this.currentAction.reset().setEffectiveTimeScale(1).setEffectiveWeight(1).fadeIn(duration).setLoop(loop).play();
|
|
60465
|
+
}
|
|
60466
|
+
}, {
|
|
60467
|
+
key: "update",
|
|
60468
|
+
value: function update(dt) {
|
|
60469
|
+
this.mixer.update(dt);
|
|
60470
|
+
}
|
|
60471
|
+
}]);
|
|
60238
60472
|
|
|
60239
|
-
|
|
60240
|
-
|
|
60241
|
-
};
|
|
60242
|
-
var disposeMaterial = function disposeMaterial(mesh) {
|
|
60243
|
-
if (hasMaterial(mesh)) {
|
|
60244
|
-
mesh.material.dispose();
|
|
60245
|
-
}
|
|
60246
|
-
};
|
|
60247
|
-
var disposeGeometry = function disposeGeometry(mesh) {
|
|
60248
|
-
if (hasGeometry(mesh)) {
|
|
60249
|
-
mesh.geometry.dispose();
|
|
60250
|
-
}
|
|
60251
|
-
};
|
|
60252
|
-
var prepareModel = function prepareModel(model) {
|
|
60253
|
-
setUpLightsAndShadows(model);
|
|
60254
|
-
model.traverse(function (mesh) {
|
|
60255
|
-
setUpLightsAndShadows(mesh);
|
|
60256
|
-
});
|
|
60257
|
-
return model;
|
|
60258
|
-
};var _MATERIAL_TEXTURE_MAP;
|
|
60473
|
+
return AnimationHandler;
|
|
60474
|
+
}(EventDispatcher);var _MATERIAL_TEXTURE_MAP;
|
|
60259
60475
|
var MATERIAL_TEXTURE_MAP = (_MATERIAL_TEXTURE_MAP = {}, _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.BASIC, [TEXTURES.ALPHA, TEXTURES.AO, TEXTURES.ENV, TEXTURES.LIGHT, TEXTURES.MAP, TEXTURES.SPECULAR]), _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.LAMBERT, [TEXTURES.ALPHA, TEXTURES.AO, TEXTURES.ENV, TEXTURES.LIGHT, TEXTURES.MAP, TEXTURES.SPECULAR, TEXTURES.EMISSIVE]), _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.PHONG, [TEXTURES.ALPHA, TEXTURES.AO, TEXTURES.ENV, TEXTURES.LIGHT, TEXTURES.MAP, TEXTURES.SPECULAR, TEXTURES.EMISSIVE, TEXTURES.BUMP, TEXTURES.DISPLACEMENT, TEXTURES.NORMAL]), _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.DEPTH, [TEXTURES.ALPHA, TEXTURES.MAP, TEXTURES.DISPLACEMENT]), _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.STANDARD, [TEXTURES.ALPHA, TEXTURES.AO, TEXTURES.ENV, TEXTURES.LIGHT, TEXTURES.MAP, TEXTURES.EMISSIVE, TEXTURES.BUMP, TEXTURES.DISPLACEMENT, TEXTURES.NORMAL, TEXTURES.METALNESS, TEXTURES.ROUGHNESS]), _defineProperty$1(_MATERIAL_TEXTURE_MAP, MATERIALS.THREE_TOON, [TEXTURES.ALPHA, TEXTURES.AO, TEXTURES.BUMP, TEXTURES.DISPLACEMENT, TEXTURES.EMISSIVE, TEXTURES.GRADIENT, TEXTURES.LIGHT, TEXTURES.MAP, TEXTURES.NORMAL]), _MATERIAL_TEXTURE_MAP);
|
|
60260
60476
|
var isTextureMapAllowedForMaterial = function isTextureMapAllowedForMaterial(materialType, textureType) {
|
|
60261
60477
|
return MATERIAL_TEXTURE_MAP[materialType] && MATERIAL_TEXTURE_MAP[materialType].includes(textureType);
|
|
60262
|
-
};var _excluded$
|
|
60478
|
+
};var _excluded$5 = ["position", "quaternion"],
|
|
60263
60479
|
_excluded2 = ["applyPhysicsUpdate"],
|
|
60264
60480
|
_excluded3 = ["dt", "event"];
|
|
60265
60481
|
var COLLIDER_TAG = 'collider';
|
|
@@ -60286,30 +60502,6 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
60286
60502
|
|
|
60287
60503
|
_this = _super.call(this, _options);
|
|
60288
60504
|
|
|
60289
|
-
_defineProperty$1(_assertThisInitialized(_this), "getBodyByName", function (name) {
|
|
60290
|
-
if (name) {
|
|
60291
|
-
if (_this.hasBody()) {
|
|
60292
|
-
return _this.body.getObjectByName(name);
|
|
60293
|
-
} else {
|
|
60294
|
-
var body;
|
|
60295
|
-
|
|
60296
|
-
_this.body.traverse(function (element) {
|
|
60297
|
-
if (element.name === name) {
|
|
60298
|
-
body = element;
|
|
60299
|
-
}
|
|
60300
|
-
});
|
|
60301
|
-
|
|
60302
|
-
if (body) {
|
|
60303
|
-
return body;
|
|
60304
|
-
}
|
|
60305
|
-
|
|
60306
|
-
console.warn(ELEMENT_NOT_SET$1);
|
|
60307
|
-
}
|
|
60308
|
-
} else {
|
|
60309
|
-
console.warn(ELEMENT_NAME_NOT_PROVIDED);
|
|
60310
|
-
}
|
|
60311
|
-
});
|
|
60312
|
-
|
|
60313
60505
|
_defineProperty$1(_assertThisInitialized(_this), "handleAnimationHandlerEvents", function (e) {
|
|
60314
60506
|
_this.dispatchEvent(e);
|
|
60315
60507
|
});
|
|
@@ -60473,7 +60665,7 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
60473
60665
|
_defineProperty$1(_assertThisInitialized(_this), "handlePhysicsUpdate", function (_ref6) {
|
|
60474
60666
|
var position = _ref6.position,
|
|
60475
60667
|
quaternion = _ref6.quaternion,
|
|
60476
|
-
data = _objectWithoutProperties(_ref6, _excluded$
|
|
60668
|
+
data = _objectWithoutProperties(_ref6, _excluded$5);
|
|
60477
60669
|
|
|
60478
60670
|
_this.setPosition(position);
|
|
60479
60671
|
|
|
@@ -60491,15 +60683,14 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
60491
60683
|
});
|
|
60492
60684
|
|
|
60493
60685
|
var _options$name = _options.name,
|
|
60494
|
-
|
|
60686
|
+
name = _options$name === void 0 ? "default_".concat(Math.random()) : _options$name,
|
|
60495
60687
|
geometry = _options.geometry,
|
|
60496
60688
|
material = _options.material,
|
|
60497
60689
|
_body = _options.body;
|
|
60498
|
-
|
|
60499
60690
|
_this.textures = {};
|
|
60500
60691
|
_this.opacity = 1;
|
|
60501
60692
|
_this.options = _objectSpread2$1(_objectSpread2$1({}, _options), {}, {
|
|
60502
|
-
name:
|
|
60693
|
+
name: name
|
|
60503
60694
|
});
|
|
60504
60695
|
_this.physicsOptions = DEFAULT_PHYSICS_OPTIONS;
|
|
60505
60696
|
_this.physicsState = {};
|
|
@@ -60950,7 +61141,7 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
60950
61141
|
|
|
60951
61142
|
return new Promise(function (resolve) {
|
|
60952
61143
|
return new Between(_this4.opacity, opacity).time(time).on('update', function (value) {
|
|
60953
|
-
return _this4.setOpacity(value);
|
|
61144
|
+
return !_this4.isDisposed() && _this4.setOpacity(value);
|
|
60954
61145
|
}).on('complete', resolve);
|
|
60955
61146
|
});
|
|
60956
61147
|
}
|
|
@@ -60987,19 +61178,21 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
60987
61178
|
}, {
|
|
60988
61179
|
key: "disposeBody",
|
|
60989
61180
|
value: function disposeBody() {
|
|
60990
|
-
|
|
61181
|
+
_get(_getPrototypeOf(Element.prototype), "disposeBody", this).call(this);
|
|
61182
|
+
|
|
61183
|
+
if (hasMaterial(this.getBody())) {
|
|
60991
61184
|
disposeTextures(this.getBody());
|
|
60992
61185
|
disposeMaterial(this.getBody());
|
|
60993
61186
|
disposeGeometry(this.getBody());
|
|
60994
|
-
} else {
|
|
60995
|
-
this.body.traverse(function (child) {
|
|
60996
|
-
if (hasMaterial(child)) {
|
|
60997
|
-
disposeTextures(child);
|
|
60998
|
-
disposeMaterial(child);
|
|
60999
|
-
disposeGeometry(child);
|
|
61000
|
-
}
|
|
61001
|
-
});
|
|
61002
61187
|
}
|
|
61188
|
+
|
|
61189
|
+
this.getBody().traverse(function (child) {
|
|
61190
|
+
if (hasMaterial(child)) {
|
|
61191
|
+
disposeTextures(child);
|
|
61192
|
+
disposeMaterial(child);
|
|
61193
|
+
disposeGeometry(child);
|
|
61194
|
+
}
|
|
61195
|
+
});
|
|
61003
61196
|
}
|
|
61004
61197
|
}, {
|
|
61005
61198
|
key: "update",
|
|
@@ -61011,7 +61204,7 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
61011
61204
|
this.checkCollisions();
|
|
61012
61205
|
}
|
|
61013
61206
|
|
|
61014
|
-
if (this.hasAnimationHandler() && this.animationHandler.
|
|
61207
|
+
if (this.hasAnimationHandler() && this.animationHandler.isPlaying) {
|
|
61015
61208
|
this.animationHandler.update(dt);
|
|
61016
61209
|
}
|
|
61017
61210
|
}
|
|
@@ -61020,11 +61213,6 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
61020
61213
|
value: function dispose() {
|
|
61021
61214
|
_get(_getPrototypeOf(Element.prototype), "dispose", this).call(this);
|
|
61022
61215
|
|
|
61023
|
-
if (this.hasBody()) {
|
|
61024
|
-
Scene$1.remove(this.getBody());
|
|
61025
|
-
this.disposeBody();
|
|
61026
|
-
}
|
|
61027
|
-
|
|
61028
61216
|
if (this.hasAnimationHandler()) {
|
|
61029
61217
|
this.removeAnimationHandlerListeners();
|
|
61030
61218
|
}
|
|
@@ -61034,10 +61222,9 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
61034
61222
|
}, {
|
|
61035
61223
|
key: "toJSON",
|
|
61036
61224
|
value: function toJSON() {
|
|
61037
|
-
if (this.
|
|
61225
|
+
if (this.isSerializable()) {
|
|
61038
61226
|
return _objectSpread2$1(_objectSpread2$1({}, _get(_getPrototypeOf(Element.prototype), "toJSON", this).call(this)), {}, {
|
|
61039
61227
|
body: this.body.toJSON(),
|
|
61040
|
-
scripts: this.mapScriptsToJSON(),
|
|
61041
61228
|
textures: this.textures
|
|
61042
61229
|
}, this.options);
|
|
61043
61230
|
}
|
|
@@ -61152,6 +61339,95 @@ var Element = /*#__PURE__*/function (_Entity) {
|
|
|
61152
61339
|
}]);
|
|
61153
61340
|
|
|
61154
61341
|
return Grid;
|
|
61342
|
+
}(Element);var AxesHelper = /*#__PURE__*/function (_LineSegments) {
|
|
61343
|
+
_inherits(AxesHelper, _LineSegments);
|
|
61344
|
+
|
|
61345
|
+
var _super = _createSuper(AxesHelper);
|
|
61346
|
+
|
|
61347
|
+
function AxesHelper() {
|
|
61348
|
+
var _this;
|
|
61349
|
+
|
|
61350
|
+
var size = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;
|
|
61351
|
+
var thickness = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;
|
|
61352
|
+
|
|
61353
|
+
_classCallCheck(this, AxesHelper);
|
|
61354
|
+
|
|
61355
|
+
var vertices = [0, 0, 0, size, 0, 0, 0, 0, 0, 0, size, 0, 0, 0, 0, 0, 0, size];
|
|
61356
|
+
var colors = [1, 0, 0, 1, 0.6, 0, 0, 1, 0, 0.6, 1, 0, 0, 0, 1, 0, 0.6, 1];
|
|
61357
|
+
var geometry = new BufferGeometry();
|
|
61358
|
+
geometry.setAttribute('position', new Float32BufferAttribute(vertices, 3));
|
|
61359
|
+
geometry.setAttribute('color', new Float32BufferAttribute(colors, 3));
|
|
61360
|
+
var material = new LineBasicMaterial({
|
|
61361
|
+
vertexColors: true,
|
|
61362
|
+
toneMapped: false,
|
|
61363
|
+
linewidth: thickness
|
|
61364
|
+
});
|
|
61365
|
+
_this = _super.call(this, geometry, material);
|
|
61366
|
+
_this.type = 'AxesHelper';
|
|
61367
|
+
return _this;
|
|
61368
|
+
}
|
|
61369
|
+
|
|
61370
|
+
_createClass(AxesHelper, [{
|
|
61371
|
+
key: "setColors",
|
|
61372
|
+
value: function setColors(xAxisColor, yAxisColor, zAxisColor) {
|
|
61373
|
+
var color = new Color$1();
|
|
61374
|
+
var array = this.geometry.attributes.color.array;
|
|
61375
|
+
color.set(xAxisColor);
|
|
61376
|
+
color.toArray(array, 0);
|
|
61377
|
+
color.toArray(array, 3);
|
|
61378
|
+
color.set(yAxisColor);
|
|
61379
|
+
color.toArray(array, 6);
|
|
61380
|
+
color.toArray(array, 9);
|
|
61381
|
+
color.set(zAxisColor);
|
|
61382
|
+
color.toArray(array, 12);
|
|
61383
|
+
color.toArray(array, 15);
|
|
61384
|
+
this.geometry.attributes.color.needsUpdate = true;
|
|
61385
|
+
return this;
|
|
61386
|
+
}
|
|
61387
|
+
}, {
|
|
61388
|
+
key: "dispose",
|
|
61389
|
+
value: function dispose() {
|
|
61390
|
+
this.geometry.dispose();
|
|
61391
|
+
this.material.dispose();
|
|
61392
|
+
}
|
|
61393
|
+
}]);
|
|
61394
|
+
|
|
61395
|
+
return AxesHelper;
|
|
61396
|
+
}(LineSegments);
|
|
61397
|
+
|
|
61398
|
+
var Axes = /*#__PURE__*/function (_Element) {
|
|
61399
|
+
_inherits(Axes, _Element);
|
|
61400
|
+
|
|
61401
|
+
var _super2 = _createSuper(Axes);
|
|
61402
|
+
|
|
61403
|
+
function Axes(size, thickness) {
|
|
61404
|
+
var _this2;
|
|
61405
|
+
|
|
61406
|
+
_classCallCheck(this, Axes);
|
|
61407
|
+
|
|
61408
|
+
var options = {
|
|
61409
|
+
size: size,
|
|
61410
|
+
thickness: thickness,
|
|
61411
|
+
name: "AxesHelper_".concat(Math.random())
|
|
61412
|
+
};
|
|
61413
|
+
_this2 = _super2.call(this, options);
|
|
61414
|
+
var body = new AxesHelper(size, thickness);
|
|
61415
|
+
|
|
61416
|
+
_this2.setBody({
|
|
61417
|
+
body: body
|
|
61418
|
+
});
|
|
61419
|
+
|
|
61420
|
+
_this2.setEntityType(ENTITY_TYPES.HELPER.AXES);
|
|
61421
|
+
|
|
61422
|
+
return _this2;
|
|
61423
|
+
}
|
|
61424
|
+
|
|
61425
|
+
_createClass(Axes, [{
|
|
61426
|
+
key: "update",
|
|
61427
|
+
value: function update() {}
|
|
61428
|
+
}]);
|
|
61429
|
+
|
|
61430
|
+
return Axes;
|
|
61155
61431
|
}(Element);var Cube = /*#__PURE__*/function (_Element) {
|
|
61156
61432
|
_inherits(Cube, _Element);
|
|
61157
61433
|
|
|
@@ -61481,7 +61757,7 @@ var Plane = /*#__PURE__*/function (_Element) {
|
|
|
61481
61757
|
}
|
|
61482
61758
|
|
|
61483
61759
|
return Box;
|
|
61484
|
-
}(Element);var _excluded$
|
|
61760
|
+
}(Element);var _excluded$4 = ["anisotropy"];
|
|
61485
61761
|
|
|
61486
61762
|
var validateAnisotropy = function validateAnisotropy(anisotropy) {
|
|
61487
61763
|
var max = Scene$1.getRenderer().capabilities.getMaxAnisotropy();
|
|
@@ -61507,7 +61783,7 @@ var Sprite = /*#__PURE__*/function (_Element) {
|
|
|
61507
61783
|
|
|
61508
61784
|
var _options$anisotropy = options.anisotropy,
|
|
61509
61785
|
anisotropy = _options$anisotropy === void 0 ? 1 : _options$anisotropy,
|
|
61510
|
-
rest = _objectWithoutProperties(options, _excluded$
|
|
61786
|
+
rest = _objectWithoutProperties(options, _excluded$4);
|
|
61511
61787
|
|
|
61512
61788
|
var texture = Images$1.get(spriteTexture);
|
|
61513
61789
|
texture.anisotropy = validateAnisotropy(anisotropy);
|
|
@@ -72487,7 +72763,9 @@ var colladaParser = function colladaParser(_ref3) {
|
|
|
72487
72763
|
var fbxParser = function fbxParser(scene) {
|
|
72488
72764
|
scene.traverse(function (node) {
|
|
72489
72765
|
if (node.isSkinnedMesh) {
|
|
72490
|
-
node.material
|
|
72766
|
+
processMaterial(node.material, function (material) {
|
|
72767
|
+
return material.skinning = true;
|
|
72768
|
+
});
|
|
72491
72769
|
}
|
|
72492
72770
|
});
|
|
72493
72771
|
return {
|
|
@@ -72518,6 +72796,12 @@ var Models = function Models() {
|
|
|
72518
72796
|
|
|
72519
72797
|
_defineProperty$1(this, "getModel", function (name) {
|
|
72520
72798
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
72799
|
+
console.warn(DEPRECATIONS.MODELS_GETMODEL);
|
|
72800
|
+
return _this.get(name, options);
|
|
72801
|
+
});
|
|
72802
|
+
|
|
72803
|
+
_defineProperty$1(this, "get", function (name) {
|
|
72804
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
72521
72805
|
|
|
72522
72806
|
var _ref4 = _this.map[name] || _this.map[buildAssetId(name, _this.currentLevel)] || {},
|
|
72523
72807
|
scene = _ref4.scene,
|
|
@@ -73618,7 +73902,7 @@ var Stats$1 = new Stats();var Loader = /*#__PURE__*/function () {
|
|
|
73618
73902
|
}]);
|
|
73619
73903
|
|
|
73620
73904
|
return Loader;
|
|
73621
|
-
}();var _excluded$
|
|
73905
|
+
}();var _excluded$3 = ["mesh", "scripts", "texture"];
|
|
73622
73906
|
var MeshLoader = /*#__PURE__*/function (_Loader) {
|
|
73623
73907
|
_inherits(MeshLoader, _Loader);
|
|
73624
73908
|
|
|
@@ -73644,7 +73928,7 @@ var MeshLoader = /*#__PURE__*/function (_Loader) {
|
|
|
73644
73928
|
var mesh = _ref.mesh,
|
|
73645
73929
|
scripts = _ref.scripts,
|
|
73646
73930
|
texture = _ref.texture,
|
|
73647
|
-
opts = _objectWithoutProperties(_ref, _excluded$
|
|
73931
|
+
opts = _objectWithoutProperties(_ref, _excluded$3);
|
|
73648
73932
|
|
|
73649
73933
|
return _this.loadMesh(_this.parseMesh(mesh), scripts, texture, opts);
|
|
73650
73934
|
});
|
|
@@ -73833,7 +74117,7 @@ var Light = /*#__PURE__*/function (_Entity) {
|
|
|
73833
74117
|
var intensity = this.getIntensity();
|
|
73834
74118
|
return new Promise(function (resolve) {
|
|
73835
74119
|
return new Between(intensity, value).time(time).on('update', function (value) {
|
|
73836
|
-
return _this2.setIntensity(value);
|
|
74120
|
+
return !_this2.isDisposed() && _this2.setIntensity(value);
|
|
73837
74121
|
}).on('complete', resolve);
|
|
73838
74122
|
});
|
|
73839
74123
|
}
|
|
@@ -74079,9 +74363,11 @@ var AmbientLight = /*#__PURE__*/function (_Light) {
|
|
|
74079
74363
|
|
|
74080
74364
|
var _super = _createSuper(AmbientLight);
|
|
74081
74365
|
|
|
74082
|
-
function AmbientLight(
|
|
74366
|
+
function AmbientLight() {
|
|
74083
74367
|
var _this;
|
|
74084
74368
|
|
|
74369
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
74370
|
+
|
|
74085
74371
|
_classCallCheck(this, AmbientLight);
|
|
74086
74372
|
|
|
74087
74373
|
var _options$color = options.color,
|
|
@@ -76594,12 +76880,12 @@ var index$1=/*#__PURE__*/Object.freeze({__proto__:null,Emitter:k,Particle:P,Part
|
|
|
76594
76880
|
|
|
76595
76881
|
_this.setSystem();
|
|
76596
76882
|
|
|
76883
|
+
_this.setName(name);
|
|
76884
|
+
|
|
76597
76885
|
_this.setBody({
|
|
76598
76886
|
body: new Object3D()
|
|
76599
76887
|
});
|
|
76600
76888
|
|
|
76601
|
-
_this.setName(name);
|
|
76602
|
-
|
|
76603
76889
|
_this.setEntityType(ENTITY_TYPES.EFFECT.PARTICLE);
|
|
76604
76890
|
|
|
76605
76891
|
return _this;
|
|
@@ -76701,12 +76987,17 @@ var index$1=/*#__PURE__*/Object.freeze({__proto__:null,Emitter:k,Particle:P,Part
|
|
|
76701
76987
|
this.system.particleSystem.rotation.set(rotation.x, rotation.y, rotation.z);
|
|
76702
76988
|
}
|
|
76703
76989
|
}
|
|
76990
|
+
}, {
|
|
76991
|
+
key: "dispose",
|
|
76992
|
+
value: function dispose() {
|
|
76993
|
+
_get(_getPrototypeOf(ParticleEmitter.prototype), "dispose", this).call(this);
|
|
76994
|
+
}
|
|
76704
76995
|
}, {
|
|
76705
76996
|
key: "update",
|
|
76706
76997
|
value: function update(dt) {
|
|
76707
76998
|
_get(_getPrototypeOf(ParticleEmitter.prototype), "update", this).call(this, dt);
|
|
76708
76999
|
|
|
76709
|
-
if (this.hasSystem()) {
|
|
77000
|
+
if (this.hasSystem() && !this.isSystemDead()) {
|
|
76710
77001
|
this.system.update(dt);
|
|
76711
77002
|
}
|
|
76712
77003
|
|
|
@@ -76947,7 +77238,9 @@ var index$1=/*#__PURE__*/Object.freeze({__proto__:null,Emitter:k,Particle:P,Part
|
|
|
76947
77238
|
}]);
|
|
76948
77239
|
|
|
76949
77240
|
return ParticleEmitterGroup;
|
|
76950
|
-
}(Entity);var
|
|
77241
|
+
}(Entity);var _excluded$2 = ["initializers", "behaviours", "texture", "color", "rate"];
|
|
77242
|
+
var DEFAULT_PARTICLE_COLOR = PALETTES.BASE.BLACK;
|
|
77243
|
+
var SYSTEM_DISPOSE_TIMEOUT = 700;
|
|
76951
77244
|
|
|
76952
77245
|
var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
76953
77246
|
_inherits(ProtonParticleEmitter, _ParticleEmitter);
|
|
@@ -76955,6 +77248,8 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
76955
77248
|
var _super = _createSuper(ProtonParticleEmitter);
|
|
76956
77249
|
|
|
76957
77250
|
function ProtonParticleEmitter() {
|
|
77251
|
+
var _this;
|
|
77252
|
+
|
|
76958
77253
|
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
76959
77254
|
|
|
76960
77255
|
_classCallCheck(this, ProtonParticleEmitter);
|
|
@@ -76967,15 +77262,28 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
76967
77262
|
texture = _options$texture === void 0 ? false : _options$texture,
|
|
76968
77263
|
_options$color = options.color,
|
|
76969
77264
|
color = _options$color === void 0 ? DEFAULT_PARTICLE_COLOR : _options$color,
|
|
76970
|
-
rate = options.rate
|
|
76971
|
-
|
|
77265
|
+
rate = options.rate,
|
|
77266
|
+
rest = _objectWithoutProperties(options, _excluded$2);
|
|
77267
|
+
|
|
77268
|
+
var parsedOptions = _objectSpread2$1({
|
|
76972
77269
|
initializers: initializers,
|
|
76973
77270
|
behaviours: behaviours,
|
|
76974
77271
|
texture: texture,
|
|
76975
77272
|
color: color,
|
|
76976
77273
|
rate: rate
|
|
76977
|
-
};
|
|
76978
|
-
|
|
77274
|
+
}, rest);
|
|
77275
|
+
|
|
77276
|
+
_this = _super.call(this, parsedOptions);
|
|
77277
|
+
|
|
77278
|
+
_defineProperty$1(_assertThisInitialized(_this), "disposeSystem", function () {
|
|
77279
|
+
if (_this.hasSystem()) {
|
|
77280
|
+
_this.system.removeAllParticles();
|
|
77281
|
+
|
|
77282
|
+
_this.system.destroy();
|
|
77283
|
+
}
|
|
77284
|
+
});
|
|
77285
|
+
|
|
77286
|
+
return _this;
|
|
76979
77287
|
}
|
|
76980
77288
|
|
|
76981
77289
|
_createClass(ProtonParticleEmitter, [{
|
|
@@ -77003,7 +77311,7 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
77003
77311
|
}, {
|
|
77004
77312
|
key: "setSystem",
|
|
77005
77313
|
value: function setSystem() {
|
|
77006
|
-
var
|
|
77314
|
+
var _this2 = this;
|
|
77007
77315
|
|
|
77008
77316
|
var _this$options = this.options,
|
|
77009
77317
|
_this$options$initial = _this$options.initializers,
|
|
@@ -77016,7 +77324,7 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
77016
77324
|
this.system = new Proton.Emitter();
|
|
77017
77325
|
this.system.rate = rate;
|
|
77018
77326
|
initializers.forEach(function (initializer) {
|
|
77019
|
-
return
|
|
77327
|
+
return _this2.system.addInitialize(initializer);
|
|
77020
77328
|
});
|
|
77021
77329
|
|
|
77022
77330
|
if (texture) {
|
|
@@ -77024,7 +77332,7 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
77024
77332
|
}
|
|
77025
77333
|
|
|
77026
77334
|
behaviours.forEach(function (behaviour) {
|
|
77027
|
-
return
|
|
77335
|
+
return _this2.system.addBehaviour(behaviour);
|
|
77028
77336
|
});
|
|
77029
77337
|
}
|
|
77030
77338
|
}, {
|
|
@@ -77065,8 +77373,8 @@ var ProtonParticleEmitter = /*#__PURE__*/function (_ParticleEmitter) {
|
|
|
77065
77373
|
value: function dispose() {
|
|
77066
77374
|
_get(_getPrototypeOf(ProtonParticleEmitter.prototype), "dispose", this).call(this);
|
|
77067
77375
|
|
|
77068
|
-
this.
|
|
77069
|
-
this.
|
|
77376
|
+
this.stop();
|
|
77377
|
+
setTimeout(this.disposeSystem, SYSTEM_DISPOSE_TIMEOUT);
|
|
77070
77378
|
}
|
|
77071
77379
|
}]);
|
|
77072
77380
|
|
|
@@ -77164,7 +77472,9 @@ var Explosion = /*#__PURE__*/function (_ParticleEmitterGroup) {
|
|
|
77164
77472
|
}
|
|
77165
77473
|
|
|
77166
77474
|
return Explosion;
|
|
77167
|
-
}(ParticleEmitterGroup);var
|
|
77475
|
+
}(ParticleEmitterGroup);var _excluded$1 = ["texture", "direction", "size", "strength", "colors"];
|
|
77476
|
+
|
|
77477
|
+
var getFireRate = function getFireRate() {
|
|
77168
77478
|
return new Proton.Rate(new Proton.Span(10, 15), new Proton.Span(.05, .1));
|
|
77169
77479
|
};
|
|
77170
77480
|
|
|
@@ -77174,7 +77484,8 @@ var getFireInitializers = function getFireInitializers(direction, strength, size
|
|
|
77174
77484
|
};
|
|
77175
77485
|
|
|
77176
77486
|
var getFireBehaviours = function getFireBehaviours(direction, strength) {
|
|
77177
|
-
|
|
77487
|
+
var colors = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [PALETTES.FRENCH.MANDARIN_RED, PALETTES.FRENCH.MELON_MELODY];
|
|
77488
|
+
return [new Proton.Scale(new Proton.Span(2, 2.5), 0), new Proton.G(strength / 100), new Proton.Color(colors[0], colors[1], Infinity, Proton.easeOutSine), new Proton.RandomDrift(direction.x / 100, direction.y / 100, direction.z / 100, 2.5)];
|
|
77178
77489
|
};
|
|
77179
77490
|
|
|
77180
77491
|
var Fire = /*#__PURE__*/function (_ProtonParticleEmitte) {
|
|
@@ -77191,13 +77502,17 @@ var Fire = /*#__PURE__*/function (_ProtonParticleEmitte) {
|
|
|
77191
77502
|
_options$size = options.size,
|
|
77192
77503
|
size = _options$size === void 0 ? 20 : _options$size,
|
|
77193
77504
|
_options$strength = options.strength,
|
|
77194
|
-
strength = _options$strength === void 0 ? 100 : _options$strength
|
|
77195
|
-
|
|
77505
|
+
strength = _options$strength === void 0 ? 100 : _options$strength,
|
|
77506
|
+
colors = options.colors,
|
|
77507
|
+
rest = _objectWithoutProperties(options, _excluded$1);
|
|
77508
|
+
|
|
77509
|
+
var fireOptions = _objectSpread2$1({
|
|
77196
77510
|
rate: getFireRate(),
|
|
77197
77511
|
texture: texture,
|
|
77198
77512
|
initializers: getFireInitializers(direction, strength, size),
|
|
77199
|
-
behaviours: getFireBehaviours(direction, strength)
|
|
77200
|
-
};
|
|
77513
|
+
behaviours: getFireBehaviours(direction, strength, colors)
|
|
77514
|
+
}, rest);
|
|
77515
|
+
|
|
77201
77516
|
return _super.call(this, fireOptions);
|
|
77202
77517
|
}
|
|
77203
77518
|
|
|
@@ -77402,7 +77717,14 @@ var Particles = /*#__PURE__*/function () {
|
|
|
77402
77717
|
}
|
|
77403
77718
|
}, {
|
|
77404
77719
|
key: "addParticleEmitter",
|
|
77405
|
-
value: function addParticleEmitter(
|
|
77720
|
+
value: function addParticleEmitter(emitter) {
|
|
77721
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
77722
|
+
console.warn(DEPRECATIONS.PARTICLES_ADD_PARTICLE_EMITTER);
|
|
77723
|
+
return this.add(emitter, options);
|
|
77724
|
+
}
|
|
77725
|
+
}, {
|
|
77726
|
+
key: "add",
|
|
77727
|
+
value: function add(_emitter) {
|
|
77406
77728
|
var _this2 = this;
|
|
77407
77729
|
|
|
77408
77730
|
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
@@ -77455,7 +77777,7 @@ var Particles = /*#__PURE__*/function () {
|
|
|
77455
77777
|
}
|
|
77456
77778
|
|
|
77457
77779
|
if (emitter.isSystemDead()) {
|
|
77458
|
-
this.toDispose.push(emitter.uuid);
|
|
77780
|
+
this.toDispose.push(emitter.uuid());
|
|
77459
77781
|
}
|
|
77460
77782
|
}
|
|
77461
77783
|
}, {
|
|
@@ -80699,7 +81021,7 @@ var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
80699
81021
|
|
|
80700
81022
|
var _super = _createSuper(Level);
|
|
80701
81023
|
|
|
80702
|
-
function Level(
|
|
81024
|
+
function Level(props) {
|
|
80703
81025
|
var _this;
|
|
80704
81026
|
|
|
80705
81027
|
_classCallCheck(this, Level);
|
|
@@ -80735,13 +81057,13 @@ var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
80735
81057
|
});
|
|
80736
81058
|
|
|
80737
81059
|
_defineProperty$1(_assertThisInitialized(_this), "getJSONUrl", function () {
|
|
80738
|
-
return
|
|
81060
|
+
return null;
|
|
80739
81061
|
});
|
|
80740
81062
|
|
|
80741
81063
|
_defineProperty$1(_assertThisInitialized(_this), "loadScene", function () {
|
|
80742
81064
|
var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _this.getJSONUrl();
|
|
80743
81065
|
|
|
80744
|
-
if (getWindow()) {
|
|
81066
|
+
if (getWindow() && url) {
|
|
80745
81067
|
return fetch$1(url).then(function (res) {
|
|
80746
81068
|
return res.json();
|
|
80747
81069
|
}).then(_this.parseScene).catch(function () {
|
|
@@ -80758,11 +81080,10 @@ var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
80758
81080
|
});
|
|
80759
81081
|
|
|
80760
81082
|
_defineProperty$1(_assertThisInitialized(_this), "cancelNextAnimationFrame", function () {
|
|
80761
|
-
cancelAnimationFrame(_this.requestAnimationFrameId);
|
|
81083
|
+
return cancelAnimationFrame(_this.requestAnimationFrameId);
|
|
80762
81084
|
});
|
|
80763
81085
|
|
|
80764
81086
|
_defineProperty$1(_assertThisInitialized(_this), "init", function () {
|
|
80765
|
-
_this.options.path;
|
|
80766
81087
|
Scene$1.create(_this.getName());
|
|
80767
81088
|
Scene$1.createCamera(new Camera());
|
|
80768
81089
|
Physics$1.init().then(function () {
|
|
@@ -80796,7 +81117,7 @@ var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
80796
81117
|
_this.onDispose();
|
|
80797
81118
|
});
|
|
80798
81119
|
|
|
80799
|
-
_this.
|
|
81120
|
+
_this.props = props;
|
|
80800
81121
|
_this.name = _this.constructor.name;
|
|
80801
81122
|
_this.debug = true;
|
|
80802
81123
|
_this.inputListenersAreSet = false;
|
|
@@ -80818,24 +81139,12 @@ var Level = /*#__PURE__*/function (_EventDispatcher) {
|
|
|
80818
81139
|
}, {
|
|
80819
81140
|
key: "onUpdate",
|
|
80820
81141
|
value: function onUpdate() {}
|
|
80821
|
-
}, {
|
|
80822
|
-
key: "onFailedTest",
|
|
80823
|
-
value: function onFailedTest(message, test) {}
|
|
80824
|
-
}, {
|
|
80825
|
-
key: "onSuccededTest",
|
|
80826
|
-
value: function onSuccededTest(message) {}
|
|
80827
81142
|
}, {
|
|
80828
81143
|
key: "onBeforeDispose",
|
|
80829
81144
|
value: function onBeforeDispose() {}
|
|
80830
81145
|
}, {
|
|
80831
81146
|
key: "onDispose",
|
|
80832
81147
|
value: function onDispose() {}
|
|
80833
|
-
}, {
|
|
80834
|
-
key: "onInputEnabled",
|
|
80835
|
-
value: function onInputEnabled() {}
|
|
80836
|
-
}, {
|
|
80837
|
-
key: "onInputDisabled",
|
|
80838
|
-
value: function onInputDisabled() {}
|
|
80839
81148
|
}, {
|
|
80840
81149
|
key: "requestNextAnimationFrame",
|
|
80841
81150
|
value: function requestNextAnimationFrame() {
|
|
@@ -81043,17 +81352,19 @@ var storage = new Storage();var GameRunner = /*#__PURE__*/function () {
|
|
|
81043
81352
|
|
|
81044
81353
|
_classCallCheck(this, GameRunner);
|
|
81045
81354
|
|
|
81046
|
-
_defineProperty$1(this, "
|
|
81355
|
+
_defineProperty$1(this, "createNewLevel", function (path, options) {
|
|
81047
81356
|
var classname = _this.get(path);
|
|
81048
81357
|
|
|
81049
|
-
var
|
|
81358
|
+
var levelConfig = _objectSpread2$1(_objectSpread2$1({}, options), {}, {
|
|
81050
81359
|
path: path
|
|
81051
|
-
})
|
|
81052
|
-
|
|
81053
|
-
|
|
81360
|
+
});
|
|
81361
|
+
|
|
81362
|
+
var level = new classname(levelConfig);
|
|
81363
|
+
subscribe(level);
|
|
81364
|
+
return level;
|
|
81054
81365
|
});
|
|
81055
81366
|
|
|
81056
|
-
_defineProperty$1(this, "
|
|
81367
|
+
_defineProperty$1(this, "disposeCurrentLevel", function () {
|
|
81057
81368
|
unsubscribeAll();
|
|
81058
81369
|
|
|
81059
81370
|
_this.running.dispose();
|
|
@@ -81070,12 +81381,12 @@ var storage = new Storage();var GameRunner = /*#__PURE__*/function () {
|
|
|
81070
81381
|
}
|
|
81071
81382
|
|
|
81072
81383
|
if (_this.running) {
|
|
81073
|
-
_this.
|
|
81384
|
+
_this.disposeCurrentLevel();
|
|
81074
81385
|
}
|
|
81075
81386
|
|
|
81076
81387
|
_this.setCurrentPath(path);
|
|
81077
81388
|
|
|
81078
|
-
_this.setCurrentLevel(_this.
|
|
81389
|
+
_this.setCurrentLevel(_this.createNewLevel(path, options));
|
|
81079
81390
|
|
|
81080
81391
|
if (loading) {
|
|
81081
81392
|
storage.loadScene().then(_this.getCurrentLevel().parseScene).then(function () {
|
|
@@ -81086,13 +81397,15 @@ var storage = new Storage();var GameRunner = /*#__PURE__*/function () {
|
|
|
81086
81397
|
resolve(_this.getCurrentLevel());
|
|
81087
81398
|
});
|
|
81088
81399
|
} else {
|
|
81089
|
-
|
|
81090
|
-
_this.getCurrentLevel().
|
|
81400
|
+
Physics$1.waitForState(PHYSICS_STATES.READY).then(function () {
|
|
81401
|
+
_this.getCurrentLevel().preload().then(function () {
|
|
81402
|
+
_this.getCurrentLevel().prepareScene();
|
|
81091
81403
|
|
|
81092
|
-
|
|
81404
|
+
_this.getCurrentLevel().init();
|
|
81093
81405
|
|
|
81094
|
-
|
|
81095
|
-
|
|
81406
|
+
resolve(_this.getCurrentLevel());
|
|
81407
|
+
}).catch(reject);
|
|
81408
|
+
});
|
|
81096
81409
|
}
|
|
81097
81410
|
});
|
|
81098
81411
|
});
|
|
@@ -81196,7 +81509,8 @@ var toQueryString = function toQueryString() {
|
|
|
81196
81509
|
}).join(EMPTY);
|
|
81197
81510
|
return q.endsWith(AMPERSAND) ? q.substr(0, q.length - 1) : q;
|
|
81198
81511
|
};
|
|
81199
|
-
var parseQuery = function parseQuery(
|
|
81512
|
+
var parseQuery = function parseQuery() {
|
|
81513
|
+
var queryString = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
81200
81514
|
return queryString.length > 1 ? queryString.replace(QUERY_PREFIX, EMPTY).split(AMPERSAND).map(function (couple) {
|
|
81201
81515
|
var split = couple.split(EQUALS);
|
|
81202
81516
|
return _defineProperty$1({}, split[0], split[1]);
|
|
@@ -86434,20 +86748,15 @@ var unmount = function unmount() {
|
|
|
86434
86748
|
};var hasLocation = function hasLocation() {
|
|
86435
86749
|
return window && window.location;
|
|
86436
86750
|
};
|
|
86437
|
-
var getLocationSearch = function getLocationSearch() {
|
|
86438
|
-
return hasLocation() ? location.search : EMPTY$1;
|
|
86439
|
-
};
|
|
86440
|
-
var setLocationSearch = function setLocationSearch(search) {
|
|
86441
|
-
if (hasLocation()) {
|
|
86442
|
-
location.search = search;
|
|
86443
|
-
}
|
|
86444
|
-
};
|
|
86445
86751
|
var getLocationHash = function getLocationHash() {
|
|
86446
86752
|
return hasLocation() ? location.hash : HASH;
|
|
86447
86753
|
};
|
|
86448
|
-
var setLocationHash = function setLocationHash(
|
|
86754
|
+
var setLocationHash = function setLocationHash() {
|
|
86755
|
+
var hash = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
|
|
86756
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
|
|
86757
|
+
|
|
86449
86758
|
if (hasLocation()) {
|
|
86450
|
-
location.hash = hash;
|
|
86759
|
+
location.hash = "".concat(hash).concat(options);
|
|
86451
86760
|
}
|
|
86452
86761
|
};var Router = /*#__PURE__*/function () {
|
|
86453
86762
|
function Router() {
|
|
@@ -86481,8 +86790,10 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
86481
86790
|
});
|
|
86482
86791
|
|
|
86483
86792
|
_defineProperty$1(this, "startLevel", function () {
|
|
86484
|
-
var
|
|
86485
|
-
|
|
86793
|
+
var _Router$extractHashAn = Router.extractHashAndQuery(),
|
|
86794
|
+
hash = _Router$extractHashAn.hash,
|
|
86795
|
+
query = _Router$extractHashAn.query;
|
|
86796
|
+
|
|
86486
86797
|
dispatchLocationPathChange(hash);
|
|
86487
86798
|
|
|
86488
86799
|
if (_this.isValidRoute(hash)) {
|
|
@@ -86526,15 +86837,12 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
86526
86837
|
}
|
|
86527
86838
|
}, {
|
|
86528
86839
|
key: "goTo",
|
|
86529
|
-
value: function goTo(path
|
|
86840
|
+
value: function goTo(path) {
|
|
86841
|
+
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
86530
86842
|
var origin = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : this.getCurrentLevel();
|
|
86531
86843
|
|
|
86532
86844
|
if (!Router.areRoutesIdentical(origin, path)) {
|
|
86533
|
-
|
|
86534
|
-
setLocationSearch(toQueryString(options));
|
|
86535
|
-
}
|
|
86536
|
-
|
|
86537
|
-
setLocationHash(path);
|
|
86845
|
+
setLocationHash(path, toQueryString(options));
|
|
86538
86846
|
}
|
|
86539
86847
|
}
|
|
86540
86848
|
}, {
|
|
@@ -86556,7 +86864,9 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
86556
86864
|
value: function start(config, assets) {
|
|
86557
86865
|
var _config$selector = config.selector,
|
|
86558
86866
|
selector = _config$selector === void 0 ? DEFAULT_SELECTOR : _config$selector;
|
|
86559
|
-
|
|
86867
|
+
|
|
86868
|
+
var _Router$extractHashAn2 = Router.extractHashAndQuery(),
|
|
86869
|
+
hash = _Router$extractHashAn2.hash;
|
|
86560
86870
|
|
|
86561
86871
|
if (!this.isValidRoute(hash)) {
|
|
86562
86872
|
setLocationHash(ROOT);
|
|
@@ -86574,14 +86884,17 @@ var setLocationHash = function setLocationHash(hash) {
|
|
|
86574
86884
|
}).then(this.startLevel).catch(this.handleStartError);
|
|
86575
86885
|
}
|
|
86576
86886
|
}], [{
|
|
86577
|
-
key: "
|
|
86578
|
-
value: function
|
|
86579
|
-
|
|
86580
|
-
|
|
86581
|
-
|
|
86582
|
-
|
|
86583
|
-
|
|
86584
|
-
return
|
|
86887
|
+
key: "extractHashAndQuery",
|
|
86888
|
+
value: function extractHashAndQuery() {
|
|
86889
|
+
var _Router$cleanRoute$sp = Router.cleanRoute(getLocationHash()).split(QUERY_START),
|
|
86890
|
+
_Router$cleanRoute$sp2 = _slicedToArray(_Router$cleanRoute$sp, 2),
|
|
86891
|
+
hash = _Router$cleanRoute$sp2[0],
|
|
86892
|
+
query = _Router$cleanRoute$sp2[1];
|
|
86893
|
+
|
|
86894
|
+
return {
|
|
86895
|
+
hash: hash,
|
|
86896
|
+
query: parseQuery(query)
|
|
86897
|
+
};
|
|
86585
86898
|
}
|
|
86586
86899
|
}, {
|
|
86587
86900
|
key: "cleanRoute",
|
|
@@ -86835,9 +87148,11 @@ var HemisphereLight = /*#__PURE__*/function (_Light) {
|
|
|
86835
87148
|
|
|
86836
87149
|
var _super = _createSuper(HemisphereLight);
|
|
86837
87150
|
|
|
86838
|
-
function HemisphereLight(
|
|
87151
|
+
function HemisphereLight() {
|
|
86839
87152
|
var _this;
|
|
86840
87153
|
|
|
87154
|
+
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
87155
|
+
|
|
86841
87156
|
_classCallCheck(this, HemisphereLight);
|
|
86842
87157
|
|
|
86843
87158
|
var _options$color = options.color,
|
|
@@ -88486,4 +88801,4 @@ var Shaders$1 = new Shaders();var Shader = function Shader(name, attributes, uni
|
|
|
88486
88801
|
} else {
|
|
88487
88802
|
this.instance = this.shader.instance;
|
|
88488
88803
|
}
|
|
88489
|
-
};var constants = _objectSpread2$1(_objectSpread2$1({}, lib_constants), light_contants);export{AUDIO_RAMPS,AmbientLight,Atmosphere,Audio$1 as Audio,BUILTIN,BackgroundSound,BaseScript,Box,Camera,Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_EVENTS,ENTITY_TYPES,Element,Entity,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PALETTES,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter,ParticleEmitterGroup,Particles$1 as Particles,index$1 as Partykals,Physics$1 as Physics,Plane,PointLight,PostProcessing$1 as PostProcessing,Proton,ProtonParticleEmitter,Provider,Router$1 as Router,Scene$1 as Scene,Scripts$1 as Scripts,Shader,Sky,Skybox,Sound,Sphere,SpotLight,Sprite,Stats$1 as Stats,SunLight,three_module as THREE,Universe$1 as Universe,Vector3$1 as Vector3,Water,author,connect,constants,functions,hitbox as hitboxUtils,math,utils as physicsUtils,index as store,strings,uuid,workers};
|
|
88804
|
+
};var constants = _objectSpread2$1(_objectSpread2$1({}, lib_constants), light_contants);export{AUDIO_RAMPS,AmbientLight,Atmosphere,Audio$1 as Audio,Axes,BUILTIN,BackgroundSound,BaseScript,Box,Camera,Color,Config$1 as Config,Controls$1 as Controls,Cube,CurveLine,Cylinder,DirectionalSound,ENTITY_EVENTS,ENTITY_TYPES,Element,Entity,EventDispatcher,FEATURES,Features$1 as Features,GameRunner$1 as GameRunner,Grid,HemisphereLight,INPUT_EVENTS,Images$1 as Images,Input$1 as Input,Level,LightLoader$1 as LightLoader,Lights$1 as Lights,Line,MeshLoader$1 as MeshLoader,Mirror,Models$1 as Models,Ocean,PALETTES,PARTICLES,constants$1 as PHYSICS_CONSTANTS,PHYSICS_EVENTS,ParticleEmitter,ParticleEmitterGroup,Particles$1 as Particles,index$1 as Partykals,Physics$1 as Physics,Plane,PointLight,PostProcessing$1 as PostProcessing,Proton,ProtonParticleEmitter,Provider,Router$1 as Router,Scene$1 as Scene,Scripts$1 as Scripts,Shader,Sky,Skybox,Sound,Sphere,SpotLight,Sprite,Stats$1 as Stats,SunLight,three_module as THREE,Universe$1 as Universe,Vector3$1 as Vector3,Water,author,connect,constants,functions,hitbox as hitboxUtils,math,utils as physicsUtils,index as store,strings,uuid,workers};
|