{"version":3,"file":"index.mjs","sources":["../../../node_modules/three/examples/jsm/lines/LineSegmentsGeometry.js","../../../node_modules/three/examples/jsm/lines/LineMaterial.js","../../../node_modules/three/examples/jsm/lines/LineSegments2.js","../src/debug/debug-drawer.ts","../src/helpers/crowd-helper.ts","../src/helpers/nav-mesh-helper.ts","../src/helpers/off-mesh-connections-helper.ts","../src/helpers/tile-cache-helper.ts","../src/utils/get-positions-and-indices.ts","../src/utils/generators.ts"],"sourcesContent":["import {\n\tBox3,\n\tFloat32BufferAttribute,\n\tInstancedBufferGeometry,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tSphere,\n\tVector3,\n\tWireframeGeometry\n} from 'three';\n\nconst _box = new Box3();\nconst _vector = new Vector3();\n\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n\n\tconstructor() {\n\n\t\tsuper();\n\n\t\tthis.isLineSegmentsGeometry = true;\n\n\t\tthis.type = 'LineSegmentsGeometry';\n\n\t\tconst positions = [ - 1, 2, 0, 1, 2, 0, - 1, 1, 0, 1, 1, 0, - 1, 0, 0, 1, 0, 0, - 1, - 1, 0, 1, - 1, 0 ];\n\t\tconst uvs = [ - 1, 2, 1, 2, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 2, 1, - 2 ];\n\t\tconst index = [ 0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5 ];\n\n\t\tthis.setIndex( index );\n\t\tthis.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tthis.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tapplyMatrix4( matrix ) {\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined ) {\n\n\t\t\tstart.applyMatrix4( matrix );\n\n\t\t\tend.applyMatrix4( matrix );\n\n\t\t\tstart.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( this.boundingBox !== null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t}\n\n\t\treturn this;\n\n\t}\n\n\tsetPositions( array ) {\n\n\t\tlet lineSegments;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tlineSegments = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tlineSegments = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceBuffer = new InstancedInterleavedBuffer( lineSegments, 6, 1 ); // xyz, xyz\n\n\t\tthis.setAttribute( 'instanceStart', new InterleavedBufferAttribute( instanceBuffer, 3, 0 ) ); // xyz\n\t\tthis.setAttribute( 'instanceEnd', new InterleavedBufferAttribute( instanceBuffer, 3, 3 ) ); // xyz\n\n\t\t//\n\n\t\tthis.computeBoundingBox();\n\t\tthis.computeBoundingSphere();\n\n\t\treturn this;\n\n\t}\n\n\tsetColors( array ) {\n\n\t\tlet colors;\n\n\t\tif ( array instanceof Float32Array ) {\n\n\t\t\tcolors = array;\n\n\t\t} else if ( Array.isArray( array ) ) {\n\n\t\t\tcolors = new Float32Array( array );\n\n\t\t}\n\n\t\tconst instanceColorBuffer = new InstancedInterleavedBuffer( colors, 6, 1 ); // rgb, rgb\n\n\t\tthis.setAttribute( 'instanceColorStart', new InterleavedBufferAttribute( instanceColorBuffer, 3, 0 ) ); // rgb\n\t\tthis.setAttribute( 'instanceColorEnd', new InterleavedBufferAttribute( instanceColorBuffer, 3, 3 ) ); // rgb\n\n\t\treturn this;\n\n\t}\n\n\tfromWireframeGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromEdgesGeometry( geometry ) {\n\n\t\tthis.setPositions( geometry.attributes.position.array );\n\n\t\treturn this;\n\n\t}\n\n\tfromMesh( mesh ) {\n\n\t\tthis.fromWireframeGeometry( new WireframeGeometry( mesh.geometry ) );\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tfromLineSegments( lineSegments ) {\n\n\t\tconst geometry = lineSegments.geometry;\n\n\t\tthis.setPositions( geometry.attributes.position.array ); // assumes non-indexed\n\n\t\t// set colors, maybe\n\n\t\treturn this;\n\n\t}\n\n\tcomputeBoundingBox() {\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.boundingBox = new Box3();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tthis.boundingBox.setFromBufferAttribute( start );\n\n\t\t\t_box.setFromBufferAttribute( end );\n\n\t\t\tthis.boundingBox.union( _box );\n\n\t\t}\n\n\t}\n\n\tcomputeBoundingSphere() {\n\n\t\tif ( this.boundingSphere === null ) {\n\n\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\tif ( this.boundingBox === null ) {\n\n\t\t\tthis.computeBoundingBox();\n\n\t\t}\n\n\t\tconst start = this.attributes.instanceStart;\n\t\tconst end = this.attributes.instanceEnd;\n\n\t\tif ( start !== undefined && end !== undefined ) {\n\n\t\t\tconst center = this.boundingSphere.center;\n\n\t\t\tthis.boundingBox.getCenter( center );\n\n\t\t\tlet maxRadiusSq = 0;\n\n\t\t\tfor ( let i = 0, il = start.count; i < il; i ++ ) {\n\n\t\t\t\t_vector.fromBufferAttribute( start, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t\t_vector.fromBufferAttribute( end, i );\n\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector ) );\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\tconsole.error( 'THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\ttoJSON() {\n\n\t\t// todo\n\n\t}\n\n\tapplyMatrix( matrix ) {\n\n\t\tconsole.warn( 'THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().' );\n\n\t\treturn this.applyMatrix4( matrix );\n\n\t}\n\n}\n\nexport { LineSegmentsGeometry };\n","import {\n\tShaderLib,\n\tShaderMaterial,\n\tUniformsLib,\n\tUniformsUtils,\n\tVector2,\n} from 'three';\n\nUniformsLib.line = {\n\n\tworldUnits: { value: 1 },\n\tlinewidth: { value: 1 },\n\tresolution: { value: new Vector2( 1, 1 ) },\n\tdashOffset: { value: 0 },\n\tdashScale: { value: 1 },\n\tdashSize: { value: 1 },\n\tgapSize: { value: 1 } // todo FIX - maybe change to totalSize\n\n};\n\nShaderLib[ 'line' ] = {\n\n\tuniforms: UniformsUtils.merge( [\n\t\tUniformsLib.common,\n\t\tUniformsLib.fog,\n\t\tUniformsLib.line\n\t] ),\n\n\tvertexShader:\n\t/* glsl */`\n\t\t#include <common>\n\t\t#include <color_pars_vertex>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\t\t#include <clipping_planes_pars_vertex>\n\n\t\tuniform float linewidth;\n\t\tuniform vec2 resolution;\n\n\t\tattribute vec3 instanceStart;\n\t\tattribute vec3 instanceEnd;\n\n\t\tattribute vec3 instanceColorStart;\n\t\tattribute vec3 instanceColorEnd;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashScale;\n\t\t\tattribute float instanceDistanceStart;\n\t\t\tattribute float instanceDistanceEnd;\n\t\t\tvarying float vLineDistance;\n\n\t\t#endif\n\n\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t// conservative estimate of the near plane\n\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#ifdef USE_COLOR\n\n\t\t\t\tvColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t#endif\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t// camera space\n\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tworldStart = start.xyz;\n\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t#else\n\n\t\t\t\tvUv = uv;\n\n\t\t\t#endif\n\n\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\tif ( perspective ) {\n\n\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// clip space\n\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t// ndc space\n\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t// direction\n\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t// account for clip-space aspect ratio\n\t\t\tdir.x *= aspect;\n\t\t\tdir = normalize( dir );\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\tvec3 tmpFwd = normalize( mix( start.xyz, end.xyz, 0.5 ) );\n\t\t\t\tvec3 worldUp = normalize( cross( worldDir, tmpFwd ) );\n\t\t\t\tvec3 worldFwd = cross( worldDir, worldUp );\n\t\t\t\tworldPos = position.y < 0.5 ? start: end;\n\n\t\t\t\t// height offset\n\t\t\t\tfloat hw = linewidth * 0.5;\n\t\t\t\tworldPos.xyz += position.x < 0.0 ? hw * worldUp : - hw * worldUp;\n\n\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t// cap extension\n\t\t\t\t\tworldPos.xyz += position.y < 0.5 ? - hw * worldDir : hw * worldDir;\n\n\t\t\t\t\t// add width to the box\n\t\t\t\t\tworldPos.xyz += worldFwd * hw;\n\n\t\t\t\t\t// endcaps\n\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\tworldPos.xyz -= worldFwd * 2.0 * hw;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t\t// project the worldpos\n\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t// segments overlap neatly\n\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t#else\n\n\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\tdir.x /= aspect;\n\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t// sign flip\n\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t// endcaps\n\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\toffset += - dir;\n\n\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\toffset += dir;\n\n\t\t\t\t}\n\n\t\t\t\t// adjust for linewidth\n\t\t\t\toffset *= linewidth;\n\n\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t// select end\n\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t// back to clip space\n\t\t\t\toffset *= clip.w;\n\n\t\t\t\tclip.xy += offset;\n\n\t\t\t#endif\n\n\t\t\tgl_Position = clip;\n\n\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <clipping_planes_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}\n\t\t`,\n\n\tfragmentShader:\n\t/* glsl */`\n\t\tuniform vec3 diffuse;\n\t\tuniform float opacity;\n\t\tuniform float linewidth;\n\n\t\t#ifdef USE_DASH\n\n\t\t\tuniform float dashOffset;\n\t\t\tuniform float dashSize;\n\t\t\tuniform float gapSize;\n\n\t\t#endif\n\n\t\tvarying float vLineDistance;\n\n\t\t#ifdef WORLD_UNITS\n\n\t\t\tvarying vec4 worldPos;\n\t\t\tvarying vec3 worldStart;\n\t\t\tvarying vec3 worldEnd;\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t#endif\n\n\t\t#else\n\n\t\t\tvarying vec2 vUv;\n\n\t\t#endif\n\n\t\t#include <common>\n\t\t#include <color_pars_fragment>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\t\t#include <clipping_planes_pars_fragment>\n\n\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\tfloat mua;\n\t\t\tfloat mub;\n\n\t\t\tvec3 p13 = p1 - p3;\n\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\tmua = numer / denom;\n\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\treturn vec2( mua, mub );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t#ifdef USE_DASH\n\n\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t#endif\n\n\t\t\tfloat alpha = opacity;\n\n\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\tfloat len = length( delta );\n\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#endif\n\n\t\t\t#else\n\n\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t#else\n\n\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t}\n\n\t\t\t\t#endif\n\n\t\t\t#endif\n\n\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\n\t\t\t#include <logdepthbuf_fragment>\n\t\t\t#include <color_fragment>\n\n\t\t\tgl_FragColor = vec4( diffuseColor.rgb, alpha );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <colorspace_fragment>\n\t\t\t#include <fog_fragment>\n\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t}\n\t\t`\n};\n\nclass LineMaterial extends ShaderMaterial {\n\n\tconstructor( parameters ) {\n\n\t\tsuper( {\n\n\t\t\ttype: 'LineMaterial',\n\n\t\t\tuniforms: UniformsUtils.clone( ShaderLib[ 'line' ].uniforms ),\n\n\t\t\tvertexShader: ShaderLib[ 'line' ].vertexShader,\n\t\t\tfragmentShader: ShaderLib[ 'line' ].fragmentShader,\n\n\t\t\tclipping: true // required for clipping support\n\n\t\t} );\n\n\t\tthis.isLineMaterial = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tget color() {\n\n\t\treturn this.uniforms.diffuse.value;\n\n\t}\n\n\tset color( value ) {\n\n\t\tthis.uniforms.diffuse.value = value;\n\n\t}\n\n\tget worldUnits() {\n\n\t\treturn 'WORLD_UNITS' in this.defines;\n\n\t}\n\n\tset worldUnits( value ) {\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.WORLD_UNITS = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.WORLD_UNITS;\n\n\t\t}\n\n\t}\n\n\tget linewidth() {\n\n\t\treturn this.uniforms.linewidth.value;\n\n\t}\n\n\tset linewidth( value ) {\n\n\t\tif ( ! this.uniforms.linewidth ) return;\n\t\tthis.uniforms.linewidth.value = value;\n\n\t}\n\n\tget dashed() {\n\n\t\treturn 'USE_DASH' in this.defines;\n\n\t}\n\n\tset dashed( value ) {\n\n\t\tif ( ( value === true ) !== this.dashed ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_DASH = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_DASH;\n\n\t\t}\n\n\t}\n\n\tget dashScale() {\n\n\t\treturn this.uniforms.dashScale.value;\n\n\t}\n\n\tset dashScale( value ) {\n\n\t\tthis.uniforms.dashScale.value = value;\n\n\t}\n\n\tget dashSize() {\n\n\t\treturn this.uniforms.dashSize.value;\n\n\t}\n\n\tset dashSize( value ) {\n\n\t\tthis.uniforms.dashSize.value = value;\n\n\t}\n\n\tget dashOffset() {\n\n\t\treturn this.uniforms.dashOffset.value;\n\n\t}\n\n\tset dashOffset( value ) {\n\n\t\tthis.uniforms.dashOffset.value = value;\n\n\t}\n\n\tget gapSize() {\n\n\t\treturn this.uniforms.gapSize.value;\n\n\t}\n\n\tset gapSize( value ) {\n\n\t\tthis.uniforms.gapSize.value = value;\n\n\t}\n\n\tget opacity() {\n\n\t\treturn this.uniforms.opacity.value;\n\n\t}\n\n\tset opacity( value ) {\n\n\t\tif ( ! this.uniforms ) return;\n\t\tthis.uniforms.opacity.value = value;\n\n\t}\n\n\tget resolution() {\n\n\t\treturn this.uniforms.resolution.value;\n\n\t}\n\n\tset resolution( value ) {\n\n\t\tthis.uniforms.resolution.value.copy( value );\n\n\t}\n\n\tget alphaToCoverage() {\n\n\t\treturn 'USE_ALPHA_TO_COVERAGE' in this.defines;\n\n\t}\n\n\tset alphaToCoverage( value ) {\n\n\t\tif ( ! this.defines ) return;\n\n\t\tif ( ( value === true ) !== this.alphaToCoverage ) {\n\n\t\t\tthis.needsUpdate = true;\n\n\t\t}\n\n\t\tif ( value === true ) {\n\n\t\t\tthis.defines.USE_ALPHA_TO_COVERAGE = '';\n\n\t\t} else {\n\n\t\t\tdelete this.defines.USE_ALPHA_TO_COVERAGE;\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineMaterial };\n","import {\n\tBox3,\n\tInstancedInterleavedBuffer,\n\tInterleavedBufferAttribute,\n\tLine3,\n\tMathUtils,\n\tMatrix4,\n\tMesh,\n\tSphere,\n\tVector3,\n\tVector4\n} from 'three';\nimport { LineSegmentsGeometry } from '../lines/LineSegmentsGeometry.js';\nimport { LineMaterial } from '../lines/LineMaterial.js';\n\nconst _viewport = new Vector4();\n\nconst _start = new Vector3();\nconst _end = new Vector3();\n\nconst _start4 = new Vector4();\nconst _end4 = new Vector4();\n\nconst _ssOrigin = new Vector4();\nconst _ssOrigin3 = new Vector3();\nconst _mvMatrix = new Matrix4();\nconst _line = new Line3();\nconst _closestPoint = new Vector3();\n\nconst _box = new Box3();\nconst _sphere = new Sphere();\nconst _clipToWorldVector = new Vector4();\n\nlet _ray, _lineWidth;\n\n// Returns the margin required to expand by in world space given the distance from the camera,\n// line width, resolution, and camera projection\nfunction getWorldSpaceHalfWidth( camera, distance, resolution ) {\n\n\t// transform into clip space, adjust the x and y values by the pixel width offset, then\n\t// transform back into world space to get world offset. Note clip space is [-1, 1] so full\n\t// width does not need to be halved.\n\t_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\t_clipToWorldVector.x = _lineWidth / resolution.width;\n\t_clipToWorldVector.y = _lineWidth / resolution.height;\n\t_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );\n\t_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );\n\n\treturn Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );\n\n}\n\nfunction raycastWorldUnits( lineSegments, intersects ) {\n\n\tconst matrixWorld = lineSegments.matrixWorld;\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t_line.applyMatrix4( matrixWorld );\n\n\t\tconst pointOnLine = new Vector3();\n\t\tconst point = new Vector3();\n\n\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\t\tconst isInside = point.distanceTo( pointOnLine ) < _lineWidth * 0.5;\n\n\t\tif ( isInside ) {\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint,\n\t\t\t\tpointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nfunction raycastScreenSpace( lineSegments, camera, intersects ) {\n\n\tconst projectionMatrix = camera.projectionMatrix;\n\tconst material = lineSegments.material;\n\tconst resolution = material.resolution;\n\tconst matrixWorld = lineSegments.matrixWorld;\n\n\tconst geometry = lineSegments.geometry;\n\tconst instanceStart = geometry.attributes.instanceStart;\n\tconst instanceEnd = geometry.attributes.instanceEnd;\n\tconst segmentCount = Math.min( geometry.instanceCount, instanceStart.count );\n\n\tconst near = - camera.near;\n\n\t//\n\n\t// pick a point 1 unit out along the ray to avoid the ray origin\n\t// sitting at the camera origin which will cause \"w\" to be 0 when\n\t// applying the projection matrix.\n\t_ray.at( 1, _ssOrigin );\n\n\t// ndc space [ - 1.0, 1.0 ]\n\t_ssOrigin.w = 1;\n\t_ssOrigin.applyMatrix4( camera.matrixWorldInverse );\n\t_ssOrigin.applyMatrix4( projectionMatrix );\n\t_ssOrigin.multiplyScalar( 1 / _ssOrigin.w );\n\n\t// screen space\n\t_ssOrigin.x *= resolution.x / 2;\n\t_ssOrigin.y *= resolution.y / 2;\n\t_ssOrigin.z = 0;\n\n\t_ssOrigin3.copy( _ssOrigin );\n\n\t_mvMatrix.multiplyMatrices( camera.matrixWorldInverse, matrixWorld );\n\n\tfor ( let i = 0, l = segmentCount; i < l; i ++ ) {\n\n\t\t_start4.fromBufferAttribute( instanceStart, i );\n\t\t_end4.fromBufferAttribute( instanceEnd, i );\n\n\t\t_start4.w = 1;\n\t\t_end4.w = 1;\n\n\t\t// camera space\n\t\t_start4.applyMatrix4( _mvMatrix );\n\t\t_end4.applyMatrix4( _mvMatrix );\n\n\t\t// skip the segment if it's entirely behind the camera\n\t\tconst isBehindCameraNear = _start4.z > near && _end4.z > near;\n\t\tif ( isBehindCameraNear ) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\t// trim the segment if it extends behind camera near\n\t\tif ( _start4.z > near ) {\n\n\t\t\tconst deltaDist = _start4.z - _end4.z;\n\t\t\tconst t = ( _start4.z - near ) / deltaDist;\n\t\t\t_start4.lerp( _end4, t );\n\n\t\t} else if ( _end4.z > near ) {\n\n\t\t\tconst deltaDist = _end4.z - _start4.z;\n\t\t\tconst t = ( _end4.z - near ) / deltaDist;\n\t\t\t_end4.lerp( _start4, t );\n\n\t\t}\n\n\t\t// clip space\n\t\t_start4.applyMatrix4( projectionMatrix );\n\t\t_end4.applyMatrix4( projectionMatrix );\n\n\t\t// ndc space [ - 1.0, 1.0 ]\n\t\t_start4.multiplyScalar( 1 / _start4.w );\n\t\t_end4.multiplyScalar( 1 / _end4.w );\n\n\t\t// screen space\n\t\t_start4.x *= resolution.x / 2;\n\t\t_start4.y *= resolution.y / 2;\n\n\t\t_end4.x *= resolution.x / 2;\n\t\t_end4.y *= resolution.y / 2;\n\n\t\t// create 2d segment\n\t\t_line.start.copy( _start4 );\n\t\t_line.start.z = 0;\n\n\t\t_line.end.copy( _end4 );\n\t\t_line.end.z = 0;\n\n\t\t// get closest point on ray to segment\n\t\tconst param = _line.closestPointToPointParameter( _ssOrigin3, true );\n\t\t_line.at( param, _closestPoint );\n\n\t\t// check if the intersection point is within clip space\n\t\tconst zPos = MathUtils.lerp( _start4.z, _end4.z, param );\n\t\tconst isInClipSpace = zPos >= - 1 && zPos <= 1;\n\n\t\tconst isInside = _ssOrigin3.distanceTo( _closestPoint ) < _lineWidth * 0.5;\n\n\t\tif ( isInClipSpace && isInside ) {\n\n\t\t\t_line.start.fromBufferAttribute( instanceStart, i );\n\t\t\t_line.end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\t_line.start.applyMatrix4( matrixWorld );\n\t\t\t_line.end.applyMatrix4( matrixWorld );\n\n\t\t\tconst pointOnLine = new Vector3();\n\t\t\tconst point = new Vector3();\n\n\t\t\t_ray.distanceSqToSegment( _line.start, _line.end, point, pointOnLine );\n\n\t\t\tintersects.push( {\n\t\t\t\tpoint: point,\n\t\t\t\tpointOnLine: pointOnLine,\n\t\t\t\tdistance: _ray.origin.distanceTo( point ),\n\t\t\t\tobject: lineSegments,\n\t\t\t\tface: null,\n\t\t\t\tfaceIndex: i,\n\t\t\t\tuv: null,\n\t\t\t\tuv1: null,\n\t\t\t} );\n\n\t\t}\n\n\t}\n\n}\n\nclass LineSegments2 extends Mesh {\n\n\tconstructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {\n\n\t\tsuper( geometry, material );\n\n\t\tthis.isLineSegments2 = true;\n\n\t\tthis.type = 'LineSegments2';\n\n\t}\n\n\t// for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n\n\tcomputeLineDistances() {\n\n\t\tconst geometry = this.geometry;\n\n\t\tconst instanceStart = geometry.attributes.instanceStart;\n\t\tconst instanceEnd = geometry.attributes.instanceEnd;\n\t\tconst lineDistances = new Float32Array( 2 * instanceStart.count );\n\n\t\tfor ( let i = 0, j = 0, l = instanceStart.count; i < l; i ++, j += 2 ) {\n\n\t\t\t_start.fromBufferAttribute( instanceStart, i );\n\t\t\t_end.fromBufferAttribute( instanceEnd, i );\n\n\t\t\tlineDistances[ j ] = ( j === 0 ) ? 0 : lineDistances[ j - 1 ];\n\t\t\tlineDistances[ j + 1 ] = lineDistances[ j ] + _start.distanceTo( _end );\n\n\t\t}\n\n\t\tconst instanceDistanceBuffer = new InstancedInterleavedBuffer( lineDistances, 2, 1 ); // d0, d1\n\n\t\tgeometry.setAttribute( 'instanceDistanceStart', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 0 ) ); // d0\n\t\tgeometry.setAttribute( 'instanceDistanceEnd', new InterleavedBufferAttribute( instanceDistanceBuffer, 1, 1 ) ); // d1\n\n\t\treturn this;\n\n\t}\n\n\traycast( raycaster, intersects ) {\n\n\t\tconst worldUnits = this.material.worldUnits;\n\t\tconst camera = raycaster.camera;\n\n\t\tif ( camera === null && ! worldUnits ) {\n\n\t\t\tconsole.error( 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.' );\n\n\t\t}\n\n\t\tconst threshold = ( raycaster.params.Line2 !== undefined ) ? raycaster.params.Line2.threshold || 0 : 0;\n\n\t\t_ray = raycaster.ray;\n\n\t\tconst matrixWorld = this.matrixWorld;\n\t\tconst geometry = this.geometry;\n\t\tconst material = this.material;\n\n\t\t_lineWidth = material.linewidth + threshold;\n\n\t\t// check if we intersect the sphere bounds\n\t\tif ( geometry.boundingSphere === null ) {\n\n\t\t\tgeometry.computeBoundingSphere();\n\n\t\t}\n\n\t\t_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );\n\n\t\t// increase the sphere bounds by the worst case line screen space width\n\t\tlet sphereMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tsphereMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( _ray.origin ) );\n\t\t\tsphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, material.resolution );\n\n\t\t}\n\n\t\t_sphere.radius += sphereMargin;\n\n\t\tif ( _ray.intersectsSphere( _sphere ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t// check if we intersect the box bounds\n\t\tif ( geometry.boundingBox === null ) {\n\n\t\t\tgeometry.computeBoundingBox();\n\n\t\t}\n\n\t\t_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );\n\n\t\t// increase the box bounds by the worst case line width\n\t\tlet boxMargin;\n\t\tif ( worldUnits ) {\n\n\t\t\tboxMargin = _lineWidth * 0.5;\n\n\t\t} else {\n\n\t\t\tconst distanceToBox = Math.max( camera.near, _box.distanceToPoint( _ray.origin ) );\n\t\t\tboxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, material.resolution );\n\n\t\t}\n\n\t\t_box.expandByScalar( boxMargin );\n\n\t\tif ( _ray.intersectsBox( _box ) === false ) {\n\n\t\t\treturn;\n\n\t\t}\n\n\t\tif ( worldUnits ) {\n\n\t\t\traycastWorldUnits( this, intersects );\n\n\t\t} else {\n\n\t\t\traycastScreenSpace( this, camera, intersects );\n\n\t\t}\n\n\t}\n\n\tonBeforeRender( renderer ) {\n\n\t\tconst uniforms = this.material.uniforms;\n\n\t\tif ( uniforms && uniforms.resolution ) {\n\n\t\t\trenderer.getViewport( _viewport );\n\t\t\tthis.material.uniforms.resolution.value.set( _viewport.z, _viewport.w );\n\n\t\t}\n\n\t}\n\n}\n\nexport { LineSegments2 };\n",null,null,null,null,null,null,null],"names":["_box","Box3","_vector","Vector3","LineSegmentsGeometry","InstancedBufferGeometry","constructor","super","this","isLineSegmentsGeometry","type","setIndex","setAttribute","Float32BufferAttribute","applyMatrix4","matrix","start","attributes","instanceStart","end","instanceEnd","undefined","needsUpdate","boundingBox","computeBoundingBox","boundingSphere","computeBoundingSphere","setPositions","array","lineSegments","Float32Array","Array","isArray","instanceBuffer","InstancedInterleavedBuffer","InterleavedBufferAttribute","setColors","colors","instanceColorBuffer","fromWireframeGeometry","geometry","position","fromEdgesGeometry","fromMesh","mesh","WireframeGeometry","fromLineSegments","setFromBufferAttribute","union","Sphere","center","getCenter","maxRadiusSq","i","il","count","fromBufferAttribute","Math","max","distanceToSquared","radius","sqrt","isNaN","console","error","toJSON","applyMatrix","warn","UniformsLib","line","worldUnits","value","linewidth","resolution","Vector2","dashOffset","dashScale","dashSize","gapSize","ShaderLib","uniforms","UniformsUtils","merge","common","fog","vertexShader","fragmentShader","LineMaterial","ShaderMaterial","parameters","clone","clipping","isLineMaterial","setValues","color","diffuse","defines","WORLD_UNITS","dashed","USE_DASH","opacity","copy","alphaToCoverage","USE_ALPHA_TO_COVERAGE","_viewport","Vector4","_start","_end","_start4","_end4","_ssOrigin","_ssOrigin3","_mvMatrix","Matrix4","_line","Line3","_closestPoint","_sphere","_clipToWorldVector","_ray","_lineWidth","getWorldSpaceHalfWidth","camera","distance","set","projectionMatrix","multiplyScalar","w","x","width","y","height","projectionMatrixInverse","abs","LineSegments2","Mesh","material","random","isLineSegments2","computeLineDistances","lineDistances","j","l","distanceTo","instanceDistanceBuffer","raycast","raycaster","intersects","threshold","params","Line2","ray","matrixWorld","sphereMargin","boxMargin","near","distanceToPoint","origin","intersectsSphere","expandByScalar","intersectsBox","min","instanceCount","pointOnLine","point","distanceSqToSegment","push","object","face","faceIndex","uv","uv1","raycastWorldUnits","segmentCount","at","matrixWorldInverse","z","multiplyMatrices","deltaDist","t","lerp","param","closestPointToPointParameter","zPos","MathUtils","isInClipSpace","isInside","raycastScreenSpace","onBeforeRender","renderer","getViewport","_color","THREE","Color","DebugDrawer","Group","pointGeometry","SphereGeometry","triMaterial","pointMaterial","lineMaterial","debugDrawerUtils","DebugDrawerUtils","MeshBasicMaterial","vertexColors","transparent","depthWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","drawPrimitives","primitives","primitive","drawPoints","drawLines","drawTris","drawQuads","drawHeightfieldSolid","hf","drawHeightfieldWalkable","drawCompactHeightfieldSolid","chf","drawCompactHeightfieldRegions","drawCompactHeightfieldDistance","drawHeightfieldLayer","layer","idx","drawHeightfieldLayers","lset","drawRegionConnections","cset","alpha","drawRawContours","drawContours","drawPolyMesh","drawPolyMeshDetail","dmesh","drawNavMesh","flags","drawNavMeshWithClosedList","query","drawNavMeshNodes","drawNavMeshBVTree","drawNavMeshPortals","drawNavMeshPolysWithFlags","col","drawNavMeshPoly","ref","reset","child","children","dispose","clear","instancedMesh","InstancedMesh","vertices","length","r","g","b","setMatrixAt","setPosition","setColorAt","setRGB","instanceMatrix","add","lineSegmentsGeometry","positions","x1","y1","z1","r1","g1","b1","x2","y2","z2","r2","g2","b2","BufferGeometry","BufferAttribute","CrowdHelper","Object3D","agentMeshes","Map","crowd","recastCrowd","agentMaterial","update","agents","getAgents","unseen","Set","keys","agent","delete","agentIndex","velocity","agentMesh","get","createAgentMesh","updateAgentGeometry","lookAt","agentId","remove","userData","agentParams","CylinderGeometry","NavMeshHelper","navMesh","navMeshGeometry","navMeshMaterial","indices","getDebugNavMesh","from","Uint32Array","computeVertexNormals","OffMeshConnectionsHelper","offMeshConnections","entryCircleMaterial","exitCircleMaterial","LineBasicMaterial","offMeshConnection","circleGeometry","CircleGeometry","startMesh","startPosition","rotation","PI","endMesh","bidirectional","endPosition","middle","addVectors","curvePoints","CatmullRomCurve3","getPoints","lineGeometry","setFromPoints","Line","TileCacheHelper","obstacleMeshes","tileCache","obstacleMaterial","wireframe","wireframeLinewidth","obstacle","obstacles","obstacleMesh","halfExtents","angle","BoxGeometry","Error","_position","getPositionsAndIndices","meshes","toMerge","positionAttribute","itemSize","updateMatrixWorld","pos","localToWorld","getIndex","ascendingIndex","mergePositionsAndIndices","threeToSoloNavMesh","navMeshGeneratorConfig","keepIntermediates","generateSoloNavMesh","threeToTiledNavMesh","generateTiledNavMesh","threeToTileCache","generateTileCache"],"mappings":"8vBAWA,MAAMA,EAAO,IAAIC,EACXC,EAAU,IAAIC,EAEpB,MAAMC,UAA6BC,EAElC,WAAAC,GAECC,QAEAC,KAAKC,wBAAyB,EAE9BD,KAAKE,KAAO,uBAMZF,KAAKG,SAFS,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,IAGnEH,KAAKI,aAAc,WAAY,IAAIC,EALjB,EAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAK,EAAG,EAAG,EAAG,EAAG,EAAG,GAAK,GAAK,EAAG,EAAG,GAAK,EAAG,GAK/B,IACtEL,KAAKI,aAAc,KAAM,IAAIC,EALjB,EAAI,EAAG,EAAG,EAAG,GAAK,EAAG,EAAG,EAAG,GAAK,GAAK,EAAG,GAAK,GAAK,GAAK,EAAG,GAAK,GAKjB,GAE1D,CAED,YAAAC,CAAcC,GAEb,MAAMC,EAAQR,KAAKS,WAAWC,cACxBC,EAAMX,KAAKS,WAAWG,YAwB5B,YAtBeC,IAAVL,IAEJA,EAAMF,aAAcC,GAEpBI,EAAIL,aAAcC,GAElBC,EAAMM,aAAc,GAIK,OAArBd,KAAKe,aAETf,KAAKgB,qBAIuB,OAAxBhB,KAAKiB,gBAETjB,KAAKkB,wBAIClB,IAEP,CAED,YAAAmB,CAAcC,GAEb,IAAIC,EAECD,aAAiBE,aAErBD,EAAeD,EAEJG,MAAMC,QAASJ,KAE1BC,EAAe,IAAIC,aAAcF,IAIlC,MAAMK,EAAiB,IAAIC,EAA4BL,EAAc,EAAG,GAUxE,OARArB,KAAKI,aAAc,gBAAiB,IAAIuB,EAA4BF,EAAgB,EAAG,IACvFzB,KAAKI,aAAc,cAAe,IAAIuB,EAA4BF,EAAgB,EAAG,IAIrFzB,KAAKgB,qBACLhB,KAAKkB,wBAEElB,IAEP,CAED,SAAA4B,CAAWR,GAEV,IAAIS,EAECT,aAAiBE,aAErBO,EAAST,EAEEG,MAAMC,QAASJ,KAE1BS,EAAS,IAAIP,aAAcF,IAI5B,MAAMU,EAAsB,IAAIJ,EAA4BG,EAAQ,EAAG,GAKvE,OAHA7B,KAAKI,aAAc,qBAAsB,IAAIuB,EAA4BG,EAAqB,EAAG,IACjG9B,KAAKI,aAAc,mBAAoB,IAAIuB,EAA4BG,EAAqB,EAAG,IAExF9B,IAEP,CAED,qBAAA+B,CAAuBC,GAItB,OAFAhC,KAAKmB,aAAca,EAASvB,WAAWwB,SAASb,OAEzCpB,IAEP,CAED,iBAAAkC,CAAmBF,GAIlB,OAFAhC,KAAKmB,aAAca,EAASvB,WAAWwB,SAASb,OAEzCpB,IAEP,CAED,QAAAmC,CAAUC,GAMT,OAJApC,KAAK+B,sBAAuB,IAAIM,EAAmBD,EAAKJ,WAIjDhC,IAEP,CAED,gBAAAsC,CAAkBjB,GAEjB,MAAMW,EAAWX,EAAaW,SAM9B,OAJAhC,KAAKmB,aAAca,EAASvB,WAAWwB,SAASb,OAIzCpB,IAEP,CAED,kBAAAgB,GAE2B,OAArBhB,KAAKe,cAETf,KAAKe,YAAc,IAAItB,GAIxB,MAAMe,EAAQR,KAAKS,WAAWC,cACxBC,EAAMX,KAAKS,WAAWG,iBAEbC,IAAVL,QAA+BK,IAARF,IAE3BX,KAAKe,YAAYwB,uBAAwB/B,GAEzChB,EAAK+C,uBAAwB5B,GAE7BX,KAAKe,YAAYyB,MAAOhD,GAIzB,CAED,qBAAA0B,GAE8B,OAAxBlB,KAAKiB,iBAETjB,KAAKiB,eAAiB,IAAIwB,GAID,OAArBzC,KAAKe,aAETf,KAAKgB,qBAIN,MAAMR,EAAQR,KAAKS,WAAWC,cACxBC,EAAMX,KAAKS,WAAWG,YAE5B,QAAeC,IAAVL,QAA+BK,IAARF,EAAoB,CAE/C,MAAM+B,EAAS1C,KAAKiB,eAAeyB,OAEnC1C,KAAKe,YAAY4B,UAAWD,GAE5B,IAAIE,EAAc,EAElB,IAAM,IAAIC,EAAI,EAAGC,EAAKtC,EAAMuC,MAAOF,EAAIC,EAAID,IAE1CnD,EAAQsD,oBAAqBxC,EAAOqC,GACpCD,EAAcK,KAAKC,IAAKN,EAAaF,EAAOS,kBAAmBzD,IAE/DA,EAAQsD,oBAAqBrC,EAAKkC,GAClCD,EAAcK,KAAKC,IAAKN,EAAaF,EAAOS,kBAAmBzD,IAIhEM,KAAKiB,eAAemC,OAASH,KAAKI,KAAMT,GAEnCU,MAAOtD,KAAKiB,eAAemC,SAE/BG,QAAQC,MAAO,wIAAyIxD,KAIzJ,CAED,CAED,MAAAyD,GAIC,CAED,WAAAC,CAAanD,GAIZ,OAFAgD,QAAQI,KAAM,iFAEP3D,KAAKM,aAAcC,EAE1B,ECpOFqD,EAAYC,KAAO,CAElBC,WAAY,CAAEC,MAAO,GACrBC,UAAW,CAAED,MAAO,GACpBE,WAAY,CAAEF,MAAO,IAAIG,EAAS,EAAG,IACrCC,WAAY,CAAEJ,MAAO,GACrBK,UAAW,CAAEL,MAAO,GACpBM,SAAU,CAAEN,MAAO,GACnBO,QAAS,CAAEP,MAAO,IAInBQ,EAAiB,KAAK,CAErBC,SAAUC,EAAcC,MAAO,CAC9Bd,EAAYe,OACZf,EAAYgB,IACZhB,EAAYC,OAGbgB,aACU,s3KAqNVC,eACU,kiHAkKX,MAAMC,UAAqBC,EAE1B,WAAAlF,CAAamF,GAEZlF,MAAO,CAENG,KAAM,eAENsE,SAAUC,EAAcS,MAAOX,EAAiB,KAAGC,UAEnDK,aAAcN,EAAiB,KAAGM,aAClCC,eAAgBP,EAAiB,KAAGO,eAEpCK,UAAU,IAIXnF,KAAKoF,gBAAiB,EAEtBpF,KAAKqF,UAAWJ,EAEhB,CAED,SAAIK,GAEH,OAAOtF,KAAKwE,SAASe,QAAQxB,KAE7B,CAED,SAAIuB,CAAOvB,GAEV/D,KAAKwE,SAASe,QAAQxB,MAAQA,CAE9B,CAED,cAAID,GAEH,MAAO,gBAAiB9D,KAAKwF,OAE7B,CAED,cAAI1B,CAAYC,IAEA,IAAVA,EAEJ/D,KAAKwF,QAAQC,YAAc,UAIpBzF,KAAKwF,QAAQC,WAIrB,CAED,aAAIzB,GAEH,OAAOhE,KAAKwE,SAASR,UAAUD,KAE/B,CAED,aAAIC,CAAWD,GAEP/D,KAAKwE,SAASR,YACrBhE,KAAKwE,SAASR,UAAUD,MAAQA,EAEhC,CAED,UAAI2B,GAEH,MAAO,aAAc1F,KAAKwF,OAE1B,CAED,UAAIE,CAAQ3B,IAEM,IAAVA,IAAqB/D,KAAK0F,SAEhC1F,KAAKc,aAAc,IAIL,IAAViD,EAEJ/D,KAAKwF,QAAQG,SAAW,UAIjB3F,KAAKwF,QAAQG,QAIrB,CAED,aAAIvB,GAEH,OAAOpE,KAAKwE,SAASJ,UAAUL,KAE/B,CAED,aAAIK,CAAWL,GAEd/D,KAAKwE,SAASJ,UAAUL,MAAQA,CAEhC,CAED,YAAIM,GAEH,OAAOrE,KAAKwE,SAASH,SAASN,KAE9B,CAED,YAAIM,CAAUN,GAEb/D,KAAKwE,SAASH,SAASN,MAAQA,CAE/B,CAED,cAAII,GAEH,OAAOnE,KAAKwE,SAASL,WAAWJ,KAEhC,CAED,cAAII,CAAYJ,GAEf/D,KAAKwE,SAASL,WAAWJ,MAAQA,CAEjC,CAED,WAAIO,GAEH,OAAOtE,KAAKwE,SAASF,QAAQP,KAE7B,CAED,WAAIO,CAASP,GAEZ/D,KAAKwE,SAASF,QAAQP,MAAQA,CAE9B,CAED,WAAI6B,GAEH,OAAO5F,KAAKwE,SAASoB,QAAQ7B,KAE7B,CAED,WAAI6B,CAAS7B,GAEL/D,KAAKwE,WACZxE,KAAKwE,SAASoB,QAAQ7B,MAAQA,EAE9B,CAED,cAAIE,GAEH,OAAOjE,KAAKwE,SAASP,WAAWF,KAEhC,CAED,cAAIE,CAAYF,GAEf/D,KAAKwE,SAASP,WAAWF,MAAM8B,KAAM9B,EAErC,CAED,mBAAI+B,GAEH,MAAO,0BAA2B9F,KAAKwF,OAEvC,CAED,mBAAIM,CAAiB/B,GAEb/D,KAAKwF,WAEK,IAAVzB,IAAqB/D,KAAK8F,kBAEhC9F,KAAKc,aAAc,IAIL,IAAViD,EAEJ/D,KAAKwF,QAAQO,sBAAwB,UAI9B/F,KAAKwF,QAAQO,sBAIrB,ECvkBF,MAAMC,EAAY,IAAIC,EAEhBC,EAAS,IAAIvG,EACbwG,EAAO,IAAIxG,EAEXyG,EAAU,IAAIH,EACdI,EAAQ,IAAIJ,EAEZK,EAAY,IAAIL,EAChBM,EAAa,IAAI5G,EACjB6G,EAAY,IAAIC,EAChBC,EAAQ,IAAIC,EACZC,EAAgB,IAAIjH,EAEpBH,EAAO,IAAIC,EACXoH,EAAU,IAAIpE,EACdqE,EAAqB,IAAIb,EAE/B,IAAIc,EAAMC,EAIV,SAASC,EAAwBC,EAAQC,EAAUlD,GAYlD,OAPA6C,EAAmBM,IAAK,EAAG,GAAKD,EAAU,GAAM7G,aAAc4G,EAAOG,kBACrEP,EAAmBQ,eAAgB,EAAMR,EAAmBS,GAC5DT,EAAmBU,EAAIR,EAAa/C,EAAWwD,MAC/CX,EAAmBY,EAAIV,EAAa/C,EAAW0D,OAC/Cb,EAAmBxG,aAAc4G,EAAOU,yBACxCd,EAAmBQ,eAAgB,EAAMR,EAAmBS,GAErDtE,KAAK4E,IAAK5E,KAAKC,IAAK4D,EAAmBU,EAAGV,EAAmBY,GAErE,CA+KA,MAAMI,WAAsBC,EAE3B,WAAAjI,CAAakC,EAAW,IAAIpC,EAAwBoI,EAAW,IAAIjD,EAAc,CAAEO,MAAuB,SAAhBrC,KAAKgF,YAE9FlI,MAAOiC,EAAUgG,GAEjBhI,KAAKkI,iBAAkB,EAEvBlI,KAAKE,KAAO,eAEZ,CAID,oBAAAiI,GAEC,MAAMnG,EAAWhC,KAAKgC,SAEhBtB,EAAgBsB,EAASvB,WAAWC,cACpCE,EAAcoB,EAASvB,WAAWG,YAClCwH,EAAgB,IAAI9G,aAAc,EAAIZ,EAAcqC,OAE1D,IAAM,IAAIF,EAAI,EAAGwF,EAAI,EAAGC,EAAI5H,EAAcqC,MAAOF,EAAIyF,EAAGzF,IAAMwF,GAAK,EAElEnC,EAAOlD,oBAAqBtC,EAAemC,GAC3CsD,EAAKnD,oBAAqBpC,EAAaiC,GAEvCuF,EAAeC,GAAc,IAANA,EAAY,EAAID,EAAeC,EAAI,GAC1DD,EAAeC,EAAI,GAAMD,EAAeC,GAAMnC,EAAOqC,WAAYpC,GAIlE,MAAMqC,EAAyB,IAAI9G,EAA4B0G,EAAe,EAAG,GAKjF,OAHApG,EAAS5B,aAAc,wBAAyB,IAAIuB,EAA4B6G,EAAwB,EAAG,IAC3GxG,EAAS5B,aAAc,sBAAuB,IAAIuB,EAA4B6G,EAAwB,EAAG,IAElGxI,IAEP,CAED,OAAAyI,CAASC,EAAWC,GAEnB,MAAM7E,EAAa9D,KAAKgI,SAASlE,WAC3BoD,EAASwB,EAAUxB,OAET,OAAXA,GAAqBpD,GAEzBP,QAAQC,MAAO,iIAIhB,MAAMoF,OAAyC/H,IAA3B6H,EAAUG,OAAOC,OAAwBJ,EAAUG,OAAOC,MAAMF,WAAiB,EAErG7B,EAAO2B,EAAUK,IAEjB,MAAMC,EAAchJ,KAAKgJ,YACnBhH,EAAWhC,KAAKgC,SAChBgG,EAAWhI,KAAKgI,SActB,IAAIiB,EA8BAC,EA7BJ,GAbAlC,EAAagB,EAAShE,UAAY4E,EAGD,OAA5B5G,EAASf,gBAEbe,EAASd,wBAIV2F,EAAQhB,KAAM7D,EAASf,gBAAiBX,aAAc0I,GAIjDlF,EAEJmF,EAA4B,GAAbjC,MAET,CAGNiC,EAAehC,EAAwBC,EADdjE,KAAKC,IAAKgE,EAAOiC,KAAMtC,EAAQuC,gBAAiBrC,EAAKsC,SACbrB,EAAS/D,WAE1E,CAID,GAFA4C,EAAQzD,QAAU6F,GAEwB,IAArClC,EAAKuC,iBAAkBzC,GAA5B,CAiBA,GAV8B,OAAzB7E,EAASjB,aAEbiB,EAAShB,qBAIVxB,EAAKqG,KAAM7D,EAASjB,aAAcT,aAAc0I,GAI3ClF,EAEJoF,EAAyB,GAAblC,MAEN,CAGNkC,EAAYjC,EAAwBC,EADdjE,KAAKC,IAAKgE,EAAOiC,KAAM3J,EAAK4J,gBAAiBrC,EAAKsC,SACbrB,EAAS/D,WAEpE,CAEDzE,EAAK+J,eAAgBL,IAEe,IAA/BnC,EAAKyC,cAAehK,KAMpBsE,EAvSP,SAA4BzC,EAAcsH,GAEzC,MAAMK,EAAc3H,EAAa2H,YAC3BhH,EAAWX,EAAaW,SACxBtB,EAAgBsB,EAASvB,WAAWC,cACpCE,EAAcoB,EAASvB,WAAWG,YAGxC,IAAM,IAAIiC,EAAI,EAAGyF,EAFIrF,KAAKwG,IAAKzH,EAAS0H,cAAehJ,EAAcqC,OAElCF,EAAIyF,EAAGzF,IAAO,CAEhD6D,EAAMlG,MAAMwC,oBAAqBtC,EAAemC,GAChD6D,EAAM/F,IAAIqC,oBAAqBpC,EAAaiC,GAE5C6D,EAAMpG,aAAc0I,GAEpB,MAAMW,EAAc,IAAIhK,EAClBiK,EAAQ,IAAIjK,EAElBoH,EAAK8C,oBAAqBnD,EAAMlG,MAAOkG,EAAM/F,IAAKiJ,EAAOD,GACxCC,EAAMrB,WAAYoB,GAA6B,GAAb3C,GAIlD2B,EAAWmB,KAAM,CAChBF,QACAD,cACAxC,SAAUJ,EAAKsC,OAAOd,WAAYqB,GAClCG,OAAQ1I,EACR2I,KAAM,KACNC,UAAWpH,EACXqH,GAAI,KACJC,IAAK,MAKP,CAEF,CAmQGC,CAAmBpK,KAAM2I,GAjQ5B,SAA6BtH,EAAc6F,EAAQyB,GAElD,MAAMtB,EAAmBH,EAAOG,iBAE1BpD,EADW5C,EAAa2G,SACF/D,WACtB+E,EAAc3H,EAAa2H,YAE3BhH,EAAWX,EAAaW,SACxBtB,EAAgBsB,EAASvB,WAAWC,cACpCE,EAAcoB,EAASvB,WAAWG,YAClCyJ,EAAepH,KAAKwG,IAAKzH,EAAS0H,cAAehJ,EAAcqC,OAE/DoG,GAASjC,EAAOiC,KAOtBpC,EAAKuD,GAAI,EAAGhE,GAGZA,EAAUiB,EAAI,EACdjB,EAAUhG,aAAc4G,EAAOqD,oBAC/BjE,EAAUhG,aAAc+G,GACxBf,EAAUgB,eAAgB,EAAIhB,EAAUiB,GAGxCjB,EAAUkB,GAAKvD,EAAWuD,EAAI,EAC9BlB,EAAUoB,GAAKzD,EAAWyD,EAAI,EAC9BpB,EAAUkE,EAAI,EAEdjE,EAAWV,KAAMS,GAEjBE,EAAUiE,iBAAkBvD,EAAOqD,mBAAoBvB,GAEvD,IAAM,IAAInG,EAAI,EAAGyF,EAAI+B,EAAcxH,EAAIyF,EAAGzF,IAAO,CAchD,GAZAuD,EAAQpD,oBAAqBtC,EAAemC,GAC5CwD,EAAMrD,oBAAqBpC,EAAaiC,GAExCuD,EAAQmB,EAAI,EACZlB,EAAMkB,EAAI,EAGVnB,EAAQ9F,aAAckG,GACtBH,EAAM/F,aAAckG,GAGOJ,EAAQoE,EAAIrB,GAAQ9C,EAAMmE,EAAIrB,EAGxD,SAKD,GAAK/C,EAAQoE,EAAIrB,EAAO,CAEvB,MAAMuB,EAAYtE,EAAQoE,EAAInE,EAAMmE,EAC9BG,GAAMvE,EAAQoE,EAAIrB,GAASuB,EACjCtE,EAAQwE,KAAMvE,EAAOsE,EAExB,MAAS,GAAKtE,EAAMmE,EAAIrB,EAAO,CAE5B,MAAMuB,EAAYrE,EAAMmE,EAAIpE,EAAQoE,EAC9BG,GAAMtE,EAAMmE,EAAIrB,GAASuB,EAC/BrE,EAAMuE,KAAMxE,EAASuE,EAErB,CAGDvE,EAAQ9F,aAAc+G,GACtBhB,EAAM/F,aAAc+G,GAGpBjB,EAAQkB,eAAgB,EAAIlB,EAAQmB,GACpClB,EAAMiB,eAAgB,EAAIjB,EAAMkB,GAGhCnB,EAAQoB,GAAKvD,EAAWuD,EAAI,EAC5BpB,EAAQsB,GAAKzD,EAAWyD,EAAI,EAE5BrB,EAAMmB,GAAKvD,EAAWuD,EAAI,EAC1BnB,EAAMqB,GAAKzD,EAAWyD,EAAI,EAG1BhB,EAAMlG,MAAMqF,KAAMO,GAClBM,EAAMlG,MAAMgK,EAAI,EAEhB9D,EAAM/F,IAAIkF,KAAMQ,GAChBK,EAAM/F,IAAI6J,EAAI,EAGd,MAAMK,EAAQnE,EAAMoE,6BAA8BvE,GAAY,GAC9DG,EAAM4D,GAAIO,EAAOjE,GAGjB,MAAMmE,EAAOC,EAAUJ,KAAMxE,EAAQoE,EAAGnE,EAAMmE,EAAGK,GAC3CI,EAAgBF,IAAU,GAAKA,GAAQ,EAEvCG,EAAW3E,EAAWgC,WAAY3B,GAA+B,GAAbI,EAE1D,GAAKiE,GAAiBC,EAAW,CAEhCxE,EAAMlG,MAAMwC,oBAAqBtC,EAAemC,GAChD6D,EAAM/F,IAAIqC,oBAAqBpC,EAAaiC,GAE5C6D,EAAMlG,MAAMF,aAAc0I,GAC1BtC,EAAM/F,IAAIL,aAAc0I,GAExB,MAAMW,EAAc,IAAIhK,EAClBiK,EAAQ,IAAIjK,EAElBoH,EAAK8C,oBAAqBnD,EAAMlG,MAAOkG,EAAM/F,IAAKiJ,EAAOD,GAEzDhB,EAAWmB,KAAM,CAChBF,MAAOA,EACPD,YAAaA,EACbxC,SAAUJ,EAAKsC,OAAOd,WAAYqB,GAClCG,OAAQ1I,EACR2I,KAAM,KACNC,UAAWpH,EACXqH,GAAI,KACJC,IAAK,MAGN,CAED,CAEF,CAkIGgB,CAAoBnL,KAAMkH,EAAQyB,GAtClC,CA0CD,CAED,cAAAyC,CAAgBC,GAEf,MAAM7G,EAAWxE,KAAKgI,SAASxD,SAE1BA,GAAYA,EAASP,aAEzBoH,EAASC,YAAatF,GACtBhG,KAAKgI,SAASxD,SAASP,WAAWF,MAAMqD,IAAKpB,EAAUwE,EAAGxE,EAAUuB,GAIrE,EC/VF,MAAMgE,GAAS,IAAIC,EAAMC,MAQZ,MAAAC,WAAoBF,EAAMG,MAIrCC,cAAgB,IAAIJ,EAAMK,eAAe,IAAM,GAAI,IAMnD/L,WAAAA,EAAYgM,YACVA,EAAWC,cACXA,EAAaC,aACbA,GACqB,IACrBjM,QAEAC,KAAKiM,iBAAmB,IAAIC,EAE5BlM,KAAK8L,YACHA,GACA,IAAIN,EAAMW,kBAAkB,CAC1BC,cAAc,EACdC,aAAa,EACbzG,QAAS,GACT0G,YAAY,IAGhBtM,KAAK+L,cAAgBA,GAAiB,IAAIP,EAAMW,kBAEhDnM,KAAKgM,aACHA,GACA,IAAIjH,EAAa,CACfO,MAAO,SACPtB,UAAW,EACXoI,cAAc,EACdG,eAAe,EACfC,qBAAsB,EACtBC,oBAAqB,IAE3B,CAEAC,cAAAA,CAAeC,GACb,IAAK,MAAMC,KAAaD,EACtB,OAAQC,EAAU1M,MAChB,IAAK,SACHF,KAAK6M,WAAWD,GAChB,MACF,IAAK,QACH5M,KAAK8M,UAAUF,GACf,MACF,IAAK,OACH5M,KAAK+M,SAASH,GACd,MACF,IAAK,QACH5M,KAAKgN,UAAUJ,GAIvB,CAEAK,oBAAAA,CAAqBC,GACnB,MAAMP,EAAa3M,KAAKiM,iBAAiBgB,qBAAqBC,GAC9DlN,KAAK0M,eAAeC,EACtB,CAEAQ,uBAAAA,CAAwBD,GACtB,MAAMP,EAAa3M,KAAKiM,iBAAiBkB,wBAAwBD,GACjElN,KAAK0M,eAAeC,EACtB,CAEAS,2BAAAA,CAA4BC,GAC1B,MAAMV,EAAa3M,KAAKiM,iBAAiBmB,4BAA4BC,GACrErN,KAAK0M,eAAeC,EACtB,CAEAW,6BAAAA,CAA8BD,GAC5B,MAAMV,EAAa3M,KAAKiM,iBAAiBqB,8BAA8BD,GACvErN,KAAK0M,eAAeC,EACtB,CAEAY,8BAAAA,CAA+BF,GAC7B,MAAMV,EACJ3M,KAAKiM,iBAAiBsB,+BAA+BF,GACvDrN,KAAK0M,eAAeC,EACtB,CAEAa,oBAAAA,CAAqBC,EAA+BC,GAClD,MAAMf,EAAa3M,KAAKiM,iBAAiBuB,qBAAqBC,EAAOC,GACrE1N,KAAK0M,eAAeC,EACtB,CAEAgB,qBAAAA,CAAsBC,GACpB,MAAMjB,EAAa3M,KAAKiM,iBAAiB0B,sBAAsBC,GAC/D5N,KAAK0M,eAAeC,EACtB,CAEAkB,qBAAAA,CAAsBC,EAAwBC,EAAgB,GAC5D,MAAMpB,EAAa3M,KAAKiM,iBAAiB4B,sBAAsBC,EAAMC,GACrE/N,KAAK0M,eAAeC,EACtB,CAEAqB,eAAAA,CAAgBF,EAAwBC,EAAgB,GACtD,MAAMpB,EAAa3M,KAAKiM,iBAAiB+B,gBAAgBF,EAAMC,GAC/D/N,KAAK0M,eAAeC,EACtB,CAEAsB,YAAAA,CAAaH,EAAwBC,EAAgB,GACnD,MAAMpB,EAAa3M,KAAKiM,iBAAiBgC,aAAaH,EAAMC,GAC5D/N,KAAK0M,eAAeC,EACtB,CAEAuB,YAAAA,CAAa9L,GACX,MAAMuK,EAAa3M,KAAKiM,iBAAiBiC,aAAa9L,GACtDpC,KAAK0M,eAAeC,EACtB,CAEAwB,kBAAAA,CAAmBC,GACjB,MAAMzB,EAAa3M,KAAKiM,iBAAiBkC,mBAAmBC,GAC5DpO,KAAK0M,eAAeC,EACtB,CAEA0B,WAAAA,CAAYjM,EAAekM,EAAgB,GACzC,MAAM3B,EAAa3M,KAAKiM,iBAAiBoC,YAAYjM,EAAMkM,GAC3DtO,KAAK0M,eAAeC,EACtB,CAEA4B,yBAAAA,CACEnM,EACAoM,EACAF,EAAgB,GAEhB,MAAM3B,EAAa3M,KAAKiM,iBAAiBsC,0BACvCnM,EACAoM,EACAF,GAEFtO,KAAK0M,eAAeC,EACtB,CAEA8B,gBAAAA,CAAiBD,GACf,MAAM7B,EAAa3M,KAAKiM,iBAAiBwC,iBAAiBD,GAC1DxO,KAAK0M,eAAeC,EACtB,CAEA+B,iBAAAA,CAAkBtM,GAChB,MAAMuK,EAAa3M,KAAKiM,iBAAiByC,kBAAkBtM,GAC3DpC,KAAK0M,eAAeC,EACtB,CAEAgC,kBAAAA,CAAmBvM,GACjB,MAAMuK,EAAa3M,KAAKiM,iBAAiB0C,mBAAmBvM,GAC5DpC,KAAK0M,eAAeC,EACtB,CAEAiC,yBAAAA,CAA0BxM,EAAekM,EAAeO,GACtD,MAAMlC,EAAa3M,KAAKiM,iBAAiB2C,0BACvCxM,EACAkM,EACAO,GAEF7O,KAAK0M,eAAeC,EACtB,CAEAmC,eAAAA,CAAgB1M,EAAe2M,EAAaF,GAC1C,MAAMlC,EAAa3M,KAAKiM,iBAAiB6C,gBAAgB1M,EAAM2M,EAAKF,GACpE7O,KAAK0M,eAAeC,EACtB,CAQAqC,KAAAA,GACE,IAAK,MAAMC,KAASjP,KAAKkP,UACnBD,aAAiBzD,EAAMzD,MAAQkH,aAAiBnH,KAClDmH,EAAMjN,SAASmN,UAInBnP,KAAKoP,OACP,CAEAD,OAAAA,GACEnP,KAAKiM,iBAAiBkD,UAEtBnP,KAAKgP,QAELhP,KAAK4L,cAAcuD,UAEnBnP,KAAK8L,YAAYqD,UACjBnP,KAAK+L,cAAcoD,UACnBnP,KAAKgM,aAAamD,SACpB,CAEQtC,UAAAA,CAAWD,GACjB,MAAM5K,EAAWhC,KAAK4L,cAEhByD,EAAgB,IAAI7D,EAAM8D,cAC9BtN,EACAhC,KAAK+L,cACLa,EAAU2C,SAASC,OAAS,GAG9B,IAAK,IAAI5F,EAAQ,EAAGA,EAAQgD,EAAU2C,SAASC,OAAS,EAAG5F,IAAS,CAClE,MAAOpC,EAAGE,EAAG8C,EAAGiF,EAAGC,EAAGC,GAAK/C,EAAU2C,SAAS3F,GAE9CyF,EAAcO,YACZhG,GACA,IAAI4B,EAAM/E,SAAUoJ,YAAYrI,EAAGE,EAAG8C,IAGxC6E,EAAcS,WAAWlG,EAAO2B,GAAOwE,OAAON,EAAGC,EAAGC,GACtD,CAEAN,EAAcW,eAAelP,aAAc,EAE3Cd,KAAKiQ,IAAIZ,EACX,CAEQvC,SAAAA,CAAUF,GAChB,MAAMsD,EAAuB,IAAItQ,EAE3BuQ,EAAsB,GACtBtO,EAAmB,GAEzB,IAAK,IAAIgB,EAAI,EAAGA,EAAI+J,EAAU2C,SAASC,OAAQ3M,GAAK,EAAG,CACrD,MAAOuN,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAAM7D,EAAU2C,SAAS1M,IAC7C6N,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,GAAMnE,EAAU2C,SAAS1M,EAAI,GAExDsN,EAAUrG,KAAKsG,EAAIC,EAAIC,GACvBH,EAAUrG,KAAK4G,EAAIC,EAAIC,GAEvB/O,EAAOiI,KAAKyG,EAAIC,EAAIC,GACpB5O,EAAOiI,KAAK+G,EAAIC,EAAIC,EACtB,CAEAb,EAAqB/O,aAAagP,GAClCD,EAAqBtO,UAAUC,GAE/B,MAAMR,EAAe,IAAIyG,GACvBoI,EACAlQ,KAAKgM,cAGPhM,KAAKiQ,IAAI5O,EACX,CAEQ0L,QAAAA,CAASH,GACf,MAAM5K,EAAW,IAAIwJ,EAAMwF,eACrBb,EAAY,IAAI7O,aAAyC,EAA5BsL,EAAU2C,SAASC,QAChD3N,EAAS,IAAIP,aAAyC,EAA5BsL,EAAU2C,SAASC,QAEnD,IAAK,IAAI3M,EAAI,EAAGA,EAAI+J,EAAU2C,SAASC,OAAQ3M,IAAK,CAClD,MAAO2E,EAAGE,EAAG8C,EAAGiF,EAAGC,EAAGC,GAAK/C,EAAU2C,SAAS1M,GAE9CsN,EAAc,EAAJtN,EAAQ,GAAK2E,EACvB2I,EAAc,EAAJtN,EAAQ,GAAK6E,EACvByI,EAAc,EAAJtN,EAAQ,GAAK2H,EAEvB3I,EAAW,EAAJgB,EAAQ,GAAK4M,EACpB5N,EAAW,EAAJgB,EAAQ,GAAK6M,EACpB7N,EAAW,EAAJgB,EAAQ,GAAK8M,CACtB,CAEA3N,EAAS5B,aAAa,WAAY,IAAIoL,EAAMyF,gBAAgBd,EAAW,IACvEnO,EAAS5B,aAAa,QAAS,IAAIoL,EAAMyF,gBAAgBpP,EAAQ,IAEjE,MAAMmG,EAAWhI,KAAK8L,YAChB1J,EAAO,IAAIoJ,EAAMzD,KAAK/F,EAAUgG,GAEtChI,KAAKiQ,IAAI7N,EACX,CAEQ4K,SAAAA,CAAUJ,GAChB,MAAMuD,EAAsB,GACtBtO,EAAmB,GAEzB,IAAK,IAAIgB,EAAI,EAAGA,EAAI+J,EAAU2C,SAASC,OAAQ3M,GAAK,EAAG,CACrD,MAAM0M,EAAW,CACf3C,EAAU2C,SAAS1M,GACnB+J,EAAU2C,SAAS1M,EAAI,GACvB+J,EAAU2C,SAAS1M,EAAI,GACvB+J,EAAU2C,SAAS1M,GACnB+J,EAAU2C,SAAS1M,EAAI,GACvB+J,EAAU2C,SAAS1M,EAAI,IAGzB,IAAK,MAAO2E,EAAGE,EAAG8C,EAAGiF,EAAGC,EAAGC,KAAMJ,EAC/BY,EAAUrG,KAAKtC,EAAGE,EAAG8C,GACrB3I,EAAOiI,KAAK2F,EAAGC,EAAGC,EAEtB,CAEA,MAAM3N,EAAW,IAAIwJ,EAAMwF,eAC3BhP,EAAS5B,aACP,WACA,IAAIoL,EAAMyF,gBAAgB,IAAI3P,aAAa6O,GAAY,IAEzDnO,EAAS5B,aACP,QACA,IAAIoL,EAAMyF,gBAAgB,IAAI3P,aAAaO,GAAS,IAGtD,MAAMmG,EAAWhI,KAAK8L,YAEhB1J,EAAO,IAAIoJ,EAAMzD,KAAK/F,EAAUgG,GAEtChI,KAAKiQ,IAAI7N,EACX,ECrUI,MAAO8O,WAAoBC,EAC/BC,YAAiC,IAAIC,IAMrCvR,WAAAA,CAAYwR,EAAczI,GACxB9I,QAEAC,KAAKuR,YAAcD,EAEnBtR,KAAKwR,cACH3I,GAAQ2I,eAAiB,IAAIrF,EAAkB,CAAE7G,MAAO,QAE1DtF,KAAKyR,QACP,CAOAA,MAAAA,GACE,MAAMC,EAAS1R,KAAKuR,YAAYI,YAE1BC,EAAS,IAAIC,IAAI7R,KAAKoR,YAAYU,QAExC,IAAK,MAAMC,KAASL,EAAQ,CAC1BE,EAAOI,OAAOD,EAAME,YAEpB,MAAMhQ,EAAW8P,EAAM9P,WACjBiQ,EAAWH,EAAMG,WAEvB,IAAIC,EAA8BnS,KAAKoR,YAAYgB,IAAIL,EAAME,iBAE3CpR,IAAdsR,GACFA,EAAYnS,KAAKqS,gBAAgBN,GAEjC/R,KAAKiQ,IAAIkC,GACTnS,KAAKoR,YAAYhK,IAAI2K,EAAME,WAAYE,IAEvCnS,KAAKsS,oBAAoBH,EAAWJ,GAGtCI,EAAUlQ,SAASmF,IACjBnF,EAASuF,EACTvF,EAASyF,EAAIqK,EAAMpK,OAAS,EAC5B1F,EAASuI,GAGX2H,EAAUI,QACR,IAAI5S,GAAUkG,KAAKsM,EAAUlQ,UAAUgO,IAAIiC,GAE/C,CAEA,IAAK,MAAMM,KAAWZ,EAAQ,CAC5B,MAAMO,EAAYnS,KAAKoR,YAAYgB,IAAII,GAEnCL,IACFnS,KAAKyS,OAAON,GACZnS,KAAKoR,YAAYY,OAAOQ,GAE5B,CACF,CAEQH,eAAAA,CAAgBN,GACtB,MAAM3P,EAAO,IAAI2F,EAWjB,OATA3F,EAAK4F,SAAWhI,KAAKwR,cAErBxR,KAAKsS,oBAAoBlQ,EAAM2P,GAE/B3P,EAAKsQ,SAAW,CACdtP,OAAQ2O,EAAM3O,OACduE,OAAQoK,EAAMpK,QAGTvF,CACT,CAEQkQ,mBAAAA,CAAoBH,EAAiBQ,GAC3C,GACER,EAAUO,SAAStP,SAAWuP,EAAYvP,QAC1C+O,EAAUO,SAAS/K,SAAWgL,EAAYhL,OAC1C,CACA,MAAM3F,EAAW,IAAI4Q,EACnBD,EAAYvP,OACZuP,EAAYvP,OACZuP,EAAYhL,QAGdwK,EAAUnQ,SAASmN,UACnBgD,EAAUnQ,SAAWA,EAErBmQ,EAAUO,SAAStP,OAASuP,EAAYvP,OACxC+O,EAAUO,SAAS/K,OAASgL,EAAYhL,MAC1C,CACF,EClGI,MAAOkL,WAAsB1B,EASjCrR,WAAAA,CAAYgT,EAAkBjK,GAC5B9I,QAEAC,KAAK8S,QAAUA,EAEf9S,KAAK+S,gBAAkB,IAAI/B,EAE3BhR,KAAKgT,gBAAkBnK,GAAQmK,gBAC3BnK,EAAOmK,gBACP,IAAI7G,EAAkB,CACpB7G,MAAO,SACP+G,aAAa,EACbzG,QAAS,GACT0G,YAAY,IAGlBtM,KAAKyR,SAELzR,KAAKoC,KAAO,IAAI2F,EAAK/H,KAAK+S,gBAAiB/S,KAAKgT,iBAEhDhT,KAAKiQ,IAAIjQ,KAAKoC,KAChB,CAOAqP,MAAAA,GACE,MAAOtB,EAAW8C,GAAWjT,KAAK8S,QAAQI,kBAE1ClT,KAAK+S,gBAAgB3S,aACnB,WACA,IAAI6Q,EAAgB3P,aAAa6R,KAAKhD,GAAY,IAEpDnQ,KAAK+S,gBAAgB5S,SACnB,IAAI8Q,EAAgBmC,YAAYD,KAAKF,GAAU,IAEjDjT,KAAK+S,gBAAgBM,sBACvB,EC1CI,MAAOC,WAAiCnC,EAS5CrR,WAAAA,CACEyT,EACA1K,GAEA9I,QAEAC,KAAKuT,mBAAqBA,GAAsB,GAEhDvT,KAAKwT,oBACH3K,GAAQ2K,qBAAuB,IAAIrH,EAAkB,CAAE7G,MAAO,UAEhEtF,KAAKyT,mBACH5K,GAAQ4K,oBAAsB,IAAItH,EAAkB,CAAE7G,MAAO,SAE/DtF,KAAKgM,aACHnD,GAAQmD,cAAgB,IAAI0H,EAAkB,CAAEpO,MAAO,QAEzDtF,KAAKyR,QACP,CAKAA,MAAAA,GACEzR,KAAKoP,QAEL,IAAK,MAAMuE,KAAqB3T,KAAKuT,mBAAoB,CAEvD,MAAMK,EAAiB,IAAIC,EAAeF,EAAkBvQ,OAAQ,IAE9D0Q,EAAY,IAAI/L,EAAK6L,EAAgB5T,KAAKwT,qBAChDM,EAAU7R,SAAS4D,KAAK8N,EAAkBI,eAC1CD,EAAU7R,SAASyF,GAAK,KACxBoM,EAAUE,SAASxM,GAAKvE,KAAKgR,GAAK,EAClCjU,KAAKiQ,IAAI6D,GAET,MAAMI,EAAU,IAAInM,EAClB6L,EACAD,EAAkBQ,cACdnU,KAAKwT,oBACLxT,KAAKyT,oBAEXS,EAAQjS,SAAS4D,KAAK8N,EAAkBS,aACxCF,EAAQjS,SAASyF,GAAK,KACtBwM,EAAQF,SAASxM,GAAKvE,KAAKgR,GAAK,EAChCjU,KAAKiQ,IAAIiE,GAGT,MAAM1T,GAAQ,IAAIb,GAAUkG,KAC1B8N,EAAkBI,eAEdpT,GAAM,IAAIhB,GAAUkG,KAAK8N,EAAkBS,aAE3CC,GAAS,IAAI1U,GAAU2U,WAAW9T,EAAOG,GAAK2G,eAAe,IACnE+M,EAAO3M,GAAK,IAEZ,MACM6M,EADQ,IAAIC,EAAiB,CAAChU,EAAO6T,EAAQ1T,IACzB8T,UAAU,IAE9BC,GAAe,IAAI1D,GAAiB2D,cAAcJ,GAClD1Q,EAAO,IAAI+Q,EAAKF,EAAc1U,KAAKgM,cAEzChM,KAAKiQ,IAAIpM,EACX,CACF,EC9EI,MAAOgR,WAAwB1D,EAGnC2D,eAAsC,IAAIzD,IAI1CvR,WAAAA,CAAYiV,EAAsBlM,GAChC9I,QAEAC,KAAK+U,UAAYA,EAEjB/U,KAAKgV,iBAAmBnM,GAAQmM,iBAC5BnM,EAAOmM,iBACP,IAAI7I,EAAkB,CACpB7G,MAAO,MACP2P,WAAW,EACXC,mBAAoB,IAG1BlV,KAAKyR,QACP,CAOAA,MAAAA,GACE,MAAMG,EAAS,IAAIC,IAAI7R,KAAK8U,eAAehD,QAE3C,IAAK,MAAM,CAAGqD,KAAanV,KAAK+U,UAAUK,UAAW,CACnD,MAAMC,EAAerV,KAAK8U,eAAe1C,IAAI+C,GAI7C,GAFAvD,EAAOI,OAAOmD,IAETE,EAAc,CACjB,MAAMpT,SAAEA,GAAakT,EAEf/S,EAAO,IAAI2F,OAAKlH,EAAWb,KAAKgV,kBAItC,GAFA5S,EAAKH,SAAS4D,KAAK5D,GAEG,QAAlBkT,EAASjV,KAAgB,CAC3B,MAAMoV,YAAEA,EAAWC,MAAEA,GAAUJ,EAE/B/S,EAAKJ,SAAW,IAAIwT,EACF,EAAhBF,EAAY9N,EACI,EAAhB8N,EAAY5N,EACI,EAAhB4N,EAAY9K,GAGdpI,EAAK4R,SAAStM,EAAI6N,CACpB,KAAO,IAAsB,aAAlBJ,EAASjV,KAOlB,MAAM,IAAIuV,MAAM,0BAA0BN,KAPH,CACvC,MAAM/R,OAAEA,EAAMuE,OAAEA,GAAWwN,EAE3B/S,EAAKJ,SAAW,IAAI4Q,EAAiBxP,EAAQA,EAAQuE,EAAQ,IAE7DvF,EAAKH,SAASyF,GAAKC,EAAS,CAC9B,CAEA,CAEA3H,KAAKiQ,IAAI7N,GACTpC,KAAK8U,eAAe1N,IAAI+N,EAAU/S,EACpC,CACF,CAEA,IAAK,MAAM+S,KAAYvD,EAAQ,CAC7B,MAAMyD,EAAerV,KAAK8U,eAAe1C,IAAI+C,GAEzCE,IACFrV,KAAKyS,OAAO4C,GACZrV,KAAK8U,eAAe9C,OAAOmD,GAE/B,CACF,ECxFF,MAAMO,GAAY,IAAI/V,EAETgW,GACXC,IAEA,MAAMC,EAGA,GAEN,IAAK,MAAMzT,KAAQwT,EAAQ,CACzB,MAAME,EAAoB1T,EAAKJ,SAASvB,WACrCwB,SAEH,IAAK6T,GAAoD,IAA/BA,EAAkBC,SAC1C,SAGF3T,EAAK4T,oBAEL,MAAM7F,EAAY,IAAI7O,aAAawU,EAAkB1U,OAErD,IAAK,IAAIyB,EAAI,EAAGA,EAAIsN,EAAUX,OAAQ3M,GAAK,EAAG,CAC5C,MAAMoT,EAAMP,GAAUtO,IACpB+I,EAAUtN,GACVsN,EAAUtN,EAAI,GACdsN,EAAUtN,EAAI,IAEhBT,EAAK8T,aAAaD,GAClB9F,EAAUtN,GAAKoT,EAAIzO,EACnB2I,EAAUtN,EAAI,GAAKoT,EAAIvO,EACvByI,EAAUtN,EAAI,GAAKoT,EAAIzL,CACzB,CAEA,IAAIyI,EACF7Q,EAAKJ,SAASmU,YAAY/U,MAE5B,QAAgBP,IAAZoS,EAAuB,CAEzB,MAAMmD,EAA2B,GACjC,IAAK,IAAIvT,EAAI,EAAGA,EAAIiT,EAAkB/S,MAAOF,IAC3CuT,EAAetM,KAAKjH,GAEtBoQ,EAAUmD,CACZ,CAEAP,EAAQ/L,KAAK,CACXqG,YACA8C,WAEJ,CAEA,OAAOoD,EAAyBR,EAAQ,EC5C7BS,GAAqBA,CAChCV,EACAW,EAA8D,CAAA,EAC9DC,GAAoB,KAEpB,MAAOrG,EAAW8C,GAAW0C,GAAuBC,GAEpD,OAAOa,EACLtG,EACA8C,EACAsD,EACAC,EACD,EAGUE,GAAsBA,CACjCd,EACAW,EAA+D,CAAA,EAC/DC,GAAoB,KAEpB,MAAOrG,EAAW8C,GAAW0C,GAAuBC,GAEpD,OAAOe,EACLxG,EACA8C,EACAsD,EACAC,EACD,EAGUI,GAAmBA,CAC9BhB,EACAW,EAA4D,CAAA,EAC5DC,GAAoB,KAEpB,MAAOrG,EAAW8C,GAAW0C,GAAuBC,GAEpD,OAAOiB,EACL1G,EACA8C,EACAsD,EACAC,EACD","x_google_ignoreList":[0,1,2]}