1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[636],{71211:function(e,t,r){r.d(t,{V:function(){return h}});var a,n=r(85409),i=r(23833),o=r(38964),s=r(43975);class l{get source(){return this._source}get target(){return this._target}apply(e,t=0,r){if((!this.inTransition||t>0)&&h.copySnapshot(this._source,this.camera.state),this.inTransition||h.copySnapshot(this._target,this.camera.state),h.copySnapshot(this._target,e),this._target.radius>this._target.radiusMax&&(this._target.radius=this._target.radiusMax),this._target.radius<.01&&(this._target.radius=.01),this._target.radiusMax<.01&&(this._target.radiusMax=.01),!this.inTransition&&t<=0||void 0!==e.mode&&e.mode!==this.camera.state.mode){this.finish(this._target);return}this.inTransition=!0,this.func=r||l.defaultTransition,(!this.inTransition||t>0)&&(this.start=this.t,this.durationMs=t)}tick(e){this.t=e,this.update()}finish(e){h.copySnapshot(this.camera.state,e),this.inTransition=!1}update(){if(!this.inTransition)return;let e=Math.min((this.t-this.start)/this.durationMs,1);if(1===e){this.finish(this._target);return}this.func(this._current,e,this._source,this._target),h.copySnapshot(this.camera.state,this._current)}constructor(e){this.camera=e,this.t=0,this.func=l.defaultTransition,this.start=0,this.inTransition=!1,this.durationMs=0,this._source=h.createDefaultSnapshot(),this._target=h.createDefaultSnapshot(),this._current=h.createDefaultSnapshot()}}!function(e){let t=o.D.identity(),r=o.D.identity(),a=(0,s.A)(),n=(0,s.A)();e.defaultTransition=function(e,l,u,c){h.copySnapshot(e,c),o.D.slerp(t,o.D.Identity,o.D.rotationTo(t,u.up,c.up),l),s.A.transformQuat(e.up,u.up,t),s.A.lerp(e.target,u.target,c.target,l);let d=s.A.distance(u.target,u.position),p=s.A.distance(c.target,c.position),f=(0,i.t7)(d,p,l);s.A.sub(a,u.position,u.target),s.A.normalize(a,a),s.A.sub(n,c.position,c.target),s.A.normalize(n,n),o.D.rotationTo(r,a,n),o.D.slerp(r,o.D.Identity,r,l),s.A.transformQuat(a,a,r),s.A.scale(a,a,f),s.A.add(e.position,e.target,a),e.radius=(0,i.t7)(u.radius,c.radius,l),e.radiusMax=(0,i.t7)(u.radiusMax,c.radiusMax,l),e.fov=(0,i.t7)(u.fov,c.fov,l),e.fog=(0,i.t7)(u.fog,c.fog,l)}}(l||(l={}));var u=r(86439),c=r(97667),d=r(38675),p=r(22934),f=r(22177);let m=(0,p.T)();class h{get position(){return this.state.position}set position(e){s.A.copy(this.state.position,e)}get up(){return this.state.up}set up(e){s.A.copy(this.state.up,e)}get target(){return this.state.target}set target(e){s.A.copy(this.state.target,e)}update(){let e=this.state;if(0===e.radiusMax)return!1;let t=s.A.distance(e.position,e.target),r=this.minTargetDistance/this.scale;t<r&&(s.A.sub(this.deltaDirection,e.target,e.position),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,r),s.A.sub(e.position,e.target,this.deltaDirection));let a=2*Math.tan(e.fov/2)*s.A.distance(e.position,e.target)*this.scale;switch(this.zoom=this.viewport.height/a,function(e){let{forceFull:t,scale:r}=e,{radius:a,radiusMax:n,mode:i,fog:o,clipFar:l,minNear:u,minFar:c}=e.state;n*=r,c*=r,u*=r,a*=r,t&&(a=n);let d=.01*r;a<d&&(a=d);let p=Math.max(l?a:n,c);s.A.scale(b,e.state.target,r),s.A.scale(g,e.state.position,r);let f=s.A.distance(g,b),m=t?.01:f-a,h=f+p;t&&(u=m),(m=Math.max(Math.min(n,u),m))===(h=Math.max(u,h))&&(h=m+.01*r);let y=h;e.near=m,e.far=h,e.fogNear=f- -(50-o)/50*p,e.fogFar=y}(this),this.state.mode){case"orthographic":!function(e){let{viewport:t,zoom:r,near:a,far:n,viewOffset:i}=e,o=-t.width/2,s=t.width/2,l=t.height/2,u=-t.height/2,c=(s-o)/(2*r),p=(l-u)/(2*r),f=(s+o)/2,m=(l+u)/2,h=f-c,g=f+c,b=m+p,x=m-p;if(i.enabled){let e=r/(i.width/i.fullWidth),t=r/(i.height/i.fullHeight),a=(s-o)/i.width,n=(l-u)/i.height;h+=i.offsetX/e*a,g=h+i.width/e*a,b-=i.offsetY/t*n,x=b-i.height/t*n}d.y.ortho(e.projection,h,g,b,x,a,n),y(e)}(this);break;case"perspective":!function(e){let t=e.viewport.width/e.viewport.height,{near:r,far:a,viewOffset:n}=e,i=r*Math.tan(.5*e.state.fov),o=2*i,s=t*o,l=-.5*s;n.enabled&&(l+=n.offsetX*s/n.fullWidth,i-=n.offsetY*o/n.fullHeight,s*=n.width/n.fullWidth,o*=n.height/n.fullHeight),d.y.perspective(e.projection,l,l+s,i,i-o,r,a),y(e)}(this);break;default:(0,c.UT)(this.state.mode)}let n=!d.y.areEqual(this.projection,this.prevProjection,f.I)||!d.y.areEqual(this.view,this.prevView,f.I);if(n){if(d.y.mul(this.projectionView,this.projection,this.view),!d.y.tryInvert(this.inverseProjectionView,this.projectionView))return d.y.copy(this.view,this.prevView),d.y.copy(this.projection,this.prevProjection),d.y.mul(this.projectionView,this.projection,this.view),!1;d.y.copy(this.prevView,this.view),d.y.copy(this.prevProjection,this.projection)}return n}setState(e,t){this.transition.apply(e,t),this.stateChanged.next(e)}getSnapshot(){return h.copySnapshot(h.createDefaultSnapshot(),this.state)}getTargetDistance(e){return Math.max(this.minTargetDistance/this.scale,h.targetDistance(e,this.state.mode,this.state.fov,this.viewport.width,this.viewport.height))}getFocus(e,t,r,a,n){var i,o;let l=Math.max(t,.01),u=this.getTargetDistance(l);s.A.sub(this.deltaDirection,null!==(i=null==n?void 0:n.target)&&void 0!==i?i:this.target,null!==(o=null==n?void 0:n.position)&&void 0!==o?o:this.position),a&&s.A.match
1Direction(this.deltaDirection,a,this.deltaDirection),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,u),s.A.sub(this.newPosition,e,this.deltaDirection);let c=h.copySnapshot(h.createDefaultSnapshot(),this.state);return c.target=s.A.clone(e),c.radius=l,c.position=s.A.clone(this.newPosition),r&&s.A.matchDirection(c.up,r,c.up),c}getCenter(e,t){s.A.sub(this.deltaDirection,this.target,this.position),s.A.sub(this.newPosition,e,this.deltaDirection);let r=h.copySnapshot(h.createDefaultSnapshot(),this.state);return r.target=s.A.clone(e),r.position=s.A.clone(this.newPosition),t&&(r.radius=Math.max(t,.01)),r}getInvariantFocus(e,t,r,a){let n=Math.max(t,.01),i=this.getTargetDistance(n);s.A.copy(this.deltaDirection,a),s.A.setMagnitude(this.deltaDirection,this.deltaDirection,i),s.A.sub(this.newPosition,e,this.deltaDirection);let o=h.copySnapshot(h.createDefaultSnapshot(),this.state);return o.target=s.A.clone(e),o.radius=n,o.position=s.A.clone(this.newPosition),s.A.copy(o.up,r),o}focus(e,t,r,a,n){t>0&&this.setState(this.getFocus(e,t,a,n),r)}center(e,t){this.setState(this.getCenter(e),t)}project(e,t){return(0,n.zt)(e,t,this.viewport,this.projectionView)}unproject(e,t){return(0,n.$j)(e,t,this.viewport,this.inverseProjectionView)}getPixelSize(e){return this.project(m,e),2/m[3]/(this.viewport.width*Math.abs(this.projection[0]))}getRay(e,t,r){return"orthographic"===this.state.mode?(s.A.set(e.origin,t,r,0),this.unproject(e.origin,e.origin),s.A.normalize(e.direction,s.A.sub(e.direction,this.target,this.position)),s.A.scaleAndAdd(e.origin,e.origin,e.direction,-this.near)):(s.A.copy(e.origin,this.state.position),s.A.scale(e.origin,e.origin,this.scale),s.A.set(e.direction,t,r,.5),this.unproject(e.direction,e.direction),s.A.normalize(e.direction,s.A.sub(e.direction,e.direction,e.origin))),e}constructor(e,t=n.l_.create(0,0,128,128)){this.view=d.y.identity(),this.projection=d.y.identity(),this.projectionView=d.y.identity(),this.inverseProjectionView=d.y.identity(),this.headRotation=d.y.zero(),this.viewEye=d.y.zero(),this.isAsymmetricProjection=!1,this.state=h.createDefaultSnapshot(),this.viewOffset=h.ViewOffset(),this.disabled=!1,this.near=1,this.far=1e4,this.fogNear=5e3,this.fogFar=1e4,this.zoom=1,this.forceFull=!1,this.scale=1,this.minTargetDistance=0,this.transition=new l(this),this.stateChanged=new u.X(this.state),this.prevProjection=d.y.identity(),this.prevView=d.y.identity(),this.deltaDirection=(0,s.A)(),this.newPosition=(0,s.A)(),this.viewport=t,h.copySnapshot(this.state,e)}}(a=h||(h={})).ViewOffset=function(){return{enabled:!1,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}},a.setViewOffset=function(e,t,r,a,n,i,o){e.fullWidth=t,e.fullHeight=r,e.offsetX=a,e.offsetY=n,e.width=i,e.height=o},a.copyViewOffset=function(e,t){e.enabled=t.enabled,e.fullWidth=t.fullWidth,e.fullHeight=t.fullHeight,e.offsetX=t.offsetX,e.offsetY=t.offsetY,e.width=t.width,e.height=t.height},a.targetDistance=function(e,t,r,a,n){let i=Math.max(e,.01),o=n<a?1:a/n;return"orthographic"===t?Math.abs(i/o/Math.tan(r/2)):Math.abs(i/o/Math.sin(r/2))},a.createDefaultSnapshot=function(){return{mode:"perspective",fov:Math.PI/4,position:s.A.create(0,0,100),up:s.A.create(0,1,0),target:s.A.create(0,0,0),radius:0,radiusMax:10,fog:50,clipFar:!0,minNear:5,minFar:0}},a.copySnapshot=function(e,t){return t&&(void 0!==t.mode&&(e.mode=t.mode),void 0!==t.fov&&(e.fov=t.fov),void 0!==t.position&&s.A.copy(e.position,t.position),void 0!==t.up&&s.A.copy(e.up,t.up),void 0!==t.target&&s.A.copy(e.target,t.target),void 0!==t.radius&&(e.radius=t.radius),void 0!==t.radiusMax&&(e.radiusMax=t.radiusMax),void 0!==t.fog&&(e.fog=t.fog),void 0!==t.clipFar&&(e.clipFar=t.clipFar),void 0!==t.minNear&&(e.minNear=t.minNear),void 0!==t.minFar&&(e.minFar=t.minFar)),e},a.areSnapshotsEqual=function(e,t){return e.mode===t.mode&&e.fov===t.fov&&e.radius===t.radius&&e.radiusMax===t.radiusMax&&e.fog===t.fog&&e.clipFar===t.clipFar&&e.minNear===t.minNear&&e.minFar===t.minFar&&s.A.exactEquals(e.position,t.position)&&s.A.exactEquals(e.up,t.up)&&s.A.exactEquals(e.target,t.target)};let g=(0,s.A)(),b=(0,s.A)();function y(e){1===e.scale?d.y.lookAt(e.view,e.state.position,e.state.target,e.state.up):(s.A.scale(g,e.state.position,e.scale),s.A.scale(b,e.state.target,e.scale),d.y.lookAt(e.view,g,b,e.state.up))}},85409:function(e,t,r){r.d(t,{$j:function(){return u},l_:function(){return o},zt:function(){return l}});var a,n=r(43975),i=r(22934);function o(){return o.zero()}(a=o||(o={})).zero=function(){return{x:0,y:0,width:0,height:0}},a.create=function(e,t,r,a){return{x:e,y:t,width:r,height:a}},a.clone=function(e){return{...e}},a.copy=function(e,t){return Object.assign(e,t)},a.set=function(e,t,r,a,n){return e.x=t,e.y=r,e.width=a,e.height=n,e},a.toVec4=function(e,t){return e[0]=t.x,e[1]=t.y,e[2]=t.width,e[3]=t.height,e},a.equals=function(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height};let s=(0,i.T)();function l(e,t,r,a){let{x:n,y:o,width:l,height:u}=r;i.T.set(s,t[0],t[1],t[2],1),i.T.transformMat4(s,s,a);let c=s[3];return 0!==c&&(s[0]/=c,s[1]/=c,s[2]/=c),e[0]=(s[0]+1)*l*.5+n,e[1]=(s[1]+1)*u*.5+o,e[2]=(s[2]+1)
1*.5,e[3]=0===c?0:1/c,e}function u(e,t,r,a){let{x:i,y:o,width:s,height:l}=r,u=t[0]-i,c=t[1]-o,d=t[2];return e[0]=2*u/s-1,e[1]=2*c/l-1,e[2]=2*d-1,n.A.transformMat4(e,e,a)}},2622:function(e,t,r){r.d(t,{ag:function(){return p},QX:function(){return d},h4:function(){return rd},Ug:function(){return rp}});var a,n,i,o,s,l,u,c,d,p,f=r(89987),m=r(86439),h=r(22569),g=r(82820),b=r(58400),y=r(87144),x=r(58684),S=r(12489),T=r(85409),C=r(14086),O=r(58463),I=r(64770);let A=x.b4,w=x.N0,D=I.K.Trigger,E=I.K.TriggerKey,M={dragRotate:(0,I.K)([D(A.Flag.Primary,w.create()),D(A.Flag.Trigger)],"Rotate","Drag using ${triggers}"),dragRotateZ:(0,I.K)([D(A.Flag.Primary,w.create({shift:!0,control:!0}))],"Rotate around z-axis (roll)","Drag using ${triggers}"),dragPan:(0,I.K)([D(A.Flag.Secondary,w.create()),D(A.Flag.Primary,w.create({control:!0}))],"Pan","Drag using ${triggers}"),dragZoom:I.K.Empty,dragFocus:(0,I.K)([D(A.Flag.Forth,w.create())],"Focus","Drag using ${triggers}"),dragFocusZoom:(0,I.K)([D(A.Flag.Auxilary,w.create())],"Focus and zoom","Drag using ${triggers}"),scrollZoom:(0,I.K)([D(A.Flag.Auxilary,w.create())],"Zoom","Scroll using ${triggers}"),scrollFocus:(0,I.K)([D(A.Flag.Auxilary,w.create({shift:!0}))],"Clip","Scroll using ${triggers}"),scrollFocusZoom:I.K.Empty,keyMoveForward:(0,I.K)([E("KeyW"),E("GamepadUp")],"Move forward","Press ${triggers}"),keyMoveBack:(0,I.K)([E("KeyS"),E("GamepadDown")],"Move back","Press ${triggers}"),keyMoveLeft:(0,I.K)([E("KeyA")],"Move left","Press ${triggers}"),keyMoveRight:(0,I.K)([E("KeyD")],"Move right","Press ${triggers}"),keyMoveUp:(0,I.K)([E("KeyR")],"Move up","Press ${triggers}"),keyMoveDown:(0,I.K)([E("KeyF")],"Move down","Press ${triggers}"),keyRollLeft:(0,I.K)([E("KeyQ")],"Roll left","Press ${triggers}"),keyRollRight:(0,I.K)([E("KeyE")],"Roll right","Press ${triggers}"),keyPitchUp:(0,I.K)([E("ArrowUp",w.create({shift:!0}))],"Pitch up","Press ${triggers}"),keyPitchDown:(0,I.K)([E("ArrowDown",w.create({shift:!0}))],"Pitch down","Press ${triggers}"),keyYawLeft:(0,I.K)([E("ArrowLeft",w.create({shift:!0}))],"Yaw left","Press ${triggers}"),keyYawRight:(0,I.K)([E("ArrowRight",w.create({shift:!0}))],"Yaw right","Press ${triggers}"),boostMove:(0,I.K)([E("ShiftLeft")],"Boost move","Press ${triggers}"),enablePointerLock:(0,I.K)([E("Space",w.create({control:!0}))],"Enable pointer lock","Press ${triggers}")},P={rotateSpeed:C.e.Numeric(5,{min:1,max:10,step:1}),zoomSpeed:C.e.Numeric(7,{min:1,max:15,step:1}),panSpeed:C.e.Numeric(1,{min:.1,max:5,step:.1}),moveSpeed:C.e.Numeric(.75,{min:.1,max:3,step:.1}),boostMoveFactor:C.e.Numeric(5,{min:.1,max:10,step:.1}),flyMode:C.e.Boolean(!1),animate:C.e.MappedStatic("off",{off:C.e.EmptyGroup(),spin:C.e.Group({speed:C.e.Numeric(.1,{min:-2,max:2,step:.01},{description:"Number of rotations per second"}),axis:C.e.Vec3(y.AO.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Spin the 3D scene around an axis in camera space"}),rock:C.e.Group({speed:C.e.Numeric(.3,{min:-5,max:5,step:.1},{description:"Number of oscilations per second"}),angle:C.e.Numeric(10,{min:0,max:90,step:1},{description:"How many degrees to rotate in each direction."}),axis:C.e.Vec3(y.AO.create(0,-1,0),{},{description:"Axis of rotation in camera space"})},{description:"Rock the 3D scene around an axis in camera space"})}),staticMoving:C.e.Boolean(!0,{isHidden:!0}),dynamicDampingFactor:C.e.Numeric(.2,{},{isHidden:!0}),minDistance:C.e.Numeric(.01,{},{isHidden:!0}),maxDistance:C.e.Numeric(1e150,{},{isHidden:!0}),gestureScaleFactor:C.e.Numeric(1,{},{isHidden:!0}),maxWheelDelta:C.e.Numeric(.02,{},{isHidden:!0}),autoAdjustMinMaxDistance:C.e.MappedStatic("on",{off:C.e.EmptyGroup(),on:C.e.Group({minDistanceFactor:C.e.Numeric(0),minDistancePadding:C.e.Numeric(5),maxDistanceFactor:C.e.Numeric(10),maxDistanceMin:C.e.Numeric(20)})},{isHidden:!0})},k={bindings:M};(s||(s={})).create=function(e,t,r,a={},n={}){let i={...C.e.getDefaultValues(P),...a},o={...k,...n},s=o.bindings,l=T.l_.clone(t.viewport),u=!1,c=e.drag.subscribe(function({x:r,y:a,dx:n,dy:i,pageX:o,pageY:u,buttons:c,modifiers:d,isStart:p,useDelta:f}){let m=!f&&ev(r,a);if(p&&m||!p&&!S)return;S=!0,ew=0;let h=I.K.match(s.dragRotate,c,d),g=I.K.match(s.dragRotateZ,c,d),b=I.K.match(s.dragPan,c,d),x=I.K.match(s.dragZoom,c,d),T=I.K.match(s.dragFocus,c,d),C=I.K.match(s.dragFocusZoom,c,d);f&&h&&y.Sg.copy(D,Y(o-n,u-i)),Y(o,u),Q(o,u);let O=e.pixelRatio,A=(r*O-l.width/2-l.x)/l.width,w=-(e.height-a*O-l.height/2-l.y)/l.height;if(p&&(h&&(y.Sg.copy(E,Z),y.Sg.copy(D,E)),g&&(y.Sg.set(R,A,w),y.Sg.copy(_,R)),(x||C)&&(y.Sg.copy(N,K),y.Sg.copy(G,N)),T&&(y.Sg.copy(U,K),y.Sg.copy(V,U)),b&&(y.Sg.copy(j,K),y.Sg.copy(H,j))),h&&y.Sg.copy(E,Z),g&&y.Sg.set(R,A,w),(x||C)&&y.Sg.copy(G,K),T&&y.Sg.copy(V,K),C){let e=y.AO.distance(t.state.position,t.state.target);t.setState({radius:e/5})}b&&y.Sg.copy(H,K)}),d=e.interactionEnd.subscribe(function(){S=!1}),p=e.wheel.subscribe(function({x:e,y:t,spinX:r,spinY:a,dz:n,buttons:o,modifiers:l}){if(ev(e,t))return;let u=(0,O.zC)(.075*r,.075*a,1e-4*n);u<-i.maxWheelDelta?u=-i.maxWheelDelta:u>i.maxWheelDelta&&(u=i.maxWheelDelta),I.K.match(s.scrollZoom,o,l)&&(G[1]+=u),I.K.match(s.scrollFocus,o,l)&&(V[1]+=u)}),f=e.pinch.subscribe(function({isStart:e,startX:t,startY:r,centerPageX:a,centerPageY:n,fractionDelta:o,buttons:l,modifiers:u}){if(ev(t,r))return;let c=I.K.match(s.dragPan,l,u),d=I.K.match(s.scrollZoom,l,u);S=c||d,c&&(Q(a,n),e?(y.Sg.copy(j,K),y.Sg.copy(H,j)):y.Sg.copy(H,K)),d&&(G[1]+=i.gestureScaleFactor*o)}),m=e.keyDown.subscribe(function({modifiers:t,code:r,key:a,x:n,y:i}){!ev(n,i)&&(I.K.matchKey(s.keyMoveForward,r,t,a)?ef.moveForward=1:I.K.matchKey(s.keyMoveBack,r,t,a)?ef.moveBack=1:I.K.matchKey(s.keyMoveLeft,r,t,a)?ef.moveLeft=1:I.K.matchKey(s.keyMoveRight,r,t,a)?ef.moveRight=1:I.K.matchKey(s.keyMoveUp,r,t,a)?ef.moveUp=1:I.K.matchKey(s.keyMoveDown,r,t,a)?ef.moveDown=1:I.K.matchKey(s.keyRollLeft,r,t,a)?ef.rollLeft=1:I.K.matchKey(s.keyRollRight,r,t,a)?ef.rollRight=1:I.K.matchKey(s.keyPitchUp,r,t,a)?ef.pitchUp=1:I.K.matchKey(s.keyPitchDown,r,t,a)?ef.pitchDown=1:I.K.matchKey(s.keyYawLeft,r,t,a)?ef.yawLeft=1:I.K.matchKey(s.keyYawRight,r,t,a)&&(ef.yawRight=1),I.K.matchKey(s.boostMove,r,t,a)&&(ef.boostMove=1),I.K.matchKey(s.enablePointerLock,r,t,a)&&e.requestPointerLock(l))}
1),h=e.keyUp.subscribe(function({modifiers:e,code:t,key:r,x:a,y:n}){var i,o,l,u,c,d,p,f,m,h,g,b;if(ev(a,n))return;let y=!1;t.startsWith("Alt")?(y=!0,e.alt=!0):t.startsWith("Shift")?(y=!0,e.shift=!0):t.startsWith("Control")?(y=!0,e.control=!0):t.startsWith("Meta")&&(y=!0,e.meta=!0);let x=[];for(let a of(y?(ef.moveForward&&x.push((null===(i=s.keyMoveForward.triggers[0])||void 0===i?void 0:i.code)||""),ef.moveBack&&x.push((null===(o=s.keyMoveBack.triggers[0])||void 0===o?void 0:o.code)||""),ef.moveLeft&&x.push((null===(l=s.keyMoveLeft.triggers[0])||void 0===l?void 0:l.code)||""),ef.moveRight&&x.push((null===(u=s.keyMoveRight.triggers[0])||void 0===u?void 0:u.code)||""),ef.moveUp&&x.push((null===(c=s.keyMoveUp.triggers[0])||void 0===c?void 0:c.code)||""),ef.moveDown&&x.push((null===(d=s.keyMoveDown.triggers[0])||void 0===d?void 0:d.code)||""),ef.rollLeft&&x.push((null===(p=s.keyRollLeft.triggers[0])||void 0===p?void 0:p.code)||""),ef.rollRight&&x.push((null===(f=s.keyRollRight.triggers[0])||void 0===f?void 0:f.code)||""),ef.pitchUp&&x.push((null===(m=s.keyPitchUp.triggers[0])||void 0===m?void 0:m.code)||""),ef.pitchDown&&x.push((null===(h=s.keyPitchDown.triggers[0])||void 0===h?void 0:h.code)||""),ef.yawLeft&&x.push((null===(g=s.keyYawLeft.triggers[0])||void 0===g?void 0:g.code)||""),ef.yawRight&&x.push((null===(b=s.keyYawRight.triggers[0])||void 0===b?void 0:b.code)||"")):x.push(t),x))I.K.matchKey(s.keyMoveForward,a,e,r)?ef.moveForward=0:I.K.matchKey(s.keyMoveBack,a,e,r)?ef.moveBack=0:I.K.matchKey(s.keyMoveLeft,a,e,r)?ef.moveLeft=0:I.K.matchKey(s.keyMoveRight,a,e,r)?ef.moveRight=0:I.K.matchKey(s.keyMoveUp,a,e,r)?ef.moveUp=0:I.K.matchKey(s.keyMoveDown,a,e,r)?ef.moveDown=0:I.K.matchKey(s.keyRollLeft,a,e,r)?ef.rollLeft=0:I.K.matchKey(s.keyRollRight,a,e,r)?ef.rollRight=0:I.K.matchKey(s.keyPitchUp,a,e,r)?ef.pitchUp=0:I.K.matchKey(s.keyPitchDown,a,e,r)?ef.pitchDown=0:I.K.matchKey(s.keyYawLeft,a,e,r)?ef.yawLeft=0:I.K.matchKey(s.keyYawRight,a,e,r)&&(ef.yawRight=0);I.K.matchKey(s.boostMove,t,e,r)&&(ef.boostMove=0)}),g=e.move.subscribe(function({movementX:t,movementY:r}){if(!e.pointerLock||void 0===t||void 0===r)return;let a=.5*l.width-l.x,n=.5*l.height-l.y;y.Sg.copy(D,Y(a,n)),y.Sg.copy(E,Y(t+a,r+n))}),b=e.lock.subscribe(function(e){e?ex():eS()}),x=e.leave.subscribe(function(){ef.moveForward=0,ef.moveBack=0,ef.moveLeft=0,ef.moveRight=0,ef.moveUp=0,ef.moveDown=0,ef.rollLeft=0,ef.rollRight=0,ef.pitchUp=0,ef.pitchDown=0,ef.yawLeft=0,ef.yawRight=0,ef.boostMove=0}),S=!1,A=(0,y.AO)(),w=(0,y.AO)(),D=(0,y.Sg)(),E=(0,y.Sg)(),M=(0,y.AO)(),B=0,_=(0,y.Sg)(),R=(0,y.Sg)(),F=0,L=0,z=0,N=(0,y.Sg)(),G=(0,y.Sg)(),U=(0,y.Sg)(),V=(0,y.Sg)(),j=(0,y.Sg)(),H=(0,y.Sg)(),q=y.AO.clone(t.target),X=y.AO.clone(t.position),W=y.AO.clone(t.up),K=(0,y.Sg)();function Q(e,t){return y.Sg.set(K,(e-l.x)/l.width,(t-l.y)/l.height)}let Z=(0,y.Sg)();function Y(e,t){return y.Sg.set(Z,(e-.5*l.width-l.x)/(.5*l.width),(l.height+2*(l.y-t))/l.width)}let $=(0,y.AO)(),J=(0,y.D6)(),ee=(0,y.AO)(),et=(0,y.AO)(),er=(0,y.AO)(),ea=(0,y.AO)(),en=(0,y.D6)(),ei=(0,y.AO)(),eo=(0,y.D6)(),es=(0,y.AO)(),el=(0,y.D6)(),eu=(0,y.AO)(),ec=(0,y.Sg)(),ed=(0,y.AO)(),ep=(0,y.AO)(),ef={moveUp:0,moveDown:0,moveLeft:0,moveRight:0,moveForward:0,moveBack:0,pitchUp:0,pitchDown:0,yawLeft:0,yawRight:0,rollLeft:0,rollRight:0,boostMove:0},em=(0,y.AO)(),eh=(0,y.AO)();function eg(){let e=Math.min(Math.max(1e3*t.state.radiusMax,.01),i.maxDistance);y.AO.squaredMagnitude(w)>e*e&&(y.AO.setMagnitude(w,w,e),y.AO.add(t.position,t.target,w),y.Sg.copy(N,G),y.Sg.copy(U,V)),y.AO.squaredMagnitude(w)<i.minDistance*i.minDistance&&(y.AO.setMagnitude(w,w,i.minDistance),y.AO.add(t.position,t.target,w),y.Sg.copy(N,G),y.Sg.copy(U,V))}function ev(t,r){return t*=e.pixelRatio,r*=e.pixelRatio,t>l.x+l.width||e.height-r>l.y+l.height||t<l.x||e.height-r<l.y}let eb=-1;function ey(a){if(eb===a)return;let n=a-eb;eb>0&&("spin"===i.animate.name?function(e){if("spin"!==i.animate.name||0===i.animate.params.speed||S)return;let r=2*Math.PI*i.animate.params.speed/1e3;y.AO.sub(w,t.position,t.target),y.AO.normalize(eA,w),y.AO.normalize(eO,t.up),y.AO.cross(eI,eO,eA),y.AO.n
1ormalize(eI,eI);let a=i.animate.params.axis;y.AO.set(eC,a[0]*eI[0]+a[1]*eO[0]+a[2]*eA[0],a[0]*eI[1]+a[1]*eO[1]+a[2]*eA[1],a[0]*eI[2]+a[1]*eO[2]+a[2]*eA[2]),y.AO.normalize(eC,eC),y.D6.setAxisAngle(eT,eC,e*r),y.AO.transformQuat(w,w,eT),y.AO.transformQuat(t.up,t.up,eT),y.AO.add(t.position,t.target,w)}(n):"rock"===i.animate.name&&function(e){if("rock"!==i.animate.name||0===i.animate.params.speed||S)return;let r=e/1e3*i.animate.params.speed,a=(0,O.Id)(i.animate.params.angle),n=Math.sin(ew*Math.PI*2)*a,o=Math.sin((ew+r)*Math.PI*2)*a;y.AO.sub(w,t.position,t.target),y.AO.normalize(eA,w),y.AO.normalize(eO,t.up),y.AO.cross(eI,eO,eA),y.AO.normalize(eI,eI);let s=i.animate.params.axis;y.AO.set(eC,s[0]*eI[0]+s[1]*eO[0]+s[2]*eA[0],s[0]*eI[1]+s[1]*eO[1]+s[2]*eA[1],s[0]*eI[2]+s[1]*eO[2]+s[2]*eA[2]),y.AO.normalize(eC,eC),y.D6.setAxisAngle(eT,eC,o-n),y.AO.transformQuat(w,w,eT),y.AO.transformQuat(t.up,t.up,eT),y.AO.add(t.position,t.target,w),(ew+=r)>=1&&(ew=0)}(n)),y.AO.sub(w,t.position,t.target),function(){let r=E[0]-D[0],a=E[1]-D[1];y.AO.set(ea,r,a,0);let n=y.AO.magnitude(ea)*function(){let t=e.width/e.height||1;return i.rotateSpeed*e.pixelRatio*t}();n?(y.AO.sub(w,t.position,t.target),y.AO.normalize(ee,w),y.AO.normalize(et,t.up),y.AO.normalize(er,y.AO.cross(er,et,ee)),y.AO.setMagnitude(et,et,a),y.AO.setMagnitude(er,er,r),y.AO.add(ea,et,er),y.AO.normalize($,y.AO.cross($,ea,w)),y.D6.setAxisAngle(J,$,n),y.AO.transformQuat(w,w,J),y.AO.transformQuat(t.up,t.up,J),y.AO.copy(M,$),B=n):!i.staticMoving&&B&&(B*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.sub(w,t.position,t.target),y.D6.setAxisAngle(J,M,B),y.AO.transformQuat(w,w,J),y.AO.transformQuat(t.up,t.up,J)),y.Sg.copy(D,E)}(),function(){let e=(ef.rollRight-ef.rollLeft)/45,r=-((R[0]-_[0])*Math.sign(R[1])),a=-((R[1]-_[1])*Math.sign(R[0])),n=-i.rotateSpeed*(-r+a)+e;n?(y.AO.normalize(ei,w),y.D6.setAxisAngle(en,ei,n),y.AO.transformQuat(t.up,t.up,en),F=n):!i.staticMoving&&F&&(F*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.normalize(ei,w),y.D6.setAxisAngle(en,ei,F),y.AO.transformQuat(t.up,t.up,en)),y.Sg.copy(_,R)}(),function(){let e=(ef.pitchUp-ef.pitchDown)/(i.flyMode?360:90),r=-i.rotateSpeed*e;r?(y.AO.cross(es,w,t.up),y.AO.normalize(es,es),y.D6.setAxisAngle(eo,es,r),y.AO.transformQuat(w,w,eo),y.AO.transformQuat(t.up,t.up,eo),L=r):!i.staticMoving&&L&&(L*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.cross(es,w,t.up),y.AO.normalize(es,es),y.D6.setAxisAngle(eo,es,L),y.AO.transformQuat(w,w,eo),y.AO.transformQuat(t.up,t.up,eo))}(),function(){let e=(ef.yawRight-ef.yawLeft)/(i.flyMode?360:90),r=-i.rotateSpeed*e;r?(y.AO.normalize(eu,t.up),y.D6.setAxisAngle(el,eu,r),y.AO.transformQuat(w,w,el),y.AO.transformQuat(t.up,t.up,el),z=r):!i.staticMoving&&z&&(z*=Math.sqrt(1-i.dynamicDampingFactor),y.AO.normalize(eu,t.up),y.D6.setAxisAngle(el,eu,z),y.AO.transformQuat(w,w,el),y.AO.transformQuat(t.up,t.up,el))}(),function(){let e=1+(G[1]-N[1])*i.zoomSpeed;1!==e&&e>0&&y.AO.scale(w,w,e),i.staticMoving?y.Sg.copy(N,G):N[1]+=(G[1]-N[1])*i.dynamicDampingFactor}(),function(){let e=(V[1]-U[1])*i.zoomSpeed;if(0!==e){let r=Math.max(1,t.state.radius+t.state.radius*e);t.setState({radius:r})}i.staticMoving?y.Sg.copy(U,V):U[1]+=(V[1]-U[1])*i.dynamicDampingFactor}(),function(){if(y.Sg.sub(ec,y.Sg.copy(ec,H),j),y.Sg.squaredMagnitude(ec)){let r=e.pixelRatio*i.panSpeed;ec[0]*=1/t.zoom*t.viewport.width*r,ec[1]*=1/t.zoom*t.viewport.height*r,y.AO.cross(ep,y.AO.copy(ep,w),t.up),y.AO.setMagnitude(ep,ep,ec[0]),y.AO.setMagnitude(ed,t.up,ec[1]),y.AO.add(ep,ep,ed),y.AO.add(t.position,t.position,ep),y.AO.add(t.target,t.target,ep),i.staticMoving?y.Sg.copy(j,H):(y.Sg.sub(ec,H,j),y.Sg.scale(ec,ec,i.dynamicDampingFactor),y.Sg.add(j,j,ec))}}(),y.AO.add(t.position,t.target,w),eg(),eb>0&&function(a){y.AO.sub(eh,t.position,t.target);let n=Math.max(t.state.minNear,i.minDistance);y.AO.setMagnitude(eh,eh,n);let o=i.flyMode||e.pointerLock,s=.06*a*i.moveSpeed*(1===ef.boostMove?i.boostMoveFactor:1);if(1===ef.moveForward&&(y.AO.distance(t.position,r.boundingSphereVisible.center)<r.boun
1dingSphereVisible.radius&&o?(y.AO.normalize(em,eh),y.AO.scaleAndSub(t.position,t.position,em,s)):(y.AO.sub(em,t.position,t.target),y.AO.scale(em,em,1-s/100),y.AO.add(t.position,t.target,em)),o&&y.AO.sub(t.target,t.position,eh)),1===ef.moveBack&&(y.AO.distance(t.position,r.boundingSphereVisible.center)<r.boundingSphereVisible.radius&&o?(y.AO.normalize(em,eh),y.AO.scaleAndAdd(t.position,t.position,em,s)):(y.AO.sub(em,t.position,t.target),y.AO.scale(em,em,1+s/100),y.AO.add(t.position,t.target,em)),o&&y.AO.sub(t.target,t.position,eh)),1===ef.moveLeft&&(y.AO.cross(em,eh,t.up),y.AO.normalize(em,em),o?(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveRight&&(y.AO.cross(em,eh,t.up),y.AO.normalize(em,em),o?(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveUp&&(y.AO.normalize(em,t.up),o?(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),1===ef.moveDown&&(y.AO.normalize(em,t.up),o?(y.AO.scaleAndSub(t.position,t.position,em,s),y.AO.sub(t.target,t.position,eh)):(y.AO.scaleAndAdd(t.position,t.position,em,s),y.AO.sub(t.target,t.position,w))),o){let e=y.AO.distance(t.position,r.boundingSphereVisible.center);t.setState({minFar:e+r.boundingSphereVisible.radius})}}(Math.min(n,250)),y.AO.sub(w,t.position,t.target),eg(),y.AO.squaredDistance(A,t.position)>y.Ib&&y.AO.copy(A,t.position),eb=a}function ex(){y.AO.sub(eh,t.position,t.target);let e=Math.max(t.state.minNear,i.minDistance);y.AO.setMagnitude(eh,eh,e),y.AO.sub(t.target,t.position,eh);let a=y.AO.distance(t.position,r.boundingSphereVisible.center);t.setState({minFar:a+r.boundingSphereVisible.radius})}function eS(){let{center:e,radius:a}=r.boundingSphereVisible;if(y.AO.distance(t.position,e)>a){let r=t.getFocus(e,a);t.setState({...r,minFar:0})}else t.setState({minFar:0,radius:r.boundingSphereVisible.radius})}let eT=(0,y.D6)(),eC=(0,y.AO)(),eO=(0,y.AO)(),eI=(0,y.AO)(),eA=(0,y.AO)(),ew=0;return{viewport:l,get isAnimating(){return"off"!==i.animate.name},get isMoving(){return 1===ef.moveForward||1===ef.moveBack||1===ef.moveLeft||1===ef.moveRight||1===ef.moveUp||1===ef.moveDown||1===ef.rollLeft||1===ef.rollRight||1===ef.pitchUp||1===ef.pitchDown||1===ef.yawLeft||1===ef.yawRight},get props(){return i},setProps:e=>{var t;(null===(t=e.animate)||void 0===t?void 0:t.name)==="rock"&&"rock"!==i.animate.name&&(ew=0),void 0!==e.flyMode&&e.flyMode!==i.flyMode&&(e.flyMode?ex():eS()),Object.assign(i,e)},get attribs(){return o},setAttribs:e=>{Object.assign(o,e),Object.assign(s,o.bindings)},start:function(e){eb=-1,ey(e)},update:ey,reset:function(){y.AO.copy(t.target,q),y.AO.copy(t.position,X),y.AO.copy(t.up,W),y.AO.sub(w,t.position,t.target),y.AO.copy(A,t.position)},dispose:function(){u||(u=!0,c.unsubscribe(),p.unsubscribe(),f.unsubscribe(),d.unsubscribe(),m.unsubscribe(),h.unsubscribe(),g.unsubscribe(),b.unsubscribe(),x.unsubscribe())}}};var B=r(75404),_=r(7791),R=r(32747),F=r(67589),L=r(71211),z=r(67241),N=r(89623),G=r(34748),U=r(4376),V=r(48930),j=r(7922),H=r(93964),q=r(85764),X=r(11803);let W={sceneBoundingSpheres:C.e.Boolean(!1,{description:"Show full scene bounding spheres."}),visibleSceneBoundingSpheres:C.e.Boolean(!1,{description:"Show visible scene bounding spheres."}),objectBoundingSpheres:C.e.Boolean(!1,{description:"Show bounding spheres of visible render objects."}),instanceBoundingSpheres:C.e.Boolean(!1,{description:"Show bounding spheres of visible instances."})};class K{constructor(e,t,r){this.objectsData=new Map,this.instancesData=new Map,this.scene=R.x.create(e,"blended"),this.parent=t,this._props={...C.e.getDefaultValues(W),...r}}update(){let e=Q(this.scene,this.parent.boundingSphere,this.sceneData,j.t.lightgrey,Z);e&&(this.sceneData=e);let t=Q(this.scene,this.parent.boundingSphereVisible,this.visibleSceneData,j.t.black,Y);t&&(this.visibleSceneData=t),this.parent.forEach((e,t)=>{let r=this.objectsData.get(t),a=Q(this.scene,e.values.boundingSphere.ref.value,r,j.t.tomato,$);a&&this.objectsData.set(t,a);let n=this.instancesData.get(t),i=Q(this.scene,e.values.invariantBoundingSphere.ref.value,n,j.t.skyblue,J,{aTransform:t.values.aTransform,matrix:t.values.matrix,transform:t.values.transform,extraTransform:t.values.extraTransform,uInstanceCount:t.values.uInstanceCount,instanceCount:t.values.instanceCount,aInstance:t.values.aInstance,hasReflection:t.values.hasReflection,instanceGrid:t.values.instanceGrid});i&&this.instancesData.set(t,i)}),this.objectsData.forEach((e,t)=>{this.parent.has(t)||(this.scene.remove(e.renderObject),this.objectsData.delete(t))}),this.instancesData.forEach((e,t)=>{this.parent.has(t)||(this.scene.remove(e.renderObject),this.instancesData.delete(t))}),this.scene.update(void 0,!1),this.scene.commit()}syncVisibility(){this.sceneData&&(this.sceneData.renderObject.state.visible=this._props.sceneBoundingSpheres),this.visibleSceneData&&(this.visibleSceneData.renderObject.state.visible=this._props.visibleSceneBoundingSpheres),this.parent.forEach((e,t)=>{let r=this.objectsData.get(t);r&&(r.renderObject.state.visible=t.state.visible&&this._props.objectBoundingSpheres);let a=this.instancesData.get(t);a&&(a.renderObject.state.visible=t.state.visible&&this._props.instanceBoundingSpheres)})}clear(){this.sceneData=void 0,this.objectsData.clear(),this.scene.clear()}get isEnabled(){return this._props.sceneBoundingSpheres||this._props.visibleSceneBoundingSpheres||this._props.objectBoundingSpheres||this._props.instanceBoundingSpheres}get props(){return this._props}setProps(e){Object.assign(this._props,e),this.isEnabled&&this.update()}}function Q(e,t,r,a,n,i){if(!r||!V.CP.equals(r.boundingSphere,t)){let o=function(e,t){let r=(0,H.U)(2),a=N.V.createState(r,r/2,t);
1if(e.radius&&((0,G.H)(a,e.center,e.radius,2),V.CP.hasExtrema(e)))for(let t of e.extrema)(0,G.H)(a,t,1,0);return N.V.getMesh(a)}(t,r&&r.mesh),s=r?r.renderObject:function(e,t,r,a){let n=U.K.Utils.createValuesSimple(e,{alpha:.1,doubleSided:!1,cellSize:0,batchSize:0},t,1,a);return(0,z.Hq)("mesh",n,{disposed:!1,visible:!0,alphaFactor:1,pickable:!1,colorOnly:!1,opaque:!1,writeDepth:!1},r)}(o,a,n,i);return r?q.IO.updateIfChanged(s.values.drawCount,X.Z.getDrawCount(o)):e.add(s),{boundingSphere:V.CP.clone(t),renderObject:s,mesh:o}}}let Z=(0,z.xH)(),Y=(0,z.xH)(),$=(0,z.xH)(),J=(0,z.xH)();var ee=r(63964),et=r(2078),er=r(30502),ea=r(34487);let en=(0,y.AO)(),ei=(0,y.AO)(),eo=(0,y.AO)(),es={maxFps:C.e.Numeric(30,{min:10,max:60,step:10}),preferAtomPixelPadding:C.e.Numeric(3,{min:0,max:20,step:1},{description:"Number of extra pixels at which to prefer atoms over bonds."}),convertCoordsToRay:C.e.Boolean(!1,{description:"Convert screen coordinates to ray for picking."})};class el{setProps(e){Object.assign(this.props,e)}getTarget(){return this.ray?this.ray:this.props.convertCoordsToRay?this.camera.getRay((0,ea.k)(),this.endX,this.input.height-this.endY):y.Sg.create(this.endX,this.endY)}handleMove(){(this.startX!==this.endX||this.startY!==this.endY||this.input.pointerLock&&!this.controls.isMoving)&&(this.pickData=this.canvasAsyncIdentify(this.getTarget()),this.startX=this.endX,this.startY=this.endY)}handleClick(){let e=this.canvasIdentify(this.getTarget()),t=this.getLoci(null==e?void 0:e.id,null==e?void 0:e.position);this.events.click.next({current:t,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:null==e?void 0:e.position}),this.prevLoci=t}handleDrag(){this.startX===this.endX&&this.startY===this.endY&&(!this.input.pointerLock||this.controls.isMoving)||this.outsideViewport(this.startX,this.startY,this.ray)||(this.events.drag.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,pageStart:y.Sg.create(this.startX,this.startY),pageEnd:y.Sg.create(this.endX,this.endY)}),this.startX=this.endX,this.startY=this.endY)}tick(e){if(this.inside){if(this.pickData){let e=this.pickData.tryGet();if("pending"!==e){if(this.position=null==e?void 0:e.position,this.inside){let t=this.getLoci(null==e?void 0:e.id,null==e?void 0:e.position);this.events.hover.next({current:t,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:null==e?void 0:e.position}),this.prevLoci=t}this.pickData=void 0}}e-this.prevT>1e3/this.props.maxFps&&(this.prevT=e,this.isInteracting?this.handleDrag():this.handleMove())}}leave(){this.inside=!1,_.hX.Loci.isEmpty(this.prevLoci)||(this.prevLoci=_.hX.Loci.Empty,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers}))}move(e,t,r,a,n,i){this.inside=!0,this.buttons=r,this.button=a,this.modifiers=n,this.ray=i,this.endX=e,this.endY=t}click(e,t,r,a,n,i){this.endX=e,this.endY=t,this.buttons=r,this.button=a,this.modifiers=n,this.ray=i,this.handleClick()}drag(e,t,r,a,n){this.endX=e,this.endY=t,this.buttons=r,this.button=a,this.modifiers=n,this.handleDrag()}modify(e){x.N0.areEqual(e,this.modifiers)||(this.modifiers=e,this.events.hover.next({current:this.prevLoci,buttons:this.buttons,button:this.button,modifiers:this.modifiers,page:y.Sg.create(this.endX,this.endY),position:this.position}))}outsideViewport(e,t,r){if(r)return!1;let{input:a,camera:{viewport:n}}=this;return e*=a.pixelRatio,t*=a.pixelRatio,e>n.x+n.width||a.height-t>n.y+n.height||e<n.x||a.height-t<n.y}getLoci(e,t){var r;let{repr:a,loci:n}=this.lociGetter(e);if(t&&a&&er.Bond.isLoci(n)&&2===n.bonds.length){let{aUnit:e,aIndex:i}=n.bonds[0];e.conformation.position(e.elements[i],en),y.AO.sub(eo,this.camera.state.position,this.camera.state.target),y.AO.projectPointOnPlane(ei,t,eo,en);let o=this.camera.getPixelSize(ei),s=a.theme.size.size(n.bonds[0])*(null!==(r=a.props.sizeFactor)&&void 0!==r?r:1);if(!1===a.props.lineSizeAttenuation&&(s*=o/2),s+=this.props.preferAtomPixelPadding*o,y.AO.distance(ei,en)<s)return{repr:a,loci:er.Bond.toFirstStructureElementLoci(n)}}return{repr:a,loci:n}}dispose(){this.ev.dispose()}constructor(e,t,r,a,n,i,o={}){this.canvasIdentify=e,this.canvasAsyncIdentify=t,this.lociGetter=r,this.input=a,this.camera=n,this.controls=i,this.ev=et.d.create(),this.events={hover:this.ev(),drag:this.ev(),click:this.ev()},this.startX=-1,this.startY=-1,this.endX=-1,this.endY=-1,this.ray=void 0,this.pickData=void 0,this.position=void 0,this.isInteracting=!1,this.prevLoci=_.hX.Loci.Empty,this.prevT=0,this.inside=!1,this.buttons=x.b4.create(0),this.button=x.b4.create(0),this.modifiers=x.N0.None,this.props={...C.e.getDefaultValues(es),...o},a.drag.subscribe(({x:e,y:t,buttons:r,button:a,modifiers:n})=>{this.isInteracting=!0,this.drag(e,t,r,a,n)}),a.move.subscribe(({x:e,y:t,inside:r,buttons:a,button:n,modifiers:i,onElement:o,ray:s})=>{if(r&&!this.isInteracting){if(!o){this.leave();return}this.move(e,t,a,n,i,s)}}),a.leave.subscribe(()=>{this.leave()}),a.click.subscribe(({x:e,y:t,buttons:r,button:a,modifiers:n,ray:i})=>{this.outsideViewport(e,t,i)||this.click(e,t,r,a,n,i)}),a.interactionEnd.subscribe(()=>{this.isInteracting=!1}),a.modifiers.subscribe(e=>{this.modify(e)})}}
1var eu=r(32799),ec=r(68971),ed=r(18406),ep=r(45705),ef=r(57155),em=r(62113),eh=r(10410);let eg=` 2precision highp float; 3precision highp sampler2D; 4 5uniform sampler2D tColor; 6uniform vec2 uTexSize; 7uniform float uWeight; 8 9void main() { 10 vec2 coords = gl_FragCoord.xy / uTexSize; 11 gl_FragColor = texture2D(tColor, coords) * uWeight; 12} 13`;var ev=r(48502);let eb={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},ey=(0,ep.Lq)("compose",eh.C,eg),ex={mode:C.e.Select("temporal",[["off","Off"],["on","On"],["temporal","Temporal"]]),sampleLevel:C.e.Numeric(2,{min:0,max:5,step:1},{description:"Take level^2 samples."}),reduceFlicker:C.e.Boolean(!0,{description:'Reduce flicker in "temporal" mode.'}),reuseOcclusion:C.e.Boolean(!0,{description:"Reuse occlusion data. It is faster but has some artefacts."})};class eS{static isEnabled(e){return"off"!==e.mode}constructor(e,t){this.webgl=e,this.drawPass=t;let{colorBufferFloat:r,textureFloat:a,colorBufferHalfFloat:n,textureHalfFloat:i}=e.extensions,o=t.colorTarget.getWidth(),s=t.colorTarget.getHeight();this.colorTarget=e.createRenderTarget(o,s,!1),this.composeTarget=e.createRenderTarget(o,s,!1,n&&i?"fp16":r&&a?"float32":"uint8"),this.holdTarget=e.createRenderTarget(o,s,!1),this.compose=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...eb},n=(0,ef.s8)(e,"triangles",ey,a,r);return(0,em.T)(n,r)}(e,t.colorTarget.texture)}getByteCount(){return this.colorTarget.getByteCount()+this.composeTarget.getByteCount()+this.holdTarget.getByteCount()}syncSize(){let e=this.drawPass.colorTarget.getWidth(),t=this.drawPass.colorTarget.getHeight(),[r,a]=this.compose.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.colorTarget.setSize(e,t),this.composeTarget.setSize(e,t),this.holdTarget.setSize(e,t),q.IO.update(this.compose.values.uTexSize,y.Sg.set(this.compose.values.uTexSize.ref.value,e,t)))}render(e,t,r,a,n){return"temporal"!==r.multiSample.mode||n?(this.renderMultiSample(t,a,r),-2):this.renderTemporalMultiSample(e,t,r,a)}bindOutputTarget(e){e?this.webgl.bindDrawingBuffer():this.colorTarget.bind()}renderMultiSample(e,t,r){let{camera:a}=e,{compose:n,composeTarget:i,drawPass:o,webgl:s}=this,{gl:l,state:u}=s;ev.kM&&s.timer.mark("MultiSamplePass.renderMultiSample");let c=eT[Math.max(0,Math.min(r.multiSample.sampleLevel,5))],{x:d,y:p,width:f,height:m}=a.viewport,h=1/c.length,g=1/32;a.viewOffset.enabled=!0,q.IO.update(n.values.tColor,o.getColorTarget(r.postprocessing).texture),n.update();for(let t=0;t<c.length;++t){let s=c[t];
13L.V.setViewOffset(a.viewOffset,f,m,s[0],s[1],f,m),a.update();let b=h+g*(-.5+(t+.5)/c.length);q.IO.update(n.values.uWeight,b),0!==t&&r.multiSample.reuseOcclusion?o.postprocessing.setOcclusionOffset(s[0]/f,s[1]/m):o.postprocessing.setOcclusionOffset(0,0),o.render(e,r,!1),i.bind(),u.enable(l.BLEND),u.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD),u.blendFuncSeparate(l.ONE,l.ONE,l.ONE,l.ONE),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(d,p,f,m),u.scissor(d,p,f,m),0===t&&(u.clearColor(0,0,0,0),l.clear(l.COLOR_BUFFER_BIT)),n.render()}o.postprocessing.setOcclusionOffset(0,0),q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,i.texture),n.update(),this.bindOutputTarget(t),u.viewport(d,p,f,m),u.scissor(d,p,f,m),u.disable(l.BLEND),n.render(),a.viewOffset.enabled=!1,a.update(),ev.kM&&s.timer.markEnd("MultiSamplePass.renderMultiSample")}renderTemporalMultiSample(e,t,r,a){let{camera:n}=t,{compose:i,composeTarget:o,holdTarget:s,drawPass:l,webgl:u}=this,{gl:c,state:d}=u;ev.kM&&u.timer.mark("MultiSamplePass.renderTemporalMultiSample");let p=eT[Math.max(0,Math.min(r.multiSample.sampleLevel,5))];if(-2===e||e>=p.length)return -2;let{x:f,y:m,width:h,height:g}=n.viewport,b=1/p.length;if(-1===e)l.render(t,r,!1),q.IO.update(i.values.uWeight,1),q.IO.update(i.values.tColor,l.getColorTarget(r.postprocessing).texture),i.update(),s.bind(),d.disable(c.BLEND),d.disable(c.DEPTH_TEST),d.depthMask(!1),d.viewport(f,m,h,g),d.scissor(f,m,h,g),i.render(),e+=1;else{n.viewOffset.enabled=!0,q.IO.update(i.values.tColor,l.getColorTarget(r.postprocessing).texture),q.IO.update(i.values.uWeight,b),i.update();let a=Math.pow(2,Math.max(0,r.multiSample.sampleLevel-2));for(let s=0;s<a;++s){let a=p[e];if(L.V.setViewOffset(n.viewOffset,h,g,a[0],a[1],h,g),n.update(),0!==e&&r.multiSample.reuseOcclusion?l.postprocessing.setOcclusionOffset(a[0]/h,a[1]/g):l.postprocessing.setOcclusionOffset(0,0),l.render(t,r,!1),o.bind(),d.enable(c.BLEND),d.blendEquationSeparate(c.FUNC_ADD,c.FUNC_ADD),d.blendFuncSeparate(c.ONE,c.ONE,c.ONE,c.ONE),d.disable(c.DEPTH_TEST),d.depthMask(!1),d.viewport(f,m,h,g),d.scissor(f,m,h,g),0===e&&(d.clearColor(0,0,0,0),c.clear(c.COLOR_BUFFER_BIT)),i.render(),(e+=1)>=p.length)break}}l.postprocessing.setOcclusionOffset(0,0),this.bindOutputTarget(a),d.viewport(f,m,h,g),d.scissor(f,m,h,g);let y=e*b;return y>0&&(q.IO.update(i.values.uWeight,1),q.IO.update(i.values.tColor,o.texture),i.update(),d.disable(c.BLEND),i.render()),y<1&&(q.IO.update(i.values.uWeight,1-y),q.IO.update(i.values.tColor,s.texture),i.update(),0===y?d.disable(c.BLEND):d.enable(c.BLEND),i.render()),n.viewOffset.enabled=!1,n.update(),ev.kM&&u.timer.markEnd("MultiSamplePass.renderTemporalMultiSample"),e>=p.length?-2:e}}let eT=[[[0,0]],[[0,0],[-4,-4]],[[0,0],[6,-2],[-6,2],[2,6]],[[0,0],[-1,3],[5,1],[-3,-5],[-5,5],[-7,-1],[3,7],[7,-7]],[[0,0],[-1,-3],[-3,2],[4,-1],[-5,-2],[2,5],[5,3],[3,-5],[-2,6],[0,-7],[-4,-6],[-6,4],[-8,0],[7,-4],[6,7],[-7,-8]],[[0,0],[-7,-5],[-3,-5],[-5,-4],[-1,-4],[-2,-2],[-6,-1],[-4,0],[-7,1],[-1,2],[-6,3],[-3,3],[-7,6],[-3,6],[-5,7],[-1,7],[5,-7],[1,-6],[6,-5],[4,-4],[2,-3],[7,-2],[1,-1],[4,-1],[2,1],[6,2],[0,4],[4,4],[2,5],[7,5],[5,6],[3,7]]];eT.forEach(e=>{e.forEach(e=>{e[0]*=.0625,e[1]*=.0625})});class eC{update(e,t){return e&&(this.sampleIndex=-1),"temporal"===t.mode&&-2!==this.sampleIndex}render(e,t,r,a){return this.sampleIndex=this.multiSamplePass.render(this.sampleIndex,e,t,r,!!a),this.sampleIndex<0}constructor(e){this.multiSamplePass=e,this.sampleIndex=-2}}var eO=r(80898),eI=r(62131),eA=r(81421);class ew{constructor(e,t,r,a){this.webgl=e,this.width=t,this.height=r,this.pickScale=a;let n=a/e.pixelRatio;this.pickWidth=Math.ceil(t*n),this.pickHeight=Math.ceil(r*n);let{resources:i,extensions:{drawBuffers:o},gl:s}=e;o?(this.objectPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture=i.texture("image-uint8","rgba","ubyte","nearest"),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.framebuffer=i.framebuffer(),this.objectPickFramebuffer=i.framebuffer(),this.instancePickFramebuffer=i.framebuffer(),this.groupPickFramebuffer=i.framebuffer(),this.depthPickFramebuffer=i.framebuffer(),this.framebuffer.bind(),o.drawBuffers([o.COLOR_ATTACHMENT0,o.COLOR_ATTACHMENT1,o.COLOR_ATTACHMENT2,o.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer=(0,eI.D0)(s)?i.renderbuffer("depth32f","depth",this.pickWidth,this.pickHeight):i.renderbuffer("depth16","depth",this.pickWidth,this.pickHeight),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0")):(this.objectPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.instancePickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.groupPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight),this.depthPickTarget=e.createRenderTarget(this.pickWidth,this.pickHeight))}getByteCount(){return this.webgl.extensions.drawBuffers?this.objectPickTexture.getByteCount()+this.instancePickTexture.getByteCount()+this.groupPickTexture.getByteCount()+this.depthPickTexture.getByteCount()+this.depthRenderbuffer.getByteCount():this.objectPickTarget.getByteCount()+this.instancePickTarget.getByteCount()+this.groupPickTarget.getByteCount()+this.depthPickTarget.getByteCount()}dispose(){this.webgl.extensions.drawBuffers?(this.framebuffer.destroy(),this.objectPickTexture.destroy(),this.instancePickTexture.destroy(),this.groupPickTexture.destroy(),this.depthPickTexture.destroy(),this.objectPickFramebuffer.destroy(),this.instancePickFramebuffer.destroy(),this.groupPickFramebuffer.destroy(),this.depthPickFramebuffer.destroy(),this.depthRenderbuffer.destroy()):(this.objectPickTarget.destroy(),this.instancePickTarget.destroy(),this.groupPickTarget.destroy(),this.depthPickTarget.destroy())}get pickRatio(){return this.pickScale/this.webgl.pixelRatio}setPickScale(e){this.pickScale=e,this.setSize(this.width,this.height)}bindObject(){this.webgl.extensions.drawBuffers?this.objectPickFramebuffer.bind():this.objectPickTarget.bind()}bindInstance(){this.webgl.extensions.drawBuffers?this.instancePickFramebuffer.bind():this.instancePickTarget.bind()}bindGroup(){this.webgl.extensions.drawBuffers?this.groupPickFramebuffer.bind():this.groupPickTarget.bind()}bindDepth(){this.webgl.extensions.drawBuffers?this.depthPickFramebuffer.bind():this.depthPickTarget.bind()}get drawingBufferHeight(){return this.height}setSize(e,t){this.width=e,this.height=t;let r=this.pickScale/this.webgl.pixelRatio,a=Math.ceil(this.width*r),n=Math.ceil(this.height*r);(a!==this.pickWidth||n!==this.pickHeight)&&(this.pickWidth=a,this.pickHeight=n,this.webgl.extensions.drawBuffers?(this.objectPickTexture.define(this.pickWidth,this.pickHeight),this.instancePickTexture.define(this.pickWidth,this.pickHeight),this.groupPickTexture.define(this.pickWidth,this.pickHeight),this.depthPickTexture.define(this.pickWidth,this.pickHeight),this.depthRenderbuffer.setSize(this.pickWidth,this.pickHeight)):(this.objectPickTarget.setSize(this.pickWidth,this.pickHeight),this.instancePickTarget.setSize(this.pickWidth,this.pickHeight),this.groupPickTarget.setSize(this.pickWidth,this.pickHeight),this.depthPickTarget.setSize(this.pickWidth,this.pickHeight)))}reset(){let{drawBuffers:e}=this.webgl.extensions;e&&(this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2,e.COLOR_ATTACHMENT3]),this.objectPickTexture.attachFramebuffer(this.framebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.framebuffer,"color1"),this.groupPickTexture.attachFramebuffer(this.framebuffer,"color2"),this.depthPickTexture.attachFramebuffer(this.framebuffer,"color3"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer),this.objectPickTexture.attachFramebuffer(this.objectPickFramebuffer,"color0"),this.instancePickTexture.attachFramebuffer(this.instancePickFramebuffer,"color0"),this.groupPickTexture.attachFramebuffer(this.groupPickFramebuffer,"color0"),this.depthPickTexture.attachFramebuffer(this.depthPickFramebuffer,"color0"))}renderVariant(e,t,r,a,n,i){e.clear(!1),e.update(t,r),e.renderPick(r.primitives,t,n,i),a.handle.isEnabled&&e.renderPick(a.handle.scene,t,n,i),a.camera.isEnabled&&(a.camera.update(t),e.update(a.camera.camera,a.camera.scene),e.renderPick(a.camera.scene,a.camera.camera,n,i))}render(e,t,r,a){this.webgl.extensions.drawBuffers?(this.framebuffer.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.None)):(this.objectPickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Object),this.instancePickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Instance),this.groupPickTarget.bind(),this.renderVariant(e,t,r,a,"pick",S.N4.Group),this.depthPickTarget.bind(),this.renderVariant(e,t,r,a,"depth",S.N4.None))}}let eD=!1;function eE(e){return!!e.isWebGL2||(ev.Au&&!eD&&(console.log("WebGL2 required for async picking. Falling back to synchronous picking."),eD=!0),!1)}(a=l||(l={}))[a.Pending=0]="Pending",a[a.Resolved=1]="Resolved",a[a.Failed=2]="Failed";class eM{setup(){let e=this.viewport.width*this.viewport.height*4;this.object&&this.object.length===e||(this.object=new Uint8Array(e),this.instance=new Uint8Array(e),this.group=new Uint8Array(e),this.depth=new Uint8Array(e))}setViewport(e,t,r,a){T.l_.set(this.viewport,e,t,r,a),this.setup()}read(){ev.kM&&this.webgl.timer.mark("PickBuffers.read");let{x:e,y:t,width:r,height:a}=this.viewport;this.pickPass.bindObject(),this.webgl.readPixels(e,t,r,a,this.object),this.pickPass.bindInstance(),this.webgl.readPixels(e,t,r,a,this.instance),this.pickPass.bindGroup(),this.webgl.readPixels(e,t,r,a,this.group),this.pickPass.bindDepth(),this.webgl.readPixels(e,t,r,a,this.depth),this.ready=!0,ev.kM&&this.webgl.timer.markEnd("PickBuffers.read")}asyncRead(){let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return;ev.kM&&this.webgl.timer.mark("PickBuffers.asyncRead"),null!==this.fenceSync&&e.deleteSync(this.fenceSync);let{x:t,y:r,width:a,height:n}=this.viewport;this.pickPass.bindObject(),this.objectBuffer.read(t,r,a,n),this.pickPass.bindInstance(),this.instanceBuffer.read(t,r,a,n),this.pickPass.bindGroup(),this.groupBuffer.read(t,r,a,n),this.pickPass.bindDepth(),this.depthBuffer.read(t,r,a,n),this.fenceTimestamp=(0,b.z)(),this.fenceSync=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0),e.flush(),this.ready=!1,ev.kM&&this.webgl.timer.markEnd("PickBuffers.asyncRead")}check(){if(this.ready)return l.Resolved;if(null===this.fenceSync)return l.Failed;let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return l.Failed;let t=e.clientWaitSync(this.fenceSync,0,0);return t===e.WAIT_FAILED||this.lag>=this.maxAsyncReadLag?t!==e.WAIT_FAILED&&(0,b.z)()-this.fenceTimestamp<1e3/60?(this.lag+=1,l.Pending):(e.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!1,l.Failed):t===e.TIMEOUT_EXPIRED?(this.lag+=1,l.Pending):(this.objectBuffer.getSubData(this.object),this.instanceBuffer.getSubData(this.instance),this.groupBuffer.getSubData(this.group),this.depthBuffer.getSubData(this.depth),e.deleteSync(this.fenceSync),this.fenceSync=null,this.lag=0,this.ready=!0,l.Resolved)}getIdx(e,t){return(t*this.viewport.width+e)*4}getDepth(e,t){if(!this.ready)return -1;let r=this.getIdx(e,t),a=this.depth;return(0,eA.ZU)(a[r],a[r+1],a[r+2],a[r+3])}getId(e,t,r){if(!this.ready)return -1;let a=this.getIdx(e,t);return(0,eA.UF)(r[a],r[a+1],r[a+2])}getObjectId(e,t){return this.getId(e,t,this.object)}getInstanceId(e,t){return this.getId(e,t,this.instance)}getGroupId(e,t){return this.getId(e,t,this.group)}getPickingId(e,t){let r=this.getObjectId(e,t);if(-1===r||r===eO.i.Null)return;let a=this.getInstanceId(e,t);if(-1===a||a===eO.i.Null)return;let n=this.getGroupId(e,t);if(-1!==n)return{objectId:r,instanceId:a,groupId:n}}reset(){this.fenceSync=null,this.ready=!1,this.lag=0,this.fenceTimestamp=0}dispose(){let{gl:e}=this.webgl;(0,eI.D0)(e)&&(this.objectBuffer.destroy(),this.instanceBuffer.destroy(),this.groupBuffer.destroy(),this.depthBuffer.destroy(),null!==this.fenceSync&&(e.deleteSync(this.fenceSync),this.fenceSync=null))}constructor(e,t,r=5){this.webgl=e,this.pickPass=t,this.maxAsyncReadLag=r,this.viewport=T.l_.create(0,0,0,0),this.fenceSync=null,this.fenceTimestamp=0,this.ready=!1,this.lag=0,e.isWebGL2&&(this.objectBuffer=e.resources.pixelPack("rgba","ubyte"),this.instanceBuffer=e.resources.pixelPack("rgba","ubyte"),this.groupBuffer=e.resources.pixelPack("rgba","ubyte"),this.depthBuffer=e.resources.pixelPack("rgba","ubyte")),this.setup()}}var eP=r(43975);let ek={eyeSeparation:C.e.Numeric(.062,{min:.02,max:.1,step:.001},{description:"Distance between left and right camera."}),focus:C.e.Numeric(10,{min:1,max:20,step:.1},{description:"Apparent object distance."})},eB=C.e.getDefaultValues(ek);class e_{get viewport(){return this.parent.viewport}get viewOffset(){return this.parent.viewOffset}constructor(e,t={}){this.parent=e,this.left=new eR,this.right=new eR,this.props={...eB,...t}}setProps(e){Object.assign(this.props,e)}update(e){var t,r,a;
13this.parent.update(),e?(t=this.parent,r=this.left,a=this.right,eN(t,r,e.pose.views[0],e.layer),1===e.pose.views.length?a.disabled=!0:eN(t,a,e.pose.views[1],e.layer)):function(e,t,r,a){let n,i;ez(e,r),ez(e,a);let o=Math.floor(e.viewport.width/2),s=o/e.viewport.height;r.viewport.width=o,a.viewport.x+=o,a.viewport.width-=o;let l=t.eyeSeparation/2,u=l*e.near/t.focus,c=e.near*Math.tan(.5*e.state.fov);eF[12]=-l,eL[12]=l,n=-c*s+u,i=c*s+u,r.projection[0]=2*e.near/(i-n),r.projection[8]=(i+n)/(i-n),y.yb.mul(r.view,r.view,eF),y.yb.mul(r.projectionView,r.projection,r.view),y.yb.invert(r.inverseProjectionView,r.projectionView),n=-c*s-u,i=c*s-u,a.projection[0]=2*e.near/(i-n),a.projection[8]=(i+n)/(i-n),y.yb.mul(a.view,a.view,eL),y.yb.mul(a.projectionView,a.projection,a.view),y.yb.invert(a.inverseProjectionView,a.projectionView),r.disabled=!1,a.disabled=!1}(this.parent,this.props,this.left,this.right)}}(e_||(e_={})).is=function(e){return"left"in e&&"right"in e};class eR{constructor(){this.viewport=T.l_.create(0,0,0,0),this.view=(0,y.yb)(),this.projection=(0,y.yb)(),this.projectionView=(0,y.yb)(),this.inverseProjectionView=(0,y.yb)(),this.headRotation=(0,y.yb)(),this.viewEye=(0,y.yb)(),this.isAsymmetricProjection=!0,this.state=L.V.createDefaultSnapshot(),this.viewOffset=L.V.ViewOffset(),this.far=0,this.near=0,this.fogFar=0,this.fogNear=0,this.forceFull=!1,this.scale=0,this.minTargetDistance=0,this.disabled=!1}getRay(e,t,r){return y.yb.getTranslation(e.origin,y.yb.invert((0,y.yb)(),this.view)),y.AO.set(e.direction,t,r,.5),(0,T.$j)(e.direction,e.direction,this.viewport,this.inverseProjectionView),y.AO.normalize(e.direction,y.AO.sub(e.direction,e.direction,e.origin)),e}}let eF=y.yb.identity(),eL=y.yb.identity();function ez(e,t){T.l_.copy(t.viewport,e.viewport),y.yb.copy(t.view,e.view),y.yb.copy(t.projection,e.projection),y.yb.copy(t.headRotation,e.headRotation),L.V.copySnapshot(t.state,e.state),L.V.copyViewOffset(t.viewOffset,e.viewOffset),t.far=e.far,t.near=e.near,t.fogFar=e.fogFar,t.fogNear=e.fogNear,t.forceFull=e.forceFull,t.scale=e.scale,t.minTargetDistance=e.minTargetDistance}function eN(e,t,r,a){ez(e,t);let n=a.getViewport(r);T.l_.set(t.viewport,n.x,n.y,n.width,n.height),y.yb.fromArray(t.projection,r.projectionMatrix,0),y.yb.fromArray(t.view,r.transform.inverse.matrix,0),y.yb.mul(t.projectionView,t.projection,t.view),y.yb.invert(t.inverseProjectionView,t.projectionView),t.disabled=!1}class eG{setViewport(e,t,r,a){T.l_.set(this.viewport,e,t,r,a),this.update()}setPickPadding(e){this.pickPadding!==e&&(this.pickPadding=e,this.update())}update(){let{x:e,y:t,width:r,height:a}=this.viewport;this.pickRatio=this.pickPass.pickRatio,this.pickX=Math.ceil(e*this.pickRatio),this.pickY=Math.ceil(t*this.pickRatio);let n=Math.floor(r*this.pickRatio),i=Math.floor(a*this.pickRatio);(n!==this.pickWidth||i!==this.pickHeight)&&(this.pickWidth=n,this.pickHeight=i,this.halfPickWidth=Math.floor(this.pickWidth/2),this.buffers.setViewport(this.pickX,this.pickY,this.pickWidth,this.pickHeight)),this.spiral=(0,O.v$)(Math.ceil(this.pickRatio*this.pickPadding)),this.dirty=!0}render(e){ev.kM&&this.webgl.timer.mark("PickHelper.render",{captureStats:!0});let{pickX:t,pickY:r,pickWidth:a,pickHeight:n,halfPickWidth:i}=this,{renderer:o,scene:s,helper:l}=this;o.setTransparentBackground(!1),o.setDrawingBufferSize(a,n),o.setPixelRatio(this.pickRatio),e_.is(e)?(o.setViewport(t,r,i,n),this.pickPass.render(o,e.left,s,l),o.setViewport(t+i,r,a-i,n),this.pickPass.render(o,e.right,s,l)):(o.setViewport(t,r,a,n),this.pickPass.render(o,e,s,l)),this.dirty=!1,ev.kM&&this.webgl.timer.markEnd("PickHelper.render")}identifyInternal(e,t,r){if(this.webgl.isContextLost)return;let{webgl:a,pickRatio:n}=this;if(a.isContextLost)return;e*=a.pixelRatio,t*=a.pixelRatio,t=this.pickPass.drawingBufferHeight-t;let{viewport:i}=this;if(e<i.x||t<i.y||e>i.x+i.width||t>i.y+i.height)return;let o=e-i.x,s=t-i.y,l=Math.floor(o*n),u=Math.floor(s*n),c=this.buffers.getPickingId(l,u);if(void 0===c)return;let d=this.buffers.getDepth(l,u),p=eP.A.create(e,t,d);if(e_.is(r)){let t=Math.floor(i.width/2);e>i.x+t?(p[0]=i.x+(o-t)*2,(0,T.$j)(p,p,i,r.right.inverseProjectionView)):(p[0]=i.x+2*o,(0,T.$j)(p,p,i,r.left.inverseProjectionView))}else(0,T.$j)(p,p,i,r.inverseProjectionView);return{id:c,position:p}}prepare(){this.pickRatio!==this.pickPass.pickRatio&&this.update()}getPickData(e,t,r){for(let a of this.spiral){let n=this.identifyInternal(e+a[0],t+a[1],r);if(n)return n}}identify(e,t,r){return this.prepare(),this.dirty&&(ev.kM&&this.webgl.timer.mark("PickHelper.identify"),this.webgl.resources.finalizePrograms(["pick"],!0),this.render(r),this.buffers.read(),ev.kM&&this.webgl.timer.markEnd("PickHelper.identify")),this.getPickData(e,t,r)}asyncIdentify(e,t,r){return this.prepare(),this.dirty&&(ev.kM&&this.webgl.timer.mark("PickHelper.asyncIdentify"),this.render(r),this.buffers.asyncRead(),ev.kM&&this.webgl.timer.markEnd("PickHelper.asyncIdentify")),{tryGet:()=>{let a=this.buffers.check();return a===l.Resolved?this.getPickData(e,t,r):a===l.Pending?"pending":void(a===l.Failed&&(this.dirty=!0))}}}reset(){this.buffers.reset(),this.dirty=!0}dispose(){this.buffers.dispose()}constructor(e,t,r,a,n,i,o){this.webgl=e,this.renderer=t,this.scene=r,this.helper=a,this.pickPass=n,this.dirty=!0,this.buffers=new eM(this.webgl,this.pickPass),this.viewport=(0,T.l_)(),this.setViewport(i.x,i.y,i.width,i.height),this.pickPadding=o.pickPadding,eE(e)||(this.asyncIdentify=(e,t,r)=>({tryGet:()=>this.identify(e,t,r)}))}}let eU=` 14precision highp float; 15 16uniform sampler2D tWboitA; 17uniform sampler2D tWboitB; 18uniform vec2 uTexSize; 19 20void main() { 21 vec2 coords = gl_FragCoord.xy / uTexSize; 22 23 vec4 accum = texture2D(tWboitA, coords);
24 float r = 1.0 - accum.a; 25 26 accum.a = texture2D(tWboitB, coords).r; 27 // divisor needs to allow very small values for nice fading 28 gl_FragColor = vec4(accum.rgb / clamp(accum.a, 0.00000001, 50000.0), r); 29} 30`,eV={...ec.iz,tWboitA:(0,ed.U2)("texture","rgba","float","nearest"),tWboitB:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},ej=(0,ep.Lq)("evaluate-wboit",eh.C,eU);class eH{get supported(){return this._supported}getByteCount(){return this._supported?this.textureA.getByteCount()+this.textureB.getByteCount()+this.depthRenderbuffer.getByteCount():0}bind(){let{state:e,gl:t}=this.webgl;this.framebuffer.bind(),e.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),e.disable(t.DEPTH_TEST),e.blendFuncSeparate(t.ONE,t.ONE,t.ZERO,t.ONE_MINUS_SRC_ALPHA),e.enable(t.BLEND)}render(){ev.kM&&this.webgl.timer.mark("WboitPass.render");let{state:e,gl:t}=this.webgl;e.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),e.enable(t.BLEND),this.renderable.update(),this.renderable.render(),ev.kM&&this.webgl.timer.markEnd("WboitPass.render")}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.textureA.define(e,t),this.textureB.define(e,t),this.depthRenderbuffer.setSize(e,t),q.IO.update(this.renderable.values.uTexSize,y.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:e}}=this.webgl;this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1]),this.textureA.attachFramebuffer(this.framebuffer,"color0"),this.textureB.attachFramebuffer(this.framebuffer,"color1"),this.depthRenderbuffer.attachFramebuffer(this.framebuffer)}static isSupported(e){let{extensions:{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n}}=e;if(r&&a&&n&&t)return!0;if(ev.Au){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),console.log(`Missing "${e.join('", "')}" extensions required for "wboit"`)}return!1}constructor(e,t,r){if(this.webgl=e,this._supported=!1,!eH.isSupported(e))return;let{resources:a,gl:n}=e;this.textureA=a.texture("image-float32","rgba","float","nearest"),this.textureA.define(t,r),this.textureB=a.texture("image-float32","rgba","float","nearest"),this.textureB.define(t,r),this.depthRenderbuffer=(0,eI.D0)(n)?a.renderbuffer("depth32f","depth",t,r):a.renderbuffer("depth16","depth",t,r),this.renderable=function(e,t,r){let a={...ec.GE,tWboitA:q.IO.create(t),tWboitB:q.IO.create(r),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},n={...eV},i=(0,ef.s8)(e,"triangles",ej,n,a);return(0,em.T)(i,a)}(e,this.textureA,this.textureB),this.framebuffer=a.framebuffer(),this._supported=!0,this._init()}}let eq=` 31precision highp float; 32 33uniform sampler2D tDpoitFrontColor; 34uniform vec2 uTexSize; 35 36void main() { 37 vec2 coords = gl_FragCoord.xy / uTexSize; 38 gl_FragColor = texture2D(tDpoitFrontColor, coords);
39} 40`,eX=` 41 precision highp float; 42 43 uniform sampler2D tDpoitBackColor; 44 uniform vec2 uTexSize; 45 46 void main() { 47 vec2 coords = gl_FragCoord.xy / uTexSize; 48 gl_FragColor = texture2D(tDpoitBackColor, coords); 49 if (gl_FragColor.a == 0.0) { 50 discard; 51 } 52 } 53`,eW={...ec.iz,tDpoitBackColor:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},eK=(0,ep.Lq)("blend-back-dpoit",eh.C,eX),eQ={...ec.iz,tDpoitFrontColor:(0,ed.U2)("texture","rgba","float","nearest"),uTexSize:(0,ed.wt)("v2")},eZ=(0,ep.Lq)("evaluate-dpoit",eh.C,eq);class eY{get supported(){return this._supported}getByteCount(){return this._supported?this.depthTextures[0].getByteCount()+this.depthTextures[1].getByteCount()+this.colorFrontTextures[0].getByteCount()+this.colorFrontTextures[1].getByteCount()+this.colorBackTextures[0].getByteCount()+this.colorBackTextures[1].getByteCount():0}bind(){let{state:e,gl:t,extensions:{blendMinMax:r}}=this.webgl;return this.passCount=0,this.depthFramebuffers[0].bind(),e.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[1].bind(),e.clearColor(-this.MIN_DEPTH,this.MAX_DEPTH,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[0].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[1].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[0].bind(),e.blendEquation(r.MAX),e.depthMask(!1),{depth:this.depthTextures[1],frontColor:this.colorFrontTextures[1],backColor:this.colorBackTextures[1]}}bindDualDepthPeeling(){let{state:e,gl:t,extensions:{blendMinMax:r}}=this.webgl;return this.readId=this.passCount%2,this.writeId=1-this.readId,this.passCount+=1,this.depthFramebuffers[this.writeId].bind(),e.clearColor(this.DEPTH_CLEAR_VALUE,this.DEPTH_CLEAR_VALUE,0,0),t.clear(t.COLOR_BUFFER_BIT),this.colorFramebuffers[this.writeId].bind(),e.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.depthFramebuffers[this.writeId].bind(),e.blendEquation(r.MAX),e.depthMask(!1),{depth:this.depthTextures[this.readId],frontColor:this.colorFrontTextures[this.readId],backColor:this.colorBackTextures[this.readId]}}renderBlendBack(){ev.kM&&this.webgl.timer.mark("DpoitPass.renderBlendBack");let{state:e,gl:t}=this.webgl;e.blendEquation(t.FUNC_ADD),e.blendFuncSeparate(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA,t.ONE,t.ONE_MINUS_SRC_ALPHA),q.IO.update(this.blendBackRenderable.values.tDpoitBackColor,this.colorBackTextures[this.writeId]),this.blendBackRenderable.update(),this.blendBackRenderable.render(),ev.kM&&this.webgl.timer.markEnd("DpoitPass.renderBlendBack")}render(){ev.kM&&this.webgl.timer.mark("DpoitPass.render");let{state:e,gl:t}=this.webgl;e.blendEquation(t.FUNC_ADD),e.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),q.IO.update(this.renderable.values.tDpoitFrontColor,this.colorFrontTextures[this.writeId]),this.renderable.update(),this.renderable.render(),ev.kM&&this.webgl.timer.markEnd("DpoitPass.render")}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;if(e!==r||t!==a){for(let r=0;r<2;r++)this.depthTextures[r].define(e,t),this.colorFrontTextures[r].define(e,t),this.colorBackTextures[r].define(e,t);q.IO.update(this.renderable.values.uTexSize,y.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.blendBackRenderable.values.uTexSize,y.Sg.set(this.blendBackRenderable.values.uTexSize.ref.value,e,t))}}reset(){this._supported&&this._init()}_init(){let{extensions:{drawBuffers:e}}=this.webgl;for(let t=0;t<2;t++)this.depthFramebuffers[t].bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2]),this.colorFrontTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color0"),this.colorBackTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color1"),this.depthTextures[t].attachFramebuffer(this.depthFramebuffers[t],"color2"),this.colorFramebuffers[t].bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1]),this.colorFrontTextures[t].attachFramebuffer(this.colorFramebuffers[t],"color0"),this.colorBackTextures[t].attachFramebuffer(this.colorFramebuffers[t],"color1")}static isSupported(e){let{extensions:{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n,blendMinMax:i}}=e;if(r&&a&&n&&t&&i)return!0;
53if(ev.Au){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),i||e.push("blendMinMax"),console.log(`Missing "${e.join('", "')}" extensions required for "dpoit"`)}return!1}constructor(e,t,r){if(this.webgl=e,this.DEPTH_CLEAR_VALUE=-99999,this.MAX_DEPTH=1,this.MIN_DEPTH=0,this.passCount=0,this._supported=!1,!eY.isSupported(e))return;let{resources:a,extensions:{colorBufferHalfFloat:n,textureHalfFloat:i}}=e;(0,eI.D0)(e.gl)?(this.depthTextures=[a.texture("image-float32","rg","float","nearest"),a.texture("image-float32","rg","float","nearest")],this.colorFrontTextures=n&&i?[a.texture("image-float16","rgba","fp16","nearest"),a.texture("image-float16","rgba","fp16","nearest")]:[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=n&&i?[a.texture("image-float16","rgba","fp16","nearest"),a.texture("image-float16","rgba","fp16","nearest")]:[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")]):(this.depthTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorFrontTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")],this.colorBackTextures=[a.texture("image-float32","rgba","float","nearest"),a.texture("image-float32","rgba","float","nearest")]),this.depthTextures[0].define(t,r),this.depthTextures[1].define(t,r),this.colorFrontTextures[0].define(t,r),this.colorFrontTextures[1].define(t,r),this.colorBackTextures[0].define(t,r),this.colorBackTextures[1].define(t,r),this.depthFramebuffers=[a.framebuffer(),a.framebuffer()],this.colorFramebuffers=[a.framebuffer(),a.framebuffer()],this.blendBackRenderable=function(e,t){let r={...ec.GE,tDpoitBackColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},a={...eW},n=(0,ef.s8)(e,"triangles",eK,a,r);return(0,em.T)(n,r)}(e,this.colorBackTextures[0]),this.renderable=function(e,t){let r={...ec.GE,tDpoitFrontColor:q.IO.create(t),uTexSize:q.IO.create(y.Sg.create(t.getWidth(),t.getHeight()))},a={...eQ},n=(0,ef.s8)(e,"triangles",eZ,a,r);return(0,em.T)(n,r)}(e,this.colorFrontTextures[0]),this._supported=!0,this._init()}}let e$=` 54precision highp float; 55precision highp sampler2D; 56 57uniform vec2 uTexSizeInv; 58uniform sampler2D tEdgeTexture; 59uniform vec3 uHighlightEdgeColor; 60uniform vec3 uSelectEdgeColor; 61uniform float uHighlightEdgeStrength; 62uniform float uSelectEdgeStrength; 63uniform float uGhostEdgeStrength; 64uniform float uInnerEdgeFactor; 65 66void main() { 67 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 68 vec4 edgeValue = texture2D(tEdgeTexture, coords);
69 if (edgeValue.a > 0.0) { 70 vec3 edgeColor = edgeValue.b == 1.0 ? uHighlightEdgeColor : uSelectEdgeColor; 71 gl_FragColor.rgb = edgeValue.g > 0.0 ? edgeColor : edgeColor * uInnerEdgeFactor; 72 gl_FragColor.a = (edgeValue.r == 1.0 ? uGhostEdgeStrength : 1.0) * edgeValue.a; 73 float edgeStrength = edgeValue.b == 1.0 ? uHighlightEdgeStrength : uSelectEdgeStrength; 74 gl_FragColor.a *= edgeStrength; 75 } else { 76 gl_FragColor = vec4(0.0); 77 } 78} 79`;var eJ=r(70371);let e0=` 80precision highp float; 81precision highp sampler2D; 82 83uniform sampler2D tMaskTexture; 84uniform vec2 uTexSizeInv; 85 86void main() { 87 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 88 vec4 offset = vec4(float(dEdgeScale), 0.0, 0.0, float(dEdgeScale)) * vec4(uTexSizeInv, uTexSizeInv); 89 vec4 c0 = texture2D(tMaskTexture, coords); 90 vec4 c1 = texture2D(tMaskTexture, coords + offset.xy); 91 vec4 c2 = texture2D(tMaskTexture, coords - offset.xy); 92 vec4 c3 = texture2D(tMaskTexture, coords + offset.yw); 93 vec4 c4 = texture2D(tMaskTexture, coords - offset.yw); 94 float diff1 = (c1.r - c2.r) * 0.5; 95 float diff2 = (c3.r - c4.r) * 0.5; 96 float d = length(vec2(diff1, diff2)); 97 if (d <= 0.0) 98 discard; 99 float a1 = min(c1.g, c2.g); 100 float a2 = min(c3.g, c4.g); 101 float visibility = min(a1, a2) > 0.001 ? 1.0 : 0.0; 102 float mask = c0.r; 103 float marker = min(c1.b, min(c2.b, min(c3.b, c4.b))); 104 float fogAlpha = min(c1.a, min(c2.a, min(c3.a, c4.a))); 105 gl_FragColor = vec4(visibility, mask, marker, fogAlpha); 106} 107`,e1={enabled:C.e.Boolean(!0),highlightEdgeColor:C.e.Color(eJ.Il.darken(eJ.Il.fromNormalizedRgb(1,.4,.6),1)),selectEdgeColor:C.e.Color(eJ.Il.darken(eJ.Il.fromNormalizedRgb(.2,1,.1),1)),edgeScale:C.e.Numeric(1,{min:1,max:3,step:1},{description:"Thickness of the edge."}),highlightEdgeStrength:C.e.Numeric(1,{min:0,max:1,step:.1}),selectEdgeStrength:C.e.Numeric(1,{min:0,max:1,step:.1}),ghostEdgeStrength:C.e.Numeric(.3,{min:0,max:1,step:.1},{description:"Opacity of the hidden edges that are covered by other geometry. When set to 1, one less geometry render pass is done."}),innerEdgeFactor:C.e.Numeric(1.5,{min:0,max:3,step:.1},{description:"Factor to multiply the inner edge color with - for added contrast."})};class e2{static isEnabled(e){return e.enabled}constructor(e,t,r){this.webgl=e,this.depthTarget=e.createRenderTarget(t,r),this.maskTarget=e.createRenderTarget(t,r),this.edgesTarget=e.createRenderTarget(t,r),this.edge=function(e,t){let r=t.getWidth(),a=t.getHeight(),n={...ec.GE,tMaskTexture:q.IO.create(t),uTexSizeInv:q.IO.create(y.Sg.create(1/r,1/a)),dEdgeScale:q.IO.create(1)},i={...e3},o=(0,ef.s8)(e,"triangles",e4,i,n);return(0,em.T)(o,n)}(e,this.maskTarget.texture),this.overlay=function(e,t){let r=t.getWidth(),a=t.getHeight(),n={...ec.GE,tEdgeTexture:q.IO.create(t),uTexSizeInv:q.IO.create(y.Sg.create(1/r,1/a)),uHighlightEdgeColor:q.IO.create((0,y.AO)()),uSelectEdgeColor:q.IO.create((0,y.AO)()),uHighlightEdgeStrength:q.IO.create(1),uSelectEdgeStrength:q.IO.create(1),uGhostEdgeStrength:q.IO.create(0),uInnerEdgeFactor:q.IO.create(0)},i={...e5},o=(0,ef.s8)(e,"triangles",e6,i,n);return(0,em.T)(o,n)}(e,this.edgesTarget.texture)}getByteCount(){return this.depthTarget.getByteCount()+this.maskTarget.getByteCount()+this.edgesTarget.getByteCount()}setEdgeState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.enable(t.BLEND),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)}setOverlayState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.enable(t.BLEND),r.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),r.blendEquation(t.FUNC_ADD),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o)}setSize(e,t){let r=this.depthTarget.getWidth(),a=this.depthTarget.getHeight();(e!==r||t!==a)&&(this.depthTarget.setSize(e,t),this.maskTarget.setSize(e,t),this.edgesTarget.setSize(e,t),q.IO.update(this.edge.values.uTexSizeInv,y.Sg.set(this.edge.values.uTexSizeInv.ref.value,1/e,1/t)),q.IO.update(this.overlay.values.uTexSizeInv,y.Sg.set(this.overlay.values.uTexSizeInv.ref.value,1/e,1/t)))}update(e){let{highlightEdgeColor:t,selectEdgeColor:r,edgeScale:a,innerEdgeFactor:n,ghostEdgeStrength:i,highlightEdgeStrength:o,selectEdgeStrength:s}=e,{values:l}=this.edge,u=Math.max(1,Math.round(a*this.webgl.pixelRatio));l.dEdgeScale.ref.value!==u&&(q.IO.update(l.dEdgeScale,u),this.edge.update(
107));let{values:c}=this.overlay;q.IO.update(c.uHighlightEdgeColor,eJ.Il.toVec3Normalized(c.uHighlightEdgeColor.ref.value,t)),q.IO.update(c.uSelectEdgeColor,eJ.Il.toVec3Normalized(c.uSelectEdgeColor.ref.value,r)),q.IO.updateIfChanged(c.uInnerEdgeFactor,n),q.IO.updateIfChanged(c.uGhostEdgeStrength,i),q.IO.updateIfChanged(c.uHighlightEdgeStrength,o),q.IO.updateIfChanged(c.uSelectEdgeStrength,s)}render(e,t){ev.kM&&this.webgl.timer.mark("MarkingPass.render"),this.edgesTarget.bind(),this.setEdgeState(e),this.edge.render(),t.bind(),this.setOverlayState(e),this.overlay.render(),ev.kM&&this.webgl.timer.markEnd("MarkingPass.render")}}let e3={...ec.iz,tMaskTexture:(0,ed.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,ed.wt)("v2"),dEdgeScale:(0,ed.O0)("number")},e4=(0,ep.Lq)("edge",eh.C,e0),e5={...ec.iz,tEdgeTexture:(0,ed.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,ed.wt)("v2"),uHighlightEdgeColor:(0,ed.wt)("v3"),uSelectEdgeColor:(0,ed.wt)("v3"),uHighlightEdgeStrength:(0,ed.wt)("f"),uSelectEdgeStrength:(0,ed.wt)("f"),uGhostEdgeStrength:(0,ed.wt)("f"),uInnerEdgeFactor:(0,ed.wt)("f")},e6=(0,ep.Lq)("overlay",eh.C,e$);var e8=r(12175),e7=r(57133);class e9{setTransparency(e){"wboit"===e?(this.transparencyMode=this.wboit.supported?"wboit":"blended",ev.Au&&!this.wboit.supported&&console.log('Missing "wboit" support, falling back to "blended".')):"dpoit"===e?(this.transparencyMode=this.dpoit.supported?"dpoit":"blended",ev.Au&&!this.dpoit.supported&&console.log('Missing "dpoit" support, falling back to "blended".')):this.transparencyMode="blended",this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth")}get transparency(){return this.transparencyMode}constructor(e,t,r,a,n){this.webgl=e,this.transparencyMode="blended";let{extensions:i,resources:o,isWebGL2:s}=e;this.drawTarget=e.createDrawTarget(),this.colorTarget=e.createRenderTarget(r,a,!0,"uint8","linear"),this.transparentColorTarget=e.createRenderTarget(r,a,!1,"uint8","linear"),this.packedDepth=!i.depthTexture,this.depthTargetTransparent=e.createRenderTarget(r,a),this.depthTextureTransparent=this.depthTargetTransparent.texture,this.depthTargetOpaque=this.packedDepth?e.createRenderTarget(r,a):null,this.depthTextureOpaque=this.depthTargetOpaque?this.depthTargetOpaque.texture:o.texture("image-depth","depth",s?"float":"ushort","nearest"),this.packedDepth||this.depthTextureOpaque.define(r,a),this.wboit=new eH(e,r,a),this.dpoit=new eY(e,r,a),this.marking=new e2(e,r,a),this.postprocessing=new eu.hq(e,t,this),this.antialiasing=new eu.xt(e,r,a),this.bloom=new e7.y(e,r,a),this.dof=new e8.z(e,r,a),this.copyFboTarget=(0,ec.Oz)(e,this.colorTarget.texture),this.copyFboPostprocessing=(0,ec.Oz)(e,this.postprocessing.target.texture),this.setTransparency(n)}getByteCount(){return this.drawTarget.getByteCount()+this.colorTarget.getByteCount()+this.transparentColorTarget.getByteCount()+this.depthTargetTransparent.getByteCount()+(this.depthTargetOpaque?this.depthTargetOpaque.getByteCount():this.depthTextureOpaque.getByteCount())+this.wboit.getByteCount()+this.dpoit.getByteCount()+this.marking.getByteCount()+this.postprocessing.getByteCount()+this.antialiasing.getByteCount()+this.bloom.getByteCount()+this.dof.getByteCount()}reset(){this.wboit.reset(),this.dpoit.reset(),this.postprocessing.reset()}setSize(e,t){let r=this.colorTarget.getWidth(),a=this.colorTarget.getHeight();(e!==r||t!==a)&&(this.colorTarget.setSize(e,t),this.depthTargetTransparent.setSize(e,t),this.transparentColorTarget.setSize(e,t),this.depthTargetOpaque?this.depthTargetOpaque.setSize(e,t):this.depthTextureOpaque.define(e,t),q.IO.update(this.copyFboTarget.values.uTexSize,y.Sg.set(this.copyFboTarget.values.uTexSize.ref.value,e,t)),q.IO.update(this.copyFboPostprocessing.values.uTexSize,y.Sg.set(this.copyFboPostprocessing.values.uTexSize.ref.value,e,t))),this.wboit.supported&&this.wboit.setSize(e,t),this.dpoit.supported&&this.dpoit.setSize(e,t),this.marking.setSize(e,t),this.postprocessing.setSize(e,t),this.antialiasing.setSize(e,t),this.dof.setSize(e,t),this.bloom.setSize(e,t)}_renderDpoit(e,t,r,a,n,i){if(!this.dpoit.supported)throw Error("expected dpoit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),this.depthTextureOpaque.detachFramebuffer(this.colorTarget.framebuffer,"depth"),eu.hq.isTransparentDepthRequired(r,i)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent
107(r.primitives,t,this.depthTextureOpaque));let o=eu.hq.isEnabled(i);if(r.opacityAverage<1){let n=o?this.transparentColorTarget:this.colorTarget;o&&(n.bind(),e.clear(!1,!1,!0));let i=this.dpoit.bind();e.renderDpoitTransparent(r.primitives,t,this.depthTextureOpaque,i);for(let i=0;i<a;i++){ev.kM&&this.webgl.timer.mark("DpoitPass.layer");let i=this.dpoit.bindDualDepthPeeling();e.renderDpoitTransparent(r.primitives,t,this.depthTextureOpaque,i),a>1&&(n.bind(),this.dpoit.renderBlendBack()),ev.kM&&this.webgl.timer.markEnd("DpoitPass.layer")}n.bind(),this.dpoit.render()}eu.hq.isEnabled(i)&&this.postprocessing.render(t,r,!1,n,e.props.backgroundColor,i,e.light,e.ambientColor),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.depthTextureOpaque)}_renderWboit(e,t,r,a,n){if(!this.wboit.supported)throw Error("expected wboit to be supported");this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),eu.hq.isTransparentDepthRequired(r,n)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.depthTextureOpaque));let i=eu.hq.isEnabled(n);if(r.opacityAverage<1){let a=i?this.transparentColorTarget:this.colorTarget;i&&(a.bind(),e.clear(!1,!1,!0)),this.wboit.bind(),e.renderWboitTransparent(r.primitives,t,this.depthTextureOpaque),a.bind(),this.wboit.render()}eu.hq.isEnabled(n)&&this.postprocessing.render(t,r,!1,a,e.props.backgroundColor,n,e.light,e.ambientColor),r.volumes.renderables.length>0&&(this.wboit.bind(),e.renderWboitTransparent(r.volumes,t,this.depthTextureOpaque),(i?this.postprocessing.target:this.colorTarget).bind(),this.wboit.render())}_renderBlended(e,t,r,a,n,i){var o,s,l,u,c,d;if(a?this.drawTarget.bind():this.packedDepth?this.colorTarget.bind():this.depthTextureOpaque.attachFramebuffer(this.colorTarget.framebuffer,"depth"),e.clear(!0),r.hasOpaque&&e.renderOpaque(r.primitives,t),a)r.opacityAverage<1&&e.renderBlendedTransparent(r.primitives,t);else{this.depthTargetOpaque&&(this.depthTargetOpaque.bind(),e.clearDepth(!0),e.renderDepthOpaque(r.primitives,t),this.colorTarget.bind()),eu.hq.isTransparentDepthRequired(r,i)&&(this.depthTargetTransparent.bind(),e.clearDepth(!0),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.depthTextureOpaque));let a=eu.hq.isEnabled(i);if(r.opacityAverage<1&&(a&&(this.transparentColorTarget.bind(),e.clear(!1,!1,!0),this.packedDepth?null===(o=this.colorTarget.depthRenderbuffer)||void 0===o||o.attachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.transparentColorTarget.framebuffer,"depth")),e.renderBlendedTransparent(r.primitives,t),a&&(this.packedDepth?null===(s=this.colorTarget.depthRenderbuffer)||void 0===s||s.detachFramebuffer(this.transparentColorTarget.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.transparentColorTarget.framebuffer,"depth"))),a&&(this.packedDepth?null===(l=this.colorTarget.depthRenderbuffer)||void 0===l||l.detachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.detachFramebuffer(this.postprocessing.target.framebuffer,"depth"),this.postprocessing.render(t,r,!1,n,e.props.backgroundColor,i,e.light,e.ambientColor),this.packedDepth?null===(u=this.colorTarget.depthRenderbuffer)||void 0===u||u.attachFramebuffer(this.postprocessing.target.framebuffer):this.depthTextureOpaque.attachFramebuffer(this.postprocessing.target.framebuffer,"depth")),r.volumes.renderables.length>0){let a=eu.hq.isEnabled(i)?this.postprocessing.target:this.colorTarget;this.packedDepth?null===(c=this.colorTarget.depthRenderbuffer)||void 0===c||c.detachFramebuffer(a.framebuffer):this.depthTextureOpaque.detachFramebuffer(a.framebuffer,"depth"),a.bind(),e.renderVolume(r.volumes,t,this.depthTextureOpaque),this.packedDepth?null===(d=this.colorTarget.depthRenderbuffer)||void 0===d||d.attachFramebuffer(a.framebuffer):this.depthTextureOpaque.attachFramebuffer(a.framebuffer,"depth"),a.bind()}}}_render(e,t,r,a,n,i,o){var s,l;if(t.disabled)return;let u=r.volumes.renderables.length>0,c=eu.hq.isEnabled(o.postprocessing),d=eu.xt.isEnabled(o.postprocessing),p=e2.isEnabled(o.marking),f=e8.z.isEnabled(o.postprocessing),m=e7.y.isEnabled(o.postprocessing),{x:h,y:g,width:b,height:y}=t.viewport;e.setViewport(h,g,b,y),e.update(t,r),i&&!d&&n&&(this.drawTarget.bind(),e.clear(!1));let x=!1;"wboit"===this.transparencyMode&&this.wboit.supported?(this._renderWboit(e,t,r,i,o.postprocessing),x=!0):"dpoit"===this.transparencyMode&&this.dpoit.supported?(this._renderDpoit(e,t,r,o.dpoitIterations,i,o.postprocessing),x=!0):this._renderBlended(e,t,r,!u&&!c&&!d&&n,i,o.postprocessing);let S=c?this.postprocessing.target:!n||u||x?this.colorTarget:this.drawTarget;if(p&&r.markerAverage>0){let a=o.marking.ghostEdgeStrength<1;a&&1!==r.markerAverage&&(this.marking.depthTarget.bind(),e.clear(!1,!0),e.renderMarkingDepth(r.primitives,t)),this.marking.maskTarget.bind(),e.clear(!1,!0),e.renderMarkingMask(r.primitives,t,a?this.marking.depthTarget.texture:null),this.marking.update(o.marking),this.marking.render(t.viewport,S)}else S.bind();a.debug.isEnabled&&(a.debug.syncVisibility(),e.renderBlended(a.debug.scene,t)),a.handle.isEnabled&&e.renderBlended(a.handle.scene,t),a.pointer.isEnabled&&(a.pointer.setCamera(t),e.update(a.pointer.camera,a.pointer.scene),e.renderBlended(a.pointer.scene,a.pointer.camera)),a.camera.isEnabled&&(a.camera.update(t),e.update(a.camera.camera,a.camera.scene),e.renderBlended(a.camera.scene,a.camera.camera));let T=!1;if(d){let e=eu.hq.isEnabled(o.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.antialiasing.render(t,e,n&&!f,o.postprocessing)}else n&&!e8.z.isEnabled(o.postprocessing)&&(T=!0);if(f&&"on"===o.postprocessing.dof.name){let e=eu.xt.isEnabled(o.postprocessing)?this.antialiasing.target.texture:eu.hq.isEnabled(o.postprocessing)?this.postprocessing.target.texture:this.colorTarget.texture;this.dof.update(t,e,(null===(s=this.depthTargetOpaque)||void 0===s?void 0:s.texture)||this.depthTextureOpaque,this.depthTextureTransparent,o.postprocessing.dof.params,r.boundingSphereVisible),this.dof.render(t.viewport,n?void 0:this.getColorTarget(o.postprocessing))}else n&&!eu.xt.isEnabled(o.postprocessing)&&(T=!0);if(T&&(this.drawTarget.bind(),this.webgl.state.disable(this.webgl.gl.DEPTH_TEST),c?this.copyFboPostprocessing.render():(u||x)&&this.copyFboTarget.render()),m&&"on"===o.postprocessing.bloom.name){let a="emissive"===o.postprocessing.bloom.params.mode;a&&r.emissiveAverage>0&&(this.bloom.emissiveTarget.bind(),e.clear(!1,!0),e.update(t,r),e.renderEmissive(r.primitives,t)),(!a||r.emissiveAverage>0)&&(this.bloom.update(this.colorTarget.texture,this.bloom.emissiveTarget.texture,(null===(l=this.depthTargetOpaque)||void 0===l?void 0:l.texture)||this.depthTextureOpaque,o.postprocessing.bloom.params),this.bloom.render(t.viewport,n?void 0:this.getColorTarget(o.postprocessing)))}this.webgl.gl.flush()}render(e,t,r){ev.kM&&this.webgl.timer.mark("DrawPass.render");let{renderer:a,camera:n,scene:i,helper:o}=e;
107this.postprocessing.setTransparentBackground(t.transparentBackground);let s=t.transparentBackground||this.postprocessing.background.isEnabled(t.postprocessing);a.setTransparentBackground(s),a.setDrawingBufferSize(this.colorTarget.getWidth(),this.colorTarget.getHeight()),a.setPixelRatio(this.webgl.pixelRatio),e_.is(n)?(ev.kM&&this.webgl.timer.mark("StereoCamera.left"),this._render(a,n.left,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("StereoCamera.left"),ev.kM&&this.webgl.timer.mark("StereoCamera.right"),this._render(a,n.right,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("StereoCamera.right")):this._render(a,n,i,o,r,s,t),ev.kM&&this.webgl.timer.markEnd("DrawPass.render")}getColorTarget(e){return e8.z.isEnabled(e)?this.dof.target:eu.xt.isEnabled(e)?this.antialiasing.target:eu.hq.isEnabled(e)?this.postprocessing.target:this.colorTarget}}(n=u||(u={})).create=function(e,t,r){return{array:e,width:t,height:r}},n.flipY=function(e){let{array:t,width:r,height:a}=e,n=t.length/(r*a),i=r*n;for(let e=0,r=a/2;e<r;++e)for(let r=0;r<i;++r){let n=e*i+r,o=(a-e-1)*i+r,s=t[n];t[n]=t[o],t[o]=s}return e},n.divideByAlpha=function(e){let{array:t}=e,r=t instanceof Uint8Array?255:1;for(let e=0,a=t.length;e<a;e+=4){let a=t[e+3]/r;t[e]/=a,t[e+1]/=a,t[e+2]/=a}return e};var te=r(19609);let tt=` 108precision highp float; 109precision highp sampler2D; 110 111uniform sampler2D tShaded; 112uniform sampler2D tColor; 113uniform sampler2D tNormal; 114uniform sampler2D tTransparentColor; 115uniform sampler2D tSsaoDepth; 116uniform sampler2D tSsaoDepthTransparent; 117uniform sampler2D tDepthOpaque; 118uniform sampler2D tDepthTransparent; 119uniform sampler2D tOutlines; 120uniform vec2 uTexSize; 121 122uniform float uNear; 123uniform float uFar; 124uniform float uFogNear; 125uniform float uFogFar; 126uniform vec3 uFogColor; 127uniform vec3 uOutlineColor; 128uniform vec3 uOcclusionColor; 129uniform bool uTransparentBackground; 130 131uniform float uDenoiseThreshold; 132 133#include common 134 135float getViewZ(const in float depth) { 136 #if dOrthographic == 1 137 return orthographicDepthToViewZ(depth, uNear, uFar); 138 #else 139 return perspectiveDepthToViewZ(depth, uNear, uFar); 140 #endif 141} 142 143float getDepthOpaque(const in vec2 coords) { 144 #ifdef depthTextureSupport 145 return texture2D(tDepthOpaque, coords).r; 146 #else 147 return unpackRGBAToDepth(texture2D(tDepthOpaque, coords)); 148 #endif 149} 150 151float getDepthTransparent(const in vec2 coords) { 152 #if defined(dTransparentOutline) || defined(dOcclusionEnable) 153 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x; 154 #else 155 return 1.0; 156 #endif 157} 158 159bool isBackground(const in float depth) { 160 return depth == 1.0; 161} 162 163float getSsao(vec2 coords) { 164 float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy); 165 if (rawSsao > 0.999) { 166 return 1.0; 167 } else if (rawSsao > 0.001) { 168 return rawSsao; 169 } 170 // treat values close to 0.0 as errors and return no occlusion 171 return 1.0; 172} 173 174float getSsaoTransparent(vec2 coords) { 175 float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy); 176 if (rawSsao > 0.999) { 177 return 1.0; 178 } else if (rawSsao > 0.001) { 179 return rawSsao; 180 } 181 // treat values close to 0.0 as errors and return no occlusion 182 return 1.0; 183} 184 185// 186 187// TODO: investigate 188// https://interplayoflight.wordpress.com/2022/03/26/raytraced-global-illumination-denoising/ 189 190// 191 192#define INV_SQRT_OF_2PI 0.39894228040143267793994605993439 // 1.0/SQRT_OF_2PI 193#define INV_PI 0.31830988618379067153776752674503 194 195// https://github.com/BrutPitt/glslSmartDeNoise 196// 197// smartDeNoise - parameters 198//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
199// 200// sampler2D tex - sampler image / texture 201// vec2 uv - actual fragment coord 202// float sigma > 0 - sigma Standard Deviation 203// float kSigma >= 0 - sigma coefficient 204// kSigma * sigma --> radius of the circular kernel 205// float threshold - edge sharpening threshold 206 207float NormalWeightStrength = 6.0; 208 209vec4 smartDeNoise(sampler2D tex, vec2 uv) { 210 float sigma = 3.0; 211 float kSigma = 2.0; 212 float threshold = uDenoiseThreshold; 213 214 vec4 centrPx = texture2D(tex, uv); 215 if (threshold == 0.0) return centrPx; 216 217 float invSigmaQx2 = 0.5 / (sigma * sigma); // 1.0 / (sigma^2 * 2.0) 218 float invSigmaQx2PI = INV_PI * invSigmaQx2; // 1.0 / (sqrt(PI) * sigma) 219 220 float invThresholdSqx2 = 0.5 / (threshold * threshold); // 1.0 / (sigma^2 * 2.0) 221 float invThresholdSqrt2PI = INV_SQRT_OF_2PI / threshold; // 1.0 / (sqrt(2*PI) * sigma) 222 223 float zBuff = 0.0; 224 vec4 aBuff = vec4(0.0); 225 226 vec3 normal = texture2D(tNormal, uv).xyz; 227 228 for (int x = -6; x <= 6; ++x) { 229 for (int y = -6; y <= 6; ++y) { 230 vec2 d = vec2(float(x), float(y)); 231 232 float blurFactor = exp(-dot(d , d) * invSigmaQx2) * invSigmaQx2PI; 233 vec2 uvSample = uv + d / uTexSize; 234 235 vec3 normalSample = texture2D(tNormal, uvSample).xyz; 236 float normalW = saturate(dot(normal, normalSample)); 237 normalW = pow(normalW, NormalWeightStrength); 238 blurFactor *= normalW; 239 240 vec4 walkPx = texture2D(tex, uvSample); 241 242 vec4 dC = walkPx - centrPx; 243 float deltaFactor = exp(-dot(dC, dC) * invThresholdSqx2) * invThresholdSqrt2PI * blurFactor; 244 245 zBuff += deltaFactor; 246 aBuff += deltaFactor * walkPx; 247 } 248 } 249 250 if (zBuff <= EPSILON) { 251 return centrPx; 252 } 253 254 return aBuff / zBuff; 255} 256 257int squaredOutlineScale = dOutlineScale * dOutlineScale; 258void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) { 259 vec2 invTexSize = 1.0 / uTexSize; 260 261 hasOpaque = false; 262 hasTransparent = false; 263 opaqueDepth = 1.0; 264 transparentDepth = 1.0;
265 alpha = 0.0; 266 for (int y = -dOutlineScale; y <= dOutlineScale; y++) { 267 for (int x = -dOutlineScale; x <= dOutlineScale; x++) { 268 if (x * x + y * y > squaredOutlineScale) { 269 continue; 270 } 271 272 vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize; 273 274 vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords); 275 float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb); 276 float sampleTransparentDepth = sampleOutlineCombined.a; 277 vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r); 278 279 float sampleFlag = sampleFlagWithAlpha.x; 280 float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0); 281 282 if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both 283 if (sampleOpaqueDepth < opaqueDepth) { 284 hasOpaque = true; 285 opaqueDepth = sampleOpaqueDepth; 286 } 287 } 288 289 if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both 290 hasTransparent = true; 291 transparentDepth = sampleTransparentDepth; 292 alpha = sampleAlpha; 293 } 294 } 295 } 296} 297 298void main() { 299 vec2 coords = gl_FragCoord.xy / uTexSize; 300 301 #ifdef dDenoise 302 vec4 color = smartDeNoise(tColor, coords);
303 #else 304 vec4 color = texture2D(tColor, coords); 305 #endif 306 307 float opaqueDepth = getDepthOpaque(coords); 308 float backgroundViewZ = 2.0 * uFar; 309 float opaqueSelfViewZ = isBackground(opaqueDepth) ? backgroundViewZ : getViewZ(opaqueDepth); 310 float fogFactor = smoothstep(uFogNear, uFogFar, abs(opaqueSelfViewZ)); 311 float fogAlpha = 1.0 - fogFactor; 312 313 float transparentDepth = 1.0; 314 #ifdef dBlendTransparency 315 bool blendTransparency = true; 316 vec4 transparentColor = texture2D(tTransparentColor, coords); 317 318 transparentDepth = getDepthTransparent(coords); 319 #endif 320 321 float alpha = 1.0; 322 if (!uTransparentBackground) { 323 // mix opaque objects with background color 324 color.rgb = mix(color.rgb, uFogColor, fogFactor); 325 } else { 326 // pre-multiplied alpha expected for transparent background 327 alpha = fogAlpha; 328 color.rgb *= fogAlpha; 329 } 330 331 #if defined(dOcclusionEnable) 332 if (!isBackground(opaqueDepth)) { 333 float occlusionFactor = getSsao(coords); 334 335 if (!uTransparentBackground) { 336 color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor); 337 } else { 338 color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor); 339 } 340 } 341 #ifdef dBlendTransparency 342 if (!isBackground(transparentDepth)) { 343 float viewDist = abs(getViewZ(transparentDepth)); 344 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 345 float occlusionFactor = getSsaoTransparent(coords); 346 transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor); 347 } 348 #endif 349 #endif 350 351 #ifdef dOutlineEnable 352 bool hasOpaque; 353 bool hasTransparent; 354 float outlineOpaqueDepth; 355 float outlineTransparentDepth; 356 float outlineAlpha; 357 getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha); 358 359 if (hasOpaque) { 360 float viewDist = abs(getViewZ(outlineOpaqueDepth)); 361 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 362 if (!uTransparentBackground) { 363 color.rgb = mix(uOutlineColor, uFogColor, fogFactor); 364 } else { 365 alpha = 1.0 - fogFactor; 366 color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor); 367 } 368 } 369 370 #ifdef dBlendTransparency 371 if (hasTransparent) { 372 if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) { 373 blendTransparency = false; 374 } else { 375 float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0); 376 float viewDist = abs(getViewZ(outlineTransparentDepth)); 377 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 378 float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor)); 379 transparentColor.a = finalAlpha; 380 transparentColor.rgb = uOutlineColor * finalAlpha; 381 } 382 } 383 #endif 384 #endif 385 386 #ifdef dBlendTransparency 387 if (blendTransparency) { 388 if (transparentColor.a != 0.0) { 389 // blending 390 color = transparentColor + color * (1.0 - transparentColor.a); 391 alpha = transparentColor.a + alpha * (1.0 - transparentColor.a); 392 } 393 } 394 #endif 395 396 gl_FragColor = vec4(color.rgb, alpha); 397} 398`;var tr=r(81458),ta=r(34602);let tn=` 399precision highp int; 400precision highp float; 401precision highp sampler2D; 402 403uniform sampler2D tColor; 404uniform sampler2D tNormal; 405uniform sampler2D tShaded; 406uniform sampler2D tThickness; 407uniform sampler2D tAccumulate; 408uniform sampler2D tDepth; 409uniform vec2 uTexSize; 410uniform vec4 uBounds; 411 412uniform float uNear; 413uniform float uFar; 414uniform float uFogNear; 415uniform float uFogFar; 416uniform vec3 uFogColor; 417 418#if dLightCount != 0 419 uniform vec3 uLightDirection[dLightCount]; 420 uniform vec3 uLightColor[dLightCount]; 421#endif 422uniform vec3 uAmbientColor; 423uniform vec3 uLightStrength; 424 425uniform int uFrameNo; 426 427uniform float uRayDistance; 428uniform float uMinThickness; 429uniform float uThicknessFactor; 430uniform float uThickness; 431 432uniform float uShadowSoftness; 433uniform float uShadowThickness; 434 435uniform mat4 uProjection; 436uniform mat4 uInvProjection; 437 438#include common 439 440// parts adapted from 441// - https://blog.demofox.org/2020/05/25/casual-shadertoy-path-tracing-1-basic-camera-diffuse-emissive/ 442// - https://github.com/0beqz/realism-effects/blob/v2-debug/src/ssgi/shader/ssgi.frag 443 444// 445 446// after a hit, it moves the ray this far along the normal away from a surface. 447// Helps prevent incorrect intersections when rays bounce off of objects. 448#define RayPosNormalNudge 0.0001 449 450#if __VERSION__ == 100 451 #define StateType float 452 453 // from https://www.shadertoy.com/view/4djSRW 454 float hash14(vec4 p4) { 455 p4 = fract(p4 * vec4(0.1031, 0.1030, 0.0973, 0.1099)); 456 p4 += dot(p4, p4.wzxy + 33.33); 457 return fract((p4.x + p4.y) * (p4.z + p4.w)); 458 } 459 460 float randomFloat(inout float state) { 461 state += 0.06711056; 462 return 1.0 - hash14(vec4(gl_FragCoord.xy, float(uFrameNo), state)); 463 } 464#else 465 #define StateType uint 466 467 // https://www.pcg-random.org/ 468 // https://jcgt.org/published/0009/03/02/ 469 uint pcg(inout uint seed) { 470 seed = seed * 747796405u + 2891336453u; 471 uint word = ((seed >> ((seed >> 28u) + 4u)) ^ seed) * 277803737u; 472 return (word >> 22u) ^ word; 473 } 474 475 float randomFloat(inout uint state) { 476 return float(pcg(state)) / 4294967296.0; 477 } 478#endif 479 480vec3 randomUnitVector(inout StateType state) { 481 float z = randomFloat(state) * 2.0 - 1.0; 482 float a = randomFloat(state) * TWO_PI; 483 float r = sqrt(1.0 - z * z); 484 float x = r * cos(a); 485 float y = r * sin(a); 486 return vec3(x, y, z); 487} 488 489struct RayHitInfo { 490 bool missed; 491 vec3 position; 492 vec3 normal; 493 vec3 color; 494 vec3 emissive; 495}; 496 497// 498 499float getDepth(const in vec2 coords) { 500 vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w)); 501 return texture2D(tDepth, c).r; 502} 503 504float getThickness(const in vec2 coords) { 505 vec2 c = vec2(clamp(coords.x, uBounds.x, uBounds.z), clamp(coords.y, uBounds.y, uBounds.w)); 506 return unpackRGBAToDepth(texture2D(tThickness, c)); 507} 508
509bool isBackground(const in float depth) { 510 return depth == 1.0; 511} 512 513float getViewZ(const in float depth) { 514 #if dOrthographic == 1 515 return orthographicDepthToViewZ(depth, uNear, uFar); 516 #else 517 return perspectiveDepthToViewZ(depth, uNear, uFar); 518 #endif 519} 520 521vec2 viewSpaceToScreenSpace(const vec3 position) { 522 vec4 projectedCoord = uProjection * vec4(position, 1.0); 523 projectedCoord.xy /= projectedCoord.w; 524 // [-1, 1] --> [0, 1] (NDC to screen position) 525 projectedCoord.xy = projectedCoord.xy * 0.5 + 0.5; 526 return projectedCoord.xy; 527} 528 529vec2 binarySearch(inout vec3 dir, inout vec3 hitPos) { 530 float rayHitDepthDifference; 531 vec2 coords; 532 533 dir *= 0.5; 534 hitPos -= dir; 535 536 for (int i = 0; i < dRefineSteps; i++) { 537 coords = viewSpaceToScreenSpace(hitPos); 538 float depth = getDepth(coords); 539 float z = getViewZ(depth); 540 rayHitDepthDifference = z - hitPos.z; 541 542 dir *= 0.5; 543 if (rayHitDepthDifference >= 0.0) { 544 hitPos -= dir; 545 } else { 546 hitPos += dir; 547 } 548 } 549 550 coords = viewSpaceToScreenSpace(hitPos); 551 552 return coords; 553} 554 555float calculateGrowthFactor(float begin, float end, float steps) { 556 return pow(end / begin, 1.0 / steps); 557} 558 559vec2 rayMarch(in vec3 dir, in float thickness, inout vec3 hitPos, out bool missed) { 560 float rayHitDepthDifference; 561 vec2 coords; 562 563 float begin = float(dFirstStepSize); 564 dir *= begin; 565 missed = false; 566 float gf = calculateGrowthFactor(begin, uRayDistance, float(dSteps)); 567 568 for (int i = 1; i < dSteps; i++) { 569 hitPos += dir; 570 dir *= gf; 571 572 coords = viewSpaceToScreenSpace(hitPos); 573 float depth = getDepth(coords); 574 float z = getViewZ(depth); 575 rayHitDepthDifference = z - hitPos.z; 576 577 if (thickness == 0.0) { 578 #ifdef dThicknessMode_auto 579 thickness = max(uMinThickness, (getViewZ(getThickness(coords)) - z) * uThicknessFactor * texture2D(tColor, coords).a); 580 #else 581 thickness = uThickness; 582 #endif 583 } 584 585 if (rayHitDepthDifference >= 0.0 && rayHitDepthDifference < thickness) { 586 if (dRefineSteps == 0) { 587 return coords; 588 } else { 589 return binarySearch(dir, hitPos); 590 } 591 } 592 } 593 594 missed = true; 595 596 return coords; 597} 598 599// 600 601void trace(in vec3 rayPos, in vec3 rayDir, inout RayHitInfo hitInfo) { 602 vec3 hitPos = vec3(rayPos); 603 bool missed; 604 vec2 coords; 605 coords = rayMarch(rayDir, 0.0, hitPos, missed); 606 607 hitInfo.missed = missed; 608 hitInfo.position = hitPos; 609 hitInfo.normal = -texture2D(tNormal, coords).rgb; 610 hitInfo.color = texture2D(tColor, coords).rgb; 611 hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a * 2.0; 612 613 float depth = getDepth(coords); 614 if (isBackground(depth)) { 615 hitInfo.emissive = vec3(0.0); 616 } 617} 618 619vec3 viewPos; 620 621vec3 colorForRay(in vec3 startRayPos, in vec3 startRayDir, inout StateType rngState) { 622 vec3 ret = vec3(0.0, 0.0, 0.0); 623 624 vec3 throughput = vec3(1.0, 1.0, 1.0); 625 vec3 rayPos = startRayPos; 626 vec3 rayDir = startRayDir; 627 628 RayHitInfo hitInfo; 629 RayHitInfo prevHitInfo; 630 631 for (int bounceIndex = 0; bounceIndex <= dBounces; ++bounceIndex) { 632 // shoot a ray out into the world 633 if (bounceIndex == 0) { 634 vec2 coords = gl_FragCoord.xy / uTexSize; 635 float depth = getDepth(coords); 636 637 hitInfo.missed = false; 638 hitInfo.position = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection); 639 hitInfo.normal = -texture2D(tNormal, coords).rgb; 640 hitInfo.color = texture2D(tShaded, coords).rgb; 641 hitInfo.emissive = texture2D(tColor, coords).rgb * texture2D(tNormal, coords).a; 642 643 // shadow 644 #ifdef dShadowEnable 645 #if dLightCount != 0 646 vec3 directLight = vec3(uAmbientColor); 647 #pragma unroll_loop_start 648 bool missed; 649 vec3 hitPos; 650 for (int i = 0; i < dLightCount; ++i) { 651 missed = false; 652 hitPos = viewPos + hitInfo.normal * RayPosNormalNudge; 653 hitPos += -uLightDirection[i] * (randomFloat(rngState)); 654 rayMarch(-uLightDirection[i] + randomUnitVector(rngState) * uShadowSoftness, uShadowThickness, hitPos, missed); 655 if (missed) directLight += uLightColor[i]; 656 } 657 #pragma unroll_loop_end 658 hitInfo.color *= directLight / uLightStrength; 659 #endif 660 #endif 661 662 if (hitInfo.normal == vec3(0.0)) { 663 hitInfo.missed = true; 664 } 665 } else { 666 prevHitInfo = hitInfo; 667 trace(rayPos, rayDir, hitInfo); 668 } 669 670 // if the ray missed, we are done 671 if (hitInfo.missed) { 672 vec3 accIrradiance = vec3(1.0); 673 #ifdef dGlow 674 if (bounceIndex > 1) { 675 accIrradiance = uLightStrength; 676 } 677 #else 678 if (bounceIndex > 1) { 679 accIrradiance = uAmbientColor; 680 #if dLightCount != 0 681 #pragma unroll_loop_start 682 float dotNL; 683 vec3 irradiance; 684 for (int i = 0; i < dLightCount; ++i) { 685 dotNL = saturate(dot(prevHitInfo.normal, -uLightDirection[i])); 686 irradiance = dotNL * uLightColor[i]; 687 accIrradiance += irradiance; 688 } 689 #pragma unroll_loop_end 690 #endif 691 } 692 #endif 693 ret += prevHitInfo.color * accIrradiance * throughput; 694 break; 695 } 696 697 // add emissive light 698 ret += hitInfo.emissive * throughput; 699 700 // update the ray position 701 rayPos = hitInfo.position + hitInfo.normal * RayPosNormalNudge; 702 703 // new ray direction from normal oriented cosine weighted hemisphere sample
704 rayDir = normalize(hitInfo.normal + randomUnitVector(rngState)); 705 706 if (bounceIndex == 0) { 707 continue; 708 } 709 710 // update the colorMultiplier. 711 throughput *= hitInfo.color; 712 713 // Russian Roulette 714 // As the throughput gets smaller, the ray is more likely to get terminated early. 715 // Survivors have their value boosted to make up for fewer samples being in the average. 716 { 717 float p = max(throughput.r, max(throughput.g, throughput.b)); 718 if (randomFloat(rngState) > p) 719 break; 720 721 // Add the energy we 'lose' by randomly terminating paths 722 throughput *= 1.0 / p; 723 } 724 } 725 726 // return pixel color 727 return ret; 728} 729 730void main() { 731 vec2 coords = gl_FragCoord.xy / uTexSize; 732 float depth = getDepth(coords); 733 734 if (isBackground(depth)) { 735 gl_FragColor = texture2D(tColor, coords); 736 return; 737 } 738 739 #if __VERSION__ == 100 740 float rngState = 26699.0; 741 #else 742 // initialize a random number state based on gl_FragCoord and uFrameNo 743 uint rngState = uint(uint(gl_FragCoord.x) * 1973u + uint(gl_FragCoord.y) * 9277u + uint(uFrameNo) * 26699u) | 1u; 744 #endif 745 746 vec3 cameraPos = vec3(0.0, 0.0, 0.0); 747 viewPos = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection); 748 vec3 rayDir = normalize(viewPos); 749 750 // raytrace for this pixel 751 vec3 color = vec3(0.0, 0.0, 0.0); 752 for (int index = 0; index < int(dRendersPerFrame); ++index) { 753 color += colorForRay(cameraPos, rayDir, rngState) / float(dRendersPerFrame); 754 } 755 756 // average the frames together 757 vec4 lastFrameColor = texture2D(tAccumulate, coords);
758 float blend = (uFrameNo < 1 || lastFrameColor.a == 0.0) ? 1.0 : 1.0 / (1.0 + (1.0 / lastFrameColor.a)); 759 color = mix(lastFrameColor.rgb, color, blend); 760 761 // show the result 762 gl_FragColor = vec4(color, blend); 763} 764`;var ti=r(38675),to=r(22934);let ts=` 765precision highp float; 766precision highp sampler2D; 767 768uniform sampler2D tColor; 769uniform vec2 uTexSize; 770uniform float uWeight; 771 772void main() { 773 vec2 coords = gl_FragCoord.xy / uTexSize; 774 gl_FragColor = texture2D(tColor, coords) * uWeight; 775} 776`;var tl=r(23833);let tu={rendersPerFrame:C.e.Interval([1,16],{min:1,max:64,step:1},{description:"Number of rays per pixel each frame. May be adjusted to reach targetFps but will stay within given interval."}),targetFps:C.e.Numeric(30,{min:0,max:120,step:.1},{description:"Target FPS per frame. If observed FPS is lower or higher, some parameters may get adjusted."}),steps:C.e.Numeric(32,{min:1,max:1024,step:1}),firstStepSize:C.e.Numeric(.01,{min:.001,max:1,step:.001}),refineSteps:C.e.Numeric(4,{min:0,max:8,step:1},{description:"Number of refine steps per ray hit. May be lower to reach targetFps."}),rayDistance:C.e.Numeric(256,{min:1,max:8192,step:1},{description:"Maximum distance a ray can travel (in world units)."}),thicknessMode:C.e.Select("auto",C.e.arrayToOptions(["auto","fixed"])),minThickness:C.e.Numeric(.5,{min:.1,max:16,step:.1},{hideIf:e=>"fixed"===e.thicknessMode}),thicknessFactor:C.e.Numeric(1,{min:.1,max:2,step:.05},{hideIf:e=>"fixed"===e.thicknessMode}),thickness:C.e.Numeric(4,{min:.1,max:512,step:.1},{hideIf:e=>"auto"===e.thicknessMode}),bounces:C.e.Numeric(4,{min:1,max:32,step:1},{description:"Number of bounces for each ray."}),glow:C.e.Boolean(!0,{description:"Bounced rays always get the full light. This produces a slight glowing effect."}),shadowEnable:C.e.Boolean(!1),shadowSoftness:C.e.Numeric(.1,{min:.01,max:1,step:.01}),shadowThickness:C.e.Numeric(.5,{min:.1,max:32,step:.1})};class tc{constructor(e,t){this.webgl=e,this.drawPass=t,this.clearAdjustedProps=!0,this.prevTime=0,this.currTime=0,this.rendersPerFrame=1,this.refineSteps=1,this.steps=16;let{extensions:{drawBuffers:r,colorBufferHalfFloat:a,textureHalfFloat:n},resources:i,isWebGL2:o}=e,{depthTextureOpaque:s}=t,l=s.getWidth(),u=s.getHeight();o?(this.shadedTextureOpaque=i.texture("image-uint8","rgba","ubyte","nearest"),this.shadedTextureOpaque.define(l,u),this.normalTextureOpaque=a&&n?i.texture("image-float16","rgba","fp16","nearest"):i.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(l,u),this.colorTextureOpaque=i.texture("image-uint8","rgba","ubyte","nearest")):(this.shadedTextureOpaque=i.texture("image-float32","rgba","float","nearest"),this.shadedTextureOpaque.define(l,u),this.normalTextureOpaque=i.texture("image-float32","rgba","float","nearest"),this.normalTextureOpaque.define(l,u),this.colorTextureOpaque=i.texture("image-float32","rgba","float","nearest")),this.colorTextureOpaque.define(l,u),this.framebuffer=i.framebuffer(),this.framebuffer.bind(),r.drawBuffers([r.COLOR_ATTACHMENT0,r.COLOR_ATTACHMENT1,r.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.thicknessTarget=e.createRenderTarget(l,u,!0,"uint8","nearest"),this.holdTarget=e.createRenderTarget(l,u,!1,"float32"),this.accumulateTarget=e.createRenderTarget(l,u,!1,"float32"),this.composeTarget=e.createRenderTarget(l,u,!1,"uint8","linear"),this.traceRenderable=function(e,t,r,a,n,i,o){let s={...ec.GE,tColor:q.IO.create(t),tNormal:q.IO.create(r),t
776Shaded:q.IO.create(a),tThickness:q.IO.create(n),tAccumulate:q.IO.create(i),tDepth:q.IO.create(o),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),dOrthographic:q.IO.create(0),uNear:q.IO.create(1),uFar:q.IO.create(1e4),uFogNear:q.IO.create(1e4),uFogFar:q.IO.create(1e4),uFogColor:q.IO.create(eP.A.create(1,1,1)),uProjection:q.IO.create(ti.y.identity()),uInvProjection:q.IO.create(ti.y.identity()),uBounds:q.IO.create((0,to.T)()),uLightDirection:q.IO.create([]),uLightColor:q.IO.create([]),dLightCount:q.IO.create(0),uAmbientColor:q.IO.create((0,eP.A)()),uLightStrength:q.IO.create(eP.A.create(1,1,1)),uFrameNo:q.IO.create(0),dRendersPerFrame:q.IO.create(1),dGlow:q.IO.create(!0),dBounces:q.IO.create(4),dSteps:q.IO.create(32),dFirstStepSize:q.IO.create(.01),dRefineSteps:q.IO.create(4),uRayDistance:q.IO.create(256),dThicknessMode:q.IO.create("auto"),uMinThickness:q.IO.create(.5),uThicknessFactor:q.IO.create(1),uThickness:q.IO.create(4),dShadowEnable:q.IO.create(!1),uShadowSoftness:q.IO.create(.1),uShadowThickness:q.IO.create(.1)},l={...td},u=(0,ef.s8)(e,"triangles",tp,l,s);return(0,em.T)(u,s)}(e,this.colorTextureOpaque,this.normalTextureOpaque,this.shadedTextureOpaque,this.thicknessTarget.texture,this.accumulateTarget.texture,this.drawPass.depthTextureOpaque),this.accumulateRenderable=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...tf},n=(0,ef.s8)(e,"triangles",tm,a,r);return(0,em.T)(n,r)}(e,this.holdTarget.texture)}getByteCount(){return this.thicknessTarget.getByteCount()+this.holdTarget.getByteCount()+this.accumulateTarget.getByteCount()+this.composeTarget.getByteCount()+this.colorTextureOpaque.getByteCount()+this.normalTextureOpaque.getByteCount()+this.shadedTextureOpaque.getByteCount()}renderInput(e,t,r,a){ev.kM&&this.webgl.timer.mark("TracePass.renderInput");let{gl:n,state:i}=this.webgl;this.framebuffer.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.framebuffer,"depth"),e.clear(!0),e.renderTracing(r.primitives,t),"auto"===a.thicknessMode&&(this.thicknessTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT|n.DEPTH_BUFFER_BIT),e.renderDepthOpaqueBack(r.primitives,t)),ev.kM&&this.webgl.timer.markEnd("TracePass.renderInput")}setSize(e,t){let r=this.composeTarget.getWidth(),a=this.composeTarget.getHeight();(e!==r||t!==a)&&(this.thicknessTarget.setSize(e,t),this.holdTarget.setSize(e,t),this.accumulateTarget.setSize(e,t),this.composeTarget.setSize(e,t),this.colorTextureOpaque.define(e,t),this.normalTextureOpaque.define(e,t),this.shadedTextureOpaque.define(e,t),q.IO.update(this.traceRenderable.values.uTexSize,tr.S.set(this.traceRenderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.accumulateRenderable.values.uTexSize,tr.S.set(this.accumulateRenderable.values.uTexSize.ref.value,e,t)))}reset(){let{drawBuffers:e}=this.webgl.extensions;this.framebuffer.bind(),e.drawBuffers([e.COLOR_ATTACHMENT0,e.COLOR_ATTACHMENT1,e.COLOR_ATTACHMENT2]),this.shadedTextureOpaque.attachFramebuffer(this.framebuffer,"color0"),this.normalTextureOpaque.attachFramebuffer(this.framebuffer,"color1"),this.colorTextureOpaque.attachFramebuffer(this.framebuffer,"color2"),this.restart(!0)}restart(e=!1){let{gl:t,state:r}=this.webgl;this.accumulateTarget.bind(),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),this.composeTarget.bind(),r.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT),e&&(this.prevTime=0,this.currTime=0,this.clearAdjustedProps=!0)}increaseAdjustedProps(e){this.steps+=1,this.steps>e.steps&&(this.refineSteps+=1),this.refineSteps>e.refineSteps&&(this.rendersPerFrame+=1)}decreaseAdjustedProps(e){let t=Math.min(1,e.refineSteps);this.rendersPerFrame-=1,this.rendersPerFrame<1&&(this.refineSteps-=1),this.refineSteps<t&&(this.steps-=1)}getAdjustedProps(e,t){this.currTime=(0,b.z)();let r=Math.min(1,e.refineSteps),a=Math.round(e.steps/2);if(this.clearAdjustedProps&&(this.rendersPerFrame=e.rendersPerFrame[0],this.refineSteps=r,this.steps=a,this.clearAdjustedProps=!1),t>0){let t=1e3/e.targetFps,r=this.currTime-this.prevTime,a=Math.round(r/t);
776if(a>=2)for(;a>0;)this.decreaseAdjustedProps(e),a-=1;else r<t?this.increaseAdjustedProps(e):r>t+.5&&this.decreaseAdjustedProps(e)}return this.prevTime=this.currTime,this.rendersPerFrame=(0,tl.uZ)(this.rendersPerFrame,e.rendersPerFrame[0],e.rendersPerFrame[1]),this.refineSteps=(0,tl.uZ)(this.refineSteps,r,e.refineSteps),this.steps=(0,tl.uZ)(this.steps,a,e.steps),{rendersPerFrame:0===t?Math.ceil(this.rendersPerFrame/2):this.rendersPerFrame,refineSteps:0===t?r:this.refineSteps,steps:0===t?a:this.steps}}render(e,t,r,a,n){let{rendersPerFrame:i,refineSteps:o,steps:s}=this.getAdjustedProps(r,a);ev.kM&&this.webgl.timer.mark("TracePass.render",{note:`${i} rendersPerFrame, ${o} refineSteps, ${s} steps`});let{renderer:l,camera:u,scene:c}=e,{gl:d,state:p}=this.webgl,{x:f,y:m,width:h,height:g}=u.viewport;(0===a||n)&&(l.setTransparentBackground(t),l.setDrawingBufferSize(this.composeTarget.getWidth(),this.composeTarget.getHeight()),l.setPixelRatio(this.webgl.pixelRatio),l.setViewport(f,m,h,g),l.update(u,c),this.renderInput(l,u,c,r)),p.disable(d.BLEND),p.disable(d.DEPTH_TEST),p.disable(d.CULL_FACE),p.depthMask(!1),p.viewport(f,m,h,g),p.scissor(f,m,h,g);let b=ti.y.identity();ti.y.invert(b,u.projection);let y="orthographic"===u.state.mode?1:0,[x,S]=this.traceRenderable.values.uTexSize.ref.value,T=u.viewport,C=(0,eP.A)();eP.A.scale(C,ta.Il.toArrayNormalized(l.props.ambientColor,C,0),l.props.ambientIntensity);let O=eP.A.clone(C);for(let e=0,t=l.light.count;e<t;++e){let t=eP.A.fromArray((0,eP.A)(),l.light.color,3*e);eP.A.add(O,O,t)}this.holdTarget.bind();let I=!1;q.IO.update(this.traceRenderable.values.uFrameNo,a),this.traceRenderable.values.dRendersPerFrame.ref.value!==i&&(q.IO.update(this.traceRenderable.values.dRendersPerFrame,i),I=!0),q.IO.update(this.traceRenderable.values.uProjection,u.projection),q.IO.update(this.traceRenderable.values.uInvProjection,b),to.T.set(this.traceRenderable.values.uBounds.ref.value,T.x/x,T.y/S,(T.x+T.width)/x,(T.y+T.height)/S),q.IO.update(this.traceRenderable.values.uBounds,this.traceRenderable.values.uBounds.ref.value),q.IO.updateIfChanged(this.traceRenderable.values.uNear,u.near),q.IO.updateIfChanged(this.traceRenderable.values.uFar,u.far),q.IO.updateIfChanged(this.traceRenderable.values.uFogFar,u.fogFar),q.IO.updateIfChanged(this.traceRenderable.values.uFogNear,u.fogNear),q.IO.update(this.traceRenderable.values.uFogColor,ta.Il.toVec3Normalized(this.traceRenderable.values.uFogColor.ref.value,l.props.backgroundColor)),this.traceRenderable.values.dOrthographic.ref.value!==y&&(q.IO.update(this.traceRenderable.values.dOrthographic,y),I=!0),q.IO.update(this.traceRenderable.values.uLightDirection,l.light.direction),q.IO.update(this.traceRenderable.values.uLightColor,l.light.color),this.traceRenderable.values.dLightCount.ref.value!==l.light.count&&(q.IO.update(this.traceRenderable.values.dLightCount,l.light.count),I=!0),q.IO.update(this.traceRenderable.values.uAmbientColor,C),q.IO.update(this.traceRenderable.values.uLightStrength,O),this.traceRenderable.values.dGlow.ref.value!==r.glow&&(q.IO.update(this.traceRenderable.values.dGlow,r.glow),I=!0),this.traceRenderable.values.dBounces.ref.value!==r.bounces&&(q.IO.update(this.traceRenderable.values.dBounces,r.bounces),I=!0),this.traceRenderable.values.dSteps.ref.value!==s&&(q.IO.update(this.traceRenderable.values.dSteps,s),I=!0),this.traceRenderable.values.dFirstStepSize.ref.value!==r.firstStepSize&&(q.IO.update(this.traceRenderable.values.dFirstStepSize,r.firstStepSize),I=!0),this.traceRenderable.values.dRefineSteps.ref.value!==o&&(q.IO.update(this.traceRenderable.values.dRefineSteps,o),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uRayDistance,r.rayDistance),this.traceRenderable.values.dThicknessMode.ref.value!==r.thicknessMode&&(q.IO.update(this.traceRenderable.values.dThicknessMode,r.thicknessMode),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uMinThickness,r.minThickness),q.IO.updateIfChanged(this.traceRenderable.values.uThicknessFactor,r.thicknessFactor),q.IO.updateIfChanged(this.traceRenderable.values.uThickness,r.thickness),this.traceRenderable.values.dShadowEnable.ref.value!==r.shadowEnable&&(q.IO.update(this.traceRenderable.values.dShadowEnable,r.shadowEnable),I=!0),q.IO.updateIfChanged(this.traceRenderable.values.uShadowSoftness,r.shadowSoftness),q.IO.updateIfChanged(this.traceRenderable.values.uShadowThickness,r.shadowThickness),I&&this.traceRenderable.update(
776),ev.kM&&this.webgl.timer.mark("TracePass.renderTrace"),this.traceRenderable.render(),ev.kM&&this.webgl.timer.markEnd("TracePass.renderTrace"),this.accumulateTarget.bind(),this.accumulateRenderable.render(),ev.kM&&this.webgl.timer.markEnd("TracePass.render")}}let td={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),tNormal:(0,ed.U2)("texture","rgba","ubyte","nearest"),tShaded:(0,ed.U2)("texture","rgba","ubyte","nearest"),tThickness:(0,ed.U2)("texture","rgba","ubyte","nearest"),tAccumulate:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepth:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),dOrthographic:(0,ed.O0)("number"),uNear:(0,ed.wt)("f"),uFar:(0,ed.wt)("f"),uFogNear:(0,ed.wt)("f"),uFogFar:(0,ed.wt)("f"),uFogColor:(0,ed.wt)("v3"),uProjection:(0,ed.wt)("m4"),uInvProjection:(0,ed.wt)("m4"),uBounds:(0,ed.wt)("v4"),uLightDirection:(0,ed.wt)("v3[]"),uLightColor:(0,ed.wt)("v3[]"),dLightCount:(0,ed.O0)("number"),uAmbientColor:(0,ed.wt)("v3"),uLightStrength:(0,ed.wt)("v3"),uFrameNo:(0,ed.wt)("i"),dRendersPerFrame:(0,ed.O0)("number"),dGlow:(0,ed.O0)("boolean"),dBounces:(0,ed.O0)("number"),dSteps:(0,ed.O0)("number"),dFirstStepSize:(0,ed.O0)("number"),dRefineSteps:(0,ed.O0)("number"),uRayDistance:(0,ed.wt)("f"),dThicknessMode:(0,ed.O0)("string"),uMinThickness:(0,ed.wt)("f"),uThicknessFactor:(0,ed.wt)("f"),uThickness:(0,ed.wt)("f"),dShadowEnable:(0,ed.O0)("boolean"),uShadowSoftness:(0,ed.wt)("f"),uShadowThickness:(0,ed.wt)("f")},tp=(0,ep.Lq)("trace",eh.C,tn),tf={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},tm=(0,ep.Lq)("accumulate",eh.C,ts);var th=r(59978);let tg=!1;function tv(e){let{drawBuffers:t,textureFloat:r,colorBufferFloat:a,depthTexture:n}=e.extensions;if(r&&a&&n&&t)return!0;if(ev.Au&&!tg){let e=[];r||e.push("textureFloat"),a||e.push("colorBufferFloat"),n||e.push("depthTexture"),t||e.push("drawBuffers"),console.log(`Missing "${e.join('", "')}" extensions required for "illumination"`),tg=!0}return!1}let tb={enabled:C.e.Boolean(!1),maxIterations:C.e.Numeric(5,{min:0,max:16,step:1},{description:"Maximum number of tracing iterations. Final iteration count is 2^x."}),denoise:C.e.Boolean(!0),denoiseThreshold:C.e.Interval([.15,1],{min:0,max:4,step:.01},{description:"Threshold for denoising. Automatically adjusted within given interval based on current iteration."}),ignoreOutline:C.e.Boolean(!0,{description:"Ignore outline in illumination pass where it is generally not needed for visual clarity. Useful when illumination is often toggled on/off."}),...tu};class ty{get iteration(){return this._iteration}get colorTarget(){return this._colorTarget}get supported(){return this._supported}getByteCount(){return this._supported?this.tracing.getByteCount()+this.transparentTarget.getByteCount()+this.outputTarget.getByteCount()+this.multiSampleComposeTarget.getByteCount()+this.multiSampleHoldTarget.getByteCount()+this.multiSampleAccumulateTarget.getByteCount():0}getMaxIterations(e){return Math.pow(2,e.maxIterations)}static isSupported(e){return tv(e)}static isEnabled(e,t){return t.enabled&&tv(e)}constructor(e,t){if(this.webgl=e,this.drawPass=t,this._iteration=0,this._supported=!1,this.prevSampleIndex=-1,!ty.isSupported(e))return;let{colorTarget:r}=t,a=r.getWidth(),n=r.getHeight();this.tracing=new tc(e,this.drawPass),this.transparentTarget=e.createRenderTarget(a,n,!1,"uint8","nearest"),this.outputTarget=e.createRenderTarget(a,n,!1,"uint8","linear"),this.copyRenderable=(0,ec.Oz)(e,this.transparentTarget.texture),this.composeRenderable=function(e,t,r,a,n,i,o,s,l,u,c){let d={...ec.GE,tColor:q.IO.create(t),tNormal:q.IO.create(r),t
776Shaded:q.IO.create(a),tTransparentColor:q.IO.create(s),dBlendTransparency:q.IO.create(!0),tSsaoDepth:q.IO.create(l),tSsaoDepthTransparent:q.IO.create(u),tDepthOpaque:q.IO.create(n),tDepthTransparent:q.IO.create(i),tOutlines:q.IO.create(o),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),dDenoise:q.IO.create(!0),uDenoiseThreshold:q.IO.create(.1),dOrthographic:q.IO.create(0),uNear:q.IO.create(1),uFar:q.IO.create(1e4),uFogNear:q.IO.create(1e4),uFogFar:q.IO.create(1e4),uFogColor:q.IO.create(eP.A.create(1,1,1)),uOutlineColor:q.IO.create(eP.A.create(0,0,0)),uOcclusionColor:q.IO.create(eP.A.create(0,0,0)),uTransparentBackground:q.IO.create(!1),dOcclusionEnable:q.IO.create(!1),dOutlineEnable:q.IO.create(!1),dOutlineScale:q.IO.create(1),dTransparentOutline:q.IO.create(c)},p={...tx},f=(0,ef.s8)(e,"triangles",tS,p,d);return(0,em.T)(f,d)}(e,this.tracing.accumulateTarget.texture,this.tracing.normalTextureOpaque,this.tracing.colorTextureOpaque,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,this.drawPass.postprocessing.outline.target.texture,this.transparentTarget.texture,this.drawPass.postprocessing.ssao.ssaoDepthTexture,this.drawPass.postprocessing.ssao.ssaoDepthTransparentTexture,!1),this.multiSampleComposeTarget=e.createRenderTarget(a,n,!1,"float32"),this.multiSampleHoldTarget=e.createRenderTarget(a,n,!1),this.multiSampleAccumulateTarget=e.createRenderTarget(a,n,!1,"float32"),this.multiSampleCompose=function(e,t){let r={...ec.GE,tColor:q.IO.create(t),uTexSize:q.IO.create(tr.S.create(t.getWidth(),t.getHeight())),uWeight:q.IO.create(1)},a={...tT},n=(0,ef.s8)(e,"triangles",tC,a,r);return(0,em.T)(n,r)}(e,this.outputTarget.texture),this._supported=!0}
776renderInput(e,t,r,a){ev.kM&&this.webgl.timer.mark("IlluminationPass.renderInput");let{gl:n,state:i}=this.webgl,o=e2.isEnabled(a.marking),s=r.opacityAverage<1||r.volumes.renderables.length>0,l=o&&r.markerAverage>0;this.transparentTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT);let u=eu.hq.isTransparentOutlineEnabled(a.postprocessing)&&!a.illumination.ignoreOutline,c=e8.z.isEnabled(a.postprocessing),d=eu.hq.isTransparentSsaoEnabled(r,a.postprocessing);if((u||c||d)&&(this.drawPass.depthTargetTransparent.bind(),e.clearDepth(!0)),s){if("wboit"===this.drawPass.transparency)this.drawPass.wboit.bind(),e.renderWboitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque),r.volumes.renderables.length>0&&e.renderWboitTransparent(r.volumes,t,this.drawPass.depthTextureOpaque),this.transparentTarget.bind(),this.drawPass.wboit.render();else if("dpoit"===this.drawPass.transparency){let n=this.drawPass.dpoit.bind();e.renderDpoitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque,n);for(let n=0,i=a.dpoitIterations;n<i;n++){ev.kM&&this.webgl.timer.mark("DpoitPass.layer");let a=this.drawPass.dpoit.bindDualDepthPeeling();e.renderDpoitTransparent(r.primitives,t,this.drawPass.depthTextureOpaque,a),i>1&&(this.transparentTarget.bind(),this.drawPass.dpoit.renderBlendBack()),ev.kM&&this.webgl.timer.markEnd("DpoitPass.layer")}this.transparentTarget.bind(),this.drawPass.dpoit.render(),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.drawPass.depthTextureOpaque)}else this.transparentTarget.bind(),this.drawPass.depthTextureOpaque.attachFramebuffer(this.transparentTarget.framebuffer,"depth"),e.renderBlendedTransparent(r.primitives,t),this.drawPass.depthTextureOpaque.detachFramebuffer(this.transparentTarget.framebuffer,"depth"),r.volumes.renderables.length>0&&e.renderVolume(r.volumes,t,this.drawPass.depthTextureOpaque);(u||c||d)&&(this.drawPass.depthTargetTransparent.bind(),r.opacityAverage<1&&e.renderDepthTransparent(r.primitives,t,this.drawPass.depthTextureOpaque)),d&&(this.drawPass.postprocessing.ssao.update(t,r,a.postprocessing.occlusion.params,!0),this.drawPass.postprocessing.ssao.render(t))}if(l){let n=a.marking.ghostEdgeStrength<1;n&&1!==r.markerAverage&&(this.drawPass.marking.depthTarget.bind(),e.clear(!1,!0),e.renderMarkingDepth(r.primitives,t)),this.drawPass.marking.maskTarget.bind(),e.clear(!1,!0),e.renderMarkingMask(r.primitives,t,n?this.drawPass.marking.depthTarget.texture:null),this.drawPass.marking.update(a.marking),this.drawPass.marking.render(t.viewport,this.transparentTarget)}this.tracing.composeTarget.bind(),i.clearColor(0,0,0,0),n.clear(n.COLOR_BUFFER_BIT),ev.kM&&this.webgl.timer.markEnd("IlluminationPass.renderInput")}shouldRender(e){return this._supported&&e.enabled&&this._iteration<this.getMaxIterations(e)}setSize(e,t){if(!this._supported)return;let r=this.outputTarget.getWidth(),a=this.outputTarget.getHeight();(e!==r||t!==a)&&(this.tracing.setSize(e,t),this.transparentTarget.setSize(e,t),this.outputTarget.setSize(e,t),q.IO.update(this.copyRenderable.values.uTexSize,tr.S.set(this.copyRenderable.values.uTexSize.ref.value,e,t)),q.IO.update(this.composeRenderable.values.uTexSize,tr.S.set(this.composeRenderable.values.uTexSize.ref.value,e,t)),this.multiSampleComposeTarget.setSize(e,t),this.multiSampleHoldTarget.setSize(e,t),this.multiSampleAccumulateTarget.setSize(e,t),q.IO.update(this.multiSampleCompose.values.uTexSize,tr.S.set(this.multiSampleCompose.values.uTexSize.ref.value,e,t))),this.drawPass.setSize(e,t)}reset(){this._supported&&(this.tracing.reset(),this._iteration=0,this.prevSampleIndex=-1)}restart(e=!1){this._supported&&(this.tracing.restart(e),this._iteration=0,this.prevSampleIndex=-1)}renderInternal(e,t,r,a){if(!this.shouldRender(t.illumination))return;ev.kM&&this.webgl.timer.mark("IlluminationPass.render",{note:`iteration ${this._iteration+1} of ${this.getMaxIterations(t.illumination)}`}),this.tracing.render(e,t.transparentBackground,t.illumination,this._iteration,a);let{renderer:n,camera:i,scene:o,helper:s}=e,{gl:l,state:u}=this.webgl,{x:c,y:d,width:p,height:f}=i.viewport;
776(0===this._iteration||a)&&(n.setTransparentBackground(t.transparentBackground),n.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),n.setPixelRatio(this.webgl.pixelRatio),n.setViewport(c,d,p,f),n.update(i,o),this.renderInput(n,i,o,t)),u.disable(l.BLEND),u.disable(l.DEPTH_TEST),u.disable(l.CULL_FACE),u.depthMask(!1),u.viewport(c,d,p,f),u.scissor(c,d,p,f);let m="orthographic"===i.state.mode?1:0,h=eu.xt.isEnabled(t.postprocessing),g=th.f1.isEnabled(t.postprocessing)&&!t.illumination.ignoreOutline,b=eu.hq.isTransparentSsaoEnabled(o,t.postprocessing),y=e7.y.isEnabled(t.postprocessing),x=e8.z.isEnabled(t.postprocessing),S=e2.isEnabled(t.marking),T=o.opacityAverage<1||o.volumes.renderables.length>0,C=S&&o.markerAverage>0,O=!1;if(this.composeRenderable.values.dOutlineEnable.ref.value!==g&&(O=!0,q.IO.update(this.composeRenderable.values.dOutlineEnable,g)),g&&"on"===t.postprocessing.outline.name){let{transparentOutline:e,outlineScale:r}=this.drawPass.postprocessing.outline.update(i,t.postprocessing.outline.params,this.drawPass.depthTargetTransparent.texture,this.drawPass.depthTextureOpaque);this.drawPass.postprocessing.outline.render(),q.IO.update(this.composeRenderable.values.uOutlineColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uOutlineColor.ref.value,t.postprocessing.outline.params.color)),this.composeRenderable.values.dOutlineScale.ref.value!==r&&(O=!0,q.IO.update(this.composeRenderable.values.dOutlineScale,r)),this.composeRenderable.values.dTransparentOutline.ref.value!==e&&(O=!0,q.IO.update(this.composeRenderable.values.dTransparentOutline,e))}this.composeRenderable.values.dOcclusionEnable.ref.value!==b&&(O=!0,q.IO.update(this.composeRenderable.values.dOcclusionEnable,b)),b&&"on"===t.postprocessing.occlusion.name&&q.IO.update(this.composeRenderable.values.uOcclusionColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uOcclusionColor.ref.value,t.postprocessing.occlusion.params.color));let I=T||C;this.composeRenderable.values.dBlendTransparency.ref.value!==I&&(O=!0,q.IO.update(this.composeRenderable.values.dBlendTransparency,I)),q.IO.updateIfChanged(this.composeRenderable.values.uNear,i.near),q.IO.updateIfChanged(this.composeRenderable.values.uFar,i.far),q.IO.updateIfChanged(this.composeRenderable.values.uFogFar,i.fogFar),q.IO.updateIfChanged(this.composeRenderable.values.uFogNear,i.fogNear),q.IO.update(this.composeRenderable.values.uFogColor,ta.Il.toVec3Normalized(this.composeRenderable.values.uFogColor.ref.value,n.props.backgroundColor)),this.composeRenderable.values.dOrthographic.ref.value!==m&&(q.IO.update(this.composeRenderable.values.dOrthographic,m),O=!0),!r||h||x?this.tracing.composeTarget.bind():this.webgl.bindDrawingBuffer(),this._colorTarget=this.tracing.composeTarget,this.drawPass.postprocessing.background.update(i,t.postprocessing.background),this.drawPass.postprocessing.background.clear(t.postprocessing.background,t.transparentBackground,n.props.backgroundColor),this.drawPass.postprocessing.background.render(t.postprocessing.background),q.IO.updateIfChanged(this.composeRenderable.values.uTransparentBackground,t.transparentBackground||this.drawPass.postprocessing.background.isEnabled(t.postprocessing)),this.composeRenderable.values.dDenoise.ref.value!==t.illumination.denoise&&(q.IO.update(this.composeRenderable.values.dDenoise,t.illumination.denoise),O=!0);let A="on"===t.multiSample.mode?t.illumination.denoiseThreshold[0]:(0,tl.t7)(t.illumination.denoiseThreshold[1],t.illumination.denoiseThreshold[0],(0,tl.uZ)(this.iteration/(this.getMaxIterations(t.illumination)/2),0,1));q.IO.updateIfChanged(this.composeRenderable.values.uDenoiseThreshold,A),O&&this.composeRenderable.update(),this.composeRenderable.render(),n.setDrawingBufferSize(this.tracing.composeTarget.getWidth(),this.tracing.composeTarget.getHeight()),n.setPixelRatio(this.webgl.pixelRatio),n.setViewport(c,d,p,f),n.update(i,o),s.debug.isEnabled&&(s.debug.syncVisibility(),n.renderBlended(s.debug.scene,i)),s.handle.isEnabled&&n.renderBlended(s.handle.scene,i),s.camera.isEnabled&&(s.camera.update(i),n.update(s.camera.camera,s.camera.scene),n.renderBlended(s.camera.scene,s.camera.camera));let w=!1,D=this.outputTarget;if(h){let e=r&&!x;this.drawPass.antialiasing.render(i,this.tracing.composeTarget.texture,!!e||this.outputTarget,t.postprocessing),e?w=!0:(this._colorTarget=this.outputTarget,D=this.tracing.composeTarget)}if(y&&"on"===t.postprocessing.bloom.name){let e=r&&!x||w;this.drawPass.bloom.update(this.tracing.colorTextureOpaque,this.tracing.normalTextureOpaque,this.drawPass.depthTextureOpaque,t.postprocessing.bloom.params),this.drawPass.bloom.render(i.viewport,e?void 0:this._colorTarget)}if(x&&"on"===t.postprocessing.dof.name){let e=r||w;this.drawPass.dof.update(i,this._colorTarget.texture,this.drawPass.depthTextureOpaque,this.drawPass.depthTargetTransparent.texture,t.postprocessing.dof.params,o.boundingSphereVisible),this.drawPass.dof.render(i.viewport,e?void 0:D),e||(this._colorTarget=D)}this._iteration+=1,ev.kM&&this.webgl.timer.markEnd("IlluminationPass.render"),this.webgl.gl.flush()}renderMultiSample(e,t,r){let{camera:a}=e,{multiSampleCompose:n,multiSampleComposeTarget:i,multiSampleHoldTarget:o,webgl:s}=this,{gl:l,state:u}=s,c=eT[Math.max(0,Math.min(t.multiSample.sampleLevel,5))],d=this.getMaxIterations(t.illumination),p=Math.min(this._iteration,d),f=Math.floor(p/d*c.length);ev.kM&&s.timer.mark("IlluminationPass.renderMultiSample",{note:`sampleIndex ${f+1} of ${c.length}`});let{x:m,y:h,width:g,height:b}=a.viewport,y=1/d;if(0===p)this.renderInternal(e,t,!1,!0),q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,this._colorTarget.texture),n.update(),o.bind(),u.disable(l.BLEND),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(m,h,g,b),u.scissor(m,h,g,b),n.render();else{a.viewOffset.enabled=!0,q.IO.update(n.values.tColor,this._colorTarget.texture),q.IO.update(n.values.uWeight,y),n.update();let r=c[f];
776L.V.setViewOffset(a.viewOffset,g,b,r[0],r[1],g,b),a.update(),this.renderInternal(e,t,!1,this.prevSampleIndex!==f),i.bind(),u.enable(l.BLEND),u.blendEquationSeparate(l.FUNC_ADD,l.FUNC_ADD),u.blendFuncSeparate(l.ONE,l.ONE,l.ONE,l.ONE),u.disable(l.DEPTH_TEST),u.depthMask(!1),u.viewport(m,h,g,b),u.scissor(m,h,g,b),1===p&&(u.clearColor(0,0,0,0),l.clear(l.COLOR_BUFFER_BIT)),n.render()}this.prevSampleIndex=f,r?this.webgl.bindDrawingBuffer():this.multiSampleAccumulateTarget.bind(),u.viewport(m,h,g,b),u.scissor(m,h,g,b);let x=p*y;x>0&&(q.IO.update(n.values.uWeight,1),q.IO.update(n.values.tColor,i.texture),n.update(),u.disable(l.BLEND),n.render()),x<1&&(q.IO.update(n.values.uWeight,1-x),q.IO.update(n.values.tColor,o.texture),n.update(),0===x?u.disable(l.BLEND):u.enable(l.BLEND),n.render()),r||(u.disable(l.BLEND),this.colorTarget.bind(),this.copyRenderable.values.tColor.ref.value!==this.multiSampleAccumulateTarget.texture&&(q.IO.update(this.copyRenderable.values.tColor,this.multiSampleAccumulateTarget.texture),this.copyRenderable.update()),this.copyRenderable.render()),a.viewOffset.enabled=!1,a.update(),ev.kM&&s.timer.markEnd("IlluminationPass.renderMultiSample")}render(e,t,r){this._supported&&("on"===t.multiSample.mode?this.renderMultiSample(e,t,r):this.renderInternal(e,t,r,!1))}}let tx={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),tNormal:(0,ed.U2)("texture","rgba","ubyte","nearest"),tShaded:(0,ed.U2)("texture","rgba","ubyte","nearest"),tTransparentColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),dBlendTransparency:(0,ed.O0)("boolean"),tSsaoDepth:(0,ed.U2)("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepthOpaque:(0,ed.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,ed.U2)("texture","rgba","ubyte","nearest"),tOutlines:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),dDenoise:(0,ed.O0)("boolean"),uDenoiseThreshold:(0,ed.wt)("f"),dOrthographic:(0,ed.O0)("number"),uNear:(0,ed.wt)("f"),uFar:(0,ed.wt)("f"),uFogNear:(0,ed.wt)("f"),uFogFar:(0,ed.wt)("f"),uFogColor:(0,ed.wt)("v3"),uOutlineColor:(0,ed.wt)("v3"),uOcclusionColor:(0,ed.wt)("v3"),uTransparentBackground:(0,ed.wt)("b"),dOcclusionEnable:(0,ed.O0)("boolean"),dOutlineEnable:(0,ed.O0)("boolean"),dOutlineScale:(0,ed.O0)("number"),dTransparentOutline:(0,ed.O0)("boolean")},tS=(0,ep.Lq)("compose",eh.C,tt),tT={...ec.iz,tColor:(0,ed.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,ed.wt)("v2"),uWeight:(0,ed.wt)("f")},tC=(0,ep.Lq)("compose",eh.C,eg);var tO=r(44712);class tI{static ensureRequired(e,t,r){let a=new tI(e,t);a.updateRequired(r),a.finalizeRequired(!0)}constructor(e,t){this.webgl=e,this.scene=t,this.required=[]}updateRequired(e){this.required.length=0,this.required.push("color"),ty.isEnabled(this.webgl,e.illumination)&&this.required.push("tracing"),e2.isEnabled(e.marking)&&this.scene.markerAverage>0&&this.required.push("marking"),e7.y.isEnabled(e.postprocessing)&&this.scene.emissiveAverage>0&&this.required.push("emissive"),(eu.hq.isTransparentDepthRequired(this.scene,e.postprocessing)||!this.webgl.extensions.drawBuffers||!this.webgl.extensions.depthTexture||ty.isEnabled(this.webgl,e.illumination))&&this.required.push("depth"),this.webgl.resources.linkPrograms(this.required)}finalizeRequired(e){return this.finalize(this.required,e)}finalize(e,t){return this.webgl.resources.finalizePrograms(e,t)}}let tA={transparentBackground:C.e.Boolean(!1),dpoitIterations:C.e.Numeric(2,{min:1,max:10,step:1}),multiSample:C.e.Group(ex),postprocessing:C.e.Group(eu.yM),marking:C.e.Group(e1),illumination:C.e.Group(tb),cameraHelper:C.e.Group(te.n1),renderer:C.e.Group(S.g4)};class tw{get colorTarget(){return this._colorTarget}get width(){return this._width}get height(){return this._height}constructor(e,t,r,a,n,i,o){this.webgl=e,this.renderer=r,this.scene=a,this.camera=n,this._width=0,this._height=0,this._camera=new L.V,this.props={...C.e.getDefaultValues(tA),...o},this.drawPass=new e9(e,t,128,128,a.transparency),this.illuminationPass=new ty(e,this.drawPass),this.multiSamplePass=new eS(e,this.drawPass),this.multiSampleHelper=new eC(this.multiSamplePass),this.helper={camera:new te.Rk(e,this.props.cameraHelper),debug:i.debug,handle:i.handle,pointer:i.pointer},this.setSize(1024,768)}getByteCount(){return this.drawPass.getByteCount()+this.illuminationPass.getByteCount()+this.multiSamplePass.getByteCount()}
776updateBackground(){return new Promise(e=>{this.drawPass.postprocessing.background.update(this.camera,this.props.postprocessing.background,()=>{e()})})}setSize(e,t){(e!==this._width||t!==this._height)&&(this._width=e,this._height=t,this.drawPass.setSize(e,t),this.illuminationPass.setSize(e,t),this.multiSamplePass.syncSize())}setProps(e={}){Object.assign(this.props,e),e.cameraHelper&&this.helper.camera.setProps(e.cameraHelper)}async render(e){this.drawPass.setTransparency(this.scene.transparency),tI.ensureRequired(this.webgl,this.scene,this.props),L.V.copySnapshot(this._camera.state,this.camera.state),T.l_.set(this._camera.viewport,0,0,this._width,this._height),this._camera.update(),this.renderer.setOcclusionTest(null);let t={renderer:this.renderer,camera:this._camera,scene:this.scene,helper:this.helper};if(this.illuminationPass.supported&&this.props.illumination.enabled){for(await e.update({message:"Tracing...",current:1,max:this.illuminationPass.getMaxIterations(this.props.illumination)}),this.illuminationPass.restart(!0);this.illuminationPass.shouldRender(this.props.illumination);)ev.kM&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),this.illuminationPass.render(t,this.props,!1),ev.kM&&this.webgl.timer.markEnd("ImagePass.render"),e.shouldUpdate&&await e.update({current:this.illuminationPass.iteration}),await this.webgl.waitForGpuCommandsComplete();this._colorTarget=this.illuminationPass.colorTarget}else ev.kM&&this.webgl.timer.mark("ImagePass.render",{captureStats:!0}),eS.isEnabled(this.props.multiSample)?(this.multiSampleHelper.render(t,this.props,!1),this._colorTarget=this.multiSamplePass.colorTarget):(this.drawPass.render(t,this.props,!1),this._colorTarget=this.drawPass.getColorTarget(this.props.postprocessing)),ev.kM&&this.webgl.timer.markEnd("ImagePass.render");if(ev.kM){let e=this.webgl.timer.resolve();if(e)for(let t of e)(0,tO.y)([t])}ev.Au&&console.log(`image pass byte count ${(this.getByteCount()/1024/1024).toFixed(3)} MiB`)}async getImageData(e,t,r,a){var n,i;this.setSize(t,r),await this.render(e),this.colorTarget.bind();let o=null!==(n=null==a?void 0:a.width)&&void 0!==n?n:t,s=null!==(i=null==a?void 0:a.height)&&void 0!==i?i:r,l=new Uint8Array(o*s*4);a?this.webgl.readPixels(a.x,r-a.y-a.height,o,s,l):this.webgl.readPixels(0,0,o,s,l);let c=u.create(l,o,s);return u.flipY(c),u.divideByAlpha(c),new ImageData(new Uint8ClampedArray(l),o,s)}}var tD=r(84785),tE=r(53596),tM=r(93898),tP=r(99289),tk=r(30131),tB=r(34526);let t_={...U.K.Params,alpha:{...U.K.Params.alpha,defaultValue:1},ignoreLight:{...U.K.Params.ignoreLight,defaultValue:!0},colorX:C.e.Color(j.t.red,{isEssential:!0}),colorY:C.e.Color(j.t.green,{isEssential:!0}),colorZ:C.e.Color(j.t.blue,{isEssential:!0}),scale:C.e.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0})},tR={handle:C.e.MappedStatic("off",{on:C.e.Group(t_),off:C.e.Group({})},{cycle:!0,description:"Show handle tool"})};class tF{getBoundingSphere(e,t){return this.renderObject&&(V.CP.copy(e,this.renderObject.values.invariantBoundingSphere.ref.value),y.yb.fromArray(this._transform,this.renderObject.values.aTransform.ref.value,16*t),V.CP.transform(e,e,this._transform)),e}setProps(e){this.props=(0,tE.U)(this.props,t=>{if(void 0!==e.handle&&(t.handle.name=e.handle.name,"on"===e.handle.name)){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let r={...e.handle.params,scale:e.handle.params.scale*this.webgl.pixelRatio,cellSize:0};this.renderObject=function(e){let t=function(e,t){let r=10*e.scale,a=function(e,t){let r=N.V.createState(512,256,t),a=.05*e,n=y.AO.scale((0,y.AO)(),y.AO.unitX,e),i=y.AO.scale((0,y.AO)(),y.AO.unitY,e),o=y.AO.scale((0,y.AO)(),y.AO.unitZ,e),s={radiusTop:a,radiusBottom:a,radialSegments:32};return r.currentGroup=tL.TranslateScreenXY,(0,G.H)(r,y.AO.origin,3*a,2),r.currentGroup=tL.TranslateObjectX,(0,G.H)(r,n,a,2),(0,tD.vA)(r,y.AO.origin,n,1,s),r.currentGroup=tL.TranslateObjectY,(0,G.H)(r,i,a,2),(0,tD.vA)(r,y.AO.origin,i,1,s),r.currentGroup=tL.TranslateObjectZ,(0,G.H)(r,o,a,2),(0,tD.vA)(r,y.AO.origin,o,1,s),N.V.getMesh(r)}(r,void 0);return a.setBoundingSphere(V.CP.create(y.AO.create(r/2,r/2,r/2),r+r/4)),tM.b.create("handle",{},a,t=>
776{switch(t){case tL.TranslateObjectX:return e.colorX;case tL.TranslateObjectY:return e.colorY;case tL.TranslateObjectZ:return e.colorZ;default:return j.t.grey}},()=>1,()=>"")}(e);return tM.b.createRenderObject(t,e)}(r),this.scene.add(this.renderObject),this.scene.commit(),t.handle.params={...e.handle.params}}})}get isEnabled(){return"on"===this.props.handle.name}update(e,t,r){this.renderObject&&(this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),y.yb.setTranslation(this.renderObject.values.aTransform.ref.value,t),y.yb.fromMat3(this.renderObject.values.aTransform.ref.value,r),q.IO.update(this.renderObject.values.aTransform,this.renderObject.values.aTransform.ref.value),this.scene.update([this.renderObject],!0))}getLoci(e){var t;let{objectId:r,groupId:a,instanceId:n}=e;return this.renderObject&&r===this.renderObject.id?(t=this,(0,F.SL)("handle",t,[{groupId:a,instanceId:n}],e=>t.getBoundingSphere(e,n),()=>`Handle Helper | Group Id ${a} | Instance Id ${n}`)):F.Rh}mark(e,t){return!!(tP.E5.is(tP.E5.Highlighting,t)&&((0,F.h)(e)||tz(e)&&e.data===this))&&tk.u.mark(this.renderObject,e,t,this.eachGroup)}constructor(e,t={}){this.webgl=e,this.props={handle:{name:"off",params:{}}},this.pixelRatio=1,this._transform=(0,y.yb)(),this.eachGroup=(e,t)=>{if(!this.renderObject||!tz(e))return!1;let r=!1,a=this.renderObject.values.uGroupCount.ref.value,{elements:n}=e;for(let{groupId:e,instanceId:i}of n){let n=i*a+e;t(tB.Xp.ofSingleton(n))&&(r=!0)}return r},this.scene=R.x.create(e,"blended"),this.setProps(t)}}let tL={TranslateScreenXY:1,TranslateObjectX:3,TranslateObjectY:4,TranslateObjectZ:5};function tz(e){return"data-loci"===e.kind&&"handle"===e.tag}var tN=r(2462);let tG={...U.K.Params,enabled:C.e.Select("off",C.e.arrayToOptions(["on","off"]),{isEssential:!0}),ignoreLight:{...U.K.Params.ignoreLight,defaultValue:!0},color:C.e.Color(j.t.grey,{isEssential:!0}),hitColor:C.e.Color(j.t.pink,{isEssential:!0})};class tU{setProps(e){Object.assign(this.props,e),this.isEnabled&&this.update(this.pointers,this.points,this.hit)}ensureEnabled(){"on"!==this.props.enabled&&(this.props.enabled="on")}get isEnabled(){return"on"===this.props.enabled}setCamera(e){L.V.copySnapshot(this.camera.state,e.state),T.l_.copy(this.camera.viewport,e.viewport),y.yb.copy(this.camera.view,e.view),y.yb.copy(this.camera.projection,e.projection),y.yb.copy(this.camera.projectionView,e.projectionView),y.yb.copy(this.camera.headRotation,e.headRotation),L.V.copyViewOffset(this.camera.viewOffset,e.viewOffset),this.camera.far=e.far,this.camera.near=e.near,this.camera.fogFar=e.fogFar,this.camera.fogNear=e.fogNear,this.camera.forceFull=e.forceFull,this.camera.scale=1,this.modelScale=e.scale}update(e,t,r){if(this.pointers=e,this.points=t,this.hit=r,"on"!==this.props.enabled){this.renderObject&&(this.renderObject.state.visible=!1);return}this.shape=tH(this.getData(),this.props,this.shape),q.IO.updateIfChanged(this.renderObject.values.drawCount,X.Z.getDrawCount(this.shape.geometry)),q.IO.updateIfChanged(this.renderObject.values.uVertexCount,X.Z.getVertexCount(this.shape.geometry)),q.IO.updateIfChanged(this.renderObject.values.uGroupCount,2),U.K.Utils.updateBoundingSphere(this.renderObject.values,this.shape.geometry),U.K.Utils.updateValues(this.renderObject.values,this.props),U.K.Utils.updateRenderableState(this.renderObject.state,this.props),this.renderObject.state.visible=!0,this.scene.update(void 0,!1),this.scene.commit()}getData(){return{pointers:this.pointers,points:this.points,hit:this.hit,modelScale:this.modelScale,camera:this.camera,pixels:12}}constructor(e,t={}){var r,a;this.pixelScale=1,this.modelScale=1,this.pointers=[],this.points=[],this.hit=void 0,this.scene=R.x.create(e,"blended"),this.props={...C.e.getDefaultValues(tG),...t},this.camera=new L.V,this.shape=tH(this.getData(),this.props,this.shape),this.renderObject=(r=this.shape,a=this.props,tN.b.createRenderObject(r,{...C.e.getDefaultValues(U.K.Params),...a,ignoreLight:a.ignoreLight,cellSize:0})),this.scene.add(this.renderObject)}}(i=c||(c={}))[i.None=0]="None",i[i.Hit=1]="Hit";let tV=(0,y.AO)();function tj(e,t,r,a){let n=y.AO.scale(tV,r.state.position,a),i=y.AO.distance(e,n);return 2*Math.tan(r.state.fov/2)*i/r.viewport.height*t}function tH(e,t,r){let a=function(e,t){let r=N.V.createState(512,256,t),a={radiusTop:5e-4,radiusBottom:5e-4,radialSegments:32},{modelScale:n,camera:i,pixels:o}=e;for(let t of(r.currentGroup=c.None,e.pointers)){(0,tD.mB)(r,t,.2,a);let e=tj(t.origin,o,i,n);(0,G.H)(r,t.origin,e,1)}for(let t of e.points){let e=tj(t,o,i,n);(0,G.H)(r,t,e,1)}if(e.hit){r.currentGroup=c.Hit;let t=tj(e.hit,o,i,n);(0,G.H)(r,e.hit,t,1)}return N.V.getMesh(r)}(e,null==r?void 0:r.geometry);return tN.b.create("pointer-mesh",e,a,e=>e===c.Hit?t.hitColor:t.color,()=>1,()=>"",void 0,2)}let tq={debug:C.e.Group(W),camera:C.e.Group({helper:C.e.Group(te.n1)}),handle:C.e.Group(tR),pointer:C.e.Group(tG)},tX=C.e.getDefaultValues(tq);class tW{constructor(e,t,r={}){let a={...tX,...r};this.debug=new K(e,t,a.debug),this.camera=new te.Rk(e,a.camera.helper),this.handle=new tF(e,a.handle),this.pointer=new tU(e,a.pointer)}}class tK{constructor(e,t,r={}){this.webgl=e;let a=this.webgl.getDrawingBufferSize();this.draw=new e9(e,t,a.width,a.height,r.transparency||"blended"),this.pick=new ew(e,a.width,a.height,r.pickScale||.25),this.multiSample=ne
776w eS(e,this.draw),this.illumination=new ty(e,this.draw)}getByteCount(){return this.draw.getByteCount()+this.pick.getByteCount()+this.multiSample.getByteCount()+this.illumination.getByteCount()}setPickScale(e){this.pick.setPickScale(e)}setTransparency(e){this.draw.setTransparency(e)}updateSize(){let e=this.webgl.getDrawingBufferSize(),t=Math.max(e.width,2),r=Math.max(e.height,2);this.draw.setSize(t,r),this.pick.setSize(t,r),this.multiSample.syncSize(),this.illumination.setSize(t,r)}}var tQ=r(67546),tZ=r(68303);let tY=` 777precision highp float; 778precision highp sampler2D; 779 780uniform sampler2D tPreviousLevel; 781uniform vec2 uInvSize; 782uniform vec2 uOffset; 783 784void main(void) { 785 vec2 position = gl_FragCoord.xy * uInvSize + uOffset; 786 787 float x = texture(tPreviousLevel, position).r; 788 float y = textureOffset(tPreviousLevel, position, ivec2(-1, 0)).r; 789 float z = textureOffset(tPreviousLevel, position, ivec2(-1, -1)).r; 790 float w = textureOffset(tPreviousLevel, position, ivec2(0, -1)).r; 791 792 gl_FragColor = vec4(max(max(x, y), max(z, w))); 793} 794`,t$={...ec.iz,tPreviousLevel:(0,ed.U2)("texture","alpha","float","nearest"),uInvSize:(0,ed.wt)("v2"),uOffset:(0,ed.wt)("v2")},tJ=(0,ep.Lq)("hi-z",eh.C,tY);var t0=r(49309);let t1=eP.A.transformMat4,t2=y.T8.set,t3=t0.Fz;function t4(e,t,r,a){return -1===a[11]?t*r/((r-t)*e-r):e*(t-r)-t}let t5={enabled:C.e.Boolean(!1,{description:"Hierarchical Z-buffer occlusion culling. Only available for WebGL2."}),maxFrameLag:C.e.Numeric(10,{min:1,max:30,step:1},{description:"Maximum number of frames to wait for Z-buffer data."}),minLevel:C.e.Numeric(3,{min:1,max:10,step:1})};class t6{getByteCount(){return this.supported?this.tex.getByteCount()+this.buf.getByteCount()+this.levelData.reduce((e,t)=>e+t.texture.getByteCount(),0):0}clear(){if(!this.supported)return;let{gl:e}=this.webgl;(0,eI.D0)(e)&&(null!==this.sync&&(e.deleteSync(this.sync),this.sync=null),this.frameLag=0,this.ready=!1,this.debug&&(this.debug.rect.style.display="none",this.debug.container.style.display="none"))}render(e){if(!this.supported||!this.props.enabled)return;let{gl:t,state:r}=this.webgl;if(!(0,eI.D0)(t)||null!==this.sync)return;this.nextNear=e.near,this.nextFar=e.far,y.yb.copy(this.nextView,e.view),y.yb.copy(this.nextProjection,e.projection),ev.kM&&this.webgl.timer.mark("hi-Z"),r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0);let a=this.renderable.values,n=Math.pow(2,Math.ceil(Math.log(Math.max(t.drawingBufferWidth,t.drawingBufferHeight))/Math.log(2))-1);for(let e=0,i=this.levelData.length;e<i;++e){let i=this.levelData[e];i.framebuffer.bind(),e>0?(tZ.IO.update(a.uInvSize,i.invSize),tZ.IO.update(a.uOffset,tr.S.set(a.uOffset.ref.value,0,0)),tZ.IO.update(a.tPreviousLevel,this.levelData[e-1].texture)):(tZ.IO.update(a.uInvSize,tr.S.set(a.uInvSize.ref.value,1/n,1/n)),tZ.IO.update(a.uOffset,tr.S.set(a.uOffset.ref.value,this.viewport.x/t.drawingBufferWidth,this.viewport.y/t.drawingBufferHeight)),tZ.IO.update(a.tPreviousLevel,this.drawPass.depthTextureOpaque)),r.currentRenderItemId=-1,r.viewport(0,0,i.size[0],i.size[1]),t.clear(t.COLOR_BUFFER_BIT),this.renderable.update(),this.renderable.render(),e>=this.props.minLevel&&(this.tex.bind(0),t.copyTexSubImage2D(t.TEXTURE_2D,0,i.offset,0,0,0,i.size[0],i.size[1]),this.tex.unbind(0))}this.tex.attachFramebuffer(this.fb,0);let i=this.tex.getWidth(),o=this.tex.getHeight();this.buf.read(0,0,i,o),this.sync=t.fenceSync(t.SYNC_GPU_COMMANDS_COMPLETE,0),t.flush(),ev.kM&&this.webgl.timer.markEnd("hi-Z")}tick(){if(!this.supported||!this.props.enabled||null===this.sync)return;let{gl:e}=this.webgl;if(!(0,eI.D0)(e))return;let t=e.clientWaitSync(this.sync,0,0);t===e.WAIT_FAILED||this.frameLag>=this.props.maxFrameLag?(e.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!1):t===e.TIMEOUT_EXPIRED?this.frameLag+=1:(this.buf.getSubData(this.buffer),e.deleteSync(this.sync),this.sync=null,this.frameLag=0,this.ready=!0,this.near=this.nextNear,this.far=this.nextFar,y.yb.copy(this.view,this.nextView),y.yb.copy(this.projection,this.nextProjection))}transform(e){let{view:t,vp:r}=this;return t1(r,e.center,t),{vp:r,r:1.2*e.radius+1.52}}project(e,t){let{projection:r,aabb:a,viewport:n}=this;-1===r[11]?function(e,t,r,a){let n=t[0]*r,i=t[1]*r,o=t[2]*r,s=t[2]*t[2]-r*r,l=Math.sqrt(t[0]*t[0]+s),u=(l*t[0]-o)/(l*t[2]+n)*a[0],c=(l*t[0]+o)/(l*t[2]-n)*a[
7940],d=Math.sqrt(t[1]*t[1]+s);return t2(e,-.5*c+.5,(d*t[1]-o)/(d*t[2]+i)*a[5]*.5+.5,-.5*u+.5,(d*t[1]+o)/(d*t[2]-i)*a[5]*.5+.5)}(a,e,t,r):function(e,t,r,a){let n=a[0],i=a[5],o=(t[0]+r)*n;return t2(e,(t[0]-r)*n*.5+.5,-((t[1]+r)*i*.5)+.5,.5*o+.5,-((t[1]-r)*i*.5)+.5)}(a,e,t,r);let i=a[2]-a[0],o=a[3]-a[1],s=Math.max(i*n.width,o*n.height),l=Math.ceil(t3(s/2));return{aabb:a,w:i,h:o,pr:s,lod:l}}setViewport(e,t,r,a){if(!this.supported)return;r=Math.max(r,2),a=Math.max(a,2),T.l_.set(this.viewport,e,t,r,a);let n=Math.ceil(Math.log(Math.max(r,a))/Math.log(2));if(n===this.levelData.length)return;let{minLevel:i}=this.props;for(let e of(this.buffer=new Float32Array(Math.pow(2,n-i)*Math.pow(2,n-1-i)),this.tex.define(Math.pow(2,n-i),Math.pow(2,n-1-i)),this.levelData))e.framebuffer.destroy(),e.texture.destroy();this.levelData.length=0;for(let e=0;e<n;++e){let t=this.webgl.resources.framebuffer(),r=Math.pow(2,n-e-1),a=tr.S.create(r,r),i=tr.S.create(1/r,1/r),o=this.webgl.resources.texture("image-float32","alpha","float","nearest");o.define(r,r),o.attachFramebuffer(t,0),this.levelData.push({texture:o,framebuffer:t,size:a,invSize:i,offset:0})}let o=0;for(let e=0;e<n;++e){let t=this.levelData[e];e>=i&&(this.levelData[e].offset=o,o+=t.size[0])}this.clear()}setProps(e){if(this.supported){if(this.props.minLevel!==e.minLevel){Object.assign(this.props,e);let{x:t,y:r,width:a,height:n}=this.viewport;this.setViewport(t,r,a,n)}else Object.assign(this.props,e),this.props.enabled||this.clear()}}initDebug(e){if(!e.parentElement)return;let t=document.createElement("div");Object.assign(t.style,{display:"block",position:"absolute",pointerEvents:"none"}),e.parentElement.appendChild(t);let r=document.createElement("canvas"),a=r.getContext("2d");if(!a)throw Error("Could not create canvas 2d context");Object.assign(r.style,{width:"100%",height:"100%",imageRendering:"pixelated",position:"relative",pointerEvents:"none"}),t.appendChild(r);let n=document.createElement("div");Object.assign(n.style,{display:"none",position:"absolute",pointerEvents:"none"}),e.parentElement.appendChild(n),this.debug={container:t,canvas:r,ctx:a,rect:n}}canDebug(e){return this.supported&&this.props.enabled&&this.ready&&!!this.debug}showRect(e,t){if(!this.canDebug(this.debug))return;let{gl:{drawingBufferHeight:r},pixelRatio:a}=this.webgl,{viewport:{x:n,y:i,width:o,height:s}}=this,l=(e[0]*o+n)/a,u=(e[1]*s-i)/a,c=(e[2]*o+n)/a,d=(e[3]*s-i)/a;Object.assign(this.debug.rect.style,{border:t?"solid red":"solid green",display:"block",left:`${l}px`,top:`${u+(r-s)/a}px`,width:`${c-l}px`,height:`${d-u}px`})}showBuffer(e){if(!this.canDebug(this.debug))return;if(e>=this.levelData.length||e<this.props.minLevel){this.debug.container.style.display="none";return}let{offset:t,size:[r,a]}=this.levelData[e],n=this.tex.getWidth(),i=new Uint8ClampedArray(r*a*4);i.fill(255);for(let e=0;e<a;++e)for(let o=0;o<r;++o){let s=(a-e-1)*r+o,l=255*this.buffer[e*n+o+t];i[4*s+0]=l,i[4*s+3]=255-l}let o=new ImageData(i,r,a);this.debug.canvas.width=o.width,this.debug.canvas.height=o.height,this.debug.ctx.putImageData(o,0,0);let{viewport:{x:s,y:l,width:u,height:c},webgl:{pixelRatio:d}}=this;Object.assign(this.debug.container.style,{display:"block",bottom:`${l/d}px`,left:`${s/d}px`,width:`${u/d}px`,height:`${c/d}px`})}debugOcclusion(e){if(!this.canDebug(this.debug))return;if(!e){this.debug.rect.style.display="none",this.debug.container.style.display="none";return}let t=this.isOccluded(e),{vp:r,r:a}=this.transform(e),{aabb:n,lod:i}=this.project(r,a);this.showRect(n,t),this.showBuffer(i)}reset(){this.sync=null,this.ready=!1,this.frameLag=0,this.levelData.length=0;let{x:e,y:t,width:r,height:a}=this.viewport;this.setViewport(e,t,r,a)}dispose(){if(this.supported)for(let e of(this.clear(),this.fb.destroy(),this.tex.destroy(),this.buf.destroy(),this.renderable.dispose(),this.levelData))e.framebuffer.destroy(),e.texture.destroy()}constructor(e,t,r,a){this.webgl=e,this.drawPass=t,this.viewport=(0,T.l_)(),this.near=0,this.far=0,this.view=(0,y.yb)(),this.projection=(0,y.yb)(),this.nextNear=0,this.nextFar=0,this.nextView=(0,y.yb)(),this.nextProjection=(0,y.yb)(),this.aabb=(0,y.T8)(),this.vp=(0,eP.A)(),this.levelData=[],this.sync=null,this.buffer=new Float32Array(0),this.frameLag=0,this.ready=!1,this.isOccluded=e=>{if(!this.supported||!this.props.enabled||!this.ready)return!1;let{vp:t,r}=this.transform(e),{near:a,far:n,projection:i}=this,o=t[2]+r;if(-o<a)return!1;let{aabb:s,w:l,h:u,lod:c}=this.project(t,r);
794if(c>=this.levelData.length||c<this.props.minLevel)return!1;let{offset:d,size:p}=this.levelData[c],f=s[0]+l/2,m=s[1]+u/2,h=p[0],g=Math.floor(f*h),b=Math.ceil(m*h),y=this.tex.getWidth();if(g+1>=h||b+1>=h)return!1;let x=(h-b-1)*y+g+d;if(o>t4(this.buffer[x],a,n,i)||o>t4(this.buffer[x+1],a,n,i))return!1;let S=(h-b+1-1)*y+g+d;return!(o>t4(this.buffer[S],a,n,i)||o>t4(this.buffer[S+1],a,n,i))},this.props={...C.e.getDefaultValues(t5),...a};let{gl:n,extensions:i}=e;if(!(0,eI.D0)(n)||!i.colorBufferFloat){ev.Au&&console.log('Missing webgl2 and/or colorBufferFloat support required for "Hi-Z"'),this.supported=!1;return}this.fb=e.resources.framebuffer(),this.tex=e.resources.texture("image-float32","alpha","float","nearest"),this.tex.attachFramebuffer(this.fb,0);let o=n.getParameter(n.IMPLEMENTATION_COLOR_READ_FORMAT),s=n.getParameter(n.IMPLEMENTATION_COLOR_READ_TYPE);if(o!==n.RED||s!==n.FLOAT){ev.Au&&console.log('Missing red/float reading support required for "Hi-Z"'),this.supported=!1;return}this.supported=!0,this.buf=e.resources.pixelPack("alpha","float"),this.renderable=function(e,t){let r={...ec.GE,tPreviousLevel:tZ.IO.create(t),uInvSize:tZ.IO.create((0,tr.S)()),uOffset:tZ.IO.create((0,tr.S)())},a={...t$},n=(0,ef.s8)(e,"triangles",tJ,a,r);return(0,em.T)(n,r)}(e,this.drawPass.depthTextureOpaque),ev.Au&&r&&this.initDebug(r)}}var t8=r(34052),t7=r(38964),t9=r(2941);let re=x.b4,rt=I.K.Trigger,rr=I.K.TriggerKey;function ra(e,t){let r=eP.A.fromObj(e.transform.position),a=ti.y.fromArray((0,ti.y)(),e.transform.matrix,0),n=ti.y.getDecomposition(a),i=ti.y.fromQuat((0,ti.y)(),n.quaternion),o=eP.A.transformMat4((0,eP.A)(),eP.A.negUnitZ,i),s=ea.k.create(r,o);return t&&ea.k.transform(s,s,ti.y.invert((0,ti.y)(),t)),s}let rn={bindings:{exit:(0,I.K)([rr("GamepadB")]),togglePassthrough:(0,I.K)([rr("GamepadA")]),gestureScale:(0,I.K)([rt(re.Flag.Trigger)])}},ri={minTargetDistance:C.e.Numeric(.4,{min:.001,max:1,step:.001}),disablePostprocessing:C.e.Boolean(!0),resolutionScale:C.e.Numeric(1,{min:.1,max:2,step:.1}),sceneRadiusInMeters:C.e.Numeric(.25,{min:.01,max:2,step:.01},{description:"The radius of the scene bounding sphere in meters, used to set the initial camera scale."})};class ro{get session(){return this.xrSession}setProps(e){Object.assign(this.props,e)}setAttribs(e){Object.assign(this.attribs,e)}intersect(e,t,r,a){let n=(0,eP.A)(),i=ra(a,t);if(t9.H.intersectRay3D(n,r,i)){let{height:t}=e.viewport,r=(0,T.zt)((0,to.T)(),n,e.viewport,e.projectionView);return{point:n,screen:tr.S.create(Math.floor(r[0]),t-Math.floor(r[1]))}}}setScaleFactor(e){this.scaleFactor=e}resetScale(){this.scaleFactor=1,this.prevScale=0}update(e){var t,r,a,n,i,o,s;let{xrSession:l,xrRefSpace:u,input:c,camera:d,stereoCamera:p,pointerHelper:f}=this;if(!e||!l||!u)return!1;d.scale=d.scale*this.scaleFactor,this.prevScale=d.scale;let m=eP.A.sub((0,eP.A)(),d.position,d.target);eP.A.scaleAndAdd(d.position,d.position,m,1-this.scaleFactor),this.scaleFactor=1;let h=function(e){let t=ti.y.getDecomposition(e);return new XRRigidTransform(eP.A.toObj(t.position),t7.D.toObj(t.quaternion))}(d.view),g=u.getOffsetReferenceSpace(h),b=e.getViewerPose(g);if(!b)return!1;let y=e.getViewerPose(u);if(y){let e=t7.D.fromObj(y.transform.orientation);ti.y.fromQuat(d.headRotation,e)}let{depthFar:S,depthNear:T,baseLayer:C}=l.renderState;if(!C)return!1;(S!==d.far||T!==d.near)&&l.updateRenderState({depthNear:d.near,depthFar:d.far}),p.update({pose:b,layer:C});let O=p.left,I=eP.A.scale((0,eP.A)(),O.state.target,O.scale),A=ti.y.getTranslation((0,eP.A)(),ti.y.invert((0,ti.y)(),O.view)),w=eP.A.sub((0,eP.A)(),A,I),D=t9.H.fromNormalAndCoplanarPoint((0,t9.H)(),w,I),E=[],M=[],P=[],k=[];if(l.inputSources)for(let c of l.inputSources){if("screen"===c.targetRayMode){if(c.gamepad){let{axes:e}=c.gamepad,{width:t,height:r}=O.viewport,a=(e[0]+1)/2*t,n=(e[1]+1)/2*r,i=O.getRay((0,ea.k)(),a,r-n);k.push({x:a,y:n,ray:i})}continue}if("tracked-pointer"!==c.targetRayMode)continue;let{handedness:l,targetRaySpace:p,gamepad:f}=c;if(!l)continue;let m=e.getPose(p,u);if(!m)continue;let h=ra(m,d.view);E.push(h);let g=V.CP.scaleNX((0,V.CP)(),this.scene.boundingSphereVisible,O.scale),b=(0,eP.A)();ea.k.intersectSphere3D(b,h,g)&&M.push(b);let y=x.b4.create(x.b4.Flag.None);(null===(t=null==f?void 0:f.buttons[0])||void 0===t?void 0:t.pressed)&&(y|=x.b4.Flag.Primary),(null===(r=null==f?void 0:f.buttons[1])||void 0===r?void 0:r.pressed)&&(y|=x.b4.Flag.Secondary),(null===(a=null==f?void 0:f.buttons[3])||void 0===a?void 0:a.pressed)&&(y|=x.b4.Flag.Auxilary),(null===(n=null==f?void 0:f.buttons[4])||void 0===n?void 0:n.pressed)&&(y|=x.b4.Flag.Forth),(null===(i=null==f?void 0:f.buttons[5])||void 0===i?void 0:i.pressed)&&(y|=x.b4.Flag.Five);let S="left"===l?this.prevInput.left:this.prevInput.right,T=this.intersect(O,d.view,D,m),C=S?this.intersect(O,d.view,D,S.targetRayPose):void 0,[I,A]=null!==(o=null==T?void 0:T.screen)&&void 0!==o?o:[0,0],[w,B]=null!==(s=null==C?void 0:C.screen)&&void 0!==s?s:[I,A],_=tr.S.set((0,tr.S)(),I-w,A-B);tr.S.setMagnitude(_,_,Math.min(100,tr.S.magnitude(_)));let[R,F]=tr.S.round(_,_);P.push({handedness:l,buttons:y,x:I,y:A,dx:R,dy:F,ray:h,axes:null==f?void 0:f.axes}),"left"===l?this.prevInput.left={targetRayPose:m}:this.prevInput.right={targetRayPose:m}}else this.prevInput.left=void 0,this.prevInput.right=void 0;return c.updateTrackedPointers(P),c.updateScreenTouches(k),f.ensureEnabled(),f.update(E,M,this.hit),!0}async setSession(e){if(this.xrSession!==e){if(await this.webgl.xr.set(e,{resolutionScale:this.props.resolutionScale}),this.xrSession=this.webgl.xr.session,this.prevInput={},this.hit=void 0,this.xrSession){this.xrRefSpace=await this.xrSession.requestReferenceSpace("local"),this.pointerHelper.setProps({enabled:"on"});let e=this.prevScale;if(0===e){let{radius:t}=this.scene.boundingSphereVisible;e=t?1/t*this.props.sceneRadiusInMeters:.01}this.camera.forceFull=!0,this.camera.scale=e,this.camera.minTargetDistance=this.props.minTargetDistance,this.prevScale=e}else this.xrRefSpace=void 0,ti.y.setZero(this.camera.headRotation),this.pointerHelper.setProps({enabled:"off"}),this.camera.forceFull=!1,this.camera.scale=1,this.camera.minTargetDistance=0}}async end(){await this.webgl.xr.end()}async request(){if(!navigator.xr)return;let e=await navigator.xr.isSessionSupported("immersive-ar")?await navigator.xr.requestSession("immersive-ar"):await navigator.xr.requestSession("immersive-vr");await this.setSession(e)}dispose(){var e;this.hoverSub.unsubscribe(),this.keyUpSub.unsubscribe(),this.gestureSub.unsubscribe(),this.sessionChangedSub.unsubscribe(),this.togglePassthrough.complete(),this.sessionChanged.complete(),this.isSupported.complete(),null===(e=navigator.xr)||void 0===e||e.removeEventListener("devicechange",this.checkSupported)}constructor(e,t,r,a,n,i,o,s={},l={}){var u;this.webgl=e,this.input=t,this.scene=r,this.camera=a,this.stereoCamera=n,this.pointerHelper=i,this.interactionHelper=o,this.togglePassthrough=new f.x,this.sessionChanged=new f.x,this.isSupported=new m.X(!1),this.xrSession=void 0,this.xrRefSpace=void 0,this.scaleFactor=1,this.prevScale=0,this.prevInput={},this.hit=void 0,this.checkSupported=async()=>
794{if(!navigator.xr){this.isSupported.next(!1);return}try{let[e,t]=await Promise.all([navigator.xr.isSessionSupported("immersive-ar"),navigator.xr.isSessionSupported("immersive-vr")]);this.isSupported.next(e||t)}catch(e){ev.Au&&console.warn(e),this.isSupported.next(!1)}},this.props={...C.e.getDefaultValues(ri),...s},this.attribs={...rn,...l},this.hoverSub=this.interactionHelper.events.hover.subscribe(({position:e})=>{this.hit=e}),this.sessionChangedSub=e.xr.changed.subscribe(async()=>{await this.setSession(e.xr.session),this.sessionChanged.next()}),this.checkSupported(),null===(u=navigator.xr)||void 0===u||u.addEventListener("devicechange",this.checkSupported),this.keyUpSub=t.keyUp.subscribe(({code:e,modifiers:t,key:r})=>{let a=this.attribs.bindings;I.K.matchKey(a.exit,e,t,r)&&this.end(),I.K.matchKey(a.togglePassthrough,e,t,r)&&this.togglePassthrough.next()}),this.gestureSub=t.gesture.subscribe(({scale:e,button:t,modifiers:r})=>{let a=this.attribs.bindings;I.K.match(a.gestureScale,t,r)&&this.setScaleFactor(e)})}}var rs=r(30441);class rl{setPickPadding(e){this.pickPadding!==e&&(this.pickPadding=e,this.update())}update(){let e=2*this.pickPadding+1;T.l_.set(this.viewport,0,0,e,e),this.buffers.setViewport(0,0,e,e),this.spiral=(0,O.v$)(this.pickPadding),this.size=e,this.pickPass.setSize(e,e)}render(e){ev.kM&&this.webgl.timer.mark("RayHelper.render",{captureStats:!0});let{renderer:t,scene:r,helper:a}=this;t.setTransparentBackground(!1),t.setDrawingBufferSize(this.size,this.size),t.setPixelRatio(1),t.setViewport(0,0,this.size,this.size),this.pickPass.render(t,e,r,a),ev.kM&&this.webgl.timer.markEnd("RayHelper.render")}identifyInternal(e,t){if(this.webgl.isContextLost)return;let{viewport:r}=this,a=this.buffers.getPickingId(e,t);if(void 0===a)return;let n=this.buffers.getDepth(e,t),i=y.AO.create(e,t,n);return(0,T.$j)(i,i,r,this.camera.inverseProjectionView),{id:a,position:i}}prepare(e,t){this.camera.far=t.far,this.camera.near=t.near,this.camera.fogFar=t.fogFar,this.camera.fogNear=t.fogNear,this.camera.forceFull=t.forceFull,this.camera.scale=t.scale,T.l_.copy(this.camera.viewport,this.viewport),L.V.copySnapshot(this.camera.state,{...t.state,mode:"orthographic"}),function(e,t,r){let{near:a,far:n,viewport:i}=e,o=2*Math.tan((0,O.Id)(.1)/2)*y.AO.distance(e.position,e.target)*e.scale,s=i.height/o,l=-i.width/2,u=i.width/2,c=i.height/2,d=-i.height/2,p=(u-l)/(2*s),f=(c-d)/(2*s),m=(u+l)/2,h=(c+d)/2;y.yb.ortho(e.projection,m-p,m+p,h+f,h-f,a,n);let g=y.AO.normalize((0,y.AO)(),t.direction),b=y.D6.fromUnitVec3((0,y.D6)(),g,y.AO.negUnitZ);y.D6.invert(b,b);let x=y.AO.clone(t.origin),S=y.AO.add((0,y.AO)(),x,g);y.yb.lookAt(e.view,x,S,r)}(this.camera,e,t.up),y.yb.mul(this.camera.projectionView,this.camera.projection,this.camera.view),y.yb.tryInvert(this.camera.inverseProjectionView,this.camera.projectionView),y.yb.copy(this.camera.viewEye,t.view)}getPickData(){let e=this.pickPadding;for(let t of this.spiral){let r=this.identifyInternal(e+t[0],e+t[1]);if(r)return r}}intersectsScene(e,t){return rs.C.scaleNX(this.sphere,this.scene.boundingSphereVisible,t),ea.k.isInsideSphere3D(e,this.sphere)||ea.k.isIntersectingSphere3D(e,this.sphere)}identify(e,t){if(this.intersectsScene(e,t.scale))return this.prepare(e,t),ev.kM&&this.webgl.timer.mark("RayHelper.identify"),this.render(this.camera),this.buffers.read(),ev.kM&&this.webgl.timer.markEnd("RayHelper.identify"),this.getPickData()}asyncIdentify(e,t){if(this.intersectsScene(e,t.scale))return this.prepare(e,t),ev.kM&&this.webgl.timer.mark("RayHelper.asyncIdentify"),this.render(this.camera),this.buffers.asyncRead(),ev.kM&&this.webgl.timer.markEnd("RayHelper.asyncIdentify"),{tryGet:()=>{let e=this.buffers.check();return e===l.Resolved?this.getPickData():e===l.Pending?"pending":void 0}}}reset(){this.buffers.reset(),this.pickPass.reset()}dispose(){this.buffers.dispose(),this.pickPass.dispose()}constructor(e,t,r,a,n){this.webgl=e,this.renderer=t,this.scene=r,this.helper=a,this.viewport=(0,T.l_)(),this.sphere=(0,rs.C)();let i=2*n.pickPadding+1;this.camera=new L.V,this.pickPass=new ew(e,i,i,1),this.buffers=new eM(this.webgl,this.pickPass,n.maxAsyncReadLag),this.pickPadding=n.pickPadding,this.update(),eE(e)||(this.asyncIdentify=(e,t)=>({tryGet:()=>this.identify(e,t)}))}}var ru=r(61445);let rc={intensity:C.e.Numeric(15,{min:1,max:100,step:1})},rd={camera:C.e.Group({mode:C.e.Select("perspective",C.e.arrayToOptions(["perspective","orthographic"]),{label:"Camera"}),helper:C.e.Group(te.n1,{isFlat:!0}),stereo:C.e.MappedStatic("off",{on:C.e.Group(ek),off:C.e.Group({})},{cycle:!0,hideIf:e=>(null==e?void 0:e.mode)!=="perspective"}),fov:C.e.Numeric(45,{min:10,max:130,step:1},{label:"Field of View"}),manualReset:C.e.Boolean(!1,{isHidden:!0})},{pivot:"mode"}),cameraFog:C.e.MappedStatic("on",{on:C.e.Group(rc),off:C.e.Group({})},{cycle:!0,description:"Show fog in the distance"}
794),cameraClipping:C.e.Group({radius:C.e.Numeric(100,{min:0,max:99,step:1},{label:"Clipping",description:"How much of the scene to show."}),far:C.e.Boolean(!0,{description:"Hide scene in the distance"}),minNear:C.e.Numeric(1,{min:.1,max:100,step:.1},{description:"Minimal allowed distance of near clipping plane from the camera. Note, may cause performance issues rendering impostors when set too small and cause issues with outline rendering when too close to 0."})},{pivot:"radius"}),viewport:C.e.MappedStatic("canvas",{canvas:C.e.Group({}),"static-frame":C.e.Group({x:C.e.Numeric(0),y:C.e.Numeric(0),width:C.e.Numeric(128),height:C.e.Numeric(128)}),"relative-frame":C.e.Group({x:C.e.Numeric(.33,{min:0,max:1,step:.01}),y:C.e.Numeric(.33,{min:0,max:1,step:.01}),width:C.e.Numeric(.5,{min:.01,max:1,step:.01}),height:C.e.Numeric(.5,{min:.01,max:1,step:.01})})}),cameraResetDurationMs:C.e.Numeric(250,{min:0,max:1e3,step:1},{description:"The time it takes to reset the camera."}),sceneRadiusFactor:C.e.Numeric(1,{min:1,max:10,step:.1}),transparentBackground:C.e.Boolean(!1),checkeredTransparentBackground:C.e.Boolean(!1),dpoitIterations:C.e.Numeric(2,{min:1,max:10,step:1}),pickPadding:C.e.Numeric(3,{min:0,max:10,step:1},{description:"Extra pixels to around target to check in case target is empty."}),userInteractionReleaseMs:C.e.Numeric(250,{min:0,max:1e3,step:1},{description:"The time before the user is not considered interacting anymore."}),multiSample:C.e.Group(ex),postprocessing:C.e.Group(eu.yM),marking:C.e.Group(e1),illumination:C.e.Group(tb),hiZ:C.e.Group(t5),renderer:C.e.Group(S.g4),trackball:C.e.Group(P),interaction:C.e.Group(es),debug:C.e.Group(W),handle:C.e.Group(tR),pointer:C.e.Group(tG),xr:C.e.Group(ri,{label:"XR"})},rp=C.e.getDefaultValues(rd),rf={trackball:k,xr:rn};(o=d||(d={})).DefaultAttribs={powerPreference:"high-performance",failIfMajorPerformanceCaveat:!1,antialias:!0,preserveDrawingBuffer:!0,preferWebGl1:!1,handleResize:()=>{}},o.Params={resolutionMode:C.e.Select("auto",C.e.arrayToOptions(["auto","scaled","native"])),pixelScale:C.e.Numeric(1,{min:.1,max:2,step:.05}),pickScale:C.e.Numeric(.25,{min:.1,max:1,step:.05}),transparency:C.e.Select("wboit",[["blended","Blended"],["wboit","Weighted, Blended"],["dpoit","Depth Peeling"]])},o.DefaultProps=C.e.getDefaultValues(o.Params),o.fromCanvas=function(e,t,r={},a={}){let n={...o.DefaultAttribs,...r},i={...o.DefaultProps,...a},{powerPreference:s,failIfMajorPerformanceCaveat:l,antialias:u,preserveDrawingBuffer:c,preferWebGl1:d}=n,p=(0,B.Qe)(e,{powerPreference:s,failIfMajorPerformanceCaveat:l,antialias:u,preserveDrawingBuffer:c,alpha:!0,depth:!0,premultipliedAlpha:!0,preferWebGl1:d});if(null===p)throw Error("Could not create a WebGL rendering context");let h=()=>{let e=i.pixelScale/("undefined"!=typeof window&&(null==window?void 0:window.devicePixelRatio)||1);return"auto"===i.resolutionMode?(0,t8.K1)()?e:i.pixelScale:"native"===i.resolutionMode?i.pixelScale:e},g=()=>{let e=h();C.setPixelScale(e),O.setPixelScale(e)},{pickScale:y,transparency:S}=i,T=h(),C=x.nZ.fromElement(e,{pixelScale:T,preventGestures:!0}),O=(0,B.kr)(p,{pixelScale:T}),I=new tK(O,t,{pickScale:y,transparency:S});if(ev.Au){let t=p.getExtension("WEBGL_lose_context");t&&e.addEventListener("mousedown",e=>{!O.isContextLost&&e.shiftKey&&e.ctrlKey&&e.altKey&&(ev.Au&&console.log("lose context"),t.loseContext(),setTimeout(()=>{O.isContextLost&&(ev.Au&&console.log("restore context"),t.restoreContext())},1e3))},!1)}let A=new f.x,w=e=>{O.setContextLost(),e.preventDefault(),ev.Au&&console.log("context lost"),A.next((0,b.z)())},D=()=>{O.isContextLost&&(O.handleContextRestored(()=>{I.draw.reset(),I.pick.reset(),I.illumination.reset()}),ev.Au&&console.log("context restored"))};e.addEventListener("webglcontextlost",w,!1),e.addEventListener("webglcontextrestored",D,!1);let E=new m.X(void 0);return{canvas:e,webgl:O,input:C,passes:I,attribs:n,get props(){return{...i}},contextLost:A,contextRestored:O.contextRestored,assetManager:t,changed:E,get pixelScale(){return h()},syncPixelScale:g,setProps:e=>{if(!e)return;let t=!1,r=!1;void 0!==e.resolutionMode&&e.resolutionMode!==i.resolutionMode&&(i.resolutionMode=e.resolutionMode,r=!0),void 0!==e.pixelScale&&e.pixelScale!==i.pixelScale&&(i.pixelScale=e.pixelScale,r=!0),r&&(g(),n.handleResize(),t=!0),void 0!==e.pickScale&&e.pickScale!==i.pickScale&&(i.pickScale=e.pickScale,I.setPickScale(e.pickScale),t=!0),void 0!==e.transparency&&e.transparency!==i.transparency&&(i.transparency=e.transparency,I.setTransparency(e.transparency),t=!0),t&&E.next(void 0)},dispose:t=>{C.dispose(),e.removeEventListener("webglcontextlost",w,!1),e.removeEventListener("webglcontextrestored",D,!1),O.destroy(t),A.complete(),E.complete()}}};let rm="undefined"!=typeof window?window.requestAnimationFrame:e=>setImmediate(()=>e(Date.now())),rh="undefined"!=typeof window?window.cancelAnimationFrame:e=>clearImmediate(e);
794function rg(e,t){t.transparentBackground&&t.checkeredTransparentBackground?Object.assign(e.style,{"background-image":"linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey), linear-gradient(45deg, lightgrey 25%, transparent 25%, transparent 75%, lightgrey 75%, lightgrey)","background-size":"60px 60px","background-position":"0 0, 30px 30px"}):Object.assign(e.style,{"background-image":"","background-size":"","background-position":""})}(p||(p={})).create=function(e,t={},r={}){var a,n;let i,o,l;let{webgl:u,input:c,passes:d,assetManager:p,canvas:x,contextLost:C}=e,I={...(0,tQ.I8)(rp),...(0,tQ.I8)(t)},A={...(0,tQ.I8)(rf),...(0,tQ.I8)(r)},w=new Map,D=new Map,E=new m.X(0),M=new f.x,P=(0,b.z)(),k=new m.X(0),B=new m.X(0),z=new m.X(0),{contextRestored:N}=u,G=0,U=0,j=128,H=128,X=!1,W=0;rg(x,I),e$();let K=R.x.create(u,d.draw.transparency,{dColorMarker:I.renderer.colorMarker,dLightCount:null===(a=I.renderer.light)||void 0===a?void 0:a.length});function Q(){return K.boundingSphere.radius*I.sceneRadiusFactor}let Z=new L.V({position:y.AO.create(0,0,100),mode:I.camera.mode,fog:"on"===I.cameraFog.name?I.cameraFog.params.intensity:0,clipFar:I.cameraClipping.far,minNear:I.cameraClipping.minNear,fov:(0,O.Id)(I.camera.fov)},{x:G,y:U,width:j,height:H}),Y=new e_(Z,I.camera.stereo.params),$=s.create(c,Z,K,I.trackball,A.trackball),J=new tW(u,K,I),et=new t6(u,d.draw,x,I.hiZ),er=S.Th.create(u,I.renderer);er.setOcclusionTest(et.isOccluded);let ea=new tI(u,K);ea.updateRequired(I);let en={pickPadding:I.pickPadding,maxAsyncReadLag:5},ei=new eG(u,er,K,J,d.pick,{x:G,y:U,width:j,height:H},en),eo=new rl(u,er,K,J,en),es=new el(eF,eL,eT,c,Z,$,I.interaction),eu=new eC(d.multiSample);d.draw.postprocessing.background.update(Z,I.postprocessing.background,e=>{e&&eE()});let ec=!1,ed=!1;function ep(){return{transparency:e.props.transparency,transparentBackground:I.transparentBackground,hiZ:et.props.enabled,postprocessing:I.postprocessing.enabled,axes:(0,tQ.I8)(J.camera.props.axes)}}let ef=ep();function em(){var t;I.postprocessing.enabled=!eh.props.disablePostprocessing,e.setProps({transparency:"blended"}),et.setProps({enabled:!1}),J.camera.setProps({axes:{name:"off",params:{}}}),(null===(t=eh.session)||void 0===t?void 0:t.environmentBlendMode)==="alpha-blend"&&(I.transparentBackground=eb)}let eh=new ro(u,c,K,Z,Y,J.pointer,es,I.xr,A.xr),eg={request:async()=>{try{await eh.request()}catch(e){console.error(e),eg.requestFailed.next(e)}},end:()=>eh.end(),isSupported:new m.X(!1),isPresenting:new m.X(!1),requestFailed:new f.x},eb=!1,ey=[eh.isSupported.subscribe(e=>eg.isSupported.next(e)),eh.togglePassthrough.subscribe(()=>{var e;(null===(e=eh.session)||void 0===e?void 0:e.environmentBlendMode)==="alpha-blend"&&(eb=!I.transparentBackground)}),eh.sessionChanged.subscribe(()=>{var t;ed=!0,eh.session?(Object.assign(ef,ep()),eb=(null===(t=eh.session)||void 0===t?void 0:t.environmentBlendMode)==="alpha-blend",em()):(I.postprocessing.enabled=ef.postprocessing,I.transparentBackground=ef.transparentBackground,e.setProps({transparency:ef.transparency}),et.setProps({enabled:ef.hiZ}),J.camera.setProps({axes:ef.axes})),eR(),eg.isPresenting.next(!!eh.session)})],ex=!0;function eT(e){let t=F.Rh,r=_.hX.Empty;if(e){let a=J.camera.getLoci(e);if(a!==F.Rh)return{loci:a,repr:r};t=J.handle.getLoci(e),w.forEach((a,n)=>{let i=n.getLoci(e);(0,F.jF)(i)||((0,F.jF)(t)||console.warn("found another loci, this should not happen"),t=i,r=n)})}return{loci:t,repr:r}}let eO=[],eI=!1,eA=!1,ew=!1;function eD(e){if(!eA&&!ew){if(!ea.finalizeRequired(null==e?void 0:e.isSynchronous)){X=!0;return}(function(e,t){if(u.isContextLost||u.xr.session&&!t)return!1;let r=!1;ed&&(eW(!1),ed=!1,r=!0);let a=u.getDrawingBufferSize();if(G>a.width||G+j<0||U>a.height||U+H<0)return!1;t&&(em(),I.transparentBackground=eb);let n=function(){let e=!1;for(let[t,r]of eO)e=function(e,t){let{repr:r,loci:a}=e,n=!1;return r?n=r.mark(a,t)||n:w.forEach((e,r)=>{n=r.mark(a,t)||n}),n=J.handle.mark(a,t)||n,n=J.camera.mark(a,t)||n}(t,r)||e;return eO=[],e&&(K.update(void 0,!0),J.handle.scene.update(void 0,!0),J.camera.scene.update(void 0,!0),ea.updateRequired(I),ea.finalizeRequired(!0),M.next()),e}()&&(er.props.colorMarker||I.marking.enabled),i=!1;$.update(W);let o=Z.update(),s=eh.update(t);if(!s&&t)return!1;let l=e||o||r||X||s;if(X=!1,d.illumination.supported&&I.illumination.enabled&&!t)(l||n)&&(er.setOcclusionTest(null),d.illumination.restart()),d.illumination.shouldRender(I.illumination)&&(!eZ&&K.count>0||0===d.illumination.iteration||0===I.userInteractionReleaseMs)&&(ev.kM&&u.timer.mark("Canvas3D.render",{captureStats:!0}),d.illumination.render({renderer:er,camera:Z,scene:K,helper:J},I,!0),ev.kM&&u.timer.markEnd("Canvas3D.render"),ei.dirty=ei.dirty||l,i=!0);else{let e=eu.update(n||l,I.multiSample)&&!t;if(l||e||n){er.setOcclusionTest(et.isOccluded);let e=Z;
794("on"===I.camera.stereo.name||s)&&(s||Y.update(),e=Y),ev.kM&&u.timer.mark("Canvas3D.render",{captureStats:!0});let r={renderer:er,camera:e,scene:K,helper:J};if(eS.isEnabled(I.multiSample)&&!t){let e=I.multiSample.reduceFlicker&&!o&&n&&!$.isAnimating;eu.render(r,I,!0,e)}else d.draw.render(r,I,!0);et.render(Z),ev.kM&&u.timer.markEnd("Canvas3D.render"),ei.dirty=ei.dirty||l,i=!0}}return i})(!!(null==e?void 0:e.force),null==e?void 0:e.xrFrame)&&ex&&k.next((0,b.z)()-P)}}function eE(){X=!0}let eM=0;function eP(e,t){!ew&&(!u.xr.session||(null==t?void 0:t.xrFrame))&&(W=e,ez(null==t?void 0:t.isSynchronous),(null==t?void 0:t.updateControls)&&$.update(W),Z.transition.tick(W),et.tick(),(null==t||!t.manualDraw)&&(eD({isSynchronous:null==t?void 0:t.isSynchronous,xrFrame:null==t?void 0:t.xrFrame}),Z.transition.inTransition||u.isContextLost||es.tick(W)))}function ek(e){return l=e,u.xr.session?u.xr.session.requestAnimationFrame(e):rm(e)}function eB(e){l=void 0,u.xr.session?u.xr.session.cancelAnimationFrame(e):rh(e)}function eR(){eA=!1,l&&ek(l)}function eF(e){if(!u.isContextLost){if(ea.finalize(["pick"],!0),"origin"in e)return eo.identify(e,Z);{let t="on"===I.camera.stereo.name?Y:Z;return ei.identify(e[0],e[1],t)}}}function eL(e){if(!u.isContextLost){if(ea.finalize(["pick"],!0),"origin"in e)return eo.asyncIdentify(e,Z);{let t="on"===I.camera.stereo.name?Y:Z;return ei.asyncIdentify(e[0],e[1],t)}}}function ez(e=!1){let t=!K.needsCommit||((V.CP.copy(eN,K.boundingSphereVisible),et.clear(),K.commit(e?void 0:250))?(z.next(0),J.debug.isEnabled&&J.debug.update(),!I.camera.manualReset&&(0===E.value||function(){if(0===Z.state.radiusMax)return!0;if(Z.transition.inTransition||o)return!1;let e=!0,t=!0;for(let r of(V.CP.set(eU,Z.state.target,Z.state.radius),K.renderables)){if(!r.state.visible)continue;let a=r.values.boundingSphere.ref.value;if(!a.radius)continue;t=!1;let n=y.AO.distance(eU.center,a.center);if((n>eU.radius||n>a.radius||a.radius>Z.state.radiusMax)&&!V.CP.includes(eN,a))return!0;V.CP.overlaps(eU,a)&&(e=!1)}return e||!t&&eU.radius<=.1}())&&(ec=!0),0===eN.radius&&(i=0),I.camera.manualReset||Z.setState({radiusMax:Q()},0),E.next(w.size),ev.Au&&eV(),!0):(z.next(K.commitQueueSize),!1));ea.updateRequired(I),t&&(function(){if(!ec)return;eg.isPresenting.value||eh.resetScale();let{center:e,radius:t}=K.boundingSphereVisible,r=$.props.autoAdjustMinMaxDistance;if("on"===r.name){let e=r.params.minDistanceFactor*t+r.params.minDistancePadding,a=Math.max(r.params.maxDistanceFactor*t,r.params.maxDistanceMin);$.setProps({minDistance:e,maxDistance:a})}if(t>0){let r=void 0===i?I.cameraResetDurationMs:i,a=Z.getFocus(e,t),n="function"==typeof o?o(K,Z):o,s=n?{...a,...n}:a;Z.setState({...s,radiusMax:Q()},r)}i=void 0,o=void 0,ec=!1}(),eI&&(J.debug.isEnabled&&J.debug.update(),eD({force:!0}),eI=!1),B.next((0,b.z)()))}let eN=(0,V.CP)(),eU=(0,V.CP)();function eV(){let e=K.renderables.map(e=>({drawCount:e.values.drawCount.ref.value,instanceCount:e.values.instanceCount.ref.value,materialId:e.materialId,renderItemId:e.id,geometryType:e.values.dGeometryType.ref.value,"byteCount [MiB]":(0,ru.FH)(e.getByteCount()/1024/1024,3)}));console.groupCollapsed(`${e.length} RenderItems`),e.length<=64?console.table(e):console.log(e),console.log(JSON.stringify(u.stats,void 0,4));let{texture:t,cubeTexture:r,attribute:a,elements:n,pixelPack:i,renderbuffer:o}=u.resources.getByteCounts();console.log(JSON.stringify({texture:`${(t/1024/1024).toFixed(3)} MiB`,cubeTexture:`${(r/1024/1024).toFixed(3)} MiB`,attribute:`${(a/1024/1024).toFixed(3)} MiB`,elements:`${(n/1024/1024).toFixed(3)} MiB`,pixelPack:`${(i/1024/1024).toFixed(3)} MiB`,renderbuffer:`${(o/1024/1024).toFixed(3)} MiB`},void 0,4)),console.log(JSON.stringify({renderables:`${(K.renderables.reduce((e,t)=>e+t.getByteCount(),0)/1024/1024).toFixed(3)} MiB`,passes:{draw:`${(d.draw.getByteCount()/1024/1024).toFixed(3)} MiB`,illumination:`${(d.illumination.getByteCount()/1024/1024).toFixed(3)} MiB`,pick:`${(d.pick.getByteCount()/1024/1024).toFixed(3)} MiB`,hiZ:`${(et.getByteCount()/1024/1024).toFixed(3)} MiB`}},void 0,4)),ev.kM&&console.log(JSON.stringify(u.timer.formatedStats(),void 0,4)),console.groupEnd()}function ej(){let e=K.boundingSphere.radius>
7940?100-Math.round(Z.transition.target.radius/Q()*100):0;return{camera:{mode:Z.state.mode,helper:{...J.camera.props},stereo:{...I.camera.stereo},fov:Math.round((0,O.ZY)(Z.state.fov)),manualReset:!!I.camera.manualReset},cameraFog:Z.state.fog>0?{name:"on",params:{intensity:Z.state.fog}}:{name:"off",params:{}},cameraClipping:{far:Z.state.clipFar,radius:e,minNear:Z.state.minNear},cameraResetDurationMs:I.cameraResetDurationMs,sceneRadiusFactor:I.sceneRadiusFactor,transparentBackground:I.transparentBackground,checkeredTransparentBackground:I.checkeredTransparentBackground,dpoitIterations:I.dpoitIterations,pickPadding:I.pickPadding,userInteractionReleaseMs:I.userInteractionReleaseMs,viewport:I.viewport,postprocessing:{...I.postprocessing},marking:{...I.marking},multiSample:{...I.multiSample},illumination:{...I.illumination},hiZ:{...et.props},renderer:{...er.props},trackball:{...$.props},interaction:{...es.props},debug:{...J.debug.props},handle:{...J.handle.props},pointer:{...J.pointer.props},xr:{...eh.props}}}let eH=null==C?void 0:C.subscribe(()=>{ew=!0,ei.dirty=!0}),eq=N.subscribe(()=>{ei.reset(),eo.reset(),et.reset(),K.forEach(e=>{var t;(null===(t=e.values.meta)||void 0===t?void 0:t.ref.value.reset)&&(e.values.meta.ref.value.reset(),e.update())}),ew=!1,eD({force:!0}),eD({force:!0})}),eX=new m.X(0);function eW(e=!0){d.updateSize(),e$(),eJ(),e&&eE(),eX.next(+new Date)}(0,ev.WF)(eV);let eK=null===(n=e.changed)||void 0===n?void 0:n.subscribe(()=>{K.setTransparency(d.draw.transparency),eE()}),eQ=!1,eZ=!1,eY=[c.drag.subscribe(()=>{eQ=!0}),c.interactionEnd.subscribe(()=>{eQ=!1}),(0,h.T)(c.drag,c.pinch,c.wheel,c.interactionEnd).subscribe(()=>{M.next()}),M.subscribe(()=>{eZ=!0}),M.pipe((0,g.b)(I.userInteractionReleaseMs)).subscribe(()=>{eZ=eQ,!eQ&&d.illumination.supported&&I.illumination.enabled&&eE()})];if(ev.Au&&x){let e;let t=e=>{let t=e&&F.o_.getBoundingSphere(F.o_.normalize(e,"residue"));et.debugOcclusion(t)};c.click.subscribe(r=>{if(!r.modifiers.control||2!==r.button)return;let a=eF(y.Sg.create(r.x,r.y));if(!a){t(e=void 0);return}t(e=eT(a.id).loci)}),k.subscribe(()=>{setTimeout(()=>{t(e)},100)})}return{webgl:u,add:function e(t){D.has(t)||D.set(t,t.updated.subscribe(r=>{t.state.syncManually||e(t)}));let r=w.get(t),a=new Set;t.renderObjects.forEach(e=>a.add(e)),r?ee.F.areEqual(a,r)||(a.forEach(e=>{r.has(e)||K.add(e)}),r.forEach(e=>{a.has(e)||K.remove(e)})):t.renderObjects.forEach(e=>K.add(e)),w.set(t,a),K.update(t.renderObjects,!1),eI=!0,ev.Au&&eV()},remove:function(e){!function(e){let t=D.get(e);t&&(t.unsubscribe(),D.delete(e))}(e);let t=w.get(e);t&&(t.forEach(e=>K.remove(e)),w.delete(e),eI=!0,ev.Au&&eV())},commit:ez,update:(e,t)=>{if(e){if(!w.has(e))return;K.update(e.renderObjects,!!t)}else K.update(void 0,!!t);eI=!0},clear:()=>{D.forEach(e=>e.unsubscribe()),D.clear(),w.clear(),K.clear(),J.debug.clear(),eE(),E.next(w.size)},syncVisibility:()=>{0===Z.state.radiusMax&&(ec=!0,i=0),K.syncVisibility()&&J.debug.isEnabled&&J.debug.update(),eE()},requestDraw:eE,tick:eP,animate:function(){eA=!1,$.start((0,b.z)()),0===eM&&function e(t,r){eP((0,b.z)(),{xrFrame:r}),eM=ek(e)}(0)},resetTime:function(e){P=e,$.start(e)},pause:function(e=!1){eA=e,0!==eM&&(eB(eM),eM=0)},resume:eR,requestAnimationFrame:ek,cancelAnimationFrame:eB,identify:eF,asyncIdentify:eL,mark:function(e,t){eO.push([e,t])},getLoci:eT,handleResize:eW,requestResize:()=>{ed=!0},requestCameraReset:e=>{i=null==e?void 0:e.durationMs,o=null==e?void 0:e.snapshot,ec=!0},camera:Z,boundingSphere:K.boundingSphere,boundingSphereVisible:K.boundingSphereVisible,get notifyDidDraw(){return ex},set notifyDidDraw(v){ex=v},didDraw:k,commited:B,commitQueueSize:z,reprCount:E,resized:eX,setProps:(e,t=!1)=>{var r,a,n,i,o,s,l;let u="function"==typeof e?(0,tE.U)(ej(),e):e;void 0!==u.sceneRadiusFactor&&(I.sceneRadiusFactor=u.sceneRadiusFactor,Z.setState({radiusMax:Q()},0));let c=Object.create(null);u.camera&&void 0!==u.camera.mode&&u.camera.mode!==Z.state.mode&&(c.mode=u.camera.mode);let p=Math.round((0,O.ZY)(Z.state.fov));if(u.camera&&void 0!==u.camera.fov&&u.camera.fov!==p&&(c.fov=(0,O.Id)(u.camera.fov)),void 0!==u.cameraFog&&u.cameraFog.params){let e="on"===u.cameraFog.name?u.cameraFog.params.intensity:0;e!==Z.state.fog&&(c.fog=e)}if(void 0!==u.cameraClipping&&(void 0!==u.cameraClipping.far&&u.cameraClipping.far!==Z.state.clipFar&&(c.clipFar=u.cameraClipping.far),void 0!==u.cameraClipping.minNear&&u.cameraClipping.minNear!==Z.state.minNear&&(c.minNear=u.cameraClipping.minNear),void 0!==u.cameraClipping.radius)){let e=Q()/100*(100-u.cameraClipping.radius);e>0&&e!==c.radius&&(c.radius=Math.max(e,.01))}Object.keys(c).length>0&&Z.setState(c),(null===(r=u.camera)||void 0===r?void 0:r.helper)&&J.camera.setProps(u.camera.helper),(null===(a=u.camera)||void 0===a?void 0:a.manualReset)!==void 0&&(I.camera.manualReset=u.camera.manualReset),(null===(n=u.camera)||void 0===n?void 0:n.stereo)!==void 0&&(Object.assign(I.camera.stereo,u.camera.stereo),Y.setProps(I.camera.stereo.params)),void 0!==u.cameraResetDurationMs&&(I.cameraResetDurationMs=u.cameraResetDurationMs),void 0!==u.transparentBackgroun
794d&&(I.transparentBackground=u.transparentBackground),void 0!==u.checkeredTransparentBackground&&(I.checkeredTransparentBackground=u.checkeredTransparentBackground),void 0!==u.dpoitIterations&&(I.dpoitIterations=u.dpoitIterations),void 0!==u.pickPadding&&(I.pickPadding=u.pickPadding,ei.setPickPadding(I.pickPadding)),void 0!==u.userInteractionReleaseMs&&(I.userInteractionReleaseMs=u.userInteractionReleaseMs),void 0===u.viewport||I.viewport===u.viewport||I.viewport.name===u.viewport.name&&(0,q.wU)(I.viewport.params,u.viewport.params)||(I.viewport=u.viewport,e$(),eJ()),(null===(i=u.postprocessing)||void 0===i?void 0:i.background)&&(Object.assign(I.postprocessing.background,u.postprocessing.background),d.draw.postprocessing.background.update(Z,I.postprocessing.background,e=>{e&&!t&&eE()})),u.postprocessing&&Object.assign(I.postprocessing,u.postprocessing),u.marking&&Object.assign(I.marking,u.marking),u.illumination&&Object.assign(I.illumination,u.illumination),u.multiSample&&Object.assign(I.multiSample,u.multiSample),u.hiZ&&et.setProps(u.hiZ),u.renderer&&(K.setGlobals({dColorMarker:null!==(o=u.renderer.colorMarker)&&void 0!==o?o:er.props.colorMarker,dLightCount:null!==(l=null===(s=u.renderer.light)||void 0===s?void 0:s.length)&&void 0!==l?l:er.props.light.length}),er.setProps(u.renderer)),u.trackball&&$.setProps(u.trackball),u.interaction&&es.setProps(u.interaction),u.debug&&J.debug.setProps(u.debug),u.handle&&J.handle.setProps(u.handle),u.pointer&&J.pointer.setProps(u.pointer),u.xr&&eh.setProps(u.xr),"orthographic"===c.mode&&(I.camera.stereo.name="off"),("transparentBackground"in u||"checkeredTransparentBackground"in u||u.renderer&&"backgroundColor"in u.renderer)&&rg(x,I),ea.updateRequired(I),t||eE()},setAttribs:e=>{e.trackball&&$.setAttribs(e.trackball),e.xr&&eh.setAttribs(e.xr)},getImagePass:(e={})=>new tw(u,p,er,K,Z,J,e),getRenderObjects(){let e=[];return K.forEach((t,r)=>e.push(r)),e},get props(){return ej()},get attribs(){return{trackball:$.attribs,xr:eh.attribs}},get input(){return c},get stats(){return er.stats},get interaction(){return es.events},xr:eg,dispose:()=>{for(let e of(null==eH||eH.unsubscribe(),eq.unsubscribe(),null==eK||eK.unsubscribe(),ey))e.unsubscribe();for(let e of(ey.length=0,eY))e.unsubscribe();eY.length=0,rh(eM),l=void 0,eO=[],K.clear(),J.debug.clear(),$.dis
794pose(),er.dispose(),es.dispose(),et.dispose(),ei.dispose(),eo.dispose(),eh.dispose(),E.complete(),M.complete(),k.complete(),eX.complete(),B.complete(),z.complete(),eg.isPresenting.complete(),eg.isSupported.complete(),eg.requestFailed.complete(),(0,ev.v_)(eV)}};function e$(){let e=G,t=U,r=j,a=H,n=u.getDrawingBufferSize();"canvas"===I.viewport.name?(G=0,U=0,j=n.width,H=n.height):"static-frame"===I.viewport.name?(G=I.viewport.params.x*u.pixelRatio,H=I.viewport.params.height*u.pixelRatio,U=n.height-H-I.viewport.params.y*u.pixelRatio,j=I.viewport.params.width*u.pixelRatio):"relative-frame"===I.viewport.name&&(G=Math.round(I.viewport.params.x*n.width),H=Math.round(I.viewport.params.height*n.height),U=Math.round(n.height-H-I.viewport.params.y*n.height),j=Math.round(I.viewport.params.width*n.width)),(e!==G||t!==U||r!==j||a!==H)&&(X=!0)}function eJ(){ei.setViewport(G,U,j,H),er.setViewport(G,U,j,H),T.l_.set(Z.viewport,G,U,j,H),T.l_.set($.viewport,G,U,j,H),et.setViewport(G,U,j,H)}}},19609:function(e,t,r){r.d(t,{EJ:function(){return D},Rk:function(){return w},n1:function(){return A},sE:function(){return n}});var a,n,i=r(53596),o=r(97187),s=r(84785),l=r(34748),u=r(4376),c=r(89623),d=r(21071),p=r(23844),f=r(32747),m=r(48930),h=r(87144),g=r(67589),b=r(93898),y=r(30131),x=r(7922),S=r(99289),T=r(14086),C=r(97667),O=r(71211);let I={alpha:T.e.Numeric(.51,{min:0,max:1,step:.01},{isEssential:!0,label:"Opacity"}),colorX:T.e.Color(x.t.red,{isEssential:!0}),colorY:T.e.Color(x.t.green,{isEssential:!0}),colorZ:T.e.Color(x.t.blue,{isEssential:!0}),scale:T.e.Numeric(.33,{min:.1,max:2,step:.1},{isEssential:!0}),location:T.e.Select("bottom-left",T.e.arrayToOptions(["bottom-left","bottom-right","top-left","top-right"])),locationOffsetX:T.e.Numeric(0),locationOffsetY:T.e.Numeric(0),originColor:T.e.Color(x.t.grey),radiusScale:T.e.Numeric(.075,{min:.01,max:.3,step:.001}),showPlanes:T.e.Boolean(!0),planeColorXY:T.e.Color(x.t.grey,{label:"Plane Color XY"}),planeColorXZ:T.e.Color(x.t.grey,{label:"Plane Color XZ"}),planeColorYZ:T.e.Color(x.t.grey,{label:"Plane Color YZ"}),showLabels:T.e.Boolean(!1),labelX:T.e.Text("X"),labelY:T.e.Text("Y"),labelZ:T.e.Text("Z"),labelColorX:T.e.Color(x.t.grey),labelColorY:T.e.Color(x.t.grey),labelColorZ:T.e.Color(x.t.grey),labelOpacity:T.e.Numeric(1,{min:0,max:1,step:.01}),labelScale:T.e.Numeric(.25,{min:.1,max:1,step:.01})},A={axes:T.e.MappedStatic("on",{on:T.e.Group(I),off:T.e.Group({})},{cycle:!0,description:"Show camera orientation axes"})};class w{constructor(e,t={}){this.webgl=e,this.props={axes:{name:"off",params:{}}},this.pixelRatio=1,this.eachGroup=(e,t)=>{if(!D(e))return!1;let r=!1;if(this.meshRenderObject){let a=this.meshRenderObject.values.uGroupCount.ref.value;for(let{groupId:n,instanceId:i}of e.elements){let e=i*a+n;t(o.X.ofSingleton(e))&&(r=!0)}}if(this.textRenderObject){let a=this.textRenderObject.values.uGroupCount.ref.value;for(let{groupId:n,instanceId:i}of e.elements){let e=i*a+n;t(o.X.ofSingleton(e))&&(r=!0)}}return r},this.scene=f.x.create(e,"blended"),this.camera=new O.V,h.AO.set(this.camera.up,0,1,0),h.AO.set(this.camera.target,0,0,0),this.setProps(t)}setProps(e){this.props=(0,i.U)(this.props,t=>{if(void 0!==e.axes&&(t.axes.name=e.axes.name,"on"===e.axes.name)){this.scene.clear(),this.pixelRatio=this.webgl.pixelRatio;let r={...e.axes.params,scale:e.axes.params.scale*this.pixelRatio,labelScale:e.axes.params.labelScale*this.pixelRatio};this.meshRenderObject=function(e){let t=function(e,t){let r=100*e.scale,a=function(e,t){let r=c.V.createState(512,256,t),a=100*e.scale,i=e.radiusScale*a,o=e.showLabels?100*e.labelScale/3:0,u=h.AO.scale((0,h.AO)(),h.AO.unitX,a-o),d=h.AO.scale((0,h.AO)(),h.AO.unitY,a-o),p=h.AO.scale((0,h.AO)(),h.AO.unitZ,a-o),f={radiusTop:i,radiusBottom:i,radialSegments:32};if(r.currentGroup=n.Origin,(0,l.H)(r,h.AO.origin,i,2),r.currentGroup=n.X,(0,l.H)(r,u,i,2),(0,s.vA)(r,h.AO.origin,u,1,f),r.currentGroup=n.Y,(0,l.H)(r,d,i,2),(0,s.vA)(r,h.AO.origin,d,1,f),r.currentGroup=n.Z,(0,l.H)(r,p,i,2),(0,s.vA)(r,h.AO.origin,p,1,f),e.showPlanes){h.AO.scale(u,u,.5),h.AO.scale(d,d,.5),h.AO.scale(p,p,.5),r.currentGroup=n.XY,c.V.addTriangle(r,h.AO.origin,u,d),c.V.addTriangle(r,h.AO.origin,d,u);let e=h.AO.add((0,h.AO)(),u,d);c.V.addTriangle(r,e,u,d),c.V.addTriangle(r,e,d,u),r.currentGroup=n.XZ,c.V.addTriangle(r,h.AO.origin,u,p),c.V.addTriangle(r,h.AO.origin,p,u);let t=h.AO.add((0,h.AO)(),u,p);c.V.addTriangle(r,t,u,p),c.V.addTriangle(r,t,p,u),r.currentGroup=n.YZ,c.V.addTriangle(r,h.AO.origin,d,p),c.V.addTriangle(r,h.AO.origin,p,d);let a=h.AO.add((0,h.AO)(),d,p);c.V.addTriangle(r,a,d,p),c.V.addTriangle(r,a,p,d)}return c.V.getMesh(r)}(e,void 0);return a.setBoundingSphere(m.CP.create(h.AO.create(r/2,r/2,r/2),r+r/4)),b.b.create("axes-mesh",{},a,t=>{switch(t){case n.X:return e.colorX;case n.Y:return e.colorY;case n.Z:return e.colorZ;case n.XY:return e.planeColorXY;case n.XZ:return e.planeColorXZ;case n.YZ:return e.planeColorYZ;case n.Origin:return e.originColor;default:return x.t.grey}},()=>1,()=>"")}(e);return b.b.createRenderObject(t,{...T.e.getDefaultValues(u.K.Params),...e,ignoreLight:!0,cellSize:0})}(r),this.scene.add(this.meshRenderObject),e.axes.params.showLabels?(this.textRenderObject=function(e){let t=function(e,t){let r=100*e.scale,a=function(e,t){let r=p.w.create(e,8,8,t),a=100*e.scale,i=h.AO.scale((0,h.AO)(),h.AO.unitX,a),o=h.AO.scale((0,h.AO)(),h.AO.unitY,a),s=h.AO.scale((0,h.AO)(),h.AO.unitZ,a),l=100*e.labelScale;return r.add(e.labelX,i[0],i[1],i[2],0,l,n.X),r.add(e.labelY,o[0],o[1],o[2],0,l,n.Y),r.add(e.labelZ,s[0],s[1],s[2],0,l,n.Z),r.getText()}(e,void 0);return a.setBoundingSphere(m.CP.create(h.AO.create(r/2,r/2,r/2),r)),b.b.create("axes-text",{},a,t=>{switch(t){case n.X:return e.labelColorX;case n.Y:return e.labelColorY;case n.Z:return e.labelColorZ;default:return x.t.grey}},()=>1,()=>"")}(e);return b.b.createRenderObject(t,{...T.e.getDefaultValues(d.x.Param
794s),...e,alpha:e.labelOpacity,cellSize:0})}(r),this.scene.add(this.textRenderObject)):this.textRenderObject=void 0,this.scene.commit(),h.AO.set(this.camera.position,0,0,200*r.scale),h.yb.lookAt(this.camera.view,this.camera.position,this.camera.target,this.camera.up),t.axes.params={...e.axes.params}}})}get isEnabled(){return"on"===this.props.axes.name}getLoci(e){var t;let{objectId:r,groupId:a,instanceId:i}=e;return(this.meshRenderObject&&r===this.meshRenderObject.id||this.textRenderObject&&r===this.textRenderObject.id)&&a!==n.None?(t=this,(0,g.SL)("camera-axes",t,[{groupId:a,instanceId:i}],void 0,()=>(function(e,t){let r=t.props.axes,a="on"===r.name?r.params.labelX:"X",i="on"===r.name?r.params.labelY:"Y",o="on"===r.name?r.params.labelZ:"Z";switch(e){case n.X:return`${a} Axis`;case n.Y:return`${i} Axis`;case n.Z:return`${o} Axis`;case n.XY:return`${a}${i} Plane`;case n.XZ:return`${a}${o} Plane`;case n.YZ:return`${i}${o} Plane`;case n.Origin:return"Origin";default:return"Axes"}})(a,t))):g.Rh}mark(e,t){return!!(S.E5.is(S.E5.Highlighting,t)&&((0,g.h)(e)||D(e)&&e.data===this))&&(y.u.mark(this.meshRenderObject,e,t,this.eachGroup)||y.u.mark(this.textRenderObject,e,t,this.eachGroup))}update(e){if(!this.meshRenderObject||"off"===this.props.axes.name)return;this.pixelRatio!==this.webgl.pixelRatio&&this.setProps(this.props),function(e,t,r){let{near:a,far:n}=e,i=-t.width/2,o=t.width/2,s=t.height/2,l=-t.height/2,u=(o-i)/2,c=(s-l)/2,d=(o+i)/2,p=(s+l)/2,f=d-u,m=d+u,g=p+c,b=p-c;if(r.enabled){let e=(o-i)/r.width,t=(s-l)/r.height;f+=e*r.offsetX,m=f+e*r.width,g-=t*r.offsetY,b=g-t*r.height}h.yb.ortho(e.projection,f,m,g,b,a,n)}(this.camera,e.viewport,e.viewOffset),h.yb.extractRotation(this.scene.view,e.view);let t=this.textRenderObject?this.textRenderObject.values.boundingSphere.ref.value.radius:this.meshRenderObject.values.boundingSphere.ref.value.radius,r=this.props.axes.params.location,a=this.props.axes.params.locationOffsetX*this.pixelRatio,n=this.props.axes.params.locationOffsetY*this.pixelRatio;"bottom-left"===r?h.yb.setTranslation(this.scene.view,h.AO.create(-e.viewport.width/2+t+a,-e.viewport.height/2+t+n,0)):"bottom-right"===r?h.yb.setTranslation(this.scene.view,h.AO.create(e.viewport.width/2-t-a,-e.viewport.height/2+t+n,0)):"top-left"===r?h.yb.setTranslation(this.scene.view,h.AO.create(-e.viewport.width/2+t+a,e.viewport.height/2-t-n,0)):"top-right"===r?h.yb.setTranslation(this.scene.view,h.AO.create(e.viewport.width/2-t-a,e.viewport.height/2-t-n,0)):(0,C.UT)(r)}}function D(e){return"data-loci"===e.kind&&"camera-axes"===e.tag}(a=n||(n={}))[a.None=0]="None",a[a.X=1]="X",a[a.Y=2]="Y",a[a.Z=3]="Z",a[a.XY=4]="XY",a[a.XZ=5]="XZ",a[a.YZ=6]="YZ",a[a.Origin=7]="Origin"},57133:function(e,t,r){r.d(t,{z:function(){return y},y:function(){return x}});var a=r(68971),n=r(62113),i=r(18406),o=r(45705),s=r(57155),l=r(91407),u=r(87144),c=r(85764),d=r(14086),p=r(10410),f=r(48502);let m=` 795precision highp float; 796precision highp int; 797precision highp sampler2D; 798 799uniform vec2 uTexSizeInv; 800 801uniform sampler2D tBlur1; 802uniform sampler2D tBlur2; 803uniform sampler2D tBlur3; 804uniform sampler2D tBlur4; 805uniform sampler2D tBlur5; 806uniform float uBloomStrength; 807uniform float uBloomRadius; 808uniform float uBloomFactors[5]; 809uniform vec3 uBloomTints[5]; 810 811float lerpBloomFactor(const in float factor) { 812 float mirrorFactor = 1.2 - factor; 813 return mix(factor, mirrorFactor, uBloomRadius); 814} 815 816void main(void) { 817 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 818 819 gl_FragColor = uBloomStrength * ( 820 lerpBloomFactor(uBloomFactors[0]) * vec4(uBloomTints[0], 1.0) * texture2D(tBlur1, coords) + 821 lerpBloomFactor(uBloomFactors[1]) * vec4(uBloomTints[1], 1.0) * texture2D(tBlur2, coords) + 822 lerpBloomFactor(uBloomFactors[2]) * vec4(uBloomTints[2], 1.0) * texture2D(tBlur3, coords) + 823 lerpBloomFactor(uBloomFactors[3]) * vec4(uBloomTints[3], 1.0) * texture2D(tBlur4, coords) + 824 lerpBloomFactor(uBloomFactors[4]) * vec4(uBloomTints[4], 1.0) * texture2D(tBlur5, coords) 825 ); 826} 827`,h=` 828precision highp float; 829precision highp int; 830precision highp sampler2D; 831 832uniform sampler2D tColor; 833uniform sampler2D tEmissive; 834uniform sampler2D tDepth; 835uniform vec2 uTexSizeInv; 836 837uniform vec3 uDefaultColor; 838uniform float uDefaultOpacity; 839uniform float uLuminosityThreshold; 840uniform float uSmoothWidth; 841 842#include common 843 844float getDepth(const in vec2 coords) { 845 #ifdef depthTextureSupport 846 return texture2D(tDepth, coords).r; 847 #else 848 return unpackRGBAToDepth(texture2D(tDepth, coords)); 849 #endif 850} 851
852bool isBackground(const in float depth) { 853 return depth == 1.0; 854} 855 856void main(void) { 857 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 858 vec4 texel = texture2D(tColor, coords); 859 float emissive = texture2D(tEmissive, coords).a; 860 float depth = getDepth(coords); 861 862 if (isBackground(depth)) { 863 gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); 864 return; 865 } 866 867 vec4 outputColor = vec4(uDefaultColor.rgb, uDefaultOpacity); 868 869 #if defined(dMode_luminosity) 870 vec3 luma = vec3(0.299, 0.587, 0.114); 871 float v = dot(texel.xyz, luma); 872 float alpha = smoothstep(uLuminosityThreshold, uLuminosityThreshold + uSmoothWidth, v); 873 874 gl_FragColor = mix(outputColor, texel, alpha); 875 #elif defined(dMode_emissive) 876 gl_FragColor = mix(outputColor, texel, emissive); 877 #endif 878} 879`,g=` 880precision highp float; 881precision highp int; 882precision highp sampler2D; 883 884uniform sampler2D tInput; 885uniform vec2 uTexSizeInv; 886 887uniform vec2 uDirection; 888uniform float uGaussianCoefficients[dKernelRadius]; 889 890void main(void) { 891 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 892 float weightSum = uGaussianCoefficients[0]; 893 vec4 diffuseSum = texture2D(tInput, coords) * weightSum; 894 895 for(int i = 1; i < dKernelRadius; ++i) { 896 float x = float(i); 897 float w = uGaussianCoefficients[i]; 898 vec2 offset = uDirection * uTexSizeInv * x; 899 vec4 sample1 = texture2D(tInput, coords + offset); 900 vec4 sample2 = texture2D(tInput, coords - offset); 901 diffuseSum += (sample1 + sample2) * w; 902 weightSum += 2.0 * w; 903 } 904 905 gl_FragColor = diffuseSum / weightSum; 906} 907`;var b=r(67738);let y={strength:d.e.Numeric(1,{min:0,max:3,step:.1}),radius:d.e.Numeric(0,{min:0,max:1,step:.01}),threshold:d.e.Numeric(0,{min:0,max:1,step:.01},{description:"Luminosity threshold",hideIf:e=>"emissive"===e.mode}),mode:d.e.Select("emissive",[["luminosity","Luminosity"],["emissive","Emissive"]])};class x{static isEnabled(e){return e.enabled&&"on"===e.bloom.name}constructor(e,t,r){this.webgl=e,this.horizontalBlurTargets=[],this.verticalBlurTargets=[],this.emissiveTarget=e.createRenderTarget(t,r,!0,"uint8","linear","rgba"),this.luminosityTarget=e.createRenderTarget(t,r,!1,"uint8","linear"),this.compositeTarget=e.createRenderTarget(t,r,!1,"uint8","linear");let i=Math.round(t/2),o=Math.round(r/2);for(let t=0;t<5;++t)this.horizontalBlurTargets[t]=e.createRenderTarget(i,o,!1,"uint8","linear"),this.verticalBlurTargets[t]=e.createRenderTarget(i,o,!1,"uint8","linear"),i=Math.round(i/2),o=Math.round(o/2);let d=(0,l.DU)();this.luminosityRenderable=function(e,t,r,i){let o=t.getWidth(),l=t.getHeight(),d={...a.GE,tColor:c.IO.create(t),tEmissive:c.IO.create(r),tDepth:c.IO.create(i),uTexSizeInv:c.IO.create(u.Sg.create(1/o,1/l)),uDefaultColor:c.IO.create((0,u.AO)()),uDefaultOpacity:c.IO.create(0),uLuminosityThreshold:c.IO.create(0),uSmoothWidth:c.IO.create(1),dMode:c.IO.create("emissive")},p={...S},f=(0,s.s8)(e,"triangles",T,p,d);return(0,n.T)(f,d)}(e,d,d,d),this.blurRenderable=function(e,t){let r=t.getWidth(),i=t.getHeight(),o={...a.GE,tInput:c.IO.create(t),uTexSizeInv:c.IO.create(u.Sg.create(1/r,1/i)),uDirection:c.IO.create((0,u.Sg)()),uGaussianCoefficients:c.IO.create([]),dKernelRadius:c.IO.create(O[0])},l={...w},d=(0,s.s8)(e,"triangles",D,l,o);return(0,n.T)(d,o)}(e,d),this.compositeRenderable=function(e,t,r,i,o,l,d,p){let f={...a.GE,uTexSizeInv:c.IO.create(u.Sg.create(t,r)),tBlur1:c.IO.create(i),tBlur2:c.IO.create(o),tBlur3:c.IO.create(l),tBlur4:c.IO.create(d),tBlur5:c.IO.create(p),uBloomStrength:c.IO.create(1),uBloomRadius:c.IO.create(0),uBloomFactors:c.IO.create([1,.8,.6,.4,.2]),uBloomTints:c.IO.create(Array(15).fill(1))},m={...E},h=(0,s.s8)(e,"triangles",M,m,f);return(0,n.T)(h,f)}(e,t,r,this.verticalBlurTargets[0].texture,this.verticalBlurTargets[1].texture,this.verticalBlurTargets[2].texture,this.verticalBlurTargets[3].texture,this.verticalBlurTargets[4].texture),this.copyRenderable=(0,a.Oz)(e,this.compositeTarget.texture)}getByteCount(){return this.emissiveTarget.getByteCount()+this.luminosityTarget.getByteCount()+this.compositeTarget.getByteCount()+this.horizontalBlurTargets.reduce((e,t)=>
907e+t.getByteCount(),0)+this.verticalBlurTargets.reduce((e,t)=>e+t.getByteCount(),0)}setSize(e,t){let r=this.luminosityTarget.getWidth(),a=this.luminosityTarget.getHeight();if(e!==r||t!==a){this.emissiveTarget.setSize(e,t),this.luminosityTarget.setSize(e,t),this.compositeTarget.setSize(e,t);let r=Math.round(e/2),a=Math.round(t/2);for(let e=0;e<5;++e)this.horizontalBlurTargets[e].setSize(r,a),this.verticalBlurTargets[e].setSize(r,a),r=Math.round(r/2),a=Math.round(a/2);c.IO.update(this.luminosityRenderable.values.uTexSizeInv,u.Sg.set(this.compositeRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),c.IO.update(this.compositeRenderable.values.uTexSizeInv,u.Sg.set(this.compositeRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),c.IO.update(this.copyRenderable.values.uTexSize,u.Sg.set(this.copyRenderable.values.uTexSize.ref.value,e,t))}}update(e,t,r,a){let n=!1;this.luminosityRenderable.values.tColor.ref.value!==e&&(c.IO.update(this.luminosityRenderable.values.tColor,e),n=!0),this.luminosityRenderable.values.tEmissive.ref.value!==t&&(c.IO.update(this.luminosityRenderable.values.tEmissive,t),n=!0),this.luminosityRenderable.values.tDepth.ref.value!==r&&(c.IO.update(this.luminosityRenderable.values.tDepth,r),n=!0),this.luminosityRenderable.values.dMode.ref.value!==a.mode&&(c.IO.update(this.luminosityRenderable.values.dMode,a.mode),n=!0),c.IO.updateIfChanged(this.luminosityRenderable.values.uLuminosityThreshold,a.threshold),n&&this.luminosityRenderable.update();let i=!1;this.blurRenderable.values.tInput.ref.value!==e&&(c.IO.update(this.blurRenderable.values.tInput,e),i=!0),i&&this.blurRenderable.update(),c.IO.update(this.compositeRenderable.values.uBloomRadius,a.radius),c.IO.update(this.compositeRenderable.values.uBloomStrength,a.strength)}render(e,t){f.kM&&this.webgl.timer.mark("BloomPass.render");let{gl:r,state:a}=this.webgl,{x:n,y:i,width:o,height:s}=e;a.viewport(n,i,o,s),a.scissor(n,i,o,s),a.enable(r.SCISSOR_TEST),a.disable(r.BLEND),a.disable(r.DEPTH_TEST),a.depthMask(!1),this.luminosityTarget.bind(),this.luminosityRenderable.render();for(let e=0;e<5;++e){let t=this.horizontalBlurTargets[e].getWidth(),r=this.horizontalBlurTargets[e].getHeight();a.viewport(0,0,t,r),a.scissor(0,0,t,r),c.IO.update(this.blurRenderable.values.dKernelRadius,O[e]),c.IO.update(this.blurRenderable.values.uGaussianCoefficients,C(O[e])),c.IO.update(this.blurRenderable.values.uTexSizeInv,u.Sg.set(this.blurRenderable.values.uTexSizeInv.ref.value,1/t,1/r)),this.horizontalBlurTargets[e].bind(),c.IO.update(this.blurRenderable.values.tInput,0===e?this.luminosityTarget.texture:this.verticalBlurTargets[e-1].texture),c.IO.update(this.blurRenderable.values.uDirection,I),this.blurRenderable.update(),this.blurRenderable.render(),this.verticalBlurTargets[e].bind(),c.IO.update(this.blurRenderable.values.tInput,this.horizontalBlurTargets[e].texture),c.IO.update(this.blurRenderable.values.uDirection,A),this.blurRenderable.update(),this.blurRenderable.render()}a.viewport(n,i,o,s),a.scissor(n,i,o,s),this.compositeTarget.bind(),this.compositeRenderable.update(),this.compositeRenderable.render(),t?t.bind():this.webgl.bindDrawingBuffer(),a.enable(r.BLEND),a.blendFunc(r.ONE,r.ONE),this.copyRenderable.render(),f.kM&&this.webgl.timer.markEnd("BloomPass.render")}}let S={...a.iz,tColor:(0,i.U2)("texture","rgba","ubyte","linear"),tEmissive:(0,i.U2)("texture","rgba","ubyte","linear"),tDepth:(0,i.U2)("texture","rgba","ubyte","nearest"),uTexSizeInv:(0,i.wt)("v2"),uDefaultColor:(0,i.wt)("v3"),uDefaultOpacity:(0,i.wt)("f"),uLuminosityThreshold:(0,i.wt)("f"),uSmoothWidth:(0,i.wt)("f"),dMode:(0,i.O0)("string",["luminosity","emissive"])},T=(0,o.Lq)("Bloom Luminosity",p.C,h),C=(0,b.m)(function(e){let t=[];for(let r=0;r<e;++r)t.push(.39894*Math.exp(-.5*r*r/(e*e))/e);return t}),O=[3,5,7,9,11],I=u.Sg.create(1,0),A=u.Sg.create(0,1),w={...a.iz,tInput:(0,i.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,i.wt)("v2"),uDirection:(0,i.wt)("v2"),uGaussianCoefficients:(0,i.wt)("f[]"),dKernelRadius:(0,i.O0)("number")},D=(0,o.Lq)("Bloom Blur",p.C,g),E={...a.iz,tBlur1:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur2:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur3:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur4:(0,i.U2)("texture","rgba","ubyte","linear"),tBlur5:(0,i.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,i.wt)("v2"),uBloomStrength:(0,i.wt)("f"),uBloomRadius:(0,i.wt)("f"),uBloomFactors:(0,i.wt)("f[]"),uBloomTints:(0,i.wt)("v3[]")},M=(0,o.Lq)("Bloom Composite",p.C,m)},12175:function(e,t,r){r.d(t,{$:function(){return h},z:function(){return g}});
907var a=r(68971),n=r(62113),i=r(18406),o=r(45705),s=r(57155),l=r(91407),u=r(87144),c=r(85764),d=r(14086),p=r(10410);let f=` 908precision highp float; 909precision highp int; 910precision highp sampler2D; 911 912#include common 913 914uniform sampler2D tColor; 915uniform sampler2D tDepthOpaque; 916uniform sampler2D tDepthTransparent; 917 918uniform vec2 uTexSize; 919uniform vec4 uBounds; 920 921uniform float uBlurSpread; 922uniform float uInFocus; 923uniform float uPPM; 924 925uniform float uNear; // Near plane 926uniform float uFar; // Far plane 927 928uniform mat4 uInvProjection; // Inverse projection 929uniform mat4 uProjection; // projection 930 931uniform int uMode; // 0-planar, 1-spherical 932uniform vec3 uCenter; // Center of focus sphere in view space 933 934// Function to convert depth value from depth buffer to view space Z 935float getViewZ(const in float depth) { 936 #if dOrthographic == 1 937 return orthographicDepthToViewZ(depth, uNear, uFar); 938 #else 939 return perspectiveDepthToViewZ(depth, uNear, uFar); 940 #endif 941} 942 943// Retrieve depth from opaque depth texture 944float getDepthOpaque(const in vec2 coords) { 945 #ifdef depthTextureSupport 946 return texture2D(tDepthOpaque, coords).r; 947 #else 948 return unpackRGBAToDepth(texture2D(tDepthOpaque, coords)); 949 #endif 950} 951 952// Retrieve depth from transparent depth texture 953float getDepthTransparent(const in vec2 coords) { 954 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x; 955} 956 957bool isBackground(const in float depth) { 958 return depth == 1.0; 959} 960 961float getDepth(const in vec2 coords) { 962 return min(getDepthOpaque(coords), getDepthTransparent(coords)); 963} 964 965float getCOC(vec2 uv) { 966 float depth = getDepth(uv); 967 float viewDist = getViewZ(depth); 968 vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection); 969 float focusDist = length(aposition - uCenter); 970 float coc = 0.0; // Circle of Confusion 971 if (uMode == 0) { // planar Depth of field 972 coc = (abs(viewDist) - uInFocus) / uPPM; //focus distance, focus range 973 } else if(uMode == 1) { // spherical Depth of field 974 coc = focusDist / uPPM ; 975 } 976 coc = clamp(coc, -1.0, 1.0); 977 return coc; 978} 979 980// Simple box blur for blurring the image 981vec3 getBlurredImage(vec2 coords) { 982 vec4 blurColor = vec4(0); 983 vec2 texelSize = vec2(1.0 / uTexSize.x, 1.0 / uTexSize.y); 984 float count = 0.0; 985 for (int x = 0; x < int(dBlurSize); x++) { 986 for (int y = 0; y < int(dBlurSize); y++) { 987 vec2 offset = vec2(float(x) - float(dBlurSize) / 2.0, float(y) - float(dBlurSize) / 2.0); 988 vec2 uvPixel = coords.xy + offset * texelSize * uBlurSpread; 989 float coc = getCOC(uvPixel); 990 coc = smoothstep(0.0, 1.0, abs(coc)); 991 // mix blurColor with new color with weight coc 992 blurColor.rgb = blurColor.rgb + texture2D(tColor, uvPixel).xyz * coc; 993 count+=coc; 994 } 995 } 996 blurColor = blurColor / count; 997 return blurColor.rgb; 998} 999 1000// simplification from https://catlikecoding.com/unity/tutorials/advanced-rendering/depth-of-field/ 1001void main() { 1002 vec2 uv = gl_FragCoord.xy / uTexSize; 1003 vec4 color = texture2D(tColor, uv); 1004 float depth = getDepth(uv); 1005 1006 float viewDist = getViewZ(depth); 1007 1008 vec3 aposition = screenSpaceToViewSpace(vec3(uv.xy, depth), uInvProjection); 1009 float focusDist = length(aposition - uCenter); 1010 vec3 blurColor = getBlurredImage(uv); 1011 1012 float coc = getCOC(uv); // Circle of Confusion 1013 1014 // for debugging the coc 1015 // color.rgb = (coc < 0.0) ? (1.0 - abs(coc)) * vec3(1.0,0.0,0.0) : vec3(0.0, 1.0 - coc, 0.0) ;//mix(color.rgb, blurColor.rgb, abs(coc)); 1016 color.rgb = mix(color.rgb, blurColor, smoothstep(0.0, 1.0, abs(coc))); // Smooth blending based on CoC 1017 gl_FragColor = color; 1018} 1019`;var m=r(48502);let h={blurSize:d.e.Numeric(9,{min:1,max:32,step:1}),blurSpread:d.e.Numeric(1,{min:0,max:10,step:.1}),inFocus:d.e.Numeric(0,{min:-5e3,max:5e3,step:1},{description:"Distance from the scene center that will be in focus"}),PPM:d.e.Numeric(20,{min:0,max:5e3,step:.1},{description:"Size of the area that will be in focus"}),center:d.e.Select("camera-target",d.e.arrayToOptions(["scene-ce
1019nter","camera-target"])),mode:d.e.Select("plane",d.e.arrayToOptions(["plane","sphere"]))};class g{static isEnabled(e){return e.enabled&&"off"!==e.dof.name}constructor(e,t,r){this.webgl=e,this.target=e.createRenderTarget(t,r,!1);let i=(0,l.DU)();this.renderable=function(e,t,r,i){let o=t.getWidth(),l=t.getHeight(),d={...a.GE,tDepthOpaque:c.IO.create(r),tDepthTransparent:c.IO.create(i),tColor:c.IO.create(t),uTexSize:c.IO.create(u.Sg.create(o,l)),uProjection:c.IO.create(u.yb.identity()),uInvProjection:c.IO.create(u.yb.identity()),uBounds:c.IO.create((0,u.T8)()),uCenter:c.IO.create((0,u.AO)()),uMode:c.IO.create(0),dOrthographic:c.IO.create(0),uNear:c.IO.create(1),uFar:c.IO.create(1e4),dBlurSize:c.IO.create(5),uBlurSpread:c.IO.create(300),uInFocus:c.IO.create(20),uPPM:c.IO.create(20)},p={...b},f=(0,s.s8)(e,"triangles",y,p,d);return(0,n.T)(f,d)}(e,i,i,i)}getByteCount(){return this.target.getByteCount()}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){let r=this.target.texture.getWidth(),a=this.target.texture.getHeight();(e!==r||t!==a)&&(this.target.setSize(e,t),c.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a,n,i){let o=!1;this.renderable.values.tColor.ref.value!==t&&(c.IO.update(this.renderable.values.tColor,t),o=!0),this.renderable.values.tDepthOpaque.ref.value!==r&&(c.IO.update(this.renderable.values.tDepthOpaque,r),o=!0),this.renderable.values.tDepthTransparent.ref.value!==a&&(c.IO.update(this.renderable.values.tDepthTransparent,a),o=!0);let s="orthographic"===e.state.mode?1:0,l=this.renderable.values.uInvProjection.ref.value;u.yb.invert(l,e.projection);let[d,p]=this.renderable.values.uTexSize.ref.value,f=e.viewport;c.IO.update(this.renderable.values.uProjection,e.projection),c.IO.update(this.renderable.values.uInvProjection,l),c.IO.update(this.renderable.values.uMode,"sphere"===n.mode?1:0),u.T8.set(this.renderable.values.uBounds.ref.value,f.x/d,f.y/p,(f.x+f.width)/d,(f.y+f.height)/p),c.IO.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),c.IO.updateIfChanged(this.renderable.values.uNear,e.near),c.IO.updateIfChanged(this.renderable.values.uFar,e.far),c.IO.updateIfChanged(this.renderable.values.dOrthographic,s);let m=Math.round(n.blurSize*this.webgl.pixelRatio);this.renderable.values.dBlurSize.ref.value!==m&&(c.IO.update(this.renderable.values.dBlurSize,m),o=!0);let h="scene-center"===n.center?i.center:e.state.target,g=u.AO.distance(e.state.position,h)+n.inFocus;c.IO.updateIfChanged(this.renderable.values.uInFocus,g*e.scale);let b=this.renderable.values.uCenter.ref.value;u.AO.transformMat4(b,h,e.view),c.IO.update(this.renderable.values.uCenter,b),c.IO.updateIfChanged(this.renderable.values.uBlurSpread,n.blurSpread),c.IO.updateIfChanged(this.renderable.values.uPPM,n.PPM*e.scale),o&&this.renderable.update()}render(e,t){m.kM&&this.webgl.timer.mark("DofPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),m.kM&&this.webgl.timer.markEnd("DofPass.render")}}let b={...a.iz,tDepthOpaque:(0,i.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,i.U2)("texture","rgba","ubyte","nearest"),tColor:(0,i.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,i.wt)("v2"),uProjection:(0,i.wt)("m4"),uInvProjection:(0,i.wt)("m4"),uBounds:(0,i.wt)("v4"),uCenter:(0,i.wt)("v3"),uMode:(0,i.wt)("i"),dOrthographic:(0,i.O0)("number"),uNear:(0,i.wt)("f"),uFar:(0,i.wt)("f"),dBlurSize:(0,i.O0)("number"),uBlurSpread:(0,i.wt)("f"),uInFocus:(0,i.wt)("f"),uPPM:(0,i.wt)("f")},y=(0,o.Lq)("dof",p.C,f)},59978:function(e,t,r){r.d(t,{TY:function(){return h},f1:function(){return g}});var a=r(68971),n=r(18406),i=r(45705),o=r(85764),s=r(57155),l=r(62113),u=r(87144),c=r(14086),d=r(10410);let p=` 1020precision highp float; 1021precision highp int; 1022precision highp sampler2D; 1023 1024uniform sampler2D tDepthOpaque; 1025uniform sampler2D tDepthTransparent; 1026uniform vec2 uTexSize; 1027 1028uniform float uNear; 1029uniform float uFar; 1030uniform mat4 uInvProjection; 1031 1032uniform float uOutlineThreshold; 1033 1034#include common 1035 1036float getViewZ(const in float depth) { 1037 #if dOrthographic == 1 1038 return orthographicDepthToViewZ(depth, uNear, uFar); 1039 #else 1040 return perspectiveDepthToViewZ(depth, uNear, uFar); 1041 #endif 1042} 1043 1044float getDepthOpaque(const in vec2 coords) { 1045 #ifdef depthTextureSupport 1046 return texture2D(tDepthOpaque, coords).r; 1047 #else 1048 return unpackRGBAToDepth(texture2D(tDepthOpaque, coords)); 1049 #endif 1050} 1051 1052vec2 getDepthTransparentWithAlpha(const in vec2 coords) { 1053 #ifdef dTransparentOutline 1054 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)); 1055 #else 1056 return vec2(1.0, 0.0); 1057 #endif 1058} 1059
1060bool isBackground(const in float depth) { 1061 return depth == 1.0; 1062} 1063 1064float getPixelSize(const in vec2 coords, const in float depth) { 1065 vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection); 1066 vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection); 1067 return distance(viewPos0, viewPos1); 1068} 1069 1070void main(void) { 1071 float backgroundViewZ = 2.0 * uFar; 1072 1073 vec2 coords = gl_FragCoord.xy / uTexSize; 1074 vec2 invTexSize = 1.0 / uTexSize; 1075 1076 float selfDepthOpaque = getDepthOpaque(coords); 1077 float selfViewZOpaque = isBackground(selfDepthOpaque) ? backgroundViewZ : getViewZ(selfDepthOpaque); 1078 float pixelSizeOpaque = getPixelSize(coords, selfDepthOpaque) * uOutlineThreshold; 1079 1080 vec2 selfDepthTransparentWithAlpha = getDepthTransparentWithAlpha(coords); 1081 float selfDepthTransparent = selfDepthTransparentWithAlpha.x; 1082 float selfViewZTransparent = isBackground(selfDepthTransparent) ? backgroundViewZ : getViewZ(selfDepthTransparent); 1083 float pixelSizeTransparent = getPixelSize(coords, selfDepthTransparent) * uOutlineThreshold; 1084 1085 float bestOpaqueDepth = 1.0; 1086 float bestTransparentDepth = 1.0; 1087 float bestTransparentAlpha = 0.0; 1088 1089 float opaqueOutlineFlag = 0.0; 1090 float transparentOutlineFlag = 0.0; 1091 1092 for (int y = -1; y <= 1; y++) { 1093 for (int x = -1; x <= 1; x++) { 1094 vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize; 1095 1096 // Opaque 1097 float sampleDepthOpaque = getDepthOpaque(sampleCoords); 1098 float sampleViewZOpaque = isBackground(sampleDepthOpaque) ? backgroundViewZ : getViewZ(sampleDepthOpaque); 1099 if (abs(selfViewZOpaque - sampleViewZOpaque) > pixelSizeOpaque && selfDepthOpaque > sampleDepthOpaque && sampleDepthOpaque <= bestOpaqueDepth) { 1100 bestOpaqueDepth = sampleDepthOpaque; 1101 opaqueOutlineFlag = 1.0; 1102 } 1103 1104 // Transparent 1105 vec2 sampleDepthTransparentWithAlpha = getDepthTransparentWithAlpha(sampleCoords); 1106 float sampleDepthTransparent = sampleDepthTransparentWithAlpha.x; 1107 float sampleAlphaTransparent = sampleDepthTransparentWithAlpha.y; 1108 float sampleViewZTransparent = isBackground(sampleDepthTransparent) ? backgroundViewZ : getViewZ(sampleDepthTransparent); 1109 if (abs(selfViewZTransparent - sampleViewZTransparent) > pixelSizeTransparent && selfDepthTransparent > sampleDepthTransparent && sampleDepthTransparent <= bestTransparentDepth) { 1110 bestTransparentDepth = sampleDepthTransparent; 1111 bestTransparentAlpha = sampleAlphaTransparent; 1112 transparentOutlineFlag = 1.0; 1113 } 1114 } 1115 } 1116 1117 if (transparentOutlineFlag > 0.0 && abs(selfViewZOpaque - getViewZ(bestTransparentDepth)) < pixelSizeOpaque) { // Disable transparent outline close to opaque elements 1118 transparentOutlineFlag = 0.0; 1119 } 1120 1121 // lazy curvature veto: only compute if an outline was found and center is not background 1122 const float kCurvatureGate = 0.75; 1123 vec2 dx = vec2(invTexSize.x, 0.0); 1124 vec2 dy = vec2(0.0, invTexSize.y); 1125 1126 if (opaqueOutlineFlag > 0.0 && !isBackground(selfDepthOpaque)) { 1127 float dL = getDepthOpaque(coords - dx); 1128 float dR = getDepthOpaque(coords + dx); 1129 float dU = getDepthOpaque(coords + dy); 1130 float dD = getDepthOpaque(coords - dy); 1131 1132 float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL); 1133 float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR); 1134 float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU); 1135 float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD); 1136 1137 float ddx = abs(vzL + vzR - 2.0 * selfViewZOpaque); 1138 float ddy = abs(vzU + vzD - 2.0 * selfViewZOpaque); 1139 float curvOpaque = max(ddx, ddy); 1140 1141 if (curvOpaque < pixelSizeOpaque * kCurvatureGate) { 1142 opaqueOutlineFlag = 0.0; 1143 bestOpaqueDepth = 1.0; 1144 } 1145 } 1146 1147 if (transparentOutlineFlag >
1147 0.0 && !isBackground(selfDepthTransparent)) { 1148 vec2 daL = getDepthTransparentWithAlpha(coords - dx); 1149 vec2 daR = getDepthTransparentWithAlpha(coords + dx); 1150 vec2 daU = getDepthTransparentWithAlpha(coords + dy); 1151 vec2 daD = getDepthTransparentWithAlpha(coords - dy); 1152 1153 float dL = daL.x; 1154 float dR = daR.x; 1155 float dU = daU.x; 1156 float dD = daD.x; 1157 1158 float vzL = isBackground(dL) ? backgroundViewZ : getViewZ(dL); 1159 float vzR = isBackground(dR) ? backgroundViewZ : getViewZ(dR); 1160 float vzU = isBackground(dU) ? backgroundViewZ : getViewZ(dU); 1161 float vzD = isBackground(dD) ? backgroundViewZ : getViewZ(dD); 1162 1163 float ddx = abs(vzL + vzR - 2.0 * selfViewZTransparent); 1164 float ddy = abs(vzU + vzD - 2.0 * selfViewZTransparent); 1165 float curvTransparent = max(ddx, ddy); 1166 1167 if (curvTransparent < pixelSizeTransparent * kCurvatureGate) { 1168 transparentOutlineFlag = 0.0; 1169 bestTransparentDepth = 1.0; 1170 bestTransparentAlpha = 0.0; 1171 } 1172 } 1173 1174 vec2 depthPacked; // Pack depth in G/B channels 1175 float outlineTypeFlag = 0.0; 1176 if (opaqueOutlineFlag > 0.0 && transparentOutlineFlag > 0.0) { 1177 outlineTypeFlag = 0.75; // Both 1178 depthPacked = packUnitIntervalToRG(bestOpaqueDepth); 1179 } else if (transparentOutlineFlag > 0.0) { 1180 outlineTypeFlag = 0.5; // Transparent only 1181 depthPacked = packUnitIntervalToRG(bestTransparentDepth); 1182 } else if (opaqueOutlineFlag > 0.0) { 1183 outlineTypeFlag = 0.25; // Opaque only 1184 depthPacked = packUnitIntervalToRG(bestOpaqueDepth); 1185 } 1186 1187 float alpha = clamp(bestTransparentAlpha, 0.0, 0.5) * 2.0; // limiting to range [0.0, 0.5] to improve alpha precision since we don't need a wider range 1188 float packedFlagWithAlpha = pack2x4(vec2(outlineTypeFlag, alpha)); // pack outlineType with alpha 1189 gl_FragColor = vec4(packedFlagWithAlpha, depthPacked.x, depthPacked.y, bestTransparentDepth); 1190} 1191`;var f=r(48502),m=r(70371);let h={scale:c.e.Numeric(1,{min:1,max:5,step:1}),threshold:c.e.Numeric(.33,{min:.01,max:1,step:.01}),color:c.e.Color((0,m.Il)(0)),includeTransparent:c.e.Boolean(!0,{description:"Whether to show outline for transparent objects"})};class g{static isEnabled(e){return e.enabled&&"off"!==e.outline.name}constructor(e,t,r,n,c){this.webgl=e,this.target=e.createRenderTarget(t,r,!1),this.renderable=function(e,t,r,n){let c=t.getWidth(),f=t.getHeight(),m={...a.GE,tDepthOpaque:o.IO.create(t),tDepthTransparent:o.IO.create(r),uTexSize:o.IO.create(u.Sg.create(c,f)),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),uInvProjection:o.IO.create(u.yb.identity()),uOutlineThreshold:o.IO.create(.33),dTransparentOutline:o.IO.create(n)},h={...b},g=(0,i.Lq)("outlines",d.C,p),y=(0,s.s8)(e,"triangles",g,h,m);return(0,l.T)(y,m)}(e,c,n,!0)}getByteCount(){return this.target.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a){var n;let i=!1,s="orthographic"===e.state.mode?1:0,l=this.renderable.values.uInvProjection.ref.value;u.yb.invert(l,e.projection);let c=null===(n=t.includeTransparent)||void 0===n||n,d=Math.max(1,Math.round(t.scale*this.webgl.pixelRatio))-1,p=50*t.threshold*this.webgl.pixelRatio;return o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFar,e.far),o.IO.update(this.renderable.values.uInvProjection,l),this.renderable.values.dTransparentOutline.ref.value!==c&&(i=!0,o.IO.update(this.renderable.values.dTransparentOutline,c)),this.renderable.values.dOrthographic.ref.value!==s&&(i=!0,o.IO.update(this.renderable.values.dOrthographic,s)),o.IO.updateIfChanged(this.renderable.values.uOutlineThreshold,p),this.renderable.values.tDepthTransparent.ref.value!==r&&(i=!0,o.IO.update(this.renderable.values.tDepthTransparent,r)),this.renderable.values.tDepthOpaque.ref.value!==a&&(i=!0,o.IO.update(this.renderable.values.tDepthOpaque,a)),i&&this.renderable.update(
1191),{transparentOutline:c,outlineScale:d}}render(){f.kM&&this.webgl.timer.mark("OutlinePass.render"),this.target.bind(),this.renderable.render(),f.kM&&this.webgl.timer.markEnd("OutlinePass.render")}}let b={...a.iz,tDepthOpaque:(0,n.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uInvProjection:(0,n.wt)("m4"),uOutlineThreshold:(0,n.wt)("f"),dTransparentOutline:(0,n.O0)("boolean")}},32799:function(e,t,r){r.d(t,{xt:function(){return eN},yM:function(){return eL},hq:function(){return ez}});var a=r(68971),n=r(18406),i=r(45705),o=r(85764),s=r(57155),l=r(62113),u=r(87144),c=r(14086),d=r(10410);let p=` 1192precision highp float; 1193precision highp int; 1194precision highp sampler2D; 1195 1196uniform sampler2D tSsaoDepth; 1197uniform sampler2D tSsaoDepthTransparent; 1198uniform sampler2D tColor; 1199uniform sampler2D tTransparentColor; 1200uniform sampler2D tDepthOpaque; 1201uniform sampler2D tDepthTransparent; 1202uniform sampler2D tShadows; 1203uniform sampler2D tOutlines; 1204uniform vec2 uTexSize; 1205 1206uniform float uNear; 1207uniform float uFar; 1208uniform float uFogNear; 1209uniform float uFogFar; 1210uniform vec3 uFogColor; 1211uniform vec3 uOutlineColor; 1212uniform vec3 uOcclusionColor; 1213uniform bool uTransparentBackground; 1214uniform vec2 uOcclusionOffset; 1215 1216#include common 1217 1218float getViewZ(const in float depth) { 1219 #if dOrthographic == 1 1220 return orthographicDepthToViewZ(depth, uNear, uFar); 1221 #else 1222 return perspectiveDepthToViewZ(depth, uNear, uFar); 1223 #endif 1224} 1225 1226float getDepthOpaque(const in vec2 coords) { 1227 #ifdef depthTextureSupport 1228 return texture2D(tDepthOpaque, coords).r; 1229 #else 1230 return unpackRGBAToDepth(texture2D(tDepthOpaque, coords)); 1231 #endif 1232} 1233 1234float getDepthTransparent(const in vec2 coords) { 1235 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x; 1236} 1237 1238bool isBackground(const in float depth) { 1239 return depth == 1.0; 1240} 1241 1242int squaredOutlineScale = dOutlineScale * dOutlineScale; 1243void getOutline(const in vec2 coords, out bool hasOpaque, out bool hasTransparent, out float opaqueDepth, out float transparentDepth, out float alpha) { 1244 vec2 invTexSize = 1.0 / uTexSize; 1245 1246 hasOpaque = false; 1247 hasTransparent = false; 1248 opaqueDepth = 1.0; 1249 transparentDepth = 1.0;
1250 alpha = 0.0; 1251 for (int y = -dOutlineScale; y <= dOutlineScale; y++) { 1252 for (int x = -dOutlineScale; x <= dOutlineScale; x++) { 1253 if (x * x + y * y > squaredOutlineScale) { 1254 continue; 1255 } 1256 1257 vec2 sampleCoords = coords + vec2(float(x), float(y)) * invTexSize; 1258 1259 vec4 sampleOutlineCombined = texture2D(tOutlines, sampleCoords); 1260 float sampleOpaqueDepth = unpackRGToUnitInterval(sampleOutlineCombined.gb); 1261 float sampleTransparentDepth = sampleOutlineCombined.a; 1262 vec2 sampleFlagWithAlpha = unpack2x4(sampleOutlineCombined.r); 1263 1264 float sampleFlag = sampleFlagWithAlpha.x; 1265 float sampleAlpha = clamp(sampleFlagWithAlpha.y * 0.5, 0.01, 1.0); 1266 1267 if ((sampleFlag > 0.20 && sampleFlag < 0.30) || (sampleFlag > 0.70 && sampleFlag < 0.80)) { // transparent || both 1268 if (sampleOpaqueDepth < opaqueDepth) { 1269 hasOpaque = true; 1270 opaqueDepth = sampleOpaqueDepth; 1271 } 1272 } 1273 1274 if ((((sampleFlag > 0.45 && sampleFlag < 0.55) || (sampleFlag > 0.70 && sampleFlag < 0.80))) && sampleTransparentDepth < transparentDepth) { // transparent || both 1275 hasTransparent = true; 1276 transparentDepth = sampleTransparentDepth; 1277 alpha = sampleAlpha; 1278 } 1279 } 1280 } 1281} 1282 1283float getSsao(vec2 coords) { 1284 float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepth, coords).xy); 1285 if (rawSsao > 0.999) { 1286 return 1.0; 1287 } else if (rawSsao > 0.001) { 1288 return rawSsao; 1289 } 1290 // treat values close to 0.0 as errors and return no occlusion 1291 return 1.0; 1292} 1293 1294float getSsaoTransparent(vec2 coords) { 1295 float rawSsao = unpackRGToUnitInterval(texture2D(tSsaoDepthTransparent, coords).xy); 1296 if (rawSsao > 0.999) { 1297 return 1.0; 1298 } else if (rawSsao > 0.001) { 1299 return rawSsao; 1300 } 1301 // treat values close to 0.0 as errors and return no occlusion 1302 return 1.0; 1303} 1304 1305void main(void) { 1306 vec2 coords = gl_FragCoord.xy / uTexSize; 1307 vec4 color = texture2D(tColor, coords);
1308 1309 float opaqueDepth = getDepthOpaque(coords); 1310 float transparentDepth = 1.0; 1311 #ifdef dBlendTransparency 1312 bool blendTransparency = true; 1313 vec4 transparentColor = texture2D(tTransparentColor, coords); 1314 1315 #if defined(dOutlineEnable) || defined(dOcclusionEnable) && defined(dOcclusionIncludeTransparency) 1316 transparentDepth = getDepthTransparent(coords); 1317 #endif 1318 #endif 1319 1320 #if defined(dOcclusionEnable) || defined(dShadowEnable) 1321 bool isOpaqueBackground = isBackground(opaqueDepth); 1322 float viewDist = abs(getViewZ(opaqueDepth)); 1323 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 1324 #endif 1325 1326 #if defined(dOcclusionEnable) 1327 if (!isOpaqueBackground) { 1328 float occlusionFactor = getSsao(coords + uOcclusionOffset); 1329 1330 if (!uTransparentBackground) { 1331 color.rgb = mix(mix(uOcclusionColor, uFogColor, fogFactor), color.rgb, occlusionFactor); 1332 } else { 1333 color.rgb = mix(uOcclusionColor * (1.0 - fogFactor), color.rgb, occlusionFactor); 1334 } 1335 } 1336 #if defined(dBlendTransparency) && defined(dOcclusionIncludeTransparency) 1337 if (!isBackground(transparentDepth)) { 1338 float viewDist = abs(getViewZ(transparentDepth)); 1339 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 1340 float occlusionFactor = getSsaoTransparent(coords + uOcclusionOffset); 1341 transparentColor.rgb = mix(uOcclusionColor * (1.0 - fogFactor), transparentColor.rgb, occlusionFactor); 1342 } 1343 #endif 1344 #endif 1345 1346 #ifdef dShadowEnable
1347 if (!isOpaqueBackground) { 1348 vec4 shadow = texture2D(tShadows, coords); 1349 if (!uTransparentBackground) { 1350 color.rgb = mix(mix(vec3(0), uFogColor, fogFactor), color.rgb, shadow.a); 1351 } else { 1352 color.rgb = mix(vec3(0) * (1.0 - fogFactor), color.rgb, shadow.a); 1353 } 1354 } 1355 #endif 1356 1357 // outline needs to be handled after occlusion and shadow to keep them clean 1358 #ifdef dOutlineEnable 1359 bool hasOpaque; 1360 bool hasTransparent; 1361 float outlineOpaqueDepth; 1362 float outlineTransparentDepth; 1363 float outlineAlpha; 1364 getOutline(coords, hasOpaque, hasTransparent, outlineOpaqueDepth, outlineTransparentDepth, outlineAlpha); 1365 1366 if (hasOpaque) { 1367 float viewDist = abs(getViewZ(outlineOpaqueDepth)); 1368 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 1369 if (!uTransparentBackground) { 1370 color.rgb = mix(uOutlineColor, uFogColor, fogFactor); 1371 } else { 1372 color.a = 1.0 - fogFactor; 1373 color.rgb = mix(uOutlineColor, vec3(0.0), fogFactor); 1374 } 1375 } 1376 1377 #ifdef dBlendTransparency 1378 if (hasTransparent) { 1379 if (hasOpaque && outlineOpaqueDepth < outlineTransparentDepth) { 1380 blendTransparency = false; 1381 } else { 1382 float finalOutlineAlpha = clamp(outlineAlpha * 2.0, 0.0, 1.0); 1383 float viewDist = abs(getViewZ(outlineTransparentDepth)); 1384 float fogFactor = smoothstep(uFogNear, uFogFar, viewDist); 1385 float finalAlpha = max(transparentColor.a, finalOutlineAlpha * (1.0 - fogFactor)); 1386 transparentColor.a = finalAlpha; 1387 transparentColor.rgb = uOutlineColor * finalAlpha; 1388 } 1389 } 1390 #endif 1391 #endif 1392 1393 #ifdef dBlendTransparency 1394 if (blendTransparency) { 1395 float alpha = transparentColor.a; 1396 if (alpha != 0.0) { 1397 // blending 1398 color = transparentColor + color * (1.0 - alpha); 1399 } 1400 } 1401 #endif 1402 1403 gl_FragColor = color; 1404} 1405`;var f=r(70371);let m=` 1406precision highp float; 1407precision highp int; 1408precision highp sampler2D; 1409 1410uniform sampler2D tColor; 1411uniform vec2 uTexSizeInv; 1412 1413// adapted from https://github.com/kosua20/Rendu 1414// MIT License Copyright (c) 2017 Simon Rodriguez 1415 1416#define QUALITY(q) ((q) < 5 ? 1.0 : ((q) > 5 ? ((q) < 10 ? 2.0 : ((q) < 11 ? 4.0 : 8.0)) : 1.5)) 1417 1418float rgb2luma(vec3 rgb){ 1419 return sqrt(dot(rgb, vec3(0.299, 0.587, 0.114))); 1420} 1421 1422float sampleLuma(vec2 uv) { 1423 return rgb2luma(texture2D(tColor, uv).rgb); 1424} 1425 1426float sampleLuma(vec2 uv, float uOffset, float vOffset) { 1427 uv += uTexSizeInv * vec2(uOffset, vOffset); 1428 return sampleLuma(uv); 1429} 1430 1431void main(void) { 1432 vec2 coords = gl_FragCoord.xy * uTexSizeInv; 1433 vec2 inverseScreenSize = uTexSizeInv; 1434 1435 vec4 colorCenter = texture2D(tColor, coords);
1436 1437 // Luma at the current fragment 1438 float lumaCenter = rgb2luma(colorCenter.rgb); 1439 1440 // Luma at the four direct neighbours of the current fragment. 1441 float lumaDown = sampleLuma(coords, 0.0, -1.0); 1442 float lumaUp = sampleLuma(coords, 0.0, 1.0); 1443 float lumaLeft = sampleLuma(coords, -1.0, 0.0); 1444 float lumaRight = sampleLuma(coords, 1.0, 0.0); 1445 1446 // Find the maximum and minimum luma around the current fragment. 1447 float lumaMin = min(lumaCenter, min(min(lumaDown, lumaUp), min(lumaLeft, lumaRight))); 1448 float lumaMax = max(lumaCenter, max(max(lumaDown, lumaUp), max(lumaLeft, lumaRight))); 1449 1450 // Compute the delta. 1451 float lumaRange = lumaMax - lumaMin; 1452 1453 // If the luma variation is lower that a threshold (or if we are in a really dark area), 1454 // we are not on an edge, don't perform any AA. 1455 if (lumaRange < max(dEdgeThresholdMin, lumaMax * dEdgeThresholdMax)) { 1456 gl_FragColor = colorCenter; 1457 return; 1458 } 1459 1460 // Query the 4 remaining corners lumas. 1461 float lumaDownLeft = sampleLuma(coords, -1.0, -1.0); 1462 float lumaUpRight = sampleLuma(coords, 1.0, 1.0); 1463 float lumaUpLeft = sampleLuma(coords, -1.0, 1.0); 1464 float lumaDownRight = sampleLuma(coords, 1.0, -1.0); 1465 1466 // Combine the four edges lumas (using intermediary variables for future computations 1467 // with the same values). 1468 float lumaDownUp = lumaDown + lumaUp; 1469 float lumaLeftRight = lumaLeft + lumaRight; 1470 1471 // Same for corners 1472 float lumaLeftCorners = lumaDownLeft + lumaUpLeft; 1473 float lumaDownCorners = lumaDownLeft + lumaDownRight; 1474 float lumaRightCorners = lumaDownRight + lumaUpRight; 1475 float lumaUpCorners = lumaUpRight + lumaUpLeft; 1476 1477 // Compute an estimation of the gradient along the horizontal and vertical axis. 1478 float edgeHorizontal = abs(-2.0 * lumaLeft + lumaLeftCorners) + abs(-2.0 * lumaCenter + lumaDownUp) * 2.0 + abs(-2.0 * lumaRight + lumaRightCorners); 1479 float edgeVertical = abs(-2.0 * lumaUp + lumaUpCorners) + abs(-2.0 * lumaCenter + lumaLeftRight) * 2.0 + abs(-2.0 * lumaDown + lumaDownCorners); 1480 1481 // Is the local edge horizontal or vertical ? 1482 bool isHorizontal = (edgeHorizontal >= edgeVertical); 1483 1484 // Choose the step size (one pixel) accordingly. 1485 float stepLength = isHorizontal ? inverseScreenSize.y : inverseScreenSize.x; 1486 1487 // Select the two neighboring texels lumas in the opposite direction to the local edge. 1488 float luma1 = isHorizontal ? lumaDown : lumaLeft; 1489 float luma2 = isHorizontal ? lumaUp : lumaRight; 1490 // Compute gradients in this direction. 1491 float gradient1 = luma1 - lumaCenter; 1492 float gradient2 = luma2 - lumaCenter; 1493 1494 // Which direction is the steepest ? 1495 bool is1Steepest = abs(gradient1) >= abs(gradient2); 1496 1497 // Gradient in the corresponding direction, normalized. 1498 float gradientScaled = 0.25 * max(abs(gradient1), abs(gradient2)); 1499 1500 // Average luma in the correct direction. 1501 float lumaLocalAverage = 0.0; 1502 if(is1Steepest){ 1503 // Switch the direction 1504 stepLength = -stepLength; 1505 lumaLocalAverage = 0.5 * (luma1 + lumaCenter); 1506 } else { 1507 lumaLocalAverage = 0.5 * (luma2 + lumaCenter); 1508 } 1509 1510 // Shift UV in the correct direction by half a pixel. 1511 vec2 currentUv = coords; 1512 if(isHorizontal){ 1513 currentUv.y += stepLength * 0.5; 1514 } else { 1515 currentUv.x += stepLength * 0.5; 1516 } 1517 1518 // Compute offset (for each iteration step) in the right direction. 1519 vec2 offset = isHorizontal ? vec2(inverseScreenSize.x, 0.0) : vec2(0.0, inverseScreenSize.y); 1520 // Compute UVs to explore on each side of the edge, orthogonally. 1521 // The QUALITY allows us to step faster. 1522 vec2 uv1 = currentUv - offset * QUALITY(0); 1523 vec2 uv2 = currentUv + offset * QUALITY(0); 1524 1525 // Read the lumas at both current extremities of the exploration segment, 1526 // and compute the delta wrt to the local average luma. 1527 float lumaEnd1 = sampleLuma(uv1); 1528 float lumaEnd2 = sampleLuma(uv2); 1529 lumaEnd1 -= lumaLocalAverage; 1530 lumaEnd2 -= lumaLocalAverage; 1531 1532 // If the luma deltas at the current extremities is larger than the local gradient, 1533 // we have reached the side of the edge. 1534 bool reached1 = abs(lumaEnd1) >= gradientScaled; 1535 bool reached2 = abs(lumaEnd2) >= gradientScaled; 1536 bool reachedBoth = reached1 && reached2; 1537 1538 // If the side is not reached, we continue to explore in this direction. 1539 if(!reached1){ 1540 uv1 -= offset * QUALITY(1); 1541 } 1542 if(!reached2){ 1543 uv2 += offset * QUALITY(1); 1544 } 1545 1546 // If both sides have not been reached, continue to explore. 1547 if(!reachedBoth){ 1548 for(int i = 2; i < dIterations; i++){ 1549 // If needed, read luma in 1st direction, compute delta. 1550 if(!reached1){ 1551 lumaEnd1 = sampleLuma(uv1); 1552 lumaEnd1 = lumaEnd1 - lumaLocalAverage; 1553 } 1554 // If needed, read luma in opposite direction, compute delta. 1555 if(!reached2){ 1556 lumaEnd2 = sampleLuma(uv2); 1557 lumaEnd2 = lumaEnd2 - lumaLocalAverage; 1558 } 1559 // If the luma deltas at the current extremities is larger than the local gradient, 1560 // we have reached the side of the edge. 1561 reached1 = abs(lumaEnd1) >= gradientScaled; 1562 reached2 = abs(lumaEnd2) >= gradientScaled; 1563 reachedBoth = reached1 && reached2; 1564 1565 // If the side is not reached, we continue to explore in this direction, 1566 // with a variable quality. 1567 if(!reached1){ 1568 uv1 -= offset * QUALITY(i); 1569 } 1570 if(!reached2){ 1571 uv2 += offset * QUALITY(i); 1572 } 1573 1574 // If both sides have been reached, stop the exploration. 1575 if(reachedBoth){ 1576 break; 1577 } 1578 } 1579 } 1580 1581 // Compute the distances to each side edge of the edge (!). 1582 float distance1 = isHorizontal ? (coords.x - uv1.x) : (coords.y - uv1.y); 1583 float distance2 = isHorizontal ? (uv2.x - coords.x) : (uv2.y - coords.y); 1584 1585 // In which direction is the side of the edge closer ? 1586 bool isDirection1 = distance1 < distance2; 1587 float distanceFinal = min(distance1, distance2); 1588 1589 // Thickness of the edge. 1590 float edgeThickness = (distance1 + distance2); 1591 1592 // Is the luma at center smaller than the local average ? 1593 bool isLumaCenterSmaller = lumaCenter < lumaLocalAverage; 1594 1595 // If the luma at center is smaller than at its neighbour,
1596 // the delta luma at each end should be positive (same variation). 1597 bool correctVariation1 = (lumaEnd1 < 0.0) != isLumaCenterSmaller; 1598 bool correctVariation2 = (lumaEnd2 < 0.0) != isLumaCenterSmaller; 1599 1600 // Only keep the result in the direction of the closer side of the edge. 1601 bool correctVariation = isDirection1 ? correctVariation1 : correctVariation2; 1602 1603 // UV offset: read in the direction of the closest side of the edge. 1604 float pixelOffset = - distanceFinal / edgeThickness + 0.5; 1605 1606 // If the luma variation is incorrect, do not offset. 1607 float finalOffset = correctVariation ? pixelOffset : 0.0; 1608 1609 // Sub-pixel shifting 1610 // Full weighted average of the luma over the 3x3 neighborhood. 1611 float lumaAverage = (1.0 / 12.0) * (2.0 * (lumaDownUp + lumaLeftRight) + lumaLeftCorners + lumaRightCorners); 1612 // Ratio of the delta between the global average and the center luma, 1613 // over the luma range in the 3x3 neighborhood. 1614 float subPixelOffset1 = clamp(abs(lumaAverage - lumaCenter) / lumaRange, 0.0, 1.0); 1615 float subPixelOffset2 = (-2.0 * subPixelOffset1 + 3.0) * subPixelOffset1 * subPixelOffset1; 1616 // Compute a sub-pixel offset based on this delta. 1617 float subPixelOffsetFinal = subPixelOffset2 * subPixelOffset2 * float(dSubpixelQuality); 1618 1619 // Pick the biggest of the two offsets. 1620 finalOffset = max(finalOffset, subPixelOffsetFinal); 1621 1622 // Compute the final UV coordinates. 1623 vec2 finalUv = coords; 1624 if(isHorizontal){ 1625 finalUv.y += finalOffset * stepLength; 1626 } else { 1627 finalUv.x += finalOffset * stepLength; 1628 } 1629 1630 // Read the color at the new UV coordinates, and use it. 1631 gl_FragColor = texture2D(tColor, finalUv); 1632} 1633`;var h=r(48502);let g={edgeThresholdMin:c.e.Numeric(.0312,{min:.0312,max:.0833,step:1e-4},{description:"Trims the algorithm from processing darks."}),edgeThresholdMax:c.e.Numeric(.063,{min:.063,max:.333,step:.001},{description:"The minimum amount of local contrast required to apply algorithm."}),iterations:c.e.Numeric(12,{min:0,max:16,step:1},{description:"Number of edge exploration steps."}),subpixelQuality:c.e.Numeric(.3,{min:0,max:1,step:.01},{description:"Choose the amount of sub-pixel aliasing removal."})};class b{constructor(e,t){this.webgl=e,this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),dEdgeThresholdMin:o.IO.create(.0312),dEdgeThresholdMax:o.IO.create(.125),dIterations:o.IO.create(12),dSubpixelQuality:o.IO.create(.3)},c={...y},d=(0,s.s8)(e,"triangles",x,c,i);return(0,l.T)(d,i)}(e,t)}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){o.IO.update(this.renderable.values.uTexSizeInv,u.Sg.set(this.renderable.values.uTexSizeInv.ref.value,1/e,1/t))}update(e,t){let{values:r}=this.renderable,{edgeThresholdMin:a,edgeThresholdMax:n,iterations:i,subpixelQuality:s}=t,l=!1;r.tColor.ref.value!==e&&(o.IO.update(this.renderable.values.tColor,e),l=!0),r.dEdgeThresholdMin.ref.value!==a&&(l=!0),o.IO.updateIfChanged(r.dEdgeThresholdMin,a),r.dEdgeThresholdMax.ref.value!==n&&(l=!0),o.IO.updateIfChanged(r.dEdgeThresholdMax,n),r.dIterations.ref.value!==i&&(l=!0),o.IO.updateIfChanged(r.dIterations,i),r.dSubpixelQuality.ref.value!==s&&(l=!0),o.IO.updateIfChanged(r.dSubpixelQuality,s),l&&this.renderable.update()}render(e,t){h.kM&&this.webgl.timer.mark("FxaaPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("FxaaPass.render")}}let y={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),dEdgeThresholdMin:(0,n.O0)("number"),dEdgeThresholdMax:(0,n.O0)("number"),dIterations:(0,n.O0)("number"),dSubpixelQuality:(0,n.O0)("number")},x=(0,i.Lq)("fxaa",d.C,m);var S=r(91407);let T=` 1634precision highp float; 1635 1636attribute vec2 aPosition; 1637uniform vec2 uQuadScale; 1638 1639uniform vec2 uTexSizeInv; 1640uniform vec4 uViewport; 1641 1642varying vec2 vUv; 1643varying vec4 vOffset[2]; 1644
1645void SMAANeighborhoodBlendingVS(vec2 texCoord) { 1646 vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component 1647 vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component 1648} 1649 1650void main() { 1651 vec2 scale = uViewport.zw * uTexSizeInv; 1652 vec2 shift = uViewport.xy * uTexSizeInv; 1653 vUv = (aPosition + 1.0) * 0.5 * scale + shift; 1654 SMAANeighborhoodBlendingVS(vUv); 1655 vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale; 1656 gl_Position = vec4(position, 0.0, 1.0); 1657} 1658`,C=` 1659precision highp float; 1660precision highp int; 1661precision highp sampler2D; 1662 1663uniform sampler2D tWeights; 1664uniform sampler2D tColor; 1665uniform vec2 uTexSizeInv; 1666 1667varying vec2 vUv; 1668varying vec4 vOffset[2]; 1669 1670vec4 SMAANeighborhoodBlendingPS(vec2 texCoord, vec4 offset[2], sampler2D colorTex, sampler2D blendTex) { 1671 // Fetch the blending weights for current pixel: 1672 vec4 a; 1673 a.xz = texture2D(blendTex, texCoord).xz; 1674 a.y = texture2D(blendTex, offset[1].zw).g; 1675 a.w = texture2D(blendTex, offset[1].xy).a; 1676 1677 // Is there any blending weight with a value greater than 0.0? 1678 if (dot(a, vec4(1.0, 1.0, 1.0, 1.0)) < 1e-5) { 1679 return texture2D(colorTex, texCoord, 0.0); 1680 } else { 1681 // Up to 4 lines can be crossing a pixel (one through each edge). We 1682 // favor blending by choosing the line with the maximum weight for each 1683 // direction: 1684 vec2 offset; 1685 offset.x = a.a > a.b ? a.a : -a.b; // left vs. right 1686 offset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs 1687 1688 // Then we go in the direction that has the maximum weight: 1689 if (abs(offset.x) > abs(offset.y)) { // horizontal vs. vertical 1690 offset.y = 0.0; 1691 } else { 1692 offset.x = 0.0; 1693 } 1694 1695 // Fetch the opposite color and lerp by hand: 1696 vec4 C = texture2D(colorTex, texCoord, 0.0); 1697 texCoord += sign(offset) * uTexSizeInv; 1698 vec4 Cop = texture2D(colorTex, texCoord, 0.0); 1699 float s = abs(offset.x) > abs(offset.y) ? abs(offset.x) : abs(offset.y); 1700 1701 // WebGL port note: Added gamma correction 1702 C.xyz = pow(C.xyz, vec3(2.2)); 1703 Cop.xyz = pow(Cop.xyz, vec3(2.2)); 1704 vec4 mixed = mix(C, Cop, s); 1705 mixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2)); 1706 1707 return mixed; 1708 } 1709} 1710 1711void main() { 1712 gl_FragColor = SMAANeighborhoodBlendingPS(vUv, vOffset, tColor, tWeights); 1713} 1714`,O=` 1715precision highp float; 1716 1717attribute vec2 aPosition; 1718uniform vec2 uQuadScale; 1719 1720uniform vec2 uTexSizeInv; 1721uniform vec4 uViewport; 1722 1723varying vec2 vUv; 1724varying vec4 vOffset[3]; 1725varying vec2 vPixCoord; 1726 1727void SMAABlendingWeightCalculationVS(vec2 texCoord) { 1728 vPixCoord = texCoord / uTexSizeInv; 1729 1730 // We will use these offsets for the searches later on (see @PSEUDO_GATHER4): 1731 vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.25, 0.125, 1.25, 0.125); // WebGL port note: Changed sign in Y and W components 1732 vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-0.125, 0.25, -0.125, -1.25); // WebGL port note: Changed sign in Y and W components 1733 1734 // And these for the searches, they indicate the ends of the loops: 1735 vOffset[2] = vec4(vOffset[0].xz, vOffset[1].yw) + vec4(-2.0, 2.0, -2.0, 2.0) * uTexSizeInv.xxyy * float(dMaxSearchSteps); 1736} 1737 1738void main() { 1739 vec2 scale = uViewport.zw * uTexSizeInv; 1740 vec2 shift = uViewport.xy * uTexSizeInv; 1741 vUv = (aPosition + 1.0) * 0.5 * scale + shift; 1742 SMAABlendingWeightCalculationVS(vUv); 1743 vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale; 1744 gl_Position = vec4(position, 0.0, 1.0); 1745} 1746`,I=` 1747precision highp float; 1748precision highp int; 1749precision highp sampler2D; 1750 1751#define SMAASampleLevelZeroOffset(tex, coord, offset) texture2D(tex, coord + float(offset) * uTexSizeInv, 0.0) 1752 1753#define SMAA_AREATEX_MAX_DISTANCE 16 1754#define SMAA_AREATEX_PIXEL_SIZE (1.0 / vec2(160.0, 560.0)) 1755#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0) 1756 1757uniform sampler2D tEdges; 1758uniform sampler2D tArea; 1759uniform sampler2D tSearch; 1760uniform vec2 uTexSizeInv; 1761 1762varying vec2 vUv; 1763varying vec4 vOffset[3]; 1764varying vec2 vPixCoord; 1765 1766#if __VERSION__ == 100 1767 vec2 round(vec2 x) { 1768 return sign(x) * floor(abs(x) + 0.5);
1769 } 1770#endif 1771 1772float SMAASearchLength(sampler2D searchTex, vec2 e, float bias, float scale) { 1773 // Not required if searchTex accesses are set to point: 1774 // float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0); 1775 // e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE + 1776 // e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE; 1777 e.r = bias + e.r * scale; 1778 return 255.0 * texture2D(searchTex, e, 0.0).r; 1779} 1780 1781float SMAASearchXLeft(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) { 1782 /** 1783 * @PSEUDO_GATHER4 1784 * This texCoord has been offset by (-0.25, -0.125) in the vertex shader to 1785 * sample between edge, thus fetching four edges in a row. 1786 * Sampling with different offsets in each direction allows to disambiguate 1787 * which edges are active from the four fetched ones. 1788 */ 1789 vec2 e = vec2(0.0, 1.0); 1790 1791 for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for 1792 e = texture2D( edgesTex, texCoord, 0.0).rg; 1793 texCoord -= vec2(2.0, 0.0) * uTexSizeInv; 1794 if (!(texCoord.x > end && e.g > 0.8281 && e.r == 0.0)) break; 1795 } 1796 1797 // We correct the previous (-0.25, -0.125) offset we applied: 1798 texCoord.x += 0.25 * uTexSizeInv.x; 1799 1800 // The searches are bias by 1, so adjust the coords accordingly: 1801 texCoord.x += uTexSizeInv.x; 1802 1803 // Disambiguate the length added by the last step: 1804 texCoord.x += 2.0 * uTexSizeInv.x; // Undo last step 1805 texCoord.x -= uTexSizeInv.x * SMAASearchLength(searchTex, e, 0.0, 0.5); 1806 1807 return texCoord.x; 1808} 1809 1810float SMAASearchXRight(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) { 1811 vec2 e = vec2( 0.0, 1.0 ); 1812 1813 for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for 1814 e = texture2D(edgesTex, texCoord, 0.0).rg; 1815 texCoord += vec2(2.0, 0.0) * uTexSizeInv; 1816 if (!(texCoord.x < end && e.g > 0.8281 && e.r == 0.0)) break; 1817 } 1818 1819 texCoord.x -= 0.25 * uTexSizeInv.x; 1820 texCoord.x -= uTexSizeInv.x; 1821 texCoord.x -= 2.0 * uTexSizeInv.x; 1822 texCoord.x += uTexSizeInv.x * SMAASearchLength( searchTex, e, 0.5, 0.5 ); 1823 1824 return texCoord.x; 1825} 1826 1827float SMAASearchYUp(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) { 1828 vec2 e = vec2( 1.0, 0.0 ); 1829 1830 for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for 1831 e = texture2D(edgesTex, texCoord, 0.0).rg; 1832 texCoord += vec2(0.0, 2.0) * uTexSizeInv; // WebGL port note: Changed sign 1833 if (!(texCoord.y > end && e.r > 0.8281 && e.g == 0.0)) break; 1834 } 1835 1836 texCoord.y -= 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign 1837 texCoord.y -= uTexSizeInv.y; // WebGL port note: Changed sign 1838 texCoord.y -= 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign 1839 texCoord.y += uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.0, 0.5); // WebGL port note: Changed sign 1840 1841 return texCoord.y; 1842} 1843 1844float SMAASearchYDown(sampler2D edgesTex, sampler2D searchTex, vec2 texCoord, float end) { 1845 vec2 e = vec2( 1.0, 0.0 ); 1846 1847 for (int i = 0; i < dMaxSearchSteps; i++) { // WebGL port note: Changed while to for 1848 e = texture2D(edgesTex, texCoord, 0.0).rg; 1849 texCoord -= vec2( 0.0, 2.0 ) * uTexSizeInv; // WebGL port note: Changed sign 1850 if (!(texCoord.y < end && e.r > 0.8281 && e.g == 0.0)) break; 1851 } 1852 1853 texCoord.y += 0.25 * uTexSizeInv.y; // WebGL port note: Changed sign 1854 texCoord.y += uTexSizeInv.y; // WebGL port note: Changed sign 1855 texCoord.y += 2.0 * uTexSizeInv.y; // WebGL port note: Changed sign 1856 texCoord.y -= uTexSizeInv.y * SMAASearchLength(searchTex, e.gr, 0.5, 0.5); // WebGL port note: Changed sign 1857 1858 return texCoord.y; 1859} 1860 1861vec2 SMAAArea(sampler2D areaTex, vec2 dist, float e1, float e2, float offset) { 1862 // Rounding prevents precision errors of bilinear filtering: 1863 vec2 texCoord = float(SMAA_AREATEX_MAX_DISTANCE) * round(4.0 * vec2(e1, e2)) + dist; 1864 1865 // We do a scale and bias for mapping to texel space: 1866 texCoord = SMAA_AREATEX_PIXEL_SIZE * texCoord + (0.5 * SMAA_AREATEX_PIXEL_SIZE); 1867 1868 // Move to proper place, according to the subpixel offset: 1869 texCoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset; 1870 1871 return texture2D(areaTex, texCoord, 0.0).rg; 1872} 1873 1874vec4 SMAABlendingWeightCalculationPS(vec2 texCoord, vec2 pixCoord, vec4 offset[3], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices) { 1875 vec4 weights = vec4(0.0, 0.0, 0.0, 0.0); 1876 1877 vec2 e = texture2D(edgesTex, texCoord).rg; 1878 1879 if (e.g > 0.0) { // Edge at north 1880 vec2 d; 1881 1882 // Find the distance to the left: 1883 vec2 coords; 1884 coords.x = SMAASearchXLeft(edgesTex, searchTex, offset[0].xy, offset[2].x ); 1885 coords.y = offset[1].y; // offset[1].y = texCoord.y - 0.25 * uTexSizeInv.y (@CROSSING_OFFSET) 1886 d.x = coords.x; 1887 1888 // Now fetch the left crossing edges, two at a time using bilinear 1889 // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to 1890 // discern what value each edge has:
1891 float e1 = texture2D(edgesTex, coords, 0.0).r; 1892 1893 // Find the distance to the right: 1894 coords.x = SMAASearchXRight(edgesTex, searchTex, offset[0].zw, offset[2].y); 1895 d.y = coords.x; 1896 1897 // We want the distances to be in pixel units (doing this here allow to 1898 // better interleave arithmetic and memory accesses): 1899 d = d / uTexSizeInv.x - pixCoord.x; 1900 1901 // SMAAArea below needs a sqrt, as the areas texture is compressed 1902 // quadratically: 1903 vec2 sqrt_d = sqrt(abs(d)); 1904 1905 // Fetch the right crossing edges: 1906 coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added 1907 float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(1, 0)).r; 1908 1909 // Ok, we know how this pattern looks like, now it is time for getting 1910 // the actual area: 1911 weights.rg = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.y)); 1912 } 1913 1914 if (e.r > 0.0) { // Edge at west 1915 vec2 d; 1916 1917 // Find the distance to the top: 1918 vec2 coords; 1919 1920 coords.y = SMAASearchYUp(edgesTex, searchTex, offset[1].xy, offset[2].z ); 1921 coords.x = offset[0].x; // offset[1].x = texCoord.x - 0.25 * uTexSizeInv.x; 1922 d.x = coords.y; 1923 1924 // Fetch the top crossing edges: 1925 float e1 = texture2D(edgesTex, coords, 0.0).g; 1926 1927 // Find the distance to the bottom: 1928 coords.y = SMAASearchYDown(edgesTex, searchTex, offset[1].zw, offset[2].w); 1929 d.y = coords.y; 1930 1931 // We want the distances to be in pixel units: 1932 d = d / uTexSizeInv.y - pixCoord.y; 1933 1934 // SMAAArea below needs a sqrt, as the areas texture is compressed 1935 // quadratically: 1936 vec2 sqrt_d = sqrt(abs(d)); 1937 1938 // Fetch the bottom crossing edges: 1939 coords.y -= 1.0 * uTexSizeInv.y; // WebGL port note: Added 1940 float e2 = SMAASampleLevelZeroOffset(edgesTex, coords, ivec2(0, 1)).g; 1941 1942 // Get the area for this direction: 1943 weights.ba = SMAAArea(areaTex, sqrt_d, e1, e2, float(subsampleIndices.x)); 1944 } 1945 1946 return weights; 1947} 1948 1949void main() { 1950 gl_FragColor = SMAABlendingWeightCalculationPS(vUv, vPixCoord, vOffset, tEdges, tArea, tSearch, ivec4(0.0)); 1951} 1952`,A=` 1953precision highp float; 1954 1955attribute vec2 aPosition; 1956uniform vec2 uQuadScale; 1957 1958uniform vec2 uTexSizeInv; 1959uniform vec4 uViewport; 1960 1961varying vec2 vUv; 1962varying vec4 vOffset[3]; 1963 1964void SMAAEdgeDetectionVS(vec2 texCoord) { 1965 vOffset[0] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-1.0, 0.0, 0.0, 1.0); // WebGL port note: Changed sign in W component 1966 vOffset[1] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(1.0, 0.0, 0.0, -1.0); // WebGL port note: Changed sign in W component 1967 vOffset[2] = texCoord.xyxy + uTexSizeInv.xyxy * vec4(-2.0, 0.0, 0.0, 2.0); // WebGL port note: Changed sign in W component 1968} 1969 1970void main() { 1971 vec2 scale = uViewport.zw * uTexSizeInv; 1972 vec2 shift = uViewport.xy * uTexSizeInv; 1973 vUv = (aPosition + 1.0) * 0.5 * scale + shift; 1974 SMAAEdgeDetectionVS(vUv); 1975 vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale; 1976 gl_Position = vec4(position, 0.0, 1.0); 1977} 1978`,w=` 1979precision highp float; 1980precision highp int; 1981precision highp sampler2D; 1982 1983uniform sampler2D tColor; 1984uniform vec2 uTexSizeInv; 1985 1986varying vec2 vUv; 1987varying vec4 vOffset[3]; 1988 1989vec4 SMAAColorEdgeDetectionPS(vec2 texcoord, vec4 offset[3], sampler2D colorTex) { 1990 vec2 threshold = vec2(dEdgeThreshold, dEdgeThreshold); 1991 1992 // Calculate color deltas: 1993 vec4 delta; 1994 vec3 C = texture2D(colorTex, texcoord).rgb; 1995 1996 vec3 Cleft = texture2D(colorTex, offset[0].xy).rgb; 1997 vec3 t = abs(C - Cleft); 1998 delta.x = max(max(t.r, t.g), t.b); 1999 2000 vec3 Ctop = texture2D(colorTex, offset[0].zw).rgb; 2001 t = abs(C - Ctop); 2002 delta.y = max(max(t.r, t.g), t.b); 2003 2004 // We do the usual threshold: 2005 vec2 edges = step(threshold, delta.xy); 2006 2007 // Then discard if there is no edge: 2008 if (dot(edges, vec2(1.0, 1.0 )) == 0.0) 2009 discard; 2010 2011 // Calculate right and bottom deltas: 2012 vec3 Cright = texture2D(colorTex, offset[1].xy).rgb; 2013 t = abs( C - Cright ); 2014 delta.z = max(max(t.r, t.g), t.b); 2015 2016 vec3 Cbottom = texture2D(colorTex, offset[1].zw).rgb; 2017 t = abs(C - Cbottom); 2018 delta.w = max(max(t.r, t.g), t.b); 2019 2020 // Calculate the maximum delta in the direct neighborhood: 2021 float maxDelta = max(max(max(delta.x, delta.y), delta.z), delta.w ); 2022 2023 // Calculate left-left and top-top deltas: 2024 vec3 Cleftleft = texture2D(colorTex, offset[2].xy).rgb; 2025 t = abs( C - Cleftleft ); 2026 delta.z = max(max(t.r, t.g), t.b); 2027 2028 vec3 Ctoptop = texture2D(colorTex, offset[2].zw).rgb; 2029 t = abs(C - Ctoptop); 2030 delta.w = max(max(t.r, t.g), t.b); 2031 2032 // Calculate the final maximum delta: 2033 maxDelta = max(max(maxDelta, delta.z), delta.w); 2034 2035 // Local contrast adaptation in action: 2036 edges.xy *= step(0.5 * maxDelta, delta.xy); 2037 2038 return vec4(edges, 0.0, 0.0); 2039} 2040 2041void main() { 2042 gl_FragColor = SMAAColorEdgeDetectionPS(vUv, vOffset, tColor); 2043} 2044`;var D=r(85409);let E={edgeThreshold:c.e.Numeric(.1,{min:.05,max:.15,step:.01}),maxSearchSteps:c.e.Numeric(16,{min:0,max:32,step:1})};class M{get supported(){return this._supported}constructor(e,t){if(this.webgl=e,this._supported=!1,"undefined"==typeof HTMLImageElement){h.Au&&console.log('Missing "HTMLImageElement" required for "SMAA"');return}
2044let r=t.getWidth(),n=t.getHeight();this.edgesTarget=e.createRenderTarget(r,n,!1,"uint8","linear"),this.weightsTarget=e.createRenderTarget(r,n,!1,"uint8","linear"),this.edgesRenderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uViewport:o.IO.create((0,u.T8)()),dEdgeThreshold:o.IO.create(.1)},c={...P},d=(0,s.s8)(e,"triangles",k,c,i);return(0,l.T)(d,i)}(e,t),this.weightsRenderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i=e.resources.texture("image-uint8","rgb","ubyte","linear"),c=e.resources.texture("image-uint8","rgba","ubyte","nearest"),d={...a.GE,tEdges:o.IO.create(t),tArea:o.IO.create(i),tSearch:o.IO.create(c),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uViewport:o.IO.create((0,u.T8)()),dMaxSearchSteps:o.IO.create(16)};(0,S.eP)(
vendor: 44,296 bytes, line 2044
2044"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAIAAACOVPcQAACBeklEQVR42u39W4xlWXrnh/3WWvuciIzMrKxrV8/0rWbY0+SQFKcb4owIkSIFCjY9AC1BT/LYBozRi+EX+cV+8IMsYAaCwRcBwjzMiw2jAWtgwC8WR5Q8mDFHZLNHTarZGrLJJllt1W2qKrsumZWZcTvn7L3W54e1vrXX3vuciLPPORFR1XE2EomorB0nVuz//r71re/y/1eMvb4Cb3N11xV/PP/2v4UBAwJG/7H8urx6/25/Gf8O5hypMQ0EEEQwAqLfoN/Z+97f/SW+/NvcgQk4sGBJK6H7N4PFVL+K+e0N11yNfkKvwUdwdlUAXPHHL38oa15f/i/46Ih6SuMSPmLAYAwyRKn7dfMGH97jaMFBYCJUgotIC2YAdu+LyW9vvubxAP8kAL8H/koAuOKP3+q6+xGnd5kdYCeECnGIJViwGJMAkQKfDvB3WZxjLKGh8VSCCzhwEWBpMc5/kBbjawT4HnwJfhr+pPBIu7uu+OOTo9vsmtQcniMBGkKFd4jDWMSCRUpLjJYNJkM+IRzQ+PQvIeAMTrBS2LEiaiR9b/5PuT6Ap/AcfAFO4Y3dA3DFH7/VS+M8k4baEAQfMI4QfbVDDGIRg7GKaIY52qAjTAgTvGBAPGIIghOCYAUrGFNgzA7Q3QhgCwfwAnwe5vDejgG44o/fbm1C5ZlYQvQDARPAIQGxCWBM+wWl37ZQESb4gImexGMDouhGLx1Cst0Saa4b4AqO4Hk4gxo+3DHAV/nx27p3JziPM2pVgoiia5MdEzCGULprIN7gEEeQ5IQxEBBBQnxhsDb5auGmAAYcHMA9eAAz8PBol8/xij9+C4Djlim4gJjWcwZBhCBgMIIYxGAVIkH3ZtcBuLdtRFMWsPGoY9rN+HoBji9VBYdwD2ZQg4cnO7OSq/z4rU5KKdwVbFAjNojCQzTlCLPFSxtamwh2jMUcEgg2Wm/6XgErIBhBckQtGN3CzbVacERgCnfgLswhnvqf7QyAq/z4rRZm1YglYE3affGITaZsdIe2FmMIpnOCap25I6jt2kCwCW0D1uAD9sZctNGXcQIHCkINDQgc78aCr+zjtw3BU/ijdpw3zhCwcaONwBvdeS2YZKkJNJsMPf2JKEvC28RXxxI0ASJyzQCjCEQrO4Q7sFArEzjZhaFc4cdv+/JFdKULM4px0DfUBI2hIsy06BqLhGTQEVdbfAIZXYMPesq6VoCHICzUyjwInO4Y411//LYLs6TDa9wvg2CC2rElgAnpTBziThxaL22MYhzfkghz6GAs2VHbbdM91VZu1MEEpupMMwKyVTb5ij9+u4VJG/5EgEMMmFF01cFai3isRbKbzb+YaU/MQbAm2XSMoUPAmvZzbuKYRIFApbtlrfFuUGd6vq2hXNnH78ZLh/iFhsQG3T4D1ib7k5CC6vY0DCbtrohgLEIClXiGtl10zc0CnEGIhhatLBva7NP58Tvw0qE8yWhARLQ8h4+AhQSP+I4F5xoU+VilGRJs6wnS7ruti/4KvAY/CfdgqjsMy4pf8fodQO8/gnuX3f/3xi3om1/h7THr+co3x93PP9+FBUfbNUjcjEmhcrkT+8K7ml7V10Jo05mpIEFy1NmCJWx9SIKKt+EjAL4Ez8EBVOB6havuT/rByPvHXK+9zUcfcbb254+9fydJknYnRr1oGfdaiAgpxu1Rx/Rek8KISftx3L+DfsLWAANn8Hvw0/AFeAGO9DFV3c6D+CcWbL8Dj9e7f+T1k8AZv/d7+PXWM/Z+VvdCrIvuAKO09RpEEQJM0Ci6+B4xhTWr4cZNOvhktabw0ta0rSJmqz3Yw5/AKXwenod7cAhTmBSPKf6JBdvH8IP17h95pXqw50/+BFnj88fev4NchyaK47OPhhtI8RFSvAfDSNh0Ck0p2gLxGkib5NJj/JWCr90EWQJvwBzO4AHcgztwAFN1evHPUVGwfXON+0debT1YeGON9Yy9/63X+OguiwmhIhQhD7l4sMqlG3D86Suc3qWZ4rWjI1X7u0Ytw6x3rIMeIOPDprfe2XzNgyj6PahhBjO4C3e6puDgXrdg+/5l948vF3bqwZetZ+z9Rx9zdIY5pInPK4Nk0t+l52xdK2B45Qd87nM8fsD5EfUhIcJcERw4RdqqH7Yde5V7m1vhNmtedkz6EDzUMF/2jJYWbC+4fzzA/Y+/8PPH3j9dcBAPIRP8JLXd5BpAu03aziOL3VVHZzz3CXWDPWd+SH2AnxIqQoTZpo9Ckc6HIrFbAbzNmlcg8Ag8NFDDAhbJvTBZXbC94P7t68EXfv6o+21gUtPETU7bbkLxvNKRFG2+KXzvtObonPP4rBvsgmaKj404DlshFole1Glfh02fE7bYR7dZ82oTewIBGn1Md6CG6YUF26X376oevOLzx95vhUmgblI6LBZwTCDY7vMq0op5WVXgsObOXJ+1x3qaBl9j1FeLxbhU9w1F+Wiba6s1X/TBz1LnUfuYDi4r2C69f1f14BWfP+p+W2GFKuC9phcELMYRRLur9DEZTUdEH+iEqWdaM7X4WOoPGI+ZYD2+wcQ+y+ioHUZ9dTDbArzxmi/bJI9BND0Ynd6lBdve/butBw8+f/T9D3ABa3AG8W3VPX4hBin+bj8dMMmSpp5pg7fJ6xrBFE2WQQEWnV8Qg3FbAWzYfM1rREEnmvkN2o1+acG2d/9u68GDzx91v3mAjb1zkpqT21OipPKO0b9TO5W0nTdOmAQm0TObts3aBKgwARtoPDiCT0gHgwnbArzxmtcLc08HgF1asN0C4Ms/fvD5I+7PhfqyXE/b7RbbrGyRQRT9ARZcwAUmgdoz0ehJ9Fn7QAhUjhDAQSw0bV3T3WbNa59jzmiP6GsWbGXDX2ytjy8+f9T97fiBPq9YeLdBmyuizZHaqXITnXiMUEEVcJ7K4j3BFPurtB4bixW8wTpweL8DC95szWMOqucFYGsWbGU7p3TxxxefP+r+oTVktxY0v5hbq3KiOKYnY8ddJVSBxuMMVffNbxwIOERShst73HZ78DZrHpmJmH3K6sGz0fe3UUj0eyRrSCGTTc+rjVNoGzNSv05srAxUBh8IhqChiQgVNIIBH3AVPnrsnXQZbLTm8ammv8eVXn/vWpaTem5IXRlt+U/LA21zhSb9cye6jcOfCnOwhIAYXAMVTUNV0QhVha9xjgA27ODJbLbmitt3tRN80lqG6N/khgot4ZVlOyO4WNg3OIMzhIZQpUEHieg2im6F91hB3I2tubql6BYNN9Hj5S7G0G2tahslBWKDnOiIvuAEDzakDQKDNFQT6gbn8E2y4BBubM230YIpBnDbMa+y3dx0n1S0BtuG62lCCXwcY0F72T1VRR3t2ONcsmDjbmzNt9RFs2LO2hQNyb022JisaI8rAWuw4HI3FuAIhZdOGIcdjLJvvObqlpqvWTJnnQbyi/1M9O8UxWhBs//H42I0q1Yb/XPGONzcmm+ri172mHKvZBpHkJaNJz6v9jxqiklDj3U4CA2ugpAaYMWqNXsdXbmJNd9egCnJEsphXNM+MnK3m0FCJ5S1kmJpa3DgPVbnQnPGWIDspW9ozbcO4K/9LkfaQO2KHuqlfFXSbdNzcEcwoqNEFE9zcIXu9/6n/ym/BC/C3aJLzEKPuYVlbFnfhZ8kcWxV3dbv4bKl28566wD+8C53aw49lTABp9PWbsB+knfc/Li3eVizf5vv/xmvnPKg5ihwKEwlrcHqucuVcVOxEv8aH37E3ZqpZypUulrHEtIWKUr+txHg+ojZDGlwnqmkGlzcVi1dLiNSJiHjfbRNOPwKpx9TVdTn3K05DBx4psIk4Ei8aCkJahRgffk4YnEXe07T4H2RR1u27E6wfQsBDofUgjFUFnwC2AiVtA+05J2zpiDK2Oa0c5fmAecN1iJzmpqFZxqYBCYhFTCsUNEmUnIcZ6aEA5rQVhEywG6w7HSW02XfOoBlQmjwulOFQAg66SvJblrTEX1YtJ3uG15T/BH1OfOQeuR8g/c0gdpT5fx2SKbs9EfHTKdM8A1GaJRHLVIwhcGyydZsbifAFVKl5EMKNU2Hryo+06BeTgqnxzYjThVySDikbtJPieco75lYfKAJOMEZBTjoITuWHXXZVhcUDIS2hpiXHV9Ku4u44bN5OYLDOkJo8w+xJSMbhBRHEdEs9JZUCkQrPMAvaHyLkxgkEHxiNkx/x2YB0mGsQ8EUWj/stW5YLhtS5SMu+/YBbNPDCkGTUybN8krRLBGPlZkVOA0j+a1+rkyQKWGaPHPLZOkJhioQYnVZ2hS3zVxMtgC46KuRwbJNd9nV2PHgb36F194ecf/Yeu2vAFe5nm/bRBFrnY4BauE8ERmZRFUn0k8hbftiVYSKMEme2dJCJSCGYAlNqh87bXOPdUkGy24P6d1ll21MBqqx48Fvv8ZHH8HZFY7j/uAq1xMJUFqCSUlJPmNbIiNsmwuMs/q9CMtsZsFO6SprzCS1Z7QL8xCQClEelpjTduDMsmWD8S1PT152BtvmIGvUeDA/yRn83u/x0/4qxoPHjx+PXY9pqX9bgMvh/Nz9kpP4pOe1/fYf3axUiMdHLlPpZCNjgtNFAhcHEDxTumNONhHrBduW+vOyY++70WWnPXj98eA4kOt/mj/5E05l9+O4o8ePx67HFqyC+qSSnyselqjZGaVK2TadbFLPWAQ4NBhHqDCCV7OTpo34AlSSylPtIdd2AJZlyzYQrDJ5lcWGNceD80CunPLGGzsfD+7wRb95NevJI5docQ3tgCyr5bGnyaPRlmwNsFELViOOx9loebGNq2moDOKpHLVP5al2cymWHbkfzGXL7kfRl44H9wZy33tvt+PB/Xnf93e+nh5ZlU18wCiRUa9m7kib9LYuOk+hudQNbxwm0AQqbfloimaB2lM5fChex+ylMwuTbfmXQtmWlenZljbdXTLuOxjI/fDDHY4Hjx8/Hrse0zXfPFxbUN1kKqSCCSk50m0Ajtx3ub9XHBKHXESb8iO6E+qGytF4nO0OG3SXzbJlhxBnKtKyl0NwybjvYCD30aMdjgePHz8eu56SVTBbgxJMliQ3Oauwg0QHxXE2Ez/EIReLdQj42Gzb4CLS0YJD9xUx7bsi0vJi5mUbW1QzL0h0PFk17rtiIPfJk52MB48fPx67npJJwyrBa2RCCQRTbGZSPCxTPOiND4G2pYyOQ4h4jINIJh5wFU1NFZt+IsZ59LSnDqBjZ2awbOku+yInunLcd8VA7rNnOxkPHj9+PGY9B0MWJJNozOJmlglvDMXDEozdhQWbgs/U6oBanGzLrdSNNnZFjOkmbi5bNt1lX7JLLhn3vXAg9/h4y/Hg8ePHI9dzQMEkWCgdRfYykYKnkP7D4rIujsujaKPBsB54vE2TS00ccvFY/Tth7JXeq1hz+qgVy04sAJawTsvOknHfCwdyT062HA8eP348Zj0vdoXF4pilKa2BROed+9fyw9rWRXeTFXESMOanvDZfJuJaSXouQdMdDJZtekZcLLvEeK04d8m474UDuaenW44Hjx8/Xns9YYqZpszGWB3AN/4VHw+k7WSFtJ3Qicuqb/NlVmgXWsxh570xg2UwxUw3WfO6B5nOuO8aA7lnZxuPB48fPx6znm1i4bsfcbaptF3zNT78eFPtwi1OaCNOqp1x3zUGcs/PN++AGD1+fMXrSVm2baTtPhPahbPhA71wIHd2bXzRa69nG+3CraTtPivahV/55tXWg8fyRY/9AdsY8VbSdp8V7cKrrgdfM//z6ILQFtJ2nxHtwmuoB4/kf74+gLeRtvvMaBdeSz34+vifx0YG20jbfTa0C6+tHrwe//NmOG0L8EbSdp8R7cLrrQe/996O+ai3ujQOskpTNULa7jOjXXj99eCd8lHvoFiwsbTdZ0a78PrrwTvlo966pLuRtB2fFe3Cm6oHP9kNH/W2FryxtN1nTLvwRurBO+Kj3pWXHidtx2dFu/Bm68Fb81HvykuPlrb7LGkX3mw9eGs+6h1Y8MbSdjegXcguQLjmevDpTQLMxtJ2N6NdyBZu9AbrwVvwUW+LbteULUpCdqm0HTelXbhNPe8G68Gb8lFvVfYfSNuxvrTdTWoXbozAzdaDZzfkorOj1oxVxlIMlpSIlpLrt8D4hrQL17z+c3h6hU/wv4Q/utps4+bm+6P/hIcf0JwQ5oQGPBL0eKPTYEXTW+eL/2DKn73J9BTXYANG57hz1cEMviVf/4tf5b/6C5pTQkMIWoAq7hTpOJjtAM4pxKu5vg5vXeUrtI09/Mo/5H+4z+Mp5xULh7cEm2QbRP2tFIKR7WM3fPf/jZ3SWCqLM2l4NxID5zB72HQXv3jj/8mLR5xXNA5v8EbFQEz7PpRfl1+MB/hlAN65qgDn3wTgH13hK7T59bmP+NIx1SHHU84nLOITt3iVz8mNO+lPrjGAnBFqmioNn1mTyk1ta47R6d4MrX7tjrnjYUpdUbv2rVr6YpVfsGG58AG8Ah9eyUN8CX4WfgV+G8LVWPDGb+Zd4cU584CtqSbMKxauxTg+dyn/LkVgA+IR8KHtejeFKRtTmLLpxN6mYVLjYxwXf5x2VofiZcp/lwKk4wGOpYDnoIZPdg/AAbwMfx0+ge9dgZvYjuqKe4HnGnykYo5TvJbG0Vj12JagRhwKa44H95ShkZa5RyLGGdfYvG7aw1TsF6iapPAS29mNS3NmsTQZCmgTzFwgL3upCTgtBTRwvGMAKrgLn4evwin8+afJRcff+8izUGUM63GOOuAs3tJkw7J4kyoNreqrpO6cYLQeFUd7TTpr5YOTLc9RUUogUOVJQ1GYJaFLAW0oTmKyYS46ZooP4S4EON3xQ5zC8/CX4CnM4c1PE8ApexpoYuzqlP3d4S3OJP8ZDK7cKWNaTlqmgDiiHwl1YsE41w1zT4iRTm3DBqxvOUsbMKKDa/EHxagtnta072ejc3DOIh5ojvh8l3tk1JF/AV6FU6jh3U8HwEazLgdCLYSQ+MYiAI2ltomkzttUb0gGHdSUUgsIYjTzLG3mObX4FBRaYtpDVNZrih9TgTeYOBxsEnN1gOCTM8Bsw/ieMc75w9kuAT6A+/AiHGvN/+Gn4KRkiuzpNNDYhDGFndWRpE6SVfm8U5bxnSgVV2jrg6JCKmneqey8VMFgq2+AM/i4L4RUbfSi27lNXZ7R7W9RTcq/q9fk4Xw3AMQd4I5ifAZz8FcVtm9SAom/dyN4lczJQW/kC42ZrHgcCoIf1oVMKkVItmMBi9cOeNHGLqOZk+QqQmrbc5YmYgxELUUN35z2iohstgfLIFmcMV7s4CFmI74L9+EFmGsi+tGnAOD4Yk9gIpo01Y4cA43BWGygMdr4YZekG3OBIUXXNukvJS8tqa06e+lSDCtnqqMFu6hWHXCF+WaYt64m9QBmNxi7Ioy7D+fa1yHw+FMAcPt7SysFLtoG4PXAk7JOA3aAxBRqUiAdU9Yp5lK3HLSRFtOim0sa8euEt08xvKjYjzeJ2GU7YawexrnKI9tmobInjFXCewpwriY9+RR4aaezFhMhGCppKwom0ChrgFlKzyPKkGlTW1YQrE9HJqu8hKGgMc6hVi5QRq0PZxNfrYNgE64utmRv6KKHRpxf6VDUaOvNP5jCEx5q185My/7RKz69UQu2im5k4/eownpxZxNLwiZ1AZTO2ZjWjkU9uaB2HFn6Q3u0JcsSx/qV9hTEApRzeBLDJQXxYmTnq7bdLa3+uqFrxLJ5w1TehnNHx5ECvCh2g2c3hHH5YsfdaSKddztfjQ6imKFGSyFwlLzxEGPp6r5IevVjk1AMx3wMqi1NxDVjLBiPs9tbsCkIY5we5/ML22zrCScFxnNtzsr9Wcc3CnD+pYO+4VXXiDE0oc/vQQ/fDK3oPESJMYXNmJa/DuloJZkcTpcYE8lIH8Dz8DJMiynNC86Mb2lNaaqP/+L7f2fcE/yP7/Lde8xfgSOdMxvOixZf/9p3+M4hT1+F+zApxg9XfUvYjc8qX2lfOOpK2gNRtB4flpFu9FTKCp2XJRgXnX6olp1zyYjTKJSkGmLE2NjUr1bxFM4AeAAHBUFIeSLqXR+NvH/M9fOnfHzOD2vCSyQJKzfgsCh+yi/Mmc35F2fUrw7miW33W9hBD1vpuUojFphIyvg7aTeoymDkIkeW3XLHmguMzbIAJejN6B5MDrhipE2y6SoFRO/AK/AcHHZHNIfiWrEe/C6cr3f/yOvrQKB+zMM55/GQdLDsR+ifr5Fiuu+/y+M78LzOE5dsNuXC3PYvYWd8NXvphLSkJIasrlD2/HOqQ+RjcRdjKTGWYhhVUm4yxlyiGPuMsZR7sMCHUBeTuNWA7if+ifXgc/hovftHXs/DV+Fvwe+f8shzMiMcweFgBly3//vwJfg5AN4450fn1Hd1Rm1aBLu22Dy3y3H2+OqMemkbGZ4jozcDjJf6596xOLpC0eMTHbKnxLxH27uZ/bMTGs2jOaMOY4m87CfQwF0dw53oa1k80JRuz/XgS+8fX3N9Af4qPIMfzKgCp4H5TDGe9GGeFPzSsZz80SlPTxXjgwJmC45njzgt2vbQ4b4OAdUK4/vWhO8d8v6EE8fMUsfakXbPpFJeLs2ubM/qdm/la3WP91uWhxXHjoWhyRUq2iJ/+5mA73zwIIo+LoZ/SgvIRjAd1IMvvn98PfgOvAJfhhm8scAKVWDuaRaK8aQ9f7vuPDH6Bj47ZXau7rqYJ66mTDwEDU6lLbCjCK0qTXyl5mnDoeNRxanj3FJbaksTk0faXxHxLrssgPkWB9LnA/MFleXcJozzjwsUvUG0X/QCve51qkMDXp9mtcyOy3rwBfdvVJK7D6/ACSzg3RoruIq5UDeESfEmVclDxnniU82vxMLtceD0hGZWzBNPMM/jSPne2OVatiTKUpY5vY7gc0LdUAWeWM5tH+O2I66AOWw9xT2BuyRVLGdoDHUsVRXOo/c+ZdRXvFfnxWyIV4upFLCl9eAL7h8Zv0QH8Ry8pA2cHzQpGesctVA37ZtklBTgHjyvdSeKY/RZw/kJMk0Y25cSNRWSigQtlULPTw+kzuJPeYEkXjQRpoGZobYsLF79pyd1dMRHInbgFTZqNLhDqiIsTNpoex2WLcy0/X6rHcdMMQvFSd5dWA++4P7xv89deACnmr36uGlL69bRCL6BSZsS6c0TU2TKK5gtWCzgAOOwQcurqk9j8whvziZSMLcq5hbuwBEsYjopUBkqw1yYBGpLA97SRElEmx5MCInBY5vgLk94iKqSWmhIGmkJ4Bi9m4L645J68LyY4wsFYBfUg5feP/6gWWm58IEmKQM89hq7KsZNaKtP5TxxrUZZVkNmMJtjbKrGxLNEbHPJxhqy7lAmbC32ZqeF6lTaknRWcYaFpfLUBh/rwaQycCCJmW15Kstv6jRHyJFry2C1ahkkIW0LO75s61+owxK1y3XqweX9m5YLM2DPFeOjn/iiqCKJ+yKXF8t5Yl/kNsqaSCryxPq5xWTFIaP8KSW0RYxqupaUf0RcTNSSdJZGcKYdYA6kdtrtmyBckfKXwqk0pHpUHlwWaffjNRBYFPUDWa8e3Lt/o0R0CdisKDM89cX0pvRHEfM8ca4t0s2Xx4kgo91MPQJ/0c9MQYq0co8MBh7bz1fio0UUHLR4aAIOvOmoYO6kwlEVODSSTliWtOtH6sPkrtctF9ZtJ9GIerBskvhdVS5cFNv9s1BU0AbdUgdK4FG+dRnjFmDTzniRMdZO1QhzMK355vigbdkpz9P6qjUGE5J2qAcXmwJ20cZUiAD0z+pGMx6xkzJkmEf40Hr4qZfVg2XzF9YOyoV5BjzVkUJngKf8lgNYwKECEHrCNDrWZzMlflS3yBhr/InyoUgBc/lKT4pxVrrC6g1YwcceK3BmNxZcAtz3j5EIpqguh9H6wc011YN75cKDLpFDxuwkrPQmUwW4KTbj9mZTwBwLq4aQMUZbHm1rylJ46dzR0dua2n3RYCWZsiHROeywyJGR7mXKlpryyCiouY56sFkBWEnkEB/raeh/Sw4162KeuAxMQpEkzy5alMY5wamMsWKKrtW2WpEWNnReZWONKWjrdsKZarpFjqCslq773PLmEhM448Pc3+FKr1+94vv/rfw4tEcu+lKTBe4kZSdijBrykwv9vbCMPcLQTygBjzVckSLPRVGslqdunwJ4oegtFOYb4SwxNgWLCmD7T9kVjTv5YDgpo0XBmN34Z/rEHp0sgyz7lngsrm4lvMm2Mr1zNOJYJ5cuxuQxwMGJq/TP5emlb8fsQBZviK4t8hFL+zbhtlpwaRSxQRWfeETjuauPsdGxsBVdO7nmP4xvzSoT29pRl7kGqz+k26B3Oy0YNV+SXbbQas1ctC/GarskRdFpKczVAF1ZXnLcpaMuzVe6lZ2g/1ndcvOVgRG3sdUAY1bKD6achijMPdMxV4muKVorSpiDHituH7rSTs7n/4y5DhRXo4FVBN4vO/zbAcxhENzGbHCzU/98Mcx5e7a31kWjw9FCe/zNeYyQjZsWb1uc7U33pN4Mji6hCLhivqfa9Ss6xLg031AgfesA/l99m9fgvnaF9JoE6bYKmkGNK3aPbHB96w3+DnxFm4hs0drLsk7U8kf/N/CvwQNtllna0rjq61sH8L80HAuvwH1tvBy2ChqWSCaYTaGN19sTvlfzFD6n+iKTbvtayfrfe9ueWh6GJFoxLdr7V72a5ZpvHcCPDzma0wTO4EgbLyedxstO81n57LYBOBzyfsOhUKsW1J1BB5vr/tz8RyqOFylQP9Tvst2JALsC5lsH8PyQ40DV4ANzYa4dedNiKNR1s+x2wwbR7q4/4cTxqEk4LWDebfisuo36JXLiWFjOtLrlNWh3K1rRS4xvHcDNlFnNmWBBAl5SWaL3oPOfnvbr5pdjVnEaeBJSYjuLEkyLLsWhKccadmOphZkOPgVdalj2QpSmfOsADhMWE2ZBu4+EEJI4wKTAuCoC4xwQbWXBltpxbjkXJtKxxabo9e7tyhlgb6gNlSbUpMh+l/FaqzVwewGu8BW1Zx7pTpQDJUjb8tsUTW6+GDXbMn3mLbXlXJiGdggxFAoUrtPS3wE4Nk02UZG2OOzlk7fRs7i95QCLo3E0jtrjnM7SR3uS1p4qtS2nJ5OwtQVHgOvArLBFijZUV9QtSl8dAY5d0E0hM0w3HS2DpIeB6m/A1+HfhJcGUq4sOxH+x3f5+VO+Ds9rYNI7zPXOYWPrtf8bYMx6fuOAX5jzNR0PdsuON+X1f7EERxMJJoU6GkTEWBvVolVlb5lh3tKCg6Wx1IbaMDdJ+9sUCc5KC46hKGCk3IVOS4TCqdBNfUs7Kd4iXf2RjnT/LLysJy3XDcHLh/vde3x8DoGvwgsa67vBk91G5Pe/HbOe7xwym0NXbtiuuDkGO2IJDh9oQvJ4cY4vdoqLDuoH9Zl2F/ofsekn8lkuhIlhQcffUtSjytFyp++p6NiE7Rqx/lodgKVoceEp/CP4FfjrquZaTtj2AvH5K/ywpn7M34K/SsoYDAdIN448I1/0/wveW289T1/lX5xBzc8N5IaHr0XMOQdHsIkDuJFifj20pBm5jzwUv9e2FhwRsvhAbalCIuIw3bhJihY3p6nTFFIZgiSYjfTf3aXuOjmeGn4bPoGvwl+CFzTRczBIuHBEeImHc37/lGfwZR0cXzVDOvaKfNHvwe+suZ771K/y/XcBlsoN996JpBhoE2toYxOznNEOS5TJc6Id5GEXLjrWo+LEWGNpPDU4WAwsIRROu+1vM+0oW37z/MBN9kqHnSArwPfgFJ7Cq/Ai3Ie7g7ncmI09v8sjzw9mzOAEXoIHxURueaAce5V80f/DOuuZwHM8vsMb5wBzOFWM7wymTXPAEvm4vcFpZ2ut0VZRjkiP2MlmLd6DIpbGSiHOjdnUHN90hRYmhTnmvhzp1iKDNj+b7t5hi79lWGwQ+HN9RsfFMy0FXbEwhfuczKgCbyxYwBmcFhhvo/7a44v+i3XWcwDP86PzpGQYdWh7csP5dBvZ1jNzdxC8pBGuxqSW5vw40nBpj5JhMwvOzN0RWqERHMr4Lv1kWX84xLR830G3j6yqZ1a8UstTlW+qJPOZ+sZ7xZPKTJLhiNOAFd6tk+jrTH31ncLOxid8+nzRb128HhUcru/y0Wn6iT254YPC6FtVSIMoW2sk727AhvTtrWKZTvgsmckfXYZWeNRXx/3YQ2OUxLDrbHtN11IwrgXT6c8dATDwLniYwxzO4RzuQqTKSC5gAofMZ1QBK3zQ4JWobFbcvJm87FK+6JXrKahLn54m3p+McXzzYtP8VF/QpJuh1OwieElEoI1pRxPS09FBrkq2tWCU59+HdhNtTIqKm8EBrw2RTOEDpG3IKo2Y7mFdLm3ZeVjYwVw11o/oznceMve4CgMfNym/utA/d/ILMR7gpXzRy9eDsgLcgbs8O2Va1L0zzIdwGGemTBuwROHeoMShkUc7P+ISY3KH5ZZeWqO8mFTxQYeXTNuzvvK5FGPdQfuu00DwYFY9dyhctEt+OJDdnucfpmyhzUJzfsJjr29l8S0bXBfwRS9ZT26tmMIdZucch5ZboMz3Nio3nIOsYHCGoDT4kUA9MiXEp9Xsui1S8th/kbWIrMBxDGLodWUQIWcvnXy+9M23xPiSMOiRPqM+YMXkUN3gXFrZJwXGzUaMpJfyRS9ZT0lPe8TpScuRlbMHeUmlaKDoNuy62iWNTWNFYjoxFzuJs8oR+RhRx7O4SVNSXpa0ZJQ0K1LAHDQ+D9IepkMXpcsq5EVCvClBUIzDhDoyKwDw1Lc59GbTeORivugw1IcuaEOaGWdNm+Ps5fQ7/tm0DjMegq3yM3vb5j12qUId5UZD2oxDSEWOZMSqFl/W+5oynWDa/aI04tJRQ2eTXusg86SQVu/nwSYwpW6wLjlqIzwLuxGIvoAvul0PS+ZNz0/akp/pniO/8JDnGyaCkzbhl6YcqmK/69prxPqtpx2+Km9al9sjL+rwMgHw4jE/C8/HQ3m1vBuL1fldbzd8mOueVJ92syqdEY4KJjSCde3mcRw2TA6szxedn+zwhZMps0XrqEsiUjnC1hw0TELC2Ek7uAAdzcheXv1BYLagspxpzSAoZZUsIzIq35MnFQ9DOrlNB30jq3L4pkhccKUAA8/ocvN1Rzx9QyOtERs4CVsJRK/DF71kPYrxYsGsm6RMh4cps5g1DOmM54Ly1ii0Hd3Y/BMk8VWFgBVmhqrkJCPBHAolwZaWzLR9Vb7bcWdX9NyUYE+uB2BKfuaeBUcjDljbYVY4DdtsVWvzRZdWnyUzDpjNl1Du3aloAjVJTNDpcIOVVhrHFF66lLfJL1zJr9PQ2nFJSBaKoDe+sAvLufZVHVzYh7W0h/c6AAZ+7Tvj6q9j68G/cTCS/3n1vLKHZwNi+P+pS0WkZNMBMUl+LDLuiE4omZy71r3UFMwNJV+VJ/GC5ixVUkBStsT4gGKh0Gm4Oy3qvq7Lbmq24nPdDuDR9deR11XzP4vFu3TYzfnIyiSVmgizUYGqkIXNdKTY9pgb9D2Ix5t0+NHkVzCdU03suWkkVZAoCONCn0T35gAeW38de43mf97sMOpSvj4aa1KYUm58USI7Wxxes03bAZdRzk6UtbzMaCQ6IxO0dy7X+XsjoD16hpsBeGz9dfzHj+R/Hp8nCxZRqkEDTaCKCSywjiaoMJ1TITE9eg7Jqnq8HL6gDwiZb0u0V0Rr/rmvqjxKuaLCX7ZWXTvAY+uvm3z8CP7nzVpngqrJpZKwWnCUjIviYVlirlGOzPLI3SMVyp/elvBUjjDkNhrtufFFErQ8pmdSlbK16toBHlt/HV8uHMX/vEGALkV3RJREiSlopxwdMXOZPLZ+ix+kAHpMKIk8UtE1ygtquttwxNhphrIZ1IBzjGF3IIGxGcBj6q8bHJBG8T9vdsoWrTFEuebEZuVxhhClH6P5Zo89OG9fwHNjtNQTpD0TG9PJLEYqvEY6Rlxy+ZZGfL0Aj62/bnQCXp//eeM4KzfQVJbgMQbUjlMFIm6TpcfWlZje7NBSV6IsEVmumWIbjiloUzQX9OzYdo8L1wjw2PrrpimONfmfNyzKklrgnEkSzT5QWYQW40YShyzqsRmMXbvVxKtGuYyMKaU1ugenLDm5Ily4iT14fP11Mx+xJv+zZ3MvnfdFqxU3a1W/FTB4m3Qfsyc1XUcdVhDeUDZXSFHHLQj/Y5jtC7ZqM0CXGwB4bP11i3LhOvzPGygYtiUBiwQV/4wFO0majijGsafHyRLu0yG6q35cL1rOpVxr2s5cM2jJYMCdc10Aj6q/blRpWJ//+dmm5psMl0KA2+AFRx9jMe2WbC4jQxnikd4DU8TwUjRVacgdlhmr3bpddzuJ9zXqr2xnxJfzP29RexdtjDVZqzkqa6PyvcojGrfkXiJ8SEtml/nYskicv0ivlxbqjemwUjMw5evdg8fUX9nOiC/lf94Q2i7MURk9nW1MSj5j8eAyV6y5CN2S6qbnw3vdA1Iwq+XOSCl663udN3IzLnrt+us25cI1+Z83SXQUldqQq0b5XOT17bGpLd6ssN1VMPf8c+jG8L3NeCnMdF+Ra3fRa9dft39/LuZ/3vwHoHrqGmQFafmiQw6eyzMxS05K4bL9uA+SKUQzCnSDkqOGokXyJvbgJ/BHI+qvY69//4rl20NsmK2ou2dTsyIALv/91/8n3P2Aao71WFGi8KKv1fRC5+J67Q/507/E/SOshqN5TsmYIjVt+kcjAx98iz/4SaojbIV1rexE7/C29HcYD/DX4a0rBOF5VTu7omsb11L/AWcVlcVZHSsqGuXLLp9ha8I//w3Mv+T4Ew7nTBsmgapoCrNFObIcN4pf/Ob/mrvHTGqqgAupL8qWjWPS9m/31jAe4DjA+4+uCoQoT/zOzlrNd3qd4SdphFxsUvYwGWbTWtISc3wNOWH+kHBMfc6kpmpwPgHWwqaSUG2ZWWheYOGQGaHB+eQ/kn6b3pOgLV+ODSn94wDvr8Bvb70/LLuiPPEr8OGVWfDmr45PZyccEmsVXZGe1pRNX9SU5+AVQkNTIVPCHF/jGmyDC9j4R9LfWcQvfiETmgMMUCMN1uNCakkweZsowdYobiMSlnKA93u7NzTXlSfe+SVbfnPQXmg9LpYAQxpwEtONyEyaueWM4FPjjyjG3uOaFmBTWDNgBXGEiQpsaWhnAqIijB07Dlsy3fUGeP989xbWkyf+FF2SNEtT1E0f4DYYVlxFlbaSMPIRMk/3iMU5pME2SIWJvjckciebkQuIRRyhUvkHg/iUljG5kzVog5hV7vIlCuBrmlhvgPfNHQM8lCf+FEGsYbMIBC0qC9a0uuy2wLXVbLBaP5kjHokCRxapkQyzI4QEcwgYHRZBp+XEFTqXFuNVzMtjXLJgX4gAid24Hjwc4N3dtVSe+NNiwTrzH4WVUOlDobUqr1FuAgYllc8pmzoVrELRHSIW8ViPxNy4xwjBpyR55I6J220qQTZYR4guvUICJiSpr9gFFle4RcF/OMB7BRiX8sSfhpNSO3lvEZCQfLUVTKT78Ek1LRLhWN+yLyTnp8qWUZ46b6vxdRGXfHVqx3eI75YaLa4iNNiK4NOW7wPW6lhbSOF9/M9qw8e/aoB3d156qTzxp8pXx5BKAsYSTOIIiPkp68GmTq7sZtvyzBQaRLNxIZ+paozHWoLFeExIhRBrWitHCAHrCF7/thhD8JhYz84wg93QRV88wLuLY8zF8sQ36qF1J455bOlgnELfshKVxYOXKVuKx0jaj22sczTQqPqtV/XDgpswmGTWWMSDw3ssyUunLLrVPGjYRsH5ggHeHSWiV8kT33ycFSfMgkoOK8apCye0J6VW6GOYvffgU9RWsukEi2kUV2nl4dOYUzRik9p7bcA4ggdJ53LxKcEe17B1R8eqAd7dOepV8sTXf5lhejoL85hUdhDdknPtKHFhljOT+bdq0hxbm35p2nc8+Ja1Iw+tJykgp0EWuAAZYwMVwac5KzYMslhvgHdHRrxKnvhTYcfKsxTxtTETkjHO7rr3zjoV25lAQHrqpV7bTiy2aXMmUhTBnKS91jhtR3GEoF0oLnWhWNnYgtcc4N0FxlcgT7yz3TgNIKkscx9jtV1ZKpWW+Ub1tc1eOv5ucdgpx+FJy9pgbLE7xDyXb/f+hLHVGeitHOi6A7ybo3sF8sS7w7cgdk0nJaOn3hLj3uyD0Zp5pazFIUXUpuTTU18d1EPkDoX8SkmWTnVIozEdbTcZjoqxhNHf1JrSS/AcvHjZ/SMHhL/7i5z+POsTUh/8BvNfYMTA8n+yU/MlTZxSJDRStqvEuLQKWwDctMTQogUDyQRoTQG5Kc6oQRE1yV1jCA7ri7jdZyK0sYTRjCR0Hnnd+y7nHxNgTULqw+8wj0mQKxpYvhjm9uSUxg+TTy7s2GtLUGcywhXSKZN275GsqlclX90J6bRI1aouxmgL7Q0Nen5ziM80SqMIo8cSOo+8XplT/5DHNWsSUr/6lLN/QQ3rDyzLruEW5enpf7KqZoShEduuSFOV7DLX7Ye+GmXb6/hnNNqKsVXuMDFpb9Y9eH3C6NGEzuOuI3gpMH/I6e+zDiH1fXi15t3vA1czsLws0TGEtmPEJdiiFPwlwKbgLHAFk4P6ZyPdymYYHGE0dutsChQBl2JcBFlrEkY/N5bQeXQ18gjunuMfMfsBlxJSx3niO485fwO4fGD5T/+3fPQqkneWVdwnw/3bMPkW9Wbqg+iC765Zk+xcT98ibKZc2EdgHcLoF8cSOo/Oc8fS+OyEULF4g4sJqXVcmfMfsc7A8v1/yfGXmL9I6Fn5pRwZhsPv0TxFNlAfZCvG+Oohi82UC5f/2IsJo0cTOm9YrDoKhFPEUr/LBYTUNht9zelHXDqwfPCIw4owp3mOcIQcLttWXFe3VZ/j5H3cIc0G6oPbCR+6Y2xF2EC5cGUm6wKC5tGEzhsWqw5hNidUiKX5gFWE1GXh4/Qplw4sVzOmx9QxU78g3EF6wnZlEN4FzJ1QPSLEZz1KfXC7vd8ssGdIbNUYpVx4UapyFUHzJoTOo1McSkeNn1M5MDQfs4qQuhhX5vQZFw8suwWTcyYTgioISk2YdmkhehG4PkE7w51inyAGGaU+uCXADabGzJR1fn3lwkty0asIo8cROm9Vy1g0yDxxtPvHDAmpu+PKnM8Ix1wwsGw91YJqhteaWgjYBmmQiebmSpwKKzE19hx7jkzSWOm66oPbzZ8Yj6kxVSpYjVAuvLzYMCRo3oTQecOOjjgi3NQ4l9K5/hOGhNTdcWVOTrlgYNkEXINbpCkBRyqhp+LdRB3g0OU6rMfW2HPCFFMV9nSp+uB2woepdbLBuJQyaw/ZFysXrlXwHxI0b0LovEkiOpXGA1Ijagf+KUNC6rKNa9bQnLFqYNkEnMc1uJrg2u64ELPBHpkgWbmwKpJoDhMwNbbGzAp7Yg31wS2T5rGtzit59PrKhesWG550CZpHEzpv2NGRaxlNjbMqpmEIzygJqQfjypycs2pg2cS2RY9r8HUqkqdEgKTWtWTKoRvOBPDYBltja2SO0RGjy9UHtxwRjA11ujbKF+ti5cIR9eCnxUg6owidtyoU5tK4NLji5Q3HCtiyF2IqLGYsHViOXTXOYxucDqG0HyttqYAKqYo3KTY1ekyDXRAm2AWh9JmsVh/ccg9WJ2E8YjG201sPq5ULxxX8n3XLXuMInbft2mk80rRGjCGctJ8/GFdmEQ9Ug4FlE1ll1Y7jtiraqm5Fe04VV8lvSVBL8hiPrfFVd8+7QH3Qbu2ipTVi8cvSGivc9cj8yvH11YMHdNSERtuOslM97feYFOPKzGcsI4zW0YGAbTAOaxCnxdfiYUmVWslxiIblCeAYr9VYR1gM7GmoPrilunSxxeT3DN/2eBQ9H11+nk1adn6VK71+5+Jfct4/el10/7KBZfNryUunWSCPxPECk1rdOv1WVSrQmpC+Tl46YD3ikQYcpunSQgzVB2VHFhxHVGKDgMEY5GLlQnP7FMDzw7IacAWnO6sBr12u+XanW2AO0wQ8pknnFhsL7KYIqhkEPmEXFkwaN5KQphbkUmG72wgw7WSm9RiL9QT925hkjiVIIhphFS9HKI6/8QAjlpXqg9W2C0apyaVDwKQwrwLY3j6ADR13ZyUNByQXHQu6RY09Hu6zMqXRaNZGS/KEJs0cJEe9VH1QdvBSJv9h09eiRmy0V2uJcqHcShcdvbSNg5fxkenkVprXM9rDVnX24/y9MVtncvbKY706anNl3ASll9a43UiacVquXGhvq4s2FP62NGKfQLIQYu9q1WmdMfmUrDGt8eDS0cXozH/fjmUH6Jruvm50hBDSaEU/2Ru2LEN/dl006TSc/g7tfJERxGMsgDUEr104pfWH9lQaN+M4KWQjwZbVc2rZVNHsyHal23wZtIs2JJqtIc/WLXXRFCpJkfE9jvWlfFbsNQ9pP5ZBS0zKh4R0aMFj1IjTcTnvi0Zz2rt7NdvQb2mgbju1plsH8MmbnEk7KbK0b+wC2iy3aX3szW8xeZvDwET6hWZYwqTXSSG+wMETKum0Dq/q+x62gt2ua2ppAo309TRk9TPazfV3qL9H8z7uhGqGqxNVg/FKx0HBl9OVUORn8Q8Jx9gFttGQUDr3tzcXX9xGgN0EpzN9mdZ3GATtPhL+CjxFDmkeEU6x56kqZRusLzALXVqkCN7zMEcqwjmywDQ6OhyUe0Xao1Qpyncrg6wKp9XfWDsaZplElvQ/b3sdweeghorwBDlHzgk1JmMc/wiERICVy2VJFdMjFuLQSp3S0W3+sngt2njwNgLssFGVQdJ0tu0KH4ky1LW4yrbkuaA6Iy9oz/qEMMXMMDWyIHhsAyFZc2peV9hc7kiKvfULxCl9iddfRK1f8kk9qvbdOoBtOg7ZkOZ5MsGrSHsokgLXUp9y88smniwWyuFSIRVmjplga3yD8Uij5QS1ZiM4U3Qw5QlSm2bXjFe6jzzBFtpg+/YBbLAWG7OPynNjlCw65fukGNdkJRf7yM1fOxVzbxOJVocFoYIaGwH22mIQkrvu1E2nGuebxIgW9U9TSiukPGU+Lt++c3DJPKhyhEEbXCQLUpae2exiKy6tMPe9mDRBFCEMTWrtwxN8qvuGnt6MoihKWS5NSyBhbH8StXoAz8PLOrRgLtOT/+4vcu+7vDLnqNvztOq7fmd8sMmY9Xzn1zj8Dq8+XVdu2Nv0IIySgEdQo3xVHps3Q5i3fLFsV4aiqzAiBhbgMDEd1uh8qZZ+lwhjkgokkOIv4xNJmyncdfUUzgB4oFMBtiu71Xumpz/P+cfUP+SlwFExwWW62r7b+LSPxqxn/gvMZ5z9C16t15UbNlq+jbGJtco7p8wbYlL4alSyfWdeuu0j7JA3JFNuVAwtst7F7FhWBbPFNKIUORndWtLraFLmMu7KFVDDOzqkeaiN33YAW/r76wR4XDN/yN1z7hejPau06EddkS/6XThfcz1fI/4K736fO48vlxt2PXJYFaeUkFS8U15XE3428xdtn2kc8GQlf1vkIaNRRnOMvLTWrZbElEHeLWi1o0dlKPAh1MVgbbVquPJ5+Cr8LU5/H/+I2QlHIU2ClXM9G8v7Rr7oc/hozfUUgsPnb3D+I+7WF8kNO92GY0SNvuxiE+2Bt8prVJTkzE64sfOstxuwfxUUoyk8VjcTlsqe2qITSFoSj6Epd4KsT6BZOWmtgE3hBfir8IzZDwgV4ZTZvD8VvPHERo8v+vL1DASHTz/i9OlKueHDjK5Rnx/JB1Vb1ioXdBra16dmt7dgik10yA/FwJSVY6XjA3oy4SqM2frqDPPSRMex9qs3XQtoWxMj7/Er8GWYsXgjaVz4OYumP2+9kbxvny/6kvWsEBw+fcb5bInc8APdhpOSs01tEqIkoiZjbAqKMruLbJYddHuHFRIyJcbdEdbl2sVLaySygunutBg96Y2/JjKRCdyHV+AEFtTvIpbKIXOamknYSiB6KV/0JetZITgcjjk5ZdaskBtWO86UF0ap6ozGXJk2WNiRUlCPFir66lzdm/SLSuK7EUdPz8f1z29Skq6F1fXg8+5UVR6bszncP4Tn4KUkkdJ8UFCY1zR1i8RmL/qQL3rlei4THG7OODlnKko4oI01kd3CaM08Ia18kC3GNoVaO9iDh+hWxSyTXFABXoau7Q6q9OxYg/OVEMw6jdbtSrJ9cBcewGmaZmg+bvkUnUUaGr+ZfnMH45Ivevl61hMcXsxYLFTu1hTm2zViCp7u0o5l+2PSUh9bDj6FgYypufBDhqK2+oXkiuHFHR3zfj+9PtA8oR0xnqX8qn+sx3bFODSbbF0X8EUvWQ8jBIcjo5bRmLOljDNtcqNtOe756h3l0VhKa9hDd2l1eqmsnh0MNMT/Cqnx6BInumhLT8luljzQ53RiJeA/0dxe5NK0o2fA1+GLXr6eNQWHNUOJssQaTRlGpLHKL9fD+IrQzTOMZS9fNQD4AnRNVxvTdjC+fJdcDDWQcyB00B0t9BDwTxXgaAfzDZ/DBXzRnfWMFRwuNqocOmX6OKNkY63h5n/fFcB28McVHqnXZVI27K0i4rDLNE9lDKV/rT+udVbD8dFFu2GGZ8mOt0kAXcoX3ZkIWVtw+MNf5NjR2FbivROHmhV1/pj2egv/fMGIOWTIWrV3Av8N9imV9IWml36H6cUjqEWNv9aNc+veb2sH46PRaHSuMBxvtW+twxctq0z+QsHhux8Q7rCY4Ct8lqsx7c6Sy0dl5T89rIeEuZKoVctIk1hNpfavER6yyH1Vvm3MbsUHy4ab4hWr/OZPcsRBphnaV65/ZcdYPNNwsjN/djlf9NqCw9U5ExCPcdhKxUgLSmfROpLp4WSUr8ojdwbncbvCf+a/YzRaEc6QOvXcGO256TXc5Lab9POvB+AWY7PigWYjzhifbovuunzRawsO24ZqQQAqguBtmpmPB7ysXJfyDDaV/aPGillgz1MdQg4u5MYaEtBNNHFjkRlSpd65lp4hd2AVPTfbV7FGpyIOfmNc/XVsPfg7vzaS/3nkvLL593ANLvMuRMGpQIhiF7kUEW9QDpAUbTWYBcbp4WpacHHY1aacqQyjGZS9HI3yCBT9kUZJhVOD+zUDvEH9ddR11fzPcTDQ5TlgB0KwqdXSavk9BC0pKp0WmcuowSw07VXmXC5guzSa4p0UvRw2lbDiYUx0ExJJRzWzi6Gm8cnEkfXXsdcG/M/jAJa0+bmCgdmQ9CYlNlSYZOKixmRsgiFxkrmW4l3KdFKv1DM8tk6WxPYJZhUUzcd8Kdtgrw/gkfXXDT7+avmfVak32qhtkg6NVdUS5wgkru1YzIkSduTW1FDwVWV3JQVJVuieTc0y4iDpFwc7/BvSalvKdQM8sv662cevz/+8sQVnjVAT0W2wLllw1JiMhJRxgDjCjLQsOzSFSgZqx7lAW1JW0e03yAD3asC+GD3NbQhbe+mN5GXH1F83KDOM4n/e5JIuH4NpdQARrFPBVptUNcjj4cVMcFSRTE2NpR1LEYbYMmfWpXgP9KejaPsLUhuvLCsVXznAG9dfx9SR1ud/3hZdCLHb1GMdPqRJgqDmm76mHbvOXDtiO2QPUcKo/TWkQ0i2JFXpBoo7vij1i1Lp3ADAo+qvG3V0rM//vFnnTE4hxd5Ka/Cor5YEdsLVJyKtDgVoHgtW11pWSjolPNMnrlrVj9Fv2Qn60twMwKPqr+N/wvr8z5tZcDsDrv06tkqyzESM85Ycv6XBWA2birlNCXrI6VbD2lx2L0vQO0QVTVVLH4SE67fgsfVXv8n7sz7/85Z7cMtbE6f088wSaR4kCkCm10s6pKbJhfqiUNGLq+0gLWC6eUAZFPnLjwqtKd8EwGvWX59t7iPW4X/eAN1svgRVSY990YZg06BD1ohLMtyFTI4pKTJsS9xREq9EOaPWiO2gpms7397x6nQJkbh+Fz2q/rqRROX6/M8bJrqlVW4l6JEptKeUFuMYUbtCQ7CIttpGc6MY93x1r1vgAnRXvY5cvwWPqb9uWQm+lP95QxdNMeWhOq1x0Db55C7GcUv2ZUuN6n8iKzsvOxibC//Yfs9Na8r2Rlz02vXXDT57FP/zJi66/EJSmsJKa8QxnoqW3VLQ+jZVUtJwJ8PNX1NQCwfNgdhhHD9on7PdRdrdGPF28rJr1F+3LBdeyv+8yYfLoMYet1vX4upNAjVvwOUWnlNXJXlkzk5Il6kqeoiL0C07qno+/CYBXq/+utlnsz7/Mzvy0tmI4zm4ag23PRN3t/CWryoUVJGm+5+K8RJ0V8Hc88/XHUX/HfiAq7t+BH+x6v8t438enWmdJwFA6ZINriLGKv/95f8lT9/FnyA1NMVEvQyaXuu+gz36f/DD73E4pwqpLcvm/o0Vle78n//+L/NPvoefp1pTJye6e4A/D082FERa5/opeH9zpvh13cNm19/4v/LDe5xMWTi8I0Ta0qKlK27AS/v3/r+/x/2GO9K2c7kVMonDpq7//jc5PKCxeNPpFVzaRr01wF8C4Pu76hXuX18H4LduTr79guuFD3n5BHfI+ZRFhY8w29TYhbbLi/bvBdqKE4fUgg1pBKnV3FEaCWOWyA+m3WpORZr/j+9TKJtW8yBTF2/ZEODI9/QavHkVdGFp/Pjn4Q+u5hXapsP5sOH+OXXA1LiKuqJxiMNbhTkbdJTCy4llEt6NnqRT4dhg1V3nbdrm6dYMecA1yTOL4PWTE9L5VzPFlLBCvlG58AhehnN4uHsAYinyJ+AZ/NkVvELbfOBUuOO5syBIEtiqHU1k9XeISX5bsimrkUUhnGDxourN8SgUsCZVtKyGbyGzHXdjOhsAvOAswSRyIBddRdEZWP6GZhNK/yjwew9ehBo+3jEADu7Ay2n8mDc+TS7awUHg0OMzR0LABhqLD4hJEh/BEGyBdGlSJoXYXtr+3HS4ijzVpgi0paWXtdruGTknXBz+11qT1Q2inxaTzQCO46P3lfLpyS4fou2PH/PupwZgCxNhGlj4IvUuWEsTkqMWm6i4xCSMc9N1RDQoCVcuGItJ/MRWefais+3synowi/dESgJjkilnWnBTGvRWmaw8oR15257t7CHmCf8HOn7cwI8+NQBXMBEmAa8PMRemrNCEhLGEhDQKcGZWS319BX9PFBEwGTbRBhLbDcaV3drFcDqk5kCTd2JF1Wp0HraqBx8U0wwBTnbpCadwBA/gTH/CDrcCs93LV8E0YlmmcyQRQnjBa8JESmGUfIjK/7fkaDJpmD2QptFNVJU1bbtIAjjWQizepOKptRjbzR9Kag6xZmMLLjHOtcLT3Tx9o/0EcTT1XN3E45u24AiwEypDJXihKjQxjLprEwcmRKclaDNZCVqr/V8mYWyFADbusiY5hvgFoU2vio49RgJLn5OsReRFN6tabeetiiy0V7KFHT3HyZLx491u95sn4K1QQSPKM9hNT0wMVvAWbzDSVdrKw4zRjZMyJIHkfq1VAVCDl/bUhNKlGq0zGr05+YAceXVPCttVk0oqjVwMPt+BBefx4yPtGVkUsqY3CHDPiCM5ngupUwCdbkpd8kbPrCWHhkmtIKLEetF2499eS1jZlIPGYnlcPXeM2KD9vLS0bW3ktYNqUllpKLn5ZrsxlIzxvDu5eHxzGLctkZLEY4PgSOg2IUVVcUONzUDBEpRaMoXNmUc0tFZrTZquiLyKxrSm3DvIW9Fil+AkhXu5PhEPx9mUNwqypDvZWdKlhIJQY7vn2OsnmBeOWnYZ0m1iwbbw1U60by5om47iHRV6fOgzjMf/DAZrlP40Z7syxpLK0lJ0gqaAK1c2KQKu7tabTXkLFz0sCftuwX++MyNeNn68k5Buq23YQhUh0SNTJa1ioQ0p4nUG2y0XilF1JqODqdImloPS4Bp111DEWT0jJjVv95uX9BBV7eB3bUWcu0acSVM23YZdd8R8UbQUxJ9wdu3oMuhdt929ME+mh6JXJ8di2RxbTi6TbrDquqV4aUKR2iwT6aZbyOwEXN3DUsWr8Hn4EhwNyHuXHh7/pdaUjtR7vnDh/d8c9xD/s5f501eQ1+CuDiCvGhk1AN/4Tf74RfxPwD3toLarR0zNtsnPzmS64KIRk861dMWCU8ArasG9T9H0ZBpsDGnjtAOM2+/LuIb2iIUGXNgl5ZmKD/Tw8TlaAuihaFP5yrw18v4x1898zIdP+DDAX1bM3GAMvPgRP/cJn3zCW013nrhHkrITyvYuwOUkcHuKlRSW5C6rzIdY4ppnF7J8aAJbQepgbJYBjCY9usGXDKQxq7RZfh9eg5d1UHMVATRaD/4BHK93/1iAgYZ/+jqPn8Dn4UExmWrpa3+ZOK6MvM3bjwfzxNWA2dhs8+51XHSPJiaAhGSpWevEs5xHLXcEGFXYiCONySH3fPWq93JIsBiSWvWyc3CAN+EcXoT7rCSANloPPoa31rt/5PUA/gp8Q/jDD3hyrjzlR8VkanfOvB1XPubt17vzxAfdSVbD1pzAnfgyF3ycadOTOTXhpEUoLC1HZyNGW3dtmjeXgr2r56JNmRwdNNWaQVBddd6rh4MhviEB9EFRD/7RGvePvCbwAL4Mx/D6M541hHO4D3e7g6PafdcZVw689z7NGTwo5om7A8sPhccT6qKcl9NJl9aM/9kX+e59Hh1yPqGuCCZxuITcsmNaJ5F7d0q6J3H48TO1/+M57085q2icdu2U+W36Ldllz9Agiv4YGljoEN908EzvDOrBF98/vtJwCC/BF2AG75xxEmjmMIcjxbjoaxqOK3/4hPOZzhMPBpYPG44CM0dTVm1LjLtUWWVz1Bcf8tEx0zs8O2A2YVHRxKYOiy/aOVoAaMu0i7ubu43njjmd4ibMHU1sIDHaQNKrZND/FZYdk54oCXetjq7E7IVl9eAL7t+oHnwXXtLx44czzoRFHBztYVwtH1d+NOMkupZ5MTM+gUmq90X+Bh9zjRlmaQ+m7YMqUL/veemcecAtOJ0yq1JnVlN27di2E0+Klp1tAJ4KRw1eMI7aJjsO3R8kPSI3fUFXnIOfdQe86sIIVtWDL7h//Ok6vj8vwDk08NEcI8zz7OhBy+WwalzZeZ4+0XniRfst9pAJqQHDGLzVQ2pheZnnv1OWhwO43/AgcvAEXEVVpa4db9sGvNK8wjaENHkfFQ4Ci5i7dqnQlPoLQrHXZDvO3BIXZbJOBrOaEbML6sFL798I4FhKihjHMsPjBUZYCMFr6nvaArxqXPn4lCa+cHfSa2cP27g3Z3ziYTRrcbQNGLQmGF3F3cBdzzzX7AILx0IB9rbwn9kx2G1FW3Inic+ZLIsVvKR8Zwfj0l1fkqo8LWY1M3IX14OX3r9RKTIO+d9XzAI8qRPGPn/4NC2n6o4rN8XJ82TOIvuVA8zLKUHRFgBCetlDZlqR1gLKjS39xoE7Bt8UvA6BxuEDjU3tFsEijgA+615tmZkXKqiEENrh41iLDDZNq4pKTWR3LZfnos81LOuNa15cD956vLMsJd1rqYp51gDUQqMYm2XsxnUhD2jg1DM7SeuJxxgrmpfISSXVIJIS5qJJSvJPEQ49DQTVIbYWJ9QWa/E2+c/oPK1drmC7WSfJRNKBO5Yjvcp7Gc3dmmI/Xh1kDTEuiSnWqQf37h+fTMhGnDf6dsS8SQfQWlqqwXXGlc/PEZ/SC5mtzIV0nAshlQdM/LvUtYutrEZ/Y+EAFtq1k28zQhOwLr1AIeANzhF8t9qzTdZf2qRKO6MWE9ohBYwibbOmrFtNmg3mcS+tB28xv2uKd/agYCvOP+GkSc+0lr7RXzyufL7QbkUpjLjEWFLqOIkAGu2B0tNlO9Eau2W1qcOUvVRgKzypKIQZ5KI3q0MLzqTNRYqiZOqmtqloIRlmkBHVpHmRYV6/HixbO6UC47KOFJnoMrVyr7wYz+SlW6GUaghYbY1I6kkxA2W1fSJokUdSh2LQ1GAimRGm0MT+uu57H5l7QgOWxERpO9moLRPgTtquWCfFlGlIjQaRly9odmzMOWY+IBO5tB4sW/0+VWGUh32qYk79EidWKrjWuiLpiVNGFWFRJVktyeXWmbgBBzVl8anPuXyNJlBJOlKLTgAbi/EYHVHxWiDaVR06GnHQNpJcWcK2jJtiCfG2sEHLzuI66sGrMK47nPIInPnu799935aOK2cvmvubrE38ZzZjrELCmXM2hM7UcpXD2oC3+ECVp7xtIuxptJ0jUr3sBmBS47TVxlvJ1Sqb/E0uLdvLj0lLr29ypdd/eMX3f6lrxGlKwKQxEGvw0qHbkbwrF3uHKwVENbIV2wZ13kNEF6zD+x24aLNMfDTCbDPnEikZFyTNttxWBXDaBuM8KtI2rmaMdUY7cXcUPstqTGvBGSrFWIpNMfbdea990bvAOC1YX0qbc6smDS1mPxSJoW4fwEXvjMmhlijDRq6qale6aJEuFGoppYDoBELQzLBuh/mZNx7jkinv0EtnUp50lO9hbNK57lZaMAWuWR5Yo9/kYwcYI0t4gWM47Umnl3YmpeBPqSyNp3K7s2DSAS/39KRuEN2bS4xvowV3dFRMx/VFcp2Yp8w2nTO9hCXtHG1kF1L4KlrJr2wKfyq77R7MKpFKzWlY9UkhYxyHWW6nBWPaudvEAl3CGcNpSXPZ6R9BbBtIl6cHL3gIBi+42CYXqCx1gfGWe7Ap0h3luyXdt1MKy4YUT9xSF01G16YEdWsouW9mgDHd3veyA97H+Ya47ZmEbqMY72oPztCGvK0onL44AvgC49saZKkWRz4veWljE1FHjbRJaWv6ZKKtl875h4CziFCZhG5rx7tefsl0aRT1bMHZjm8dwL/6u7wCRysaQblQoG5yAQN5zpatMNY/+yf8z+GLcH/Qn0iX2W2oEfXP4GvwQHuIL9AYGnaO3zqAX6946nkgqZNnUhx43DIdQtMFeOPrgy/y3Yd85HlJWwjLFkU3kFwq28xPnuPhMWeS+tDLV9Otllq7pQCf3uXJDN9wFDiUTgefHaiYbdfi3b3u8+iY6TnzhgehI1LTe8lcd7s1wJSzKbahCRxKKztTLXstGAiu3a6rPuQs5pk9TWAan5f0BZmGf7Ylxzzk/A7PAs4QPPPAHeFQ2hbFHszlgZuKZsJcUmbDC40sEU403cEjczstOEypa+YxevL4QBC8oRYqWdK6b7sK25tfE+oDZgtOQ2Jg8T41HGcBE6fTWHn4JtHcu9S7uYgU5KSCkl/mcnq+5/YBXOEr6lCUCwOTOM1taOI8mSxx1NsCXBEmLKbMAg5MkwbLmpBaFOPrNSlO2HnLiEqW3tHEwd8AeiQLmn+2gxjC3k6AxREqvKcJbTEzlpLiw4rNZK6oJdidbMMGX9FULKr0AkW+2qDEPBNNm5QAt2Ik2nftNWHetubosHLo2nG4vQA7GkcVCgVCgaDixHqo9UUn1A6OshapaNR/LPRYFV8siT1cCtJE0k/3WtaNSuUZYKPnsVIW0xXWnMUxq5+En4Kvw/MqQmVXnAXj9Z+9zM98zM/Agy7F/qqj2Nh67b8HjFnPP3iBn/tkpdzwEJX/whIcQUXOaikeliCRGUk7tiwF0rItwMEhjkZ309hikFoRAmLTpEXWuHS6y+am/KB/fM50aLEhGnSMwkpxzOov4H0AvgovwJ1iGzDLtJn/9BU+fAINfwUe6FHSLhu83viV/+/HrOePX+STT2B9uWGbrMHHLldRBlhS/CJQmcRxJFqZica01XixAZsYiH1uolZxLrR/SgxVIJjkpQP4PE9sE59LKLr7kltSBogS5tyszzH8Fvw8/AS8rNOg0xUS9fIaHwb+6et8Q/gyvKRjf5OusOzGx8evA/BP4IP11uN/grca5O0lcsPLJ5YjwI4QkJBOHa0WdMZYGxPbh2W2nR9v3WxEWqgp/G3+6VZbRLSAAZ3BhdhAaUL33VUSw9yjEsvbaQ9u4A/gGXwZXoEHOuU1GSj2chf+Mo+f8IcfcAxfIKVmyunRbYQVnoevwgfw3TXXcw++xNuP4fhyueEUNttEduRVaDttddoP0eSxLe2LENk6itYxlrxBNBYrNNKSQmeaLcm9c8UsaB5WyO6675yyQIAWSDpBVoA/gxmcwEvwoDv0m58UE7gHn+fJOa8/Ywan8EKRfjsopF83eCglX/Sfr7OeaRoQfvt1CGvIDccH5BCvw1sWIzRGC/66t0VTcLZQZtm6PlAasbOJ9iwWtUo7biktTSIPxnR24jxP1ZKaqq+2RcXM9OrBAm/AAs7hDJ5bNmGb+KIfwCs8a3jnjBrOFeMjHSCdbKr+2uOLfnOd9eiA8Hvvwwq54VbP2OqwkB48Ytc4YEOiH2vTXqodabfWEOzso4qxdbqD5L6tbtNPECqbhnA708DZH4QOJUXqScmUlks7Ot6FBuZw3n2mEbaUX7kDzxHOOQk8nKWMzAzu6ZZ8sOFw4RK+6PcuXo9tB4SbMz58ApfKDXf3szjNIIbGpD5TKTRxGkEMLjLl+K3wlWXBsCUxIDU+jbOiysESqAy1MGUJpXgwbTWzNOVEziIXZrJ+VIztl1PUBxTSo0dwn2bOmfDRPD3TRTGlfbCJvO9KvuhL1hMHhB9wPuPRLGHcdOWG2xc0U+5bQtAJT0nRTewXL1pgk2+rZAdeWmz3jxAqfNQQdzTlbF8uJ5ecEIWvTkevAHpwz7w78QujlD/Lr491bD8/1vhM2yrUQRrWXNQY4fGilfctMWYjL72UL/qS9eiA8EmN88nbNdour+PBbbAjOjIa4iBhfFg6rxeKdEGcL6p3EWR1Qq2Qkhs2DrnkRnmN9tG2EAqmgPw6hoL7Oza7B+3SCrR9tRftko+Lsf2F/mkTndN2LmzuMcKTuj/mX2+4Va3ki16+nnJY+S7MefpkidxwnV+4wkXH8TKnX0tsYzYp29DOOoSW1nf7nTh2akYiWmcJOuTidSaqESrTYpwjJJNVGQr+rLI7WsqerHW6Kp/oM2pKuV7T1QY9gjqlZp41/WfKpl56FV/0kvXQFRyeQ83xaTu5E8p5dNP3dUF34ihyI3GSpeCsywSh22ZJdWto9winhqifb7VRvgktxp13vyjrS0EjvrRfZ62uyqddSWaWYlwTPAtJZ2oZ3j/Sgi/mi+6vpzesfAcWNA0n8xVyw90GVFGuZjTXEQy+6GfLGLMLL523f5E0OmxVjDoOuRiH91RKU+vtoCtH7TgmvBLvtFXWLW15H9GTdVw8ow4IlRLeHECN9ym1e9K0I+Cbnhgv4Yu+aD2HaQJ80XDqOzSGAV4+4yCqBxrsJAX6ZTIoX36QnvzhhzzMfFW2dZVLOJfo0zbce5OvwXMFaZ81mOnlTVXpDZsQNuoYWveketKb5+6JOOsgX+NTm7H49fUTlx+WLuWL7qxnOFh4BxpmJx0p2gDzA/BUARuS6phR+pUsY7MMboAHx5xNsSVfVZcYSwqCKrqon7zM+8ecCkeS4nm3rINuaWvVNnMRI1IRpxTqx8PZUZ0Br/UEduo3B3hNvmgZfs9gQPj8vIOxd2kndir3awvJ6BLvoUuOfFWNYB0LR1OQJoUySKb9IlOBx74q1+ADC2G6rOdmFdJcD8BkfualA+BdjOOzP9uUhGUEX/TwhZsUduwRr8wNuXKurCixLBgpQI0mDbJr9dIqUuV+92ngkJZ7xduCk2yZKbfWrH1VBiTg9VdzsgRjW3CVXCvAwDd+c1z9dWw9+B+8MJL/eY15ZQ/HqvTwVdsZn5WQsgRRnMaWaecu3jFvMBEmgg+FJFZsnSl0zjB9OqPYaBD7qmoVyImFvzi41usesV0julaAR9dfR15Xzv9sEruRDyk1nb+QaLU67T885GTls6YgcY+UiMa25M/pwGrbCfzkvR3e0jjtuaFtnwuagHTSb5y7boBH119HXhvwP487jJLsLJ4XnUkHX5sLbS61dpiAXRoZSCrFJ+EjpeU3puVfitngYNo6PJrAigKktmwjyQdZpfq30mmtulaAx9Zfx15Xzv+cyeuiBFUs9zq8Kq+XB9a4PVvph3GV4E3y8HENJrN55H1X2p8VyqSKwVusJDKzXOZzplWdzBUFK9e+B4+uv468xvI/b5xtSAkBHQaPvtqWzllVvEOxPbuiE6+j2pvjcKsbvI7txnRErgfH7LdXqjq0IokKzga14GzQ23SSbCQvO6r+Or7SMIr/efOkkqSdMnj9mBx2DRsiY29Uj6+qK9ZrssCKaptR6HKURdwUYeUWA2kPzVKQO8ku2nU3Anhs/XWkBx3F/7wJtCTTTIKftthue1ty9xvNYLY/zo5KSbIuKbXpbEdSyeRyYdAIwKY2neyoc3+k1XUaufYga3T9daMUx/r8z1s10ITknIO0kuoMt+TB8jK0lpayqqjsJ2qtXAYwBU932zinimgmd6mTRDnQfr88q36NAI+tv24E8Pr8zxtasBqx0+xHH9HhlrwsxxNUfKOHQaZBITNf0uccj8GXiVmXAuPEAKSdN/4GLHhs/XWj92dN/uetNuBMnVR+XWDc25JLjo5Mg5IZIq226tmCsip2zZliL213YrTlL2hcFjpCduyim3M7/eB16q/blQsv5X/esDRbtJeabLIosWy3ycavwLhtxdWzbMmHiBTiVjJo6lCLjXZsi7p9PEPnsq6X6wd4bP11i0rD5fzPm/0A6brrIsllenZs0lCJlU4abakR59enZKrKe3BZihbTxlyZ2zl1+g0wvgmA166/bhwDrcn/7Ddz0eWZuJvfSESug6NzZsox3Z04FIxz0mUjMwVOOVTq1CQ0AhdbBGVdjG/CgsfUX7esJl3K/7ytWHRv683praW/8iDOCqWLLhpljDY1ZpzK75QiaZoOTpLKl60auHS/97oBXrv+umU9+FL+5+NtLFgjqVLCdbmj7pY5zPCPLOHNCwXGOcLquOhi8CmCWvbcuO73XmMUPab+ug3A6/A/78Bwe0bcS2+tgHn4J5pyS2WbOck0F51Vq3LcjhLvZ67p1ABbaL2H67bg78BfjKi/jr3+T/ABV3ilLmNXTI2SpvxWBtt6/Z//D0z/FXaGbSBgylzlsEGp+5//xrd4/ae4d8DUUjlslfIYS3t06HZpvfQtvv0N7AHWqtjP2pW08QD/FLy//da38vo8PNlKHf5y37Dxdfe/oj4kVIgFq3koLReSR76W/bx//n9k8jonZxzWTANVwEniDsg87sOSd/z7//PvMp3jQiptGVWFX2caezzAXwfgtzYUvbr0iozs32c3Uge7varH+CNE6cvEYmzbPZ9hMaYDdjK4V2iecf6EcEbdUDVUARda2KzO/JtCuDbNQB/iTeL0EG1JSO1jbXS+nLxtPMDPw1fh5+EPrgSEKE/8Gry5A73ui87AmxwdatyMEBCPNOCSKUeRZ2P6Myb5MRvgCHmA9ywsMifU+AYXcB6Xa5GibUC5TSyerxyh0j6QgLVpdyhfArRTTLqQjwe4HOD9s92D4Ap54odXAPBWLAwB02igG5Kkc+piN4lvODIFGAZgT+EO4Si1s7fjSR7vcQETUkRm9O+MXyo9OYhfe4xt9STQ2pcZRLayCV90b4D3jR0DYAfyxJ+eywg2IL7NTMXna7S/RpQ63JhWEM8U41ZyQGjwsVS0QBrEKLu8xwZsbi4wLcCT+OGidPIOCe1PiSc9Qt+go+vYqB7cG+B9d8cAD+WJPz0Am2gxXgU9IneOqDpAAXOsOltVuMzpdakJXrdPCzXiNVUpCeOos5cxnpQT39G+XVLhs1osQVvJKPZyNq8HDwd4d7pNDuWJPxVX7MSzqUDU6gfadKiNlUFTzLeFHHDlzO4kpa7aiKhBPGKwOqxsBAmYkOIpipyXcQSPlRTf+Tii0U3EJGaZsDER2qoB3h2hu0qe+NNwUooYU8y5mILbJe6OuX+2FTKy7bieTDAemaQyQ0CPthljSWO+xmFDIYiESjM5xKd6Ik5lvLq5GrQ3aCMLvmCA9wowLuWJb9xF59hVVP6O0CrBi3ZjZSNOvRy+I6klNVRJYRBaEzdN+imiUXQ8iVF8fsp+W4JXw7WISW7fDh7lptWkCwZ4d7QTXyBPfJMYK7SijjFppGnlIVJBJBYj7eUwtiP1IBXGI1XCsjNpbjENVpSAJ2hq2LTywEly3hUYazt31J8w2+aiLx3g3fohXixPfOMYm6zCGs9LVo9MoW3MCJE7R5u/WsOIjrqBoHUO0bJE9vxBpbhsd3+Nb4/vtPCZ4oZYCitNeYuC/8UDvDvy0qvkiW/cgqNqRyzqSZa/s0mqNGjtKOoTm14zZpUauiQgVfqtQiZjq7Q27JNaSK5ExRcrGCXO1FJYh6jR6CFqK7bZdQZ4t8g0rSlPfP1RdBtqaa9diqtzJkQ9duSryi2brQXbxDwbRUpFMBHjRj8+Nt7GDKgvph9okW7LX47gu0SpGnnFQ1S1lYldOsC7hYteR574ZuKs7Ei1lBsfdz7IZoxzzCVmmVqaSySzQbBVAWDek+N4jh9E/4VqZrJjPwiv9BC1XcvOWgO8275CVyBPvAtTVlDJfZkaZGU7NpqBogAj/xEHkeAuJihWYCxGN6e8+9JtSegFXF1TrhhLGP1fak3pebgPz192/8gB4d/6WT7+GdYnpH7hH/DJzzFiYPn/vjW0SgNpTNuPIZoAEZv8tlGw4+RLxy+ZjnKa5NdFoC7UaW0aduoYse6+bXg1DLg6UfRYwmhGEjqPvF75U558SANrElK/+MdpXvmqBpaXOa/MTZaa1DOcSiLaw9j0NNNst3c+63c7EKTpkvKHzu6bPbP0RkuHAVcbRY8ijP46MIbQeeT1mhA+5PV/inyDdQipf8LTvMXbwvoDy7IruDNVZKTfV4CTSRUYdybUCnGU7KUTDxLgCknqUm5aAW6/1p6eMsOYsphLzsHrE0Y/P5bQedx1F/4yPHnMB3/IOoTU9+BL8PhtjuFKBpZXnYNJxTuv+2XqolKR2UQgHhS5novuxVySJhBNRF3SoKK1XZbbXjVwWNyOjlqWJjrWJIy+P5bQedyldNScP+HZ61xKSK3jyrz+NiHG1hcOLL/+P+PDF2gOkekKGiNWKgJ+8Z/x8Iv4DdQHzcpZyF4v19I27w9/yPGDFQvmEpKtqv/TLiWMfn4sofMm9eAH8Ao0zzh7h4sJqYtxZd5/D7hkYPneDzl5idlzNHcIB0jVlQ+8ULzw/nc5/ojzl2juE0apD7LRnJxe04dMz2iOCFNtGFpTuXA5AhcTRo8mdN4kz30nVjEC4YTZQy4gpC7GlTlrePKhGsKKgeXpCYeO0MAd/GH7yKQUlXPLOasOH3FnSphjHuDvEu4gB8g66oNbtr6eMbFIA4fIBJkgayoXriw2XEDQPJrQeROAlY6aeYOcMf+IVYTU3XFlZufMHinGywaW3YLpObVBAsbjF4QJMsVUSayjk4voPsHJOQfPWDhCgDnmDl6XIRerD24HsGtw86RMHOLvVSHrKBdeVE26gKB5NKHzaIwLOmrqBWJYZDLhASG16c0Tn+CdRhWDgWXnqRZUTnPIHuMJTfLVpkoYy5CzylHVTGZMTwkGAo2HBlkQplrJX6U+uF1wZz2uwS1SQ12IqWaPuO4baZaEFBdukksJmkcTOm+YJSvoqPFzxFA/YUhIvWxcmSdPWTWwbAKVp6rxTtPFUZfKIwpzm4IoMfaYQLWgmlG5FME2gdBgm+J7J+rtS/XBbaVLsR7bpPQnpMFlo2doWaVceHk9+MkyguZNCJ1He+kuHTWyQAzNM5YSUg/GlTk9ZunAsg1qELVOhUSAK0LABIJHLKbqaEbHZLL1VA3VgqoiOKXYiS+HRyaEKgsfIqX64HYWbLRXy/qWoylIV9gudL1OWBNgBgTNmxA6b4txDT4gi3Ri7xFSLxtXpmmYnzAcWDZgY8d503LFogz5sbonDgkKcxGsWsE1OI+rcQtlgBBCSOKD1mtqYpIU8cTvBmAT0yZe+zUzeY92fYjTtGipXLhuR0ePoHk0ofNWBX+lo8Z7pAZDk8mEw5L7dVyZZoE/pTewbI6SNbiAL5xeygW4xPRuLCGbhcO4RIeTMFYHEJkYyEO9HmJfXMDEj/LaH781wHHZEtqSQ/69UnGpzH7LKIAZEDSPJnTesJTUa+rwTepI9dLJEawYV+ZkRn9g+QirD8vF8Mq0jFQ29js6kCS3E1+jZIhgPNanHdHFqFvPJLHqFwQqbIA4jhDxcNsOCCQLDomaL/dr5lyJaJU6FxPFjO3JOh3kVMcROo8u+C+jo05GjMF3P3/FuDLn5x2M04xXULPwaS6hBYki+MrMdZJSgPHlcB7nCR5bJ9Kr5ACUn9jk5kivdd8tk95SOGrtqu9lr2IhK65ZtEl7ZKrp7DrqwZfRUSN1el7+7NJxZbywOC8neNKTch5vsTEMNsoCCqHBCqIPRjIPkm0BjvFODGtto99rCl+d3wmHkW0FPdpZtC7MMcVtGFQjJLX5bdQ2+x9ypdc313uj8xlsrfuLgWXz1cRhZvJYX0iNVBRcVcmCXZs6aEf3RQF2WI/TcCbKmGU3IOoDJGDdDub0+hYckt6PlGu2BcxmhbTdj/klhccLGJMcqRjMJP1jW2ETqLSWJ/29MAoORluJ+6LPffBZbi5gqi5h6catQpmOT7/OFf5UorRpLzCqcMltBLhwd1are3kztrSzXO0LUbXRQcdLh/RdSZ+swRm819REDrtqzC4es6Gw4JCKlSnjYVpo0xeq33PrADbFLL3RuCmObVmPN+24kfa+AojDuM4umKe2QwCf6EN906HwjujaitDs5o0s1y+k3lgbT2W2i7FJdnwbLXhJUBq/9liTctSmFC/0OqUinb0QddTWamtjbHRFuWJJ6NpqZ8vO3fZJ37Db+2GkaPYLGHs7XTTdiFQJ68SkVJFVmY6McR5UycflNCsccHFaV9FNbR4NttLxw4pQ7wJd066Z0ohVbzihaxHVExd/ay04oxUKWt+AsdiQ9OUyZ2krzN19IZIwafSTFgIBnMV73ADj7V/K8u1MaY2sJp2HWm0f41tqwajEvdHWOJs510MaAqN4aoSiPCXtN2KSi46dUxHdaMquar82O1x5jqhDGvqmoE9LfxcY3zqA7/x3HA67r9ZG4O6Cuxu12/+TP+eLP+I+HErqDDCDVmBDO4larujNe7x8om2rMug0MX0rL1+IWwdwfR+p1TNTyNmVJ85ljWzbWuGv8/C7HD/izjkHNZNYlhZcUOKVzKFUxsxxN/kax+8zPWPSFKw80rJr9Tizyj3o1gEsdwgWGoxPezDdZ1TSENE1dLdNvuKL+I84nxKesZgxXVA1VA1OcL49dFlpFV5yJMhzyCmNQ+a4BqusPJ2bB+xo8V9u3x48VVIEPS/mc3DvAbXyoYr6VgDfh5do5hhHOCXMqBZUPhWYbWZECwVJljLgMUWOCB4MUuMaxGNUQDVI50TQ+S3kFgIcu2qKkNSHVoM0SHsgoZxP2d5HH8B9woOk4x5bPkKtAHucZsdykjxuIpbUrSILgrT8G7G5oCW+K0990o7E3T6AdW4TilH5kDjds+H64kS0mz24grtwlzDHBJqI8YJQExotPvoC4JBq0lEjjQkyBZ8oH2LnRsQ4Hu1QsgDTJbO8fQDnllitkxuVskoiKbRF9VwzMDvxHAdwB7mD9yCplhHFEyUWHx3WtwCbSMMTCUCcEmSGlg4gTXkHpZXWQ7kpznK3EmCHiXInqndkQjunG5kxTKEeGye7jWz9cyMR2mGiFQ15ENRBTbCp+Gh86vAyASdgmJq2MC6hoADQ3GosP0QHbnMHjyBQvQqfhy/BUbeHd5WY/G/9LK/8Ka8Jd7UFeNWEZvzPb458Dn8DGLOe3/wGL/4xP+HXlRt+M1PE2iLhR8t+lfgxsuh7AfO2AOf+owWhSZRYQbd622hbpKWKuU+XuvNzP0OseRDa+mObgDHJUSc/pKx31QdKffQ5OIJpt8GWjlgTwMc/w5MPCR/yl1XC2a2Yut54SvOtMev55Of45BOat9aWG27p2ZVORRvnEk1hqWMVUmqa7S2YtvlIpspuF1pt0syuZS2NV14mUidCSfzQzg+KqvIYCMljIx2YK2AO34fX4GWdu5xcIAb8MzTw+j/lyWM+Dw/gjs4GD6ehNgA48kX/AI7XXM/XAN4WHr+9ntywqoCakCqmKP0rmQrJJEErG2Upg1JObr01lKQy4jskWalKYfJ/EDLMpjNSHFEUAde2fltaDgmrNaWQ9+AAb8I5vKjz3L1n1LriB/BXkG/wwR9y/oRX4LlioHA4LzP2inzRx/DWmutRweFjeP3tNeSGlaE1Fde0OS11yOpmbIp2u/jF1n2RRZviJM0yBT3IZl2HWImKjQOxIyeU325b/qWyU9Moj1o07tS0G7qJDoGHg5m8yeCxMoEH8GU45tnrNM84D2l297DQ9t1YP7jki/7RmutRweEA77/HWXOh3HCxkRgldDQkAjNTMl2Iloc1qN5JfJeeTlyTRzxURTdn1Ixv2uKjs12AbdEWlBtmVdk2k7FFwj07PCZ9XAwW3dG+8xKzNFr4EnwBZpy9Qzhh3jDXebBpYcpuo4fQ44u+fD1dweEnHzI7v0xuuOALRUV8rXpFyfSTQYkhd7IHm07jpyhlkCmI0ALYqPTpUxXS+z4jgDj1Pflvmz5ecuItpIBxyTHpSTGWd9g1ApfD/bvwUhL4nT1EzqgX7cxfCcNmb3mPL/qi9SwTHJ49oj5ZLjccbTG3pRmlYi6JCG0mQrAt1+i2UXTZ2dv9IlQpN5naMYtviaXlTrFpoMsl3bOAFEa8sqPj2WCMrx3Yjx99qFwO59Aw/wgx+HlqNz8oZvA3exRDvuhL1jMQHPaOJ0+XyA3fp1OfM3qObEVdhxjvynxNMXQV4+GJyvOEFqeQBaIbbO7i63rpxCltdZShPFxkjM2FPVkn3TG+Rp9pO3l2RzFegGfxGDHIAh8SteR0C4HopXzRF61nheDw6TFN05Ebvq8M3VKKpGjjO6r7nhudTEGMtYM92HTDaR1FDMXJ1eThsbKfywyoWwrzRSXkc51flG3vIid62h29bIcFbTGhfV+faaB+ohj7dPN0C2e2lC96+XouFByen9AsunLDJZ9z7NExiUc0OuoYW6UZkIyx2YUR2z6/TiRjyKMx5GbbjLHvHuf7YmtKghf34LJfx63Yg8vrvN2zC7lY0x0tvKezo4HmGYDU+Gab6dFL+KI761lDcNifcjLrrr9LWZJctG1FfU1uwhoQE22ObjdfkSzY63CbU5hzs21WeTddH2BaL11Gi7lVdlxP1nkxqhnKhVY6knS3EPgVGg1JpN5cP/hivujOelhXcPj8HC/LyI6MkteVjlolBdMmF3a3DbsuAYhL44dxzthWSN065xxUd55Lmf0wRbOYOqH09/o9WbO2VtFdaMb4qBgtFJoT1SqoN8wPXMoXLb3p1PUEhxfnnLzGzBI0Ku7FxrKsNJj/8bn/H8fPIVOd3rfrklUB/DOeO+nkghgSPzrlPxluCMtOnDL4Yml6dK1r3vsgMxgtPOrMFUZbEUbTdIzii5beq72G4PD0DKnwjmBULUVFmy8t+k7fZ3pKc0Q4UC6jpVRqS9Umv8bxw35flZVOU1X7qkjnhZlsMbk24qQ6Hz7QcuL6sDC0iHHki96Uh2UdvmgZnjIvExy2TeJdMDZNSbdZyAHe/Yd1xsQhHiKzjh7GxQ4yqMPaywPkjMamvqrYpmO7Knad+ZQC5msCuAPWUoxrxVhrGv7a+KLXFhyONdTMrZ7ke23qiO40ZJUyzgYyX5XyL0mV7NiUzEs9mjtbMN0dERqwyAJpigad0B3/zRV7s4PIfXSu6YV/MK7+OrYe/JvfGMn/PHJe2fyUdtnFrKRNpXV0Y2559aWPt/G4BlvjTMtXlVIWCnNyA3YQBDmYIodFz41PvXPSa6rq9lWZawZ4dP115HXV/M/tnFkkrBOdzg6aP4pID+MZnTJ1SuuB6iZlyiox4HT2y3YBtkUKWooacBQUDTpjwaDt5poBHl1/HXltwP887lKKXxNUEyPqpGTyA699UqY/lt9yGdlUKra0fFWS+36iylVWrAyd7Uw0CZM0z7xKTOduznLIjG2Hx8cDPLb+OvK6Bv7n1DYci4CxUuRxrjBc0bb4vD3rN5Zz36ntLb83eVJIB8LiIzCmn6SMPjlX+yNlTjvIGjs+QzHPf60Aj62/jrzG8j9vYMFtm1VoRWCJdmw7z9N0t+c8cxZpPeK4aTRicS25QhrVtUp7U578chk4q04Wx4YoQSjFryUlpcQ1AbxZ/XVMknIU//OGl7Q6z9Zpxi0+3yFhSkjUDpnCIUhLWVX23KQ+L9vKvFKI0ZWFQgkDLvBoylrHNVmaw10zwCPrr5tlodfnf94EWnQ0lFRWy8pW9LbkLsyUVDc2NSTHGDtnD1uMtchjbCeb1mpxFP0YbcClhzdLu6lfO8Bj6q+bdT2sz/+8SZCV7VIxtt0DUn9L7r4cLYWDSXnseEpOGFuty0qbOVlS7NNzs5FOGJUqQpl2Q64/yBpZf90sxbE+//PGdZ02HSipCbmD6NItmQ4Lk5XUrGpDMkhbMm2ZVheNYV+VbUWTcv99+2NyX1VoafSuC+AN6q9bFIMv5X/eagNWXZxEa9JjlMwNWb00akGUkSoepp1/yRuuqHGbUn3UdBSTxBU6SEVklzWRUkPndVvw2PrrpjvxOvzPmwHc0hpmq82npi7GRro8dXp0KXnUQmhZbRL7NEVp1uuZmO45vuzKsHrktS3GLWXODVjw+vXXLYx4Hf7njRPd0i3aoAGX6W29GnaV5YdyDj9TFkakje7GHYzDoObfddHtOSpoi2SmzJHrB3hM/XUDDEbxP2/oosszcRlehWXUvzHv4TpBVktHqwenFo8uLVmy4DKLa5d3RtLrmrM3aMFr1183E4sewf+85VWeg1c5ag276NZrM9IJVNcmLEvDNaV62aq+14IAOGFsBt973Ra8Xv11YzXwNfmft7Jg2oS+XOyoC8/cwzi66Dhmgk38kUmP1CUiYWOX1bpD2zWXt2FCp7uq8703APAa9dfNdscR/M/bZLIyouVxqJfeWvG9Je+JVckHQ9+CI9NWxz+blX/KYYvO5n2tAP/vrlZ7+8/h9y+9qeB/Hnt967e5mevX10rALDWK//FaAT5MXdBXdP0C/BAes792c40H+AiAp1e1oH8HgH94g/Lttx1gp63op1eyoM/Bvw5/G/7xFbqJPcCXnmBiwDPb/YKO4FX4OjyCb289db2/Noqicw4i7N6TVtoz8tNwDH+8x/i6Ae7lmaQVENzJFb3Di/BFeAwz+Is9SjeQySpPqbLFlNmyz47z5a/AF+AYFvDmHqibSXTEzoT4Gc3OALaqAP4KPFUJ6n+1x+rGAM6Zd78bgJ0a8QN4GU614vxwD9e1Amy6CcskNrczLx1JIp6HE5UZD/DBHrFr2oNlgG4Odv226BodoryjGJ9q2T/AR3vQrsOCS0ctXZi3ruLlhpFDJYl4HmYtjQCP9rhdn4suySLKDt6wLcC52h8xPlcjju1fn+yhuw4LZsAGUuo2b4Fx2UwQu77uqRHXGtg92aN3tQCbFexc0uk93vhTXbct6y7MulLycoUljx8ngDMBg1tvJjAazpEmOtxlzclvj1vQf1Tx7QlPDpGpqgtdSKz/d9/hdy1vTfFHSmC9dGDZbLiezz7Ac801HirGZsWjydfZyPvHXL/Y8Mjzg8BxTZiuwKz4Eb8sBE9zznszmjvFwHKPIWUnwhqfVRcd4Ck0K6ate48m1oOfrX3/yOtvAsJ8zsPAM89sjnddmuLuDPjX9Bu/L7x7xpMzFk6nWtyQfPg278Gn4Aekz2ZgOmU9eJ37R14vwE/BL8G3aibCiWMWWDQ0ZtkPMnlcGeAu/Ag+8ZyecU5BPuy2ILD+sQqyZhAKmn7XZd+jIMTN9eBL7x95xVLSX4On8EcNlXDqmBlqS13jG4LpmGbkF/0CnOi3H8ETOIXzmnmtb0a16Tzxj1sUvQCBiXZGDtmB3KAefPH94xcUa/6vwRn80GOFyjEXFpba4A1e8KQfFF+259tx5XS4egYn8fQsLGrqGrHbztr+uByTahWuL1NUGbDpsnrwBfePPwHHIf9X4RnM4Z2ABWdxUBlqQ2PwhuDxoS0vvqB1JzS0P4h2nA/QgTrsJFn+Y3AOjs9JFC07CGWX1oNX3T/yHOzgDjwPn1PM3g9Jk9lZrMEpxnlPmBbjyo2+KFXRU52TJM/2ALcY57RUzjObbjqxVw++4P6RAOf58pcVsw9Daje3htriYrpDOonre3CudSe6bfkTEgHBHuDiyu5MCsc7BHhYDx7ePxLjqigXZsw+ijMHFhuwBmtoTPtOxOrTvYJDnC75dnUbhfwu/ZW9AgYd+peL68HD+0emKquiXHhWjJg/UrkJYzuiaL3E9aI/ytrCvAd4GcYZMCkSQxfUg3v3j8c4e90j5ZTPdvmJJGHnOCI2nHS8081X013pHuBlV1gB2MX1YNmWLHqqGN/TWmG0y6clJWthxNUl48q38Bi8vtMKyzzpFdSDhxZ5WBA5ZLt8Jv3895DduBlgbPYAj8C4B8hO68FDkoh5lydC4FiWvBOVqjYdqjiLv92t8yPDjrDaiHdUD15qkSURSGmXJwOMSxWAXYwr3zaAufJ66l+94vv3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/wHuD9tQd4f+0B3l97gPfXHuD9tQd4f+0B3l97gG8LwP8G/AL8O/A5OCq0Ys2KIdv/qOIXG/4mvFAMF16gZD+2Xvu/B8as5+8bfllWyg0zaNO5bfXj6vfhhwD86/Aq3NfRS9t9WPnhfnvCIw/CT8GLcFTMnpntdF/z9V+PWc/vWoIH+FL3Znv57PitcdGP4R/C34avw5fgRVUInCwbsn1yyA8C8zm/BH8NXoXnVE6wVPjdeCI38kX/3+Ct9dbz1pTmHFRu+Hm4O9Ch3clr99negxfwj+ER/DR8EV6B5+DuQOnTgUw5rnkY+FbNU3gNXh0o/JYTuWOvyBf9FvzX663HH/HejO8LwAl8Hl5YLTd8q7sqA3wbjuExfAFegQdwfyDoSkWY8swzEf6o4Qyewefg+cHNbqMQruSL/u/WWc+E5g7vnnEXgDmcDeSGb/F4cBcCgT+GGRzDU3hZYburAt9TEtHgbM6JoxJ+6NMzzTcf6c2bycv2+KK/f+l6LBzw5IwfqZJhA3M472pWT/ajKxnjv4AFnMEpnBTPND6s2J7qHbPAqcMK74T2mZ4VGB9uJA465It+/eL1WKhYOD7xHOkr1ajK7d0C4+ke4Hy9qXZwpgLr+Znm/uNFw8xQOSy8H9IzjUrd9+BIfenYaylf9FsXr8fBAadnPIEDna8IBcwlxnuA0/Wv6GAWPd7dDIKjMdSWueAsBj4M7TOd06qBbwDwKr7oleuxMOEcTuEZTHWvDYUO7aHqAe0Bbq+HEFRzOz7WVoTDQkVds7A4sIIxfCQdCefFRoIOF/NFL1mPab/nvOakSL/Q1aFtNpUb/nFOVX6gzyg/1nISyDfUhsokIzaBR9Kxm80s5mK+6P56il1jXic7nhQxsxSm3OwBHl4fFdLqi64nDQZvqE2at7cWAp/IVvrN6/BFL1mPhYrGMBfOi4PyjuSGf6wBBh7p/FZTghCNWGgMzlBbrNJoPJX2mW5mwZfyRffXo7OFi5pZcS4qZUrlViptrXtw+GQoyhDPS+ANjcGBNRiLCQDPZPMHuiZfdFpPSTcQwwKYdRNqpkjm7AFeeT0pJzALgo7g8YYGrMHS0iocy+YTm2vyRUvvpXCIpQ5pe666TJrcygnScUf/p0NDs/iAI/nqDHC8TmQT8x3NF91l76oDdQGwu61Z6E0ABv7uO1dbf/37Zlv+Zw/Pbh8f1s4Avur6657/+YYBvur6657/+YYBvur6657/+YYBvur6657/+aYBvuL6657/+VMA8FXWX/f8zzcN8BXXX/f8zzcNMFdbf93zP38KLPiK6697/uebtuArrr/u+Z9vGmCusP6653/+1FjwVdZf9/zPN7oHX339dc//fNMu+irrr3v+50+Bi+Zq6697/uebA/jz8Pudf9ht/fWv517J/XUzAP8C/BAeX9WCDrUpZ3/dEMBxgPcfbtTVvsYV5Yn32u03B3Ac4P3b8I+vxNBKeeL9dRMAlwO83959qGO78sT769oB7g3w/vGVYFzKE++v6wV4OMD7F7tckFkmT7y/rhHgpQO8b+4Y46XyxPvrugBeNcB7BRiX8sT767oAvmCA9woAHsoT76+rBJjLBnh3txOvkifeX1dswZcO8G6N7sXyxPvr6i340gHe3TnqVfLE++uKAb50gHcXLnrX8sR7gNdPRqwzwLu7Y/FO5Yn3AK9jXCMGeHdgxDuVJ75VAI8ljP7PAb3/RfjcZfePHBB+79dpfpH1CanN30d+mT1h9GqAxxJGM5LQeeQ1+Tb+EQJrElLb38VHQ94TRq900aMIo8cSOo+8Dp8QfsB8zpqE1NO3OI9Zrj1h9EV78PqE0WMJnUdeU6E+Jjyk/hbrEFIfeWbvId8H9oTRFwdZaxJGvziW0Hn0gqYB/wyZ0PwRlxJST+BOw9m77Amj14ii1yGM/txYQudN0qDzGe4EqfA/5GJCagsHcPaEPWH0esekSwmjRxM6b5JEcZ4ww50ilvAOFxBSx4yLW+A/YU8YvfY5+ALC6NGEzhtmyZoFZoarwBLeZxUhtY4rc3bKnjB6TKJjFUHzJoTOozF2YBpsjcyxDgzhQ1YRUse8+J4wenwmaylB82hC5w0zoRXUNXaRBmSMQUqiWSWkLsaVqc/ZE0aPTFUuJWgeTei8SfLZQeMxNaZSIzbII4aE1Nmr13P2hNHjc9E9guYNCZ032YlNwESMLcZiLQHkE4aE1BFg0yAR4z1h9AiAGRA0jyZ03tyIxWMajMPWBIsxYJCnlITU5ShiHYdZ94TR4wCmSxg9jtB5KyPGYzymAYexWEMwAPIsAdYdV6aObmNPGD0aYLoEzaMJnTc0Ygs+YDw0GAtqxBjkuP38bMRWCHn73xNGjz75P73WenCEJnhwyVe3AEe8TtKdJcYhBl97wuhNAObK66lvD/9J9NS75v17wuitAN5fe4D31x7g/bUHeH/tAd5fe4D3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/w/toDvAd4f/24ABzZ8o+KLsSLS+Pv/TqTb3P4hKlQrTGh+fbIBT0Axqznnb+L/V2mb3HkN5Mb/nEHeK7d4IcDld6lmDW/iH9E+AH1MdOw/Jlu2T1xNmY98sv4wHnD7D3uNHu54WUuOsBTbQuvBsPT/UfzNxGYzwkP8c+Yz3C+r/i6DcyRL/rZ+utRwWH5PmfvcvYEt9jLDS/bg0/B64DWKrQM8AL8FPwS9beQCe6EMKNZYJol37jBMy35otdaz0Bw2H/C2Smc7+WGB0HWDELBmOByA3r5QONo4V+DpzR/hFS4U8wMW1PXNB4TOqYz9urxRV++ntWCw/U59Ty9ebdWbrgfRS9AYKKN63ZokZVygr8GZ/gfIhZXIXPsAlNjPOLBby5c1eOLvmQ9lwkOy5x6QV1j5TYqpS05JtUgUHUp5toHGsVfn4NX4RnMCe+AxTpwmApTYxqMxwfCeJGjpXzRF61nbcHhUBPqWze9svwcHJ+S6NPscKrEjug78Dx8Lj3T8D4YxGIdxmJcwhi34fzZUr7olevZCw5vkOhoClq5zBPZAnygD/Tl9EzDh6kl3VhsHYcDEb+hCtJSvuiV69kLDm+WycrOTArHmB5/VYyP6jOVjwgGawk2zQOaTcc1L+aLXrKeveDwZqlKrw8U9Y1p66uK8dEzdYwBeUQAY7DbyYNezBfdWQ97weEtAKYQg2xJIkuveAT3dYeLGH+ShrWNwZgN0b2YL7qznr3g8JYAo5bQBziPjx7BPZ0d9RCQp4UZbnFdzBddor4XHN4KYMrB2qHFRIzzcLAHQZ5the5ovui94PCWAPefaYnxIdzRwdHCbuR4B+tbiy96Lzi8E4D7z7S0mEPd+eqO3cT53Z0Y8SV80XvB4Z0ADJi/f7X113f+7p7/+UYBvur6657/+YYBvur6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+VMA8FXWX/f8z58OgK+y/rrnf75RgLna+uue//lTA/CV1V/3/M837aKvvv6653++UQvmauuve/7nTwfAV1N/3fM/fzr24Cuuv+75nz8FFnxl9dc9//MOr/8/glixwRuUfM4AAAAASUVORK5CYII="
2044,d.tArea,i),(0,S.eP)("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=",d.tSearch,c);let p={...B},f=(0,s.s8)(e,"triangles",_,p,d);return(0,l.T)(f,d)}(e,this.edgesTarget.texture),this.blendRenderable=function(e,t,r){let n=t.getWidth(),i=t.getHeight(),c={...a.GE,tColor:o.IO.create(t),tWeights:o.IO.create(r),uTexSizeInv:o.IO.create(u.Sg.create(1/n,1/i)),uViewport:o.IO.create((0,u.T8)())},d={...R},p=(0,s.s8)(e,"triangles",F,d,c);return(0,l.T)(p,c)}(e,t,this.weightsTarget.texture),this._supported=!0}getByteCount(){return this.supported?this.edgesTarget.getByteCount()+this.weightsTarget.getByteCount():0}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:s}=e;r.viewport(a,n,i,s),r.scissor(a,n,i,s),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT),o.IO.update(this.edgesRenderable.values.uViewport,D.l_.toVec4(this.edgesRenderable.values.uViewport.ref.value,e)),o.IO.update(this.weightsRenderable.values.uViewport,D.l_.toVec4(this.weightsRenderable.values.uViewport.ref.value,e)),o.IO.update(this.blendRenderable.values.uViewport,D.l_.toVec4(this.blendRenderable.values.uViewport.ref.value,e))}setSize(e,t){let r=this.edgesTarget.getWidth(),a=this.edgesTarget.getHeight();(e!==r||t!==a)&&(this.edgesTarget.setSize(e,t),this.weightsTarget.setSize(e,t),o.IO.update(this.edgesRenderable.values.uTexSizeInv,u.Sg.set(this.edgesRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),o.IO.update(this.weightsRenderable.values.uTexSizeInv,u.Sg.set(this.weightsRenderable.values.uTexSizeInv.ref.value,1/e,1/t)),o.IO.update(this.blendRenderable.values.uTexSizeInv,u.Sg.set(this.blendRenderable.values.uTexSizeInv.ref.value,1/e,1/t)))}update(e,t){let r=!1;this.edgesRenderable.values.tColor.ref.value!==e&&(o.IO.update(this.edgesRenderable.values.tColor,e),r=!0),this.edgesRenderable.values.dEdgeThreshold.ref.value!==t.edgeThreshold&&(o.IO.update(this.edgesRenderable.values.dEdgeThreshold,t.edgeThreshold),r=!0),r&&this.edgesRenderable.update(),this.weightsRenderable.values.dMaxSearchSteps.ref.value!==t.maxSearchSteps&&(o.IO.update(this.weightsRenderable.values.dMaxSearchSteps,t.maxSearchSteps),this.weightsRenderable.update()),this.blendRenderable.values.tColor.ref.value!==e&&(o.IO.update(this.blendRenderable.values.tColor,e),this.blendRenderable.update())}render(e,t){h.kM&&this.webgl.timer.mark("SmaaPass.render"),this.edgesTarget.bind(),this.updateState(e),this.edgesRenderable.render(),this.weightsTarget.bind(),this.updateState(e),this.weightsRenderable.render(),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.blendRenderable.render(),h.kM&&this.webgl.timer.markEnd("SmaaPass.render")}}let P={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),dEdgeThreshold:(0,n.O0)("number")},k=(0,i.Lq)("smaa-edges",A,w),B={...a.iz,tEdges:(0,n.U2)("texture","rgba","ubyte","linear"),tArea:(0,n.U2)("texture","rgb","ubyte","linear"),tSearch:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),dMaxSearchSteps:(0,n.O0)("number")},_=(0,i.Lq)("smaa-weights",O,I),R={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),tWeights:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4")},F=(0,i.Lq)("smaa-blend",T,C),L=` 2045precision mediump float; 2046precision mediump samplerCube; 2047precision mediump sampler2D; 2048 2049#if defined(dVariant_skybox) 2050 uniform samplerCube tSkybox; 2051 uniform mat4 uViewDirectionProjectionInverse; 2052 uniform float uBlur; 2053 uniform float uOpacity; 2054 uniform float uSaturation; 2055 uniform float uLightness; 2056 uniform mat3 uRotation; 2057#elif defined(dVariant_image) 2058 uniform sampler2D tImage; 2059 uniform vec2 uImageScale; 2060 uniform vec2 uImageOffset; 2061 uniform float uBlur; 2062 uniform float uOpacity; 2063 uniform float uSaturation; 2064 uniform float uLightness; 2065#elif defined(dVariant_horizontalGradient) || defined(dVariant_radialGradient) 2066 uniform vec3 uGradientColorA; 2067 uniform vec3 uGradientColorB; 2068 uniform float uGradientRatio; 2069#endif 2070 2071uniform vec2 uTexSize; 2072uniform vec4 uViewport; 2073uniform bool uViewportAdjusted; 2074varying vec4 vPosition; 2075 2076// TODO: add as general pp option to remove banding? 2077// Iestyn's RGB dither from http://alex.vlachos.com/graphics/Alex_Vlachos_Advanced_VR_Rendering_GDC2015.pdf 2078vec3 ScreenSpaceDither(vec2 vScreenPos) { 2079 vec3 vDither = vec3(dot(vec2(171.0, 231.0), vScreenPos.xy)); 2080 vDither.rgb = fract(vDither.rgb / vec3(103.0, 71.0, 97.0)); 2081 return vDither.rgb / 255.0; 2082} 2083
2084vec3 saturateColor(vec3 c, float amount) { 2085 // https://www.w3.org/TR/WCAG21/#dfn-relative-luminance 2086 const vec3 W = vec3(0.2125, 0.7154, 0.0721); 2087 vec3 intensity = vec3(dot(c, W)); 2088 return mix(intensity, c, 1.0 + amount); 2089} 2090 2091vec3 lightenColor(vec3 c, float amount) { 2092 return c + amount; 2093} 2094 2095void main() { 2096 #if defined(dVariant_skybox) 2097 vec4 t = uViewDirectionProjectionInverse * vPosition; 2098 #ifdef enabledShaderTextureLod 2099 gl_FragColor = textureCubeLodEXT(tSkybox, uRotation * normalize(t.xyz / t.w), uBlur * 8.0); 2100 #else 2101 gl_FragColor = textureCube(tSkybox, uRotation * normalize(t.xyz / t.w)); 2102 #endif 2103 gl_FragColor.a = uOpacity; 2104 gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness); 2105 #elif defined(dVariant_image) 2106 vec2 coords; 2107 if (uViewportAdjusted) { 2108 coords = ((gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uImageScale) + uImageOffset; 2109 } else { 2110 coords = (gl_FragCoord.xy / uImageScale) + uImageOffset; 2111 } 2112 #ifdef enabledShaderTextureLod 2113 gl_FragColor = texture2DLodEXT(tImage, vec2(coords.x, 1.0 - coords.y), uBlur * 8.0); 2114 #else 2115 gl_FragColor = texture2D(tImage, vec2(coords.x, 1.0 - coords.y)); 2116 #endif 2117 gl_FragColor.a = uOpacity; 2118 gl_FragColor.rgb = lightenColor(saturateColor(gl_FragColor.rgb, uSaturation), uLightness); 2119 #elif defined(dVariant_horizontalGradient) 2120 float d; 2121 if (uViewportAdjusted) { 2122 d = ((gl_FragCoord.y - uViewport.y) * (uTexSize.y / uViewport.w) / uTexSize.y) + 1.0 - (uGradientRatio * 2.0); 2123 } else { 2124 d = (gl_FragCoord.y / uTexSize.y) + 1.0 - (uGradientRatio * 2.0); 2125 } 2126 gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, clamp(d, 0.0, 1.0)), 1.0); 2127 gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy); 2128 #elif defined(dVariant_radialGradient) 2129 float d; 2130 if (uViewportAdjusted) { 2131 d = distance(vec2(0.5), (gl_FragCoord.xy - uViewport.xy) * (uTexSize / uViewport.zw) / uTexSize) + uGradientRatio - 0.5; 2132 } else { 2133 d = distance(vec2(0.5), gl_FragCoord.xy / uTexSize) + uGradientRatio - 0.5; 2134 } 2135 gl_FragColor = vec4(mix(uGradientColorB, uGradientColorA, 1.0 - clamp(d, 0.0, 1.0)), 1.0); 2136 gl_FragColor.rgb += ScreenSpaceDither(gl_FragCoord.xy); 2137 #endif 2138} 2139`,z=` 2140precision mediump float; 2141 2142attribute vec2 aPosition; 2143 2144varying vec4 vPosition; 2145 2146void main() { 2147 vPosition = vec4(aPosition, 1.0, 1.0); 2148 gl_Position = vec4(aPosition, 1.0, 1.0); 2149} 2150`;var N=r(38675),G=r(68303),U=r(71211),V=r(43975),j=r(81458),H=r(59725),q=r(22934),X=r(58463),W=r(60940),K=r(97667),Q=r(23833);function Z(){return Z.zero()}!function(e){function t(){let e=[.1,0,0];return e[0]=0,e}function r(e,t,r,a){return e[0]=t,e[0]=r,e[0]=a,e}function a(e,t,r){let a=t[0],n=t[4],i=t[8],o=t[1],s=t[5],l=t[9],u=t[2],c=t[6],d=t[10];switch(r){case"XYZ":e[1]=Math.asin((0,Q.uZ)(i,-1,1)),.9999999>Math.abs(i)?(e[0]=Math.atan2(-l,d),e[2]=Math.atan2(-n,a)):(e[0]=Math.atan2(c,s),e[2]=0);break;case"YXZ":e[0]=Math.asin(-(0,Q.uZ)(l,-1,1)),.9999999>Math.abs(l)?(e[1]=Math.atan2(i,d),e[2]=Math.atan2(o,s)):(e[1]=Math.atan2(-u,a),e[2]=0);break;case"ZXY":e[0]=Math.asin((0,Q.uZ)(c,-1,1)),.9999999>Math.abs(c)?(e[1]=Math.atan2(-u,d),e[2]=Math.atan2(-n,s)):(e[1]=0,e[2]=Math.atan2(o,a));break;case"ZYX":e[1]=Math.asin(-(0,Q.uZ)(u,-1,1)),.9999999>Math.abs(u)?(e[0]=Math.atan2(c,d),e[2]=Math.atan2(o,a)):(e[0]=0,e[2]=Math.atan2(-n,s));break;case"YZX":e[2]=Math.asin((0,Q.uZ)(o,-1,1)),.9999999>Math.abs(o)?(e[0]=Math.atan2(-l,s),e[1]=Math.atan2(-u,a)):(e[0]=0,e[1]=Math.atan2(i,d));break;case"XZY":e[2]=Math.asin(-(0,Q.uZ)(n,-1,1)),.9999999>Math.abs(n)?(e[0]=Math.atan2(c,s),e[1]=Math.atan2(i,a)):(e[0]=Math.atan2(-l,d),e[1]=0);break;default:(0,K.UT)(r)}return e}e.zero=t,e.create=function(e,r,a){let n=t();return n[0]=e,n[1]=r,n[2]=a,n},e.set=r,e.clone=function(e){let r=t();return r[0]=e[0],r[1]=e[1],r[2]=e[2],r},e.copy=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},e.fromMat4=a;let n=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];e.fromQuat=function(e,t,r){return N.y.fromQuat(n,t),a(e,n,r)},e.fromVec3=function(e,t){return r(e,t[0],t[1],t[2])},e.exactEquals=function(e,t){return e[0]===t[0]&&e[1]===t[1]&&e[2]===t[2]},e.fromArray=function(e,t,r){return e[0]=t[r+0],e[1]=t[r+1],e[2]=t[r+2],e},e.toArray=function(e,t,r){return t[r+0]=e[0],t[r+1]=e[1],t[r+2]=e[2],t}}(Z||(Z={}));
2150let Y={opacity:c.e.Numeric(1,{min:0,max:1,step:.01}),saturation:c.e.Numeric(0,{min:-1,max:1,step:.01}),lightness:c.e.Numeric(0,{min:-1,max:1,step:.01})},$={faces:c.e.MappedStatic("urls",{urls:c.e.Group({nx:c.e.Text("",{label:"Negative X / Left"}),ny:c.e.Text("",{label:"Negative Y / Bottom"}),nz:c.e.Text("",{label:"Negative Z / Back"}),px:c.e.Text("",{label:"Positive X / Right"}),py:c.e.Text("",{label:"Positive Y / Top"}),pz:c.e.Text("",{label:"Positive Z / Front"})},{isExpanded:!0,label:"URLs"}),files:c.e.Group({nx:c.e.File({label:"Negative X / Left",accept:"image/*"}),ny:c.e.File({label:"Negative Y / Bottom",accept:"image/*"}),nz:c.e.File({label:"Negative Z / Back",accept:"image/*"}),px:c.e.File({label:"Positive X / Right",accept:"image/*"}),py:c.e.File({label:"Positive Y / Top",accept:"image/*"}),pz:c.e.File({label:"Positive Z / Front",accept:"image/*"})},{isExpanded:!0,label:"Files"})}),blur:c.e.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or when "EXT_shader_texture_lod" is available.'}),rotation:c.e.Group({x:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),y:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0}),z:c.e.Numeric(0,{min:0,max:360,step:1},{immediateUpdate:!0})}),...Y},J={source:c.e.MappedStatic("url",{url:c.e.Text(""),file:c.e.File({accept:"image/*"})}),blur:c.e.Numeric(0,{min:0,max:1,step:.01},{description:'Note, this only works in WebGL2 or with power-of-two images and when "EXT_shader_texture_lod" is available.'}),...Y,coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},ee={topColor:c.e.Color((0,f.Il)(14540253)),bottomColor:c.e.Color((0,f.Il)(15658734)),ratio:c.e.Numeric(.5,{min:0,max:1,step:.01}),coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},et={centerColor:c.e.Color((0,f.Il)(14540253)),edgeColor:c.e.Color((0,f.Il)(15658734)),ratio:c.e.Numeric(.5,{min:0,max:1,step:.01}),coverage:c.e.Select("viewport",c.e.arrayToOptions(["viewport","canvas"]))},er={variant:c.e.MappedStatic("off",{off:c.e.EmptyGroup(),skybox:c.e.Group($,{isExpanded:!0}),image:c.e.Group(J,{isExpanded:!0}),horizontalGradient:c.e.Group(ee,{isExpanded:!0}),radialGradient:c.e.Group(et,{isExpanded:!0})},{label:"Environment"})};class ea{constructor(e,t,r,n){this.webgl=e,this.assetManager=t,this.camera=new U.V,this.target=(0,V.A)(),this.position=(0,V.A)(),this.dir=(0,V.A)(),this.bgColor=(0,V.A)(),this.renderable=function(e,t,r){let n={drawCount:G.IO.create(6),instanceCount:G.IO.create(1),aPosition:G.IO.create(a.GK),tSkybox:G.IO.create((0,S.DU)()),tImage:G.IO.create((0,S.DU)()),uImageScale:G.IO.create((0,j.S)()),uImageOffset:G.IO.create((0,j.S)()),uTexSize:G.IO.create(j.S.create(t,r)),uViewport:G.IO.create((0,q.T)()),uViewportAdjusted:G.IO.create(!0),uViewDirectionProjectionInverse:G.IO.create((0,N.y)()),uGradientColorA:G.IO.create((0,V.A)()),uGradientColorB:G.IO.create((0,V.A)()),uGradientRatio:G.IO.create(.5),uBlur:G.IO.create(0),uOpacity:G.IO.create(1),uSaturation:G.IO.create(0),uLightness:G.IO.create(0),uRotation:G.IO.create(W.T.identity()),dVariant:G.IO.create("skybox")},i={...el},o=(0,s.s8)(e,"triangles",eu,i,n);return(0,l.T)(o,n)}(e,r,n)}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&G.IO.update(this.renderable.values.uTexSize,j.S.set(this.renderable.values.uTexSize.ref.value,e,t))}clearSkybox(){void 0!==this.skybox&&(this.skybox.texture.destroy(),this.skybox.assets.forEach(e=>this.assetManager.release(e)),this.skybox=void 0)}updateSkybox(e,t,r){var a,n,i;let o=null===(a=this.skybox)||void 0===a?void 0:a.props.faces,s=t.faces.params;if(!s.nx||!s.ny||!s.nz||!s.px||!s.py||!s.pz){this.clearSkybox(),null==r||r(!1);return}if(this.skybox&&o&&(n=t.faces,i=this.skybox.props.faces,ei(n)===ei(i)))null==r||r(!1);else{this.clearSkybox();let{texture:e,assets:a}=function(e,t,r,a){let n="urls"===r.name?{nx:H.x.getUrlAsset(t,r.params.nx),ny:H.x.getUrlAsset(t,r.params.ny),nz:H.x.getUrlAsset(t,r.params.nz),px:H.x.getUrlAsset(t,r.params.px),py:H.x.getUrlAsset(t,r.params.py),pz:H.x.getUrlAsset(t,r.params.pz)}:{nx:r.params.nx,ny:r.params.ny,nz:r.params.nz,px:r.params.px,py:r.params.py,pz:r.params.pz},i=function(e,t){let r=t=>e.resolve(t,"binary").run().then(e=>new Blob([e.data]));
2150return{nx:r(t.nx),ny:r(t.ny),nz:r(t.nz),px:r(t.px),py:r(t.py),pz:r(t.pz)}}(t,n),o=[n.nx,n.ny,n.nz,n.px,n.py,n.pz];return"undefined"==typeof HTMLImageElement?(console.error('Missing "HTMLImageElement" required for background skybox'),null==a||a(!0),{texture:(0,S.DU)(),assets:o}):{texture:e.resources.cubeTexture(i,!0,a),assets:o}}(this.webgl,this.assetManager,t.faces,e=>{this.skybox&&(this.skybox.loaded=!e),null==r||r(!0)});this.skybox={texture:e,props:{...t},assets:a,loaded:!1},G.IO.update(this.renderable.values.tSkybox,e),this.renderable.update()}if(!this.skybox)return;let l=e;"orthographic"===e.state.mode&&(this.camera.setState({...e.state,mode:"perspective"}),this.camera.update(),l=this.camera);let u=this.renderable.values.uViewDirectionProjectionInverse.ref.value;N.y.isZero(e.headRotation)?(V.A.sub(this.dir,l.state.position,l.state.target),V.A.setMagnitude(this.dir,this.dir,.1),V.A.copy(this.position,this.dir),N.y.lookAt(u,this.position,this.target,l.state.up)):N.y.invert(u,e.headRotation),N.y.mul(u,l.projection,u),N.y.invert(u,u),G.IO.update(this.renderable.values.uViewDirectionProjectionInverse,u);let c=this.renderable.values.uRotation.ref.value;W.T.fromEuler(c,Z.create((0,X.Id)(t.rotation.x),(0,X.Id)(t.rotation.y),(0,X.Id)(t.rotation.z)),"XYZ"),G.IO.update(this.renderable.values.uRotation,c),G.IO.updateIfChanged(this.renderable.values.uBlur,t.blur),G.IO.updateIfChanged(this.renderable.values.uOpacity,t.opacity),G.IO.updateIfChanged(this.renderable.values.uSaturation,t.saturation),G.IO.updateIfChanged(this.renderable.values.uLightness,t.lightness),G.IO.updateIfChanged(this.renderable.values.dVariant,"skybox"),this.renderable.update()}clearImage(){void 0!==this.image&&(this.image.texture.destroy(),this.assetManager.release(this.image.asset),this.image=void 0)}updateImage(e,t){var r,a;if(!e.source.params){this.clearImage(),null==t||t(!1);return}if(this.image&&this.image.props.source.params&&(r=e.source,a=this.image.props.source,es(r)===es(a)))null==t||t(!1);else{this.clearImage();let{texture:r,asset:a}=function(e,t,r,a){var n;let i="url"===r.name?null!==(n=t.tryFindFilename(r.params))&&void 0!==n?n:H.x.getUrlAsset(t,r.params):r.params;if("undefined"==typeof HTMLImageElement)return console.error('Missing "HTMLImageElement" required for background image'),null==a||a(!0),{texture:(0,S.DU)(),asset:i};let o=e.resources.texture("image-uint8","rgba","ubyte","linear"),s=new Image;return s.onload=()=>{o.load(s),(e.isWebGL2||(0,X.wt)(s.width)&&(0,X.wt)(s.height))&&o.mipmap(),null==a||a()},s.onerror=()=>{null==a||a(!0)},t.resolve(i,"binary").run().then(e=>{let t=new Blob([e.data]);s.src=URL.createObjectURL(t)}),{texture:o,asset:i}}(this.webgl,this.assetManager,e.source,e=>{this.image&&(this.image.loaded=!e),null==t||t(!0)});this.image={texture:r,props:{...e},asset:a,loaded:!1},G.IO.update(this.renderable.values.tImage,r),this.renderable.update()}this.image&&(G.IO.updateIfChanged(this.renderable.values.uBlur,e.blur),G.IO.updateIfChanged(this.renderable.values.uOpacity,e.opacity),G.IO.updateIfChanged(this.renderable.values.uSaturation,e.saturation),G.IO.updateIfChanged(this.renderable.values.uLightness,e.lightness),G.IO.updateIfChanged(this.renderable.values.uViewportAdjusted,"viewport"===e.coverage),G.IO.updateIfChanged(this.renderable.values.dVariant,"image"),this.renderable.update())}updateImageScaling(){var e,t;let r=this.renderable.values,[a,n]=r.uTexSize.ref.value,i=(null===(e=this.image)||void 0===e?void 0:e.texture.getWidth())||0,o=(null===(t=this.image)||void 0===t?void 0:t.texture.getHeight())||0,s=a/n;s<i/o?G.IO.update(r.uImageScale,j.S.set(r.uImageScale.ref.value,i*n/o,n)):G.IO.update(r.uImageScale,j.S.set(r.uImageScale.ref.value,a,o*a/i));let[l,u]=r.uImageScale.ref.value,c=l/u;c>s?G.IO.update(r.uImageOffset,j.S.set(r.uImageOffset.ref.value,(1-s/c)/2,0)):G.IO.update(r.uImageOffset,j.S.set(r.uImageOffset.ref.value,0,(1-c/s)/2))}updateGradient(e,t,r,a,n){G.IO.update(this.renderable.values.uGradientColorA,f.Il.toVec3Normalized(this.renderable.values.uGradientColorA.ref.value,e)),G.IO.update(this.renderable.values.uGradientColorB,f.Il.toVec3Normalized(this.renderable.values.uGradientColorB.ref.value,t)),G.IO.updateIfChanged(this.renderable.values.uGradientRatio,r),G.IO.updateIfChanged(this.renderable.values.uViewportAdjusted,n),G.IO.updateIfChanged(this.renderable.values.dVariant,a),this.renderable.update(
2150)}update(e,t,r){if("off"===t.variant.name){this.clearSkybox(),this.clearImage(),null==r||r(!1);return}"skybox"===t.variant.name?(this.clearImage(),this.updateSkybox(e,t.variant.params,r)):"image"===t.variant.name?(this.clearSkybox(),this.updateImage(t.variant.params,r)):"horizontalGradient"===t.variant.name?(this.clearSkybox(),this.clearImage(),this.updateGradient(t.variant.params.topColor,t.variant.params.bottomColor,t.variant.params.ratio,t.variant.name,"viewport"===t.variant.params.coverage),null==r||r(!1)):"radialGradient"===t.variant.name&&(this.clearSkybox(),this.clearImage(),this.updateGradient(t.variant.params.centerColor,t.variant.params.edgeColor,t.variant.params.ratio,t.variant.name,"viewport"===t.variant.params.coverage),null==r||r(!1));let{x:a,y:n,width:i,height:o}=e.viewport;G.IO.update(this.renderable.values.uViewport,q.T.set(this.renderable.values.uViewport.ref.value,a,n,i,o))}_isEnabled(e){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||"horizontalGradient"===e.variant.name||"radialGradient"===e.variant.name)}isEnabled(e){return e.enabled&&this._isEnabled(e.background)}isReady(){return!!(this.skybox&&this.skybox.loaded||this.image&&this.image.loaded||"horizontalGradient"===this.renderable.values.dVariant.ref.value||"radialGradient"===this.renderable.values.dVariant.ref.value)}clear(e,t,r){let{gl:a,state:n}=this.webgl;this._isEnabled(e)?(t?n.clearColor(0,0,0,0):(f.Il.toVec3Normalized(this.bgColor,r),n.clearColor(this.bgColor[0],this.bgColor[1],this.bgColor[2],1)),a.clear(a.COLOR_BUFFER_BIT),n.enable(a.BLEND),n.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE,a.ONE_MINUS_SRC_ALPHA)):(n.clearColor(0,0,0,1),a.clear(a.COLOR_BUFFER_BIT))}render(e){this._isEnabled(e)&&this.isReady()&&("image"===this.renderable.values.dVariant.ref.value&&this.updateImageScaling(),h.kM&&this.webgl.timer.mark("BackgroundPass.render"),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("BackgroundPass.render"))}dispose(){this.clearSkybox(),this.clearImage()}}let en="background-skybox";function ei(e){var t,r,a,n,i,o;return"urls"===e.name?`${en}_${e.params.nx}|${e.params.ny}|${e.params.nz}|${e.params.px}|${e.params.py}|${e.params.pz}`:`${en}_${null===(t=e.params.nx)||void 0===t?void 0:t.id}|${null===(r=e.params.ny)||void 0===r?void 0:r.id}|${null===(a=e.params.nz)||void 0===a?void 0:a.id}|${null===(n=e.params.px)||void 0===n?void 0:n.id}|${null===(i=e.params.py)||void 0===i?void 0:i.id}|${null===(o=e.params.pz)||void 0===o?void 0:o.id}`}let eo="background-image";function es(e){var t;return"url"===e.name?`${eo}_${e.params}`:`${eo}_${null===(t=e.params)||void 0===t?void 0:t.id}`}let el={drawCount:(0,n.R$)("number"),instanceCount:(0,n.R$)("number"),aPosition:(0,n.LQ)("float32",2,0),tSkybox:(0,n.U2)("texture","rgba","ubyte","linear"),tImage:(0,n.U2)("texture","rgba","ubyte","linear"),uImageScale:(0,n.wt)("v2"),uImageOffset:(0,n.wt)("v2"),uTexSize:(0,n.wt)("v2"),uViewport:(0,n.wt)("v4"),uViewportAdjusted:(0,n.wt)("b"),uViewDirectionProjectionInverse:(0,n.wt)("m4"),uGradientColorA:(0,n.wt)("v3"),uGradientColorB:(0,n.wt)("v3"),uGradientRatio:(0,n.wt)("f"),uBlur:(0,n.wt)("f"),uOpacity:(0,n.wt)("f"),uSaturation:(0,n.wt)("f"),uLightness:(0,n.wt)("f"),uRotation:(0,n.wt)("m3"),dVariant:(0,n.O0)("string",["skybox","image","verticalGradient","horizontalGradient","radialGradient"])},eu=(0,i.Lq)("background",z,L,{shaderTextureLod:"optional"}),ec=` 2151precision mediump float; 2152precision mediump sampler2D; 2153 2154uniform sampler2D tColor; 2155uniform vec2 uTexSizeInv; 2156 2157uniform float uSharpness; 2158 2159// adapted from https://www.shadertoy.com/view/stXSWB 2160 2161/* 2162* FidelityFX Super Resolution scales up a low resolution 2163* image, while adding fine detail. 2164* 2165* MIT Open License 2166* 2167* https://gpuopen.com/fsr 2168* 2169* Left: FSR processed 2170* Right: Original texture, bilinear interpolation 2171* 2172* Mouse at top: Sharpness 0 stops (maximum) 2173* Mouse at bottom: Sharpness 2 stops (minimum) 2174* 2175* It works in two passes- 2176* EASU upsamples the image with a clamped Lanczos kernel. 2177* RCAS sharpens the image at the target resolution. 2178* 2179* I needed to make a few changes to improve readability and 2180* WebGL compatibility in an algorithm I don't fully understand. 2181* Expect bugs. 2182* 2183* Shader not currently running for WebGL1 targets (eg. mobile Safari) 2184* 2185* There is kind of no point to using FSR in Shadertoy, as it renders buffers 2186* at full target resolution. But this might be useful for WebGL based demos 2187* running smaller-than-target render buffers. 2188* 2189* For sharpening with a full resolution render buffer, 2190* FidelityFX CAS is a better option. 2191* https://www.shadertoy.com/view/ftsXzM 2192* 2193* For readability and compatibility, these optimisations have been removed: 2194* * Fast approximate inverse and inversesqrt 2195* * textureGather fetches (not WebGL compatible) 2196* * Multiplying by reciprocal instead of division 2197* 2198* Apologies to AMD for the numerous slowdowns and errors I have introduced. 2199* 2200*/ 2201 2202/***** RCAS *****/ 2203#define FSR_RCAS_LIMIT (0.25-(1.0/16.0)) 2204 2205// Input callback prototypes that need to be implemented by calling shader 2206vec4 FsrRcasLoadF(vec2 p); 2207//------------------------------------------------------------------------------------------------------------------------------ 2208void FsrRcasCon( 2209 out float con, 2210 // The scale is {0.0 := maximum, to N>0, where N is the number of stops (halving) of the reduction of sharpness}. 2211 float sharpness 2212) { 2213 // Transform from stops to linear value. 2214 con = exp2(-sharpness); 2215} 2216 2217vec3 FsrRcasF( 2218 vec2 ip, // Integer pixel position in output. 2219 float con 2220) { 2221 // Constant generated by RcasSetup(). 2222 // Algorithm uses minimal 3x3 pixel neighborhood. 2223 // b 2224 // d e f 2225 // h
2226 vec2 sp = vec2(ip); 2227 vec3 b = FsrRcasLoadF(sp + vec2( 0,-1)).rgb; 2228 vec3 d = FsrRcasLoadF(sp + vec2(-1, 0)).rgb; 2229 vec3 e = FsrRcasLoadF(sp).rgb; 2230 vec3 f = FsrRcasLoadF(sp + vec2( 1, 0)).rgb; 2231 vec3 h = FsrRcasLoadF(sp + vec2( 0, 1)).rgb; 2232 2233 // Luma times 2. 2234 float bL = b.g + .5 * (b.b + b.r); 2235 float dL = d.g + .5 * (d.b + d.r); 2236 float eL = e.g + .5 * (e.b + e.r); 2237 float fL = f.g + .5 * (f.b + f.r); 2238 float hL = h.g + .5 * (h.b + h.r); 2239 2240 // Noise detection. 2241 #ifdef dDenoise 2242 float nz = .25 * (bL + dL + fL + hL) - eL; 2243 nz=clamp( 2244 abs(nz) 2245 /( 2246 max(max(bL,dL),max(eL,max(fL,hL))) 2247 -min(min(bL,dL),min(eL,min(fL,hL))) 2248 ), 2249 0., 1. 2250 ); 2251 nz=1.-.5*nz; 2252 #endif 2253 2254 // Min and max of ring. 2255 vec3 mn4 = min(b, min(f, h)); 2256 vec3 mx4 = max(b, max(f, h)); 2257 2258 // Immediate constants for peak range. 2259 vec2 peakC = vec2(1., -4.); 2260 2261 // Limiters, these need to be high precision RCPs. 2262 vec3 hitMin = mn4 / (4. * mx4); 2263 vec3 hitMax = (peakC.x - mx4) / (4.* mn4 + peakC.y); 2264 vec3 lobeRGB = max(-hitMin, hitMax); 2265 float lobe = max( 2266 -FSR_RCAS_LIMIT, 2267 min(max(lobeRGB.r, max(lobeRGB.g, lobeRGB.b)), 0.) 2268 )*con; 2269 2270 // Apply noise removal. 2271 #ifdef dDenoise 2272 lobe *= nz; 2273 #endif 2274 2275 // Resolve, which needs the medium precision rcp approximation to avoid visible tonality changes. 2276 return (lobe * (b + d + h + f) + e) / (4. * lobe + 1.); 2277} 2278 2279 2280vec4 FsrRcasLoadF(vec2 p) { 2281 return texture2D(tColor, p * uTexSizeInv); 2282} 2283 2284void main() { 2285 // Set up constants 2286 float con; 2287 FsrRcasCon(con, uSharpness); 2288 2289 // Perform RCAS pass 2290 vec3 col = FsrRcasF(gl_FragCoord.xy, con); 2291 2292 gl_FragColor = vec4(col, FsrRcasLoadF(gl_FragCoord.xy).a); 2293} 2294`,ed={sharpness:c.e.Numeric(.5,{min:0,max:1,step:.05}),denoise:c.e.Boolean(!0)};class ep{constructor(e,t){this.webgl=e,this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),i={...a.GE,tColor:o.IO.create(t),uTexSizeInv:o.IO.create(u.Sg.create(1/r,1/n)),uSharpness:o.IO.create(.5),dDenoise:o.IO.create(!0)},c={...ef},d=(0,s.s8)(e,"triangles",em,c,i);return(0,l.T)(d,i)}(e,t)}updateState(e){let{gl:t,state:r}=this.webgl;r.enable(t.SCISSOR_TEST),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.depthMask(!1);let{x:a,y:n,width:i,height:o}=e;r.viewport(a,n,i,o),r.scissor(a,n,i,o),r.clearColor(0,0,0,1),t.clear(t.COLOR_BUFFER_BIT)}setSize(e,t){o.IO.update(this.renderable.values.uTexSizeInv,u.Sg.set(this.renderable.values.uTexSizeInv.ref.value,1/e,1/t))}update(e,t){let{values:r}=this.renderable,{sharpness:a,denoise:n}=t,i=!1;r.tColor.ref.value!==e&&(o.IO.update(this.renderable.values.tColor,e),i=!0),o.IO.updateIfChanged(r.uSharpness,2-2*Math.pow(a,.25)),r.dDenoise.ref.value!==n&&(i=!0),o.IO.updateIfChanged(r.dDenoise,n),i&&this.renderable.update()}render(e,t){h.kM&&this.webgl.timer.mark("CasPass.render"),t?t.bind():this.webgl.bindDrawingBuffer(),this.updateState(e),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("CasPass.render")}}let ef={...a.iz,tColor:(0,n.U2)("texture","rgba","ubyte","linear"),uTexSizeInv:(0,n.wt)("v2"),uSharpness:(0,n.wt)("f"),dDenoise:(0,n.O0)("boolean")},em=(0,i.Lq)("cas",d.C,ec);var eh=r(12175),eg=r(57133),ev=r(59978),eb=r(12489);let ey=` 2295precision highp float; 2296precision highp int; 2297precision highp sampler2D; 2298 2299#include common 2300 2301uniform sampler2D tDepth; 2302uniform vec2 uTexSize; 2303uniform vec4 uBounds; 2304 2305uniform float uNear; 2306uniform float uFar; 2307 2308#if dLightCount != 0 2309 uniform vec3 uLightDirection[dLightCount]; 2310 uniform vec3 uLightColor[dLightCount]; 2311#endif 2312 2313uniform vec3 uAmbientColor; 2314 2315uniform mat4 uProjection; 2316uniform mat4 uInvProjection; 2317 2318uniform float uMaxDistance; 2319uniform float uTolerance; 2320 2321// Map full [0,1] coords -> bounds [0,1] coords 2322vec2 fullCoordsToBoundsCoords(vec2 fullCoords) { 2323 return (fullCoords - uBounds.xy) / (uBounds.zw - uBounds.xy); 2324} 2325 2326// Map bounds [0,1] coords -> full [0,1] coords 2327vec2 boundsCoordsToFullCoords(vec2 boundsCoords) { 2328 return uBounds.xy + (uBounds.zw - uBounds.xy) * boundsCoords; 2329} 2330
2331bool isBackground(const in float depth) { 2332 return depth == 1.0; 2333} 2334 2335bool outsideBounds(const in vec2 p) { 2336 return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w; 2337} 2338 2339float getViewZ(const in float depth) { 2340 #if dOrthographic == 1 2341 return orthographicDepthToViewZ(depth, uNear, uFar); 2342 #else 2343 return perspectiveDepthToViewZ(depth, uNear, uFar); 2344 #endif 2345} 2346 2347float getDepth(const in vec2 coords) { 2348 #ifdef depthTextureSupport 2349 return texture2D(tDepth, coords).r; 2350 #else 2351 return unpackRGBAToDepth(texture2D(tDepth, coords)); 2352 #endif 2353} 2354 2355float screenFade(const in vec2 coords) { 2356 vec2 c = (coords - uBounds.xy) / (uBounds.zw - uBounds.xy); 2357 vec2 fade = max(12.0 * abs(c - 0.5) - 5.0, vec2(0.0)); 2358 return saturate(1.0 - dot(fade, fade)); 2359} 2360 2361// based on https://panoskarabelas.com/posts/screen_space_shadows/ 2362vec3 screenSpaceShadow(const in vec3 position, const in vec3 lightDirection, const in vec3 lightColor, const in float stepLength) { 2363 // Ray position and direction (in view-space) 2364 vec3 rayPos = position; 2365 vec3 rayDir = -lightDirection; 2366 2367 // Compute ray step 2368 vec3 rayStep = rayDir * stepLength; 2369 2370 // Ray march towards the light 2371 vec4 rayCoords = vec4(0.0); 2372 for (int i = 0; i < dSteps; ++i) { 2373 // Step the ray 2374 rayPos += rayStep; 2375 2376 rayCoords = uProjection * vec4(rayPos, 1.0); 2377 rayCoords.xyz = (rayCoords.xyz / rayCoords.w) * 0.5 + 0.5; 2378 rayCoords.xy = boundsCoordsToFullCoords(rayCoords.xy); 2379 2380 if (outsideBounds(rayCoords.xy)) { 2381 return lightColor; 2382 } 2383 2384 // Compute the difference between the ray's and the camera's depth 2385 float depth = getDepth(rayCoords.xy); 2386 float viewZ = getViewZ(depth); 2387 float zDelta = rayPos.z - viewZ; 2388 2389 if (zDelta < uTolerance) { 2390 // Fade out as we approach the edges of the screen 2391 return mix(vec3(0.0), lightColor, 1.0 - screenFade(rayCoords.xy)); 2392 } 2393 } 2394 2395 return lightColor; 2396} 2397 2398void main(void) { 2399 vec2 invTexSize = 1.0 / uTexSize; 2400 vec2 selfCoords = gl_FragCoord.xy * invTexSize; 2401 float selfDepth = getDepth(selfCoords); 2402 2403 if (isBackground(selfDepth)) { 2404 gl_FragColor = vec4(0.0); 2405 return; 2406 } 2407 2408 vec2 selfBoundsCoords = fullCoordsToBoundsCoords(selfCoords); 2409 if (any(lessThan(selfBoundsCoords, vec2(0.0))) || any(greaterThan(selfBoundsCoords, vec2(1.0)))) { 2410 gl_FragColor = vec4(0.0); 2411 return; 2412 } 2413 2414 vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfBoundsCoords, selfDepth), uInvProjection); 2415 float stepLength = uMaxDistance / float(dSteps); 2416 2417 float l = length(uAmbientColor); 2418 float a = l; 2419 #if dLightCount != 0 2420 vec3 s; 2421 #pragma unroll_loop_start 2422 for (int i = 0; i < dLightCount; ++i) { 2423 s = screenSpaceShadow(selfViewPos, uLightDirection[i], uLightColor[i], stepLength); 2424 l += length(s); 2425 a += length(uLightColor[i]); 2426 } 2427 #pragma unroll_loop_end 2428 #endif 2429 2430 gl_FragColor = vec4(l / a); 2431} 2432`,ex={steps:c.e.Numeric(1,{min:1,max:64,step:1}),maxDistance:c.e.Numeric(3,{min:0,max:256,step:1}),tolerance:c.e.Numeric(1,{min:0,max:10,step:.1})};class eS{static isEnabled(e){return e.enabled&&"off"!==e.shadow.name}constructor(e,t,r,n){this.webgl=e,this.invProjection=u.yb.identity(),this.invHeadRotation=u.yb.identity(),this.target=e.createRenderTarget(t,r,!1),this.renderable=function(e,t){let r=t.getWidth(),n=t.getHeight(),c={...a.GE,tDepth:o.IO.create(t),uTexSize:o.IO.create(u.Sg.create(r,n)),uProjection:o.IO.create(u.yb.identity()),uInvProjection:o.IO.create(u.yb.identity()),uBounds:o.IO.create((0,u.T8)()),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),dSteps:o.IO.create(1),uMaxDistance:o.IO.create(3),uTolerance:o.IO.create(1),uLightDirection:o.IO.create([]),uLightColor:o.IO.create([]),dLightCount:o.IO.create(0),uAmbientColor:o.IO.create((0,u.AO)())},p={...eT},f=(0,i.Lq)("shadows",d.C,ey),m=(0,s.s8)(e,"triangles",f,p,c);return(0,l.T)(m,c)}
2432(e,n)}getByteCount(){return this.target.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)))}update(e,t,r,a){let n=!1,i="orthographic"===e.state.mode?1:0,[s,l]=this.renderable.values.uTexSize.ref.value,c=e.viewport;o.IO.update(this.renderable.values.uProjection,e.projection),o.IO.update(this.renderable.values.uInvProjection,u.yb.invert(this.invProjection,e.projection)),u.T8.set(this.renderable.values.uBounds.ref.value,c.x/s,c.y/l,(c.x+c.width)/s,(c.y+c.height)/l),o.IO.update(this.renderable.values.uBounds,this.renderable.values.uBounds.ref.value),o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFar,e.far),this.renderable.values.dOrthographic.ref.value!==i&&(o.IO.update(this.renderable.values.dOrthographic,i),n=!0),o.IO.updateIfChanged(this.renderable.values.uMaxDistance,a.maxDistance*e.scale),o.IO.updateIfChanged(this.renderable.values.uTolerance,a.tolerance*e.scale),this.renderable.values.dSteps.ref.value!==a.steps&&(o.IO.update(this.renderable.values.dSteps,a.steps),n=!0),u.yb.isZero(e.headRotation)?o.IO.update(this.renderable.values.uLightDirection,t.direction):o.IO.update(this.renderable.values.uLightDirection,(0,eb.bR)(t,u.yb.invert(this.invHeadRotation,e.headRotation))),o.IO.update(this.renderable.values.uLightColor,t.color),this.renderable.values.dLightCount.ref.value!==t.count&&(o.IO.update(this.renderable.values.dLightCount,t.count),n=!0),o.IO.update(this.renderable.values.uAmbientColor,r),n&&this.renderable.update()}render(){h.kM&&this.webgl.timer.mark("ShadowPass.render"),this.target.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("ShadowPass.render")}}let eT={...a.iz,tDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),uProjection:(0,n.wt)("m4"),uInvProjection:(0,n.wt)("m4"),uBounds:(0,n.wt)("v4"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),dSteps:(0,n.O0)("number"),uMaxDistance:(0,n.wt)("f"),uTolerance:(0,n.wt)("f"),uLightDirection:(0,n.wt)("v3[]"),uLightColor:(0,n.wt)("v3[]"),dLightCount:(0,n.O0)("number"),uAmbientColor:(0,n.wt)("v3")},eC=` 2433precision highp float; 2434precision highp int; 2435precision highp sampler2D; 2436 2437#include common 2438 2439 2440uniform sampler2D tDepth; 2441uniform sampler2D tDepthHalf; 2442uniform sampler2D tDepthQuarter; 2443 2444#if defined(dIncludeTransparent) 2445 uniform sampler2D tDepthTransparent; 2446 uniform sampler2D tDepthHalfTransparent; 2447 uniform sampler2D tDepthQuarterTransparent; 2448#endif 2449 2450uniform int uTransparencyFlag; 2451 2452uniform vec2 uTexSize; 2453uniform vec4 uBounds; 2454 2455uniform vec3 uSamples[dNSamples]; 2456 2457uniform mat4 uProjection; 2458uniform mat4 uInvProjection; 2459 2460#ifdef dMultiScale 2461 uniform float uLevelRadius[dLevels]; 2462 uniform float uLevelBias[dLevels]; 2463 uniform float uNearThreshold; 2464 uniform float uFarThreshold; 2465#else 2466 uniform float uRadius; 2467#endif 2468uniform float uBias; 2469 2470float smootherstep(float edge0, float edge1, float x) { 2471 x = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0); 2472 return x * x * x * (x * (x * 6.0 - 15.0) + 10.0); 2473} 2474 2475float noise(const in vec2 coords) { 2476 float a = 12.9898; 2477 float b = 78.233; 2478 float c = 43758.5453; 2479 float dt = dot(coords, vec2(a,b)); 2480 float sn = mod(dt, PI); 2481 return abs(fract(sin(sn) * c)); // is abs necessary? 2482} 2483 2484vec2 getNoiseVec2(const in vec2 coords) { 2485 return vec2(noise(coords), noise(coords + vec2(PI, 2.71828))); 2486} 2487 2488bool isBackground(const in float depth) { 2489 return depth == 1.0; 2490} 2491 2492bool isOutsideBounds(const in vec2 coords) { 2493 return coords.x < uBounds.x || coords.x > uBounds.z || coords.y < uBounds.y || coords.y > uBounds.w; 2494} 2495 2496float getDepth(const in vec2 coords, const in int transparentFlag) { 2497 if (transparentFlag == 1){ 2498 #if defined(dIncludeTransparent) 2499 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)).x; 2500 #else 2501 return 1.0; 2502 #endif 2503 } else { 2504 #ifdef depthTextureSupport 2505 return texture2D(tDepth, coords).r; 2506 #else 2507 return unpackRGBAToDepth(texture2D(tDepth, coords)); 2508 #endif 2509 } 2510} 2511 2512#if defined(dIncludeTransparent) 2513 vec2 getDepthTransparentWithAlpha(const in vec2 coords){ 2514 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)); 2515 } 2516#endif 2517 2518#define dQuarterThreshold 0.1 2519#define dHalfThreshold 0.05 2520 2521float getMappedDepth(const in vec2 coords, const in vec2 selfCoords) { 2522 float d = distance(coords, selfCoords);
2523 #ifdef depthTextureSupport 2524 if (d > dQuarterThreshold) { 2525 return texture2D(tDepthQuarter, coords).r; 2526 } else if (d > dHalfThreshold) { 2527 return texture2D(tDepthHalf, coords).r; 2528 } else { 2529 return texture2D(tDepth, coords).r; 2530 } 2531 #else 2532 if (d > dQuarterThreshold) { 2533 return unpackRGBAToDepth(texture2D(tDepthQuarter, coords)); 2534 } else if (d > dHalfThreshold) { 2535 return unpackRGBAToDepth(texture2D(tDepthHalf, coords)); 2536 } else { 2537 return unpackRGBAToDepth(texture2D(tDepth, coords)); 2538 } 2539 #endif 2540} 2541 2542#if defined(dIncludeTransparent) 2543 vec2 getMappedDepthTransparentWithAlpha(const in vec2 coords, const in vec2 selfCoords) { 2544 float d = distance(coords, selfCoords); 2545 if (d > dQuarterThreshold) { 2546 return unpackRGBAToDepthWithAlpha(texture2D(tDepthQuarterTransparent, coords)); 2547 } else if (d > dHalfThreshold) { 2548 return unpackRGBAToDepthWithAlpha(texture2D(tDepthHalfTransparent, coords)); 2549 } else { 2550 return unpackRGBAToDepthWithAlpha(texture2D(tDepthTransparent, coords)); 2551 } 2552 } 2553#endif 2554 2555// adapted from https://gist.github.com/bgolus/a07ed65602c009d5e2f753826e8078a0 2556vec3 viewNormalAtPixelPositionAccurate(const in vec2 vpos, const in int transparentFlag) { 2557 // current pixel's depth 2558 float c = getDepth(vpos, transparentFlag); 2559 2560 // get current pixel's view space position 2561 vec3 viewSpacePos_c = screenSpaceToViewSpace(vec3(vpos, c), uInvProjection); 2562 2563 // get view space position at 1 pixel offsets in each major direction 2564 vec3 viewSpacePos_l = screenSpaceToViewSpace(vec3(vpos + vec2(-1.0, 0.0) / uTexSize, getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection); 2565 vec3 viewSpacePos_r = screenSpaceToViewSpace(vec3(vpos + vec2( 1.0, 0.0) / uTexSize, getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag)), uInvProjection); 2566 vec3 viewSpacePos_d = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0,-1.0) / uTexSize, getDepth(vpos + vec2( 0.0,-1.0) / uTexSize, transparentFlag)), uInvProjection); 2567 vec3 viewSpacePos_u = screenSpaceToViewSpace(vec3(vpos + vec2( 0.0, 1.0) / uTexSize, getDepth(vpos + vec2( 0.0, 1.0) / uTexSize, transparentFlag)), uInvProjection); 2568 2569 // get the difference between the current and each offset position 2570 vec3 l = viewSpacePos_c - viewSpacePos_l; 2571 vec3 r = viewSpacePos_r - viewSpacePos_c; 2572 vec3 d = viewSpacePos_c - viewSpacePos_d; 2573 vec3 u = viewSpacePos_u - viewSpacePos_c; 2574 2575 // get depth values at 1 & 2 pixels offsets from current along the horizontal axis 2576 vec4 H = vec4( 2577 getDepth(vpos + vec2(-1.0, 0.0) / uTexSize, transparentFlag), 2578 getDepth(vpos + vec2( 1.0, 0.0) / uTexSize, transparentFlag), 2579 getDepth(vpos + vec2(-2.0, 0.0) / uTexSize, transparentFlag), 2580 getDepth(vpos + vec2( 2.0, 0.0) / uTexSize, transparentFlag) 2581 ); 2582 2583 // get depth values at 1 & 2 pixels offsets from current along the vertical axis 2584 vec4 V = vec4( 2585 getDepth(vpos + vec2(0.0,-1.0) / uTexSize, transparentFlag), 2586 getDepth(vpos + vec2(0.0, 1.0) / uTexSize, transparentFlag), 2587 getDepth(vpos + vec2(0.0,-2.0) / uTexSize, transparentFlag), 2588 getDepth(vpos + vec2(0.0, 2.0) / uTexSize, transparentFlag) 2589 ); 2590 2591 // current pixel's depth difference from slope of offset depth samples 2592 // differs from original article because we're using non-linear depth values 2593 // see article's comments 2594 vec2 he = abs((2.0 * H.xy - H.zw) - c); 2595 vec2 ve = abs((2.0 * V.xy - V.zw) - c); 2596 2597 // pick horizontal and vertical diff with the smallest depth difference from slopes 2598 vec3 hDeriv = he.x < he.y ? l : r; 2599 vec3 vDeriv = ve.x < ve.y ? d : u; 2600 2601 // get view space normal from the cross product of the best derivatives 2602 vec3 viewNormal = normalize(cross(hDeriv, vDeriv)); 2603 2604 return viewNormal; 2605} 2606 2607float getPixelSize(const in vec2 coords, const in float depth) { 2608 vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection); 2609 vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection); 2610 return distance(viewPos0, viewPos1); 2611} 2612 2613// StarCraft II Ambient Occlusion by [Filion and McNaughton 2008] 2614void main(void) { 2615 vec2 invTexSize = 1.0 / uTexSize; 2616 vec2 selfCoords = gl_FragCoord.xy * invTexSize; 2617 float selfDepth = getDepth(selfCoords, uTransparencyFlag); 2618 vec2 selfPackedDepth = packUnitIntervalToRG(selfDepth); 2619
2620 if (isBackground(selfDepth)) { 2621 gl_FragColor = vec4(packUnitIntervalToRG(1.0), selfPackedDepth); 2622 return; 2623 } 2624 2625 vec3 selfViewNormal = viewNormalAtPixelPositionAccurate(selfCoords, uTransparencyFlag); 2626 vec3 selfViewPos = screenSpaceToViewSpace(vec3(selfCoords, selfDepth), uInvProjection); 2627 2628 vec3 randomVec = normalize(vec3(getNoiseVec2(selfCoords) * 2.0 - 1.0, 0.0)); 2629 vec3 tangent = normalize(randomVec - selfViewNormal * dot(randomVec, selfViewNormal)); 2630 vec3 bitangent = cross(selfViewNormal, tangent); 2631 mat3 TBN = mat3(tangent, bitangent, selfViewNormal); 2632 2633 float occlusion = 0.0; 2634 #ifdef dMultiScale 2635 float pixelSize = getPixelSize(selfCoords, selfDepth); 2636 2637 for(int l = 0; l < dLevels; l++) { 2638 // TODO: smooth transition 2639 if (pixelSize * uNearThreshold > uLevelRadius[l]) continue; 2640 if (pixelSize * uFarThreshold < uLevelRadius[l]) continue; 2641 2642 float nSamples = float(dNSamples); 2643 float levelOcclusion = 0.0; 2644 for(int i = 0; i < dNSamples; i++) { 2645 // get sample position: 2646 vec3 sampleViewPos = TBN * uSamples[i]; 2647 sampleViewPos = selfViewPos + sampleViewPos * uLevelRadius[l]; 2648 2649 // project sample position: 2650 vec4 offset = vec4(sampleViewPos, 1.0); 2651 offset = uProjection * offset; 2652 offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5; 2653 if (isOutsideBounds(offset.xy)) { 2654 nSamples -= 1.0; 2655 continue; 2656 } 2657 2658 // get sample depth: 2659 float sampleOcc = 0.0; 2660 #ifdef dIllumination 2661 if (uTransparencyFlag == 1) { 2662 #endif 2663 float sampleDepth = getMappedDepth(offset.xy, selfCoords); 2664 if (!isBackground(sampleDepth)) { 2665 float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z; 2666 sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZ)) * uLevelBias[l]; 2667 } 2668 #ifdef dIllumination 2669 } 2670 #endif 2671 #if defined(dIncludeTransparent) 2672 vec2 sampleDepthWithAlpha = getMappedDepthTransparentWithAlpha(offset.xy, selfCoords); 2673 if (!isBackground(sampleDepthWithAlpha.x)) { 2674 float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z; 2675 sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uLevelRadius[l] / abs(selfViewPos.z - sampleViewZWithAlpha)) * uLevelBias[l] * sampleDepthWithAlpha.y); 2676 } 2677 #endif 2678 2679 levelOcclusion += sampleOcc; 2680 } 2681 levelOcclusion /= nSamples; 2682 occlusion = max(occlusion, levelOcclusion); 2683 } 2684 #else 2685 float nSamples = float(dNSamples); 2686 for(int i = 0; i < dNSamples; i++) { 2687 vec3 sampleViewPos = TBN * uSamples[i]; 2688 sampleViewPos = selfViewPos + sampleViewPos * uRadius; 2689 2690 vec4 offset = vec4(sampleViewPos, 1.0); 2691 offset = uProjection * offset; 2692 offset.xyz = (offset.xyz / offset.w) * 0.5 + 0.5; 2693 if (isOutsideBounds(offset.xy)) { 2694 nSamples -= 1.0; 2695 continue; 2696 } 2697 2698 float sampleOcc = 0.0; 2699 #ifdef dIllumination 2700 if (uTransparencyFlag == 1) { 2701 #endif 2702 // NOTE: using getMappedDepth here causes issues on some mobile devices 2703 float sampleDepth = getDepth(offset.xy, 0); 2704 if (!isBackground(sampleDepth)) { 2705 float sampleViewZ = screenSpaceToViewSpace(vec3(offset.xy, sampleDepth), uInvProjection).z; 2706 sampleOcc = step(sampleViewPos.z + 0.025, sampleViewZ) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZ)); 2707 } 2708 #ifdef dIllumination 2709 } 2710 #endif 2711 #if defined(dIncludeTransparent) 2712 vec2 sampleDepthWithAlpha = getDepthTransparentWithAlpha(offset.xy);
2713 if (!isBackground(sampleDepthWithAlpha.x)) { 2714 float sampleViewZWithAlpha = screenSpaceToViewSpace(vec3(offset.xy, sampleDepthWithAlpha.x), uInvProjection).z; 2715 sampleOcc = max(sampleOcc, step(sampleViewPos.z + 0.025, sampleViewZWithAlpha) * smootherstep(0.0, 1.0, uRadius / abs(selfViewPos.z - sampleViewZWithAlpha)) * sampleDepthWithAlpha.y); 2716 } 2717 #endif 2718 2719 occlusion += sampleOcc; 2720 } 2721 2722 occlusion /= nSamples; 2723 #endif 2724 occlusion = 1.0 - (uBias * occlusion); 2725 2726 vec2 packedOcclusion = packUnitIntervalToRG(clamp(occlusion, 0.01, 1.0)); 2727 2728 gl_FragColor = vec4(packedOcclusion, selfPackedDepth); 2729} 2730`,eO=` 2731precision highp float; 2732precision highp int; 2733precision highp sampler2D; 2734 2735uniform sampler2D tSsaoDepth; 2736uniform vec2 uTexSize; 2737uniform vec4 uBounds; 2738 2739uniform float uKernel[dOcclusionKernelSize]; 2740uniform float uBlurDepthBias; 2741 2742uniform float uBlurDirectionX; 2743uniform float uBlurDirectionY; 2744 2745uniform mat4 uInvProjection; 2746uniform float uNear; 2747uniform float uFar; 2748 2749#include common 2750 2751float getViewZ(const in float depth) { 2752 #if dOrthographic == 1 2753 return orthographicDepthToViewZ(depth, uNear, uFar); 2754 #else 2755 return perspectiveDepthToViewZ(depth, uNear, uFar); 2756 #endif 2757} 2758 2759bool isBackground(const in float depth) { 2760 return depth == 1.0; 2761} 2762 2763bool isNearClip(const in float depth) { 2764 return depth == 0.0; 2765} 2766 2767bool outsideBounds(const in vec2 p) { 2768 return p.x < uBounds.x || p.y < uBounds.y || p.x > uBounds.z || p.y > uBounds.w; 2769} 2770 2771float getPixelSize(const in vec2 coords, const in float depth) { 2772 vec3 viewPos0 = screenSpaceToViewSpace(vec3(coords, depth), uInvProjection); 2773 vec3 viewPos1 = screenSpaceToViewSpace(vec3(coords + vec2(1.0, 0.0) / uTexSize, depth), uInvProjection); 2774 return distance(viewPos0, viewPos1); 2775} 2776 2777void main(void) { 2778 vec2 coords = gl_FragCoord.xy / uTexSize; 2779 2780 vec2 packedDepth = texture2D(tSsaoDepth, coords).zw; 2781 2782 if (outsideBounds(coords)) { 2783 gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth); 2784 return; 2785 } 2786 2787 float selfDepth = unpackRGToUnitInterval(packedDepth); 2788 // (if background and if second pass) or if near clip 2789 if ((isBackground(selfDepth) && uBlurDirectionY != 0.0) || isNearClip(selfDepth)) { 2790 gl_FragColor = vec4(packUnitIntervalToRG(1.0), packedDepth); 2791 return; 2792 } 2793 2794 float selfViewZ = getViewZ(selfDepth); 2795 float pixelSize = getPixelSize(coords, selfDepth); 2796 2797 vec2 offset = vec2(uBlurDirectionX, uBlurDirectionY) / uTexSize; 2798 2799 float sum = 0.0; 2800 float kernelSum = 0.0; 2801 const int halfKernelSize = dOcclusionKernelSize / 2; 2802 // only if kernelSize is odd 2803 for (int i = -halfKernelSize; i <= halfKernelSize; i++) { 2804 if (abs(float(i)) > 1.0 && abs(float(i)) * pixelSize > 0.8) continue; 2805 2806 vec2 sampleCoords = coords + float(i) * offset; 2807 if (outsideBounds(sampleCoords)) { 2808 continue; 2809 } 2810 2811 vec4 sampleSsaoDepth = texture2D(tSsaoDepth, sampleCoords); 2812 2813 float sampleDepth = unpackRGToUnitInterval(sampleSsaoDepth.zw); 2814 if (isBackground(sampleDepth) || isNearClip(sampleDepth)) { 2815 continue; 2816 } 2817 2818 float sampleViewZ = getViewZ(sampleDepth); 2819 if (abs(selfViewZ - sampleViewZ) >= uBlurDepthBias) { 2820 continue; 2821 } 2822 2823 float kernel = uKernel[int(abs(float(i)))]; // abs is not defined for int in webgl1 2824 float sampleValue = unpackRGToUnitInterval(sampleSsaoDepth.xy); 2825 2826 sum += kernel * sampleValue; 2827 kernelSum += kernel; 2828 } 2829 gl_FragColor = vec4(packUnitIntervalToRG(sum / kernelSum), packedDepth); 2830} 2831`;var eI=r(1571);let eA={samples:c.e.Numeric(32,{min:1,max:256,step:1}),multiScale:c.e.MappedStatic("off",{on:c.e.Group({levels:c.e.ObjectList({radius:c.e.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x"}),bias:c.e.Numeric(1,{min:0,max:3,step:.1})},e=>`${e.radius}, ${e.bias}`,{defaultValue:[{radius:2,bias:1},{radius:5,bias:1},{radius:8,bias:1},{radius:11,bias:1}]}),nearThreshold:c.e.Numeric(10,{min:0,max:50,step:1}),farThreshold:c.e.Numeric(1500,{min:0,max:1e4,step:100})}),off:c.e.Group({})},{cycle:!0}),radius:c.e.Numeric(5,{min:0,max:20,step:.1},{description:"Final occlusion radius is 2^x",hideIf:e=>(null==e?void 0:e.multiScale.name)==="on"}),bias:c.e.Numeric(.8,{min:0,max:3,step:.1}),blurKernelSize:c.e.Numeric(15,{min:1,max:25,step:2}
2831),blurDepthBias:c.e.Numeric(.5,{min:0,max:1,step:.01}),resolutionScale:c.e.Numeric(1,{min:.1,max:1,step:.05},{description:"Adjust resolution of occlusion calculation"}),color:c.e.Color((0,f.Il)(0)),transparentThreshold:c.e.Numeric(.4,{min:0,max:1,step:.05})};class ew{static isEnabled(e){return e.enabled&&"off"!==e.occlusion.name}static isTransparentEnabled(e,t){return e.opacityAverage<1&&e.transparencyMin<t.transparentThreshold}calcSsaoScale(e){return Math.min(1,1/this.webgl.pixelRatio)*e}getDepthTexture(){return 1===this.ssaoScale?this.depthTextureOpaque:this.downsampledDepthTargetOpaque.texture}getTransparentDepthTexture(){return 1===this.ssaoScale?this.depthTextureTransparent:this.downsampledDepthTargetTransparent.texture}constructor(e,t,r,n,c,p){this.webgl=e,this.invProjection=u.yb.identity(),this.levelsCameraScale=-1;let{textureFloatLinear:f}=e.extensions;this.depthTextureOpaque=c,this.depthTextureTransparent=p,this.nSamples=1,this.blurKernelSize=1,this.ssaoScale=this.calcSsaoScale(1),this.texSize=[t,r],this.levels=[],this.framebuffer=e.resources.framebuffer(),this.blurFirstPassFramebuffer=e.resources.framebuffer(),this.blurSecondPassFramebuffer=e.resources.framebuffer();let m=Math.floor(t*this.ssaoScale),h=Math.floor(r*this.ssaoScale),g=Math.max(1,Math.floor(.5*m)),b=Math.max(1,Math.floor(.5*h)),y=Math.max(1,Math.floor(.25*m)),x=Math.max(1,Math.floor(.25*h)),S=f?"linear":"nearest";this.downsampledDepthTargetOpaque=n?e.createRenderTarget(m,h,!1,"uint8","linear","rgba"):e.createRenderTarget(m,h,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.downsampleDepthRenderableOpaque=(0,a.Oz)(e,c);let T=this.getDepthTexture();this.depthHalfTargetOpaque=n?e.createRenderTarget(g,b,!1,"uint8","linear","rgba"):e.createRenderTarget(g,b,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.depthHalfRenderableOpaque=(0,a.Oz)(e,T),this.depthQuarterTargetOpaque=n?e.createRenderTarget(y,x,!1,"uint8","linear","rgba"):e.createRenderTarget(y,x,!1,"float32",S,e.isWebGL2?"alpha":"rgba"),this.depthQuarterRenderableOpaque=(0,a.Oz)(e,this.depthHalfTargetOpaque.texture),this.downsampledDepthTargetTransparent=e.createRenderTarget(m,h,!1,"uint8","linear","rgba"),this.downsampleDepthRenderableTransparent=(0,a.Oz)(e,p);let C=this.getTransparentDepthTexture();this.depthHalfTargetTransparent=e.createRenderTarget(g,b,!1,"uint8","linear","rgba"),this.depthHalfRenderableTransparent=(0,a.Oz)(e,C),this.depthQuarterTargetTransparent=e.createRenderTarget(y,x,!1,"uint8","linear","rgba"),this.depthQuarterRenderableTransparent=(0,a.Oz)(e,this.depthHalfTargetTransparent.texture),this.ssaoDepthTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTexture.define(m,h),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.ssaoDepthTransparentTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.ssaoDepthTransparentTexture.define(m,h),this.depthBlurProxyTexture=e.resources.texture("image-uint8","rgba","ubyte","linear"),this.depthBlurProxyTexture.define(m,h),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0"),this.renderable=function(e,t,r,n,c,p,f){let m={...a.GE,tDepth:o.IO.create(t),tDepthHalf:o.IO.create(r),tDepthQuarter:o.IO.create(n),dIllumination:o.IO.create(!1),dIncludeTransparent:o.IO.create(!0),uTransparencyFlag:o.IO.create(0),tDepthTransparent:o.IO.create(c),tDepthHalfTransparent:o.IO.create(p),tDepthQuarterTransparent:o.IO.create(f),uSamples:o.IO.create(eR(32)),dNSamples:o.IO.create(32),uProjection:o.IO.create(u.yb.identity()),uInvProjection:o.IO.create(u.yb.identity()),uBounds:o.IO.create((0,u.T8)()),uTexSize:o.IO.create(u.Sg.create(e.gl.drawingBufferWidth,e.gl.drawingBufferHeight)),uRadius:o.IO.create(32),uBias:o.IO.create(.8),dMultiScale:o.IO.create(!1),dLevels:o.IO.create(3),uLevelRadius:o.IO.create([4,32,256]),uLevelBias:o.IO.create([.8,.8,.8]),uNearThreshold:o.IO.create(10),uFarThreshold:o.IO.create(1500)},h={...eD},g=(0,i.Lq)("ssao",d.C,eC),b=(0,s.s8)(e,"triangles",g,h,m);return(0,l.T)(b,m)}(e,T,this.depthHalfTargetOpaque.texture,this.depthQuarterTargetOpaque.texture,C,this.depthHalfTargetTransparent.texture,this.depthQuarterTargetTransparent.texture),this.blurFirstPassRenderable=eM(e,this.ssaoDepthTransparentTexture,"horizontal"),this.blurSecondPassRenderable=eM(e,this.depthBlurProxyTexture,"vertical")}getByteCount(){return this.downsampledDepthTargetOpaque.getByteCount()+this.depthHalfTargetOpaque.getByteCount()+this.depthQuarterTargetOpaque.getByteCount()+this.downsampledDepthTargetTransparent.getByteCount()+this.depthHalfTargetTransparent.getByteCount()+this.depthQuarterTargetTransparent.getByteCount()+this.ssaoDepthTexture.getByteCount()+this.ssaoDepthTransparentTexture.getByteCount()+this.depthBlurProxyTexture.getByteCount()}setSize(e,t){let[r,a]=this.texSize,n=this.calcSsaoScale(1);if(e!==r||t!==a||this.ssaoScale!==n){this.texSize.splice(0,2,e,t);let r=Math.floor(e*this.ssaoScale),a=Math.floor(t*this.ssaoScale);this.ssaoDepthTexture.define(r,a),this.ssaoDepthTransparentTexture.define(r,a),this.depthBlurProxyTexture.define(r,a);let n=Math.max(1,Math.floor(.5*r)),i=Math.max(1,Math.floor(.5*a)),s=Math.max(1,Math.floor(.25*r)),l=Math.max(1,Math.floor(.25*a));this.downsampledDepthTargetOpaque.setSize(r,a),this.depthHalfTargetOpaque.setSize(n,i),this.depthQuarterTargetOpaque.setSize(s,l),o.IO.update(this.downsampleDepthRenderableOpaque.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthHalfRenderableOpaque.values.uTexSize,u.Sg.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,n,i)),o.IO.update(this.depthQuarterRenderableOpaque.values.uTexSize,u.Sg.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,s,l)),this.downsampledDepthTargetTransparent.setSize(r,a),this.depthHalfTargetTransparent.setSize(n,i),this.depthQuarterTargetTransparent.setSize(s,l),o.IO.update(this.downsampleDepthRenderableTransparent.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthHalfRenderableTransparent.values.uTexSize,u.Sg.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,n,i)),o.IO.update(this.depthQuarterRenderableTransparent.values.uTexSize,u.Sg.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,s,l)),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,r,a)),o.IO.update(this.blurFirstPassRenderable.values.uTexSize,u.Sg.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,r,a)),o.IO.update(this.blurSecondPassRenderable.values.uTexSize,u.Sg.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,r,a));let c=this.getDepthTexture(),d=this.getTransparentDepthTexture();o.IO.update(this.depthHalfRenderableOpaque.values.tColor,c),o.IO.update(this.depthHalfRenderableTransparent.values.tColor,d),o.IO.update(this.renderable.values.tDepth,c),o.IO.update(this.renderable.values.tDepthTransparent,d),this.depthHalfRenderableOpaque.update(
2831),this.depthHalfRenderableTransparent.update(),this.renderable.update()}}reset(){this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),this.depthBlurProxyTexture.attachFramebuffer(this.blurFirstPassFramebuffer,"color0")}update(e,t,r,a=!1){let n=!1,i=!1,s=!1,l="orthographic"===e.state.mode?1:0,c=u.yb.invert(this.invProjection,e.projection),[d,p]=this.texSize,f=e.viewport;o.IO.update(this.renderable.values.uProjection,e.projection),o.IO.update(this.renderable.values.uInvProjection,c);let m=this.renderable.values.uBounds,h=this.ssaoScale;u.T8.set(m.ref.value,Math.floor(f.x*h)/(d*h),Math.floor(f.y*h)/(p*h),Math.ceil((f.x+f.width)*h)/(d*h),Math.ceil((f.y+f.height)*h)/(p*h)),o.IO.update(m,m.ref.value),o.IO.update(this.blurFirstPassRenderable.values.uBounds,m.ref.value),o.IO.update(this.blurSecondPassRenderable.values.uBounds,m.ref.value),o.IO.updateIfChanged(this.blurFirstPassRenderable.values.uNear,e.near),o.IO.updateIfChanged(this.blurSecondPassRenderable.values.uNear,e.near),o.IO.updateIfChanged(this.blurFirstPassRenderable.values.uFar,e.far),o.IO.updateIfChanged(this.blurSecondPassRenderable.values.uFar,e.far),o.IO.update(this.blurFirstPassRenderable.values.uInvProjection,c),o.IO.update(this.blurSecondPassRenderable.values.uInvProjection,c),o.IO.update(this.blurFirstPassRenderable.values.uBlurDepthBias,r.blurDepthBias*e.scale),o.IO.update(this.blurSecondPassRenderable.values.uBlurDepthBias,r.blurDepthBias*e.scale),this.blurFirstPassRenderable.values.dOrthographic.ref.value!==l&&(i=!0,o.IO.update(this.blurFirstPassRenderable.values.dOrthographic,l),o.IO.update(this.blurSecondPassRenderable.values.dOrthographic,l));let g=ew.isTransparentEnabled(t,r);this.renderable.values.dIncludeTransparent.ref.value!==g&&(n=!0,o.IO.update(this.renderable.values.dIncludeTransparent,g)),this.renderable.values.dIllumination.ref.value!==a&&(n=!0,o.IO.update(this.renderable.values.dIllumination,a)),this.nSamples!==r.samples&&(n=!0,this.nSamples=r.samples,o.IO.update(this.renderable.values.uSamples,eR(this.nSamples)),o.IO.updateIfChanged(this.renderable.values.dNSamples,this.nSamples));let b="on"===r.multiScale.name;if(this.renderable.values.dMultiScale.ref.value!==b&&(n=!0,o.IO.update(this.renderable.values.dMultiScale,b)),"on"===r.multiScale.name){let t=r.multiScale.params;if(this.levelsCameraScale!==e.scale||!(0,o.vZ)(this.levels,t.levels)){n=!0,this.levelsCameraScale=e.scale,this.levels=t.levels;let r=function(e,t,r){let a=e.length,{radius:n,bias:i}={radius:Array(3*a).fill(0),bias:Array(3*a).fill(0)};e=e.slice().sort((e,t)=>e.radius-t.radius);for(let r=0;r<a;++r){let a=e[r];n[r]=Math.pow(2,a.radius)*t,i[r]=a.bias}return{count:a,radius:n,bias:i}}(t.levels,e.scale);o.IO.updateIfChanged(this.renderable.values.dLevels,r.count),o.IO.update(this.renderable.values.uLevelRadius,r.radius),o.IO.update(this.renderable.values.uLevelBias,r.bias)}o.IO.updateIfChanged(this.renderable.values.uNearThreshold,t.nearThreshold),o.IO.updateIfChanged(this.renderable.values.uFarThreshold,t.farThreshold)}else o.IO.updateIfChanged(this.renderable.values.uRadius,Math.pow(2,r.radiu
2831s)*e.scale);if(o.IO.updateIfChanged(this.renderable.values.uBias,r.bias),this.blurKernelSize!==r.blurKernelSize){i=!0,this.blurKernelSize=r.blurKernelSize;let e=eP(this.blurKernelSize);o.IO.update(this.blurFirstPassRenderable.values.uKernel,e),o.IO.update(this.blurSecondPassRenderable.values.uKernel,e),o.IO.update(this.blurFirstPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize),o.IO.update(this.blurSecondPassRenderable.values.dOcclusionKernelSize,this.blurKernelSize)}let y=this.calcSsaoScale(r.resolutionScale);if(this.ssaoScale!==y){n=!0,s=!0,this.ssaoScale=y;let e=Math.floor(d*this.ssaoScale),t=Math.floor(p*this.ssaoScale);this.ssaoDepthTexture.define(e,t),this.ssaoDepthTransparentTexture.define(e,t),this.depthBlurProxyTexture.define(e,t);let r=Math.floor(.5*e),a=Math.floor(.5*t),i=Math.floor(.25*e),l=Math.floor(.25*t);this.downsampledDepthTargetOpaque.setSize(e,t),this.depthHalfTargetOpaque.setSize(r,a),this.depthQuarterTargetOpaque.setSize(i,l);let c=this.getDepthTexture();o.IO.update(this.depthHalfRenderableOpaque.values.tColor,c),o.IO.update(this.renderable.values.tDepth,c),o.IO.update(this.renderable.values.tDepthHalf,this.depthHalfTargetOpaque.texture),o.IO.update(this.renderable.values.tDepthQuarter,this.depthQuarterTargetOpaque.texture),o.IO.update(this.downsampleDepthRenderableOpaque.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableOpaque.values.uTexSize.ref.value,e,t)),o.IO.update(this.depthHalfRenderableOpaque.values.uTexSize,u.Sg.set(this.depthHalfRenderableOpaque.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthQuarterRenderableOpaque.values.uTexSize,u.Sg.set(this.depthQuarterRenderableOpaque.values.uTexSize.ref.value,i,l)),this.downsampledDepthTargetTransparent.setSize(e,t),this.depthHalfTargetTransparent.setSize(r,a),this.depthQuarterTargetTransparent.setSize(i,l);let f=this.getTransparentDepthTexture();o.IO.update(this.depthHalfRenderableTransparent.values.tColor,f),o.IO.update(this.renderable.values.tDepthTransparent,f),o.IO.update(this.renderable.values.tDepthHalfTransparent,this.depthHalfTargetTransparent.texture),o.IO.update(this.renderable.values.tDepthQuarterTransparent,this.depthQuarterTargetTransparent.texture),o.IO.update(this.downsampleDepthRenderableTransparent.values.uTexSize,u.Sg.set(this.downsampleDepthRenderableTransparent.values.uTexSize.ref.value,e,t)),o.IO.update(this.depthHalfRenderableTransparent.values.uTexSize,u.Sg.set(this.depthHalfRenderableTransparent.values.uTexSize.ref.value,r,a)),o.IO.update(this.depthQuarterRenderableTransparent.values.uTexSize,u.Sg.set(this.depthQuarterRenderableTransparent.values.uTexSize.ref.value,i,l)),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t)),o.IO.update(this.blurFirstPassRenderable.values.uTexSize,u.Sg.set(this.blurFirstPassRenderable.values.uTexSize.ref.value,e,t)),o.IO.update(this.blurSecondPassRenderable.values.uTexSize,u.Sg.set(this.blurSecondPassRenderable.values.uTexSize.ref.value,e,t))}n&&this.renderable.update(),i&&(this.blurFirstPassRenderable.update(),this.blurSecondPassRenderable.update()),s&&(this.depthHalfRenderableOpaque.update(),this.depthHalfRenderableTransparent.update())}render(e){h.kM&&this.webgl.timer.mark("SSAO.render");let{state:t}=this.webgl,{x:r,y:a,width:n,height:i}=e.viewport,s=this.renderable.values.dIncludeTransparent.ref.value,l=this.renderable.values.dMultiScale.ref.value,u=Math.floor(r*this.ssaoScale),c=Math.floor(a*this.ssaoScale),d=Math.ceil(n*this.ssaoScale),p=Math.ceil(i*this.ssaoScale);t.viewport(u,c,d,p),t.scissor(u,c,d,p),this.ssaoScale<1&&(h.kM&&this.webgl.timer.mark("SSAO.downsample"),this.downsampledDepthTargetOpaque.bind(),this.downsampleDepthRenderableOpaque.render(),s&&(this.downsampledDepthTargetTransparent.bind(),this.downsampleDepthRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.downsample")),h.kM&&this.webgl.timer.mark("SSAO.half"),l&&(this.depthHalfTargetOpaque.bind(),this.depthHalfRenderableOpaque.render()),l&&s&&(this.depthHalfTargetTransparent.bind(),this.depthHalfRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.half"),h.kM&&this.webgl.timer.mark("SSAO.quarter"),l&&(this.depthQuarterTargetOpaque.bind(),this.depthQuarterRenderableOpaque.render()),l&&s&&(this.depthQuarterTargetTransparent.bind(),this.depthQuarterRenderableTransparent.render()),h.kM&&this.webgl.timer.markEnd("SSAO.quarter"),h.kM&&this.webgl.timer.mark("SSAO.opaque"),this.ssaoDepthTexture.attachFramebuffer(this.framebuffer,"color0"),o.IO.update(this.renderable.values.uTransparencyFlag,0),this.framebuffer.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.opaque"),h.kM&&this.webgl.timer.mark("SSAO.blurOpaque"),o.IO.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTexture),this.blurFirstPassRenderable.update(
2831),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.blurOpaque"),s&&(h.kM&&this.webgl.timer.mark("SSAO.transparent "),this.ssaoDepthTransparentTexture.attachFramebuffer(this.framebuffer,"color0"),o.IO.update(this.renderable.values.uTransparencyFlag,1),this.framebuffer.bind(),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.transparent "),h.kM&&this.webgl.timer.mark("SSAO.blurTransparent "),o.IO.update(this.blurFirstPassRenderable.values.tSsaoDepth,this.ssaoDepthTransparentTexture),this.blurFirstPassRenderable.update(),this.blurFirstPassFramebuffer.bind(),this.blurFirstPassRenderable.render(),this.ssaoDepthTransparentTexture.attachFramebuffer(this.blurSecondPassFramebuffer,"color0"),this.blurSecondPassFramebuffer.bind(),this.blurSecondPassRenderable.render(),h.kM&&this.webgl.timer.markEnd("SSAO.blurTransparent ")),h.kM&&this.webgl.timer.markEnd("SSAO.render")}}let eD={...a.iz,tDepth:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthHalf:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthQuarter:(0,n.U2)("texture","rgba","ubyte","linear"),dIllumination:(0,n.O0)("boolean"),uTransparencyFlag:(0,n.wt)("i"),dIncludeTransparent:(0,n.O0)("boolean"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthHalfTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),tDepthQuarterTransparent:(0,n.U2)("texture","rgba","ubyte","linear"),uSamples:(0,n.wt)("v3[]"),dNSamples:(0,n.O0)("number"),uProjection:(0,n.wt)("m4"),uInvProjection:(0,n.wt)("m4"),uBounds:(0,n.wt)("v4"),uTexSize:(0,n.wt)("v2"),uRadius:(0,n.wt)("f"),uBias:(0,n.wt)("f"),dMultiScale:(0,n.O0)("boolean"),dLevels:(0,n.O0)("number"),uLevelRadius:(0,n.wt)("f[]"),uLevelBias:(0,n.wt)("f[]"),uNearThreshold:(0,n.wt)("f"),uFarThreshold:(0,n.wt)("f")},eE={...a.iz,tSsaoDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),uKernel:(0,n.wt)("f[]"),dOcclusionKernelSize:(0,n.O0)("number"),uBlurDepthBias:(0,n.wt)("f"),uBlurDirectionX:(0,n.wt)("f"),uBlurDirectionY:(0,n.wt)("f"),uInvProjection:(0,n.wt)("m4"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uBounds:(0,n.wt)("v4"),dOrthographic:(0,n.O0)("number")};function eM(e,t,r){let n={...a.GE,tSsaoDepth:o.IO.create(t),uTexSize:o.IO.create(u.Sg.create(t.getWidth(),t.getHeight())),uKernel:o.IO.create(eP(15)),dOcclusionKernelSize:o.IO.create(15),uBlurDepthBias:o.IO.create(.5),uBlurDirectionX:o.IO.create("horizontal"===r?1:0),uBlurDirectionY:o.IO.create("vertical"===r?1:0),uInvProjection:o.IO.create(u.yb.identity()),uNear:o.IO.create(0),uFar:o.IO.create(1e4),uBounds:o.IO.create((0,u.T8)()),dOrthographic:o.IO.create(0)},c={...eE},p=(0,i.Lq)("ssao_blur",d.C,eO),f=(0,s.s8)(e,"triangles",p,c,n);return(0,l.T)(f,n)}function eP(e){let t=e/3,r=Math.floor((e+1)/2),a=[];for(let e=0;e<r;e++)a.push(1/(Math.sqrt(2*Math.PI)*t)*Math.exp(-e*e/(2*t*t)));return a}let ek=new eI._Q;function eB(){let e=(0,u.AO)();for(;;){let t=2*ek.float()-1,r=2*ek.float()-1;if(t*t+r*r<1){let a=2*Math.sqrt(1-t*t-r*r)*(.5>ek.float()?-1:1);u.AO.set(e,t,r,a),u.AO.normalize(e,e),u.AO.scale(e,e,ek.float());break}}return e[2]<0&&(e[2]=-e[2]),e}let e_=[];function eR(e){let t=(e_.length<e&&(e_=function(e,t){if(t.length>=e)return t;0===t.length&&t.push(eB());let r=Math.max(10,Math.min(30,Math.floor(e/10)));for(let a=t.length;a<e;a++){let e;let a=-1;for(let n=0;n<r;n++){let r=eB(),n=1/0;for(let e of t)n=Math.min(n,u.AO.distance(r,e));n>a&&(a=n,e=r)}t.push(e)}return t}(e,e_)),e_),r=[];for(let a=0;a<e;a++){let n=(a*a+2*a+1)/(e*e);n=.1+.9*n,r.push(t[a][0]*n),r.push(t[a][1]*n),r.push(t[a][2]*n)}return r}let eF={...a.iz,tSsaoDepth:(0,n.U2)("texture","rgba","ubyte","nearest"),tSsaoDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),tColor:(0,n.U2)("texture","rgba","ubyte","nearest"),tTransparentColor:(0,n.U2)("texture","rgba","ubyte","nearest"),dBlendTransparency:(0,n.O0)("boolean"),tDepthOpaque:(0,n.U2)("texture","rgba","ubyte","nearest"),tDepthTransparent:(0,n.U2)("texture","rgba","ubyte","nearest"),tShadows:(0,n.U2)("texture","rgba","ubyte","nearest"),tOutlines:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2"),dOrthographic:(0,n.O0)("number"),uNear:(0,n.wt)("f"),uFar:(0,n.wt)("f"),uFogNear:(0,n.wt)("f"),uFogFar:(0,n.wt)("f"),uFogColor:(0,n.wt)("v3"),uOutlineColor:(0,n.wt)("v3"),uOcclusionColor:(0,n.wt)("v3"),uTransparentBackgroun
2831d:(0,n.wt)("b"),dOcclusionEnable:(0,n.O0)("boolean"),dOcclusionSingleDepth:(0,n.O0)("boolean"),dOcclusionIncludeOpacity:(0,n.O0)("boolean"),dOcclusionIncludeTransparency:(0,n.O0)("boolean"),uOcclusionOffset:(0,n.wt)("v2"),dShadowEnable:(0,n.O0)("boolean"),dOutlineEnable:(0,n.O0)("boolean"),dOutlineScale:(0,n.O0)("number"),dTransparentOutline:(0,n.O0)("boolean")},eL={enabled:c.e.Boolean(!0),occlusion:c.e.MappedStatic("on",{on:c.e.Group(eA),off:c.e.Group({})},{cycle:!0,description:"Darken occluded crevices with the ambient occlusion effect",hideIf:e=>!1===e.enabled}),shadow:c.e.MappedStatic("off",{on:c.e.Group(ex),off:c.e.Group({})},{cycle:!0,description:"Simplistic shadows",hideIf:e=>!1===e.enabled}),outline:c.e.MappedStatic("off",{on:c.e.Group(ev.TY),off:c.e.Group({})},{cycle:!0,description:"Draw outline around 3D objects",hideIf:e=>!1===e.enabled}),dof:c.e.MappedStatic("off",{on:c.e.Group(eh.$),off:c.e.Group({})},{cycle:!0,description:"DOF",hideIf:e=>!1===e.enabled}),antialiasing:c.e.MappedStatic("smaa",{fxaa:c.e.Group(g),smaa:c.e.Group(E),off:c.e.Group({})},{options:[["fxaa","FXAA"],["smaa","SMAA"],["off","Off"]],description:"Smooth pixel edges",hideIf:e=>!1===e.enabled}),sharpening:c.e.MappedStatic("off",{on:c.e.Group(ed),off:c.e.Group({})},{cycle:!0,description:"Contrast Adaptive Sharpening",hideIf:e=>!1===e.enabled}),background:c.e.Group(er,{isFlat:!0,hideIf:e=>!1===e.enabled}),bloom:c.e.MappedStatic("on",{on:c.e.Group(eg.z),off:c.e.Group({})},{cycle:!0,description:"Bloom",hideIf:e=>!1===e.enabled})};class ez{static isEnabled(e){return e.enabled&&(ew.isEnabled(e)||eS.isEnabled(e)||ev.f1.isEnabled(e)||"off"!==e.background.variant.name)}static isTransparentDepthRequired(e,t){return t.enabled&&(eh.z.isEnabled(t)||ev.f1.isEnabled(t)&&ez.isTransparentOutlineEnabled(t)||ew.isEnabled(t)&&ez.isTransparentSsaoEnabled(e,t))&&e.opacityAverage<1}static isTransparentOutlineEnabled(e){var t;return e.enabled&&ev.f1.isEnabled(e)&&(null===(t=e.outline.params.includeTransparent)||void 0===t||t)}static isTransparentSsaoEnabled(e,t){return t.enabled&&ew.isEnabled(t)&&ew.isTransparentEnabled(e,t.occlusion.params)}static isSsaoEnabled(e){return e.enabled&&ew.isEnabled(e)}constructor(e,t,r){this.webgl=e,this.drawPass=r,this.occlusionOffset=[0,0],this.transparentBackground=!1;let{colorTarget:n,transparentColorTarget:c,depthTextureOpaque:f,depthTextureTransparent:m,packedDepth:h}=r,g=n.getWidth(),b=n.getHeight();this.target=e.createRenderTarget(g,b,!1,"uint8","linear"),this.ssao=new ew(e,g,b,h,f,m),this.shadow=new eS(e,g,b,f),this.outline=new ev.f1(e,g,b,m,f),this.renderable=function(e,t,r,n,c,f,m,h,g,b){let y={...a.GE,tSsaoDepth:o.IO.create(h),tSsaoDepthTransparent:o.IO.create(g),tColor:o.IO.create(t),tTransparentColor:o.IO.create(r),dBlendTransparency:o.IO.create(!0),tDepthOpaque:o.IO.create(n),tDepthTransparent:o.IO.create(c),tShadows:o.IO.create(f),tOutlines:o.IO.create(m),uTexSize:o.IO.create(u.Sg.create(t.getWidth(),t.getHeight())),dOrthographic:o.IO.create(0),uNear:o.IO.create(1),uFar:o.IO.create(1e4),uFogNear:o.IO.create(1e4),uFogFar:o.IO.create(1e4),uFogColor:o.IO.create(u.AO.create(1,1,1)),uOutlineColor:o.IO.create(u.AO.create(0,0,0)),uOcclusionColor:o.IO.create(u.AO.create(0,0,0)),uTransparentBackground:o.IO.create(!1),dOcclusionEnable:o.IO.create(!0),dOcclusionSingleDepth:o.IO.create(!1),dOcclusionIncludeOpacity:o.IO.create(!0),dOcclusionIncludeTransparency:o.IO.create(!1),uOcclusionOffset:o.IO.create(u.Sg.create(0,0)),dShadowEnable:o.IO.create(!1),dOutlineEnable:o.IO.create(!1),dOutlineScale:o.IO.create(1),dTransparentOutline:o.IO.create(b)},x={...eF},S=(0,i.Lq)("postprocessing",d.C,p),T=(0,s.s8)(e,"triangles",S,x,y);return(0,l.T)(T,y)}(e,n.texture,c.texture,f,m,this.shadow.target.texture,this.outline.target.texture,this.ssao.ssaoDepthTexture,this.ssao.ssaoDepthTransparentTexture,!0),this.background=new ea(e,t,g,b)}getByteCount(){return this.target.getByteCount()+this.ssao.getByteCount()+this.shadow.getByteCount()+this.outline.getByteCount()}setSize(e,t){let[r,a]=this.renderable.values.uTexSize.ref.value;(e!==r||t!==a)&&(this.target.setSize(e,t),o.IO.update(this.renderable.values.uTexSize,u.Sg.set(this.renderable.values.uTexSize.ref.value,e,t))),this.ssao.setSize(e,t),this.shadow.setSize(e,t),this.outline.setSize(e,t),this.background.setSize(e,t)}reset(){this.ssao.reset()}updateState(e,t,r,a,n,i,s){let l=!1,u="orthographic"===e.state.mode?1:0,c=ev.f1.isEnabled(n),d=eS.isEnabled(n),p=ew.isEnabled(n);if(p){let r=n.occlusion.params;this.ssao.update(e,t,r);let a=ew.isTransparentEnabled(t,r);this.renderable.values.dOcclusionIncludeTransparency.ref.value!==a&&(l=!0,o.IO.update(this.renderable.values.dOcclusionIncludeTransparency,a)),o.IO.update(this.renderable.values.uOcclusionColor,f.Il.toVec3Normalized(this.renderable.values.uOcclusionColor.ref.value,r.color))}if(d&&this.shadow.update(e,i,s,n.shadow.params),c){let t=n.outline.params,{transparentOutline:r,outlineScale:a}=this.outline.update(e,t,this.drawPass.depthTextureTransparent,this.drawPass.depthTextureOpaque);o.IO.update(this.renderable.values.uOutlineColor,f.Il.toVec3Normalized(this.renderable.values.uOutlineColor.ref.value,t.color)),this.renderable.values.dOutlineScale.ref.value!==a&&(l=!0,o.IO.update(this.renderable.values.dOutlineScale,a)),this.renderable.values.dTransparentOutline.ref.value!==r&&(l=!0,o.IO.update(this.renderable.values.dTransparentOutline,r))}o.IO.updateIfChanged(this.renderable.values.uFar,e.far),o.IO.updateIfChanged(this.renderable.values.uNear,e.near),o.IO.updateIfChanged(this.renderable.values.uFogFar,e.fogFar),o.IO.updateIfChanged(this.renderable.values.uFogNear,e.fogNear),o.IO.update(this.renderable.values.uFogColor,f.Il.toVec3Normalized(this.renderable.values.uFogColor.ref.value,a)),o.IO.updateIfChanged(this.renderable.values.uTransparentBackgroun
2831d,r),this.renderable.values.dOrthographic.ref.value!==u&&(l=!0,o.IO.update(this.renderable.values.dOrthographic,u)),this.renderable.values.dOutlineEnable.ref.value!==c&&(l=!0,o.IO.update(this.renderable.values.dOutlineEnable,c)),this.renderable.values.dShadowEnable.ref.value!==d&&(l=!0,o.IO.update(this.renderable.values.dShadowEnable,d)),this.renderable.values.dOcclusionEnable.ref.value!==p&&(l=!0,o.IO.update(this.renderable.values.dOcclusionEnable,p));let m=t.opacityAverage<1;this.renderable.values.dBlendTransparency.ref.value!==m&&(l=!0,o.IO.update(this.renderable.values.dBlendTransparency,m)),l&&this.renderable.update();let{gl:h,state:g}=this.webgl;g.enable(h.SCISSOR_TEST),g.disable(h.BLEND),g.disable(h.DEPTH_TEST),g.depthMask(!1)}setOcclusionOffset(e,t){this.occlusionOffset[0]=e,this.occlusionOffset[1]=t,o.IO.update(this.renderable.values.uOcclusionOffset,u.Sg.set(this.renderable.values.uOcclusionOffset.ref.value,e,t))}setTransparentBackground(e){this.transparentBackground=e}render(e,t,r,a,n,i,o,s){h.kM&&this.webgl.timer.mark("PostprocessingPass.render"),this.updateState(e,t,a,n,i,o,s);let{state:l}=this.webgl,{x:u,y:c,width:d,height:p}=e.viewport;"on"===i.occlusion.name&&0===this.occlusionOffset[0]&&0===this.occlusionOffset[1]&&this.ssao.render(e),l.viewport(u,c,d,p),l.scissor(u,c,d,p),"on"===i.outline.name&&this.outline.render(),"on"===i.shadow.name&&this.shadow.render(),r?this.webgl.bindDrawingBuffer():this.target.bind(),this.background.update(e,i.background),this.background.clear(i.background,this.transparentBackground,n),this.background.render(i.background),this.renderable.render(),h.kM&&this.webgl.timer.markEnd("PostprocessingPass.render")}}class eN{static isEnabled(e){return e.enabled&&("off"!==e.antialiasing.name||"off"!==e.sharpening.name)}constructor(e,t,r){this.target=e.createRenderTarget(t,r,!1),this.internalTarget=e.createRenderTarget(t,r,!1),this.fxaa=new b(e,this.target.texture),this.smaa=new M(e,this.target.texture),this.cas=new ep(e,this.target.texture)}getByteCount(){return this.target.getByteCount()+this.internalTarget.getByteCount()+this.smaa.getByteCount()}setSize(e,t){let r=this.target.texture.getWidth(),a=this.target.texture.getHeight();(e!==r||t!==a)&&(this.target.setSize(e,t),this.internalTarget.setSize(e,t),this.fxaa.setSize(e,t),this.smaa.supported&&this.smaa.setSize(e,t),this.cas.setSize(e,t))}_renderFxaa(e,t,r,a){"fxaa"===a.antialiasing.name&&(this.fxaa.update(t,a.antialiasing.params),this.fxaa.render(e.viewport,r))}_renderSmaa(e,t,r,a){"smaa"===a.antialiasing.name&&(this.smaa.update(t,a.antialiasing.params),this.smaa.render(e.viewport,r))}_renderAntialiasing(e,t,r,a){"fxaa"===a.antialiasing.name?this._renderFxaa(e,t,r,a):"smaa"===a.antialiasing.name&&this._renderSmaa(e,t,r,a)}_renderCas(e,t,r,a){"on"===a.sharpening.name&&("off"!==a.antialiasing.name&&(t=this.internalTarget.texture),this.cas.update(t,a.sharpening.params),this.cas.render(e.viewport,r))}render(e,t,r,a){if("off"===a.antialiasing.name&&"off"===a.sharpening.name)return;if("smaa"===a.antialiasing.name&&!this.smaa.supported){console.error('SMAA not supported, missing "HTMLImageElement"');return}let n=!0===r?void 0:!1===r?this.target:r;"off"===a.sharpening.name?this._renderAntialiasing(e,t,n,a):("off"===a.antialiasing.name||this._renderAntialiasing(e,t,this.internalTarget,a),this._renderCas(e,t,n,a))}}},73118:function(e,t,r){function a(e,t,r=1){let a=window.innerWidth,n=window.innerHeight;t!==document.body&&(a=t.offsetWidth,n=t.offsetHeight),function(e,t,r,a=1){e.width=Math.round(window.devicePixelRatio*a*t),e.height=Math.round(window.devicePixelRatio*a*r),Object.assign(e.style,{width:`${t}px`,height:`${r}px`})}(e,a,n,r)}async function n(e,t,r){return new Promise((a,n)=>{let i=e=>{e?a(e):n("no blob returned")};HTMLCanvasElement.prototype.toBlob?e.toBlob(i,t,r):function(e,t,r,a){let n=atob(e.toDataURL(r,a).split(",")[1]),i=n.length,o=i>>2,s=new Uint8Array(i),l=new Uint32Array(s.buffer,0,o),u=0;for(let e=0;e<o;++e)l[e]=n.charCodeAt(u++)|n.charCodeAt(u++)<<8|n.charCodeAt(u++)<<16|n.charCodeAt(u++)<<24;let c=3&i;for(;c--;)s[u]=n.charCodeAt(u++);t(new Blob([s],{type:r||"image/png"}))}(e,i,t,r)})}r.d(t,{_c:function(){return n},eY:function(){return a}})},68332:function(e,t,r){function a(){return new i}function n(e){return{previous:null,next:null,inList:!0,value:e}}r.d(t,{S:function(){return a}});class i{constructor(){this.count=0,this.first=null,this.last=null}addFirst(e){let t=n(e);return t.inList=!0,this.first&&(this.first.previous=t),t.next=this.first,this.first=t,this.count++,this.last||(this.last=t),t}addLast(e){let t=n(e);return null!==this.last&&(this.last.next=t),t.previous=this.last,this.last=t,null===this.first&&(this.first=t),t.inList=!0,this.count++,t}removeFirst(){let e=this.first;if(e)return this.remove(e),e.value}removeLast(){let e=this.last;if(e)return this.remove(e),e.value}remove(e){e.inList&&(e.inList=!1,null!==e.previous?e.previous.next=e.next:null===e.previous&&(this.first=e.next),null!==e.next?e.next.previous=e.previous:null===e.next&&(this.last=e.previous),e.next=null,e.previous=null,this.count--)}find(e){let t=this.first;for(;null!==t;){if(t.value===e)return t;t=t.next}}}},54185:function(e,t,r){r.d(t,{IH:function(){return S},U$:function(){return x},ev:function(){return n},qC:function(){return T},w_:function(){return y}});var a,n,i=r(85764),o=r(72558),s=r(14086),l=r(41306),u=r(7922),c=r(71522),d=r(11204),p=r(98224),f=r(23833),m=r(34813),h=r(86276),g=r(43975),b=r(22934);let y=s.e.arrayToOptions(["custom","auto","highest","higher","high","medium","low","lower","lowest"]),x={smoothColors:s.e.MappedStatic("auto",{auto:s.e.Group({}),on:s.e.Group({resolutionFactor:s.e.Numeric(2,{min:.5,max:6,step:.1}),sampleStride:s.e.Numeric(3,{min:1,max:12,step:1})}),off:s.e.Group({})})};function S(e){return!!e.smoothColors}function T(e,t,r){if(("on"===e.name||"auto"===e.name&&t)&&r&&r<3){let t=3;return"on"===e.name?(r*=e.params.resolutionFactor,t=e.params.sampleStride):(r*=2-(0,f.CW)(0,1.1,r),(r=Math.max(.5,r))>1.2&&(t=2)),{resolution:r,stride:t}}}(a=n||(n={})).MaterialCategory={category:"Material"},a.ShadingCategory={category:"Shading"},a.CullingLodCategory={category:"Culling & LOD"},a.CustomQualityParamInfo={category:"Custom Quality",hideIf:e=>void 0!==e.quality&&"custom"!==e.quality}
2831,a.Params={alpha:s.e.Numeric(1,{min:0,max:1,step:.01},{label:"Opacity",isEssential:!0,description:"How opaque/transparent the representation is rendered."}),quality:s.e.Select("auto",y,{isEssential:!0,description:"Visual/rendering quality of the representation."}),material:m.F.getParam(),clip:s.e.Group(h.b.Params),emissive:s.e.Numeric(0,{min:0,max:1,step:.01}),density:s.e.Numeric(.2,{min:0,max:1,step:.01},{description:"Density value to estimate object thickness."}),instanceGranularity:s.e.Boolean(!1,{description:"Use instance granularity for marker, transparency, clipping, overpaint, substance data to save memory."}),lod:s.e.Vec3((0,g.A)(),void 0,{...a.CullingLodCategory,description:"Level of detail.",fieldLabels:{x:"Min Distance",y:"Max Distance",z:"Overlap (Shader)"}}),cellSize:s.e.Numeric(200,{min:0,max:5e3,step:100},{...a.CullingLodCategory,description:"Instance grid cell size."}),batchSize:s.e.Numeric(2e3,{min:0,max:5e4,step:500},{...a.CullingLodCategory,description:"Instance grid batch size."})},a.createSimple=function(e=u.t.grey,t=1,r){r||(r=(0,l.tx)());let a=(0,o.OF)(1,r.instanceCount.ref.value,1,()=>c.ad,!1,()=>!1);return{transform:r,locationIterator:a,theme:{color:(0,d.qY)({},{value:e,lightness:0,saturation:0}),size:(0,p._k)({},{value:t})}}},a.createValues=function(e,t){let r=h.b.getClip(e.clip);return{alpha:i.IO.create(e.alpha),uAlpha:i.IO.create(e.alpha),uVertexCount:i.IO.create(t.vertexCount),uGroupCount:i.IO.create(t.groupCount),drawCount:i.IO.create(t.drawCount),uMetalness:i.IO.create(e.material.metalness),uRoughness:i.IO.create(e.material.roughness),uBumpiness:i.IO.create(e.material.bumpiness),uEmissive:i.IO.create(e.emissive),uDensity:i.IO.create(e.density),dClipObjectCount:i.IO.create(r.objects.count),dClipVariant:i.IO.create(r.variant),uClipObjectType:i.IO.create(r.objects.type),uClipObjectInvert:i.IO.create(r.objects.invert),uClipObjectPosition:i.IO.create(r.objects.position),uClipObjectRotation:i.IO.create(r.objects.rotation),uClipObjectScale:i.IO.create(r.objects.scale),uClipObjectTransform:i.IO.create(r.objects.transform),instanceGranularity:i.IO.create(e.instanceGranularity),uLod:i.IO.create(b.T.create(e.lod[0],e.lod[1],e.lod[2],0))}},a.updateValues=function(e,t){i.IO.updateIfChanged(e.alpha,t.alpha),i.IO.updateIfChanged(e.uMetalness,t.material.metalness),i.IO.updateIfChanged(e.uRoughness,t.material.roughness),i.IO.updateIfChanged(e.uBumpiness,t.material.bumpiness),i.IO.updateIfChanged(e.uEmissive,t.emissive),i.IO.updateIfChanged(e.uDensity,t.density);let r=h.b.getClip(t.clip);i.IO.updateIfChanged(e.dClipObjectCount,r.objects.count),i.IO.updateIfChanged(e.dClipVariant,r.variant),i.IO.update(e.uClipObjectType,r.objects.type),i.IO.update(e.uClipObjectInvert,r.objects.invert),i.IO.update(e.uClipObjectPosition,r.objects.position),i.IO.update(e.uClipObjectRotation,r.objects.rotation),i.IO.update(e.uClipObjectScale,r.objects.scale),i.IO.update(e.uClipObjectTransform,r.objects.transform),i.IO.updateIfChanged(e.instanceGranularity,t.instanceGranularity),i.IO.update(e.uLod,b.T.set(e.uLod.ref.value,t.lod[0],t.lod[1],t.lod[2],0))},a.createRenderableState=function(e={}){let t=void 0===e.alpha||1===e.alpha;return{disposed:!1,visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,opaque:t,writeDepth:t}},a.updateRenderableState=function(e,t){e.opaque=t.alpha*e.alphaFactor>=1,e.writeDepth=e.opaque}},22444:function(e,t,r){r.d(t,{Q4:function(){return l},cO:function(){return c},ms:function(){return s},zr:function(){return o}});var a=r(68303),n=r(87144),i=r(62927);function o(e,t,r,a){return e.fill(a,t,r),!0}function s(e,t,r){e.fill(0,t,r)}function l(e,t,r){let o=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tClipping.ref.value.array);return r?(a.IO.update(r.tClipping,o),a.IO.update(r.uClippingTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.dClipping,e>0),a.IO.updateIfChanged(r.dClippingType,t),r):{tClipping:a.IO.create(o),uClippingTexDim:a.IO.create(n.Sg.create(o.width,o.height)),dClipping:a.IO.create(e>0),dClippingType:a.IO.create(t)}}let u={array:new Uint8Array(1),width:1,height:1};function c(e){return e?(a.IO.update(e.tClipping,u),a.IO.update(e.uClippingTexDim,n.Sg.create(1,1)),a.IO.updateIfChanged(e.dClipping,!1),e):{tClipping:a.IO.create(u),uClippingTexDim:a.IO.create(n.Sg.create(1,1)),dClipping:a.IO.create(!1),dClippingType:a.IO.create("groupInstance")}}},69587:function(e,t,r){r.d(t,{is:function(){return u}});var a=r(85764),n=r(62927),i=r(70371),o=r(87144),s=r(71522),l=r(91407);function u(e,t,r,u){var f;let m=function(e,t,r,u){switch(r.granularity){case"uniform":return function(e,t,r){var n;e.reset();let u=e.hasNext?e.move():{location:s.ad,isSecondary:!1};return n=t(u.location,u.isSecondary),r?(a.IO.update(r.uColor,i.Il.toVec3Normalized(r.uColor.ref.value,n)),a.IO.updateIfChanged(r.dColorType,"uniform"),r):{uColor:a.IO.create(i.Il.toVec3Normalized((0,o.AO)(),n)),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(1,1)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create("uniform"),dUsePalette:a.IO.create(!1)}}(e,r.color,u);case"instance":return e.nonInstanceable?d(e,r.color,u):function(e,t,r){let{instanceCount:a}=e,o=(0,n.l3)(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:r,isSecondary:a,instanceIndex:n}=e.move();i.Il.toArray(t(r,a),o.array,3*n),e.skipInstance()}return c(o,"instance",r)}(e,r.color,u);case"group":return d(e,r.color,u);case"groupInstance":return function(e,t,r){let{groupCount:a,instanceCount:o,hasLocation2:s}=e,l=(0,n.l3)(Math.max(1,o*a*(s?2:1)),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let u=s?6:3;for(;e.hasNext;){let{location:r,location2:a,isSecondary:n,index:o}=e.move();i.Il.toArray(t(r,n),l.array,o*u),s&&i.Il.toArray(t(a,n),l.array,o*u+3)}return c(l,"groupInstance",r)}(e,r.color,u);case"vertex":return function(e,t,r){let{groupCount:a,stride:o}=e,s=(0,n.l3)(Math.max(1,a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset(),e.voidInstances();e.hasNext&&!e.isNextNewInstance;){let{location:r,isSecondary:a,groupIndex:n}
2831=e.move(),l=t(r,a);for(let e=0;e<o;++e)i.Il.toArray(l,s.array,(n+e)*3)}return c(s,"vertex",r)}(t,r.color,u);case"vertexInstance":return function(e,t,r){let{groupCount:a,instanceCount:o,stride:s}=e,l=(0,n.l3)(Math.max(1,o*a),3,Uint8Array,r&&r.tColor.ref.value.array);for(e.reset();e.hasNext;){let{location:r,isSecondary:a,index:n}=e.move(),o=t(r,a);for(let e=0;e<s;++e)i.Il.toArray(o,l.array,(n+e)*3)}return c(l,"vertexInstance",r)}(t,r.color,u);case"volume":return p(r.grid,"volume",u);case"volumeInstance":return p(r.grid,"volumeInstance",u);case"direct":return u?(a.IO.updateIfChanged(u.dColorType,"direct"),u):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(1,1)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create("direct"),dUsePalette:a.IO.create(!1)}}}(e,t,r,u);if(r.palette){a.IO.updateIfChanged(m.dUsePalette,!0);let[e,t]=r.palette.domain||[0,1];a.IO.update(m.uPaletteDomain,o.Sg.set(m.uPaletteDomain.ref.value,e,t)),a.IO.update(m.uPaletteDefault,i.Il.toVec3Normalized(m.uPaletteDefault.ref.value,null!==(f=r.palette.defaultColor)&&void 0!==f?f:(0,i.Il)(13421772))),function(e,t){let r=!0,n=t.ref.value;if(e.colors.length!==n.width||n.filter!==e.filter)r=!1;else{let t=n.array,a=0;for(let n of e.colors){let[e,o,s]=i.Il.toRgb(n);if(t[a++]!==e||t[a++]!==o||t[a++]!==s){r=!1;break}}}if(r)return;let o=new Uint8Array(3*e.colors.length),s=0;for(let t of e.colors){let[e,r,a]=i.Il.toRgb(t);o[s++]=e,o[s++]=r,o[s++]=a}a.IO.update(t,{array:o,height:1,width:e.colors.length,filter:e.filter})}(r.palette,m.tPalette)}else a.IO.updateIfChanged(m.dUsePalette,!1);return m}function c(e,t,r){return r?(a.IO.update(r.tColor,e),a.IO.update(r.uColorTexDim,o.Sg.create(e.width,e.height)),a.IO.updateIfChanged(r.dColorType,t),r):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create(e),tColorGrid:a.IO.create((0,l.DU)()),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(e.width,e.height)),uColorGridDim:a.IO.create(o.AO.create(1,1,1)),uColorGridTransform:a.IO.create(o.T8.create(0,0,0,1)),dColorType:a.IO.create(t),dUsePalette:a.IO.create(!1)}}function d(e,t,r){let{groupCount:a,hasLocation2:o}=e,s=(0,n.l3)(Math.max(1,a*(o?2:1)),3,Uint8Array,r&&r.tColor.ref.value.array);e.reset();let l=o?6:3;for(;e.hasNext&&!e.isNextNewInstance;){let{location:r,location2:a,isSecondary:n,groupIndex:u}=e.move();i.Il.toArray(t(r,n),s.array,u*l),o&&i.Il.toArray(t(a,n),s.array,u*l+3)}return c(s,"group",r)}function p(e,t,r){let{colors:n,dimension:i,transform:s}=e,l=n.getWidth(),u=n.getHeight();return r?(a.IO.update(r.tColorGrid,n),a.IO.update(r.uColorTexDim,o.Sg.create(l,u)),a.IO.update(r.uColorGridDim,o.AO.clone(i)),a.IO.update(r.uColorGridTransform,o.T8.clone(s)),a.IO.updateIfChanged(r.dColorType,t),r):{uColor:a.IO.create((0,o.AO)()),tColor:a.IO.create({array:new Uint8Array(3),width:1,height:1}),tColorGrid:a.IO.create(n),uPaletteDomain:a.IO.create(o.Sg.create(0,1)),uPaletteDefault:a.IO.create((0,o.AO)()),tPalette:a.IO.create({array:new Uint8Array(3),width:1,height:1}),uColorTexDim:a.IO.create(o.Sg.create(l,u)),uColorGridDim:a.IO.create(o.AO.clone(i)),uColorGridTransform:a.IO.create(o.T8.clone(s)),dColorType:a.IO.create(t),dUsePalette:a.IO.create(!1)}}},51858:function(e,t,r){r.d(t,{B:function(){return a}});var a,n=r(69062),i=r(94900),o=r(87144);let s=(0,o.AO)(),l=(0,o.AO)(),u=(0,o.AO)(),c=n.pS.add,d=n.pS.add3;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),p=n.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),f=n.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),m=n.pS.create(Float32Array,1,t,r?r.scaleBuffer.ref.value:e),h=n.pS.create(Float32Array,1,t,r?r.capBuffer.ref.value:e),g=n.pS.create(Float32Array,1,t,r?r.colorModeBuffer.ref.value:e),b=(e,t,r,n,i,o,s,l,u,b,y)=>{for(let x=0;x<6;++x)d(p,e,t,r),d(f,n,i,o),c(a,y),c(m,s),c(h,(l?1:0)+(u?2:0)),c(g,b)},y=(e,t,r,a,n,i,c,d,p)=>{let f=o.AO.distance(e,t),m=r%2!=0,h=Math.floor((r+1)/2),g=2;o.AO.setMagnitude(u,o.AO.sub(u,t,e),f/(r+.5)),o.AO.copy(s,e);for(let r=0;r<h;++r)o.AO.add(s,s,u),m&&r===h-1?(o.AO.copy(l,t),c||(i=!1)):o.AO.add(l,s,u),d&&(g=o.AO.distance(e,l)/(2*f)),b(s[0],s[1],s[2],l[0],l[1],l[2],a,n,i,g,p),o.AO.add(s,s,u)};return{add:b,addFixedCountDashes:y,addFixedLengthDashes:(e,t,r,a,n,i,s,l)=>{let u=o.AO.distance(e,t);y(e,t,u/r,a,n,i,!0,s,l)},getCylinders:()=>{let e=a.elementCount/6,t=n.pS.compact(a,!0),o=n.pS.compact(p,!0),s=n.pS.compact(f,!0),l=n.pS.compact(m,!0),u=n.pS.compact(h,!0),c=n.pS.compact(g,!0),d=r&&e<=r.cylinderCount?r.mappingBuffer.ref.value:new Float32Array(18*e),b=r&&e<=r.cylinderCount?r.indexBuffer.ref.value:new Uint32Array(12*e);return(!r||e>r.cylinderCount)&&function(e,t,r){for(let r=0;r<e;++r){let e=18*r;t[e]=-1,t[e+1]=1,t[e+2]=-1,t[e+3]=-1,t[e+4]=-1,t[e+5]=-1,t[e+6]=1,t[e+7]=1,t[e+8]=-1,t[e+9]=1,t[e+10]=1,t[e+11]=1,t[e+12]=1,t[e+13]=-1,t[e+14]=-1,t[e+15]=1,t[e+16]=-1,t[e+17]=1}for(let t=0;t<e;++t){let e=6*t,a=12*t;r[a]=e,r[a+1]=e+1,r[a+2]=e+2,r[a+3]=e+1,r[a+4]=e+4,r[a+5]=e+2,r[a+6]=e+2,r[a+7]=e+4,r[a+8]=e+3,r[a+9]=e+4,r[a+10]=e+5,r[a+11]=e+3}}(e,d,b),i.A.create(d,b,t,o,s,l,u,c,e,r)}}}},94900:function(e,t,r){r.d(t,{A:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(14086),p=r(62927),f=r(48930),m=r(54185),h=r(5514),g=r(38788),b=r(69062),y=r(22444),x=r(41723),S=r(4249),T=r(64690);!function(e){function t(e,t,r,i,s,l,u,c,d,m){return m?(d>m.cylinderCount&&(n.IO.update(m.mappingBuffer,e),n.IO.update(m.indexBuffer,t)),m.cylinderCount=d,n.IO.update(m.groupBuffer,r),n.IO.update(m.startBuffer,i),n.IO.update(m.endBuffer,s),n.IO.update(m.scaleBuffer,l),n.IO.update(m.capBuffer,u),n.IO.update(m.colorModeBuffer,c),m):function(e,t,r,i,s,l,u,c,d){let m;let h=(0,f.CP)(),g=-1,b=-1,y={kind:"cylinders",cylinderCount:d,mappingBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),groupBuffer:n.IO.create(r),startBuffer:n.IO.create(i),endBuffer:n.IO.create(s),scaleBuffer:n.IO.create(l),capBuffer:n.IO.create(u),colorModeBuffer:n.IO.create(c),get boundingSphere(){let e=a(y);if(e!==g){let t=(0,p.Yx)(y.startBuffer.ref.value,6*y.cylinderCount,6),r=(0,p.Yx)(y.endBuffer.ref.value,6*y.cylinderCount,6);f.CP.expandBySphere(h,t,r),g=e}return h},get groupMapping(){return y.groupBuffer.ref.version!==b&&(m=(0,o.r8)(y.groupBuffer.ref.value,y.cylinderCount,6),b=y.groupBuffer.ref.version),m},setBoundingSphere(e){f.CP.copy(h,e),g=a(y)},hasBoundingSphere:()=>g===a(y)};return y}(e,t,r,i,s,l,u,c,d)}function r(e){let r=e?e.mappingBuffer.ref.value:new Float32Array(0),a=e?e.indexBuffer.ref.value:new Uint32Array(0),n=e?e.groupBuffer.ref.value:new Float32Array(0),i=e?e.startBuffer.ref.value:new Float32Array(0),o=e?e.endBuffer.ref.value:new Float32Array(0);return t(r,a,n,i,o,e?e.scaleBuffer.ref.value:new Float32Array(0),e?e.capBuffer.ref.value:new Float32Array(0),e?e.colorModeBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,b.nF)([e.cylinderCount,e.mappingBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.startBuffer.ref.version,e.endBuffer.ref.version,e.scaleBuffer.ref.version,e.capBuffer.ref.version,e.colorModeBuffer.ref.version]
2831)}function C(e,t){let r=6*e.cylinderCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.startBuffer.ref.value,l=e.endBuffer.ref.value,u=t.aTransform.ref.value;return(0,c.OF)(r,a,2,(e,t)=>{let r=e%6==0?s:l;return t<0?i.AO.fromArray(o,r,3*e):i.AO.transformMat4Offset(o,r,u,0,3*e,16*t),n})}function O(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,b=C(e,t),O=(0,s.is)(r,b,a.color),I=(0,u.H4)(r,b,a.size),A=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),w=(0,h.wS)(),D=(0,g.PG)(),E=(0,S.ur)(),M=(0,x.mQ)(),P=(0,y.cO)(),k={drawCount:12*e.cylinderCount,vertexCount:6*e.cylinderCount,groupCount:d,instanceCount:c},B=(0,u.Mu)(I)*o.sizeFactor,_=f.CP.clone(e.boundingSphere),R=(0,p.Lo)(_,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("cylinders"),aMapping:e.mappingBuffer,aGroup:e.groupBuffer,aStart:e.startBuffer,aEnd:e.endBuffer,aScale:e.scaleBuffer,aCap:e.capBuffer,aColorMode:e.colorModeBuffer,elements:e.indexBuffer,boundingSphere:n.IO.create(R),invariantBoundingSphere:n.IO.create(_),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(_)),...O,...I,...A,...w,...D,...E,...M,...P,...t,padding:n.IO.create(B),...m.ev.createValues(o,k),uSizeFactor:n.IO.create(o.sizeFactor*o.sizeAspectRatio),uDoubleSided:n.IO.create(o.doubleSided),dIgnoreLight:n.IO.create(o.ignoreLight),dCelShaded:n.IO.create(o.celShaded),dXrayShaded:n.IO.create("inverted"===o.xrayShaded?"inverted":!0===o.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(o.transparentBackfaces),dSolidInterior:n.IO.create(o.solidInterior),uBumpFrequency:n.IO.create(o.bumpFrequency),uBumpAmplitude:n.IO.create(o.bumpAmplitude),uInteriorColor:n.IO.create((0,T.Qy)(o.interior,(0,i.T8)())),uInteriorSubstance:n.IO.create((0,T.gt)(o.interior,(0,i.T8)())),dDualColor:n.IO.create("interpolate"===o.colorMode)}}function I(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.transform=function(e,t){let r=e.startBuffer.ref.value;(0,o.ST)(t,r,0,6*e.cylinderCount),n.IO.update(e.startBuffer,r);let a=e.endBuffer.ref.value;(0,o.ST)(t,a,0,6*e.cylinderCount),n.IO.update(e.endBuffer,a)},e.Params={...m.ev.Params,sizeFactor:d.e.Numeric(1,{min:0,max:10,step:.1}),sizeAspectRatio:d.e.Numeric(1,{min:0,max:3,step:.01}),doubleSided:d.e.Boolean(!1,m.ev.CustomQualityParamInfo),ignoreLight:d.e.Boolean(!1,m.ev.ShadingCategory),celShaded:d.e.Boolean(!1,m.ev.ShadingCategory),xrayShaded:d.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],m.ev.ShadingCategory),transparentBackfaces:d.e.Select("off",d.e.arrayToOptions(["off","on","opaque"]),m.ev.ShadingCategory),solidInterior:d.e.Boolean(!0,m.ev.ShadingCategory),bumpFrequency:d.e.Numeric(0,{min:0,max:10,step:.1},m.ev.ShadingCategory),bumpAmplitude:d.e.Numeric(1,{min:0,max:5,step:.1},m.ev.ShadingCategory),interior:(0,T.xA)(),colorMode:d.e.Select("default",d.e.arrayToOptions(["default","interpolate"]),m.ev.ShadingCategory)},e.Utils={Params:e.Params,createEmpty:r,createValues:O,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return O(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor*t.sizeAspectRatio),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.dSolidInterior,t.solidInterior),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,T.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,T.gt)(t.interior,e.uInteriorSubstance.ref.value)),n.IO.updateIfChanged(e.dDualColor,"interpolate"===t.colorMode)},updateBoundingSphere:function(e,t){let r=f.CP.clone(t.boundingSphere),a=(0,p.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);f.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),f.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return I(t,e),t},updateRenderableState:I,createPositionIterator:C}}(a||(a={}))},74219:function(e,t,r){r.d(t,{A:function(){return a}});var a,n=r(69062),i=r(72558),o=r(62927),s=r(91407),l=r(48930),u=r(87144),c=r(85764),d=r(14086),p=r(70759),f=r(54185),m=r(69587),h=r(85688),g=r(5514),b=r(38788),y=r(23833);function x(e){return e.map(e=>
2831({x:e[0],alpha:e[1]}))}function S(e,t){let r,a,n,i,o,s;let l=[{x:0,alpha:0},{x:0,alpha:0},...e,{x:1,alpha:0},{x:1,alpha:0}],u=t?t.ref.value.array:new Uint8Array(256),d=0,p=e.length+1;for(let e=0;e<p;++e){r=l[e+1].x,a=l[e+2].x,n=l[e].alpha,i=l[e+1].alpha,o=l[e+2].alpha,s=l[e+3].alpha;let t=Math.round((a-r)*256);for(let e=0;e<t;++e){let r=e/t;u[d]=Math.max(0,255*(0,y.$y)(n,i,o,s,r,.5)),++d}}let f={array:u,width:256,height:1};return t?(c.IO.update(t,f),t):c.IO.create(f)}var T=r(22444),C=r(1573),O=r(41723),I=r(4249);let A=(0,p.xu)();!function(e){function t(e,t,a,n,i,o,s,d,p,f,m){return m?function(e,t,r,a,n,i,o,s,l,d,p){let f=i.getWidth(),m=i.getHeight(),h=i.getDepth();return c.IO.update(p.gridDimension,t),c.IO.update(p.gridTexture,i),c.IO.update(p.gridTextureDim,u.AO.set(p.gridTextureDim.ref.value,f,m,h)),c.IO.update(p.gridStats,u.T8.set(p.gridStats.ref.value,o.min,o.max,o.mean,o.sigma)),c.IO.update(p.bboxMin,e.min),c.IO.update(p.bboxMax,e.max),c.IO.update(p.bboxSize,u.AO.sub(p.bboxSize.ref.value,e.max,e.min)),c.IO.update(p.transform,r),c.IO.update(p.cellDim,n),c.IO.update(p.unitToCartn,a),c.IO.update(p.cartnToUnit,u.yb.invert((0,u.yb)(),a)),c.IO.updateIfChanged(p.packedGroup,s),c.IO.updateIfChanged(p.axisOrder,u.AO.fromArray(p.axisOrder.ref.value,l,0)),c.IO.updateIfChanged(p.dataType,d),p}(e,t,a,n,i,o,s,d,p,f,m):function(e,t,a,n,i,o,s,d,p,f){let m=(0,l.CP)(),h=-1,g=o.getWidth(),b=o.getHeight(),y=o.getDepth(),x={kind:"direct-volume",gridDimension:c.IO.create(t),gridTexture:c.IO.create(o),gridTextureDim:c.IO.create(u.AO.create(g,b,y)),gridStats:c.IO.create(u.T8.create(s.min,s.max,s.mean,s.sigma)),bboxMin:c.IO.create(e.min),bboxMax:c.IO.create(e.max),bboxSize:c.IO.create(u.AO.sub((0,u.AO)(),e.max,e.min)),transform:c.IO.create(a),cellDim:c.IO.create(i),unitToCartn:c.IO.create(n),cartnToUnit:c.IO.create(u.yb.invert((0,u.yb)(),n)),get boundingSphere(){let e=r(x);if(e!==h){var S,T;let t=(S=x.gridDimension.ref.value,T=x.transform.ref.value,l.CP.fromDimensionsAndTransform((0,l.CP)(),S,T));l.CP.copy(m,t),h=e}return m},packedGroup:c.IO.create(d),axisOrder:c.IO.create(p),dataType:c.IO.create(f),setBoundingSphere(e){l.CP.copy(m,e),h=r(x)},hasBoundingSphere:()=>h===r(x),meta:{}};return x}(e,t,a,n,i,o,s,d,p,f)}function r(e){return(0,n.nF)([e.bboxSize.ref.version,e.gridDimension.ref.version,e.gridTexture.ref.version,e.transform.ref.version,e.gridStats.ref.version])}function a(e){let r=(0,l.XZ)(),a=(0,u.AO)(),n=u.yb.identity(),i=u.yb.identity(),o=(0,u.AO)(),c=(0,s.DU)();return t(r,a,n,i,o,c,C.r.One.stats,!1,u.AO.create(0,1,2),"byte",e)}function p(e,t){let r=e.transform.ref.value,[a,n,o]=e.gridDimension.ref.value,s=t.instanceCount.ref.value,l=(0,i.cH)(),c=l.position,d=t.aTransform.ref.value;return(0,i.OF)(a*n*o,s,1,(e,t)=>{let a=Math.floor(e/o);return c[0]=Math.floor(a/n),c[1]=a%n,c[2]=e%o,u.AO.transformMat4(c,c,r),t>=0&&u.AO.transformMat4Offset(c,c,d,0,0,16*t),l})}function y(e,t){return Math.ceil(u.AO.magnitude(e)*t)}function w(e,t){return 1/t*Math.min(...e)}function D(e,t,r,a,n){let{gridTexture:i,gridTextureDim:s,gridStats:d}=e,{bboxSize:C,bboxMin:D,bboxMax:E,gridDimension:M,transform:P}=e,{instanceCount:k,groupCount:B}=r,_=p(e,t),R=(0,m.is)(r,_,a.color),F=n.instanceGranularity?(0,h.eL)(k,"instance"):(0,h.eL)(k*B,"groupInstance"),L=(0,g.wS)(),z=(0,b.PG)(),N=(0,I.ur)(),G=(0,O.mQ)(),U=(0,T.cO)(),[V,j,H]=M.ref.value,q={drawCount:A.indices.length,vertexCount:V*j*H,groupCount:B,instanceCount:k},X=l.CP.clone(e.boundingSphere),W=(0,o.Lo)(X,t.aTransform.ref.value,k,0),K=S(x(n.controlPoints));return{dGeometryType:c.IO.create("directVolume"),...R,...F,...L,...z,...N,...G,...U,...t,...f.ev.createValues(n,q),aPosition:c.IO.create(A.vertices),elements:c.IO.create(A.indices),boundingSphere:c.IO.create(W),invariantBoundingSphere:c.IO.create(X),uInvariantBoundingSphere:c.IO.create(u.T8.ofSphere(X)),uBboxMin:D,uBboxMax:E,uBboxSize:C,uMaxSteps:c.IO.create(y(M.ref.value,n.stepsPerCell)),uStepScale:c.IO.create(w(e.cellDim.ref.value,n.stepsPerCell)),uJumpLength:c.IO.create(n.jumpLength),uTransform:P,uGridDim:M,tTransferTex:K,uTransferScale:c.IO.create(1/n.stepsPerCell),dGridTexType:c.IO.create(i.ref.value.getDepth()>0?"3d":"2d"),uGridTexDim:s,tGridTex:i,uGridStats:d,uCellDim:e.cellDim,uCartnToUnit:e.cartnToUnit,uUnitToCartn:e.unitToCartn,dPackedGroup:e.packedGroup,dAxisOrder:c.IO.create(e.axisOrder.ref.value.join("")),dIgnoreLight:c.IO.create(n.ignoreLight),dCelShaded:c.IO.create(n.celShaded),dXrayShaded:c.IO.create("inverted"===n.xrayShaded?"inverted":!0===n.xrayShaded?"on":"off"),meta:c.IO.create(e.meta)}}e.create=t,e.createEmpty=a,e.Params={...f.ev.Params,ignoreLight:d.e.Boolean(!1,f.ev.ShadingCategory),celShaded:d.e.Boolean(!1,f.ev.ShadingCategory),xrayShaded:d.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],f.ev.ShadingCategory),controlPoints:d.e.LineGraph([u.Sg.create(.19,0),u.Sg.create(.2,.05),u.Sg.create(.25,.05),u.Sg.create(.26,0),u.Sg.create(.79,0),u.Sg.create(.8,.05),u.Sg.create(.85,.05),u.Sg.create(.86,0)],{isEssential:!0}),stepsPerCell:d.e.Numeric(3,{min:1,max:10,step:1}),jumpLength:d.e.Numeric(0,{min:0,max:20,step:.1})},e.Utils={Params:e.Params,createEmpty:a,createValues:D,createValuesSimple:function(t,r,a,n,i){let o=f.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return D(t,o.transform,o.locationIterator,o.theme,s)}
2831,updateValues:function(e,t){f.ev.updateValues(e,t),c.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),c.IO.updateIfChanged(e.dCelShaded,t.celShaded),c.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),S(x(t.controlPoints),e.tTransferTex),c.IO.updateIfChanged(e.uMaxSteps,y(e.uGridDim.ref.value,t.stepsPerCell)),c.IO.updateIfChanged(e.uStepScale,w(e.uCellDim.ref.value,t.stepsPerCell)),c.IO.updateIfChanged(e.uTransferScale,1/t.stepsPerCell),c.IO.updateIfChanged(e.uJumpLength,t.jumpLength)},updateBoundingSphere:function(e,t){let r=l.CP.clone(t.boundingSphere),a=(0,o.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);l.CP.equals(a,e.boundingSphere.ref.value)||c.IO.update(e.boundingSphere,a),l.CP.equals(r,e.invariantBoundingSphere.ref.value)||(c.IO.update(e.invariantBoundingSphere,r),c.IO.update(e.uInvariantBoundingSphere,u.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=f.ev.createRenderableState(e);return t.opaque=!1,t.writeDepth=!1,t},updateRenderableState:function(e,t){f.ev.updateRenderableState(e,t),e.opaque=!1,e.writeDepth=!1},createPositionIterator:p}}(a||(a={}))},4249:function(e,t,r){r.d(t,{BF:function(){return c},DQ:function(){return u},JQ:function(){return l},rF:function(){return s},ur:function(){return p}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407);function s(e,t,r,a){for(let n=t;n<r;++n)e[n]=255*a;return!0}function l(e,t){if(0===t||e.length<t)return 0;let r=0;for(let a=0;a<t;++a)r+=e[a];return r/(255*t)}function u(e,t,r){e.fill(0,t,r)}function c(e,t,r){let s=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tEmissive.ref.value.array);return r?(a.IO.update(r.tEmissive,s),a.IO.update(r.uEmissiveTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dEmissive,e>0),a.IO.updateIfChanged(r.emissiveAverage,l(s.array,e)),a.IO.updateIfChanged(r.dEmissiveType,t),r):{tEmissive:a.IO.create(s),uEmissiveTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dEmissive:a.IO.create(e>0),emissiveAverage:a.IO.create(0),tEmissiveGrid:a.IO.create((0,o.DU)()),uEmissiveGridDim:a.IO.create(n.AO.create(1,1,1)),uEmissiveGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dEmissiveType:a.IO.create(t),uEmissiveStrength:a.IO.create(1)}}let d={array:new Uint8Array(1),width:1,height:1};function p(e){return e?(a.IO.update(e.tEmissive,d),a.IO.update(e.uEmissiveTexDim,n.Sg.create(1,1)),e):{tEmissive:a.IO.create(d),uEmissiveTexDim:a.IO.create(n.Sg.create(1,1)),dEmissive:a.IO.create(!1),emissiveAverage:a.IO.create(0),tEmissiveGrid:a.IO.create((0,o.DU)()),uEmissiveGridDim:a.IO.create(n.AO.create(1,1,1)),uEmissiveGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dEmissiveType:a.IO.create("groupInstance"),uEmissiveStrength:a.IO.create(1)}}},11803:function(e,t,r){r.d(t,{Z:function(){return a}});var a,n=r(4376),i=r(99696),o=r(21071),s=r(96046),l=r(74219),u=r(39857),c=r(36111),d=r(39446),p=r(98510),f=r(94900),m=r(81421);!function(e){function t(e){switch(e.kind){case"mesh":return 3*e.triangleCount;case"points":return e.pointCount;case"spheres":return 6*e.sphereCount;case"cylinders":return 12*e.cylinderCount;case"text":return 6*e.charCount;case"lines":return 6*e.lineCount;case"direct-volume":return 36;case"image":return 6;case"texture-mesh":return e.vertexCount}}e.getDrawCount=t,e.getVertexCount=function(e){switch(e.kind){case"mesh":case"lines":case"texture-mesh":return e.vertexCount;case"points":return e.pointCount;case"spheres":return 6*e.sphereCount;case"cylinders":return 6*e.cylinderCount;case"text":return 4*e.charCount;case"direct-volume":let[t,r,a]=e.gridDimension.ref.value;return t*r*a;case"image":return 4}},e.getGroupCount=function(e){switch(e.kind){case"mesh":case"points":case"spheres":case"cylinders":case"text":case"lines":return 0===t(e)?0:(0,c.uH)(e.groupBuffer.ref.value)+1;case"direct-volume":return 1;case"image":return(0,m.bC)(e.groupTexture.ref.value.array,4)+1;case"texture-mesh":return e.groupCount}},e.getUtils=function(e){switch(e.kind){case"mesh":return n.K.Utils;case"points":return i.w.Utils;case"spheres":return u.s.Utils;case"cylinders":return f.A.Utils;case"text":return o.x.Utils;case"lines":return s.x.Utils;case"direct-volume":return l.A.Utils;case"image":return p.Ee.Utils;case"texture-mesh":return d.q.Utils}},e.getGranularity=function(e,t){return"instance"===t&&e.nonInstanceable?"group":t}}(a||(a={}))},98510:function(e,t,r){r.d(t,{Ee:function(){return a},lo:function(){return I}});var a,n=r(69062),i=r(72558),o=r(62927),s=r(48930),l=r(87144),u=r(85764),c=r(14086),d=r(54185),p=r(69587),f=r(85688),m=r(5514),h=r(38788),g=r(36111),b=r(22444),y=r(71522),x=r(68971),S=r(41723),T=r(4249);let C=new Uint32Array([0,1,2,1,3,2]),O=new Float32Array([0,1,0,0,1,1,1,0]),I={nearest:"Nearest",catmulrom:"Catmulrom (Cubic)",mitchell:"Mitchell (Cubic)",bspline:"B-Spline (Cubic)"};Object.keys(I),function(e){function t(){return{type:0,center:(0,l.AO)(),rotation:(0,l.D6)(),scale:(0,l.AO)(),transform:(0,l.yb)()}}function r(e,t,r,n,i,o,c){return c?function(e,t,r,a,n,i,o){let s=e.width,c=e.height;return u.IO.update(o.imageTexture,e),u.IO.update(o.imageTextureDim,l.Sg.set(o.imageTextureDim.ref.value,s,c)),u.IO.update(o.cornerBuffer,t),u.IO.update(o.groupTexture,r),u.IO.update(o.valueTexture,a),u.IO.updateIfChanged(o.trimType,n.type),u.IO.update(o.trimCenter,l.AO.copy(o.trimCenter.ref.value,n.center)),u.IO.update(o.trimRotation,l.D6.copy(o.trimRotation.ref.value,n.rotation)),u.IO.update(o.trimScale,l.AO.copy(o.trimScale.ref.value,n.scale)),u.IO.update(o.trimTransform,l.yb.copy(o.trimTransform.ref.value,n.transform)),u.IO.updateIfChanged(o.isoLevel,i),o}(e,t,r,n,i,o,c):function(e,t,r,n,i,o){let c=(0,s.CP)(),d=-1,p=e.width,f=e.height,m={kind:"image",imageTexture:u.IO.create(e),imageTextureDim:u.IO.create(l.Sg.create(p,f)),cornerBuffer:u.IO.create(t),groupTexture:u.IO.create(r),valueTexture:u.IO.create(n),trimType:u.IO.create(i.type),trimCenter:u.IO.create(i.center),trimRotation:u.IO.create(i.rotation),trimScale:u.IO.create(i.scale),trimTransform:u.IO.create(i.transform),isoLevel:u.IO.create(o),get boundingSphere(){let e=a(m);if(e!==d){let t=function(e){let t=(0,l.AO)(),r=[];for(let a=0,n=e.length;a<n;a+=3){let n=l.AO.fromArray((0,l.AO)(),e,a);r.push(n),l.AO.add(t,t,n)}l.AO.scale(t,t,1/(e.length/3));let a=0;for(let e of r){let r=l.AO.distance(t,e);r>a&&(a=r)}let n=s.CP.create(t,a);return s.CP.setExtrema(n,r),n}(m.cornerBuffer.ref.value);s.CP.copy(c,t),d=e}return c},setBoundingSphere(e){s.CP.copy(c,e),d=a(m)},hasBoundingSphere:()=>d===a(m)};return m}(e,t,r,n,i,o)}
2831function a(e){return(0,n.nF)([e.cornerBuffer.ref.version])}function A(e){let a=(0,o.l3)(0,4,Uint8Array),n=e?e.cornerBuffer.ref.value:new Float32Array(24);return r(a,n,(0,o.l3)(0,4,Uint8Array),(0,o.l3)(0,1,Float32Array),t(),-1,e)}function w(e,t){return(0,i.OF)(1,1,1,()=>y.ad)}function D(e,t,r,a,n){let{instanceCount:i,groupCount:c}=r,y=w(e,t),I=(0,p.is)(r,y,a.color),A=n.instanceGranularity?(0,f.eL)(i,"instance"):(0,f.eL)(i*c,"groupInstance"),D=(0,m.wS)(),E=(0,h.PG)(),M=(0,T.ur)(),P=(0,S.mQ)(),k=(0,b.cO)(),B={drawCount:C.length,vertexCount:x.GK.length/3,groupCount:c,instanceCount:i},_=s.CP.clone(e.boundingSphere),R=(0,o.Lo)(_,t.aTransform.ref.value,i,0);return{dGeometryType:u.IO.create("image"),...I,...A,...D,...E,...M,...P,...k,...t,...d.ev.createValues(n,B),aPosition:e.cornerBuffer,aUv:u.IO.create(O),elements:u.IO.create(C),aGroup:u.IO.create((0,g.d_)(new Float32Array(4))),boundingSphere:u.IO.create(R),invariantBoundingSphere:u.IO.create(_),uInvariantBoundingSphere:u.IO.create(l.T8.ofSphere(_)),dInterpolation:u.IO.create(n.interpolation),uImageTexDim:e.imageTextureDim,tImageTex:e.imageTexture,tGroupTex:e.groupTexture,tValueTex:e.valueTexture,uTrimType:e.trimType,uTrimCenter:e.trimCenter,uTrimRotation:e.trimRotation,uTrimScale:e.trimScale,uTrimTransform:e.trimTransform,uIsoLevel:e.isoLevel}}e.createEmptyTrim=t,e.create=r,e.createEmpty=A,e.Params={...d.ev.Params,interpolation:c.e.Select("bspline",c.e.objectToOptions(I))},e.Utils={Params:e.Params,createEmpty:A,createValues:D,createValuesSimple:function(t,r,a,n,i){let o=d.ev.createSimple(a,n,i),s={...c.e.getDefaultValues(e.Params),...r};return D(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){d.ev.updateValues(e,t),u.IO.updateIfChanged(e.dInterpolation,t.interpolation)},updateBoundingSphere:function(e,t){let r=s.CP.clone(t.boundingSphere),a=(0,o.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);s.CP.equals(a,e.boundingSphere.ref.value)||u.IO.update(e.boundingSphere,a),s.CP.equals(r,e.invariantBoundingSphere.ref.value)||(u.IO.update(e.invariantBoundingSphere,r),u.IO.update(e.uInvariantBoundingSphere,l.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=d.ev.createRenderableState(e);return t.opaque=!1,t},updateRenderableState:function(e,t){d.ev.updateRenderableState(e,t),e.opaque=!1},createPositionIterator:w}}(a||(a={}))},64690:function(e,t,r){r.d(t,{Qy:function(){return l},St:function(){return s},gt:function(){return u},xA:function(){return o}});var a=r(34602),n=r(34813),i=r(14086);function o(){return i.e.Group({color:i.e.Color(a.Il.fromRgb(76,76,76)),colorStrength:i.e.Numeric(1,{min:0,max:1,step:.01}),substance:n.F.getParam(),substanceStrength:i.e.Numeric(1,{min:0,max:1,step:.01})})}function s(e,t){return e.color===t.color&&e.colorStrength===t.colorStrength&&n.F.areEqual(e.substance,t.substance)&&e.substanceStrength===t.substanceStrength}function l(e,t){return a.Il.toArrayNormalized(e.color,t,0),t[3]=e.colorStrength,t}function u(e,t){return n.F.toArrayNormalized(e.substance,t,0),t[3]=e.substanceStrength,t}},13070:function(e,t,r){r.d(t,{R:function(){return a},l:function(){return n}});var a,n,i=r(69062),o=r(96046),s=r(87144);let l=i.pS.add,u=i.pS.add2,c=i.pS.add3,d=(0,s.AO)(),p=(0,s.AO)(),f=(0,s.AO)();(a||(a={})).create=function(e=2048,t=1024,r){let a=i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),n=i.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),u=i.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),m=(e,t,r,i,o,s,d)=>{for(let p=0;p<4;++p)c(n,e,t,r),c(u,i,o,s),l(a,d)},h=(e,t,r,a)=>{let n=s.AO.distance(e,t),i=r%2!=0,o=Math.floor((r+1)/2);s.AO.setMagnitude(f,s.AO.sub(f,t,e),n/(r+.5)),s.AO.copy(d,e);for(let e=0;e<o;++e)s.AO.add(d,d,f),i&&e===o-1?s.AO.copy(p,t):s.AO.add(p,d,f),m(d[0],d[1],d[2],p[0],p[1],p[2],a),s.AO.add(d,d,f)};return{add:m,addVec:(e,t,r)=>{for(let i=0;i<4;++i)c(n,e[0],e[1],e[2]),c(u,t[0],t[1],t[2]),l(a,r)},addFixedCountDashes:h,addFixedLengthDashes:(e,t,r,a)=>{let n=s.AO.distance(e,t);h(e,t,n/r,a)},addCage:(e,t,r)=>{let{vertices:a,edges:n}=t;for(let t=0,i=n.length;t<i;t+=2)s.AO.fromArray(d,a,3*n[t]),s.AO.fromArray(p,a,3*n[t+1]),s.AO.transformMat4(d,d,e),s.AO.transformMat4(p,p,e),m(d[0],d[1],d[2],p[0],p[1],p[2],r)},getLines:()=>{let e=a.elementCount/4,t=a.elementCount,s=i.pS.compact(a,!0),l=i.pS.compact(n,!0),c=i.pS.compact(u,!0),d=r&&e<=r.lineCount&&0===r.stripCount.ref.value?r.mappingBuffer.ref.value:new Float32Array(8*e),p=r&&e<=r.lineCount&&0===r.stripCount.ref.value?r.indexBuffer.ref.value:new Uint32Array(6*e),f=r?r.stripBuffer.ref.value:new Uint32Array(0);return(!r||e>r.lineCount||r.stripCount.ref.value>0)&&function(e,t,r){for(let r=0;r<e;++r){let e=8*r;t[e]=-1,t[e+1]=-1,t[e+2]=1,t[e+3]=-1,t[e+4]=-1,t[e+5]=1,t[e+6]=1,t[e+7]=1}for(let t=0;t<e;++t){let e=4*t,a=6*t;r[a]=e,r[a+1]=e+1,r[a+2]=e+2,r[a+3]=e+1,r[a+4]=e+3,r[a+5]=e+2}}(e,d,p),o.x.create(d,p,s,l,c,f,e,t,0,r)}}},(n||(n={})).create=function(e=2048,t=1024,r){let a=i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),n=i.pS.create(Float32Array,3,t,r?r.startBuffer.ref.value:e),s=i.pS.create(Float32Array,3,t,r?r.endBuffer.ref.value:e),d=i.pS.create(Float32Array,2,t,r?r.mappingBuffer.ref.value:e),p=i.pS.create(Uint32Array,3,t,r?r.indexBuffer.ref.value:e),f=i.pS.create(Uint32Array,1,t,r?r.stripBuffer.ref.value:e),m=0,h=0,g=0,b=0,y=0,x=0,S=(e,t,r)=>{if(0===h){g=a.elementCount,b=e,y=t,x=r,h=1;return}let i=a.elementCount;
28311===h&&(c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,-1,-1),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,1,-1)),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,-1,1),c(n,b,y,x),c(s,e,t,r),l(a,m),u(d,1,1);let o=1===h?g:i-2,f=1===h?i+2:i;c(p,o,o+1,f),c(p,o+1,f+1,f),b=e,y=t,x=r,h++};return{start:e=>{m=e,h=0,0===f.elementCount&&l(f,0)},add:(e,t,r)=>{S(e,t,r)},addVec:e=>{S(e[0],e[1],e[2])},end:()=>{h=0,l(f,a.elementCount)},getLines:()=>{let e=p.elementCount/2,t=a.elementCount,l=f.elementCount-1,u=i.pS.compact(a,!0),c=i.pS.compact(n,!0),m=i.pS.compact(s,!0),h=i.pS.compact(d,!0),g=i.pS.compact(p,!0),b=i.pS.compact(f,!0);return o.x.create(h,g,u,c,m,b,e,t,l,r)}}}},96046:function(e,t,r){r.d(t,{x:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(13070),p=r(14086),f=r(62927),m=r(48930),h=r(54185),g=r(5514),b=r(38788),y=r(69062),x=r(22444),S=r(41723),T=r(4249);!function(e){function t(e,t,r,i,s,l,u,c,d,p){return p?((u>p.lineCount||d!==p.stripCount.ref.value||d>0)&&(n.IO.update(p.mappingBuffer,e),n.IO.update(p.indexBuffer,t)),p.lineCount=u,p.vertexCount=c,n.IO.update(p.groupBuffer,r),n.IO.update(p.startBuffer,i),n.IO.update(p.endBuffer,s),n.IO.updateIfChanged(p.stripCount,d),n.IO.update(p.stripBuffer,l),p):function(e,t,r,i,s,l,u,c,d){let p;let h=(0,m.CP)(),g=-1,b=-1,y={kind:"lines",lineCount:u,vertexCount:c,mappingBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),groupBuffer:n.IO.create(r),startBuffer:n.IO.create(i),endBuffer:n.IO.create(s),stripCount:n.IO.create(d),stripBuffer:n.IO.create(l),get boundingSphere(){let e=a(y);if(e!==g){let t=(0,f.Yx)(y.startBuffer.ref.value,4*y.lineCount,4),r=(0,f.Yx)(y.endBuffer.ref.value,4*y.lineCount,4);m.CP.expandBySphere(h,t,r),g=e}return h},get groupMapping(){return y.groupBuffer.ref.version!==b&&(p=(0,o.r8)(y.groupBuffer.ref.value,y.lineCount,4),b=y.groupBuffer.ref.version),p},setBoundingSphere(e){m.CP.copy(h,e),g=a(y)},hasBoundingSphere:()=>g===a(y)};return y}(e,t,r,i,s,l,u,c,d)}function r(e){let r=e?e.mappingBuffer.ref.value:new Float32Array(0),a=e?e.indexBuffer.ref.value:new Uint32Array(0),n=e?e.groupBuffer.ref.value:new Float32Array(0);return t(r,a,n,e?e.startBuffer.ref.value:new Float32Array(0),e?e.endBuffer.ref.value:new Float32Array(0),e?e.stripBuffer.ref.value:new Uint32Array(0),0,0,0,e)}function a(e){return(0,y.nF)([e.lineCount,e.vertexCount,e.mappingBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.startBuffer.ref.version,e.endBuffer.ref.version,e.stripCount.ref.version,e.stripBuffer.ref.version])}function C(e,t){let r=4*e.lineCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.startBuffer.ref.value,l=e.endBuffer.ref.value,u=t.aTransform.ref.value;return(0,c.OF)(r,a,2,(e,t)=>{let r=e%4==0?s:l;return t<0?i.AO.fromArray(o,r,3*e):i.AO.transformMat4Offset(o,r,u,0,3*e,16*t),n})}function O(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,p=C(e,t),y=(0,s.is)(r,p,a.color),O=(0,u.H4)(r,p,a.size),I=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),A=(0,g.wS)(),w=(0,b.PG)(),D=(0,T.ur)(),E=(0,S.mQ)(),M=(0,x.cO)(),P={drawCount:6*e.lineCount,vertexCount:e.vertexCount,groupCount:d,instanceCount:c},k=m.CP.clone(e.boundingSphere),B=(0,f.Lo)(k,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("lines"),aMapping:e.mappingBuffer,aGroup:e.groupBuffer,aStart:e.startBuffer,aEnd:e.endBuffer,elements:e.indexBuffer,boundingSphere:n.IO.create(B),invariantBoundingSphere:n.IO.create(k),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(k)),...y,...O,...I,...A,...w,...D,...E,...M,...t,...h.ev.createValues(o,P),uSizeFactor:n.IO.create(o.sizeFactor),dLineSizeAttenuation:n.IO.create(o.lineSizeAttenuation),uDoubleSided:n.IO.create(!0),dFlipSided:n.IO.create(!1),stripCount:e.stripCount,stripOffsets:e.stripBuffer}}e.create=t,e.createEmpty=r,e.fromMesh=function(e,t){let r=e.vertexBuffer.ref.value,a=e.indexBuffer.ref.value,n=e.groupBuffer.ref.value,i=d.R.create(3*e.triangleCount,e.triangleCount/10,t);for(let t=0,o=3*e.triangleCount;t<o;t+=3){let e=a[t],o=a[t+1],s=a[t+2],l=r[3*e],u=r[3*e+1],c=r[3*e+2],d=r[3*o],p=r[3*o+1],f=r[3*o+2],m=r[3*s],h=r[3*s+1],g=r[3*s+2];i.add(l,u,c,d,p,f,n[e]),i.add(l,u,c,m,h,g,n[e]),i.add(d,p,f,m,h,g,n[o])}return i.getLines()},e.transform=function(e,t){let r=e.startBuffer.ref.value;(0,o.ST)(t,r,0,e.vertexCount),n.IO.update(e.startBuffer,r);let a=e.endBuffer.ref.value;(0,o.ST)(t,a,0,e.vertexCount),n.IO.update(e.endBuffer,a)},e.Params={...h.ev.Params,sizeFactor:p.e.Numeric(2,{min:0,max:10,step:.1}),lineSizeAttenuation:p.e.Boolean(!1)},e.Utils={Params:e.Params,createEmpty:r,createValues:O,createValuesSimple:function(t,r,a,n,i){let o=h.ev.createSimple(a,n,i),s={...p.e.getDefaultValues(e.Params),...r};return O(t,o.transform,o.locationIterator,o.theme,s)}
2831,updateValues:function(e,t){h.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.dLineSizeAttenuation,t.lineSizeAttenuation)},updateBoundingSphere:function(e,t){let r=m.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);m.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),m.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:h.ev.createRenderableState,updateRenderableState:h.ev.updateRenderableState,createPositionIterator:C}}(a||(a={}))},85688:function(e,t,r){r.d(t,{eL:function(){return l},pq:function(){return s}});var a=r(68303),n=r(87144),i=r(62927);let o=new Uint8Array(772);function s(e,t){if(0===t)return 0;let r=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),a=t-4>>2,n=4*a,i=0;if(a<0)for(let r=0;r<t;++r)i+=e[r]&&1;else{for(let e=0;e<a;++e){let t=r[e];i+=o[65535&t]+o[t>>16]}for(let r=n;r<t;++r)i+=e[r]&&1}return i/t}function l(e,t,r){let o=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tMarker.ref.value.array),l=s(o.array,e),u=0===l?0:-1;return r?(a.IO.updateIfChanged(r.uMarker,0),a.IO.update(r.tMarker,o),a.IO.update(r.uMarkerTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.markerAverage,l),a.IO.updateIfChanged(r.markerStatus,u),a.IO.updateIfChanged(r.dMarkerType,t),r):{uMarker:a.IO.create(0),tMarker:a.IO.create(o),uMarkerTexDim:a.IO.create(n.Sg.create(o.width,o.height)),markerAverage:a.IO.create(l),markerStatus:a.IO.create(u),dMarkerType:a.IO.create(t)}}o[1]=1,o[2]=1,o[3]=1,o[256]=1,o[512]=1,o[768]=1,o[257]=2,o[513]=2,o[769]=2,o[258]=2,o[514]=2,o[770]=2,o[259]=2,o[515]=2,o[771]=2,new Uint8Array(1)},84785:function(e,t,r){r.d(t,{vA:function(){return I},mB:function(){return O},ZI:function(){return A},OA:function(){return w}});var a=r(87144),n=r(89623),i=r(81725);let o={radiusTop:1,radiusBottom:1,height:1,radialSegments:8,heightSegments:1,topCap:!1,bottomCap:!1,thetaStart:0,thetaLength:2*Math.PI};var s=r(32635),l=r(90308),u=r(69062);let c=new Map,d=a.AO.create(0,1,0),p=(0,a.AO)(),f=(0,a.AO)(),m=(0,a.AO)(),h=(0,a.yb)(),g=(0,a.yb)(),b=(0,a.AO)(),y=(0,a.AO)(),x=(0,a.AO)();function S(e,t,r,n,i){return a.AO.setMagnitude(f,r,n/2),a.AO.add(m,t,f),i?a.AO.matchDirection(x,d,f):a.AO.copy(x,d),a.AO.set(b,1,n,1),a.AO.makeRotation(g,x,f),a.yb.scale(e,g,b),a.yb.setTranslation(e,m)}let T=new Int32Array(9);function C(e){var t,r,n,d,p,f,m,h,g;let b=(T[0]=Math.round(1e3*(null!==(t=e.radiusTop)&&void 0!==t?t:o.radiusTop)),T[1]=Math.round(1e3*(null!==(r=e.radiusBottom)&&void 0!==r?r:o.radiusBottom)),T[2]=Math.round(1e3*(null!==(n=e.height)&&void 0!==n?n:o.height)),T[3]=null!==(d=e.radialSegments)&&void 0!==d?d:o.radialSegments,T[4]=null!==(p=e.heightSegments)&&void 0!==p?p:o.heightSegments,T[5]=(null!==(f=e.topCap)&&void 0!==f?f:
2831o.topCap)?1:0,T[6]=(null!==(m=e.bottomCap)&&void 0!==m?m:o.bottomCap)?1:0,T[7]=Math.round(1e3*(null!==(h=e.thetaStart)&&void 0!==h?h:o.thetaStart)),T[8]=Math.round(1e3*(null!==(g=e.thetaLength)&&void 0!==g?g:o.thetaLength)),(0,u.nF)(T)),y=c.get(b);if(void 0===y){if(e.radialSegments&&e.radialSegments<=4){let t=Math.max(3,e.radialSegments),r=(0,s.p1)((0,l.y)(t,!0,e.radiusTop),e);y=(0,i.ik)(r,a.yb.rotX90)}else y=function(e){let{radiusTop:t,radiusBottom:r,height:n,radialSegments:i,heightSegments:s,topCap:l,bottomCap:u,thetaStart:c,thetaLength:d}={...o,...e},p=[],f=[],m=[],h=0,g=[],b=n/2;return function(){let e=a.AO.zero(),o=(r-t)/n;for(let l=0;l<=s;++l){let u=[],p=l/s,y=p*(r-t)+t;for(let t=0;t<=i;++t){let r=t/i*d+c,s=Math.sin(r),l=Math.cos(r);f.push(y*s,-p*n+b,y*l),a.AO.normalize(e,a.AO.set(e,s,o,l)),m.push(...e),u.push(h++)}g.push(u)}for(let e=0;e<i;++e)for(let t=0;t<s;++t){let r=g[t][e],a=g[t+1][e],n=g[t+1][e+1],i=g[t][e+1];p.push(r,a,i),p.push(a,n,i)}}(),l&&t>0&&y(!0),u&&r>0&&y(!1),{vertices:new Float32Array(f),normals:new Float32Array(m),indices:new Uint32Array(p)};function y(e){let a=!0===e?t:r,n=!0===e?1:-1,o=h;for(let e=1;e<=i;++e)f.push(0,b*n,0),m.push(0,n,0),++h;let s=h;for(let e=0;e<=i;++e){let t=e/i*d+c,r=Math.cos(t),o=Math.sin(t);f.push(a*o,b*n,a*r),m.push(0,n,0),++h}for(let t=0;t<i;++t){let r=o+t,a=s+t;!0===e?p.push(a,a+1,r):p.push(a+1,a,r)}}}(e);c.set(b,y)}return y}function O(e,t,r,a){S(h,t.origin,t.direction,r,!1),n.V.addPrimitive(e,h,C(a))}function I(e,t,r,i,o){let s=a.AO.distance(t,r)*i;a.AO.sub(p,r,t),S(h,t,p,s,!0),n.V.addPrimitive(e,h,C(o))}function A(e,t,r,i,o,s){let l=a.AO.distance(t,r)*i,u=C(s);a.AO.sub(p,r,t),a.AO.add(y,t,o),S(h,y,p,l,!0),n.V.addPrimitive(e,h,u),a.AO.sub(y,t,o),S(h,y,p,l,!0),n.V.addPrimitive(e,h,u)}function w(e,t,r,i,o,s,l){let u=a.AO.distance(t,r)*i,c=o%2!=0,d=Math.floor((o+1)/2),f=u/(o+.5),m=C(l);a.AO.setMagnitude(p,a.AO.sub(p,r,t),f),a.AO.copy(y,t);for(let t=0;t<d;++t)a.AO.add(y,y,p),c&&t===d-1&&(!s&&l.topCap&&(l.topCap=!1,m=C(l)),f/=2),S(h,y,p,f,!1),n.V.addPrimitive(e,h,m),a.AO.add(y,y,p)}},98338:function(e,t,r){r.d(t,{j:function(){return l}});var a=r(87144),n=r(89623),i=r(34748);let o=a.yb.identity(),s=(0,a.AO)();function l(e,t,r,l,u,c){n.V.addPrimitive(e,(a.AO.add(s,t,r),a.yb.targetTo(o,t,s,l),a.yb.setTranslation(o,t),a.yb.scale(o,o,u)),(0,i.L)(c))}},34748:function(e,t,r){r.d(t,{H:function(){return u},L:function(){return l}});var a=r(87144),n=r(89623),i=r(93964);let o=new Map,s=a.yb.identity();function l(e){let t=o.get(e);return void 0===t&&(t=(0,i.a)(e),o.set(e,t)),t}
2831function u(e,t,r,i){n.V.addPrimitive(e,a.yb.scaleUniformly(s,a.yb.fromTranslation(s,t),r),l(i))}},53608:function(e,t,r){r.d(t,{x:function(){return C}});var a=r(87144),n=r(69062);let i=(0,a.AO)(),o=(0,a.AO)(),s=(0,a.AO)(),l=(0,a.AO)(),u=(0,a.AO)(),c=(0,a.AO)();function d(e,t,r,a,n){e[0]=t[0]*a+r[0]*n,e[1]=t[1]*a+r[1]*n,e[2]=t[2]*a+r[2]*n}function p(e,t,r,a,n,i){e[0]=t[0]*n+r[0]*i+a[0],e[1]=t[1]*n+r[1]*i+a[1],e[2]=t[2]*n+r[2]*i+a[2]}let f=a.AO.fromArray,m=a.AO.normalize,h=a.AO.scaleAndAdd,g=a.AO.cross,b=a.AO.slerp,y=a.AO.dot,x=a.AO.unitX,S=n.pS.add3,T=new Map;function C(e,t,r,a,C,O,I,A,w,D,E,M=!1){let P;let{currentGroup:k,vertices:B,normals:_,indices:R,groups:F}=e,L=B.elementCount,{cos:z,sin:N}=function(e,t){let r=t?1:0,a=(0,n.FY)(e,r);if(!T.has(a)){let t=[],n=[];for(let a=0;a<e;++a){let i=(2*a+r)/e*Math.PI;t[a]=Math.cos(i),n[a]=Math.sin(i)}T.set(a,{cos:t,sin:n})}return T.get(a)}(O,"rounded"===E),G=Math.round(O/4),U=3*G,V=M&&C&&(w||D),j=V&&w&&D;j&&(P=C/2);for(let e=0;e<=C;++e){let n;let T=3*e;f(u,r,T),f(c,a,T),f(l,t,T);let D=I[e],M=A[e];if(V){let t=j?e<=P:w;D*=n=j?Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((t?P-e:e-P)/P,2))):Math.max(Number.EPSILON,Math.sqrt(1-Math.pow((t?C-e:e)/C,2))),M*=n,g(o,t?c:u,t?u:c),m(o,o)}let k="rounded"===E&&M>D;for(let e=0;e<O;++e)k?(p(s,u,c,l,D*z[e],D*N[e]),h(s,s,u,0>y(c,x)?e<G||e>=U?M-D:-M+D:e>=G&&e<U?-M+D:M-D),e===G||e===G-1?d(i,u,c,0,1):e===U||e===U-1?d(i,u,c,0,-1):d(i,u,c,z[e],N[e])):(p(s,u,c,l,M*z[e],D*N[e]),d(i,u,c,D*z[e],M*N[e])),m(i,i),S(B,s[0],s[1],s[2]),V&&b(i,o,i,n),S(_,i[0],i[1],i[2])}let H=Math.round(O/2);for(let e=0;e<C;++e){for(let t=0;t<H;++t)S(R,L+e*O+(t+1)%O,L+(e+1)*O+(t+1)%O,L+e*O+t),S(R,L+(e+1)*O+(t+1)%O,L+(e+1)*O+t,L+e*O+t);for(let t=H;t<O;++t)S(R,L+e*O+(t+1)%O,L+(e+1)*O+t,L+e*O+t),S(R,L+(e+1)*O+(t+1)%O,L+(e+1)*O+t,L+e*O+(t+1)%O)}if(w){let e=B.elementCount;f(u,r,0),f(c,a,0),f(l,t,0),g(i,c,u),S(B,l[0],l[1],l[2]),S(_,i[0],i[1],i[2]);let n=V?0:I[0],o=V?0:A[0],d="rounded"===E&&o>n;d&&(o-=n),L=B.elementCount;for(let t=0;t<O;++t)d?(p(s,u,c,l,n*z[t],n*N[t]),h(s,s,u,t<G||t>=U?o:-o)):p(s,u,c,l,o*z[t],n*N[t]),S(B,s[0],s[1],s[2]),S(_,i[0],i[1],i[2]),S(R,L+(t+1)%O,L+t,e)}if(D){let e=3*C,n=B.elementCount;f(u,r,e),f(c,a,e),f(l,t,e),g(i,u,c),S(B,l[0],l[1],l[2]),S(_,i[0],i[1],i[2]);let o=V?0:I[C],d=V?0:A[C],m="rounded"===E&&d>o;m&&(d-=o),L=B.elementCount;for(let e=0;e<O;++e)m?(p(s,u,c,l,o*z[e],o*N[e]),h(s,s,u,e<G||e>=U?d:-d)):p(s,u,c,l,d*z[e],o*N[e]),S(B,s[0],s[1],s[2]),S(_,i[0],i[1],i[2]),S(R,L+e,L+(e+1)%O,n)}n.pS.addRepeat(F,(C+1)*O+(w?O+1:0)+(D?O+1:0),k)}},82471:function(e,t,r){r.d(t,{EH:function(){return f},FK:function(){return p},Z9:function(){return m},hp:function(){return d},kU:function(){return c}});var a=r(62927),n=r(48930),i=r(23833),o=r(87144),s=r(39967),l=r(85764);function u(e,t,r,l){let{colorType:u,vertexCount:c,groupCount:d,positionBuffer:p,instanceBuffer:f,transformBuffer:m,groupBuffer:h,itemSize:g}=e,{resolution:b,stride:y}=t,x=u.endsWith("Instance"),S=n.XZ.fromSphere3D((0,n.XZ)(),x?e.boundingSphere:e.invariantBoundingSphere),T=1+b,C=n.XZ.expand((0,n.XZ)(),S,o.AO.create(T,T,T)),O=1/b,I=n.XZ.scale((0,n.XZ)(),C,O),A=n.XZ.size((0,o.AO)(),I);o.AO.ceil(A,A),o.AO.add(A,A,o.AO.create(2,2,2));let{min:w}=C,[D,E]=A,{width:M,height:P}=(0,s.f$)(A),k=new Float32Array(M*P*g),B=new Float32Array(M*P),_=new Uint8Array(M*P*g),R=x?e.instanceCount:1,F=e.colorData.array,[L,z,N]=A,G=(0,o.AO)();for(let e=0;e<R;++e){let t=r&&x?f[e]:e;for(let r=0;r<c;r+=y){o.AO.fromArray(G,p,3*r),x&&o.AO.transformMat4Offset(G,G,m,0,0,16*e),o.AO.sub(G,G,w),o.AO.scale(G,G,O);let[a,n,i]=G,s=Math.floor(a),l=Math.floor(n),u=Math.floor(i),c=(t*d+h[r])*g,f=Math.max(0,s-2),b=Math.max(0,l-2),y=Math.max(0,u-2),S=Math.min(L,s+2+2),T=Math.min(z,l+2+2),C=Math.min(N,u+2+2);for(let e=f;e<S;++e){let t=e-a;for(let r=b;r<T;++r){let a=r-n;for(let n=y;n<C;++n){let o=n-i,s=Math.sqrt(t*t+a*a+o*o);if(s>2)continue;let l=2-s,u=function(e,t,r){let a=Math.floor(r*D%M/D);return g*(Math.floor(r*D/M)*E*M+t*M+(a*D+e))}(e,r,n);for(let e=0;e<g;++e)k[u+e]+=F[c+e]*l;B[u/g]+=l}}}}}for(let e=0,t=B.length;e<t;++e){let t=e*g,r=B[e];for(let e=0;e<g;++e)_[t+e]=Math.round(k[t+e]/r)}let U=o.Sg.create(M,P),V=o.T8.create(w[0],w[1],w[2],O),j=x?"volumeInstance":"volume";if(r){if(!l){let e=4===g?"rgba":3===g?"rgb":"alpha";l=r.resources.texture("image-uint8",e,"ubyte","linear")}return l.load({array:_,width:M,height:P,filter:"linear"}),{kind:"volume",texture:l,gridTexDim:U,gridDim:A,gridTransform:V,type:j}}{let e=function(e){let{vertexCount:t,positionBuffer:r,transformBuffer:n,grid:s,gridDim:l,gridTexDim:u,gridTransform:c,vertexStride:d,colorStride:p}=e,f=e.itemOffset||0,m=e.outputStride;if(m+f>p)throw Error("outputStride + itemOffset must NOT be larger than colorStride");let h=e.colorType.endsWith("Instance"),g=h?e.instanceCount:1,b=(0,a.l3)(Math.max(1,g*t),m,Uint8Array),{array:y}=b,[x,S]=l,T=u[0],C=o.AO.fromArray((0,o.AO)(),c,0),O=c[3];function I(e,t,r){let a=Math.floor(r*x%T/x);return p*(Math.floor(r*x/T)*S*T+t*T+(a*x+e))}let A=(0,o.AO)(),w=(0,o.AO)(),D=(0,o.AO)(),E=(0,o.AO)();for(let e=0;e<g;++e)for(let a=0;a<t;
2831++a){o.AO.fromArray(A,r,a*d),h&&o.AO.transformMat4Offset(A,A,n,0,0,16*e),o.AO.sub(A,A,C),o.AO.scale(A,A,O),o.AO.floor(w,A),o.AO.ceil(D,A),o.AO.sub(E,A,w),o.AO.sub(A,D,w),o.AO.div(E,E,A);let[l,u,c]=w,[p,g,b]=D,[x,S,T]=E,M=I(l,u,c)+f,P=I(p,u,c)+f,k=I(l,u,b)+f,B=I(p,u,b)+f,_=I(l,g,c)+f,R=I(p,g,c)+f,F=I(l,g,b)+f,L=I(p,g,b)+f,z=(e*t+a)*m;for(let e=0;e<m;++e){let t=s[M+e],r=s[P+e],a=s[k+e],n=s[B+e],o=s[_+e],l=s[R+e],u=s[F+e],c=s[L+e],d=(0,i.t7)(t,r,x),p=(0,i.t7)(a,n,x),f=(0,i.t7)(o,l,x),m=(0,i.t7)(u,c,x),h=(0,i.t7)(d,f,S),g=(0,i.t7)(p,m,S);y[z+e]=(0,i.t7)(h,g,T)}}return b}({vertexCount:c,instanceCount:R,transformBuffer:m,positionBuffer:p,colorType:j,grid:_,gridDim:A,gridTexDim:U,gridTransform:V,vertexStride:3,colorStride:g,outputStride:g});return{kind:"vertex",texture:e,texDim:o.Sg.create(e.width,e.height),type:x?"vertexInstance":"vertex"}}}function c(e,t,r,a){var n;if(!("group"===(n=e.dColorType.ref.value)||"groupInstance"===n))return;let i=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tColor.ref.value,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:3},t,r,a);"volume"===i.kind?(l.IO.updateIfChanged(e.dColorType,i.type),l.IO.update(e.tColorGrid,i.texture),l.IO.update(e.uColorTexDim,i.gridTexDim),l.IO.update(e.uColorGridDim,i.gridDim),l.IO.update(e.uColorGridTransform,i.gridTransform)):"vertex"===i.kind&&(l.IO.updateIfChanged(e.dColorType,i.type),l.IO.update(e.tColor,i.texture),l.IO.update(e.uColorTexDim,i.texDim))}function d(e,t,r,a){if("groupInstance"!==e.dOverpaintType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tOverpaint.ref.value,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dOverpaintType,n.type),l.IO.update(e.tOverpaintGrid,n.texture),l.IO.update(e.uOverpaintTexDim,n.gridTexDim),l.IO.update(e.uOverpaintGridDim,n.gridDim),l.IO.update(e.uOverpaintGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dOverpaintType,n.type),l.IO.update(e.tOverpaint,n.texture),l.IO.update(e.uOverpaintTexDim,n.texDim))}function p(e,t,r,a){if("groupInstance"!==e.dTransparencyType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tTransparency.ref.value,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dTransparencyType,n.type),l.IO.update(e.tTransparencyGrid,n.texture),l.IO.update(e.uTransparencyTexDim,n.gridTexDim),l.IO.update(e.uTransparencyGridDim,n.gridDim),l.IO.update(e.uTransparencyGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dTransparencyType,n.type),l.IO.update(e.tTransparency,n.texture),l.IO.update(e.uTransparencyTexDim,n.texDim))}function f(e,t,r,a){if("groupInstance"!==e.dEmissiveType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tEmissive.ref.value,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:1},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dEmissiveType,n.type),l.IO.update(e.tEmissiveGrid,n.texture),l.IO.update(e.uEmissiveTexDim,n.gridTexDim),l.IO.update(e.uEmissiveGridDim,n.gridDim),l.IO.update(e.uEmissiveGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dEmissiveType,n.type),l.IO.update(e.tEmissive,n.texture),l.IO.update(e.uEmissiveTexDim,n.texDim))}function m(e,t,r,a){if("groupInstance"!==e.dSubstanceType.ref.value)return;let n=u({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionBuffer:e.aPosition.ref.value,groupBuffer:e.aGroup.ref.value,colorData:e.tSubstance.ref.value,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value,itemSize:4},t,r,a);"volume"===n.kind?(l.IO.updateIfChanged(e.dSubstanceType,n.type),l.IO.update(e.tSubstanceGrid,n.texture),l.IO.update(e.uSubstanceTexDim,n.gridTexDim),l.IO.update(e.uSubstanceGridDim,n.gridDim),l.IO.update(e.uSubstanceGridTransform,n.gridTransform)):"vertex"===n.kind&&(l.IO.updateIfChanged(e.dSubstanceType,n.type),l.IO.update(e.tSubstance,n.texture),l.IO.update(e.uSubstanceTexDim,n.texDim))}},89623:function(e,t,r){r.d(t,{V:function(){return a}});var a,n=r(87144),i=r(69062),o=r(4376),s=r(34748),l=r(84785);let u=(0,n.AO)(),c=(0,n.Tu)(),d=(0,n.AO)(),p=(0,n.AO)(),f=(0,n.AO)(),m=(0,n.AO)(),h=n.AO.fromArray,g=n.AO.triangleNormal,b=n.AO.copy,y=n.AO.transformMat4,x=n.AO.transformMat3,S=n.Tu.directionTransform,T=i.pS.add3,C=i.pS.add;!function(e){function t(e,t,r,a){let{vertices:n,normals:i,indices:o,groups:s,currentGroup:l}=e,c=n.elementCount;T(n,t[0],t[1],t[2]),T(n,r[0],r[1],r[2]),T(n,a[0],a[1],a[2]),g(u,t,r,a);for(let e=0;e<3;++e)T(i,u[0],u[1],u[2]),C(s,l);T(o,c,c+1,c+2)}function r(e,t,r,a,n){let{vertices:i,normals:o,indices:s,groups:l,currentGroup:u}=e,c=i.elementCount;T(i,t[0],t[1],t[2]),T(i,r[0],r[1],r[2]),T(i,a[0],a[1],a[2]);for(let e=0;e<3;++e)T(o,n[0],n[1],n[2]),C(l,u);T(s,c,c+1,c+2)}function a(e,t,r){let{vertices:a,normals:n,indices:i}=r,{vertices:o,normals:s,indices:l,groups:d,currentGroup:p}=e,f=o.elementCount,m=S(c,t);for(let e=0,r=a.length;e<r;e+=3)y(u,h(u,a,e),t),T(o,u[0],u[1],u[2]),x(u,h(u,n,e),m),T(s,u[0],u[1],u[2]),C(d,p);for(let e=0,t=i.length;e<t;e+=3)T(l,i[e]+f,i[e+1]+f,i[e+2]+f)}e.createState=function(e=2048,t=1024,r){return{currentGroup:-1,vertices:i.pS.create(Float32Array,3,t,r?r.vertexBuffer.ref.value:e),normals:i.pS.create(Float32Array,3,t,r?r.normalBuffer.ref.value:e),indices:i.pS.create(Uint32Array,3,3*t,r?r.indexBuffer.ref.value:3*e),groups:i.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e),mesh:r}},e.addTriangle=t,e.addTriangleWithNormal=r,e.addTriangleStrip=function(e,r,a){h(f,r,3*a[0]),h(m,r,3*a[1]);for(let n=2,i=a.length;n<i;n+=2)b(d,f),b(p,m),h(f,r,3*a[n]),h(m,r,3*a[n+1]),t(e,d,p,f),t(e,p,m,f)},e.addTriangleFan=function(e,r,a){h(d,r,3*a[0]);for(let n=2,i=a.length;n<i;++n)h(p,r,3*a[n-1]),h(f,r,3*a[n]),t(e,d,f,p)},e.addTriangleFanWithNormal=function(e,t,a,n){h(d,t,3*a[0]);for(let i=2,o=a.length;i<o;++i)h(p,t,3*a[i-1]),h(f,t,3*a[i]),r(e,d,f,p,n)},e.addPrimitive=a,e.addPrimitiveFlipped=function(e,t,r){let{vertices:a,normals:n,indices:i}=r,{vertices:o,normals:s,indices:l,groups:d,currentGroup:p}=e,f=o.elementCount,m=S(c,t);for(let e=0,r=a.length;e<r;e+=3)y(u,h(u,a,e),t),T(o,u[0],u[1],u[2]),x(u,h(u,n,e),m),T(s,-u[0],-u[1],-u[2]),C(d,p);for(let e=0,t=i.length;e<t;e+=3)T(l,i[e+2]+f,i[e+1]+f,i[e]+f)},e.addCage=function(e,t,r,a,n,i){let{vertices:o,edges:u}
2831=r,c={radiusTop:a,radiusBottom:a,radialSegments:i};for(let r=0,i=u.length;r<i;r+=2)h(d,o,3*u[r]),h(p,o,3*u[r+1]),y(d,d,t),y(p,p,t),(0,s.H)(e,d,a,n),(0,s.H)(e,p,a,n),(0,l.vA)(e,d,p,1,c)},e.addMesh=function(e,t,r){a(e,t,{vertices:r.vertexBuffer.ref.value.subarray(0,3*r.vertexCount),normals:r.normalBuffer.ref.value.subarray(0,3*r.vertexCount),indices:r.indexBuffer.ref.value.subarray(0,3*r.triangleCount)})},e.getMesh=function(e){let{vertices:t,normals:r,indices:a,groups:n,mesh:s}=e,l=i.pS.compact(t,!0),u=i.pS.compact(a,!0),c=i.pS.compact(r,!0),d=i.pS.compact(n,!0);return o.K.create(l,u,c,d,e.vertices.elementCount,e.indices.elementCount,s)}}(a||(a={}))},4376:function(e,t,r){r.d(t,{K:function(){return a}});var a,n=r(85764),i=r(87144),o=r(48930),s=r(23789),l=r(85688),u=r(72558),c=r(69587),d=r(69062),p=r(14086),f=r(62927),m=r(54185),h=r(5514),g=r(38788),b=r(22444),y=r(36111),x=r(58463),S=r(41723),T=r(4249),C=r(64690);!function(e){function t(e,t,r,i,l,u,c){return c?(c.vertexCount=l,c.triangleCount=u,n.IO.update(c.vertexBuffer,e),n.IO.update(c.indexBuffer,t),n.IO.update(c.normalBuffer,r),n.IO.update(c.groupBuffer,i),c):function(e,t,r,i,l,u){let c;let d=(0,o.CP)(),p=-1,m=-1,h={kind:"mesh",vertexCount:l,triangleCount:u,vertexBuffer:n.IO.create(e),indexBuffer:n.IO.create(t),normalBuffer:n.IO.create(r),groupBuffer:n.IO.create(i),varyingGroup:n.IO.create(!1),get boundingSphere(){let e=a(h);if(e!==p){let t=(0,f.Yx)(h.vertexBuffer.ref.value,h.vertexCount,1);o.CP.copy(d,t),p=e}return d},get groupMapping(){return h.groupBuffer.ref.version!==m&&(c=(0,s.r8)(h.groupBuffer.ref.value,h.vertexCount),m=h.groupBuffer.ref.version),c},setBoundingSphere(e){o.CP.copy(d,e),p=a(h)},hasBoundingSphere:()=>p===a(h),meta:{}};return h}(e,t,r,i,l,u)}function r(e){let r=e?e.vertexBuffer.ref.value:new Float32Array(0);return t(r,e?e.indexBuffer.ref.value:new Uint32Array(0),e?e.normalBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,0,e)}function a(e){return(0,d.nF)([e.vertexCount,e.triangleCount,e.vertexBuffer.ref.version,e.indexBuffer.ref.version,e.normalBuffer.ref.version,e.groupBuffer.ref.version])}e.create=t,e.createEmpty=r,e.computeNormals=function(e){let{vertexCount:t,triangleCount:r}=e,a=e.vertexBuffer.ref.value,i=e.indexBuffer.ref.value,o=e.normalBuffer.ref.value.length>=3*t?e.normalBuffer.ref.value:new Float32Array(3*t);o===e.normalBuffer.ref.value&&o.fill(0,0,3*t),(0,s.wR)(a,i,o,t,r),n.IO.update(e.normalBuffer,o)},e.checkForDuplicateVertices=function(e,t=3){let r=e.vertexBuffer.ref.value,a=new Map,n=(e,t)=>`${e[0].toFixed(t)}|${e[1].toFixed(t)}|${e[2].toFixed(t)}`,o=0,s=(0,i.AO)();for(let l=0,u=e.vertexCount;l<u;++l){i.AO.fromArray(s,r,3*l);let e=n(s,t),u=a.get(e);void 0!==u?(o+=1,a.set(e,u+1)):a.set(e,1)}return o};let O=(0,i.Tu)();function I(e){let{vertexCount:t,triangleCount:r}=e,a=e.indexBuffer.ref.value,n=[];for(let e=0;e<t;++e)n[e]=[];for(let e=0;e<r;++e){let t=a[3*e],r=a[3*e+1],i=a[3*e+2];(0,y.S8)(n[t],r),(0,y.S8)(n[t],i),(0,y.S8)(n[r],t),(0,y.S8)(n[r],i),(0,y.S8)(n[i],t),(0,y.S8)(n[i],r)}return n}function A(e){let{triangleCount:t}=e,r=e.indexBuffer.ref.value,a=new Map,n=(e,t)=>{let r=(0,d.Yd)(e,t),n=a.get(r)||0;a.set(r,n+1)};for(let e=0;e<t;++e){let t=r[3*e],a=r[3*e+1],i=r[3*e+2];n(t,a),n(t,i),n(a,i)}return a}function w(e){let t=new Set,r=[0,0];return e.forEach((e,a)=>{1===e&&((0,d.zI)(r,a),t.add(r[0]),t.add(r[1]))}),t}function D(e,t,r){let a=new Map,n=(e,t)=>{a.has(e)?(0,y.S8)(a.get(e),t):a.set(e,[t])};return t.forEach(a=>{for(let i of e[a])t.has(i)&&1===r.get((0,d.Yd)(a,i))&&n(a,i)}),a}function E(e,t){let r=e.vertexCount,a=t.instanceCount.ref.value,n=(0,u.cH)(),o=n.position,s=n.normal,l=e.vertexBuffer.ref.value,c=e.normalBuffer.ref.value,d=t.aTransform.ref.value;return(0,u.OF)(r,a,1,(e,t)=>(t<0?(i.AO.fromArray(o,l,3*e),i.AO.fromArray(s,c,3*e)):(i.AO.transformMat4Offset(o,l,d,0,3*e,16*t),i.AO.transformDirectionOffset(s,c,d,0,3*e,16*t)),n))}function M(e,t,r,a,s){let{instanceCount:u,groupCount:d}=r,p=E(e,t),y=(0,c.is)(r,p,a.color),x=s.instanceGranularity?(0,l.eL)(u,"instance"):(0,l.eL)(u*d,"groupInstance"),O=(0,h.wS)(),I=(0,g.PG)(),A=(0,T.ur)(),w=(0,S.mQ)(),D=(0,b.cO)(),M={drawCount:3*e.triangleCount,vertexCount:e.vertexCount,groupCount:d,instanceCount:u},P=o.CP.clone(e.boundingSphere),k=(0,f.Lo)(P,t.aTransform.ref.value,u,0);return{dGeometryType:n.IO.create("mesh"),aPosition:e.vertexBuffer,aNormal:e.normalBuffer,aGroup:e.groupBuffer,elements:e.indexBuffer,dVaryingGroup:e.varyingGroup,boundingSphere:n.IO.create(k),invariantBoundingSphere:n.IO.create(P),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(P)),...y,...x,...O,...I,...A,...w,...D,...t,...m.ev.createValues(s,M),uDoubleSided:n.IO.create(s.doubleSided),dFlatShaded:n.IO.create(s.flatShaded),dFlipSided:n.IO.create(s.flipSided),dIgnoreLight:n.IO.create(s.ignoreLight),dCelShaded:n.IO.create(s.celShaded),dXrayShaded:n.IO.create("inverted"===s.xrayShaded?"inverted":!0===s.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(s.transparentBackfaces),uBumpFrequency:n.IO.create(s.bumpFrequency),uBumpAmplitude:n.IO.create(s.bumpAmplitude),uInteriorColor:n.IO.create((0,C.Qy)(s.interior,(0,i.T8)())),uInteriorSubstance:n.IO.create((0,C.gt)(s.interior,(0,i.T8)())),meta:n.IO.create(e.meta)}}function P(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xraySha
2831ded,e.writeDepth=e.opaque}e.transform=function(e,t){let r=e.vertexBuffer.ref.value;if((0,s.ST)(t,r,0,e.vertexCount),!i.yb.isTranslationAndUniformScaling(t)){let r=i.Tu.directionTransform(O,t);(0,s.f9)(r,e.normalBuffer.ref.value,0,e.vertexCount)}n.IO.update(e.vertexBuffer,r)},e.getOriginalData=function(e){let{originalData:t}="kind"in e?e.meta:e.meta.ref.value;return t},e.uniformTriangleGroup=function(e,t=!0){let{indexBuffer:r,vertexBuffer:a,groupBuffer:o,normalBuffer:s,triangleCount:l,vertexCount:u}=e,c=r.ref.value,p=a.ref.value,f=o.ref.value,m=s.ref.value,h=d.pS.create(Uint32Array,3,1024,l),g=d.pS.create(Float32Array,3,1024,p);g.currentIndex=3*u,g.elementCount=u;let b=d.pS.create(Float32Array,3,1024,m);b.currentIndex=3*u,b.elementCount=u;let y=d.pS.create(Float32Array,1,1024,f);y.currentIndex=u,y.elementCount=u;let x=(0,i.AO)(),S=(0,i.AO)(),T=(0,i.AO)(),C=(0,i.AO)(),O=(0,i.AO)(),I=(0,i.AO)();function A(e){i.AO.fromArray(x,p,3*e),i.AO.fromArray(C,m,3*e),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function w(e,t){i.AO.fromArray(x,p,3*e),i.AO.fromArray(S,p,3*t),i.AO.scale(x,i.AO.add(x,x,S),.5),i.AO.fromArray(C,m,3*e),i.AO.fromArray(O,m,3*t),i.AO.scale(C,i.AO.add(C,C,O),.5),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function D(e,t,r){i.AO.fromArray(x,p,3*e),i.AO.fromArray(S,p,3*t),i.AO.fromArray(T,p,3*r),i.AO.scale(x,i.AO.add(x,i.AO.add(x,x,S),T),1/3),i.AO.fromArray(C,m,3*e),i.AO.fromArray(O,m,3*t),i.AO.fromArray(I,m,3*r),i.AO.scale(C,i.AO.add(C,i.AO.add(C,C,O),I),1/3),d.pS.add3(g,x[0],x[1],x[2]),d.pS.add3(b,C[0],C[1],C[2])}function E(e,t,r,a,n){++P,A(e),w(e,t),w(e,r),d.pS.add3(h,M,M+1,M+2);for(let e=0;e<3;++e)d.pS.add(y,a);M+=3,P+=2,A(t),A(r),w(e,t),w(e,r),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,n);M+=4}let M=u,P=0;if(t)for(let e=0;e<l;++e){let t=c[3*e],r=c[3*e+1],a=c[3*e+2],n=f[t],i=f[r],o=f[a];if(n===i&&n===o)++P,d.pS.add3(h,t,r,a);else if(n===i)E(a,t,r,o,n);else if(n===o)E(r,a,t,i,o);else if(i===o)E(t,r,a,n,i);else{P+=2,A(t),w(t,r),w(t,a),D(t,r,a),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,n);M+=4,P+=2,A(r),w(r,a),w(r,t),D(t,r,a),d.pS.add3(h,M,M+1,M+3),d.pS.add3(h,M,M+3,M+2);for(let e=0;e<4;++e)d.pS.add(y,i);M+=4,P+=2,A(a),w(a,r),w(a,t),D(t,r,a),d.pS.add3(h,M+3,M+1,M),d.pS.add3(h,M+2,M+3,M);for(let e=0;e<4;++e)d.pS.add(y,o);M+=4}}else for(let e=0;e<l;++e){let t=c[3*e],r=c[3*e+1],a=c[3*e+2],n=f[t],i=f[r],o=f[a];if(n!==i||n!==o){++P,A(t),A(r),A(a),d.pS.add3(h,M,M+1,M+2);let e=i===o?i:n;for(let t=0;t<3;++t)d.pS.add(y,e);M+=3}else++P,d.pS.add3(h,t,r,a)}let k=d.pS.compact(h),B=d.pS.compact(g),_=d.pS.compact(b),R=d.pS.compact(y);return e.vertexCount=M,e.triangleCount=P,n.IO.update(a,B),n.IO.update(o,R),n.IO.update(r,k),n.IO.update(s,_),e.meta.originalData={indexBuffer:c,vertexCount:u,triangleCount:l},e},e.smoothEdges=function(e,t){!function(e,t){let{indexBuffer:r,triangleCount:a}=e,i=r.ref.value,o=d.pS.create(Uint32Array,3,1024,a),s=0;for(let e=0;e<a;++e){let r=i[3*e],a=i[3*e+1],n=i[3*e+2];2!==t[r].length&&2!==t[a].length&&2!==t[n].length&&(d.pS.add3(o,r,a,n),s+=1)}let l=d.pS.compact(o);e.triangleCount=s,n.IO.update(r,l)}(e,I(e));for(let r=0;r<10;++r){let r=e.triangleCount,a=A(e),o=I(e),s=D(o,w(a),a);if(function(e,t,r,a){var o;let{vertexBuffer:s,indexBuffer:l,normalBuffer:u,triangleCount:c}=e,p=s.ref.value,f=l.ref.value,m=u.ref.value,h=d.pS.create(Uint32Array,3,1024,c),g=0;for(let e=0;e<c;++e)d.pS.add3(h,f[3*e],f[3*e+1],f[3*e+2]),g+=1;let b=(0,i.AO)(),y=(0,i.AO)(),S=(0,i.AO)(),T=(0,i.AO)(),C=(0,i.AO)(),O=(0,i.AO)(),I=(0,i.AO)(),A=(0,i.AO)(),w=(0,i.AO)(),D=(0,i.AO)(),E=(0,x.Id)(120),M=new Set,P=Array.from(r.keys()).filter(e=>r.get(e).length<2).map(e=>{let t=r.get(e);return i.AO.fromArray(b,p,3*e),i.AO.fromArray(y,p,3*t[0]),i.AO.fromArray(S,p,3*t[1]),i.AO.sub(C,y,b),i.AO.sub(O,S,b),[e,i.AO.angle(C,O)]});for(let[e,n]of(P.sort(([,e],[,t])=>e-t),P)){if(M.has(e)||n>E)continue;let s=r.get(e);if(t[s[0]].includes(s[1])&&!(null===(o=r.get(s[0]))||void 0===o?void 0:o.includes(s[1]))||(i.AO.fromArray(b,p,3*e),i.AO.fromArray(y,p,3*s[0]),i.AO.fromArray(S,p,3*s[1]),i.AO.sub(C,y,b),i.AO.sub(O,S,b),i.AO.add(A,C,O),i.AO.squaredDistance(b,y)>=a))continue;let l=!1;for(let r of t[e])if(!s.includes(r)&&(i.AO.fromArray(T,p,3*r),i.AO.sub(I,T,b),0>i.AO.dot(A,I))){l=!0;break}l&&(i.AO.fromArray(w,m,3*e),i.AO.triangleNormal(D,b,y,S),i.AO.dot(D,w)>0?d.pS.add3(h,e,s[0],s[1]):d.pS.add3(h,s[1],s[0],e),M.add(e),M.add(s[0]),M.add(s[1]),g+=1)}let k=d.pS.compact(h);e.triangleCount=g,n.IO.update(l,k)}(e,o,s,t.maxNewEdgeLength*t.maxNewEdgeLength),e.triangleCount===r)break}let r=A(e),a=I(e);return function(e,t,r){let{iterations:a,lambda:o}=r,s=(0,i.AO)(),l=(0,i.AO)(),u=(0,i.AO)(),c=(0,i.AO)(),d=-o,p=new Float32Array(e.vertexBuffer.ref.value.length),f=r=>{let a=e.vertexBuffer.ref.value;p.set(a),t.forEach((e,t)=>{if(2!==e.length)return;i.AO.fromArray(s,a,3*t),i.AO.fromArray(l,a,3*e[0]),i.AO.fromArray(u,a,3*e[1]);let n=1/i.AO.distance(s,l),o=1/i.AO.distance(s,u);i.AO.scale(l,l,n),i.AO.scale(u,u,o),i.AO.add(c,l,u),i.AO.scale(c,c,1/(n+o)),i.AO.sub(c,c,s),i.AO.scale(c,c,r),i.AO.add(c,s,c
2831),i.AO.toArray(c,p,3*t)});let o=e.vertexBuffer.ref.value;n.IO.update(e.vertexBuffer,p),p=o};for(let e=0;e<a;++e)f(o),f(d)}(e,D(a,w(r),r),{iterations:t.iterations,lambda:.5}),e},e.Params={...m.ev.Params,doubleSided:p.e.Boolean(!1,m.ev.CustomQualityParamInfo),flipSided:p.e.Boolean(!1,m.ev.ShadingCategory),flatShaded:p.e.Boolean(!1,m.ev.ShadingCategory),ignoreLight:p.e.Boolean(!1,m.ev.ShadingCategory),celShaded:p.e.Boolean(!1,m.ev.ShadingCategory),xrayShaded:p.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],m.ev.ShadingCategory),transparentBackfaces:p.e.Select("off",p.e.arrayToOptions(["off","on","opaque"]),m.ev.ShadingCategory),bumpFrequency:p.e.Numeric(0,{min:0,max:10,step:.1},m.ev.ShadingCategory),bumpAmplitude:p.e.Numeric(1,{min:0,max:5,step:.1},m.ev.ShadingCategory),interior:(0,C.xA)()},e.Utils={Params:e.Params,createEmpty:r,createValues:M,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...p.e.getDefaultValues(e.Params),...r};return M(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dFlatShaded,t.flatShaded),n.IO.updateIfChanged(e.dFlipSided,t.flipSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,C.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,C.gt)(t.interior,e.uInteriorSubstance.ref.value))},updateBoundingSphere:function(e,t){let r=o.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);o.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),o.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return P(t,e),t},updateRenderableState:P,createPositionIterator:E}}(a||(a={}))},5514:function(e,t,r){r.d(t,{cr:function(){return u},jp:function(){return l},mS:function(){return c},wS:function(){return p}});var a=r(68303),n=r(87144),i=r(62927),o=r(70371),s=r(91407);function l(e,t,r,a){for(let n=t;n<r;++n)o.Il.toArray(a,e,4*n),e[4*n+3]=255;return!0}function u(e,t,r){return e.fill(0,4*t,4*r),!0}function c(e,t,r){let o=(0,i.l3)(Math.max(1,e),4,Uint8Array,r&&r.tOverpaint.ref.value.array);return r?(a.IO.update(r.tOverpaint,o),a.IO.update(r.uOverpaintTexDim,n.Sg.create(o.width,o.height)),a.IO.updateIfChanged(r.dOverpaint,e>0),a.IO.updateIfChanged(r.dOverpaintType,t),r):{tOverpaint:a.IO.create(o),uOverpaintTexDim:a.IO.create(n.Sg.create(o.width,o.height)),dOverpaint:a.IO.create(e>0),tOverpaintGrid:a.IO.create((0,s.DU)()),uOverpaintGridDim:a.IO.create(n.AO.create(1,1,1)),uOverpaintGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dOverpaintType:a.IO.create(t),uOverpaintStrength:a.IO.create(1)}}let d={array:new Uint8Array(4),width:1,height:1};function p(e){return e?(a.IO.update(e.tOverpaint,d),a.IO.update(e.uOverpaintTexDim,n.Sg.create(1,1)),e):{tOverpaint:a.IO.create(d),uOverpaintTexDim:a.IO.create(n.Sg.create(1,1)),dOverpaint:a.IO.create(!1),tOverpaintGrid:a.IO.create((0,s.DU)()),uOverpaintGridDim:a.IO.create(n.AO.create(1,1,1)),uOverpaintGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dOverpaintType:a.IO.create("groupInstance"),uOverpaintStrength:a.IO.create(1)}}},80898:function(e,t,r){var a,n;r.d(t,{i:function(){return a}}),(n=a||(a={})).Null=16777214,n.areSame=function(e,t){return e.objectId===t.objectId&&e.instanceId===t.instanceId&&e.groupId===t.groupId}},89017:function(e,t,r){r.d(t,{U:function(){return a}});var a,n=r(69062),i=r(99696);let o=n.pS.add3,s=n.pS.add;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,3,t,r?r.centerBuffer.ref.value:e),l=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e);return{add:(e,t,r,n)=>
2831{o(a,e,t,r),s(l,n)},getPoints:()=>{let e=n.pS.compact(a,!0),t=n.pS.compact(l,!0);return i.w.create(e,t,a.elementCount,r)}}}},99696:function(e,t,r){r.d(t,{w:function(){return a}});var a,n=r(85764),i=r(87144),o=r(23789),s=r(69587),l=r(85688),u=r(17411),c=r(72558),d=r(14086),p=r(62927),f=r(48930),m=r(54185),h=r(5514),g=r(38788),b=r(69062),y=r(22444),x=r(41723),S=r(4249);!function(e){function t(e,t,r,i){return i?(i.pointCount=r,n.IO.update(i.centerBuffer,e),n.IO.update(i.groupBuffer,t),i):function(e,t,r){let i;let s=(0,f.CP)(),l=-1,u=-1,c={kind:"points",pointCount:r,centerBuffer:n.IO.create(e),groupBuffer:n.IO.create(t),get boundingSphere(){let e=a(c);if(e!==l){let t=(0,p.Yx)(c.centerBuffer.ref.value,c.pointCount,1);f.CP.copy(s,t),l=e}return s},get groupMapping(){return c.groupBuffer.ref.version!==u&&(i=(0,o.r8)(c.groupBuffer.ref.value,c.pointCount),u=c.groupBuffer.ref.version),i},setBoundingSphere(e){f.CP.copy(s,e),l=a(c)},hasBoundingSphere:()=>l===a(c)};return c}(e,t,r)}function r(e){return t(e?e.centerBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,b.nF)([e.pointCount,e.centerBuffer.ref.version,e.groupBuffer.ref.version])}function T(e,t){let r=e.pointCount,a=t.instanceCount.ref.value,n=(0,c.cH)(),o=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,c.OF)(r,a,1,(e,t)=>(t<0?i.AO.fromArray(o,s,3*e):i.AO.transformMat4Offset(o,s,l,0,3*e,16*t),n))}function C(e,t,r,a,o){let{instanceCount:c,groupCount:d}=r,b=T(e,t),C=(0,s.is)(r,b,a.color),O=(0,u.H4)(r,b,a.size),I=o.instanceGranularity?(0,l.eL)(c,"instance"):(0,l.eL)(c*d,"groupInstance"),A=(0,h.wS)(),w=(0,g.PG)(),D=(0,S.ur)(),E=(0,x.mQ)(),M=(0,y.cO)(),P={drawCount:e.pointCount,vertexCount:e.pointCount,groupCount:d,instanceCount:c},k=f.CP.clone(e.boundingSphere),B=(0,p.Lo)(k,t.aTransform.ref.value,c,0);return{dGeometryType:n.IO.create("points"),aPosition:e.centerBuffer,aGroup:e.groupBuffer,boundingSphere:n.IO.create(B),invariantBoundingSphere:n.IO.create(k),uInvariantBoundingSphere:n.IO.create(i.T8.ofSphere(k)),...C,...O,...I,...A,...w,...D,...E,...M,...t,...m.ev.createValues(o,P),uSizeFactor:n.IO.create(o.sizeFactor),dPointSizeAttenuation:n.IO.create(o.pointSizeAttenuation),dPointStyle:n.IO.create(o.pointStyle)}}function O(e,t){m.ev.updateRenderableState(e,t),e.opaque=e.opaque&&"fuzzy"!==t.pointStyle,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.transform=function(e,t){let r=e.centerBuffer.ref.value;(0,o.ST)(t,r,0,e.pointCount),n.IO.update(e.centerBuffer,r)},e.StyleTypes={square:"Square",circle:"Circle",fuzzy:"Fuzzy"},e.StyleTypeNames=Object.keys(e.StyleTypes),e.Params={...m.ev.Params,sizeFactor:d.e.Numeric(3,{min:0,max:10,step:.1}),pointSizeAttenuation:d.e.Boolean(!1),pointStyle:d.e.Select("square",d.e.objectToOptions(e.StyleTypes))},e.Utils={Params:e.Params,createEmpty:r,createValues:C,createValuesSimple:function(t,r,a,n,i){let o=m.ev.createSimple(a,n,i),s={...d.e.getDefaultValues(e.Params),...r};return C(t,o.transform,o.locationIterator,o.theme,s)},updateValues:function(e,t){m.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.dPointSizeAttenuation,t.pointSizeAttenuation),n.IO.updateIfChanged(e.dPointStyle,t.pointStyle)},updateBoundingSphere:function(e,t){let r=f.CP.clone(t.boundingSphere),a=(0,p.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);f.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),f.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,i.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=m.ev.createRenderableState(e);return O(t,e),t},updateRenderableState:O,createPositionIterator:T}}(a||(a={}))},17411:function(e,t,r){r.d(t,{H4:function(){return u},Mu:function(){return c}});var a=r(85764),n=r(87144),i=r(62927),o=r(71522),s=r(11803),l=r(81421);function u(e,t,r,u){switch(s.Z.getGranularity(e,r.granularity)){case"uniform":var c,f,m,h;return c=e,f=r.size,m=u,c.reset(),h=f(c.hasNext?c.move().location:o.ad),m?(a.IO.update(m.uSize,h),a.IO.updateIfChanged(m.dSizeType,"uniform"),m):{uSize:a.IO.create(h),tSize:a.IO.create(d),uSizeTexDim:a.IO.create(n.Sg.create(1,1)),dSizeType:a.IO.create("uniform")};case"instance":return function(e,t,r){let{instanceCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.instanceIndex),e.skipInstance()}return p(n,"instance",r)}(e,r.size,u);case"group":return function(e,t,r){let{groupCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext&&!e.isNextNewInstance;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.groupIndex)}return p(n,"group",r)}(e,r.size,u);case"groupInstance":return function(e,t,r){let{groupCount:a,instanceCount:n}=e,o=(0,i.l3)(Math.max(1,n*a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),o.array,3*r.index)}return p(o,"groupInstance",r)}(e,r.size,u);case"vertex":return function(e,t,r){let{groupCount:a}=e,n=(0,i.l3)(Math.max(1,a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),n.array,3*r.index)}return p(n,"vertex",r)}(t,r.size,u);case"vertexInstance":return function(e,t,r){let{groupCount:a,instanceCount:n}=e,o=(0,i.l3)(Math.max(1,n*a),3,Uint8Array,r&&r.tSize.ref.value.array);for(e.reset();e.hasNext;){let r=e.move();(0,l.lP)(100*t(r.location),o.array,3*r.index)}return p(o,"vertexInstance",r)}(t,r.size,u)}}function c(e){switch(e.dSizeType.ref.value){case"uniform":return e.uSize.ref.value;case"instance":case"group":case"groupInstance":case"vertex":case"vertexInstance":let t=0,r=e.tSize.ref.value.array;for(let e=0,a=r.length;e<a;e+=3){let a=(0,l.UF)(r[e],r[e+1],r[e+2]);t<a&&(t=a)}return t/100}}let d={array:new Uint8Array(3),width:1,height:1};function p(e,t,r){return r?(a.IO.update(r.tSize,e),a.IO.update(r.uSizeTexDim,n.Sg.create(e.width,e.height)),a.IO.updateIfChanged(r.dSizeType,t),r):{uSize:a.IO.create(0),tSize:a.IO.create(e),uSizeTexDim:a.IO.create(n.Sg.create(e.width,e.height)),dSizeType:a.IO.create(t)}}},2544:function(e,t,r){r.d(t,{L:function(){return a}});var a,n=r(69062),i=r(39857);let o=n.pS.add3,s=n.pS.add;(a||(a={})).create=function(e=2048,t=1024,r){let a=n.pS.create(Float32Array,3,t,r?r.centerBuffer.ref.value:e),l=n.pS.create(Float32Array,1,t,r?r.groupBuffer.ref.value:e);return{add:(e,t,r,n)=>
2831{o(a,e,t,r),s(l,n)},getSpheres:()=>{let e=n.pS.compact(a,!0),t=n.pS.compact(l,!0);return i.s.create(e,t,a.elementCount,r)}}}},39857:function(e,t,r){r.d(t,{s:function(){return a}});var a,n=r(85764),i=r(14086),o=r(72558),s=r(69587),l=r(85688),u=r(62927),c=r(48930),d=r(17411),p=r(54185),f=r(5514),m=r(38788),h=r(69062),g=r(23789),b=r(22444),y=r(87144),x=r(41723),S=r(4249),T=r(64690);!function(e){function t(e,t,r,i){return i?(i.sphereCount=r,n.IO.update(i.centerBuffer,e),n.IO.update(i.groupBuffer,t),i.shaderData.update(),i):function(e,t,r){let i;let o=(0,c.CP)(),s=-1,l=-1,d=n.IO.create((0,u.l3)(1,4,Float32Array)),p=n.IO.create(y.Sg.create(0,0)),f=n.IO.create([]),m=n.IO.create(0),h={kind:"spheres",sphereCount:r,centerBuffer:n.IO.create(e),groupBuffer:n.IO.create(t),get boundingSphere(){let e=a(h);if(e!==s){let t=(0,u.Yx)(h.centerBuffer.ref.value,h.sphereCount,1);c.CP.copy(o,t),s=e}return o},get groupMapping(){return h.groupBuffer.ref.version!==l&&(i=(0,g.r8)(h.groupBuffer.ref.value,h.sphereCount),l=h.groupBuffer.ref.version),i},setBoundingSphere(e){c.CP.copy(o,e),s=a(h)},hasBoundingSphere:()=>s===a(h),shaderData:{positionGroup:d,texDim:p,lodLevels:f,sizeFactor:m,update(e){var t,r;let a=null!==(t=null==e?void 0:e.lodLevels)&&void 0!==t?t:I(f.ref.value),i=null!==(r=null==e?void 0:e.sizeFactor)&&void 0!==r?r:m.ref.value,o=w(a,i),s=(0,u.l3)(h.sphereCount,4,Float32Array,d.ref.value.array),l=C(s,h.centerBuffer.ref.value,h.groupBuffer.ref.value,h.sphereCount,o),c=l?O(a,i,l,h.sphereCount):[];n.IO.update(d,s),n.IO.update(p,y.Sg.set(p.ref.value,s.width,s.height)),n.IO.update(f,c),n.IO.update(m,i)}}};return h.shaderData.update(),h}(e,t,r)}function r(e){return t(e?e.centerBuffer.ref.value:new Float32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,h.nF)([e.sphereCount,e.centerBuffer.ref.version,e.groupBuffer.ref.version])}function C(e,t,r,a,n){let{array:i}=e;if(0===n.length){for(let e=0;e<a;++e)i[4*e+0]=t[3*e+0],i[4*e+1]=t[3*e+1],i[4*e+2]=t[3*e+2],i[4*e+3]=r[e];return}let o=[0],s=0;for(let e=0,l=n.length;e<l;++e){let l=n[e];for(let o=0;o<a;++o){let a=!1;for(let t=0;t<e;++t)if(o%n[t]==0){a=!0;break}a||o%l!=0||(i[4*s+0]=t[3*o+0],i[4*s+1]=t[3*o+1],i[4*s+2]=t[3*o+2],i[4*s+3]=r[o],s+=1)}o.push(6*s)}return o}function O(e,t,r,a){return e.map((e,n)=>{let i=A(e,t);return[e.minDistance,e.maxDistance,e.overlap,r[r.length-1-n],Math.pow(Math.min(a,i),1/e.scaleBias),e.stride,e.scaleBias]})}function I(e){return e.map(e=>({minDistance:e[0],maxDistance:e[1],overlap:e[2],stride:e[5],scaleBias:e[6]}))}function A(e,t){return Math.max(1,Math.round(e.stride/Math.pow(t,e.scaleBias)))}function w(e,t){return e.map(e=>A(e,t)).reverse()}function D(e,t){let r=e.sphereCount,a=t.instanceCount.ref.value,n=(0,o.cH)(),i=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,o.OF)(r,a,1,(e,t)=>(t<0?y.AO.fromArray(i,s,3*e):y.AO.transformMat4Offset(i,s,l,0,3*e,16*t),n))}function E(e,t,r,a,i){let{instanceCount:o,groupCount:h}=r,g=D(e,t),C=(0,s.is)(r,g,a.color),O=(0,d.H4)(r,g,a.size),I=i.instanceGranularity?(0,l.eL)(o,"instance"):(0,l.eL)(o*h,"groupInstance"),A=(0,f.wS)(),w=(0,m.PG)(),E=(0,S.ur)(),M=(0,x.mQ)(),P=(0,b.cO)(),k={drawCount:6*e.sphereCount,vertexCount:6*e.sphereCount,groupCount:h,instanceCount:o},B=e.boundingSphere.radius?(0,d.Mu)(O)*i.sizeFactor:0,_=c.CP.expand((0,c.CP)(),e.boundingSphere,B),R=(0,u.Lo)(_,t.aTransform.ref.value,o,0);return e.shaderData.update({lodLevels:i.lodLevels,sizeFactor:i.sizeFactor}),{dGeometryType:n.IO.create("spheres"),uTexDim:e.shaderData.texDim,tPositionGroup:e.shaderData.positionGroup,boundingSphere:n.IO.create(R),invariantBoundingSphere:n.IO.create(_),uInvariantBoundingSphere:n.IO.create(y.T8.ofSphere(_)),...C,...O,...I,...A,...w,...E,...M,...P,...t,padding:n.IO.create(B),...p.ev.createValues(i,k),uSizeFactor:e.shaderData.sizeFactor,uDoubleSided:n.IO.create(i.doubleSided),dIgnoreLight:n.IO.create(i.ignoreLight),dCelShaded:n.IO.create(i.celShaded),dXrayShaded:n.IO.create("inverted"===i.xrayShaded?"inverted":!0===i.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(i.transparentBackfaces),dSolidInterior:n.IO.create(i.solidInterior),dClipPrimitive:n.IO.create(i.clipPr
2831imitive),dApproximate:n.IO.create(i.approximate),uAlphaThickness:n.IO.create(i.alphaThickness),uBumpFrequency:n.IO.create(i.bumpFrequency),uBumpAmplitude:n.IO.create(i.bumpAmplitude),uInteriorColor:n.IO.create((0,T.Qy)(i.interior,(0,y.T8)())),uInteriorSubstance:n.IO.create((0,T.gt)(i.interior,(0,y.T8)())),lodLevels:e.shaderData.lodLevels,centerBuffer:e.centerBuffer,groupBuffer:e.groupBuffer}}function M(e,t){p.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}e.create=t,e.createEmpty=r,e.Params={...p.ev.Params,sizeFactor:i.e.Numeric(1,{min:0,max:10,step:.1}),doubleSided:i.e.Boolean(!1,p.ev.CustomQualityParamInfo),ignoreLight:i.e.Boolean(!1,p.ev.ShadingCategory),celShaded:i.e.Boolean(!1,p.ev.ShadingCategory),xrayShaded:i.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],p.ev.ShadingCategory),transparentBackfaces:i.e.Select("off",i.e.arrayToOptions(["off","on","opaque"]),p.ev.ShadingCategory),solidInterior:i.e.Boolean(!0,p.ev.ShadingCategory),clipPrimitive:i.e.Boolean(!1,{...p.ev.ShadingCategory,description:"Clip whole sphere instead of cutting it."}),approximate:i.e.Boolean(!1,{...p.ev.ShadingCategory,description:"Faster rendering, but has artifacts."}),alphaThickness:i.e.Numeric(0,{min:0,max:20,step:1}
2831,{...p.ev.ShadingCategory,description:"If not zero, adjusts alpha for radius."}),bumpFrequency:i.e.Numeric(0,{min:0,max:10,step:.1},p.ev.ShadingCategory),bumpAmplitude:i.e.Numeric(1,{min:0,max:5,step:.1},p.ev.ShadingCategory),interior:(0,T.xA)(),lodLevels:i.e.ObjectList({minDistance:i.e.Numeric(0),maxDistance:i.e.Numeric(0),overlap:i.e.Numeric(0),stride:i.e.Numeric(0),scaleBias:i.e.Numeric(3,{min:.1,max:10,step:.1})},e=>`${e.stride}`,{...p.ev.CullingLodCategory,defaultValue:[]})},e.Utils={Params:e.Params,createEmpty:r,createValues:E,createValuesSimple:function(t,r,a,n,o){let s=p.ev.createSimple(a,n,o),l={...i.e.getDefaultValues(e.Params),...r};return E(t,s.transform,s.locationIterator,s.theme,l)},updateValues:function(e,t){p.ev.updateValues(e,t),n.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.dSolidInterior,t.solidInterior),n.IO.updateIfChanged(e.dClipPrimitive,t.clipPrimitive),n.IO.updateIfChanged(e.dApproximate,t.approximate),n.IO.updateIfChanged(e.uAlphaThickness,t.alphaThickness),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,T.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,T.gt)(t.interior,e.uInteriorSubstance.ref.value));let r=I(e.lodLevels.ref.value);if(!function(e,t){if(e.length!==t.length)return!1;for(let r=0,a=e.length;r<a;++r)if(e[r].maxDistance!==t[r].maxDistance||e[r].minDistance!==t[r].minDistance||e[r].overlap!==t[r].overlap||e[r].stride!==t[r].stride||e[r].scaleBias!==t[r].scaleBias)return!1;return!0}(t.lodLevels,r)){let r=e.uVertexCount.ref.value/6,a=w(t.lodLevels,t.sizeFactor),i=C(e.tPositionGroup.ref.value,e.centerBuffer.ref.value,e.groupBuffer.ref.value,r,a),o=i?O(t.lodLevels,t.sizeFactor,i,r):[];n.IO.update(e.tPositionGroup,e.tPositionGroup.ref.value),n.IO.update(e.lodLevels,o)}},updateBoundingSphere:function(e,t){let r=t.boundingSphere.radius?(0,d.Mu)(e)*e.uSizeFactor.ref.value:0,a=c.CP.expand((0,c.CP)(),t.boundingSphere,r),i=(0,u.Lo)(a,e.aTransform.ref.value,e.instanceCount.ref.value,0);c.CP.equals(i,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,i),c.CP.equals(a,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,a),n.IO.update(e.uInvariantBoundingSphere,y.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,a))),n.IO.update(e.padding,r)},createRenderableState:function(e){let t=p.ev.createRenderableState(e);return M(t,e),t},updateRenderableState:M,createPositionIterator:D}}(a||(a={}))},41723:function(e,t,r){r.d(t,{$l:function(){return c},fR:function(){return u},mQ:function(){return p},wD:function(){return l}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407),s=r(34813);function l(e,t,r,a){for(let n=t;n<r;++n)s.F.toArray(a,e,4*n),e[4*n+3]=255;return!0}function u(e,t,r){return e.fill(0,4*t,4*r),!0}function c(e,t,r){let s=(0,i.l3)(Math.max(1,e),4,Uint8Array,r&&r.tSubstance.ref.value.array);return r?(a.IO.update(r.tSubstance,s),a.IO.update(r.uSubstanceTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dSubstance,e>0),a.IO.updateIfChanged(r.dSubstanceType,t),r):{tSubstance:a.IO.create(s),uSubstanceTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dSubstance:a.IO.create(e>0),tSubstanceGrid:a.IO.create((0,o.DU)()),uSubstanceGridDim:a.IO.create(n.AO.create(1,1,1)),uSubstanceGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dSubstanceType:a.IO.create(t),uSubstanceStrength:a.IO.create(1)}}let d={array:new Uint8Array(4),width:1,height:1};function p(e){return e?(a.IO.update(e.tSubstance,d),a.IO.update(e.uSubstanceTexDim,n.Sg.create(1,1)),e):{tSubstance:a.IO.create(d),uSubstanceTexDim:a.IO.create(n.Sg.create(1,1)),dSubstance:a.IO.create(!1),tSubstanceGrid:a.IO.create((0,o.DU)()),uSubstanceGridDim:a.IO.create(n.AO.create(1,1,1)),uSubstanceGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dSubstanceType:a.IO.create("groupInstance"),uSubstanceStrength:a.IO.create(1)}}},47115:function(e,t,r){let a;r.d(t,{Uq:function(){return d},yW:function(){return c}});var n=r(14086);function i(e,t,r,a,n,i,s){for(let l=0;l<t;l++){for(let n=0;n<r;n++)a[n]=e[n*t+l];o(a,n,i,s,r);for(let a=0;a<r;a++)e[a*t+l]=n[a]}for(let l=0;l<r;l++){for(let r=0;r<t;r++)a[r]=e[l*t+r];o(a,n,i,s,t);for(let r=0;r<t;r++)e[l*t+r]=Math.sqrt(n[r])}}function o(e,t,r,a,n){r[0]=0,a[0]=Number.MIN_SAFE_INTEGER,a[1]=Number.MAX_SAFE_INTEGER;for(let t=1,i=0;t<n;t++){let n=(e[t]+t*t-(e[r[i]]+r[i]*r[i]))/(2*t-2*r[i]);for(;n<=a[i];)i--,n=(e[t]+t*t-(e[r[i]]+r[i]*r[i]))/(2*t-2*r[i]);r[++i]=t,a[i]=n,a[i+1]=Number.MAX_SAFE_INTEGER}for(let i=0,o=0;i<n;i++){for(;a[o+1]<i;)o++;t[i]=(i-r[o])*(i-r[o])+e[r[o]]}}var s=r(62927),l=r(11059);let u={};function c(e){let t=JSON.stringify(e);return void 0===u[t]&&(u[t]=new p(e)),u[t]}let d={fontFamily:n.e.Select("sans-serif",[["sans-serif","Sans Serif"],["monospace","Monospace"],["serif","Serif"],["cursive","Cursive"]]),fontQuality:n.e.Select(3,[[0,"lower"],[1,"low"],[2,"medium"],[3,"high"],[4,"higher"]]),fontStyle:n.e.Select("normal",[["normal","Normal"],["italic","Italic"],["oblique","Oblique"]]),fontVariant:n.e.Select("normal",[["normal","Normal"],["small-caps","Small Caps"]]),fontWeight:n.e.Select("normal",[["normal","Normal"],["bold","Bold"]])};class p{constructor(e={}){this.mapped={},this.scratchW=0,this.scratchH=0,this.currentX=0,this.currentY=0,this.cutoff=.5;let t={...n.e.getDefaultValues(d),...e};this.props=t;let r=64*(t.fontQuality+1);this.buffer=r/8,this.radius=r/3,this.lineHeight=Math.round(r+2*this.buffer+this.radius),this.maxWidth=Math.round(.75*this.lineHeight),this.texture=(0,s.l3)(350*this.lineHeight*this.maxWidth,1,Uint8Array),this.scratchContext=function(e,t,r){if(l.g)return(function(){if(!a)throw Error("When running in Node.js and wanting to use Canvas API, call mol-util/data-source's setCanvasModule function first and pass imported `canvas` module to it.");return a})().createCanvas(e,t).getContext("2d",r);{let a=document.createElement("canvas");return a.width=e,a.height=t,a.getContext("2d",r)}}(this.maxWidth,this.lineHeight,{willReadFrequently:!0}),this.scratchContext.font=`${t.fontStyle} ${t.fontVariant} ${t.fontWeight} ${r}px ${t.fontFamily}`,this.scratchContext.fillStyle="black",this.scratchContext.textBaseline="middle",this.scratchData=new Uint8Array(this.lineHeight*this.maxWidth),this.gridOuter=new Float64Array(this.lineHeight*this.maxWidth),this.gridInner=new Float64Array(this.lineHeight*this.maxWidth),this.f=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.d=new Float64Array(Math.max(this.lineHeight,this.maxWidth)),this.z=new Float64Array(Math.max(this.lineHeight,this.maxWidth)+1),this.v=new Int16Array(Math.max(this.lineHeight,this.maxWidth)),this.middle=Math.ceil(this.lineHeight/2),this.placeholder=this.get(String.fromCharCode(65533))}get(e){if(void 0===this.mapped[e]){this.draw(e);let{array:t,width:r,height:a}=this.texture,n=this.scratchData;if(this.currentX+this.scratchW>r&&(this.currentX=0,this.currentY+=this.scratchH),this.currentY+this.scratchH>a)return console.warn("canvas to small"),this.placeholder;this.mapped[e]={x:this.currentX,y:this.currentY,w:this.scratchW,h:this.scratchH,nw:this.scratchW/this.lineHeight,nh:this.scratchH/this.lineHeight};for(let e=0;e<this.scratchH;++e)for(let a=0;a<this.scratchW;++a)t[r*(this.currentY+e)+this.currentX+a]=n[e*this.scratchW+a];this.currentX+=this.scratchW}return this.mapped[e]}draw(e){let t=this.lineHeight,r=this.scratchContext,a=this.scratchData,n=r.measureText(e),o=Math.min(this.maxWidth,Math.ceil(n.width+2*this.buffer)),s=o*t;r.clearRect(0,0,o,t),r.fillText(e,this.buffer,this.middle);let l=r.getImageData(0,0,o,t);for(let e=0;e<s;e++){let t=l.data[4*e+3]/255;this.gridOuter[e]=1===t?0:0===t?Number.MAX_SAFE_INTEGER:Math.pow(Math.max(0,.5-t),2),this.gridInner[e]=1===t?Number.MAX_SAFE_INTEGER:0===t?0:Math.pow(Math.max(0,t-.5),2)}i(this.gridOuter,o,t,this.f,this.d,this.v,this.z),i(this.gridInner,o,t,this.f,this.d,this.v,this.z);for(let e=0;e<s;e++){let t=this.gridOuter[e]-this.gridInner[e];a[e]=Math.max(0,Math.min(255,Math.round(255-255*(t/this.radius+this.cutoff))))}this.scratchW=o,this.scratchH=t}}},23844:function(e,t,r){r.d(t,{w:function(){return a}});var a,n=r(14086),i=r(69062),o=r(21071),s=r(47115),l=r(97667);let u=new Uint16Array([0,1,2,1,3,2]),c=i.pS.add3,d=i.pS.add2,p=i.pS.add;(a||(a={})).create=function(e={},t=2048,r=1024,a){t*=2,r*=2;let f=i.pS.create(Float32Array,3,r,a?a.centerBuffer.ref.value:t),m=i.pS.create(Float32Array,2,r,a?a.mappingBuffer.ref.value:t),h=i.pS.create(Float32Array,1,r,a?a.depthBuffer.ref.value:t),g=i.pS.create(Uint32Array,3,r,a?a.indexBuffer.ref.value:t),b=i.pS.create(Float32Array,1,r,a?a.groupBuffer.ref.value:t),y=i.pS.create(Float32Array,2,r,a?a.tcoordBuffer.ref.value:t),x={...n.e.getDefaultValues(o.x.Param
2831s),...e},{attachment:S,background:T,backgroundMargin:C,tether:O,tetherLength:I,tetherBaseWidth:A}=x,w=(0,s.yW)(x),D=.4*C,E=w.buffer/w.lineHeight,M=(e,t,r,a,n)=>{c(f,e,t,r),p(h,a),p(b,n)};return{add:(e,t,r,a,n,i,o)=>{let s,p,h=0,b=e.length;for(let t=0;t<b;++t)h+=w.get(e[t]).nw-2*E;if(s=S.startsWith("top")?.8:S.startsWith("middle")?.4:0,p=S.endsWith("right")?h:S.endsWith("center")?h/2:0,O)switch(S){case"bottom-left":p-=I/2+D+.1,s-=I/2+D;break;case"bottom-center":s-=I+D;break;case"bottom-right":p+=I/2+D+.1,s-=I/2+D;break;case"middle-left":p-=I+D+.1;break;case"middle-center":break;case"middle-right":p+=I+D+.1;break;case"top-left":p-=I/2+D+.1,s+=I/2+D;break;case"top-center":s+=I+D;break;case"top-right":p+=I/2+D+.1,s+=I/2+D}let x=(-p-D-.1)*i,C=(h-p+D+.1)*i,P=.5-s-.5*E,k=(P+.4+D)*i,B=(P-.4-D)*i;if(T){d(m,x,k),d(m,x,B),d(m,C,k),d(m,C,B);let e=f.elementCount;for(let e=0;e<4;++e)d(y,10,10),M(t,r,a,n,o);c(g,e+u[0],e+u[1],e+u[2]),c(g,e+u[3],e+u[4],e+u[5])}if(O){let e,s,u,p,h,b,T,O;let w=I*i,D=A*i;switch(S){case"bottom-left":e=x-w/2,u=x+D/2,h=x,T=x,s=B-w/2,p=B,b=B+D/2,O=B;break;case"bottom-center":e=0,u=D/2,h=-D/2,T=0,s=B-w,p=B,b=B,O=B;break;case"bottom-right":e=C+w/2,u=C,h=C-D/2,T=C,s=B-w/2,p=B+D/2,b=B,O=B;break;case"middle-left":e=x-w,u=x,h=x,T=x,s=0,p=-D/2,b=D/2,O=0;break;case"middle-center":e=0,u=0,h=0,T=0,s=0,p=0,b=0,O=0;break;case"middle-right":e=C+w,u=C,h=C,T=C,s=0,p=D/2,b=-D/2,O=0;break;case"top-left":e=x-w/2,u=x+D/2,h=x,T=x,s=k+w/2,p=k,b=k-D/2,O=k;break;case"top-center":e=0,u=D/2,h=-D/2,T=0,s=k+w,p=k,b=k,O=k;break;case"top-right":e=C+w/2,u=C,h=C-D/2,T=C,s=k+w/2,p=k-D/2,b=k,O=k;break;default:(0,l.UT)(S)}d(m,e,s),d(m,u,p),d(m,h,b),d(m,T,O);let E=f.elementCount;for(let e=0;e<4;++e)d(y,10,10),M(t,r,a,n,o);c(g,E,E+1,E+3),c(g,E,E+3,E+2)}p+=E,s+=E;let _=0;for(let l=0;l<b;++l){let h=w.get(e[l]),b=(_-p)*i,x=(_+h.nw-p)*i,S=(h.nh-s)*i,T=-s*i;d(m,b,S),d(m,b,T),d(m,x,S),d(m,x,T);let C=w.texture.width,O=w.texture.height;d(y,h.x/C,h.y/O),d(y,h.x/C,(h.y+h.h)/O),d(y,(h.x+h.w)/C,h.y/O),d(y,(h.x+h.w)/C,(h.y+h.h)/O),_+=h.nw-2*E;let I=f.elementCount;for(let e=0;e<4;++e)M(t,r,a,n,o);c(g,I+u[0],I+u[1],I+u[2]),c(g,I+u[3],I+u[4],I+u[5])}},getText:()=>{let e=w.texture,t=i.pS.compact(f,!0),r=i.pS.compact(m,!0),n=i.pS.compact(h,!0),s=i.pS.compact(g,!0),l=i.pS.compact(b,!0),u=i.pS.compact(y,!0);return o.x.create(e,t,r,n,s,l,u,g.elementCount/2,a)}}}},21071:function(e,t,r){r.d(t,{x:function(){return a}});var a,n=r(14086),i=r(85764),o=r(72558),s=r(69587),l=r(17411),u=r(85688),c=r(7922),d=r(48930),p=r(62927),f=r(70371),m=r(87144),h=r(47115),g=r(23833),b=r(54185),y=r(5514),x=r(38788),S=r(69062),T=r(23789),C=r(22444),O=r(41723),I=r(4249);function A(e,t,r,a){let n=0,i=0,o=0;for(let a=0,s=4*r;a<s;++a){let r=2*a,s=Math.abs(e[r]);s>n&&(n=s);let l=Math.abs(e[r+1]);l>i&&(i=l);let u=Math.abs(t[a]);u>o&&(o=u)}return Math.max(o,a*Math.sqrt(n*n+i*i))}!function(e){function t(e,t,r,n,o,s,l,u,c){return c?(c.charCount=u,i.IO.update(c.fontTexture,e),i.IO.update(c.centerBuffer,t),i.IO.update(c.mappingBuffer,r),i.IO.update(c.depthBuffer,n),i.IO.update(c.indexBuffer,o),i.IO.update(c.groupBuffer,s),i.IO.update(c.tcoordBuffer,l),c):function(e,t,r,n,o,s,l,u){let c;let f=(0,d.CP)(),m=-1,h=-1,g={kind:"text",charCount:u,fontTexture:i.IO.create(e),centerBuffer:i.IO.create(t),mappingBuffer:i.IO.create(r),depthBuffer:i.IO.create(n),indexBuffer:i.IO.create(o),groupBuffer:i.IO.create(s),tcoordBuffer:i.IO.create(l),get boundingSphere(){let e=a(g);if(e!==m){let t=(0,p.Yx)(g.centerBuffer.ref.value,4*g.charCount,4);d.CP.copy(f,t),m=e}return f},get groupMapping(){return g.groupBuffer.ref.version!==h&&(c=(0,T.r8)(g.groupBuffer.ref.value,g.charCount,4),h=g.groupBuffer.ref.version),c},setBoundingSphere(e){d.CP.copy(f,e),m=a(g)},hasBoundingSphere:()=>m===a(g)};return g}(e,t,r,n,o,s,l,u)}function r(e){let r=e?e.fontTexture.ref.value:(0,p.l3)(0,1,Uint8Array),a=e?e.centerBuffer.ref.value:new Float32Array(0),n=e?e.mappingBuffer.ref.value:new Float32Array(0),i=e?e.depthBuffer.ref.value:new Float32Array(0);return t(r,a,n,i,e?e.indexBuffer.ref.value:new Uint32Array(0),e?e.groupBuffer.ref.value:new Float32Array(0),e?e.tcoordBuffer.ref.value:new Float32Array(0),0,e)}function a(e){return(0,S.nF)([e.charCount,e.fontTexture.ref.version,e.centerBuffer.ref.version,e.mappingBuffer.ref.version,e.depthBuffer.ref.version,e.indexBuffer.ref.version,e.groupBuffer.ref.version,e.tcoordBuffer.ref.version]
2831)}function w(e,t){let r=4*e.charCount,a=t.instanceCount.ref.value,n=(0,o.cH)(),i=n.position,s=e.centerBuffer.ref.value,l=t.aTransform.ref.value;return(0,o.OF)(r,a,4,(e,t)=>(t<0?m.AO.fromArray(i,s,3*e):m.AO.transformMat4Offset(i,s,l,0,3*e,16*t),n))}function D(e,t,r,a,n){let{instanceCount:o,groupCount:c}=r,h=w(e,t),S=(0,s.is)(r,h,a.color),T=(0,l.H4)(r,h,a.size),D=n.instanceGranularity?(0,u.eL)(o,"instance"):(0,u.eL)(o*c,"groupInstance"),E=(0,y.wS)(),M=(0,x.PG)(),P=(0,I.ur)(),k=(0,O.mQ)(),B=(0,C.cO)(),_={drawCount:6*e.charCount,vertexCount:4*e.charCount,groupCount:c,instanceCount:o},R=(0,l.Mu)(T)*n.sizeFactor,F=A(e.mappingBuffer.ref.value,e.depthBuffer.ref.value,e.charCount,R),L=d.CP.expand((0,d.CP)(),e.boundingSphere,F),z=(0,p.Lo)(L,t.aTransform.ref.value,o,0);return{dGeometryType:i.IO.create("text"),aPosition:e.centerBuffer,aMapping:e.mappingBuffer,aDepth:e.depthBuffer,aGroup:e.groupBuffer,elements:e.indexBuffer,boundingSphere:i.IO.create(z),invariantBoundingSphere:i.IO.create(L),uInvariantBoundingSphere:i.IO.create(m.T8.ofSphere(L)),...S,...T,...D,...E,...M,...P,...k,...B,...t,aTexCoord:e.tcoordBuffer,tFont:e.fontTexture,padding:i.IO.create(F),...b.ev.createValues(n,_),uSizeFactor:i.IO.create(n.sizeFactor),uBorderWidth:i.IO.create((0,g.uZ)(n.borderWidth,0,.5)),uBorderColor:i.IO.create(f.Il.toArrayNormalized(n.borderColor,m.AO.zero(),0)),uOffsetX:i.IO.create(n.offsetX),uOffsetY:i.IO.create(n.offsetY),uOffsetZ:i.IO.create(n.offsetZ),uBackgroun
2831dColor:i.IO.create(f.Il.toArrayNormalized(n.backgroundColor,m.AO.zero(),0)),uBackgroundOpacity:i.IO.create(n.backgroundOpacity)}}function E(e,t){b.ev.updateRenderableState(e,t),e.pickable=!1,e.opaque=!1,e.writeDepth=!0}e.create=t,e.createEmpty=r,e.Params={...b.ev.Params,...h.Uq,sizeFactor:n.e.Numeric(1,{min:0,max:10,step:.1}),borderWidth:n.e.Numeric(0,{min:0,max:.5,step:.01}),borderColor:n.e.Color(c.t.grey),offsetX:n.e.Numeric(0,{min:0,max:10,step:.1}),offsetY:n.e.Numeric(0,{min:0,max:10,step:.1}),offsetZ:n.e.Numeric(0,{min:0,max:10,step:.1}),background:n.e.Boolean(!1),backgroundMargin:n.e.Numeric(.2,{min:0,max:1,step:.01}),backgroundColor:n.e.Color(c.t.grey),backgroundOpacity:n.e.Numeric(1,{min:0,max:1,step:.01}),tether:n.e.Boolean(!1),tetherLength:n.e.Numeric(1,{min:0,max:5,step:.1}),tetherBaseWidth:n.e.Numeric(.3,{min:0,max:1,step:.01}),attachment:n.e.Select("middle-center",[["bottom-left","bottom-left"],["bottom-center","bottom-center"],["bottom-right","bottom-right"],["middle-left","middle-left"],["middle-center","middle-center"],["middle-right","middle-right"],["top-left","top-left"],["top-center","top-center"],["top-right","top-right"]])},e.Utils={Params:e.Params,createEmpty:r,createValues:D,createValuesSimple:function(t,r,a,i,o){let s=b.ev.createSimple(a,i,o),l={...n.e.getDefaultValues(e.Params),...r};return D(t,s.transform,s.locationIterator,s.theme,l)},updateValues:function(e,t){b.ev.updateValues(e,t),i.IO.updateIfChanged(e.uSizeFactor,t.sizeFactor),i.IO.updateIfChanged(e.uBorderWidth,t.borderWidth),f.Il.fromNormalizedArray(e.uBorderColor.ref.value,0)!==t.borderColor&&(f.Il.toArrayNormalized(t.borderColor,e.uBorderColor.ref.value,0),i.IO.update(e.uBorderColor,e.uBorderColor.ref.value)),i.IO.updateIfChanged(e.uOffsetX,t.offsetX),i.IO.updateIfChanged(e.uOffsetY,t.offsetY),i.IO.updateIfChanged(e.uOffsetZ,t.offsetZ),f.Il.fromNormalizedArray(e.uBackgroundColor.ref.value,0)!==t.backgroundColor&&(f.Il.toArrayNormalized(t.backgroundColor,e.uBackgroundColor.ref.value,0),i.IO.update(e.uBackgroundColor,e.uBackgroundColor.ref.value)),i.IO.updateIfChanged(e.uBackgroundOpacity,t.backgroundOpacity)},updateBoundingSphere:function(e,t){let r=(0,l.Mu)(e)*e.uSizeFactor.ref.value,a=A(e.aMapping.ref.value,e.aDepth.ref.value,t.charCount,r),n=d.CP.expand((0,d.CP)(),t.boundingSphere,a),o=(0,p.Lo)(n,e.aTransform.ref.value,e.instanceCount.ref.value,0);d.CP.equals(o,e.boundingSphere.ref.value)||i.IO.update(e.boundingSphere,o),d.CP.equals(n,e.invariantBoundingSphere.ref.value)||(i.IO.update(e.invariantBoundingSphere,n),i.IO.update(e.uInvariantBoundingSphere,m.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,n))),i.IO.update(e.padding,a)},createRenderableState:function(e){let t=b.ev.createRenderableState(e);return E(t,e),t},updateRenderableState:E,createPositionIterator:w}}(a||(a={}))},94133:function(e,t,r){r.d(t,{jW:function(){return E},Pl:function(){return k},xp:function(){return M},z6:function(){return B},qZ:function(){return P}});var a=r(85764),n=r(62113),i=r(91407),o=r(45705),s=r(57155),l=r(18406),u=r(10410);let c=` 2832precision highp float; 2833precision highp sampler2D; 2834 2835uniform sampler2D tColor; 2836uniform sampler2D tCount; 2837uniform vec2 uTexSize; 2838 2839void main(void) { 2840 vec2 coords = gl_FragCoord.xy / uTexSize; 2841 vec4 color = texture2D(tColor, coords);
2842 float count = texture2D(tCount, coords).r; 2843 2844 gl_FragColor = color / count; 2845} 2846`;var d=r(68971),p=r(87144),f=r(48930);let m=` 2847precision highp float; 2848 2849varying vec3 vPosition; 2850varying vec4 vColor; 2851 2852uniform float uCurrentSlice; 2853uniform float uCurrentX; 2854uniform float uCurrentY; 2855uniform float uResolution; 2856 2857const float p = 2.0; 2858 2859void main() { 2860 vec2 v = gl_FragCoord.xy - vec2(uCurrentX, uCurrentY) - 0.5; 2861 vec3 fragPos = vec3(v.x, v.y, uCurrentSlice); 2862 float dist = distance(fragPos, vPosition); 2863 if (dist > p) discard; 2864 2865 float f = p - dist; 2866 gl_FragColor = vColor * f; 2867 gl_FragData[1] = vec4(f); 2868} 2869`,h=` 2870precision highp float; 2871 2872#include common 2873#include read_from_texture 2874 2875uniform int uGroupCount; 2876 2877attribute float aSample; 2878#define SampleID int(aSample) 2879 2880attribute mat4 aTransform; 2881attribute float aInstance; 2882 2883uniform vec2 uGeoTexDim; 2884uniform sampler2D tPosition; 2885uniform sampler2D tGroup; 2886 2887uniform vec2 uColorTexDim; 2888uniform sampler2D tColor; 2889 2890varying vec3 vPosition; 2891varying vec4 vColor; 2892 2893uniform vec3 uBboxSize; 2894uniform vec3 uBboxMin; 2895uniform float uResolution; 2896 2897void main() { 2898 vec3 position = readFromTexture(tPosition, SampleID, uGeoTexDim).xyz; 2899 float group = unpackRGBToInt(readFromTexture(tGroup, SampleID, uGeoTexDim).rgb); 2900 2901 position = (aTransform * vec4(position, 1.0)).xyz; 2902 gl_PointSize = 7.0; 2903 vPosition = (position - uBboxMin) / uResolution; 2904 gl_Position = vec4(((position - uBboxMin) / uBboxSize) * 2.0 - 1.0, 1.0); 2905 2906 #if defined(dColorType_group) 2907 vColor = readFromTexture(tColor, group, uColorTexDim); 2908 #elif defined(dColorType_groupInstance) 2909 vColor = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim); 2910 #endif 2911} 2912`;var g=r(62131),b=r(48502);let y={drawCount:(0,l.R$)("number"),instanceCount:(0,l.R$)("number"),stride:(0,l.R$)("number"),uGroupCount:(0,l.wt)("i","material"),aTransform:(0,l.LQ)("float32",16,1),aInstance:(0,l.LQ)("float32",1,1),aSample:(0,l.LQ)("float32",1,0),uGeoTexDim:(0,l.wt)("v2","material"),tPosition:(0,l.U2)("texture","rgba","float","nearest","material"),tGroup:(0,l.U2)("texture","rgba","float","nearest","material"),uColorTexDim:(0,l.wt)("v2","material"),tColor:(0,l.U2)("texture","rgba","ubyte","nearest","material"),dColorType:(0,l.O0)("string",["group","groupInstance","vertex","vertexInstance"]),uCurrentSlice:(0,l.wt)("f"),uCurrentX:(0,l.wt)("f"),uCurrentY:(0,l.wt)("f"),uBboxMin:(0,l.wt)("v3","material"),uBboxSize:(0,l.wt)("v3","material"),uResolution:(0,l.wt)("f","material")},x="color-accumulate",S="color-count";function T(e,t){let r=new Float32Array(e);for(let a=0;a<e;++a)r[a]=a*t;return r}let C={...d.iz,tColor:(0,l.U2)("texture","rgba","float","nearest"),tCount:(0,l.U2)("texture","alpha","float","nearest"),uTexSize:(0,l.wt)("v2")},O="color-normalize";function I(e,t,r,l){let{drawBuffers:I}=r.extensions;if(!I)throw Error("need WebGL draw buffers");b.kM&&r.timer.mark("calcTextureMeshColorSmoothing");let{gl:A,resources:w,state:D,extensions:{colorBufferHalfFloat:E,textureHalfFloat:M}}=r,{resolution:P,stride:k}=t,B=e.colorType.endsWith("Instance"),_=f.XZ.fromSphere3D((0,f.XZ)(),B?e.boundingSphere:e.invariantBoundingSphere),R=1+P,F=f.XZ.expand((0,f.XZ)(),_,p.AO.create(R,R,R));B||(e.instanceCount=1,e.instanceBuffer=new Float32Array([0]),e.transformBuffer=new Float32Array(p.yb.id));let L=1/P,z=f.XZ.scale((0,f.XZ)(),F,L),N=f.XZ.size((0,p.AO)(),z);p.AO.ceil(N,N),p.AO.add(N,N,p.AO.create(2,2,2));let{min:G}=F,[U,V,j]=N,{texDimX:H,texDimY:q,texCols:X}=function(e){let t=Math.pow(2,Math.ceil(Math.log(Math.sqrt(e[0]*e[1]*e[2]))/Math.log(2))),r=0,a=e[1],n=1,i=e[2];return t<e[0]*e[2]?(i=Math.floor(t/e[0]),n=Math.ceil(e[2]/i),r=i*e[0],a*=n):r=e[0]*e[2],{texDimX:r,texDimY:a,texRows:n,texCols:i,powerOfTwoSize:a<t?t:2*t}}(N);r.namedFramebuffers[x]||(r.namedFramebuffers[x]=r.resources.framebuffer());let W=r.namedFramebuffers[x];(0,g.D0)(A)?(r.namedTextures[x]||(r.namedTextures[x]=E&&M?w.texture("image-float16","rgba","fp16","nearest"):w.texture("image-float32","rgba","float","nearest")),r.namedTextures[S]||(r.namedTextures[S]=w.texture("image-float32","alpha","float","nearest"))):(r.namedTextures[x]||(r.namedTextures[x]=w.texture("image-float32","rgba","float","nearest")),r.namedTextures[S]||(r.namedTextures[S]=w.texture("image-float32","rgba","float","nearest")));let K=r.namedTextures[x],Q=r.namedTextures[S];K.define(H,q),Q.define(H,q),K.attachFramebuffer(W,0),Q.attachFramebuffer(W,1);let Z=function(e,t,r,i,l){if(e.namedComputeRenderables[x]){let n=p.AO.sub((0,p.AO)(),r.max,r.min),o=e.namedComputeRenderables[x].values,s=Math.round(t.vertexCount/l);(s>o.drawCount.ref.value||l!==o.stride.ref.value)&&a.IO.update(o.aSample,T(s,l)),a.IO.updateIfChanged(o.drawCount,s),a.IO.updateIfChanged(o.instanceCount,t.instanceCount),a.IO.updateIfChanged(o.stride,l),a.IO.updateIfChanged(o.uGroupCount,t.groupCount),a.IO.update(o.aTransform,t.transformBuffer),a.IO.update(o.aInstance,t.instanceBuffer),a.IO.update(o.uGeoTexDim,p.Sg.set(o.uGeoTexDim.ref.value,t.positionTexture.getWidth(),t.positionTexture.getHeight())),a.IO.update(o.tPosition,t.positionTexture),a.IO.update(o.tGroup,t.groupTexture),a.IO.update(o.uColorTexDim,p.Sg.set(o.uColorTexDim.ref.value,t.colorData.getWidth(),t.colorData.getHeight())),a.IO.update(o.tColor,t.colorData),a.IO.updateIfChanged(o.dColorType,t.colorType),a.IO.updateIfChanged(o.uCurrentSlice,0),a.IO.updateIfChanged(o.uCurrentX,0),a.IO.updateIfChanged(o.uCurrentY,0),a.IO.update(o.uBboxMin,r.min),a.IO.update(o.uBboxSize,n),a.IO.updateIfChanged(o.uResolution,i),e.namedComputeRenderables[x].update()}else e.namedComputeRenderables[x]=function(e,t,r,i,l){let u=p.AO.sub((0,p.AO)(),r.max,r.min),c=Math.round(t.vertexCount/l),d={drawCount:a.IO.create(c),instanceCount:a.IO.create(t.instanceCount),stride:a.IO.create(l),uGroupCount:a.IO.create(t.groupCount),aTransform:a.IO.create(t.transformBuffer),aInstance:a.IO.create(t.instanceBuffer),aSample:a.IO.create(T(c,l)),uGeoTexDim:a.IO.create(p.Sg.create(t.positionTexture.getWidth(),t.positionTexture.getHeight())),tPosition:a.IO.create(t.positionTexture),tGroup:a.IO.create(t.groupTexture),uColorTexDim:a.IO.create(p.Sg.create(t.colorData.getWidth(),t.colorData.getHeight())),tColor:a.IO.create(t.colorData),dColorType:a.IO.create(t.colorType),uCurrentSlice:a.IO.create(0),uCurrentX:a.IO.create(0),uCurrentY:a.IO.create(0),uBboxMin:a.IO.create(r.min),uBboxSize:a.IO.create(u),uResolution:a.IO.create(i)},f={...y},g=(0,o.Lq)("accumulate",h,m,{drawBuffers:"required"}),b=(0,s.s8)(e,"points",g,f,d);return(0,n.T)(b,d)}(e,t,r,i,l);return e.namedComputeRenderables[x]}(r,e,F,P,k);D.currentRenderItemId=-1,W.bind(),I.drawBuffers([I.COLOR_ATTACHMENT0,I.COLOR_ATTACHMENT1]);let{uCurrentSlice:Y,uCurrentX:$,uCurrentY:J}=Z.values;b.kM&&r.timer.mark("ColorAccumulate.render"),function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}(r),D.viewport(0,0,H,q),D.scissor(0,0,H,q),A.clear(A.COLOR_BUFFER_BIT),a.IO.update(J,0);let ee=0,et=0,er=0;for(let e=0;e<j;++e)ee>=X&&(ee-=X,et+=V,er=0,a.IO.update(J,et)),a.IO.update($,er),a.IO.update(Y,e),D.viewport(er,et,U,V
2912),D.scissor(er,et,U,V),Z.render(),++ee,er+=U;K.detachFramebuffer(W,0),Q.detachFramebuffer(W,1),I.drawBuffers([A.COLOR_ATTACHMENT0,A.NONE]),b.kM&&r.timer.markEnd("ColorAccumulate.render"),b.kM&&r.timer.mark("ColorNormalize.render"),(!l||(0,i.q9)(l))&&(l=w.texture("image-uint8","rgba","ubyte","linear")),l.define(H,q);let ea=function(e,t,r){if(e.namedComputeRenderables[O]){let n=e.namedComputeRenderables[O].values;a.IO.update(n.tColor,t),a.IO.update(n.tCount,r),a.IO.update(n.uTexSize,p.Sg.set(n.uTexSize.ref.value,t.getWidth(),t.getHeight())),e.namedComputeRenderables[O].update()}else e.namedComputeRenderables[O]=function(e,t,r){let i={...d.GE,tColor:a.IO.create(t),tCount:a.IO.create(r),uTexSize:a.IO.create(p.Sg.create(t.getWidth(),t.getHeight()))},l={...C},f=(0,o.Lq)("normalize",u.C,c),m=(0,s.s8)(e,"triangles",f,l,i);return(0,n.T)(m,i)}(e,t,r);return e.namedComputeRenderables[O]}(r,K,Q);D.currentRenderItemId=-1,function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.enable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.clearColor(0,0,0,0),r.blendFunc(t.ONE,t.ONE),r.blendEquation(t.FUNC_ADD)}(r),l.attachFramebuffer(W,0),D.viewport(0,0,H,q),D.scissor(0,0,H,q),A.clear(A.COLOR_BUFFER_BIT),ea.render(),b.kM&&r.timer.markEnd("ColorNormalize.render");let en=p.T8.create(G[0],G[1],G[2],L);return b.kM&&r.timer.markEnd("calcTextureMeshColorSmoothing"),{texture:l,gridDim:N,gridTexDim:p.Sg.create(H,q),gridTransform:en,type:B?"volumeInstance":"volume"}}let A="color-smoothing-rgb",w="color-smoothing-rgba",D="color-smoothing-alpha";function E(e,t,r,n){var i;if(!("group"===(i=e.dColorType.ref.value)||"groupInstance"===i))return;t={...t,stride:3*t.stride},r.namedTextures[A]||(r.namedTextures[A]=r.resources.texture("image-uint8","rgb","ubyte","nearest"));let o=r.namedTextures[A];o.load(e.tColor.ref.value);let s=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:o,colorType:e.dColorType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dColorType,s.type),a.IO.update(e.tColorGrid,s.texture),a.IO.update(e.uColorTexDim,s.gridTexDim),a.IO.update(e.uColorGridDim,s.gridDim),a.IO.update(e.uColorGridTransform,s.gridTransform)}function M(e,t,r,n){if("groupInstance"!==e.dOverpaintType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[w]||(r.namedTextures[w]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let i=r.namedTextures[w];i.load(e.tOverpaint.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dOverpaintType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dOverpaintType,o.type),a.IO.update(e.tOverpaintGrid,o.texture),a.IO.update(e.uOverpaintTexDim,o.gridTexDim),a.IO.update(e.uOverpaintGridDim,o.gridDim),a.IO.update(e.uOverpaintGridTransform,o.gridTransform)}function P(e,t,r,n){if("groupInstance"!==e.dTransparencyType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[D]||(r.namedTextures[D]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let i=r.namedTextures[D];i.load(e.tTransparency.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dTransparencyType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dTransparencyType,o.type),a.IO.update(e.tTransparencyGri
2912d,o.texture),a.IO.update(e.uTransparencyTexDim,o.gridTexDim),a.IO.update(e.uTransparencyGridDim,o.gridDim),a.IO.update(e.uTransparencyGridTransform,o.gridTransform)}function k(e,t,r,n){if("groupInstance"!==e.dEmissiveType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[D]||(r.namedTextures[D]=r.resources.texture("image-uint8","alpha","ubyte","nearest"));let i=r.namedTextures[D];i.load(e.tEmissive.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dEmissiveType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dEmissiveType,o.type),a.IO.update(e.tEmissiveGrid,o.texture),a.IO.update(e.uEmissiveTexDim,o.gridTexDim),a.IO.update(e.uEmissiveGridDim,o.gridDim),a.IO.update(e.uEmissiveGridTransform,o.gridTransform)}function B(e,t,r,n){if("groupInstance"!==e.dSubstanceType.ref.value)return;t={...t,stride:3*t.stride},r.namedTextures[w]||(r.namedTextures[w]=r.resources.texture("image-uint8","rgba","ubyte","nearest"));let i=r.namedTextures[w];i.load(e.tSubstance.ref.value);let o=I({vertexCount:e.uVertexCount.ref.value,instanceCount:e.uInstanceCount.ref.value,groupCount:e.uGroupCount.ref.value,transformBuffer:e.aTransform.ref.value,instanceBuffer:e.aInstance.ref.value,positionTexture:e.tPosition.ref.value,groupTexture:e.tGroup.ref.value,colorData:i,colorType:e.dSubstanceType.ref.value,boundingSphere:e.boundingSphere.ref.value,invariantBoundingSphere:e.invariantBoundingSphere.ref.value},t,r,n);a.IO.updateIfChanged(e.dSubstanceType,o.type),a.IO.update(e.tSubstanceGrid,o.texture),a.IO.update(e.uSubstanceTexDim,o.gridTexDim),a.IO.update(e.uSubstanceGridDim,o.gridDim),a.IO.update(e.uSubstanceGridTransform,o.gridTransform)}},39446:function(e,t,r){r.d(t,{q:function(){return a}});var a,n=r(85764),i=r(48930),o=r(14086),s=r(72558),l=r(69587),u=r(85688),c=r(54185),d=r(5514),p=r(38788),f=r(62927),m=r(91407),h=r(87144),g=r(22444),b=r(71522),y=r(41723),x=r(4249),S=r(64690);!function(e){class t{constructor(){this.index=0,this.textures=[]}get(){return this.textures[this.index]}set(e,t,r){this.textures[this.index]=Object.assign(this.textures[this.index]||{},{vertex:e,group:t,normal:r}),this.index=(this.index+1)%2}destroy(){for(let e of this.textures)e.vertex.destroy(),e.group.destroy(),e.normal.destroy()}}function r(e,r,a,o,s,l,u){let c=a.getWidth(),d=a.getHeight();return u?(u.vertexCount=e,u.groupCount=r,n.IO.update(u.geoTextureDim,h.Sg.set(u.geoTextureDim.ref.value,c,d)),n.IO.update(u.vertexTexture,a),n.IO.update(u.groupTexture,o),n.IO.update(u.normalTexture,s),u.doubleBuffer.set(a,o,s),i.CP.copy(u.boundingSphere,l),u):{kind:"texture-mesh",vertexCount:e,groupCount:r,geoTextureDim:n.IO.create(h.Sg.create(c,d)),vertexTexture:n.IO.create(a),groupTexture:n.IO.create(o),normalTexture:n.IO.create(s),varyingGroup:n.IO.create(!1),doubleBuffer:new t,boundingSphere:i.CP.clone(l),meta:{}}}function a(e){let t=e?e.vertexTexture.ref.value:(0,m.DU)();return r(0,0,t,e?e.groupTexture.ref.value:(0,m.DU)(),e?e.normalTexture.ref.value:(0,m.DU)(),e?e.boundingSphere:(0,i.CP)(),e)}e.DoubleBuffer=t,e.create=r,e.createEmpty=a,e.Params={...c.ev.Params,doubleSided:o.e.Boolean(!1,c.ev.CustomQualityParamInfo),flipSided:o.e.Boolean(!1,c.ev.ShadingCategory),flatShaded:o.e.Boolean(!1,c.ev.ShadingCategory),ignoreLight:o.e.Boolean(!1,c.ev.ShadingCategory),celShaded:o.e.Boolean(!1,c.ev.ShadingCategory),xrayShaded:o.e.Select(!1,[[!1,"Off"],[!0,"On"],["inverted","Inverted"]],c.ev.ShadingCategory),transparentBackfaces:o.e.Select("off",o.e.arrayToOptions(["off","on","opaque"]),c.ev.ShadingCategory),bumpFrequency:o.e.Numeric(0,{min:0,max:10,step:.1},c.ev.ShadingCategory),bumpAmplitude:o.e.Numeric(1,{min:0,max:5,step:.1},c.ev.ShadingCategory),interior:(0,S.xA)()},e.Utils={Params:e.Params,createEmpty:a,createValues:C,createValuesSimple:function(t,r,a,n,i){let s=c.ev.createSimple(a,n,i),l={...o.e.getDefaultValues(e.Params),...r};return C(t,s.transform,s.locationIterator,s.theme,l)}
2912,updateValues:function(e,t){c.ev.updateValues(e,t),n.IO.updateIfChanged(e.uDoubleSided,t.doubleSided),n.IO.updateIfChanged(e.dFlatShaded,t.flatShaded),n.IO.updateIfChanged(e.dFlipSided,t.flipSided),n.IO.updateIfChanged(e.dIgnoreLight,t.ignoreLight),n.IO.updateIfChanged(e.dCelShaded,t.celShaded),n.IO.updateIfChanged(e.dXrayShaded,"inverted"===t.xrayShaded?"inverted":!0===t.xrayShaded?"on":"off"),n.IO.updateIfChanged(e.dTransparentBackfaces,t.transparentBackfaces),n.IO.updateIfChanged(e.uBumpFrequency,t.bumpFrequency),n.IO.updateIfChanged(e.uBumpAmplitude,t.bumpAmplitude),n.IO.update(e.uInteriorColor,(0,S.Qy)(t.interior,e.uInteriorColor.ref.value)),n.IO.update(e.uInteriorSubstance,(0,S.gt)(t.interior,e.uInteriorSubstance.ref.value))},updateBoundingSphere:function(e,t){let r=i.CP.clone(t.boundingSphere),a=(0,f.Lo)(r,e.aTransform.ref.value,e.instanceCount.ref.value,0);i.CP.equals(a,e.boundingSphere.ref.value)||n.IO.update(e.boundingSphere,a),i.CP.equals(r,e.invariantBoundingSphere.ref.value)||(n.IO.update(e.invariantBoundingSphere,r),n.IO.update(e.uInvariantBoundingSphere,h.T8.fromSphere(e.uInvariantBoundingSphere.ref.value,r)))},createRenderableState:function(e){let t=c.ev.createRenderableState(e);return O(t,e),t},updateRenderableState:O,createPositionIterator:function(e,t){let r;let a=e.meta.webgl;if(!a)return(0,s.OF)(1,1,1,()=>b.ad);a.namedFramebuffers[T]||(a.namedFramebuffers[T]=a.resources.framebuffer());let n=a.namedFramebuffers[T],[i,o]=e.geoTextureDim.ref.value,l=()=>{if(!r){let t=new Float32Array(i*o*4);n.bind(),e.vertexTexture.ref.value.attachFramebuffer(n,0),a.readPixels(0,0,i,o,t);let s=new Float32Array(i*o*4);n.bind(),e.normalTexture.ref.value.attachFramebuffer(n,0),a.readPixels(0,0,i,o,s),r={vertices:t,normals:s}}return r},u=e.vertexCount,c=t.instanceCount.ref.value,d=(0,s.cH)(),p=d.position,f=d.normal,m=t.aTransform.ref.value;return(0,s.OF)(u,c,1,(e,t)=>{let{vertices:r,normals:a}=l();return t<0?(h.AO.fromArray(p,r,4*e),h.AO.fromArray(f,a,4*e)):(h.AO.transformMat4Offset(p,r,m,0,4*e,16*t),h.AO.transformDirectionOffset(f,a,m,0,4*e,16*t)),d})}};let T="texture-mesh";function C(t,r,a,o,s){let{instanceCount:m,groupCount:b}=a,T=e.Utils.createPositionIterator(t,r),C=(0,l.is)(a,T,o.color),O=s.instanceGranularity?(0,u.eL)(m,"instance"):(0,u.eL)(m*b,"groupInstance"),I=(0,d.wS)(),A=(0,p.PG)(),w=(0,x.ur)(),D=(0,y.mQ)(),E=(0,g.cO)(),M={drawCount:t.vertexCount,vertexCount:t.vertexCount,groupCount:b,instanceCount:m},P=i.CP.clone(t.boundingSphere),k=(0,f.Lo)(P,r.aTransform.ref.value,m,0);return{dGeometryType:n.IO.create("textureMesh"),uGeoTexDim:t.geoTextureDim,tPosition:t.vertexTexture,tGroup:t.groupTexture,tNormal:t.normalTexture,dVaryingGroup:t.varyingGroup,boundingSphere:n.IO.create(k),invariantBoundingSphere:n.IO.create(P),uInvariantBoundingSphere:n.IO.create(h.T8.ofSphere(P)),...C,...O,...I,...A,...w,...D,...E,...r,...c.ev.createValues(s,M),uDoubleSided:n.IO.create(s.doubleSided),dFlatShaded:n.IO.create(s.flatShaded),dFlipSided:n.IO.create(s.flipSided),dIgnoreLight:n.IO.create(s.ignoreLight),dCelShaded:n.IO.create(s.celShaded),dXrayShaded:n.IO.create("inverted"===s.xrayShaded?"inverted":!0===s.xrayShaded?"on":"off"),dTransparentBackfaces:n.IO.create(s.transparentBackfaces),uBumpFrequency:n.IO.create(s.bumpFrequency),uBumpAmplitude:n.IO.create(s.bumpAmplitude),uInteriorColor:n.IO.create((0,S.Qy)(s.interior,(0,h.T8)())),uInteriorSubstance:n.IO.create((0,S.gt)(s.interior,(0,h.T8)())),meta:n.IO.create(t.meta)}}function O(e,t){c.ev.updateRenderableState(e,t),e.opaque=e.opaque&&!t.xrayShaded,e.writeDepth=e.opaque}}(a||(a={}))},41306:function(e,t,r){r.d(t,{tx:function(){return y},pH:function(){return g},Sj:function(){return x},WC:function(){return S}});var a=r(85764),n=r(87144),i=r(36111),o=r(67330),s=r(88575),l=r(43975),u=r(21604),c=r(30441);let d=l.A.transformMat4Offset,p=l.A.fromArray,f=s.X.add,m=(0,n.Tu)(),h=(0,n.yb)();function g(e,t,r,o,s,l){let u=function(e,t){for(let r=0;r<t;r++)if(n.Tu.fromMat4(m,n.yb.fromArray(h,e,16*r)),0>n.Tu.determinant(m))return!0;return!1}(e,t);if(l){a.IO.update(l.matrix,l.matrix.ref.value);let r=l.transform.ref.value.length>=16*t?l.transform.ref.value:new Float32Array(16*t);r.set(e),a.IO.update(l.transform,r),a.IO.updateIfChanged(l.uInstanceCount,t),a.IO.updateIfChanged(l.instanceCount,t);let n=l.aTransform.ref.value.length>=16*t?l.aTransform.ref.value:new Float32Array(16*t);a.IO.update(l.aTransform,n);let o=l.extraTransform.ref.value.length>=16*t?l.extraTransform.ref.value:new Float32Array(16*t);a.IO.update(l.extraTransform,x(o,t));let s=l.aInstance.ref.value.length>=t?l.aInstance.ref.value:new Float32Array(t);a.IO.update(l.aInstance,(0,i.d_)(s,t)),a.IO.update(l.hasReflection,u)}else l={aTransform:a.IO.create(new Float32Array(16*t)),matrix:a.IO.create(n.yb.identity()),transform:a.IO.create(new Float32Array(e)),extraTransform:a.IO.create(x(new Float32Array(16*t),t)),uInstanceCount:a.IO.create(t),instanceCount:a.IO.create(t),aInstance:a.IO.create((0,i.d_)(new Float32Array(t))),hasReflection:a.IO.create(u),instanceGrid:a.IO.create({cellSize:0,cellCount:0,cellOffsets:new Uint32Array,cellSpheres:new Float32Array,cellTransform:new Float32Array,cellInstance:new Float32Array,batchSize:0,batchCount:0,batchOffsets:new Uint32Array,batchSpheres:new Float32Array,batchCell:new Uint32Array})};return S(l,r,o,s),l}let b=new Float32Array(16);function y(e){return g(new Float32Array(b),1,void 0,0,0,e)}function x(e,t){for(let r=0;r<t;r++)e.set(b,16*r);return e}function S(e,t,r,m){let h=e.aTransform.ref.value,g=e.aInstance.ref.value,b=e.instanceCount.ref.value,y=e.matrix.ref.value,x=e.transform.ref.value,S=e.extraTransform.ref.value;for(let e=0;e<b;e++){let t=16*e;n.yb.mulOffset(h,S,x,t,t,t),n.yb.mulOffset(h,y,h,t,0,t),g[e]=e}if(t&&b>0){let n=function(e,t,r){let a=function(e,t){let{instanceCount:r,instance:a,transform:n,invariantBoundingSphere:i}=e,p=new Float32Array(r),m=new Float32Array(r),h=new Float32Array(r),g=o.h.ofBounds(0,r),b=s.X.setEmpty((0,s.X)()),{center:y,radius:x}=i,S=l.A.create(x,x,x),T=(0,l.A)();for(let e=0;e<r;++e)d(T,y,n,0,0,16*e),p[e]=T[0],m[e]=T[1],h[e]=T[2],f(b,T);s.X.expand(b,b,S);let C={box:b,sphere:c.C.fromBox3D((0,c.C)(),b)}
2912,{array:O,offset:I,count:A}=(0,u.t)({x:p,y:m,z:h,indices:g},C,l.A.create(t,t,t)).buckets,w=I.length,D=new Uint32Array(w+1),E=new Float32Array(4*w),M=new Float32Array(16*r),P=new Float32Array(r),k=(0,s.X)(),B=(0,c.C)(),_=0;for(let e=0;e<w;++e){let t=I[e],r=A[e];D[e]=t;let i=_;for(let e=t,i=t+r;e<i;++e){let t=O[e];P[_]=a[t];for(let e=0;e<16;++e)M[16*_+e]=n[16*t+e];_+=1}if(1===r)d(E,y,M,4*e,0,16*i),E[4*e+3]=x;else{s.X.setEmpty(k);let t=16*i;for(let e=0;e<r;++e)d(T,y,M,0,0,16*e+t),f(k,T);s.X.expand(k,k,S),c.C.fromBox3D(B,k),c.C.toArray(B,E,4*e)}}return D[w]=I[w-1]+A[w-1],{cellSize:t,cellCount:w,cellOffsets:D,cellSpheres:E,cellTransform:M,cellInstance:P}}(e,t),n=function(e,t){let{cellCount:r,cellSpheres:a}=e,n=new Float32Array(r),i=new Float32Array(r),d=new Float32Array(r),m=o.h.ofBounds(0,r),h=s.X.setEmpty((0,s.X)()),g=(0,l.A)(),b=0;for(let e=0;e<r;++e){let t=4*e;p(g,a,t),n[e]=g[0],i[e]=g[1],d[e]=g[2],f(h,g),b=Math.max(b,a[t+3])}let y=l.A.create(b,b,b);s.X.expand(h,h,y);let x={box:h,sphere:c.C.fromBox3D((0,c.C)(),h)},{array:S,offset:T,count:C}=(0,u.t)({x:n,y:i,z:d,indices:m},x,l.A.create(t,t,t)).buckets,O=T.length,I=new Uint32Array(O+1),A=new Float32Array(4*O),w=new Uint32Array(r),D=(0,s.X)(),E=(0,c.C)(),M=0;for(let e=0;e<O;++e){let t=T[e],r=C[e];I[e]=t;for(let e=t,a=t+r;e<a;++e)w[M]=S[e],M+=1;if(1===r){let r=S[t];A[4*e]=a[4*r],A[4*e+1]=a[4*r+1],A[4*e+2]=a[4*r+2],A[4*e+3]=a[4*r+3]}else{s.X.setEmpty(D),b=0;for(let e=t,n=t+r;e<n;++e){let t=S[e];g[0]=a[4*t],g[1]=a[4*t+1],g[2]=a[4*t+2],f(D,g),b=Math.max(b,a[4*t+3])}l.A.set(y,b,b,b),s.X.expand(D,D,y),c.C.fromBox3D(E,D),c.C.toArray(E,A,4*e)}}return I[O]=T[O-1]+C[O-1],{batchSize:t,batchCount:O,batchOffsets:I,batchSpheres:A,batchCell:w}}(a,r),m=new Uint32Array(a.cellOffsets.length),h=new Float32Array(a.cellSpheres.length),g=new Float32Array(a.cellInstance.length),b=0;for(let t=0,r=n.batchCell.length;t<r;++t){let r=n.batchCell[t],i=a.cellOffsets[r],o=a.cellOffsets[r+1]-i;m[t+1]=m[t]+o;for(let e=0;e<4;++e)h[4*t+e]=a.cellSpheres[4*r+e];for(let t=0;t<o;++t){let r=i+t,n=a.cellInstance[r];for(let t=0;t<16;++t)a.cellTransform[16*b+t]=e.transform[16*n+t];g[b]=n,b+=1}}return{cellSize:a.cellSize,cellCount:a.cellCount,cellOffsets:m,cellSpheres:h,cellTransform:a.cellTransform,cellInstance:g,batchSize:n.batchSize,batchCount:n.batchCount,batchOffsets:n.batchOffsets,batchSpheres:n.batchSpheres,batchCell:(0,i.d_)(n.batchCell)}}({instanceCount:b,instance:g,transform:h,invariantBoundingSphere:t},r,m);a.IO.update(e.instanceGrid,n),a.IO.update(e.aInstance,n.cellInstance),a.IO.update(e.aTransform,n.cellTransform)}else a.IO.update(e.aInstance,g),a.IO.update(e.aTransform,h)}n.yb.toArray(n.yb.identity(),b,0)},38788:function(e,t,r){r.d(t,{Bb:function(){return u},PG:function(){return f},ei:function(){return d},gj:function(){return c},iM:function(){return l},r_:function(){return s}});var a=r(68303),n=r(87144),i=r(62927),o=r(91407);function s(e,t,r,a){for(let n=t;n<r;++n)e[n]=255*a;return!0}function l(e,t){if(0===t||e.length<t)return 0;let r=0;for(let a=0;a<t;++a)r+=e[a];return r/(255*t)}function u(e,t){if(0===t||e.length<t)return 1;let r=255;for(let a=0;a<t;++a)e[a]>0&&e[a]<r&&(r=e[a]);return r/255}function c(e,t,r){e.fill(0,t,r)}function d(e,t,r){let s=(0,i.l3)(Math.max(1,e),1,Uint8Array,r&&r.tTransparency.ref.value.array);return r?(a.IO.update(r.tTransparency,s),a.IO.update(r.uTransparencyTexDim,n.Sg.create(s.width,s.height)),a.IO.updateIfChanged(r.dTransparency,e>0),a.IO.updateIfChanged(r.transparencyAverage,l(s.array,e)),a.IO.updateIfChanged(r.transparencyMin,u(s.array,e)),a.IO.updateIfChanged(r.dTransparencyType,t),r):{tTransparency:a.IO.create(s),uTransparencyTexDim:a.IO.create(n.Sg.create(s.width,s.height)),dTransparency:a.IO.create(e>0),transparencyAverage:a.IO.create(0),transparencyMin:a.IO.create(1),tTransparencyGrid:a.IO.create((0,o.DU)()),uTransparencyGridDim:a.IO.create(n.AO.create(1,1,1)),uTransparencyGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dTransparencyType:a.IO.create(t),uTransparencyStrength:a.IO.create(1)}}let p={array:new Uint8Array(1),width:1,height:1};function f(e){return e?(a.IO.update(e.tTransparency,p),a.IO.update(e.uTransparencyTexDim,n.Sg.create(1,1)),e):{tTransparency:a.IO.create(p),uTransparencyTexDim:a.IO.create(n.Sg.create(1,1)),dTransparency:a.IO.create(!1),transparencyAverage:a.IO.create(0),transparencyMin:a.IO.create(1),tTransparencyGri
2912d:a.IO.create((0,o.DU)()),uTransparencyGridDim:a.IO.create(n.AO.create(1,1,1)),uTransparencyGridTransform:a.IO.create(n.T8.create(0,0,0,1)),dTransparencyType:a.IO.create("groupInstance"),uTransparencyStrength:a.IO.create(1)}}},70759:function(e,t,r){let a,n,i;r.d(t,{Jo:function(){return b},pE:function(){return y},xu:function(){return g}});var o=r(87144),s=r(81725),l=r(90308),u=r(16207);let c=(0,o.AO)(),d=(0,o.AO)(),p=(0,o.AO)(),f=(0,o.AO)(),m=(0,l.y)(4,!0);function h(e){let t=(0,s.Gz)(12,e?36:24);for(let r=0;r<4;++r){let a=(r+1)%4;o.AO.set(c,m[3*r],m[3*r+1],-.5),o.AO.set(d,m[3*a],m[3*a+1],-.5),o.AO.set(p,m[3*a],m[3*a+1],.5),o.AO.set(f,m[3*r],m[3*r+1],.5),e?t.add(c,d,p):t.addQuad(c,d,p,f)}return o.AO.set(c,m[0],m[1],-.5),o.AO.set(d,m[3],m[4],-.5),o.AO.set(p,m[6],m[7],-.5),o.AO.set(f,m[9],m[10],-.5),e?t.add(p,d,c):t.addQuad(f,p,d,c),o.AO.set(c,m[0],m[1],.5),o.AO.set(d,m[3],m[4],.5),o.AO.set(p,m[6],m[7],.5),o.AO.set(f,m[9],m[10],.5),e?t.add(c,d,p):t.addQuad(c,d,p,f),t.getPrimitive()}function g(){return a||(a=h(!1)),a}function b(){return n||(n=h(!0)),n}function y(){return i||(i=(0,u.aK)([.5,.5,-.5,-.5,.5,-.5,-.5,-.5,-.5,.5,-.5,-.5,.5,.5,.5,-.5,.5,.5,-.5,-.5,.5,.5,-.5,.5],[0,4,1,5,2,6,3,7,0,1,1,2,2,3,3,0,4,5,5,6,6,7,7,4])),i}},16207:function(e,t,r){r.d(t,{aK:function(){return n},gW:function(){return s},iC:function(){return i}});var a=r(87144);function n(e,t){return{vertices:e,edges:t}}function i(e){return{vertices:new Float32Array(e.vertices),edges:new Uint32Array(e.edges)}}let o=a.AO.zero();function s(e,t){let{vertices:r}=e;for(let e=0,n=r.length;e<n;e+=3)a.AO.transformMat4(o,a.AO.fromArray(o,r,e),t),a.AO.toArray(o,r,e);return e}},90308:function(e,t,r){r.d(t,{y:function(){return a}});function a(e,t,r=-1){let a=new Float32Array(3*e),n=-1===r?e<=4?Math.sqrt(2)/2:.6:r,i=t?1:0;for(let t=0;t<e;++t){let r=(2*t+i)/e*Math.PI;a[3*t]=Math.cos(r)*n,a[3*t+1]=Math.sin(r)*n,a[3*t+2]=0}return a}},81725:function(e,t,r){r.d(t,{Gz:function(){return u},aJ:function(){return s},ik:function(){return p}});var a=r(87144);let n=(0,a.AO)(),i=(0,a.AO)(),o=(0,a.AO)();function s(e,t){let r=t.length,s=u(r/3);for(let l=0;l<r;l+=3)a.AO.fromArray(n,e,3*t[l]),a.AO.fromArray(i,e,3*t[l+1]),a.AO.fromArray(o,e,3*t[l+2]),s.add(n,i,o);return s.getPrimitive()}let l=(0,a.AO)();function u(e,t){void 0===t&&(t=3*e);let r=new Float32Array(3*t),n=new Float32Array(3*t),i=new Uint32Array(3*e),o=0,s=0;return{add:(e,t,u)=>{a.AO.toArray(e,r,o),a.AO.toArray(t,r,o+3),a.AO.toArray(u,r,o+6),a.AO.triangleNormal(l,e,t,u);for(let e=0;e<3;++e)a.AO.toArray(l,n,o+3*e),i[s+e]=o/3+e;o+=9,s+=3},addQuad:(e,t,u,c)=>{a.AO.toArray(e,r,o),a.AO.toArray(t,r,o+3),a.AO.toArray(u,r,o+6),a.AO.toArray(c,r,o+9),a.AO.triangleNormal(l,e,t,u);for(let e=0;e<4;++e)a.AO.toArray(l,n,o+3*e);let d=o/3;i[s]=d,i[s+1]=d+1,i[s+2]=d+2,i[s+3]=d+2,i[s+4]=d+3,i[s+5]=d,o+=12,s+=6},getPrimitive:()=>({vertices:r,normals:n,indices:i})}}let c=(0,a.AO)(),d=(0,a.Tu)();function p(e,t){let{vertices:r,normals:n}=e,i=a.Tu.directionTransform(d,t);for(let e=0,o=r.length;e<o;e+=3)a.AO.transformMat4(c,a.AO.fromArray(c,r,e),t),a.AO.toArray(c,r,e),a.AO.transformMat3(c,a.AO.fromArray(c,n,e),i),a.AO.toArray(c,n,e);return e}},32635:function(e,t,r){let a,n,i,o,s;r.d(t,{DE:function(){return T},If:function(){return O},Ut:function(){return C},Xm:function(){return x},bp:function(){return S},p1:function(){return y}});var l=r(87144),u=r(81725),c=r(90308);let d=(0,l.AO)(),p=(0,l.AO)(),f=(0,l.AO)(),m=(0,l.AO)(),h=(0,l.AO)(),g=(0,l.AO)(),b={height:1,topCap:!0,bottomCap:!0};function y(e,t){let r=e.length/3;if(r<3)throw Error("need at least 3 points to build a prism");let{height:a,topCap:n,bottomCap:i}={...b,...t},o=2*r,s=4*r,c=(n?1:0)+(i?1:0);3===r?(o+=c,s+=3*c):4===r?(o+=2*c,s+=4*c):(o+=c*r,s+=c*r*3);let y=(0,u.Gz)(o,s),x=.5*a;l.AO.set(d,0,0,-x),l.AO.set(p,0,0,x);for(let t=0;t<r;++t){let a=(t+1)%r;l.AO.set(f,e[3*t],e[3*t+1],-x),l.AO.set(m,e[3*a],e[3*a+1],-x),l.AO.set(h,e[3*a],e[3*a+1],x),l.AO.set(g,e[3*t],e[3*t+1],x),y.addQuad(f,m,h,g)}if(3===r)n&&(l.AO.set(f,e[0],e[1],-x),l.AO.set(m,e[3],e[4],-x),l.AO.set(h,e[6],e[7],-x),y.add(h,m,f)),i&&(l.AO.set(f,e[0],e[1],x),l.AO.set(m,e[3],e[4],x),l.AO.set(h,e[6],e[7],x),y.add(f,m,h));else if(4===r)n&&(l.AO.set(f,e[0],e[1],-x),l.AO.set(m,e[3],e[4],-x),l.AO.set(h,e[6],e[7],-x),l.AO.set(g,e[9],e[10],-x),y.addQuad(g,h,m,f)),i&&(l.AO.set(f,e[0],e[1],x),l.AO.set(m,e[3],e[4],x),l.AO.set(h,e[6],e[7],x),l.AO.set(g,e[9],e[10],x),y.addQuad(f,m,h,g));else for(let t=0;t<r;++t){let a=(t+1)%r;n&&(l.AO.set(f,e[3*t],e[3*t+1],-x),l.AO.set(m,e[3*a],e[3*a+1],-x),y.add(d,m,f)),i&&(l.AO.set(f,e[3*t],e[3*t+1],x),l.AO.set(m,e[3*a],e[3*a+1],x),y.add(f,m,p))}return y.getPrimitive()}function x(){return a||(a=y((0,c.y)(4,!1))),a}function S(){return n||(n=y((0,c.y)(5,!1))),n}
2912function T(){return i||(i=y((0,c.y)(6,!1))),i}function C(){return o||(o=y((0,c.y)(6,!0))),o}function O(){return s||(s=y((0,c.y)(7,!1))),s}},93964:function(e,t,r){let a;r.d(t,{a:function(){return m},U:function(){return f}});var n=r(87144),i=r(23789);let o={radius:1,detail:0};var s=r(81725),l=r(16207);let u=(1+Math.sqrt(5))/2,c=[-1,u,0,1,u,0,-1,-u,0,1,-u,0,0,-1,u,0,1,u,0,-1,-u,0,1,-u,u,0,-1,u,0,1,-u,0,-1,-u,0,1];(0,l.aK)(c,[0,11,5,11,0,5,1,5,0,1,1,7,0,7,7,10,0,10,10,11,5,9,4,11,2,10,6,7,1,8,3,9,4,9,3,4,2,4,2,3,2,6,3,6,6,8,3,8,8,9,4,5,2,11,6,10,7,8,1,9]);let{vertices:d,indices:p}=(a||(a=(0,s.aJ)(c,[0,11,5,0,5,1,0,1,7,0,7,10,0,10,11,1,5,9,5,11,4,11,10,2,10,7,6,7,1,8,3,9,4,3,4,2,3,2,6,3,6,8,3,8,9,4,9,5,2,4,11,6,2,10,8,6,7,9,8,1])),a);function f(e){return 10*Math.pow(Math.pow(2,e),2)+2}function m(e){return function(e,t,r){let{radius:a,detail:s}={...o,...r},l=function(){let e=[],t=[],r=new Map;function a(t){let a=`${t[0].toFixed(5)}|${t[1].toFixed(5)}|${t[2].toFixed(5)}`,n=r.get(a);return void 0===n&&(n=e.length/3,r.set(a,n),e.push(...t)),n}return{vertices:e,indices:t,add:(e,r,n)=>{t.push(a(e),a(r),a(n))}}}(),{vertices:u,indices:c}=l;(function(r){let a=(0,n.AO)(),i=(0,n.AO)(),o=(0,n.AO)();for(let s=0;s<t.length;s+=3)n.AO.fromArray(a,e,3*t[s+0]),n.AO.fromArray(i,e,3*t[s+1]),n.AO.fromArray(o,e,3*t[s+2]),function(e,t,r,a){let i=Math.pow(2,a),o=[];for(let a=0;a<=i;++a){o[a]=[];let s=(0,n.AO)();n.AO.lerp(s,e,r,a/i);let l=(0,n.AO)();n.AO.lerp(l,t,r,a/i);let u=i-a;for(let e=0;e<=u;++e)if(0===e&&a===i)o[a][e]=s;else{let t=(0,n.AO)();n.AO.lerp(t,s,l,e/u),o[a][e]=t}}for(let e=0;e<i;++e)for(let t=0;t<2*(i-e)-1;++t){let r=Math.floor(t/2);t%2==0?l.add(o[e][r+1],o[e+1][r],o[e][r]):l.add(o[e][r+1],o[e+1][r+1],o[e+1][r])}}(a,i,o,r)})(s),(0,i.zL)(u,a);let d=new Float32Array(u.length);return(0,i.wR)(u,c,d,u.length/3,c.length/3),{vertices:new Float32Array(u),normals:new Float32Array(d),indices:new Uint32Array(c)}}(d,p,{detail:e,radius:1})}},23789:function(e,t,r){r.d(t,{ST:function(){return o},f9:function(){return s},r8:function(){return h},wR:function(){return m},zL:function(){return l}});var a=r(87144),n=r(36111);let i=(0,a.AO)();function o(e,t,r,n){for(let o=0,s=3*n;o<s;o+=3)a.AO.fromArray(i,t,r+o),a.AO.transformMat4(i,i,e),a.AO.toArray(i,t,r+o)}function s(e,t,r,n){for(let o=0,s=3*n;o<s;o+=3)a.AO.fromArray(i,t,r+o),a.AO.transformMat3(i,i,e),a.AO.toArray(i,t,r+o)}function l(e,t){for(let r=0,n=e.length;r<n;r+=3)a.AO.fromArray(i,e,r),a.AO.normalize(i,i),a.AO.scale(i,i,t),a.AO.toArray(i,e,r)}let u=(0,a.AO)(),c=(0,a.AO)(),d=(0,a.AO)(),p=(0,a.AO)(),f=(0,a.AO)();function m(e,t,r,n,i){for(let n=0,o=3*i;n<o;n+=3){let i=3*t[n],o=3*t[n+1],s=3*t[n+2];a.AO.fromArray(u,e,i),a.AO.fromArray(c,e,o),a.AO.fromArray(d,e,s),a.AO.sub(p,d,c),a.AO.sub(f,u,c),a.AO.cross(p,p,f),r[i]+=p[0],r[i+1]+=p[1],r[i+2]+=p[2],r[o]+=p[0],r[o+1]+=p[1],r[o+2]+=p[2],r[s]+=p[0],r[s+1]+=p[1],r[s+2]+=p[2]}return function(e,t){for(let r=0,a=3*t;r<a;r+=3){let t=e[r],a=e[r+1],n=e[r+2],i=1/Math.sqrt(t*t+a*a+n*n);e[r]=t*i,e[r+1]=a*i,e[r+2]=n*i}return e}(r,n)}function h(e,t,r=1){let a=new Int32Array((0,n.uH)(e)+2),i=new Int32Array(t),o=new Int32Array(t);for(let a=0,n=t*r;a<n;a+=r)++o[e[a]];let s=0;for(let e=0;e<t;e++)a[e]=s,s+=o[e];a[t]=s;let l=new Int32Array(s);for(let n=0,o=t*r;n<o;n+=r){let t=e[n];l[a[t]+i[t]]=n,++i[t]}return{indices:l,offsets:a}}},72558:function(e,t,r){r.d(t,{OF:function(){return i},TO:function(){return l},cH:function(){return s},dJ:function(){return o}});var a=r(87144),n=r(71522);function i(e,t,r,a,i=!1,o=()=>!1,s){if(e%r!=0)throw Error("incompatible groupCount and stride");let l={location:n.ad,location2:n.ad,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1},u=l.groupIndex<e,c=!1,d=0,p=0,f=!1,m=!!s;return{get hasNext(){return u},get isNextNewInstance(){return c},groupCount:e,instanceCount:t,count:e*t,stride:r,nonInstanceable:i,hasLocation2:m,move:()=>(u&&(l.groupIndex=d,l.instanceIndex=p,l.index=p*e+d,l.location=a(d,f?-1:p),m&&(l.location2=s(d,f?-1:p)),l.isSecondary=o(d,f?-1:p),(d+=r)===e?(++p,c=!0,p<t&&(d=0)):c=!1,u=d<e),l),reset(){l.location=n.ad,l.location2=n.ad,l.index=0,l.groupIndex=0,l.instanceIndex=0,l.isSecondary=!1,u=l.groupIndex<e,c=!1,d=0,p=0,f=!1},skipInstance(){u&&l.instanceIndex===p&&(++p,d=0,u=p<t)},voidInstances(){f=!0}}}let o={get hasNext(){return!1},get isNextNewInstance(){return!1},groupCount:0,instanceCount:0,count:0,stride:0,nonInstanceable:!1,hasLocation2:!1,move:()=>({location:n.ad,location2:n.ad,index:0,groupIndex:0,instanceIndex:0,isSecondary:!1}),reset(){},skipInstance(){},voidInstances(){}};function s(e,t){return{kind:"position-location",position:e?a.AO.clone(e):(0,a.AO)(),normal:t?a.AO.clone(t):(0,a.AO)()}}function l(e){return!!e&&"position-location"===e.kind}},91564:function(e,t,r){r.d(t,{X:function(){return p},Y:function(){return d}});var a=r(54854),n=r(95068),i=r(85764),o=r(69062),s=r(4376),l=r(13070);function u(e){return{...e,bottomLeft:(0,i.ce)(e.bottomLeft,[0,0,0]),topRight:(0,i.ce)(e.topRight,e.scalarField.space.dimensions)}}function c(e){return{dX:e.topRight[0]-e.bottomLeft[0],dY:e.topRight[1]-e.bottomLeft[1],dZ:e.topRight[2]-e.bottomLeft[2]}}function d(e,t){return a.iQ.create("Marching Cubes Mesh",async r=>{let a=u(e),{dX:n,dY:i,dZ:l}=c(a),d=function(e,t){let r=Math.min(65536,4*e),a=o.pS.create(Float32Array,3,e,t&&t.vertexBuffer.ref.value),n=o.pS.create(Float32Array,3,e,t&&t.normalBuffer.ref.value),i=o.pS.create(Float32Array,1,e,t&&t.groupBuffer.ref.value),l=o.pS.
2912create(Uint32Array,3,r,t&&t.indexBuffer.ref.value),u=0,c=0;return{addVertex:(e,t,r)=>(++u,o.pS.add3(a,e,t,r)),addNormal:(e,t,r)=>{o.pS.add3(n,e,t,r)},addGroup:e=>{o.pS.add(i,e)},addTriangle:(e,t,r,a)=>{let n=e[t],i=e[r],s=e[a];n>=0&&i>=0&&s>=0&&(++c,o.pS.add3(l,n,i,s))},get:()=>{let e=o.pS.compact(a,!0),r=o.pS.compact(n,!0),d=o.pS.compact(l,!0),p=o.pS.compact(i,!0);return s.K.create(e,d,r,p,u,c,t)}}}(Math.min(262144,Math.max(n*i*l/32,1024)),t);return await new f(r,d,a).run(),d.get()})}function p(e,t){return a.iQ.create("Marching Cubes Lines",async r=>{let a=u(e),{dX:s,dY:d,dZ:p}=c(a),m=function(e,t){let r=o.pS.create(Float32Array,3,e),a=o.pS.create(Float32Array,1,e),s=o.pS.create(Float32Array,2,e),u=0;return{addVertex:(e,t,a)=>o.pS.add3(r,e,t,a),addNormal:()=>i.ZT,addGroup:e=>{o.pS.add(a,e)},addTriangle:(e,t,r,a,i)=>{let l=e[t],c=e[r],d=e[a];l>=0&&c>=0&&d>=0&&(n.bR[t][r]&i&&(++u,o.pS.add2(s,e[t],e[r])),n.bR[r][a]&i&&(++u,o.pS.add2(s,e[r],e[a])),n.bR[t][a]&i&&(++u,o.pS.add2(s,e[t],e[a])))},get:()=>{let e=o.pS.compact(r,!0),n=o.pS.compact(s,!0),i=o.pS.compact(a,!0),c=l.R.create(u,u/10,t);for(let t=0;t<u;++t){let r=n[2*t],a=n[2*t+1];c.add(e[3*r],e[3*r+1],e[3*r+2],e[3*a],e[3*a+1],e[3*a+2],i[r])}return c.getLines()}}}(Math.min(262144,Math.max(s*d*p/32,1024)),t);return await new f(r,m,a).run(),m.get()})}class f{async doSlices(){let e=0;this.edgeFilter=15;for(let t=this.minZ;t<this.maxZ;t++,this.edgeFilter&=-5)this.slice(t),e+=this.sliceSize,this.ctx.shouldUpdate&&await this.ctx.update({message:"Computing surface...",current:e,max:this.size})}slice(e){this.edgeFilter|=2;for(let t=this.minY;t<this.maxY;t++,this.edgeFilter&=-3){this.edgeFilter|=1;for(let r=this.minX;r<this.maxX;r++,this.edgeFilter&=-2)this.state.processCell(r,t,e,this.edgeFilter)}this.state.clearEdgeVertexIndexSlice(e)}async run(){await this.doSlices()}constructor(e,t,r){this.ctx=e,this.minX=0,this.minY=0,this.minZ=0,this.maxX=0,this.maxY=0,this.maxZ=0,this.state=new m(t,r),this.minX=r.bottomLeft[0],this.minY=r.bottomLeft[1],this.minZ=r.bottomLeft[2],this.maxX=r.topRight[0]-1,this.maxY=r.topRight[1]-1,this.maxZ=r.topRight[2]-1,this.size=(this.maxX-this.minX)*(this.maxY-this.minY)*(this.maxZ-this.minZ),this.sliceSize=(this.maxX-this.minX)*(this.maxY-this.minY)}}class m{get3dOffsetFromEdgeInfo(e){return this.nX*((this.k+e.k)%2*this.nY+this.j+e.j)+this.i+e.i}clearEdgeVertexIndexSlice(e){let t=e%2==0?0:3*this.nX*this.nY,r=e%2==0?3*this.nX*this.nY:this.verticesOnEdges.length;this.verticesOnEdges.fill(0,t,r)}interpolate(e){let t=n.bY[e],r=3*this.get3dOffsetFromEdgeInfo(t)+t.e,a=this.verticesOnEdges[r];if(a>0)return a-1;let i=this.scalarField,o=this.scalarFieldGet,s=n.dP[e],l=s.a,u=s.b,c=l.i+this.i,d=l.j+this.j,p=l.k+this.k,f=u.i+this.i,m=u.j+this.j,h=u.k+this.k,g=o(i,c,d,p),b=o(i,f,m,h),y=(this.isoLevel-g)/(g-b);if(this.idField){let e=this.idFieldGet(this.idField,c,d,p),t=this.idFieldGet(this.idField,f,m,h),r=y<.5?e:t;if(-1===r&&(r=y<.5?t:e),-2===r)return -1;this.builder.addGroup(r)}else this.builder.addGroup(0);let x=this.builder.addVertex(c+y*(c-f),d+y*(d-m),p+y*(p-h));this.verticesOnEdges[r]=x+1;let S=o(i,Math.max(0,c-1),d,p)-o(i,Math.min(this.nX-1,c+1),d,p),T=o(i,c,Math.max(0,d-1),p)-o(i,c,Math.min(this.nY-1,d+1),p),C=o(i,c,d,Math.max(0,p-1))-o(i,c,d,Math.min(this.nZ-1,p+1)),O=o(i,Math.max(0,f-1),m,h)-o(i,Math.min(this.nX-1,f+1),m,h),I=o(i,f,Math.max(0,m-1),h)-o(i,f,Math.min(this.nY-1,m+1),h),A=o(i,f,m,Math.max(0,h-1))-o(i,f,m,Math.min(this.nZ-1,h+1)),w=S+y*(S-O),D=T+y*(T-I),E=C+y*(C-A);return this.isoLevel>=0?this.builder.addNormal(w,D,E):this.builder.addNormal(-w,-D,-E),x}constructor(e,t){this.builder=e,this.vertList=[0,0,0,0,0,0,0,0,0,0,0,0],this.i=0,this.j=0,this.k=0;let r=t.scalarField.space.dimensions;this.nX=r[0],this.nY=r[1],this.nZ=r[2],this.isoLevel=t.isoLevel,this.scalarFieldGet=t.scalarField.space.get,this.scalarField=t.scalarField.data,t.idField&&(this.idField=t.idField.data,this.idFieldGet=t.idField.space.get),this.verticesOnEdges=new Int32Array(3*this.nX*this.nY*2)}get(e,t,r){return this.scalarFieldGet(this.scalarField,e,t,r)}processCell(e,t,r,a){let i=0;if(this.get(e,t,r)<this.isoLevel&&(i|=1),this.get(e+1,t,r)<this.isoLevel&&(i|=2),this.get(e+1,t+1,r)<this.isoLevel&&(i|=4),this.get(e,t+1,r)<this.isoLevel&&(i|=8),this.get(e,t,r+1)<this.isoLevel&&(i|=16),this.get(e+1,t,r+1)<this.isoLevel&&(i|=32),this.get(e+1,t+1,r+1)<this.isoLevel&&(i|=64),this.get(e,t+1,r+1)<this.isoLevel&&(i|=128),0===i||255===i)return;this.i=e,this.j=t,this.k=r;let o=n.$6[i];(1&o)>0&&(this.vertList[0]=this.interpolate(0)),(2&o)>0&&(this.vertList[1]=this.interpolate(1)),(4&o)>0&&(this.vertList[2]=this.interpolate(2)),(8&o)>0&&(this.vertList[3]=this.interpolate(3)),(16&o)>0&&(this.vertList[4]=this.interpolate(4)),(32&o)>0&&(this.vertList[5]=this.interpolate(5)),(64&o)>0&&(this.vertList[6]=this.interpolate(6)),(128&o)>0&&(this.vertList[7]=this.interpolate(7)),(256&o)>0&&(this.vertList[8]=this.interpolate(8)),(512&o)>0&&(this.vertList[9]=this.interpolate(9)),(1024&o)>
29120&&(this.vertList[10]=this.interpolate(10)),(2048&o)>0&&(this.vertList[11]=this.interpolate(11));let s=n._w[i];for(let e=0;e<s.length;e+=3){let t=s[e],r=s[e+1],n=s[e+2];this.isoLevel>=0?this.builder.addTriangle(this.vertList,t,r,n,a):this.builder.addTriangle(this.vertList,n,r,t,a)}}}},95068:function(e,t,r){r.d(t,{$6:function(){return o},_w:function(){return s},bR:function(){return l},bY:function(){return i},dP:function(){return n}});let a=[{i:0,j:0,k:0},{i:1,j:0,k:0},{i:1,j:1,k:0},{i:0,j:1,k:0},{i:0,j:0,k:1},{i:1,j:0,k:1},{i:1,j:1,k:1},{i:0,j:1,k:1}],n=[{a:a[0],b:a[1]},{a:a[1],b:a[2]},{a:a[2],b:a[3]},{a:a[3],b:a[0]},{a:a[4],b:a[5]},{a:a[5],b:a[6]},{a:a[6],b:a[7]},{a:a[7],b:a[4]},{a:a[0],b:a[4]},{a:a[1],b:a[5]},{a:a[2],b:a[6]},{a:a[3],b:a[7]}],i=[{i:0,j:0,k:0,e:0},{i:1,j:0,k:0,e:1},{i:0,j:1,k:0,e:0},{i:0,j:0,k:0,e:1},{i:0,j:0,k:1,e:0},{i:1,j:0,k:1,e:1},{i:0,j:1,k:1,e:0},{i:0,j:0,k:1,e:1},{i:0,j:0,k:0,e:2},{i:1,j:0,k:0,e:2},{i:1,j:1,k:0,e:2},{i:0,j:1,k:0,e:2}],o=[0,265,515,778,1030,1295,1541,1804,2060,2309,2575,2822,3082,3331,3593,3840,400,153,915,666,1430,1183,1941,1692,2460,2197,2975,2710,3482,3219,3993,3728,560,825,51,314,1590,1855,1077,1340,2620,2869,2111,2358,3642,3891,3129,3376,928,681,419,170,1958,1711,1445,1196,2988,2725,2479,2214,4010,3747,3497,3232,1120,1385,1635,1898,102,367,613,876,3180,3429,3695,3942,2154,2403,2665,2912,1520,1273,2035,1786,502,255,1013,764,3580,3317,4095,3830,2554,2291,3065,2800,1616,1881,1107,1370,598,863,85,348,3676,3925,3167,3414,2650,2899,2137,2384,1984,1737,1475,1226,966,719,453,204,4044,3781,3535,3270,3018,2755,2505,2240,2240,2505,2755,3018,3270,3535,3781,4044,204,453,719,966,1226,1475,1737,1984,2384,2137,2899,2650,3414,3167,3925,3676,348,85,863,598,1370,1107,1881,1616,2800,3065,2291,2554,3830,4095,3317,3580,764,1013,255,502,1786,2035,1273,1520,2912,2665,2403,2154,3942,3695,3429,3180,876,613,367,102,1898,1635,1385,1120,3232,3497,3747,4010,2214,2479,2725,2988,1196,1445,1711,1958,170,419,681,928,3376,3129,3891,3642,2358,2111,2869,2620,1340,1077,1855,1590,314,51,825,560,3728,3993,3219,3482,2710,2975,2197,2460,1692,1941,1183,1430,666,915,153,400,3840,3593,3331,3082,2822,2575,2309,2060,1804,1541,1295,1030,778,515,265,0],s=[[],[0,8,3],[0,1,9],[1,8,3,9,8,1],[1,2,10],[0,8,3,1,2,10],[9,2,10,0,2,9],[2,8,3,2,10,8,10,9,8],[3,11,2],[0,11,2,8,11,0],[1,9,0,2,3,11],[1,11,2,1,9,11,9,8,11],[3,10,1,11,10,3],[0,10,1,0,8,10,8,11,10],[3,9,0,3,11,9,11,10,9],[9,8,10,10,8,11],[4,7,8],[4,3,0,7,3,4],[0,1,9,8,4,7],[4,1,9,4,7,1,7,3,1],[1,2,10,8,4,7],[3,4,7,3,0,4,1,2,10],[9,2,10,9,0,2,8,4,7],[2,10,9,2,9,7,2,7,3,7,9,4],[8,4,7,3,11,2],[11,4,7,11,2,4,2,0,4],[9,0,1,8,4,7,2,3,11],[4,7,11,9,4,11,9,11,2,9,2,1],[3,10,1,3,11,10,7,8,4],[1,11,10,1,4,11,1,0,4,7,11,4],[4,7,8,9,0,11,9,11,10,11,0,3],[4,7,11,4,11,9,9,11,10],[9,5,4],[9,5,4,0,8,3],[0,5,4,1,5,0],[8,5,4,8,3,5,3,1,5],[1,2,10,9,5,4],[3,0,8,1,2,10,4,9,5],[5,2,10,5,4,2,4,0,2],[2,10,5,3,2,5,3,5,4,3,4,8],[9,5,4,2,3,11],[0,11,2,0,8,11,4,9,5],[0,5,4,0,1,5,2,3,11],[2,1,5,2,5,8,2,8,11,4,8,5],[10,3,11,10,1,3,9,5,4],[4,9,5,0,8,1,8,10,1,8,11,10],[5,4,0,5,0,11,5,11,10,11,0,3],[5,4,8,5,8,10,10,8,11],[9,7,8,5,7,9],[9,3,0,9,5,3,5,7,3],[0,7,8,0,1,7,1,5,7],[1,5,3,3,5,7],[9,7,8,9,5,7,10,1,2],[10,1,2,9,5,0,5,3,0,5,7,3],[8,0,2,8,2,5,8,5,7,10,5,2],[2,10,5,2,5,3,3,5,7],[7,9,5,7,8,9,3,11,2],[9,5,7,9,7,2,9,2,0,2,7,11],[2,3,11,0,1,8,1,7,8,1,5,7],[11,2,1,11,1,7,7,1,5],[9,5,8,8,5,7,10,1,3,10,3,11],[5,7,0,5,0,9,7,11,0,1,0,10,11,10,0],[11,10,0,11,0,3,10,5,0,8,0,7,5,7,0],[11,10,5,7,11,5],[10,6,5],[0,8,3,5,10,6],[9,0,1,5,10,6],[1,8,3,1,9,8,5,10,6],[1,6,5,2,6,1],[1,6,5,1,2,6,3,0,8],[9,6,5,9,0,6,0,2,6],[5,9,8,5,8,2,5,2,6,3,2,8],[2,3,11,10,6,5],[11,0,8,11,2,0,10,6,5],[0,1,9,2,3,11,5,10,6],[5,10,6,1,9,2,9,11,2,9,8,11],[6,3,11,6,5,3,5,1,3],[0,8,11,0,11,5,0,5,1,5,11,6],[3,11,6,0,3,6,0,6,5,0,5,9],[6,5,9,6,9,11,11,9,8],[5,10,6,4,7,8],[4,3,0,4,7,3,6,5,10],[1,9,0,5,10,6,8,4,7],[10,6,5,1,9,7,1,7,3,7,9,4],[6,1,2,6,5,1,4,7,8],[1,2,5,5,2,6,3,0,4,3,4,7],[8,4,7,9,0,5,0,6,5,0,2,6],[7,3,9,7,9,4,3,2,9,5,9,6,2,6,9],[3,11,2,7,8,4,10,6,5],[5,10,6,4,7,2,4,2,0,2,7,11],[0,1,9,4,7,8,2,3,11,5,10,6],[9,2,1,9,11,2,9,4,11,7,11,4,5,10,6],[8,4,7,3,11,5,3,5,1,5,11,6],[5,1,11,5,11,6,1,0,11,7,11,4,0,4,11],[0,5,9,0,6,5,0,3,6,11,6,3,8,4,7],[6,5,9,6,9,11,4,7,9,7,11,9],[10,4,9,6,4,10],[4,10,6,4,9,10,0,8,3],[10,0,1,10,6,0,6,4,0],[8,3,1,8,1,6,8,6,4,6,1,10],[1,4,9,1,2,4,2,6,4],[3,0,8,1,2,9,2,4,9,2,6,4],[0,2,4,4,2,6],[8,3,2,8,2,4,4,2,6],[10,4,9,10,6,4,11,2,3],[0,8,2,2,8,11,4,9,10,4,10,6],[3,11,2,0,1,6,0,6,4,6,1,10],[6,4,1,6,1,10,4,8,1,2,1,11,8,11,1],[9,6,4,9,3,6,9,1,3,11,6,3],[8,11,1,8,1,0,11,6,1,9,1,4,6,4,1],[3,11,6,3,6,0,0,6,4],[6,4,8,11,6,8],[7,10,6,7,8,10,8,9,10],[0,7,3,0,10,7,0,9,10,6,7,10],[10,6,7,1,10,7,1,7,8,1,8,0],[10,6,7,10,7,1,1,7,3],[1,2,6,1,6,8,1,8,9,8,6,7],[2,6,9,2,9,1,6,7,9,0,9,3,7,3,9],[7,8,0,7,0,6,6,0,2],[7,3,2,6,7,2],[2,3,11,10,6,8,10,8,9,8,6,7],[2,0,7,2,7,11,0,9,7,6,7,10,9,10,7],[1,8,0,1,7,8,1,10,7,6,7,10,2,3,11],[11,2,1,11,1,7,10,6,1,6,7,1],[8,9,6,8,6,7,9,1,6,11,6,3,1,3,6],[0,9,1,11,6,7],[7,8,0,7,0,6,3,11,0,11,6,0],[7,11,6],[7,6,11],[3,0,8,11,7,6],[0,1,9,11,7,6],[8,1,9,8,3,1,11,7,6],[10,1,2,6,11,7],[1,2,10,3,0,8,6,11,7],[2,9,0,2,10,9,6,11,7],[6,11,7,2,10,3,10,8,3,10,9,8],[7,2,3,6,2,7],[7,0,8,7,6,0,6,2,0],[2,7,6,2,3,7,0,1,9],[1,6,2,1,8,6,1,9,8,8,7,6],[10,7,6,10,1,7,1,3,7],[10,7,6,1,7,10,1,8,7,1,0,8],[0,3,7,0,7,10,0,10,9,6,10,7],[7,6,10,7,10,8,8,10,9],[6,8,4,11,8,6],[3,6,11,3,0,6,0,4,6],[8,6,11,8,4,6,9,0,1],[9,4,6,9,6,3,9,3,1,11,3,6],[6,8,4,6,11,8,2,10,1],[1,2,10,3,0,11,0,6,11,0,4,6],[4,11,8,4,6,11,0,2,9,2,10,9],[10,9,3,10,3,2,9,4,3,11,3,6,4,6,3],[8,2,3,8,4,2,4,6,2],[0,4,2,4,6,2],[1,9,0,2,3,4,2,4,6,4,3,8],[1,9,4,1,4,2,2,4,6],[8,1,3,8,6,1,8,4,6,6,10,1],[10,1,0,10,0,6,6,0,4],[4,6,3,4,3,8,6,10,3,0,3,9,10,9,3],[10,9,4,6,10,4],[4,9,5,7,6,11],[0,8,3,4,9,5,11,7,6],[5,0,1,5,4,0,7,6,11],[11,7,6,8,3,4,3,5,4,3,1,5],[9,5,4,10,1,2,7,6,11],[6,11,7,1,2,10,0,8,3,4,9,5],[7,6,11,5,4,10,4,2,10,4,0,2],[3,4,8,3,5,4,3,2,5,10,5,2,11,7,6],[7,2,3,7,6,2,5,4,9],[9,5,4,0,8,6,0,6,2,6,8,7],[3,6,2,3,7,6,1,5,0,5,4,0],[6,2,8,6,8,7,2,1,8,4,8,5,1,5,8],[9,5,4,10,1,6,1,7,6,1,3,7],[1,6,10,1,7,
29126,1,0,7,8,7,0,9,5,4],[4,0,10,4,10,5,0,3,10,6,10,7,3,7,10],[7,6,10,7,10,8,5,4,10,4,8,10],[6,9,5,6,11,9,11,8,9],[3,6,11,0,6,3,0,5,6,0,9,5],[0,11,8,0,5,11,0,1,5,5,6,11],[6,11,3,6,3,5,5,3,1],[1,2,10,9,5,11,9,11,8,11,5,6],[0,11,3,0,6,11,0,9,6,5,6,9,1,2,10],[11,8,5,11,5,6,8,0,5,10,5,2,0,2,5],[6,11,3,6,3,5,2,10,3,10,5,3],[5,8,9,5,2,8,5,6,2,3,8,2],[9,5,6,9,6,0,0,6,2],[1,5,8,1,8,0,5,6,8,3,8,2,6,2,8],[1,5,6,2,1,6],[1,3,6,1,6,10,3,8,6,5,6,9,8,9,6],[10,1,0,10,0,6,9,5,0,5,6,0],[0,3,8,5,6,10],[10,5,6],[11,5,10,7,5,11],[11,5,10,11,7,5,8,3,0],[5,11,7,5,10,11,1,9,0],[10,7,5,10,11,7,9,8,1,8,3,1],[11,1,2,11,7,1,7,5,1],[0,8,3,1,2,7,1,7,5,7,2,11],[9,7,5,9,2,7,9,0,2,2,11,7],[7,5,2,7,2,11,5,9,2,3,2,8,9,8,2],[2,5,10,2,3,5,3,7,5],[8,2,0,8,5,2,8,7,5,10,2,5],[9,0,1,5,10,3,5,3,7,3,10,2],[9,8,2,9,2,1,8,7,2,10,2,5,7,5,2],[1,3,5,3,7,5],[0,8,7,0,7,1,1,7,5],[9,0,3,9,3,5,5,3,7],[9,8,7,5,9,7],[5,8,4,5,10,8,10,11,8],[5,0,4,5,11,0,5,10,11,11,3,0],[0,1,9,8,4,10,8,10,11,10,4,5],[10,11,4,10,4,5,11,3,4,9,4,1,3,1,4],[2,5,1,2,8,5,2,11,8,4,5,8],[0,4,11,0,11,3,4,5,11,2,11,1,5,1,11],[0,2,5,0,5,9,2,11,5,4,5,8,11,8,5],[9,4,5,2,11,3],[2,5,10,3,5,2,3,4,5,3,8,4],[5,10,2,5,2,4,4,2,0],[3,10,2,3,5,10,3,8,5,4,5,8,0,1,9],[5,10,2,5,2,4,1,9,2,9,4,2],[8,4,5,8,5,3,3,5,1],[0,4,5,1,0,5],[8,4,5,8,5,3,9,0,5,0,3,5],[9,4,5],[4,11,7,4,9,11,9,10,11],[0,8,3,4,9,7,9,11,7,9,10,11],[1,10,11,1,11,4,1,4,0,7,4,11],[3,1,4,3,4,8,1,10,4,7,4,11,10,11,4],[4,11,7,9,11,4,9,2,11,9,1,2],[9,7,4,9,11,7,9,1,11,2,11,1,0,8,3],[11,7,4,11,4,2,2,4,0],[11,7,4,11,4,2,8,3,4,3,2,4],[2,9,10,2,7,9,2,3,7,7,4,9],[9,10,7,9,7,4,10,2,7,8,7,0,2,0,7],[3,7,10,3,10,2,7,4,10,1,10,0,4,0,10],[1,10,2,8,7,4],[4,9,1,4,1,7,7,1,3],[4,9,1,4,1,7,0,8,1,8,7,1],[4,0,3,7,4,3],[4,8,7],[9,10,8,10,11,8],[3,0,9,3,9,11,11,9,10],[0,1,10,0,10,8,8,10,11],[3,1,10,11,3,10],[1,2,11,1,11,9,9,11,8],[3,0,9,3,9,11,1,2,9,2,11,9],[0,2,11,8,0,11],[3,2,11],[2,3,8,2,8,10,10,8,9],[9,10,2,0,9,2],[2,3,8,2,8,10,0,1,8,1,10,8],[1,10,2],[1,3,8,9,1,8],[0,9,1],[0,3,8],[]],l=[[0,4,4,4,2,0,0,0,2,2,0,0],[4,0,4,4,0,8,0,0,0,8,8,0],[4,4,0,4,0,0,8,0,0,0,8,8],[4,4,4,0,0,0,0,1,1,0,0,1],[2,0,0,0,0,8,8,8,2,2,0,0],[0,8,0,0,8,0,8,8,0,8,8,0],[0,0,8,0,8,8,0,8,0,0,8,8],[0,0,0,1,8,8,8,0,1,0,0,1],[2,0,0,1,2,0,0,1,0,2,0,1],[2,8,0,0,2,8,0,0,2,0,8,0],[0,8,8,0,0,8,8,0,0,8,0,8],[0,0,8,1,0,0,8,1,1,0,8,0]]},6579:function(e,t,r){let a,n;r.d(t,{a:function(){return z}});var i=r(62113),o=r(57155),s=r(18406),l=r(45705),u=r(85764),c=r(87144),d=r(68971),p=r(81421),f=r(10410);let m=` 2913precision highp float; 2914precision highp int; 2915 2916#if __VERSION__ == 100 2917 precision highp sampler2D; 2918 uniform sampler2D tTexture; 2919#else 2920 precision highp isampler2D; 2921 uniform isampler2D tTexture; 2922#endif 2923 2924void main(void) { 2925 #if __VERSION__ == 100 2926 gl_FragColor = texture2D(tTexture, vec2(0.5)); 2927 #else 2928 gl_FragColor = ivec4(texture2D(tTexture, vec2(0.5)).r); 2929 #endif 2930} 2931`;var h=r(62131),g=r(48502);let b={...d.iz,tTexture:(0,s.U2)("texture","rgba","float","nearest")},y="histopyramid-sum",x=new Uint8Array(4),S=new Int32Array(4);var T=r(58463);let C=` 2932precision highp float; 2933precision highp int; 2934precision highp sampler2D; 2935 2936uniform sampler2D tInputLevel; 2937 2938// previous level used to evaluate the new level 2939#if __VERSION__ == 100 2940 uniform sampler2D tPreviousLevel; 2941#else 2942 precision highp isampler2D; 2943 uniform isampler2D tPreviousLevel; 2944#endif 2945 2946// inverted size of the previous level texture. 2947uniform float uSize; 2948uniform float uTexSize; 2949uniform bool uFirst; 2950 2951#include common 2952 2953void main(void) { 2954 float k = 0.5 * uSize; 2955 vec2 position = floor((gl_FragCoord.xy / uTexSize) / uSize) * uSize; 2956 2957 #if __VERSION__ == 100 2958 float a, b, c, d; 2959 2960 if (uFirst) { 2961 a = texture2D(tInputLevel, position).r * 255.0; 2962 b = texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0; 2963 c = texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0; 2964 d = texture2D(tInputLevel, position + vec2(k, k)).r * 255.0; 2965 } else { 2966 a = unpackRGBToInt(texture2D(tPreviousLevel, position).rgb); 2967 b = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, 0.0
2967)).rgb); 2968 c = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(0.0, k)).rgb); 2969 d = unpackRGBToInt(texture2D(tPreviousLevel, position + vec2(k, k)).rgb); 2970 } 2971 gl_FragColor = vec4(packIntToRGB(a + b + c + d), 1.0); 2972 #else 2973 int a, b, c, d; 2974 2975 if (uFirst) { 2976 a = int(texture2D(tInputLevel, position).r * 255.0); 2977 b = int(texture2D(tInputLevel, position + vec2(k, 0.0)).r * 255.0); 2978 c = int(texture2D(tInputLevel, position + vec2(0.0, k)).r * 255.0); 2979 d = int(texture2D(tInputLevel, position + vec2(k, k)).r * 255.0); 2980 } else { 2981 a = texture2D(tPreviousLevel, position).r; 2982 b = texture2D(tPreviousLevel, position + vec2(k, 0.0)).r; 2983 c = texture2D(tPreviousLevel, position + vec2(0.0, k)).r; 2984 d = texture2D(tPreviousLevel, position + vec2(k, k)).r; 2985 } 2986 gl_FragColor = ivec4(a + b + c + d); 2987 #endif 2988} 2989`,O={...d.iz,tInputLevel:(0,s.U2)("texture","rgba","float","nearest"),tPreviousLevel:(0,s.U2)("texture","rgba","float","nearest"),uSize:(0,s.wt)("f"),uTexSize:(0,s.wt)("f"),uFirst:(0,s.wt)("b")},I="histogram-pyramid";function A(e,t){let r=`${I}-${e}`;return t.namedFramebuffers[r]||(t.namedFramebuffers[r]=t.resources.framebuffer()),t.namedFramebuffers[r]}function w(e,t,r,a,n,i){let o=`${I}-${e}`;return t.namedTextures[o]||(t.namedTextures[o]=t.resources.texture(r,a,n,i)),t.namedTextures[o]}var D=r(95068),E=r(62927);let M=` 2990precision highp float; 2991precision highp int; 2992precision highp sampler2D; 2993 2994#if __VERSION__ == 100 2995 uniform sampler2D tActiveVoxelsPyramid; 2996#else 2997 precision highp isampler2D; 2998 uniform isampler2D tActiveVoxelsPyramid; 2999#endif 3000 3001uniform sampler2D tActiveVoxelsBase; 3002uniform sampler2D tVolumeData; 3003uniform sampler2D tTriIndices; 3004 3005uniform float uIsoValue; 3006uniform float uLevels; 3007uniform float uSize; 3008uniform float uCount; 3009uniform bool uInvert; 3010 3011uniform vec3 uGridDim; 3012uniform vec3 uGridTexDim; 3013uniform vec3 uGridDataDim; 3014uniform mat4 uGridTransform; 3015uniform mat3 uGridTransformAdjoint; 3016 3017// scale to volume data coord 3018uniform vec2 uScale; 3019 3020#include common 3021 3022// cube corners (excluding origin) 3023const vec3 c1 = vec3(1., 0., 0.); 3024const vec3 c2 = vec3(1., 1., 0.); 3025const vec3 c3 = vec3(0., 1., 0.); 3026const vec3 c4 = vec3(0., 0., 1.); 3027const vec3 c5 = vec3(1., 0., 1.); 3028const vec3 c6 = vec3(1., 1., 1.); 3029const vec3 c7 = vec3(0., 1., 1.); 3030 3031vec3 index3dFrom2d(vec2 coord) { 3032 vec2 gridTexPos = coord * uGridTexDim.xy; 3033 vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy); 3034 vec2 posXY = gridTexPos - columnRow * uGridDim.xy; 3035 float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x; 3036 return vec3(posXY, posZ); 3037} 3038 3039vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) { 3040 float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice 3041 float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x); 3042 float row = intDiv(zSlice * gridDim.x, texDim.x); 3043 vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale); 3044 return texture2D(tex, coord + 0.5 / (texDim / uScale)); 3045} 3046 3047vec4 voxel(vec3 pos) { 3048 pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0)); 3049 return texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy); 3050} 3051 3052float voxelValuePadded(vec3 pos) { 3053 pos = min(max(vec3(0.0), pos), uGridDim - vec3(vec2(2.0), 1.0)); // remove xy padding 3054 vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy); 3055 #ifdef dValueChannel_red 3056 return v.r; 3057 #else 3058 return v.a; 3059 #endif 3060} 3061 3062int idot2(const in ivec2 a, const in ivec2 b) { 3063 return a.x * b.x + a.y * b.y; 3064} 3065 3066int idot4(const in ivec4 a, const in ivec4 b) { 3067 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w; 3068} 3069 3070#if __VERSION__ == 100 3071 int pyramidVoxel(vec2 pos) { 3072 return int(unpackRGBToInt(texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).rgb)); 3073 } 3074#else 3075 int pyramidVoxel(vec2 pos) { 3076 return texture2D(tActiveVoxelsPyramid, pos / (vec2(1.0, 0.5) * uSize)).r; 3077 } 3078#endif 3079 3080vec4 baseVoxel(vec2 pos) { 3081 return texture2D(tActiveVoxelsBase, pos / uSize); 3082} 3083 3084vec4 getGroup(const in vec3 p) { 3085 // note that we swap x and z because the texture is flipped around y 3086 #if defined(dAxisOrder_012) 3087 float group = p.z + p.y * uGridDataDim.z + p.x * uGridDataDim.z * uGridDataDim.y; // 210 3088 #elif defined(dAxisOrder_021) 3089 float group = p.y + p.z * uGridDataDim.y + p.x * uGridDataDim.y * uGridDataDim.z; // 120 3090 #elif defined(dAxisOrder_102) 3091 float group = p.z + p.x * uGridDataDim.z + p.y * uGridDataDim.z * uGridDataDim.x; // 201 3092 #elif defined(dAxisOrder_120) 3093 float group = p.x + p.z * uGridDataDim.x + p.y * uGridDataDim.x * uGridDataDim.z; // 021 3094 #elif defined(dAxisOrder_201) 3095 float group = p.y + p.x * uGridDataDim.y + p.z * uGridDataDim.y * uGridDataDim.x; // 102 3096 #elif defined(dAxisOrder_210) 3097 float group = p.x + p.y * uGridDataDim.x + p.z * uGridDataDim.x * uGridDataDim.y; // 012 3098 #endif 3099 return vec4(group > 16777215.5 ? vec3(1.0) : packIntToRGB(group), 1.0); 3100} 3101 3102void main(void) { 3103 // get 1D index 3104 int vI = int(gl_FragCoord.x) + int(gl_FragCoord.y) * int(uSize); 3105 3106 // ignore 1D indices outside of the grid 3107 if(vI >= int(uCount)) discard; 3108 3109 ivec2 offset = ivec2(int(uSize) - 2, 0); 3110 3111 int start = 0; 3112 ivec4 starts = ivec4(0); 3113 ivec4 ends = ivec4(0); 3114 int diff = 2; 3115 ivec4 m = ivec4(0); 3116 ivec2 position = ivec2(0); 3117 ivec4 vI4 = ivec4(vI); 3118 3119 ivec2 relativePosition = ivec2(0); 3120 int end = 0; 3121 ivec2 pos1 = ivec2(0); 3122 ivec2 pos2 = ivec2(0); 3123 ivec2 pos3 = ivec2(0); 3124 ivec2 pos4 = ivec2(0); 3125 ivec3 vI3 = ivec3(vI); 3126 ivec3 mask = ivec3(0);
3127 3128 // traverse the different levels of the pyramid 3129 for(int i = 1; i < 14; i++) { 3130 if(float(i) >= uLevels) break; 3131 3132 offset.x -= diff; 3133 diff *= 2; 3134 relativePosition = position + offset; 3135 3136 end = start + pyramidVoxel(vec2(relativePosition)); 3137 pos1 = ivec2(relativePosition); 3138 starts.x = start; 3139 ends.x = end; 3140 pos2 = ivec2(relativePosition + ivec2(1, 0)); 3141 starts.y = ends.x; 3142 ends.y = ends.x + pyramidVoxel(vec2(pos2)); 3143 pos3 = relativePosition + ivec2(0, 1); 3144 starts.z = ends.y; 3145 ends.z = ends.y + pyramidVoxel(vec2(pos3)); 3146 pos4 = relativePosition + ivec2(1, 1); 3147 starts.w = ends.z; 3148 mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb)); 3149 m = ivec4(mask, 1 - int(any(bvec3(mask)))); 3150 3151 relativePosition = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4; 3152 start = idot4(m, starts); 3153 position = 2 * (relativePosition - offset); 3154 } 3155 3156 end = start + int(baseVoxel(vec2(position)).r * 255.0); 3157 pos1 = position; 3158 starts.x = start; 3159 ends.x = end; 3160 pos2 = position + ivec2(1, 0); 3161 starts.y = ends.x; 3162 ends.y = ends.x + int(baseVoxel(vec2(pos2)).r * 255.0); 3163 pos3 = position + ivec2(0, 1); 3164 starts.z = ends.y; 3165 ends.z = ends.y + int(baseVoxel(vec2(pos3)).r * 255.0); 3166 pos4 = position + ivec2(1, 1); 3167 starts.w = ends.z; 3168 mask = ivec3(greaterThanEqual(vI3, starts.rgb)) * ivec3(lessThan(vI3, ends.rgb)); 3169 m = ivec4(mask, 1 - int(any(bvec3(mask)))); 3170 position = m.x * pos1 + m.y * pos2 + m.z * pos3 + m.w * pos4; 3171 3172 vec2 coord2d = (vec2(position) / uSize) / uScale; 3173 vec3 coord3d = floor(index3dFrom2d(coord2d) + 0.5); 3174 3175 float edgeIndex = floor(baseVoxel(vec2(position)).a * 255.0 + 0.5); 3176 3177 // current vertex for the up to 15 MC cases 3178 int currentVertex = vI - idot4(m, starts); 3179 3180 // ensure winding-order is the same for negative and positive iso-levels 3181 if (uInvert) { 3182 int v = imod(currentVertex + 1, 3); 3183 if (v == 1) currentVertex += 2; 3184 else if (v == 0) currentVertex -= 2; 3185 } 3186 3187 // get index into triIndices table 3188 int mcIndex = 16 * int(edgeIndex) + currentVertex; 3189 vec4 mcData = texture2D(tTriIndices, vec2(imod(mcIndex, 64), mcIndex / 64) / 64.); 3190 3191 // bit mask to avoid conditionals (see comment below) for getting MC case corner 3192 vec4 m0 = vec4(floor(mcData.a * 255.0 + 0.5)); 3193 3194 // get edge value masks 3195 vec4 m1 = vec4(equal(m0, vec4(0., 1., 2., 3.))); 3196 vec4 m2 = vec4(equal(m0, vec4(4., 5., 6., 7.))); 3197 vec4 m3 = vec4(equal(m0, vec4(8., 9., 10., 11.))); 3198 3199 // apply bit masks 3200 vec3 b0 = coord3d + 3201 m1.y * c1 + 3202 m1.z * c2 + 3203 m1.w * c3 + 3204 m2.x * c4 + 3205 m2.y * c5 + 3206 m2.z * c6 + 3207 m2.w * c7 + 3208 m3.y * c1 + 3209 m3.z * c2 + 3210 m3.w * c3; 3211 vec3 b1 = coord3d + 3212 m1.x * c1 + 3213 m1.y * c2 + 3214 m1.z * c3 + 3215 m2.x * c5 + 3216 m2.y * c6 + 3217 m2.z * c7 + 3218 m2.w * c4 + 3219 m3.x * c4 + 3220 m3.y * c5 + 3221 m3.z * c6 + 3222 m3.w * c7; 3223 3224 // the conditionals that are avoided by above bitmasks 3225 // vec3 b0 = coord3d; 3226 // vec3 b1 = coord3d; 3227 // if (mcIndex == 0.0) { 3228 // b1 += c1; 3229 // } else if (mcIndex == 1.0) { 3230 // b0 += c1; b1 += c2; 3231 // } else if (mcIndex == 2.0) { 3232 // b0 += c2; b1 += c3; 3233 // } else if (mcIndex == 3.0) { 3234 // b0 += c3; 3235 // } else if (mcIndex == 4.0) { 3236 // b0 += c4; b1 += c5; 3237 // } else if (mcIndex == 5.0) { 3238 // b0 += c5; b1 += c6; 3239 // } else if (mcIndex == 6.0) { 3240 // b0 += c6; b1 += c7; 3241 // } else if (mcIndex == 7.0) { 3242 // b0 += c7; b1 += c4; 3243 // } else if (mcIndex == 8.0) { 3244 // b1 += c4; 3245 // } else if (mcIndex == 9.0) { 3246 // b0 += c1; b1 += c5; 3247 // } else if (mcIndex == 10.0) { 3248 // b0 += c2; b1 += c6; 3249 // } else if (mcIndex == 11.0) { 3250 // b0 += c3; b1 += c7; 3251 // } 3252 // b0 = floor(b0 + 0.5);
3253 // b1 = floor(b1 + 0.5); 3254 3255 vec4 d0 = voxel(b0); 3256 vec4 d1 = voxel(b1); 3257 3258 #ifdef dValueChannel_red 3259 float v0 = d0.r; 3260 float v1 = d1.r; 3261 #else 3262 float v0 = d0.a; 3263 float v1 = d1.a; 3264 #endif 3265 3266 float t = (uIsoValue - v0) / (v0 - v1); 3267 gl_FragData[0].xyz = (uGridTransform * vec4(b0 + t * (b0 - b1), 1.0)).xyz; 3268 3269 // group id 3270 #if __VERSION__ == 100 || defined(dConstantGroup) 3271 // webgl1 does not support 'flat' interpolation (i.e. no interpolation) 3272 // ensure a constant group id per triangle as needed 3273 #ifdef dPackedGroup 3274 gl_FragData[1] = vec4(voxel(coord3d).rgb, 1.0); 3275 #else 3276 gl_FragData[1] = getGroup(coord3d); 3277 #endif 3278 #else 3279 #ifdef dPackedGroup 3280 gl_FragData[1] = vec4(t < 0.5 ? d0.rgb : d1.rgb, 1.0); 3281 #else 3282 gl_FragData[1] = getGroup(t < 0.5 ? b0 : b1); 3283 #endif 3284 #endif 3285 3286 // normals from gradients 3287 vec3 n0 = -normalize(vec3( 3288 voxelValuePadded(b0 - c1) - voxelValuePadded(b0 + c1), 3289 voxelValuePadded(b0 - c3) - voxelValuePadded(b0 + c3), 3290 voxelValuePadded(b0 - c4) - voxelValuePadded(b0 + c4) 3291 )); 3292 vec3 n1 = -normalize(vec3( 3293 voxelValuePadded(b1 - c1) - voxelValuePadded(b1 + c1), 3294 voxelValuePadded(b1 - c3) - voxelValuePadded(b1 + c3), 3295 voxelValuePadded(b1 - c4) - voxelValuePadded(b1 + c4) 3296 )); 3297 gl_FragData[2].xyz = -vec3( 3298 n0.x + t * (n0.x - n1.x), 3299 n0.y + t * (n0.y - n1.y), 3300 n0.z + t * (n0.z - n1.z) 3301 ); 3302 3303 // ensure normal-direction is the same for negative and positive iso-levels 3304 if (uInvert) { 3305 gl_FragData[2].xyz *= -1.0; 3306 } 3307 3308 // apply normal matrix 3309 gl_FragData[2].xyz = uGridTransformAdjoint * gl_FragData[2].xyz; 3310} 3311`,P=` 3312precision highp float; 3313precision highp int; 3314precision highp sampler2D; 3315 3316uniform sampler2D tTriCount; 3317uniform sampler2D tVolumeData; 3318 3319uniform float uIsoValue; 3320uniform vec3 uGridDim; 3321uniform vec3 uGridTexDim; 3322uniform vec2 uScale; 3323 3324#include common 3325 3326// cube corners (excluding origin) 3327const vec3 c1 = vec3(1., 0., 0.); 3328const vec3 c2 = vec3(1., 1., 0.); 3329const vec3 c3 = vec3(0., 1., 0.); 3330const vec3 c4 = vec3(0., 0., 1.); 3331const vec3 c5 = vec3(1., 0., 1.); 3332const vec3 c6 = vec3(1., 1., 1.); 3333const vec3 c7 = vec3(0., 1., 1.); 3334 3335vec3 index3dFrom2d(vec2 coord) { 3336 vec2 gridTexPos = coord * uGridTexDim.xy; 3337 vec2 columnRow = ivec2Div(gridTexPos, uGridDim.xy); 3338 vec2 posXY = gridTexPos - columnRow * uGridDim.xy; 3339 float posZ = columnRow.y * intDiv(uGridTexDim.x, uGridDim.x) + columnRow.x; 3340 return vec3(posXY, posZ); 3341} 3342 3343vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) { 3344 float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice 3345 float column = intDiv(intMod(zSlice * gridDim.x, texDim.x), gridDim.x); 3346 float row = intDiv(zSlice * gridDim.x, texDim.x); 3347 vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / (texDim / uScale); 3348 return texture2D(tex, coord); 3349} 3350 3351float voxelValue(vec3 pos) { 3352 pos = min(max(vec3(0.0), pos), uGridDim - vec3(1.0)); 3353 vec4 v = texture3dFrom2dNearest(tVolumeData, pos / uGridDim, uGridDim, uGridTexDim.xy); 3354 #ifdef dValueChannel_red 3355 return v.r; 3356 #else 3357 return v.a; 3358 #endif 3359} 3360 3361void main(void) { 3362 vec2 uv = gl_FragCoord.xy / uGridTexDim.xy; 3363 vec3 posXYZ = index3dFrom2d(uv); 3364 3365 // get MC case as the sum of corners that are below the given iso level 3366 float c = step(voxelValue(posXYZ), uIsoValue) 3367 + 2. * step(voxelValue(posXYZ + c1), uIsoValue) 3368 + 4. * step(voxelValue(posXYZ + c2), uIsoValue) 3369 + 8. * step(voxelValue(posXYZ + c3), uIsoValue) 3370 + 16. * step(voxelValue(posXYZ + c4), uIsoValue) 3371 + 32. * step(voxelValue(posXYZ + c5), uIsoValue) 3372 + 64. * step(voxelValue(posXYZ + c6), uIsoValue) 3373 + 128. * step(voxelValue(posXYZ + c7), uIsoValue); 3374 c *= step(c, 254.); 3375 3376 // handle out of bounds positions 3377 posXYZ += 1.0; 3378 posXYZ.xy += 1.0; // pixel padding (usually ok even if the texture has no padding) 3379 if (posXYZ.x >= uGridDim.x || posXYZ.y >= uGridDim.y || posXYZ.z >= uGridDim.z) 3380 c = 0.0; 3381 3382 // get total triangles to generate for calculated MC case from triCount texture 3383 float totalTrianglesToGenerate = texture2D(tTriCount, vec2(intMod(c, 16.), floor(c / 16.)) / 16.).a; 3384 gl_FragColor = vec4(vec3(totalTrianglesToGenerate * 3.0), c / 255.0); 3385} 3386`,k={...d.iz,tTriCount:(0,s.U2)("image-uint8","alpha","ubyte","nearest"),tVolumeData:(0,s.U2)("texture","rgba","ubyte","nearest"),dValueChannel:(0,s.O0)("str
3386ing",["red","alpha"]),uIsoValue:(0,s.wt)("f"),uGridDim:(0,s.wt)("v3"),uGridTexDim:(0,s.wt)("v3"),uScale:(0,s.wt)("v2")},B="active-voxels";function _(e,t){return(0,h.D0)(e.gl)&&t.format===e.gl.RED?"red":"alpha"}let R={...d.iz,tTriIndices:(0,s.U2)("image-uint8","alpha","ubyte","nearest"),tActiveVoxelsPyramid:(0,s.U2)("texture","rgba","float","nearest"),tActiveVoxelsBase:(0,s.U2)("texture","rgba","float","nearest"),tVolumeData:(0,s.U2)("texture","rgba","ubyte","nearest"),dValueChannel:(0,s.O0)("string",["red","alpha"]),uIsoValue:(0,s.wt)("f"),uSize:(0,s.wt)("f"),uLevels:(0,s.wt)("f"),uCount:(0,s.wt)("f"),uInvert:(0,s.wt)("b"),uGridDim:(0,s.wt)("v3"),uGridTexDim:(0,s.wt)("v3"),uGridDataDim:(0,s.wt)("v3"),uGridTransform:(0,s.wt)("m4"),uGridTransformAdjoint:(0,s.wt)("m3"),uScale:(0,s.wt)("v2"),dPackedGroup:(0,s.O0)("boolean"),dAxisOrder:(0,s.O0)("string",["012","021","102","120","201","210"]),dConstantGroup:(0,s.O0)("boolean")},F="isosurface";function L(e,t){return(0,h.D0)(e.gl)&&t.format===e.gl.RED?"red":"alpha"}function z(e,t,r,s,z,N,G,U,V,j,H,q,X,W,K){g.kM&&e.timer.mark("extractIsosurface");let Q=function(e,t,r,n,s,c){g.kM&&e.timer.mark("calcActiveVoxels");let{gl:p,state:m,resources:h}=e,b=t.getWidth(),y=t.getHeight();e.namedFramebuffers[B]||(e.namedFramebuffers[B]=h.framebuffer());let x=e.namedFramebuffers[B];x.bind(),e.namedTextures[B]||(e.namedTextures[B]=h.texture("image-uint8","rgba","ubyte","nearest"));let S=e.namedTextures[B];S.define(b,y);let T=function(e,t,r,n,s,c){if(e.namedComputeRenderables[B]){let a=e.namedComputeRenderables[B].values;u.IO.update(a.uQuadScale,c),u.IO.update(a.tVolumeData,t),u.IO.update(a.dValueChannel,_(e,t)),u.IO.updateIfChanged(a.uIsoValue,s),u.IO.update(a.uGridDim,r),u.IO.update(a.uGridTexDim,n),u.IO.update(a.uScale,c),e.namedComputeRenderables[B].update()}else e.namedComputeRenderables[B]=function(e,t,r,n,s,c){let p={...d.GE,tTriCount:u.IO.create(function(){if(void 0!==a)return a;let{array:e}=a=(0,E.l3)(256,1,Uint8Array);for(let t=0,r=D._w.length;t<r;++t)e[t]=D._w[t].length/3;return a}()),uQuadScale:u.IO.create(c),tVolumeData:u.IO.create(t),dValueChannel:u.IO.create(_(e,t)),uIsoValue:u.IO.create(s),uGridDim:u.IO.create(r),uGridTexDim:u.IO.create(n),uScale:u.IO.create(c)},m={...k},h=(0,l.Lq)("active-voxels",f.C,P),g=(0,o.s8)(e,"triangles",h,m,p);return(0,i.T)(g,p)}(e,t,r,n,s,c);return e.namedComputeRenderables[B]}(e,t,r,n,s,c);return e.state.currentRenderItemId=-1,S.attachFramebuffer(x,0),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}(e),m.viewport(0,0,b,y),m.scissor(0,0,b,y),p.clear(p.COLOR_BUFFER_BIT),m.scissor(0,0,n[0],n[1]),T.render(),p.finish(),g.kM&&e.timer.markEnd("calcActiveVoxels"),S}(e,t,r,s,U,N),Z=function(e,t,r,a){g.kM&&e.timer.mark("createHistogramPyramid");let{gl:n,state:s}=e,c=t.getWidth();if(c!==t.getHeight()||!(0,T.wt)(c))throw Error("inputTexture must be of square power-of-two size");let D=Math.ceil(Math.log(c)/Math.log(2)),E=Math.pow(2,D),M=Math.pow(2,D),P=Math.pow(2,D-1),k=e.isWebGL2?w("pyramid",e,"image-int32","alpha","int","nearest"):w("pyramid",e,"image-uint8","rgba","ubyte","nearest");k.define(M,P);let B=A("pyramid",e);k.attachFramebuffer(B,0),s.viewport(0,0,M,P),(0,h.D0)(n)?n.clearBufferiv(n.COLOR,0,[0,0,0,0]):n.clear(n.COLOR_BUFFER_BIT);let _=[];for(let t=0;t<D;++t)_.push(function(e,t){let r=Math.pow(2,t),a=`level${t}`,n=e.isWebGL2?w(a,e,"image-int32","alpha","int","nearest"):w(a,e,"image-uint8","rgba","ubyte","nearest");n.define(r,r);let i=function(e,t){let r=`${I}-${e}`;return t.namedFramebuffers[r]}(a,e);return i||(i=A(a,e)),n.attachFramebuffer(i,0),{texture:n,framebuffer:i}}(e,t));let R=function(e,t,r){if(e.namedComputeRenderables[I]){let a=e.namedComputeRenderables[I].values;u.IO.update(a.tInputLevel,t),u.IO.update(a.tPreviousLevel,r),e.namedComputeRenderables[I].update()}else e.namedComputeRenderables[I]=function(e,t,r){let a={...d.GE,tInputLevel:u.IO.create(t),tPreviousLevel:u.IO.create(r),uSize:u.IO.create(0),uTexSize:u.IO.create(0),uFirst:u.IO.create(!0)},n={...O},s=(0,l.Lq)("reduction",f.C,C,{},{0:"ivec4"}),c=(0,o.s8)(e,"triangles",s,n,a);return(0,i.T)(c,a)}(e,t,r);return e.namedComputeRenderables[I]}(e,t,_[0].texture);s.currentRenderItemId=-1,function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.enable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,
3386!0,!0),r.clearColor(0,0,0,0)}(e);let F=0;for(let e=0;e<D;e++){let t=D-1-e;_[t].framebuffer.bind();let r=Math.pow(2,t);u.IO.update(R.values.uSize,Math.pow(2,e+1)/E),u.IO.update(R.values.uTexSize,r),u.IO.updateIfChanged(R.values.uFirst,0===e),e>0&&(u.IO.update(R.values.tPreviousLevel,_[D-e].texture),R.update()),s.currentRenderItemId=-1,s.viewport(0,0,r,r),s.scissor(0,0,r,r),(0,h.D0)(n)?n.clearBufferiv(n.COLOR,0,[0,0,0,0]):n.clear(n.COLOR_BUFFER_BIT),s.scissor(0,0,a[0],a[1]),R.render(),k.bind(0),n.copyTexSubImage2D(n.TEXTURE_2D,0,F,0,0,0,r,r),k.unbind(0),F+=r}n.finish(),g.kM&&e.timer.markEnd("createHistogramPyramid");let L=Math.max(1,function(e,t){g.kM&&e.timer.mark("getHistopyramidSum");let{gl:r,state:a,resources:n}=e,s=function(e,t){if(e.namedComputeRenderables[y]){let r=e.namedComputeRenderables[y].values;u.IO.update(r.tTexture,t),e.namedComputeRenderables[y].update()}else e.namedComputeRenderables[y]=function(e,t){let r={...d.GE,tTexture:u.IO.create(t)},a={...b},n=(0,l.Lq)("sum",f.C,m,{},{0:"ivec4"}),s=(0,o.s8)(e,"triangles",n,a,r);return(0,i.T)(s,r)}(e,t);return e.namedComputeRenderables[y]}(e,t);e.state.currentRenderItemId=-1,e.namedFramebuffers[y]||(e.namedFramebuffers[y]=n.framebuffer());let c=e.namedFramebuffers[y];return e.namedTextures[y]||(e.namedTextures[y]=(0,h.D0)(r)?n.texture("image-int32","rgba","int","nearest"):n.texture("image-uint8","rgba","ubyte","nearest"),e.namedTextures[y].define(1,1)),e.namedTextures[y].attachFramebuffer(c,0),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0)}(e),a.viewport(0,0,1,1),s.render(),r.finish(),e.readPixels(0,0,1,1,(0,h.D0)(r)?S:x),r.bindFramebuffer(r.FRAMEBUFFER,null),g.kM&&e.timer.markEnd("getHistopyramidSum"),(0,h.D0)(r)?S[0]:(0,p.UF)(x[0],x[1],x[2])}(e,_[0].texture)),z=Math.ceil(L/Math.pow(2,D));return{pyramidTex:k,count:L,height:z,levels:D,scale:r}}(e,Q,N,s),Y=function(e,t,r,a,s,p,m,b,y,x,S,T,C,O,I,A){let{drawBuffers:w}=e.extensions;if(!w)throw Error("need WebGL draw buffers");g.kM&&e.timer.mark("createIsosurfaceBuffers");let{gl:P,state:k,resources:B,extensions:_}=e,{pyramidTex:z,height:N,levels:G,scale:U,count:V}=a,j=z.getWidth();e.namedFramebuffers[F]||(e.namedFramebuffers[F]=B.framebuffer());let H=e.namedFramebuffers[F];(0,h.D0)(P)?(O||(O=B.texture("image-float32","rgba","float","nearest")),I||(I=B.texture("image-uint8","rgba","ubyte","nearest")),A||(A=_.colorBufferHalfFloat&&_.textureHalfFloat?B.texture("image-float16","rgba","fp16","nearest"):B.texture("image-float32","rgba","float","nearest"))):(O||(O=B.texture("image-float32","rgba","float","nearest")),I||(I=B.texture("image-float32","rgba","float","nearest")),A||(A=B.texture("image-float32","rgba","float","nearest"))),O.define(j,N),I.define(j,N),A.define(j,N),O.attachFramebuffer(H,0),I.attachFramebuffer(H,1),A.attachFramebuffer(H,2);let q=function(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O){if(e.namedComputeRenderables[F]){let n=e.namedComputeRenderables[F].values;u.IO.update(n.tActiveVoxelsPyramid,t),u.IO.update(n.tActiveVoxelsBase,r),u.IO.update(n.tVolumeData,a),u.IO.update(n.dValueChannel,L(e,a)),u.IO.updateIfChanged(n.uIsoValue,g),u.IO.updateIfChanged(n.uSize,Math.pow(2,b)),u.IO.updateIfChanged(n.uLevels,b),u.IO.updateIfChanged(n.uCount,x),u.IO.updateIfChanged(n.uInvert,S),u.IO.update(n.uGridDim,s),u.IO.update(n.uGridTexDim,p),u.IO.update(n.uGridDataDim,m),u.IO.update(n.uGridTransform,h),u.IO.update(n.uGridTransformAdjoint,c.Tu.adjointFromMat4((0,c.Tu)(),h)),u.IO.update(n.uScale,y),u.IO.updateIfChanged(n.dPackedGroup,T),u.IO.updateIfChanged(n.dAxisOrder,C.join("")),u.IO.updateIfChanged(n.dConstantGroup,O),e.namedComputeRenderables[F].update()}else e.namedComputeRenderables[F]=function(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O){let I={...d.GE,tTriIndices:u.IO.create(function(){if(void 0!==n)return n;let{array:e}=n=(0,E.l3)(4096,1,Uint8Array);for(let t=0,r=D._w.length;t<r;++t)for(let r=0;r<16;++r)r<D._w[t].length?e[16*t+r]=D._w[t][r]:e[16*t+r]=255;return n}()),tActiveVoxelsPyramid:u.IO.create(t),tActiveVoxelsBase:u.IO.create(r),tVolumeData:u.IO.create(a),dValueChannel:u.IO.create(L(e,a)),uIsoValue:u.IO.create(g),uSize:u.IO.create(Math.pow(2,b)),uLevels:u.IO.create(b),uCount:u.IO.create(x),uInvert:u.IO.create(S),uGridDim:u.IO.create(s),uGridTexDim:u.IO.create(p),uGridDataDim:u.IO.create(m),uGridTransform:u.IO.create(h),uGridTransformAdjoint:u.IO.create(c.Tu.adjointFromMat4((0,c.Tu)(),h)),uScale:u.IO.create(y),dPackedGroup:u.IO.create(T),dAxisOrder:u.IO.create(C.join("")),dConstantGroup:u.IO.create(O)},A={...R},w=(0,l.Lq)("isosurface",f.C,M,{drawBuffers:"required"}),P=(0,o.s8)(e,"triangles",w,A,I);return(0,i.T)(P,I)}(e,t,r,a,s,p,m,h,g,b,y,x,S,T,C,O);return e.namedComputeRenderables[F]}(e,z,t,r,s,p,m,b,y,G,U,V,x,S,T,C);return e.state.currentRenderItemId=-1,H.bind(),w.drawBuffers([w.COLOR_ATTACHMENT0,w.COLOR_ATTACHMENT1,w.COLOR_ATTACHMENT2]),!function(e){let{gl:t,state:r}=e;r.disable(t.CULL_FACE),r.disable(t.BLEND),r.disable(t.DEPTH_TEST),r.disable(t.SCISSOR_TEST),r.depthMask(!1),r.colorMask(!0,!0,
3386!0,!0),r.clearColor(0,0,0,0)}(e),k.viewport(0,0,j,N),P.clear(P.COLOR_BUFFER_BIT),q.render(),P.finish(),g.kM&&e.timer.markEnd("createIsosurfaceBuffers"),{vertexTexture:O,groupTexture:I,normalTexture:A,vertexCount:V}}(e,Q,t,Z,r,s,z,G,U,V,j,H,q,X,W,K);return g.kM&&e.timer.markEnd("extractIsosurface"),Y}},68971:function(e,t,r){r.d(t,{GK:function(){return d},iz:function(){return p},GE:function(){return f},Oz:function(){return g}}),r(91407);var a=r(85764),n=r(18406),i=r(87144),o=r(45705);let s=` 3387precision highp float; 3388precision highp sampler2D; 3389 3390uniform sampler2D tColor; 3391uniform vec2 uTexSize; 3392 3393void main() { 3394 vec2 coords = gl_FragCoord.xy / uTexSize; 3395 gl_FragColor = texture2D(tColor, coords); 3396} 3397`;var l=r(10410),u=r(57155),c=r(62113);let d=new Float32Array([1,1,-1,1,-1,-1,-1,-1,1,-1,1,1]),p={drawCount:(0,n.R$)("number"),instanceCount:(0,n.R$)("number"),aPosition:(0,n.LQ)("float32",2,0),uQuadScale:(0,n.wt)("v2")},f={drawCount:a.IO.create(6),instanceCount:a.IO.create(1),aPosition:a.IO.create(d),uQuadScale:a.IO.create(i.Sg.create(1,1))},m={...p,tColor:(0,n.U2)("texture","rgba","ubyte","nearest"),uTexSize:(0,n.wt)("v2")},h=(0,o.Lq)("copy",l.C,s);function g(e,t){let r={...f,tColor:a.IO.create(t),uTexSize:a.IO.create(i.Sg.create(t.getWidth(),t.getHeight()))},n={...m},o=(0,u.s8)(e,"triangles",h,n,r);return(0,c.T)(o,r)}},67241:function(e,t,r){r.d(t,{Hq:function(){return C},OG:function(){return O},xH:function(){return T}});var a=r(16252),n=r(62113),i=r(57155),o=r(18406),s=r(45705),l=r(85764);let u={...o.Pp,aPosition:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),uBboxMin:(0,o.wt)("v3"),uBboxMax:(0,o.wt)("v3"),uBboxSize:(0,o.wt)("v3"),uMaxSteps:(0,o.wt)("i"),uStepScale:(0,o.wt)("f"),uJumpLength:(0,o.wt)("f"),uTransform:(0,o.wt)("m4"),uGridDim:(0,o.wt)("v3"),tTransferTex:(0,o.U2)("image-uint8","alpha","ubyte","linear"),uTransferScale:(0,o.wt)("f","material"),dGridTexType:(0,o.O0)("str
3397ing",["2d","3d"]),uGridTexDim:(0,o.wt)("v3"),tGridTex:(0,o.U2)("texture","rgba","ubyte","linear"),uGridStats:(0,o.wt)("v4"),uCellDim:(0,o.wt)("v3"),uCartnToUnit:(0,o.wt)("m4"),uUnitToCartn:(0,o.wt)("m4"),dPackedGroup:(0,o.O0)("boolean"),dAxisOrder:(0,o.O0)("string",["012","021","102","120","201","210"]),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),meta:(0,o.R$)("unknown")},c={...o.Pp,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aNormal:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),dVaryingGroup:(0,o.O0)("boolean"),dFlatShaded:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),meta:(0,o.R$)("unknown")},d={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),dPointSizeAttenuation:(0,o.O0)("boolean"),dPointStyle:(0,o.O0)("str
3397ing",["square","circle","fuzzy"])},p={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aMapping:(0,o.LQ)("float32",2,0),aStart:(0,o.LQ)("float32",3,0),aEnd:(0,o.LQ)("float32",3,0),elements:(0,o.xU)("uint32"),dLineSizeAttenuation:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),stripCount:(0,o.R$)("number"),stripOffsets:(0,o.R$)("uint32")},f={...o.Pp,...o.rM,uTexDim:(0,o.wt)("v2"),tPositionGroup:(0,o.U2)("image-float32","rgba","float","nearest"),padding:(0,o.R$)("number"),uDoubleSided:(0,o.wt)("b","material"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("string",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),dSolidInterior:(0,o.O0)("boolean"),dClipPrimitive:(0,o.O0)("boolean"),dApproximate:(0,o.O0)("boolean"),uAlphaThickness:(0,o.wt)("f"),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),lodLevels:(0,o.R$)("unknown"),centerBuffer:(0,o.R$)("float32"),groupBuffer:(0,o.R$)("float32")},m={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aMapping:(0,o.LQ)("float32",2,0),aDepth:(0,o.LQ)("float32",1,0),elements:(0,o.xU)("uint32"),aTexCoord:(0,o.LQ)("float32",2,0),tFont:(0,o.U2)("image-uint8","alpha","ubyte","linear"),padding:(0,o.R$)("number"),uBorderWidth:(0,o.wt)("f","material"),uBorderColor:(0,o.wt)("v3","material"),uOffsetX:(0,o.wt)("f","material"),uOffsetY:(0,o.wt)("f","material"),uOffsetZ:(0,o.wt)("f","material"),uBackgroundColor:(0,o.wt)("v3","material"),uBackgroundOpacity:(0,o.wt)("f","material")},h={...o.Pp,uGeoTexDim:(0,o.wt)("v2","buffered"),tPosition:(0,o.U2)("texture","rgb","float","nearest"),tGroup:(0,o.U2)("texture","alpha","float","nearest"),tNormal:(0,o.U2)("texture","rgb","float","nearest"),dVaryingGroup:(0,o.O0)("boolean"),dFlatShaded:(0,o.O0)("boolean"),uDoubleSided:(0,o.wt)("b","material"),dFlipSided:(0,o.O0)("boolean"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("str
3397ing",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),meta:(0,o.R$)("unknown")};var g=r(68303);let b={...o.Pp,aGroup:(0,o.LQ)("float32",1,0),aPosition:(0,o.LQ)("float32",3,0),aUv:(0,o.LQ)("float32",2,0),elements:(0,o.xU)("uint32"),uImageTexDim:(0,o.wt)("v2"),tImageTex:(0,o.U2)("image-uint8","rgba","ubyte","nearest"),tGroupTex:(0,o.U2)("image-uint8","rgba","ubyte","nearest"),tValueTex:(0,o.U2)("image-float32","alpha","float","linear"),uTrimType:(0,o.wt)("i"),uTrimCenter:(0,o.wt)("v3"),uTrimRotation:(0,o.wt)("q"),uTrimScale:(0,o.wt)("v3"),uTrimTransform:(0,o.wt)("m4"),uIsoLevel:(0,o.wt)("f"),dInterpolation:(0,o.O0)("string",["nearest","catmulrom","mitchell","bspline"])},y={...o.Pp,...o.rM,aGroup:(0,o.LQ)("float32",1,0),aStart:(0,o.LQ)("float32",3,0),aEnd:(0,o.LQ)("float32",3,0),aMapping:(0,o.LQ)("float32",3,0),aScale:(0,o.LQ)("float32",1,0),aCap:(0,o.LQ)("float32",1,0),aColorMode:(0,o.LQ)("float32",1,0),elements:(0,o.xU)("uint32"),padding:(0,o.R$)("number"),uDoubleSided:(0,o.wt)("b","material"),dIgnoreLight:(0,o.O0)("boolean"),dCelShaded:(0,o.O0)("boolean"),dXrayShaded:(0,o.O0)("str
3397ing",["off","on","inverted"]),dTransparentBackfaces:(0,o.O0)("string",["off","on","opaque"]),dSolidInterior:(0,o.O0)("boolean"),uBumpFrequency:(0,o.wt)("f","material"),uBumpAmplitude:(0,o.wt)("f","material"),uInteriorColor:(0,o.wt)("v4"),uInteriorSubstance:(0,o.wt)("v4"),dDualColor:(0,o.O0)("boolean")};var x=r(97667);let S=(0,a.s)(0,2147483647),T=(0,a.s)(0,2147483647);function C(e,t,r,a){return{id:S(),type:e,values:t,state:r,materialId:a}}function O(e,t,r,a){switch(t.type){case"mesh":return function(e,t,r,a,u,d,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...c},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.pb,g=(0,i.ww)(e,"triangles",h,f,m,u,d);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"points":return function(e,t,r,a,u,c,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...d},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.lx,g=(0,i.ww)(e,"points",h,f,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"spheres":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...f},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.fj,g=(0,i.ww)(e,"triangles",h,p,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"cylinders":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...y},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},m=s.gz,h=(0,i.ww)(e,"triangles",m,p,f,u,c);return(0,n.O)(h,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"text":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...m},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.cs,g=(0,i.ww)(e,"triangles",h,p,f,u,c);return(0,n.O)(g,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"lines":return function(e,t,r,a,u,c,d){let f={...o.U6,...o.SY,...o.yX,...o.P_,...p},m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},h=s.tc,g=(0,i.ww)(e,"triangles",h,f,m,u,c);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"direct-volume":return function(e,t,r,a,c,d,p){let f={...o.U6,...o.SY,...o.yX,...o.P_,...u};e.isWebGL2||(f.uMaxSteps=(0,o.O0)("number"));let m={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(p.dLightCount),dColorMarker:l.IO.create(p.dColorMarker)},h=s.mE,g=(0,i.ww)(e,"triangles",h,f,m,c,d);return(0,n.O)(g,m,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"image":return function(e,t,r,a,l,u,c){let d={...o.U6,...o.SY,...o.yX,...o.P_,...b},p={...r,uObjectId:g.IO.create(t),dLightCount:g.IO.create(c.dLightCount),dColorMarker:g.IO.create(c.dColorMarker)},f=s.Oc,m=(0,i.ww)(e,"triangles",f,d,p,l,u);return(0,n.O)(m,p,a)}(e,t.id,t.values,t.state,t.materialId,r,a);case"texture-mesh":return function(e,t,r,a,u,c,d){let p={...o.U6,...o.SY,...o.yX,...o.P_,...h},f={...r,uObjectId:l.IO.create(t),dLightCount:l.IO.create(d.dLightCount),dColorMarker:l.IO.create(d.dColorMarker)},m=s.pb,g=(0,i.ww)(e,"triangles",m,p,f,u,c);return(0,n.O)(g,f,a)}(e,t.id,t.values,t.state,t.materialId,r,a)}(0,x.UT)(t.type)}},62113:function(e,t,r){r.d(t,{O:function(){return g},T:function(){return b}});var a=r(68303),n=r(16252),i=r(23833),o=r(99592),s=r(2941),l=r(30441),u=r(22934),c=r(48502);let d=s.H.distanceToPoint,p=o.u.intersectsSphere3D,f=l.C.fromArray,m=(0,n.s)();function h(e,t){return t&&t.instanceCounts.length>=e?t:{firsts:new Int32Array(e),counts:new Int32Array(e),offsets:new Int32Array(e),instanceCounts:new Int32Array(e),baseVertices:new Int32Array(e),baseInstances:new Uint32Array(e),count:0,uniforms:[]}}function g(e,t,r){let n=m(),o=h(0),s=[],g=!1,b=-1,y=(0,l.C)(),x=()=>{var e;let r=null===(e=t.lodLevels)||void 0===e?void 0:e.ref.value;if(r&&r.length>0){let{cellCount:e}=t.instanceGrid.ref.value;s.length=r.length;for(let t=0,a=r.length;t<a;++t)s[t]=h(e,s[t]),s[t].count=0;
3397if(t.lodLevels.ref.version!==b){for(let e=0,t=r.length;e<t;++e)1!==s[e].uniforms.length&&(s[e].uniforms.length=1,s[e].uniforms[0]=["uLod",a.IO.create((0,u.T)())]),a.IO.update(s[e].uniforms[0][1],u.T.set(s[e].uniforms[0][1].ref.value,r[e][0],r[e][1],r[e][2],r[e][4]));b=t.lodLevels.ref.version}}};return x(),{id:n,materialId:e.materialId,values:t,state:r,cull:(e,r,a,n)=>{var i,l;if(g=!1,0===t.drawCount.ref.value||0===t.instanceCount.ref.value||t.instanceGrid.ref.value.cellSize<=1)return;let{cellOffsets:u,cellSpheres:m,cellCount:S,batchOffsets:T,batchSpheres:C,batchCount:O,batchCell:I,batchSize:A}=t.instanceGrid.ref.value,[w,D]=t.uLod.ref.value,E=0!==w||0!==D,M=2*A,P=null===(i=t.lodLevels)||void 0===i?void 0:i.ref.value;if(P&&P.length>0){if((null===(l=t.lodLevels)||void 0===l?void 0:l.ref.version)!==b)x();else for(let e=0,t=P.length;e<t;++e)s[e].count=0;for(let t=0;t<O;++t){let i=T[t],o=T[t+1];if(0==o-i)continue;f(y,C,4*t);let l=d(e,y.center);if(E&&(l+y.radius<w||l-y.radius>D)){c.kM&&(n.culled.lod+=u[I[o-1]+1]-u[I[i]]);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=u[I[o-1]+1]-u[I[i]]);continue}if(null!==a&&a(y)){c.kM&&(n.culled.occlusion+=u[I[o-1]+1]-u[I[i]]);continue}for(let t=i;t<o;++t){let i=I[t],o=u[i],l=u[i+1]-o;if(0===l)continue;f(y,m,4*i);let h=d(e,y.center);if(E&&(h+y.radius<w||h-y.radius>D)){c.kM&&(n.culled.lod+=l);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=l);continue}if(null!==a&&h-y.radius<M&&a(y)){c.kM&&(n.culled.occlusion+=l);continue}for(let e=0,t=P.length;e<t;++e){if(h+y.radius<P[e][0]||h-y.radius>P[e][1])continue;let t=s[e],r=t.count;r>0&&t.baseInstances[r-1]+t.instanceCounts[r-1]===o&&t.counts[r-1]===P[e][3]?t.instanceCounts[r-1]+=l:(t.counts[r]=P[e][3],t.instanceCounts[r]=l,t.baseInstances[r]=o,t.count+=1)}}}}else{let{baseInstances:i,instanceCounts:l,counts:g}=o=h(S,o),b=0;for(let o=0;o<O;++o){let s=T[o],h=T[o+1];if(0!=h-s){if(f(y,C,4*o),E){let t=d(e,y.center);if(t+y.radius<w||t-y.radius>D){c.kM&&(n.culled.lod+=u[I[h-1]+1]-u[I[s]]);continue}}if(!p(r,y)){c.kM&&(n.culled.frustum+=u[I[h-1]+1]-u[I[s]]);continue}if(null!==a&&a(y)){c.kM&&(n.culled.occlusion+=u[I[h-1]+1]-u[I[s]]);continue}for(let o=s;o<h;++o){let s=I[o],h=u[s],x=u[s+1]-h;if(0===x)continue;f(y,m,4*s);let S=d(e,y.center);if(E&&(S+y.radius<w||S-y.radius>D)){c.kM&&(n.culled.lod+=x);continue}if(!p(r,y)){c.kM&&(n.culled.frustum+=x);continue}if(null!==a&&S-y.radius<M&&a(y)){c.kM&&(n.culled.occlusion+=x);continue}b>0&&i[b-1]+l[b-1]===h?l[b-1]+=x:(g[b]=t.drawCount.ref.value,l[b]=x,i[b]=h,b+=1)}}}o.count=b,s.length=1,s[0]=o,s[0].uniforms.length=0}g=!0},uncull:()=>{g=!1},cullSimple:(e,r,a)=>{var n,i;let o=null===(n=t.lodLevels)||void 0===n?void 0:n.ref.value;if(o&&0!==o.length){if((null===(i=t.lodLevels)||void 0===i?void 0:i.ref.version)!==b)x();else for(let e=0,t=o.length;e<t;++e)s[e].count=0;for(let n=0,i=o.length;n<i;++n)if(e+r<o[n][1]*a){let e=s[n],r=e.count;e.counts[r]=o[n][3],e.instanceCounts[r]=t.instanceCount.ref.value,e.baseInstances[r]=0,e.count+=1;break}g=!0}},render:(n,o)=>{t.uAlpha&&t.alpha&&a.IO.updateIfChanged(t.uAlpha,(0,i.uZ)(t.alpha.ref.value*r.alphaFactor,0,1)),e.render(n,o,g?s:void 0)},getByteCount:()=>e.getByteCount(),getProgram:t=>e.getProgram(t),setTransparency:t=>e.setTransparency(t),update:()=>{e.update(),x()},dispose:()=>e.destroy()}}function b(e,t){return{id:m(),values:t,render:()=>{e.getProgram("compute").finalize(!0),e.render("compute",0)},update:()=>e.update(),dispose:()=>e.destroy()}}},18406:function(e,t,r){function a(e,t){let r={},a={},n={},i={},o={},s={},l={};return Object.keys(e).forEach(u=>{let c=e[u];"attribute"===c.type&&(r[u]=t[u]),"define"===c.type&&(a[u]=t[u]),"texture"===c.type&&void 0!==t[u]&&("material"===c.variant?i[u]=t[u]:n[u]=t[u]),"uniform"===c.type&&void 0!==t[u]&&("material"===c.variant?s[u]=t[u]:"buffered"===c.variant?l[u]=t[u]:o[u]=t[u])}),{attributeValues:r,defineValues:a,textureValues:n,materialTextureValues:i,uniformValues:o,materialUniformValues:s,bufferedUniformValues:l}}function n(e){let t={};return Object.keys(e).forEach(r=>{t[r]=e[r].ref.version}),t}function i(e,t,r){return{type:"attribute",kind:e,itemSize:t,divisor:r}}function o(e,t){return{type:"uniform",kind:e,variant:t}}function s(e,t,r,a,n){return{type:"texture",kind:e,format:t,dataType:r,filter:a,variant:n}}function l(e){return{type:"elements",kind:e}}function u(e,t){return{type:"define",kind:e,options:t}}function c(e){return{type:"value",kind:e}}r.d(t,{LQ:function(){return i},O0:function(){return u},P_:function(){return m},Pp:function(){return O},R$:function(){return c}
3397,SY:function(){return p},U2:function(){return s},U6:function(){return d},Xe:function(){return n},kA:function(){return a},rM:function(){return g},wt:function(){return o},xU:function(){return l},yX:function(){return f}});let d={uDrawId:o("i"),uModel:o("m4"),uView:o("m4"),uInvView:o("m4"),uModelView:o("m4"),uInvModelView:o("m4"),uProjection:o("m4"),uInvProjection:o("m4"),uModelViewProjection:o("m4"),uInvModelViewProjection:o("m4"),uHasHeadRotation:o("b"),uInvHeadRotation:o("m4"),uIsAsymmetricProjection:o("b"),uHasEyeCamera:o("b"),uModelViewEye:o("m4"),uInvModelViewEye:o("m4"),uIsOrtho:o("f"),uPixelRatio:o("f"),uViewport:o("v4"),uViewOffset:o("v2"),uModelScale:o("f"),uDrawingBufferSize:o("v2"),uCameraPosition:o("v3"),uCameraDir:o("v3"),uCameraPlane:o("v4"),uNear:o("f"),uFar:o("f"),uFog:o("b"),uFogNear:o("f"),uFogFar:o("f"),uFogColor:o("v3"),uTransparentBackground:o("b"),uLightDirection:o("v3[]"),uLightColor:o("v3[]"),uAmbientColor:o("v3"),uPickingAlphaThreshold:o("f"),uHighlightColor:o("v3"),uSelectColor:o("v3"),uDimColor:o("v3"),uHighlightStrength:o("f"),uSelectStrength:o("f"),uDimStrength:o("f"),uMarkerPriority:o("i"),uMarkerAverage:o("f"),uXrayEdgeFalloff:o("f"),uCelSteps:o("f"),uExposure:o("f"),uRenderMask:o("i"),uMarkingDepthTest:o("b"),uMarkingType:o("i"),uPickType:o("i")},p={tDepth:s("texture","depth","ushort","nearest"),tDpoitDepth:s("texture","rg","float","nearest"),tDpoitFrontColor:s("texture","rgba","float","nearest"),tDpoitBackColor:s("texture","rgba","float","nearest")},f={dLightCount:u("number"),dColorMarker:u("boolean")},m={uObjectId:o("i")},h={uColor:o("v3","material"),uColorTexDim:o("v2"),uColorGridDim:o("v3"),uColorGridTransform:o("v4"),uPaletteDomain:o("v2"),uPaletteDefault:o("v3"),tColor:s("image-uint8","rgb","ubyte","nearest"),tPalette:s("image-uint8","rgb","ubyte","nearest"),tColorGrid:s("texture","rgb","ubyte","linear"),dColorType:u("string",["uniform","attribute","instance","group","groupInstance","vertex","vertexInstance","volume","volumeInstance","direct"]),dUsePalette:u("boolean")},g={uSize:o("f","material"),uSizeTexDim:o("v2"),tSize:s("image-uint8","rgb","ubyte","nearest"),dSizeType:u("string",["uniform","attribute","instance","group","groupInstance"]),uSizeFactor:o("f","material")},b={uMarker:o("f"),uMarkerTexDim:o("v2"),tMarker:s("image-uint8","alpha","ubyte","nearest"),markerAverage:c("number"),markerStatus:c("number"),dMarkerType:u("string",["instance","groupInstance"])},y={uOverpaintTexDim:o("v2"),tOverpaint:s("image-uint8","rgba","ubyte","nearest"),dOverpaint:u("boolean"),uOverpaintGridDim:o("v3"),uOverpaintGridTransform:o("v4"),tOverpaintGrid:s("texture","rgba","ubyte","linear"),dOverpaintType:u("string",["instance","groupInstance","volumeInstance"]),uOverpaintStrength:o("f","material")},x={uTransparencyTexDim:o("v2"),tTransparency:s("image-uint8","alpha","ubyte","nearest"),dTransparency:u("boolean"),transparencyAverage:c("number"),transparencyMin:c("number"),uTransparencyGridDim:o("v3"),uTransparencyGridTransform:o("v4"),tTransparencyGrid:s("texture","alpha","ubyte","linear"),dTransparencyType:u("string",["instance","groupInstance","volumeInstance"]),uTransparencyStrength:o("f","material")},S={uEmissiveTexDim:o("v2"),tEmissive:s("image-uint8","alpha","ubyte","nearest"),dEmissive:u("boolean"),emissiveAverage:c("number"),uEmissiveGridDim:o("v3"),uEmissiveGridTransform:o("v4"),tEmissiveGrid:s("texture","alpha","ubyte","linear"),dEmissiveType:u("string",["instance","groupInstance","volumeInstance"]),uEmissiveStrength:o("f","material")},T={uSubstanceTexDim:o("v2"),tSubstance:s("image-uint8","rgba","ubyte","nearest"),dSubstance:u("boolean"),uSubstanceGridDim:o("v3"),uSubstanceGridTransform:o("v4"),tSubstanceGrid:s("texture","rgba","ubyte","linear"),dSubstanceType:u("string",["instance","groupInstance","volumeInstance"]),uSubstanceStrength:o("f","material")},C={uClippingTexDim:o("v2"),tClipping:s("image-uint8","alpha","ubyte","nearest"),dClipping:u("boolean"),dClippingType:u("string",["instance","groupInstance"])},O={dGeometryType:u("string",["cylinders","directVolume","image","lines","mesh","points","spheres","text","textureMesh"]),...h,...b,...y,...x,...S,...T,...C,dClipObjectC
3397ount:u("number"),dClipVariant:u("string",["instance","pixel"]),uClipObjectType:o("i[]","material"),uClipObjectInvert:o("b[]","material"),uClipObjectPosition:o("v3[]","material"),uClipObjectRotation:o("v4[]","material"),uClipObjectScale:o("v3[]","material"),uClipObjectTransform:o("m4[]","material"),aInstance:i("float32",1,1),aTransform:i("float32",16,1),uAlpha:o("f","material"),uMetalness:o("f","material"),uRoughness:o("f","material"),uBumpiness:o("f","material"),uEmissive:o("f","material"),uDensity:o("f","material"),uVertexCount:o("i"),uInstanceCount:o("i"),uGroupCount:o("i"),uInvariantBoundingSphere:o("v4"),uLod:o("v4"),drawCount:c("number"),instanceCount:c("number"),alpha:c("number"),matrix:c("m4"),transform:c("float32"),extraTransform:c("float32"),hasReflection:c("boolean"),instanceGranularity:c("boolean"),boundingSphere:c("sphere"),invariantBoundingSphere:c("sphere"),instanceGrid:c("instanceGrid")}},62927:function(e,t,r){r.d(t,{Lo:function(){return h},Yx:function(){return f},l3:function(){return l}});var a=r(48930),n=r(87144),i=r(83576);r(36111);let o=n.AO.fromArray,s=n.AO.transformMat4Offset;function l(e,t,r,a){let{length:n,width:i,height:o}=function(e,t){let r=Math.ceil(Math.sqrt(e=Math.max(e,2)));r+=(t-r%t)%t;let a=r>0?Math.ceil(e/r):0;return{width:r,height:a,length:r*a*t}}(e,t);return{array:a=a&&a.length>=n?a:new r(n),width:i,height:o}}let u=(0,n.AO)(),c=new i.q("14"),d=new i.q("98");function p(e){return e>1e5?c:d}function f(e,t,r){let i=3*r,s=p(t);s.reset();for(let r=0,a=3*t;r<a;r+=i)o(u,e,r),s.includePosition(u);s.finishedIncludeStep();for(let r=0,a=3*t;r<a;r+=i)o(u,e,r),s.radiusPosition(u);let l=s.getSphere();if(t<=14){let r=[];for(let a=0,s=3*t;a<s;a+=i)r.push(o((0,n.AO)(),e,a));a.CP.setExtrema(l,r)}return l}let m=(0,n.yb)();function h(e,t,r,i){if(1===r){n.yb.fromArray(m,t,i);let r=a.CP.clone(e);return n.yb.isIdentity(m)?r:a.CP.transform(r,r,m)}let o=p(r);o.reset();let{center:l,radius:c,extrema:d}=e;if(d&&r<=14){for(let e=0;e<r;++e)for(let r of d)s(u,r,t,0,0,16*e+i),o.includePosition(u);o.finishedIncludeStep();for(let e=0;e<r;++e)for(let r of d)s(u,r,t,0,0,16*e+i),o.radiusPosition(u)}else{for(let e=0;e<r;++e)s(u,l,t,0,0,16*e+i),o.includePositionRadius(u,c);o.finishedIncludeStep();for(let e=0;e<r;++e)s(u,l,t,0,0,16*e+i),o.radiusPositionRadius(u,c)}return o.getSphere()}},12489:function(e,t,r){let a,n;r.d(t,{N4:function(){return c},Th:function(){return p},bR:function(){return M},g4:function(){return A}});var i,o,s,l,u,c,d,p,f=r(85409),m=r(87144),h=r(70371),g=r(85764),b=r(14086),y=r(58463),x=r(36111),S=r(23833),T=r(48502),C=r(99592),O=r(2941),I=r(48930);(i=c||(c={}))[i.None=0]="None",i[i.Object=1]="Object",i[i.Instance=2]="Instance",i[i.Group=3]="Group",(o=d||(d={}))[o.None=0]="None",o[o.Depth=1]="Depth",o[o.Mask=2]="Mask";let A={backgroundColor:b.e.Color((0,h.Il)(0),{description:"Background color of the 3D canvas"}),pickingAlphaThreshold:b.e.Numeric(.5,{min:0,max:1,step:.01},{description:"The minimum opacity value needed for an object to be pickable."}),colorMarker:b.e.Boolean(!0,{description:"Enable color marker"}),highlightColor:b.e.Color(h.Il.fromNormalizedRgb(1,.4,.6)),selectColor:b.e.Color(h.Il.fromNormalizedRgb(.2,1,.1)),dimColor:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),highlightStrength:b.e.Numeric(.3,{min:0,max:1,step:.1}),selectStrength:b.e.Numeric(.3,{min:0,max:1,step:.1}),dimStrength:b.e.Numeric(0,{min:0,max:1,step:.1}),markerPriority:b.e.Select(1,[[1,"Highlight"],[2,"Select"]]),xrayEdgeFalloff:b.e.Numeric(1,{min:0,max:3,step:.1}),celSteps:b.e.Numeric(5,{min:2,max:16,step:1}),exposure:b.e.Numeric(1,{min:0,max:3,step:.01}),light:b.e.ObjectList({inclination:b.e.Numeric(150,{min:0,max:180,step:1}),azimuth:b.e.Numeric(320,{min:0,max:360,step:1}),color:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),intensity:b.e.Numeric(.6,{min:0,max:5,step:.01})},e=>h.Il.toHexString(e.color),{defaultValue:[{inclination:150,azimuth:320,color:h.Il.fromNormalizedRgb(1,1,1),intensity:.6}]}),ambientColor:b.e.Color(h.Il.fromNormalizedRgb(1,1,1)),ambientIntensity:b.e.Numeric(.4,{min:0,max:2,step:.01})},w=(0,m.AO)(),D=(0,m.AO)();function E(e,t){let r=e.length,{direction:a,color:n}=t||{direction:Array(3*r).fill(0),color:Array(3*r).fill(0)};for(let t=0;t<r;++t){let r=e[t];m.AO.directionFromSpherical(w,(0,y.Id)(r.inclination),(0,y.Id)(r.azimuth),1),m.AO.toArray(w,a,3*t),m.AO.scale(D,h.Il.toVec3Normalized(D,r.color),r.intensity),m.AO.toArray(D,n,3*t)}return{count:r,direction:a,color:n}}function M(e,t){let r=Array(3*e.count);for(let a=0,n=e.count;a<n;++a)m.AO.fromArray(w,e.direction,3*a),m.AO.transformDirection(w,w,t),m.AO.toArray(w,r,3*a);return r}s=p||(p={}),(l=a||(a={}))[l.None=0]="None",l[l.BlendedFront=1]="BlendedFront",l[l.BlendedBack=2]="BlendedBack",(u=n||(n={}))[u.All=0]="All",u[u.Opaque=1]="Opaque",u[u.Transparent=2]="Transparent",s.create=function(e,t={}){let{gl:r,state:i,stats:o}=e,s=b.e.merge(A,b.e.getDefaultValues(A),t),l=E(s.light),u=(0,f.l_)(),p=m.Sg.create(r.drawingBufferWidth,r.drawingBufferHeight),y=h.Il.toVec3Normalized((0,m.AO)(),s.backgroundColor),w=!1,D=null,P=e.resources.texture("image-uint8","rgba","ubyte","nearest");P.define(1,1),P.load({array:new Uint8Array([255,255,255,255]),width:1,height:1});let k=[["tDepth",P]],B=(0,m.yb)(),_=(0,m.yb)(),R=(0,m.yb)(),F=(0,m.yb)(),L=(0,m.yb)(),z=(0,m.yb)(),N=(0,m.yb)(),G=(0,m.yb)(),U=(0,m.yb)(),V=(0,m.yb)(),j=(0,m.yb)(),H=(0,m.AO)(),q=(0,m.AO)(),X=(0,m.AO)(),W=(0,O.H)(),K=(0,m.Sg)(),Q=(0,C.u)(),Z=1,Y=(0,I.CP)(),$=(0,m.AO)();m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity);let J={uDrawId:g.IO.create(0),uModel:g.IO.create(m.yb.identity()),uView:g.IO.create(_),uInvView:g.IO.create(R),uModelView:g.IO.create(F),uInvModelView:g.IO.create(L),uInvProjection:g.IO.create(z),uProjection:g.IO.create((0,m.yb)()),uModelViewProjection:g.IO.create(N),uInvModelViewProjection:g.IO.create(G),uHasHeadRotation:g.IO.create(!1),uInvHeadRotation:g.IO.create(U),uHasEyeCamera:g.IO.create(!1),uModelViewEye:g.IO.create(V),uInvModelViewEye:g.IO.create(j),uIsAsymmetricProjection:g.IO.create(!1),uIsOrtho:g.IO.create(1),uViewOffset:g.IO.create(K),uModelScale:g.IO.create(1),uPixelRatio:g.IO.create(e.pixelRatio),uViewport:g.IO.create(f.l_.toVec4((0,m.T8)(),u)),uDrawingBufferSize:g.IO.create(p),uCameraPosition:g.IO.create(q),uCameraDir:g.IO.create(H),uCameraPlane:g.IO.create(O.H.toArray(W,(0,m.T8)(),0)),uNear:g.IO.create(1),uFar:g.IO.create(1e4),uFog:g.IO.create(!0),uFogNear:g.IO.create(1),uFogFar:g.IO.create(1e4),uFogColor:g.IO.create(y),uRenderMask:g.IO.create(0),uMarkingDepthTest:g.IO.create(!1),uPickType:g.IO.create(c.None),uMarkingType:g.IO.create(d.None),uTransparentBackgroun
3397d:g.IO.create(!1),uLightDirection:g.IO.create(l.direction),uLightColor:g.IO.create(l.color),uAmbientColor:g.IO.create($),uPickingAlphaThreshold:g.IO.create(s.pickingAlphaThreshold),uHighlightColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.highlightColor)),uSelectColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.selectColor)),uDimColor:g.IO.create(h.Il.toVec3Normalized((0,m.AO)(),s.dimColor)),uHighlightStrength:g.IO.create(s.highlightStrength),uSelectStrength:g.IO.create(s.selectStrength),uDimStrength:g.IO.create(s.dimStrength),uMarkerPriority:g.IO.create(s.markerPriority),uMarkerAverage:g.IO.create(0),uXrayEdgeFalloff:g.IO.create(s.xrayEdgeFalloff),uCelSteps:g.IO.create(s.celSteps),uExposure:g.IO.create(s.exposure)},ee=Object.entries(J),et=!0,er=(t,n,o)=>{var s,l,u;if(t.state.disposed||!t.state.visible||!t.state.pickable&&"pick"===n||!t.values.drawCount.ref.value||(I.CP.scaleNX(Y,t.values.boundingSphere.ref.value,Z),!C.u.intersectsSphere3D(Q,Y)))return;let[c,d]=t.values.uLod.ref.value;if(0!==c||0!==d){let{center:e,radius:t}=Y,r=O.H.distanceToPoint(W,e);if(r+t<c*Z||r-t>d*Z)return}if(1===Z){if(null!==D&&D(Y))return;let r=t.values.instanceGrid.ref.value.cellSize>0,a=t.values.uInstanceCount.ref.value>1;r&&(a||t.values.lodLevels)?t.cull(W,Q,D,e.stats):t.uncull()}else if(t.values.lodLevels){let{center:e,radius:r}=Y,a=O.H.distanceToPoint(W,e);t.cullSimple(a,r,Z)}else t.uncull();let p=t.getProgram(n);if(i.currentProgramId!==p.id&&(et=!0,p.use()),et&&(p.setUniforms(ee),p.bindTextures(k,0),et=!1),"directVolume"===t.values.dGeometryType.ref.value){if("color"!==n)return;i.disable(r.CULL_FACE),i.frontFace(r.CCW)}else o===a.BlendedFront?(i.enable(r.CULL_FACE),(null===(s=t.values.dFlipSided)||void 0===s?void 0:s.ref.value)?(i.frontFace(r.CW),i.cullFace(r.FRONT)):(i.frontFace(r.CCW),i.cullFace(r.BACK))):o===a.BlendedBack?(i.enable(r.CULL_FACE),(null===(l=t.values.dFlipSided)||void 0===l?void 0:l.ref.value)?(i.frontFace(r.CW),i.cullFace(r.BACK)):(i.frontFace(r.CCW),i.cullFace(r.FRONT))):(t.values.uDoubleSided?t.values.uDoubleSided.ref.value||t.values.hasReflection.ref.value?i.disable(r.CULL_FACE):i.enable(r.CULL_FACE):i.disable(r.CULL_FACE),(null===(u=t.values.dFlipSided)||void 0===u?void 0:u.ref.value)?(i.frontFace(r.CW),i.cullFace(r.FRONT)):(i.frontFace(r.CCW),i.cullFace(r.BACK)));t.render(n,k.length)},ea=(e,t,a,n,o)=>{(0,x.H0)(k,"tDepth",a||P),Z=t.scale,g.IO.update(J.uModel,m.yb.scaleUniformly(B,e.view,Z)),g.IO.update(J.uModelView,m.yb.mul(F,t.view,B)),g.IO.update(J.uInvModelView,m.yb.invert(L,F)),g.IO.update(J.uModelViewProjection,m.yb.mul(N,F,t.projection)),g.IO.update(J.uInvModelViewProjection,m.yb.invert(G,N)),g.IO.updateIfChanged(J.uRenderMask,n),g.IO.updateIfChanged(J.uMarkingDepthTest,o),m.yb.isZero(t.viewEye)?(g.IO.updateIfChanged(J.uHasEyeCamera,!1),g.IO.updateIfChanged(J.uModelViewEye,m.yb.id),g.IO.updateIfChanged(J.uInvModelViewEye,m.yb.id)):(g.IO.updateIfChanged(J.uHasEyeCamera,!0),g.IO.update(J.uModelViewEye,m.yb.mul(V,t.viewEye,B)),g.IO.update(J.uInvModelViewEye,m.yb.invert(j,V))),i.enable(r.SCISSOR_TEST),i.colorMask(!0,!0,!0,!0);let{x:s,y:l,width:c,height:d}=u;i.viewport(s,l,c,d),i.scissor(s,l,c,d),et=!0,i.currentRenderItemId=-1},en=function(e){var t,r,a,n;let i=(0,S.uZ)(e.values.alpha.ref.value*e.state.alphaFactor,0,1),o=(null===(t=e.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="on"||(null===(r=e.values.dXrayShaded)||void 0===r?void 0:r.ref.value)==="inverted";return 1===i&&1!==e.values.transparencyAverage.ref.value&&"directVolume"!==e.values.dGeometryType.ref.value&&(null===(a=e.values.dPointStyle)||void 0===a?void 0:a.ref.value)!=="fuzzy"&&!o||(null===(n=e.values.dTransparentBackfaces)||void 0===n?void 0:n.ref.value)==="opaque"},ei=function(e){var t,r,a;let n=(0,S.uZ)(e.values.alpha.ref.value*e.state.alphaFactor,0,1),i=(null===(t=e.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="on"||(null===(r=e.values.dXrayShaded)||void 0===r?void 0:r.ref.value)==="inverted";return 0!==n&&(n<1||e.values.transparencyAverage.ref.value>0||"directVolume"===e.values.dGeometryType.ref.value||(null===(a=e.values.dPointStyle)||void 0===a?void 0:a.ref.value)==="fuzzy"||"text"===e.values.dGeometryType.ref.value||"image"===e.values.dGeometryType.ref.value||i)},eo=(t,o)=>{T.kM&&e.timer.mark("Renderer.renderOpaque"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;
3397for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderOpaque")},es=(t,o)=>{var s,l;T.kM&&e.timer.mark("Renderer.renderBlendedTransparent"),w?i.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA):i.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA),i.enable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!1),ea(t,o,null,n.Transparent,!1);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e){let t=u[e];ei(t)&&((null===(s=t.values.uDoubleSided)||void 0===s?void 0:s.ref.value)?((null===(l=t.values.dTransparentBackfaces)||void 0===l?void 0:l.ref.value)!=="opaque"&&er(t,"color",a.BlendedBack),er(t,"color",a.BlendedFront)):er(t,"color",a.None))}T.kM&&e.timer.markEnd("Renderer.renderBlendedTransparent")};return{clear:(e,t,a)=>{i.enable(r.SCISSOR_TEST),i.enable(r.DEPTH_TEST),i.colorMask(!0,!0,!0,!0),i.depthMask(!0),a||w&&!t?i.clearColor(0,0,0,0):e?i.clearColor(y[0],y[1],y[2],1):i.clearColor(1,1,1,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT)},clearDepth:(e=!1)=>{i.enable(r.SCISSOR_TEST),i.enable(r.DEPTH_TEST),i.depthMask(!0),e?(i.colorMask(!0,!0,!0,!0),i.clearColor(1,1,1,1),r.clear(r.COLOR_BUFFER_BIT|r.DEPTH_BUFFER_BIT)):r.clear(r.DEPTH_BUFFER_BIT)},update:(e,t)=>{g.IO.update(J.uView,e.view),g.IO.update(J.uInvView,m.yb.invert(R,e.view)),g.IO.update(J.uProjection,e.projection),g.IO.update(J.uInvProjection,m.yb.invert(z,e.projection)),g.IO.updateIfChanged(J.uIsOrtho,"orthographic"===e.state.mode?1:0),g.IO.update(J.uViewOffset,e.viewOffset.enabled?m.Sg.set(K,16*e.viewOffset.offsetX,16*e.viewOffset.offsetY):m.Sg.set(K,0,0)),g.IO.updateIfChanged(J.uModelScale,e.scale),g.IO.update(J.uCameraPosition,m.yb.getTranslation(q,R)),m.AO.scale(X,e.state.target,e.scale),m.AO.normalize(H,m.AO.sub(H,X,q)),g.IO.update(J.uCameraDir,H),g.IO.updateIfChanged(J.uFar,e.far),g.IO.updateIfChanged(J.uNear,e.near),g.IO.updateIfChanged(J.uFog,e.state.fog>0),g.IO.updateIfChanged(J.uFogFar,e.fogFar),g.IO.updateIfChanged(J.uFogNear,e.fogNear),g.IO.updateIfChanged(J.uTransparentBackground,w),C.u.fromProjectionMatrix(Q,e.projectionView),O.H.copy(W,Q[C.u.PlaneIndex.Near]),W.constant-=O.H.distanceToPoint(W,q),g.IO.update(J.uCameraPlane,O.H.toArray(W,J.uCameraPlane.ref.value,0)),g.IO.updateIfChanged(J.uMarkerAverage,t.markerAverage),m.yb.isZero(e.headRotation)?(g.IO.updateIfChanged(J.uHasHeadRotation,!1),g.IO.updateIfChanged(J.uInvHeadRotation,m.yb.id),g.IO.update(J.uLightDirection,l.direction)):(g.IO.updateIfChanged(J.uHasHeadRotation,!0),g.IO.update(J.uInvHeadRotation,m.yb.invert(U,e.headRotation)),g.IO.update(J.uLightDirection,M(l,U))),g.IO.update(J.uIsAsymmetricProjection,e.isAsymmetricProjection)},renderPick:(t,o,s,l)=>{T.kM&&e.timer.mark("Renderer.renderPick"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1),g.IO.updateIfChanged(J.uPickType,l);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e)u[e].state.colorOnly||er(u[e],s,a.None);T.kM&&e.timer.markEnd("Renderer.renderPick")},renderDepth:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepth"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e)er(s[e],"depth",a.None);T.kM&&e.timer.markEnd("Renderer.renderDepth")},renderDepthOpaque:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepthOpaque"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"depth",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDepthOpaque")},renderDepthOpaqueBack:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderDepthOpaqueBack"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),i.depthFunc(r.GREATER),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"depth",a.BlendedBack)}i.depthFunc(r.LESS),T.kM&&e.timer.markEnd("Renderer.renderDepthOpaqueBack")},renderDepthTransparent:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderDepthTransparent"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,s,n.Transparent,!1);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e){let t=l[e];ei(t)&&er(t,"depth",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDepthTransparent")},renderMarkingDepth:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderMarkingDepth"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.All,!1),g.IO.updateIfChanged(J.uMarkingType,d.Depth);let{renderables:s}=t;
3397for(let e=0,t=s.length;e<t;++e){let t=s[e];0!==(0,S.uZ)(t.values.alpha.ref.value*t.state.alphaFactor,0,1)&&1!==t.values.transparencyAverage.ref.value&&1!==t.values.markerAverage.ref.value&&er(s[e],"marking",a.None)}T.kM&&e.timer.markEnd("Renderer.renderMarkingDepth")},renderMarkingMask:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderMarkingMask"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,s,n.All,!!s),g.IO.updateIfChanged(J.uMarkingType,d.Mask);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e)l[e].values.markerAverage.ref.value>0&&er(l[e],"marking",a.None);T.kM&&e.timer.markEnd("Renderer.renderMarkingMask")},renderEmissive:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderEmissive"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"emissive",a.None)}T.kM&&e.timer.markEnd("Renderer.renderEmissive")},renderTracing:(t,o)=>{T.kM&&e.timer.mark("Renderer.renderTracing"),i.disable(r.BLEND),i.enable(r.DEPTH_TEST),i.depthMask(!0),ea(t,o,null,n.Opaque,!1);let{renderables:s}=t;for(let e=0,t=s.length;e<t;++e){let t=s[e];en(t)&&er(t,"tracing",a.None)}T.kM&&e.timer.markEnd("Renderer.renderTracing")},renderBlended:(e,t)=>{e.hasOpaque&&eo(e,t),e.opacityAverage<1&&es(e,t)},renderOpaque:eo,renderBlendedTransparent:es,renderVolume:(t,o,s)=>{T.kM&&e.timer.mark("Renderer.renderVolume"),i.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),i.enable(r.BLEND),i.disable(r.DEPTH_TEST),i.depthMask(!1),ea(t,o,s,n.Transparent,!1);let{renderables:l}=t;for(let e=0,t=l.length;e<t;++e){let t=l[e];"directVolume"===t.values.dGeometryType.ref.value&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderVolume")},renderWboitTransparent:(t,r,i)=>{T.kM&&e.timer.mark("Renderer.renderWboitTransparent"),ea(t,r,i,n.Transparent,!1);let{renderables:o}=t;for(let e=0,t=o.length;e<t;++e){let t=o[e];ei(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderWboitTransparent")},renderDpoitTransparent:(t,o,s,l)=>{T.kM&&e.timer.mark("Renderer.renderDpoitTransparent"),i.enable(r.BLEND),(0,x.H0)(k,"tDpoitDepth",l.depth),(0,x.H0)(k,"tDpoitFrontColor",l.frontColor),(0,x.H0)(k,"tDpoitBackColor",l.backColor),ea(t,o,s,n.Transparent,!1);let{renderables:u}=t;for(let e=0,t=u.length;e<t;++e){let t=u[e];ei(t)&&er(t,"color",a.None)}T.kM&&e.timer.markEnd("Renderer.renderDpoitTransparent")},setProps:e=>{void 0!==e.backgroundColor&&e.backgroundColor!==s.backgroundColor&&(s.backgroundColor=e.backgroundColor,h.Il.toVec3Normalized(y,s.backgroundColor),g.IO.update(J.uFogColor,m.AO.copy(J.uFogColor.ref.value,y))),void 0!==e.pickingAlphaThreshold&&e.pickingAlphaThreshold!==s.pickingAlphaThreshold&&(s.pickingAlphaThreshold=e.pickingAlphaThreshold,g.IO.update(J.uPickingAlphaThreshold,s.pickingAlphaThreshold)),void 0!==e.colorMarker&&e.colorMarker!==s.colorMarker&&(s.colorMarker=e.colorMarker),void 0!==e.highlightColor&&e.highlightColor!==s.highlightColor&&(s.highlightColor=e.highlightColor,g.IO.update(J.uHighlightColor,h.Il.toVec3Normalized(J.uHighlightColor.ref.value,s.highlightColor))),void 0!==e.selectColor&&e.selectColor!==s.selectColor&&(s.selectColor=e.selectColor,g.IO.update(J.uSelectColor,h.Il.toVec3Normalized(J.uSelectColor.ref.value,s.selectColor))),void 0!==e.dimColor&&e.dimColor!==s.dimColor&&(s.dimColor=e.dimColor,g.IO.update(J.uDimColor,h.Il.toVec3Normalized(J.uDimColor.ref.value,s.dimColor))),void 0!==e.highlightStrength&&e.highlightStrength!==s.highlightStrength&&(s.highlightStrength=e.highlightStrength,g.IO.update(J.uHighlightStrength,s.highlightStrength)),void 0!==e.selectStrength&&e.selectStrength!==s.selectStrength&&(s.selectStrength=e.selectStrength,g.IO.update(J.uSelectStrength,s.selectStrength)),void 0!==e.dimStrength&&e.dimStrength!==s.dimStrength&&(s.dimStrength=e.dimStrength,g.IO.update(J.uDimStrength,s.dimStrength)),void 0!==e.markerPriority&&e.markerPriority!==s.markerPriority&&(s.markerPriority=e.markerPriority,g.IO.update(J.uMarkerPriority,s.markerPriority)),void 0!==e.xrayEdgeFalloff&&e.xrayEdgeFalloff!==s.xrayEdgeFalloff&&(s.xrayEdgeFalloff=e.xrayEdgeFalloff,g.IO.update(J.uXrayEdgeFalloff,s.xrayEdgeFalloff)),void 0!==e.celSteps&&e.celSteps!==s.celSteps&&(s.celSteps=e.celSteps,g.IO.update(J.uCelSteps,s.celSteps)),void 0!==e.exposure&&e.exposure!==s.exposure&&(s.exposure=e.exposure,g.IO.update(J.uExposure,s.exposure)),void 0===e.light||(0,g.vZ)(e.light,s.light)||(s.light=e.light,Object.assign(l,E(e.light,l)),g.IO.update(J.uLightDirection,l.direction),g.IO.update(J.uLightColor,l.color)),void 0!==e.ambientColor&&e.ambientColor!==s.ambientColor&&(s.ambientColor=e.ambientColor,m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity),g.IO.update(J.uAmbientColor,$)),void 0!==e.ambientIntensity&&e.ambientIntensity!==s.ambientIntensity&&(s.ambientIntensity=e.ambientIntensity,m.AO.scale($,h.Il.toArrayNormalized(s.ambientColor,$,0),s.ambientIntensity),g.IO.update(J.uAmbientColor,$))}
3397,setViewport:(e,t,r,a)=>{i.viewport(e,t,r,a),i.scissor(e,t,r,a),(e!==u.x||t!==u.y||r!==u.width||a!==u.height)&&(f.l_.set(u,e,t,r,a),g.IO.update(J.uViewport,m.T8.set(J.uViewport.ref.value,e,t,r,a)))},setTransparentBackground:e=>{w=e},setDrawingBufferSize:(e,t)=>{(e!==p[0]||t!==p[1])&&g.IO.update(J.uDrawingBufferSize,m.Sg.set(p,e,t))},setPixelRatio:e=>{g.IO.update(J.uPixelRatio,e)},setOcclusionTest:e=>{D=e},props:s,get stats(){return{programCount:e.stats.resourceCounts.program,shaderCount:e.stats.resourceCounts.shader,attributeCount:e.stats.resourceCounts.attribute,elementsCount:e.stats.resourceCounts.elements,framebufferCount:e.stats.resourceCounts.framebuffer,renderbufferCount:e.stats.resourceCounts.renderbuffer,textureCount:e.stats.resourceCounts.texture,vertexArrayCount:e.stats.resourceCounts.vertexArray,drawCount:o.drawCount,instanceCount:o.instanceCount,instancedDrawCount:o.instancedDrawCount}},get light(){return l},get ambientColor(){return J.uAmbientColor.ref.value},dispose:()=>{}}}},32747:function(e,t,r){r.d(t,{x:function(){return n}});var a,n,i=r(67241),o=r(38675),s=r(43975);(a||(a={})).create=function(){return{view:o.y.identity(),position:s.A.create(0,0,0),direction:s.A.create(0,0,-1),up:s.A.create(0,1,0)}};var l=r(30441),u=r(68332);class c{constructor(){this.removeList=(0,u.S)(),this.removeMap=new Map,this.addList=(0,u.S)(),this.addMap=new Map}get isEmpty(){return 0===this.removeList.count&&0===this.addList.count}get size(){return this.removeMap.size+this.addMap.size}add(e){if(this.removeMap.has(e)){let t=this.removeMap.get(e);this.removeMap.delete(e),this.removeList.remove(t)}if(this.addMap.has(e))return;let t=this.addList.addLast(e);this.addMap.set(e,t)}remove(e){if(this.addMap.has(e)){let t=this.addMap.get(e);this.addMap.delete(e),this.addList.remove(t)}if(this.removeMap.has(e))return;let t=this.removeList.addLast(e);this.removeMap.set(e,t)}tryGetRemove(){let e=this.removeList.removeFirst();return e&&this.removeMap.delete(e),e}tryGetAdd(){let e=this.addList.removeFirst();return e&&this.addMap.delete(e),e}}var d=r(58400),p=r(36111),f=r(83576),m=r(69062),h=r(23833),g=r(68303);let b=new f.q("98");function y(e,t,r){b.reset();for(let t=0,a=e.length;t<a;++t){if(r&&!e[t].state.visible||!e[t].values.drawCount.ref.value)continue;let a=e[t].values.boundingSphere.ref.value;a.radius&&b.includeSphere(a)}b.finishedIncludeStep();for(let t=0,a=e.length;t<a;++t){if(r&&!e[t].state.visible||!e[t].values.drawCount.ref.value)continue;let a=e[t].values.boundingSphere.ref.value;a.radius&&b.radiusSphere(a)}return b.getSphere(t)}function x(e,t){let r=e.getProgram("color").id,a=t.getProgram("color").id,n=e.materialId,i=t.materialId;return r!==a?r-a:n!==i?n-i:e.id-t.id}(n||(n={})).create=function(e,t="blended",r={dColorMarker:!0,dLightCount:1}){let n=new Map,o=[],s=(0,l.C)(),u=(0,l.C)(),f=[],b=[],S=!0,T=!0,C=!0,O=!0,I=!0,A=!0,w=!0,D=0,E=0,M=0,P=0,k=!1,{view:B,position:_,direction:R,up:F}=a.create(),L=new c,z=-1;function N(){let e=function(){let e=23;for(let t=0,r=o.length;t<r;++t)o[t].state.visible&&(e=31*e+o[t].id|0);return -1===(e=(0,m.Z0)(e))&&(e=0),e}();return e!==z&&(T=!0,C=!0,O=!0,I=!0,A=!0,w=!0,z=e,!0)}return{view:B,position:_,direction:R,up:F,renderables:o,primitives:{view:B,position:_,direction:R,up:F,renderables:f},volumes:{view:B,position:_,direction:R,up:F,renderables:b},syncVisibility:N,setTransparency:e=>{t=e;for(let t=0,r=o.length;t<r;++t)o[t].setTransparency(e)},setGlobals:e=>{for(let t of(r=e,o))g.IO.updateIfChanged(t.values.dColorMarker,e.dColorMarker),g.IO.updateIfChanged(t.values.dLightCount,e.dLightCount),t.update()},update(e,t){var r;if(e)for(let t=0,a=e.length;t<a;++t)null===(r=n.get(e[t]))||void 0===r||r.update();else for(let e=0,t=o.length;e<t;++e)o[e].update();t?N():(S=!0,T=!0),C=!0,O=!0,I=!0,A=!0,w=!0},add:e=>L.add(e),remove:e=>L.remove(e),commit:(a=Number.MAX_VALUE)=>(function(a){let s=(0,d.z)(),l=0;for(;;){let e=L.tryGetRemove();if(!e)break;if(!function(e){let t=n.get(e);t&&(t.dispose(),(0,p.iV)(o,t),(0,p.iV)(f,t),(0,p.iV)(b,t),n.delete(e),S=!0,T=!0)}(e),++l%100==0&&(0,d.z)()-s>a)return!1}for(;;){let u=L.tryGetAdd();if(!u)break;
3397if(!function(a){if(n.has(a))console.warn(`RenderObject with id '${a.id}' already present`);else{let s=(0,i.OG)(e,a,t,r);o.push(s),"direct-volume"===a.type?b.push(s):f.push(s),n.set(a,s),S=!0,T=!0}}(u),++l%100==0&&(0,d.z)()-s>a)return!1}return o.sort(x),C=!0,O=!0,I=!0,A=!0,w=!0,!0})(a),get commitQueueSize(){return L.size},get needsCommit(){return!L.isEmpty},has:e=>n.has(e),clear:()=>{for(let e=0,t=o.length;e<t;++e)o[e].dispose();o.length=0,f.length=0,b.length=0,n.clear(),S=!0,T=!0},forEach:e=>{n.forEach(e)},get count(){return o.length},get boundingSphere(){return S&&(y(o,s,!1),S=!1),s},get boundingSphereVisible(){return T&&(y(o,u,!0),T=!1),u},get transparency(){return t},get markerAverage(){return C&&(D=function(){if(0===f.length)return 0;let e=0,t=0;for(let r=0,a=f.length;r<a;++r)f[r].state.visible&&(t+=f[r].values.markerAverage.ref.value,e+=1);return e>0?t/e:0}(),C=!1),D},get emissiveAverage(){return O&&(E=function(){if(0===f.length)return 0;let e=0,t=0;for(let r=0,a=f.length;r<a;++r)f[r].state.visible&&(t+=f[r].values.emissiveAverage.ref.value+f[r].values.uEmissive.ref.value,e+=1);return e>0?t/e:0}(),O=!1),E},get opacityAverage(){return I&&(M=function(){var e,t,r;if(0===f.length)return 0;let a=0,n=0;for(let i=0,o=f.length;i<o;++i){let o=f[i];if(!o.state.visible)continue;let s=(0,h.uZ)(o.values.alpha.ref.value*o.state.alphaFactor,0,1),l=(null===(e=o.values.dXrayShaded)||void 0===e?void 0:e.ref.value)==="on"||(null===(t=o.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="inverted"?.5:1,u=(null===(r=o.values.dPointStyle)||void 0===r?void 0:r.ref.value)==="fuzzy"?.5:1,c="text"===o.values.dGeometryType.ref.value?.5:1,d="image"===o.values.dGeometryType.ref.value?.5:1;n+=(1-o.values.transparencyAverage.ref.value)*s*l*u*c*d,a+=1}return a>0?n/a:0}(),I=!1),M},get transparencyMin(){return A&&(P=function(){var e,t,r;if(0===f.length)return 1;let a=1,n=[];for(let i=0,o=f.length;i<o;++i){let o=f[i];if(!o.state.visible)continue;n.length=0;let s=(0,h.uZ)(o.values.alpha.ref.value*o.state.alphaFactor,0,1);s<1&&n.push(1-s),((null===(e=o.values.dXrayShaded)||void 0===e?void 0:e.ref.value)==="on"||(null===(t=o.values.dXrayShaded)||void 0===t?void 0:t.ref.value)==="inverted"||(null===(r=o.values.dPointStyle)||void 0===r?void 0:r.ref.value)==="fuzzy"||"text"===o.values.dGeometryType.ref.value||"image"===o.values.dGeometryType.ref.value)&&n.push(.5),o.values.transparencyMin.ref.value>0&&n.push(o.values.transparencyMin.ref.value),a=Math.min(a,...n)}return a}(),A=!1),P},get hasOpaque(){return w&&(k=function(){var e;if(0===f.length)return!1;for(let t=0,r=f.length;t<r;++t){let r=f[t];if(r.state.visible&&(r.state.opaque||1===r.state.alphaFactor&&1===r.values.alpha.ref.value&&1!==r.values.transparencyAverage.ref.value||(null===(e=r.values.dTransparentBackfaces)||void 0===e?void 0:e.ref.value)==="opaque"))return!0}return!1}(),w=!1),k}}}},45705:function(e,t,r){r.d(t,{gz:function(){return ev},mE:function(){return eS},Oc:function(){return eT},tc:function(){return ey},pb:function(){return ex},lx:function(){return eh},Lq:function(){return ep},fj:function(){return eg},cs:function(){return eb},AA:function(){return eA}});var a=r(16252),n=r(62131),i=r(97667);let o=` 3398float preFogAlpha = gl_FragColor.a; 3399if (uFog) { 3400 float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar); 3401 float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ)); 3402 float fogAlpha = (1.0 - fogFactor) * gl_FragColor.a; 3403 if (!uTransparentBackground) { 3404 if (gl_FragColor.a < 1.0) { 3405 // transparent objects are blended with background color 3406 gl_FragColor.a = fogAlpha; 3407 } else { 3408 // mix opaque objects with background color 3409 gl_FragColor.rgb = mix(gl_FragColor.rgb, uFogColor, fogFactor); 3410 } 3411 } else { 3412 #if defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume) 3413 if (gl_FragColor.a < 1.0) { 3414 // transparent objects are blended with background color 3415 gl_FragColor.a = fogAlpha; 3416 } else { 3417 // opaque objects need to be pre-multiplied alpha 3418 gl_FragColor.rgb *= fogAlpha; 3419 gl_FragColor.a = fogAlpha; 3420 } 3421 #else 3422 // pre-multiplied alpha expected for transparent background 3423 gl_FragColor.rgb *= fogAlpha; 3424 gl_FragColor.a = fogAlpha; 3425 #endif 3426 } 3427}
3427 else if (uTransparentBackground) { 3428 #if !defined(dRenderVariant_colorDpoit) && !defined(dGeometryType_directVolume) 3429 // pre-multiplied alpha expected for transparent background 3430 gl_FragColor.rgb *= gl_FragColor.a; 3431 #endif 3432} 3433`,s=` 3434if (interior) { 3435 material.rgb = mix(material.rgb, uInteriorColor.rgb, uInteriorColor.a); 3436 3437 float isf = clamp(uInteriorSubstance.a, 0.0, 0.99); // clamp to avoid artifacts 3438 metalness = mix(metalness, uInteriorSubstance.r, isf); 3439 roughness = mix(roughness, uInteriorSubstance.g, isf); 3440 bumpiness = mix(bumpiness, uInteriorSubstance.b, isf); 3441 3442 #ifdef dTransparentBackfaces_opaque 3443 material.a = 1.0; 3444 #endif 3445} 3446`,l=` 3447#if defined(dIgnoreLight) 3448 #ifdef bumpEnabled 3449 if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) { 3450 material.rgb += fbm(vModelPosition * uBumpFrequency) * uBumpAmplitude * bumpiness; 3451 material.rgb -= 0.5 * uBumpAmplitude * bumpiness; 3452 } 3453 #endif 3454 3455 #if defined(dRenderVariant_color) 3456 material.rgb += material.rgb * emissive; 3457 #endif 3458 3459 gl_FragColor = material; 3460#else 3461 #ifdef bumpEnabled 3462 if (uBumpFrequency > 0.0 && uBumpAmplitude > 0.0 && bumpiness > 0.0) { 3463 normal = perturbNormal(-vViewPosition, normal, fbm(vModelPosition * uBumpFrequency), (uBumpAmplitude * bumpiness) / uBumpFrequency); 3464 } 3465 #endif 3466 3467 vec4 color = material; 3468 3469 #if defined(dCelShaded) 3470 // clamp to avoid artifacts 3471 metalness = clamp(metalness, 0.0, 0.99); 3472 roughness = clamp(roughness, 0.05, 1.0); 3473 #endif 3474 3475 GeometricContext geometry; 3476 geometry.position = -vViewPosition; 3477 geometry.normal = normal; 3478 geometry.viewDir = normalize(vViewPosition); 3479 3480 PhysicalMaterial physicalMaterial; 3481 physicalMaterial.diffuseColor = color.rgb * (1.0 - metalness); 3482 #ifdef enabledFragDepth 3483 physicalMaterial.roughness = min(max(roughness, 0.0525), 1.0); 3484 #else 3485 vec3 dxy = max(abs(dFdx(normal)), abs(dFdy(normal))); 3486 float geometryRoughness = max(max(dxy.x, dxy.y), dxy.z); 3487 physicalMaterial.roughness = min(max(roughness, 0.0525) + geometryRoughness, 1.0); 3488 #endif 3489 physicalMaterial.specularColor = mix(vec3(0.04), color.rgb, metalness); 3490 physicalMaterial.specularF90 = 1.0; 3491 3492 IncidentLight directLight; 3493 3494 vec3 outgoingLight = vec3(0.0); 3495 3496 #if defined(dCelShaded) 3497 float celDiffuse; 3498 float celSpecular; 3499 float celIntensity; 3500 3501 #pragma unroll_loop_start 3502 for (int i = 0; i < dLightCount; ++i) { 3503 directLight.direction = uLightDirection[i]; 3504 directLight.color = uLightColor[i] * PI; // * PI for punctual light 3505 3506 celDiffuse = RECIPROCAL_PI * max(dot(geometry.normal, directLight.direction), 0.0) * (1.0 - metalness); 3507 celSpecular = luminance(saturate(dot(geometry.normal, directLight.direction)) * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, physicalMaterial.specularColor, physicalMaterial.specularF90, roughness)); 3508 3509 celIntensity = celDiffuse + celSpecular; 3510 celIntensity = ceil(celIntensity * uCelSteps) / uCelSteps; 3511 3512 outgoingLight += color.rgb * directLight.color * celIntensity; 3513 } 3514 #pragma unroll_loop_end 3515 3516 outgoingLight += physicalMaterial.diffuseColor * luminance(uAmbientColor); 3517 #else 3518 ReflectedLight reflectedLight = ReflectedLight(vec3(0.0), vec3(0.0), vec3(0.0), vec3(0.0)); 3519 3520 #pragma unroll_loop_start 3521 for (int i = 0; i < dLightCount; ++i) { 3522 directLight.direction = uLightDirection[i]; 3523 directLight.color = uLightColor[i] * PI; // * PI for punctual light 3524 RE_Direct_Physical(directLight, geometry, physicalMaterial, reflectedLight); 3525 } 3526 #pragma unroll_loop_end 3527 3528 vec3 irradiance = uAmbientColor * PI; // * PI for punctual light 3529 RE_IndirectDiffuse_Physical(irradiance, geometry, physicalMaterial, reflectedLight); 3530 3531 // indirect specular only metals 3532 vec3 radiance = uAmbientColor * metalness; 3533 vec3 iblIrradiance = uAmbientColor * metalness; 3534 vec3 clearcoatRadiance = vec3(0.0); 3535 RE_IndirectSpecular_Physical(radiance, iblIrradiance, clearcoatRadiance, geometry, physicalMaterial, reflectedLight); 3536 3537 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular; 3538 #endif 3539 outgoingLight = clamp(outgoingLight, 0.01, 0.99); // prevents black artifacts on specular highlight with transparent background 3540 3541 #if defined(dRenderVariant_color) 3542 outgoingLight += color.rgb * emissive; 3543 #endif 3544
3545 gl_FragColor = vec4(outgoingLight, color.a); 3546#endif 3547 3548gl_FragColor.rgb *= uExposure; 3549`,u=` 3550 3551#if defined(dColorMarker) 3552 if (marker > 0.0) { 3553 if ((uMarkerPriority == 1 && marker != 2.0) || (uMarkerPriority != 1 && marker == 1.0)) { 3554 gl_FragColor.rgb = mix(gl_FragColor.rgb, uHighlightColor, uHighlightStrength); 3555 gl_FragColor.a = max(gl_FragColor.a, uHighlightStrength * 0.002); // for direct-volume rendering 3556 } else { 3557 gl_FragColor.rgb = mix(gl_FragColor.rgb, uSelectColor, uSelectStrength); 3558 gl_FragColor.a = max(gl_FragColor.a, uSelectStrength * 0.002); // for direct-volume rendering 3559 } 3560 } else if (uMarkerAverage > 0.0) { 3561 gl_FragColor.rgb = mix(gl_FragColor.rgb, uDimColor, uDimStrength); 3562 gl_FragColor.a = max(gl_FragColor.a, uDimStrength * 0.002); // for direct-volume rendering 3563 } 3564#endif 3565`,c=` 3566#if dClipObjectCount != 0 && defined(dClipping) 3567 #if defined(dClippingType_instance) 3568 vClipping = readFromTexture(tClipping, aInstance, uClippingTexDim).a; 3569 #elif defined(dMarkerType_groupInstance) 3570 vClipping = readFromTexture(tClipping, aInstance * float(uGroupCount) + group, uClippingTexDim).a; 3571 #endif 3572#endif 3573`,d=` 3574#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 3575 #if defined(dColorType_attribute) 3576 vColor.rgb = aColor; 3577 #elif defined(dColorType_instance) 3578 vColor.rgb = readFromTexture(tColor, aInstance, uColorTexDim).rgb; 3579 #elif defined(dColorType_group) 3580 #if defined(dDualColor) 3581 vec4 color2; 3582 if (aColorMode == 2.0) { 3583 vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb; 3584 } else { 3585 vColor.rgb = readFromTexture(tColor, group * 2.0, uColorTexDim).rgb; 3586 color2.rgb = readFromTexture(tColor, group * 2.0 + 1.0, uColorTexDim).rgb; 3587 } 3588 #else 3589 vColor.rgb = readFromTexture(tColor, group, uColorTexDim).rgb; 3590 #endif 3591 #elif defined(dColorType_groupInstance) 3592 #if defined(dDualColor) 3593 vec4 color2; 3594 if (aColorMode == 2.0) { 3595 vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb; 3596 } else { 3597 vColor.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0, uColorTexDim).rgb; 3598 color2.rgb = readFromTexture(tColor, (aInstance * float(uGroupCount) + group) * 2.0 + 1.0, uColorTexDim).rgb; 3599 } 3600 #else 3601 vColor.rgb = readFromTexture(tColor, aInstance * float(uGroupCount) + group, uColorTexDim).rgb; 3602 #endif 3603 #elif defined(dColorType_vertex) 3604 vColor.rgb = readFromTexture(tColor, vertexId, uColorTexDim).rgb; 3605 #elif defined(dColorType_vertexInstance) 3606 vColor.rgb = readFromTexture(tColor, int(aInstance) * uVertexCount + vertexId, uColorTexDim).rgb; 3607 #elif defined(dColorType_volume) 3608 vec3 cgridPos = (uColorGridTransform.w * (position - uColorGridTransform.xyz)) / uColorGridDim; 3609 vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb; 3610 #elif defined(dColorType_volumeInstance) 3611 vec3 cgridPos = (uColorGridTransform.w * (vModelPosition / uModelScale - uColorGridTransform.xyz)) / uColorGridDim; 3612 vColor.rgb = texture3dFrom2dLinear(tColorGrid, cgridPos, uColorGridDim, uColorTexDim).rgb; 3613 #endif 3614 3615 #ifdef dUsePalette 3616 vPaletteV = ((vColor.r * 256.0 * 256.0 * 255.0 + vColor.g * 256.0 * 255.0 + vColor.b * 255.0) - 1.0) / PALETTE_SCALE; 3617 #endif 3618 3619 #ifdef dOverpaint 3620 #if defined(dOverpaintType_instance) 3621 vOverpaint = readFromTexture(tOverpaint, aInstance, uOverpaintTexDim); 3622 #elif defined(dOverpaintType_groupInstance) 3623 vOverpaint = readFromTexture(tOverpaint, aInstance * float(uGroupCount) + group, uOverpaintTexDim); 3624 #elif defined(dOverpaintType_vertexInstance) 3625 vOverpaint = readFromTexture(tOverpaint, int(aInstance) * uVertexCount + vertexId, uOverpaintTexDim); 3626 #elif defined(dOverpaintType_volumeInstance) 3627 vec3 ogridPos = (uOverpaintGridTransform.w * (vModelPosition / uModelScale - uOverpaintGridTransform.xyz)) / uOverpaintGridDim; 3628 vOverpaint = texture3dFrom2dLinear(tOverpaintGrid, ogridPos, uOverpaintGridDim, uOverpaintTexDim); 3629 #endif 3630 3631 // pre-mix to avoid darkening due to empty overpaint 3632 #ifdef dColorType_uniform 3633 vOverpaint.rgb = mix(uColor.rgb, vOverpaint.rgb, vOverpaint.a); 3634 #else 3635 vOverpaint.rgb = mix(vColor.rgb, vOverpaint.rgb, vOverpaint.a); 3636 #endif 3637 vOverpaint *= uOverpaintStrength; 3638 #endif 3639 3640 #ifdef dEmissive 3641 #if defined(dEmissiveType_instance) 3642 vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a; 3643 #elif defined(dEmissiveType_groupInstance) 3644 vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a; 3645 #elif defined(dEmissiveType_vertexInstance) 3646 vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a; 3647 #elif defined(dEmissiveType_volumeInstance) 3648 vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim; 3649 vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a; 3650 #endif 3651 vEmissive *= uEmissiveStrength; 3652 #endif 3653 3654 #ifdef dSubstance 3655 #if defined(dSubstanceType_instance) 3656 vSubstance = readFromTexture(tSubstance, aInstance, uSubstanceTexDim); 3657 #elif defined(dSubstanceType_groupInstance) 3658 vSubstance = readFromTexture(tSubstance, aInstance * float(uGroupCount) + group, uSubstanceTexDim); 3659 #elif defined(dSubstanceType_vertexInstance) 3660 vSubstance = readFromTexture(tSubstance, int(aInstance) * uVertexCount + vertexId, uSubstanceTexDim); 3661 #elif defined(dSubstanceType_volumeInstance) 3662 vec3 sgridPos = (uSubstanceGridTransform.w * (vModelPosition / uModelScale - uSubstanceGridTransform.xyz)) / uSubstanceGridDim; 3663 vSubstance = texture3dFrom2dLinear(tSubstanceGrid, sgridPos, uSubstanceGridDim, uSubstanceTexDim); 3664 #endif 3665 3666 // pre-mix to avoid artifacts due to empty substance 3667 vSubstance.rgb = mix(vec3(uMetalness, uRoughness, uBumpiness), vSubstance.rgb, vSubstance.a); 3668 vSubstance *= uSubstanceStrength; 3669 #endif 3670#elif defined(dRenderVariant_emissive) 3671 #ifdef dEmissive 3672 #if defined(dEmissiveType_instance) 3673 vEmissive = readFromTexture(tEmissive, aInstance, uEmissiveTexDim).a; 3674 #elif defined(dEmissiveType_groupInstance) 3675 vEmissive = readFromTexture(tEmissive, aInstance * float(uGroupCount) + group, uEmissiveTexDim).a; 3676 #elif defined(dEmissiveType_vertexInstance) 3677 vEmissive = readFromTexture(tEmissive, int(aInstance) * uVertexCount + vertexId, uEmissiveTexDim).a; 3678 #elif defined(dEmissiveType_volumeInstance) 3679 vec3 egridPos = (uEmissiveGridTransform.w * (vModelPosition / uModelScale - uEmissiveGridTransform.xyz)) / uEmissiveGridDim; 3680 vEmissive = texture3dFrom2dLinear(tEmissiveGrid, egridPos, uEmissiveGridDim, uEmissiveTexDim).a; 3681 #endif 3682 vEmissive *= uEmissiveStrength; 3683 #endif 3684#elif defined(dRenderVariant_pick) 3685 #ifdef requiredDrawBuffers 3686 vObject = vec4(packIntToRGB(float(uObjectId)), 1.0); 3687 vInstance = vec4(packIntToRGB(aInstance), 1.0); 3688 vGroup = vec4(packIntToRGB(group), 1.0); 3689 #else 3690 if (uPickType == 1) { 3691 vColor = vec4(packIntToRGB(float(uObjectId)), 1.0); 3692 } else if (uPickType == 2) { 3693 vColor = vec4(packIntToRGB(aInstance), 1.0); 3694 } else { 3695 vColor = vec4(packIntToRGB(group), 1.0); 3696 } 3697 #endif 3698#endif 3699 3700#ifdef dTransparency 3701 #if defined(dTransparencyType_instance)
3702 vTransparency = readFromTexture(tTransparency, aInstance, uTransparencyTexDim).a; 3703 #elif defined(dTransparencyType_groupInstance) 3704 vTransparency = readFromTexture(tTransparency, aInstance * float(uGroupCount) + group, uTransparencyTexDim).a; 3705 #elif defined(dTransparencyType_vertexInstance) 3706 vTransparency = readFromTexture(tTransparency, int(aInstance) * uVertexCount + vertexId, uTransparencyTexDim).a; 3707 #elif defined(dTransparencyType_volumeInstance) 3708 vec3 tgridPos = (uTransparencyGridTransform.w * (vModelPosition / uModelScale - uTransparencyGridTransform.xyz)) / uTransparencyGridDim; 3709 vTransparency = texture3dFrom2dLinear(tTransparencyGrid, tgridPos, uTransparencyGridDim, uTransparencyTexDim).a; 3710 #endif 3711 vTransparency *= uTransparencyStrength; 3712#endif 3713`,p=` 3714#ifdef dGeometryType_textureMesh 3715 float group = unpackRGBToInt(readFromTexture(tGroup, vertexId, uGeoTexDim).rgb); 3716#else 3717 float group = aGroup; 3718#endif 3719`,f=` 3720#if defined(dNeedsMarker) 3721 #if defined(dMarkerType_instance) 3722 vMarker = readFromTexture(tMarker, aInstance, uMarkerTexDim).a; 3723 #elif defined(dMarkerType_groupInstance) 3724 vMarker = readFromTexture(tMarker, aInstance * float(uGroupCount) + group, uMarkerTexDim).a; 3725 #endif 3726#endif 3727`,m=` 3728#if defined(dNeedsMarker) 3729 float marker = uMarker; 3730 if (uMarker == -1.0) { 3731 marker = floor(vMarker * 255.0 + 0.5); // rounding required to work on some cards on win 3732 } 3733#endif 3734 3735#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 3736 #if defined(dUsePalette) 3737 vec4 material = vec4(texture2D(tPalette, vec2(vPaletteV, 0.5)).rgb, uAlpha); 3738 #elif defined(dColorType_uniform) 3739 vec4 material = vec4(uColor, uAlpha); 3740 #elif defined(dColorType_varying) 3741 vec4 material = vec4(vColor.rgb, uAlpha); 3742 #endif 3743 3744 // mix material with overpaint 3745 #if defined(dOverpaint) 3746 material.rgb = mix(material.rgb, vOverpaint.rgb, vOverpaint.a); 3747 #endif 3748 3749 float emissive = uEmissive; 3750 #ifdef dEmissive 3751 emissive += vEmissive; 3752 #endif 3753 3754 float metalness = uMetalness; 3755 float roughness = uRoughness; 3756 float bumpiness = uBumpiness; 3757 #ifdef dSubstance 3758 float sf = clamp(vSubstance.a, 0.0, 0.99); // clamp to avoid artifacts 3759 metalness = mix(metalness, vSubstance.r, sf); 3760 roughness = mix(roughness, vSubstance.g, sf); 3761 bumpiness = mix(bumpiness, vSubstance.b, sf); 3762 #endif 3763 3764 #if defined(dXrayShaded) 3765 material.a = calcXrayShadedAlpha(material.a, normal); 3766 #endif 3767#elif defined(dRenderVariant_depth) 3768 if (fragmentDepth > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) { 3769 discard; 3770 } 3771 vec4 material; 3772 if (uRenderMask == MaskOpaque) { 3773 #if defined(dXrayShaded) 3774 discard; 3775 #endif 3776 #if defined(dTransparency) 3777 float dta = 1.0 - vTransparency; 3778 #if __VERSION__ == 100 || defined(dVaryingGroup) 3779 if (vTransparency < 0.1) dta = 1.0; // hard cutoff to avoid artifacts 3780 #endif 3781 3782 if (uAlpha * dta < 1.0) { 3783 discard; 3784 } 3785 #else 3786 if (uAlpha < 1.0) { 3787 discard; 3788 } 3789 #endif 3790 material = packDepthToRGBA(fragmentDepth); 3791 } else if (uRenderMask == MaskTransparent) { 3792 float alpha = uAlpha; 3793 #if defined(dTransparency) 3794 float dta = 1.0 - vTransparency; 3795 alpha *= dta; 3796 #endif 3797 3798 #ifdef dXrayShaded 3799 alpha = calcXrayShadedAlpha(alpha, normal); 3800 #else 3801 if (alpha == 1.0) { 3802 discard; 3803 } 3804 #endif 3805 material = packDepthWithAlphaToRGBA(fragmentDepth, alpha); 3806 } 3807#elif defined(dRenderVariant_marking) 3808 vec4 material; 3809 if(uMarkingType == 1) { 3810 if (marker > 0.0) 3811 discard; 3812 #ifdef enabledFragDepth 3813 material = packDepthToRGBA(gl_FragDepthEXT); 3814 #else 3815 material = packDepthToRGBA(gl_FragCoord.z); 3816 #endif 3817 } else { 3818 if (marker == 0.0) 3819 discard; 3820 float depthTest = 1.0; 3821 if (uMarkingDepthTest) { 3822 depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0; 3823 } 3824 bool isHighlight = intMod(marker, 2.0) > 0.1; 3825 float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar); 3826 float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ)); 3827 if (fogFactor == 1.0) 3828 discard; 3829 material = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor); 3830 } 3831#elif defined(dRenderVariant_emissive) 3832 float emissive = uEmissive; 3833 #ifdef dEmissive 3834 emissive += vEmissive; 3835 #endif 3836 vec4 material = vec4(emissive); 3837#endif 3838 3839// apply per-group transparency 3840#if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing))
3841 float ta = 1.0 - vTransparency; 3842 if (vTransparency < 0.09) ta = 1.0; // hard cutoff looks better 3843 3844 #if defined(dRenderVariant_pick) 3845 if (ta * uAlpha < uPickingAlphaThreshold) 3846 discard; // ignore so the element below can be picked 3847 #elif defined(dRenderVariant_emissive) 3848 if (ta < 1.0) 3849 discard; // emissive not supported with transparency 3850 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 3851 material.a *= ta; 3852 #endif 3853#endif 3854`,h=` 3855mat4 model = uModel * aTransform; 3856mat4 modelView = uView * model; 3857#ifdef dGeometryType_textureMesh 3858 vec3 position = readFromTexture(tPosition, vertexId, uGeoTexDim).xyz; 3859#else 3860 vec3 position = aPosition; 3861#endif 3862vec4 position4 = vec4(position, 1.0); 3863// for accessing tColorGrid in vert shader and for clipping in frag shader 3864vModelPosition = (model * position4).xyz; 3865vec4 mvPosition = modelView * position4; 3866vViewPosition = mvPosition.xyz; 3867gl_Position = uProjection * mvPosition; 3868`,g=` 3869#if defined(dSizeType_uniform) 3870 float size = uSize; 3871#elif defined(dSizeType_attribute) 3872 float size = aSize; 3873#elif defined(dSizeType_instance) 3874 float size = unpackRGBToInt(readFromTexture(tSize, aInstance, uSizeTexDim).rgb); 3875#elif defined(dSizeType_group) 3876 float size = unpackRGBToInt(readFromTexture(tSize, group, uSizeTexDim).rgb); 3877#elif defined(dSizeType_groupInstance) 3878 float size = unpackRGBToInt(readFromTexture(tSize, aInstance * float(uGroupCount) + group, uSizeTexDim).rgb); 3879#elif defined(dSizeType_vertex) 3880 float size = unpackRGBToInt(readFromTexture(tSize, vertexId, uSizeTexDim).rgb); 3881#elif defined(dSizeType_vertexInstance) 3882 float size = unpackRGBToInt(readFromTexture(tSize, int(aInstance) * uVertexCount + vertexId, uSizeTexDim).rgb); 3883#endif 3884 3885#if defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance) 3886 size /= 100.0; // NOTE factor also set in TypeScript 3887#endif 3888 3889size *= uSizeFactor; 3890`,b=` 3891float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar); 3892float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ)); 3893float fogAlpha = (1.0 - fogFactor) * uAlpha; 3894float alpha = uAlpha; 3895#ifdef dXrayShaded 3896 // add bias to make picking xray shaded elements easier
3897 alpha = calcXrayShadedAlpha(alpha, normal) + (0.3 * uPickingAlphaThreshold); 3898#endif 3899// if not opaque enough ignore so the element below can be picked 3900if (alpha < uPickingAlphaThreshold || fogAlpha < 0.1) { 3901 #ifdef dTransparentBackfaces_opaque 3902 if (!interior) discard; 3903 #else 3904 discard; 3905 #endif 3906} 3907`,y=` 3908#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 3909 #if defined(dTransparentBackfaces_off) 3910 if (interior && material.a < 1.0) discard; 3911 #elif defined(dTransparentBackfaces_opaque) 3912 if (interior) material.a = 1.0; 3913 #endif 3914 3915 #if !defined(dXrayShaded) 3916 if ((uRenderMask == MaskOpaque && material.a < 1.0) || 3917 (uRenderMask == MaskTransparent && material.a == 1.0) 3918 ) { 3919 discard; 3920 } 3921 #endif 3922#endif 3923 3924#if defined(dRenderVariant_depth) 3925 #if defined(dTransparentBackfaces_off) 3926 if (interior) discard; 3927 #endif 3928#endif 3929`,x=` 3930#if defined(dClipVariant_instance) && dClipObjectCount != 0 3931 vec3 mCenter = (uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz; 3932 if (clipTest(mCenter / uModelScale)) { 3933 // move out of [ -w, +w ] to 'discard' in vert shader 3934 gl_Position.z = 2.0 * gl_Position.w; 3935 } 3936#endif 3937`,S=` 3938#if defined(dClipVariant_pixel) && dClipObjectCount != 0 3939 if (clipTest(vModelPosition / uModelScale)) 3940 discard; 3941#endif 3942`,T=` 3943uniform float uMetalness; 3944uniform float uRoughness; 3945uniform float uBumpiness; 3946#ifdef bumpEnabled 3947 uniform float uBumpFrequency; 3948 uniform float uBumpAmplitude; 3949#endif 3950uniform float uEmissive; 3951 3952// Density value to estimate object thickness 3953uniform float uDensity; 3954 3955#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 3956 #if defined(dColorType_uniform) 3957 uniform vec3 uColor; 3958 #elif defined(dColorType_varying) 3959 varying vec4 vColor; 3960 #endif 3961 3962 #ifdef dUsePalette 3963 uniform sampler2D tPalette; 3964 varying float vPaletteV; 3965 #endif 3966 3967 #ifdef dOverpaint 3968 varying vec4 vOverpaint; 3969 #endif 3970 3971 #ifdef dEmissive 3972 varying float vEmissive; 3973 #endif 3974 3975 #ifdef dSubstance 3976 varying vec4 vSubstance; 3977 #endif 3978#elif defined(dRenderVariant_emissive) 3979 #ifdef dEmissive 3980 varying float vEmissive; 3981 #endif 3982#elif defined(dRenderVariant_pick) 3983 #if __VERSION__ == 100 || !defined(dVaryingGroup) 3984 #ifdef requiredDrawBuffers 3985 varying vec4 vObject; 3986 varying vec4 vInstance; 3987 varying vec4 vGroup; 3988 #else 3989 varying vec4 vColor; 3990 #endif 3991 #else 3992 #ifdef requiredDrawBuffers 3993 flat in vec4 vObject; 3994 flat in vec4 vInstance; 3995 flat in vec4 vGroup; 3996 #else 3997 flat in vec4 vColor; 3998 #endif 3999 #endif 4000#endif 4001 4002#ifdef dTransparency 4003 varying float vTransparency; 4004#endif 4005`,C=` 4006uniform float uMetalness; 4007uniform float uRoughness; 4008uniform float uBumpiness; 4009 4010#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 4011 #if defined(dColorType_uniform) 4012 uniform vec3 uColor; 4013 #elif defined(dColorType_attribute) 4014 varying vec4 vColor; 4015 attribute vec3 aColor; 4016 #elif defined(dColorType_texture) 4017 varying vec4 vColor; 4018 uniform vec2 uColorTexDim; 4019 uniform sampler2D tColor; 4020 #elif defined(dColorType_grid) 4021 varying vec4 vColor; 4022 uniform vec2 uColorTexDim; 4023 uniform vec3 uColorGridDim; 4024 uniform vec4 uColorGridTransform; 4025 uniform sampler2D tColorGrid; 4026 #elif defined(dColorType_direct) 4027 varying vec4 vColor; 4028 #endif 4029 4030 #ifdef dUsePalette 4031 varying float vPaletteV; 4032 #endif 4033 4034 #ifdef dOverpaint 4035 #if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance) 4036 varying vec4 vOverpaint; 4037 uniform vec2 uOverpaintTexDim; 4038 uniform sampler2D tOverpaint; 4039 #elif defined(dOverpaintType_volumeInstance) 4040 varying vec4 vOverpaint; 4041 uniform vec2 uOverpaintTexDim; 4042 uniform vec3 uOverpaintGridDim; 4043 uniform vec4 uOverpaintGridTransform; 4044 uniform sampler2D tOverpaintGrid; 4045 #endif 4046 uniform float uOverpaintStrength; 4047 #endif 4048 4049 #ifdef dEmissive 4050 #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance) 4051 varying float vEmissive; 4052 uniform vec2 uEmissiveTexDim; 4053 uniform sampler2D tEmissive; 4054 #elif defined(dEmissiveType_volumeInstance) 4055 varying float vEmissive; 4056 uniform vec2 uEmissiveTexDim; 4057 uniform vec3 uEmissiveGridDim; 4058 uniform vec4 uEmissiveGridTransform; 4059 uniform sampler2D tEmissiveGrid; 4060 #endif 4061 uniform float uEmissiveStrength; 4062 #endif 4063 4064 #ifdef dSubstance 4065 #if defined(dSubstanceType_instance) || defined(dSubstanceType_groupInstance) || defined(dSubstanceType_vertexInstance) 4066 varying vec4 vSubstance; 4067 uniform vec2 uSubstanceTexDim; 4068 uniform sampler2D tSubstance; 4069 #elif defined(dSubstanceType_volumeInstance) 4070 varying vec4 vSubstance; 4071 uniform vec2 uSubstanceTexDim; 4072 uniform vec3 uSubstanceGridDim; 4073 uniform vec4 uSubstanceGridTransform; 4074 uniform sampler2D tSubstanceGrid; 4075 #endif 4076 uniform float uSubstanceStrength; 4077 #endif 4078#elif defined(dRenderVariant_emissive) 4079 #ifdef dEmissive 4080 #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) || defined(dEmissiveType_vertexInstance) 4081 varying float vEmissive; 4082 uniform vec2 uEmissiveTexDim; 4083 uniform sampler2D tEmissive; 4084 #elif defined(dEmissiveType_volumeInstance) 4085 varying float vEmissive; 4086 uniform vec2 uEmissiveTexDim; 4087 uniform vec3 uEmissiveGridDim; 4088 uniform vec4 uEmissiveGridTransform; 4089 uniform sampler2D tEmissiveGrid; 4090 #endif 4091 uniform float uEmissiveStrength; 4092 #endif 4093#elif defined(dRenderVariant_pick) 4094 #if __VERSION__ == 100 || !defined(dVaryingGroup) 4095 #ifdef requiredDrawBuffers 4096 varying vec4 vObject; 4097 varying vec4 vInstance; 4098 varying vec4 vGroup; 4099 #else 4100 varying vec4 vColor; 4101 #endif 4102 #else 4103 #ifdef requiredDrawBuffers 4104 flat out vec4 vObject; 4105 flat out vec4 vInstance; 4106 flat out vec4 vGroup; 4107 #else 4108 flat out vec4 vColor; 4109 #endif 4110 #endif 4111#endif 4112 4113#ifdef dTransparency 4114 #if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance) || defined(dTransparencyType_vertexInstance) 4115 varying float vTransparency; 4116 uniform vec2 uTransparencyTexDim; 4117 uniform sampler2D tTransparency; 4118 #elif defined(dTransparencyType_volumeInstance) 4119 varying float vTransparency; 4120 uniform vec2 uTransparencyTexDim;
4121 uniform vec3 uTransparencyGridDim; 4122 uniform vec4 uTransparencyGridTransform; 4123 uniform sampler2D tTransparencyGrid; 4124 #endif 4125 uniform float uTransparencyStrength; 4126#endif 4127`,O=` 4128vec3 quaternionTransform(const in vec4 q, const in vec3 v) { 4129 vec3 t = 2.0 * cross(q.xyz, v); 4130 return v + q.w * t + cross(q.xyz, t); 4131} 4132 4133vec4 computePlane(const in vec3 normal, const in vec3 inPoint) { 4134 return vec4(normalize(normal), -dot(normal, inPoint)); 4135} 4136 4137float planeSD(const in vec4 plane, const in vec3 center) { 4138 return -dot(plane.xyz, center - plane.xyz * -plane.w); 4139} 4140 4141float sphereSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) { 4142 return ( 4143 length(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position) / size) - 1.0 4144 ) * min(min(size.x, size.y), size.z); 4145} 4146 4147float cubeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) { 4148 vec3 d = abs(quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position)) - size; 4149 return min(max(d.x, max(d.y, d.z)), 0.0) + length(max(d, 0.0)); 4150} 4151 4152float cylinderSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) { 4153 vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position); 4154 4155 vec2 d = abs(vec2(length(t.xz), t.y)) - size.xy; 4156 return min(max(d.x, d.y), 0.0) + length(max(d, 0.0)); 4157} 4158 4159float infiniteConeSD(const in vec3 position, const in vec4 rotation, const in vec3 size, const in vec3 center) { 4160 vec3 t = quaternionTransform(vec4(-rotation.x, -rotation.y, -rotation.z, rotation.w), center - position); 4161 4162 float q = length(t.xy); 4163 return dot(size.xy, vec2(q, t.z)); 4164} 4165 4166float getSignedDistance(const in vec3 center, const in int type, const in vec3 position, const in vec4 rotation, const in vec3 scale, const in mat4 transform) { 4167 vec3 c = (transform * vec4(center, 1.0)).xyz; 4168 if (type == 1) { 4169 vec3 normal = quaternionTransform(rotation, vec3(0.0, 1.0, 0.0)); 4170 vec4 plane = computePlane(normal, position); 4171 return planeSD(plane, c); 4172 } else if (type == 2) { 4173 return sphereSD(position, rotation, scale * 0.5, c); 4174 } else if (type == 3) { 4175 return cubeSD(position, rotation, scale * 0.5, c); 4176 } else if (type == 4) { 4177 return cylinderSD(position, rotation, scale * 0.5, c); 4178 } else if (type == 5) { 4179 return infiniteConeSD(position, rotation, scale * 0.5, c); 4180 } else { 4181 return 0.1; 4182 } 4183} 4184 4185#if __VERSION__ == 100 4186 // 8-bit 4187 int bitwiseAnd(in int a, in int b) { 4188 int d = 128; 4189 int result = 0; 4190 for (int i = 0; i < 8; ++i) { 4191 if (d <= 0) break; 4192 if (a >= d && b >= d) result += d; 4193 if (a >= d) a -= d; 4194 if (b >= d) b -= d; 4195 d /= 2; 4196 } 4197 return result; 4198 } 4199 4200 bool hasBit(const in int mask, const in int bit) { 4201 return bitwiseAnd(mask, bit) == 0; 4202 } 4203#else 4204 bool hasBit(const in int mask, const in int bit) { 4205 return (mask & bit) == 0; 4206 } 4207#endif 4208 4209#if dClipObjectCount != 0 4210 bool clipTest(const in vec3 center) { 4211 // flag is a bit-flag for clip-objects to ignore (note, object ids start at 1 not 0) 4212 #if defined(dClipping) 4213 int flag = int(floor(vClipping * 255.0 + 0.5)); 4214 #else 4215 int flag = 0; 4216 #endif 4217 4218 #pragma unroll_loop_start 4219 for (int i = 0; i < dClipObjectCount; ++i) { 4220 if (flag == 0 || hasBit(flag, UNROLLED_LOOP_INDEX + 1)) { 4221 bool test = getSignedDistance(center, uClipObjectType[i], uClipObjectPosition[i], uClipObjectRotation[i], uClipObjectScale[i], uClipObjectTransform[i]) <= 0.0; 4222 if ((!uClipObjectInvert[i] && test) || (uClipObjectInvert[i] && !test)) { 4223 return true; 4224 } 4225 } 4226 } 4227 #pragma unroll_loop_end 4228 return false; 4229 } 4230#endif 4231`,I=` 4232uniform int uObjectId; 4233uniform int uInstanceCount; 4234uniform int uGroupCount; 4235 4236uniform int uPickType; 4237uniform int uMarkingType; 4238 4239uniform vec4 uCameraPlane; 4240uniform vec4 uLod; 4241
4242#if dClipObjectCount != 0 4243 uniform int uClipObjectType[dClipObjectCount]; 4244 uniform bool uClipObjectInvert[dClipObjectCount]; 4245 uniform vec3 uClipObjectPosition[dClipObjectCount]; 4246 uniform vec4 uClipObjectRotation[dClipObjectCount]; 4247 uniform vec3 uClipObjectScale[dClipObjectCount]; 4248 uniform mat4 uClipObjectTransform[dClipObjectCount]; 4249 4250 #if defined(dClipping) 4251 #if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup) 4252 varying float vClipping; 4253 #else 4254 flat in float vClipping; 4255 #endif 4256 #endif 4257#endif 4258 4259#if defined(dColorMarker) 4260 uniform vec3 uHighlightColor; 4261 uniform vec3 uSelectColor; 4262 uniform vec3 uDimColor; 4263 uniform float uHighlightStrength; 4264 uniform float uSelectStrength; 4265 uniform float uDimStrength; 4266 uniform int uMarkerPriority; 4267 uniform float uMarkerAverage; 4268#endif 4269 4270#if defined(dNeedsMarker) 4271 uniform float uMarker; 4272 #if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup) 4273 varying float vMarker; 4274 #else 4275 flat in float vMarker; 4276 #endif 4277#endif 4278 4279#if defined(dRenderVariant_colorDpoit) 4280 #define MAX_DPOIT_DEPTH 99999.0 // NOTE constant also set in TypeScript 4281 uniform sampler2D tDpoitDepth; 4282 uniform sampler2D tDpoitFrontColor; 4283#endif 4284 4285varying vec3 vModelPosition; 4286varying vec3 vViewPosition; 4287 4288uniform vec2 uViewOffset; 4289uniform float uModelScale; 4290 4291uniform float uNear; 4292uniform float uFar; 4293uniform float uIsOrtho; 4294 4295uniform bool uFog; 4296uniform float uFogNear; 4297uniform float uFogFar; 4298uniform vec3 uFogColor; 4299 4300uniform float uAlpha; 4301uniform float uPickingAlphaThreshold; 4302uniform bool uTransparentBackground; 4303 4304uniform bool uDoubleSided; 4305bool interior; 4306 4307uniform float uXrayEdgeFalloff; 4308uniform float uCelSteps; 4309uniform float uExposure; 4310 4311uniform mat4 uProjection; 4312 4313uniform int uRenderMask; 4314uniform bool uMarkingDepthTest; 4315 4316uniform sampler2D tDepth; 4317uniform vec2 uDrawingBufferSize; 4318 4319float getDepthPacked(const in vec2 coords) { 4320 return unpackRGBAToDepth(texture2D(tDepth, coords)); 4321} 4322 4323float getDepth(const in vec2 coords) { 4324 #ifdef depthTextureSupport 4325 return texture2D(tDepth, coords).r; 4326 #else 4327 return unpackRGBAToDepth(texture2D(tDepth, coords)); 4328 #endif 4329} 4330 4331float calcDepth(const in vec3 pos) { 4332 vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw; 4333 return 0.5 + 0.5 * clipZW.x / clipZW.y; 4334} 4335 4336// "Bump Mapping Unparametrized Surfaces on the GPU" Morten S. Mikkelsen 4337// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf 4338vec3 perturbNormal(in vec3 position, in vec3 normal, in float height, in float scale) { 4339 vec3 sigmaS = dFdx(position); 4340 vec3 sigmaT = dFdy(position); 4341 4342 vec3 r1 = cross(sigmaT, normal); 4343 vec3 r2 = cross(normal, sigmaS); 4344 float det = dot(sigmaS, r1); 4345 if (det == 0.0) return normal; 4346 4347 float bs = dFdx(height); 4348 float bt = dFdy(height); 4349 4350 vec3 surfGrad = sign(det) * (bs * r1 + bt * r2); 4351 return normalize(abs(det) * normal - scale * surfGrad); 4352} 4353 4354float hash(in float h) { 4355 return fract(sin(h) * 43758.5453123); 4356} 4357 4358float noise(in vec3 x) { 4359 vec3 p = floor(x); 4360 vec3 f = fract(x); 4361 f = f * f * (3.0 - 2.0 * f); 4362 4363 float n = p.x + p.y * 157.0 + 113.0 * p.z; 4364 return mix( 4365 mix(mix(hash(n + 0.0), hash(n + 1.0), f.x), 4366 mix(hash(n + 157.0), hash(n + 158.0), f.x), f.y), 4367 mix(mix(hash(n + 113.0), hash(n + 114.0), f.x), 4368 mix(hash(n + 270.0), hash(n + 271.0), f.x), f.y), f.z); 4369} 4370 4371float fbm(in vec3 p) { 4372 float f = 0.0; 4373 f += 0.5 * noise(p); 4374 p *= 2.01; 4375 f += 0.25 * noise(p); 4376 p *= 2.02; 4377 f += 0.125 * noise(p); 4378 4379 return f; 4380} 4381 4382#ifdef dXrayShaded 4383 float calcXrayShadedAlpha(in float alpha, const in vec3 normal) { 4384 #if defined(dXrayShaded_on) 4385 alpha *= 1.0 - pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff); 4386 #elif defined(dXrayShaded_inverted) 4387 alpha *= pow(abs(dot(normal, vec3(0.0, 0.0, 1.0))), uXrayEdgeFalloff); 4388 #endif 4389 return clamp(alpha, 0.001, 0.999); 4390 } 4391#endif 4392`,A=` 4393uniform mat4 uProjection, uModel, uView; 4394uniform vec3 uCameraPosition; 4395uniform vec4 uCameraPlane; 4396 4397uniform int uObjectId; 4398uniform int uVertexCount; 4399uniform int uInstanceCount; 4400uniform int uGroupCount; 4401uniform vec4 uInvariantBoundingSphere; 4402uniform vec4 uLod; 4403 4404uniform bool uDoubleSided; 4405uniform int uPickType; 4406
4407#if dClipObjectCount != 0 4408 uniform int uClipObjectType[dClipObjectCount]; 4409 uniform bool uClipObjectInvert[dClipObjectCount]; 4410 uniform vec3 uClipObjectPosition[dClipObjectCount]; 4411 uniform vec4 uClipObjectRotation[dClipObjectCount]; 4412 uniform vec3 uClipObjectScale[dClipObjectCount]; 4413 uniform mat4 uClipObjectTransform[dClipObjectCount]; 4414 4415 #if defined(dClipping) 4416 uniform vec2 uClippingTexDim; 4417 uniform sampler2D tClipping; 4418 #if __VERSION__ == 100 || defined(dClippingType_instance) || !defined(dVaryingGroup) 4419 varying float vClipping; 4420 #else 4421 flat out float vClipping; 4422 #endif 4423 #endif 4424#endif 4425 4426#if defined(dNeedsMarker) 4427 uniform float uMarker; 4428 uniform vec2 uMarkerTexDim; 4429 uniform sampler2D tMarker; 4430 #if __VERSION__ == 100 || defined(dMarkerType_instance) || !defined(dVaryingGroup) 4431 varying float vMarker; 4432 #else 4433 flat out float vMarker; 4434 #endif 4435#endif 4436 4437varying vec3 vModelPosition; 4438varying vec3 vViewPosition; 4439 4440uniform float uModelScale; 4441 4442#if defined(noNonInstancedActiveAttribs) 4443 // int() is needed for some Safari versions 4444 // see https://bugs.webkit.org/show_bug.cgi?id=244152 4445 #define VertexID int(gl_VertexID) 4446#else 4447 attribute float aVertex; 4448 #define VertexID int(aVertex) 4449#endif 4450 4451#if defined(enabledMultiDraw)
4452 #define DrawID gl_DrawID 4453#else 4454 #define DrawID uDrawId 4455#endif 4456`,w=` 4457// TODO find a better place for these convenience defines 4458 4459#if defined(dRenderVariant_colorBlended) || defined(dRenderVariant_colorWboit) || defined(dRenderVariant_colorDpoit) 4460 #define dRenderVariant_color 4461#endif 4462 4463#if defined(dColorType_instance) || defined(dColorType_group) || defined(dColorType_groupInstance) || defined(dColorType_vertex) || defined(dColorType_vertexInstance) 4464 #define dColorType_texture 4465#endif 4466 4467#if defined(dColorType_volume) || defined(dColorType_volumeInstance) 4468 #define dColorType_grid 4469#endif 4470 4471#if defined(dColorType_attribute) || defined(dColorType_texture) || defined(dColorType_grid) 4472 #define dColorType_varying 4473#endif 4474 4475#if ((defined(dRenderVariant_color) || defined(dRenderVariant_tracing)) && defined(dColorMarker)) || defined(dRenderVariant_marking) 4476 #define dNeedsMarker 4477#endif 4478 4479#if defined(dXrayShaded_on) || defined(dXrayShaded_inverted) 4480 #define dXrayShaded 4481#endif 4482 4483#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || ((defined(dRenderVariant_depth) || defined(dRenderVariant_pick)) && defined(dXrayShaded)) 4484 #define dNeedsNormal 4485#endif 4486 4487#define MaskAll 0 4488#define MaskOpaque 1 4489#define MaskTransparent 2 4490 4491// 4492 4493#define PI 3.14159265 4494#define RECIPROCAL_PI 0.31830988618 4495#define EPSILON 1e-6 4496#define ONE_MINUS_EPSILON 1.0 - EPSILON 4497#define TWO_PI 6.2831853 4498#define HALF_PI 1.570796325 4499 4500#define PALETTE_SCALE 16777214.0 // (1 << 24) - 2 4501 4502#define saturate(a) clamp(a, 0.0, 1.0) 4503 4504#if __VERSION__ == 100 4505 #define round(x) floor((x) + 0.5) 4506#endif 4507 4508float intDiv(const in float a, const in float b) { return float(int(a) / int(b)); } 4509vec2 ivec2Div(const in vec2 a, const in vec2 b) { return vec2(ivec2(a) / ivec2(b)); } 4510float intMod(const in float a, const in float b) { return a - b * float(int(a) / int(b)); } 4511int imod(const in int a, const in int b) { return a - b * (a / b); } 4512 4513float pow2(const in float x) { return x * x; } 4514 4515vec3 packIntToRGB(in float value) { 4516 value = clamp(round(value), 0.0, 16777216.0 - 1.0) + 1.0; 4517 vec3 c = vec3(0.0); 4518 c.b = mod(value, 256.0); 4519 value = floor(value / 256.0); 4520 c.g = mod(value, 256.0); 4521 value = floor(value / 256.0); 4522 c.r = mod(value, 256.0); 4523 return c / 255.0; 4524} 4525float unpackRGBToInt(const in vec3 rgb) { 4526 return (floor(rgb.r * 255.0 + 0.5) * 256.0 * 256.0 + floor(rgb.g * 255.0 + 0.5) * 256.0 + floor(rgb.b * 255.0 + 0.5)) - 1.0; 4527} 4528 4529vec2 packUnitIntervalToRG(const in float v) { 4530 vec2 enc; 4531 enc.xy = vec2(fract(v * 256.0), v); 4532 enc.y -= enc.x * (1.0 / 256.0); 4533 enc.xy *= 256.0 / 255.0; 4534 4535 return enc; 4536} 4537 4538float unpackRGToUnitInterval(const in vec2 enc) { 4539 return dot(enc, vec2(255.0 / (256.0 * 256.0), 255.0 / 256.0)); 4540} 4541 4542float pack2x4(vec2 v) { 4543 vec2 clamped_v = clamp(v, 0.0, 1.0); 4544 vec2 scaled_v = floor(clamped_v * 15.0 + 0.5); // round to 0â15 4545 float c = scaled_v.x + scaled_v.y * 16.0; 4546 return c / 255.0; 4547} 4548 4549vec2 unpack2x4(float f) { 4550 float c = floor(f * 255.0 + 0.5); 4551 float lo = mod(c, 16.0); 4552 float hi = floor(c / 16.0); 4553 return vec2(lo, hi) / 15.0; 4554} 4555 4556vec3 screenSpaceToViewSpace(const in vec3 ssPos, const in mat4 invProjection) { 4557 vec4 p = vec4(ssPos * 2.0 - 1.0, 1.0); 4558 p = invProjection * p; 4559 return p.xyz / p.w; 4560} 4561 4562const float PackUpscale = 256.0 / 255.0; // fraction -> 0..1 (including 1) 4563const float UnpackDownscale = 255.0 / 256.0; // 0..1 -> fraction (excluding 1) 4564const vec3 PackFactors = vec3(256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0); 4565const vec4 UnpackFactors = UnpackDownscale / vec4(PackFactors, 1.0); 4566const float ShiftRight8 = 1.0 / 256.0; 4567 4568vec4 packDepthToRGBA(const in float v) { 4569 vec4 r = vec4(fract(v * PackFactors), v); 4570 r.yzw -= r.xyz * ShiftRight8; // tidy overflow 4571 return r * PackUpscale; 4572} 4573float unpackRGBAToDepth(const in vec4 v) { 4574 return dot(v, UnpackFactors); 4575} 4576 4577vec4 packDepthWithAlphaToRGBA(const in float depth, const in float alpha){ 4578 vec3 r = vec3(fract(depth * PackFactors.yz), depth); 4579 r.yz -= r.xy * ShiftRight8;
4579 // tidy overflow 4580 return vec4(r * PackUpscale, alpha); 4581} 4582vec2 unpackRGBAToDepthWithAlpha(const in vec4 v) { 4583 return vec2(dot(v.xyz, UnpackFactors.yzw), v.w); 4584} 4585 4586vec4 sRGBToLinear(const in vec4 c) { 4587 return vec4(mix(pow(c.rgb * 0.9478672986 + vec3(0.0521327014), vec3(2.4)), c.rgb * 0.0773993808, vec3(lessThanEqual(c.rgb, vec3(0.04045)))), c.a); 4588} 4589vec4 linearTosRGB(const in vec4 c) { 4590 return vec4(mix(pow(c.rgb, vec3(0.41666)) * 1.055 - vec3(0.055), c.rgb * 12.92, vec3(lessThanEqual(c.rgb, vec3(0.0031308)))), c.a); 4591} 4592 4593float luminance(vec3 c) { 4594 // https://www.w3.org/TR/WCAG21/#dfn-relative-luminance 4595 const vec3 W = vec3(0.2125, 0.7154, 0.0721); 4596 return dot(c, W); 4597} 4598 4599float linearizeDepth(const in float depth, const in float near, const in float far) { 4600 return (2.0 * near) / (far + near - depth * (far - near)); 4601} 4602 4603float perspectiveDepthToViewZ(const in float invClipZ, const in float near, const in float far) { 4604 return (near * far) / ((far - near) * invClipZ - far); 4605} 4606 4607float orthographicDepthToViewZ(const in float linearClipZ, const in float near, const in float far) { 4608 return linearClipZ * (near - far) - near; 4609} 4610 4611float depthToViewZ(const in float isOrtho, const in float linearClipZ, const in float near, const in float far) { 4612 return isOrtho == 1.0 ? orthographicDepthToViewZ(linearClipZ, near, far) : perspectiveDepthToViewZ(linearClipZ, near, far); 4613} 4614 4615// see https://github.com/graphitemaster/normals_revisited and https://www.shadertoy.com/view/3s33zj 4616mat3 adjoint(const in mat4 m) { 4617 return mat3( 4618 cross(m[1].xyz, m[2].xyz), 4619 cross(m[2].xyz, m[0].xyz), 4620 cross(m[0].xyz, m[1].xyz) 4621 ); 4622} 4623 4624#if __VERSION__ == 100 4625 // transpose 4626 4627 float transpose(const in float m) { 4628 return m; 4629 } 4630 4631 mat2 transpose2(const in mat2 m) { 4632 return mat2( 4633 m[0][0], m[1][0], 4634 m[0][1], m[1][1] 4635 ); 4636 } 4637 4638 mat3 transpose3(const in mat3 m) { 4639 return mat3( 4640 m[0][0], m[1][0], m[2][0], 4641 m[0][1], m[1][1], m[2][1], 4642 m[0][2], m[1][2], m[2][2] 4643 ); 4644 } 4645 4646 mat4 transpose4(const in mat4 m) { 4647 return mat4( 4648 m[0][0], m[1][0], m[2][0], m[3][0], 4649 m[0][1], m[1][1], m[2][1], m[3][1], 4650 m[0][2], m[1][2], m[2][2], m[3][2], 4651 m[0][3], m[1][3], m[2][3], m[3][3] 4652 ); 4653 } 4654 4655 // inverse 4656 4657 float inverse(const in float m) { 4658 return 1.0 / m; 4659 } 4660 4661 mat2 inverse2(const in mat2 m) { 4662 return mat2(m[1][1],-m[0][1], 4663 -m[1][0], m[0][0]) / (m[0][0]*m[1][1] - m[0][1]*m[1][0]); 4664 } 4665 4666 mat3 inverse3(const in mat3 m) { 4667 float a00 = m[0][0], a01 = m[0][1], a02 = m[0][2]; 4668 float a10 = m[1][0], a11 = m[1][1], a12 = m[1][2]; 4669 float a20 = m[2][0], a21 = m[2][1], a22 = m[2][2]; 4670 4671 float b01 = a22 * a11 - a12 * a21; 4672 float b11 = -a22 * a10 + a12 * a20; 4673 float b21 = a21 * a10 - a11 * a20; 4674 4675 float det = a00 * b01 + a01 * b11 + a02 * b21; 4676 4677 return mat3(b01, (-a22 * a01 + a02 * a21), (a12 * a01 - a02 * a11), 4678 b11, (a22 * a00 - a02 * a20), (-a12 * a00 + a02 * a10), 4679 b21, (-a21 * a00 + a01 * a20), (a11 * a00 - a01 * a10)) / det; 4680 } 4681 4682 mat4 inverse4(const in mat4 m) { 4683 float 4684 a00 = m[0][0], a01 = m[0][1], a02 = m[0][2], a03 = m[0][3], 4685 a10 = m[1][0], a11 = m[1][1], a12 = m[1][2], a13 = m[1][3], 4686 a20 = m[2][0], a21 = m[2][1], a22 = m[2][2], a23 = m[2][3], 4687 a30 = m[3][0], a31 = m[3][1], a32 = m[3][2], a33 = m[3][3], 4688 4689 b00 = a00 * a11 - a01 * a10, 4690 b01 = a00 * a12 - a02 * a10, 4691 b02 = a00 * a13 - a03 * a10, 4692 b03 = a01 * a12 - a02 * a11, 4693 b04 = a01 * a13 - a03 * a11, 4694 b05 = a02 * a13 - a03 * a12, 4695 b06 = a20 * a31 - a21 * a30, 4696 b07 = a20 * a32 - a22 * a30, 4697 b08 = a20 * a33 - a23 * a30, 4698 b09 = a21 * a32 - a22 * a31, 4699 b10 = a21 * a33 - a23 * a31, 4700 b11 = a22 * a33 - a23 * a32, 4701 4702 det = b00 * b11 - b01 * b10 + b02 * b09 + b03 * b08 - b04 * b07 + b05 * b06; 4703 4704 return mat4( 4705 a11 * b11 - a12 * b10 + a13 * b09, 4706 a02 * b10 - a01 * b11 - a03 * b09, 4707 a31 * b05 - a32 * b04 + a33 * b03, 4708 a22 * b04 - a21 * b05 - a23 * b03, 4709 a12 * b08 - a10 * b11 - a13 * b07, 4710 a00 * b11 - a02 * b08 + a03 * b07, 4711 a32 * b02 - a30 * b05 - a33 * b01, 4712 a20 * b05 - a22 * b02 + a23 * b01, 4713 a10 * b10 - a11 * b08 + a13 * b06, 4714 a01 * b08 - a00 * b10 - a03 * b06, 4715 a30 * b04 - a31 * b02 + a33 * b00, 4716 a21 * b02 - a20 * b04 - a23 * b00, 4717 a11 * b07 - a10 * b09 - a12 * b06, 4718 a00 * b09 - a01 * b07 + a02 * b06, 4719 a31 * b01 - a30 * b03 - a32 * b00, 4720 a20 * b03 - a21 * b01 + a22 * b00) / det; 4721 } 4722 4723 #define isNaN(x) ((x) != (x)) 4724 #define isInf(x) ((x) == (x) + 1.0) 4725#else 4726 #define transpose2(m) transpose(m) 4727 #define transpose3(m) transpose(m) 4728 #define transpose4(m) transpose(m) 4729 4730 #define inverse2(m) inverse(m) 4731 #define inverse3(m) inverse(m) 4732 #define inverse4(m) inverse(m) 4733 4734 #define isNaN isnan 4735 #define isInf isinf 4736#endif 4737`,D=`
4738if (uLod.w == 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) { 4739 float d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale; 4740 float ta = min( 4741 smoothstep(uLod.x, uLod.x + uLod.z, d), 4742 1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d) 4743 ); 4744 4745 #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 4746 float at = 0.0; 4747 4748 // shift by view-offset during multi-sample rendering to allow for blending 4749 vec2 coord = gl_FragCoord.xy + uViewOffset * 0.25; 4750 4751 const mat4 thresholdMatrix = mat4( 4752 1.0 / 17.0, 9.0 / 17.0, 3.0 / 17.0, 11.0 / 17.0, 4753 13.0 / 17.0, 5.0 / 17.0, 15.0 / 17.0, 7.0 / 17.0, 4754 4.0 / 17.0, 12.0 / 17.0, 2.0 / 17.0, 10.0 / 17.0, 4755 16.0 / 17.0, 8.0 / 17.0, 14.0 / 17.0, 6.0 / 17.0 4756 ); 4757 int ci = int(intMod(coord.x, 4.0)); 4758 int ri = int(intMod(coord.y, 4.0)); 4759 #if __VERSION__ == 100 4760 vec4 i = vec4(float(ci * 4 + ri)); 4761 vec4 v = thresholdMatrix[0] * vec4(equal(i, vec4(0.0, 1.0, 2.0, 3.0))) + 4762 thresholdMatrix[1] * vec4(equal(i, vec4(4.0, 5.0, 6.0, 7.0))) + 4763 thresholdMatrix[2] * vec4(equal(i, vec4(8.0, 9.0, 10.0, 11.0))) + 4764 thresholdMatrix[3] * vec4(equal(i, vec4(12.0, 13.0, 14.0, 15.0))); 4765 at = v.x + v.y + v.z + v.w; 4766 #else 4767 at = thresholdMatrix[ci][ri]; 4768 #endif 4769 4770 if (ta < 0.99 && (ta < 0.01 || ta < at)) { 4771 discard; 4772 } 4773 #else 4774 if (ta < uPickingAlphaThreshold) { 4775 discard; 4776 } 4777 #endif 4778} 4779`,E=` 4780 // floatToRgba adapted from https://github.com/equinor/glsl-float-to-rgba 4781 // MIT License, Copyright (c) 2020 Equinor 4782 4783 float shiftRight (float v, float amt) { 4784 v = floor(v) + 0.5; 4785 return floor(v / exp2(amt)); 4786 } 4787 float shiftLeft (float v, float amt) { 4788 return floor(v * exp2(amt) + 0.5); 4789 } 4790 float maskLast (float v, float bits) { 4791 return mod(v, shiftLeft(1.0, bits)); 4792 } 4793 float extractBits (float num, float from, float to) { 4794 from = floor(from + 0.5); to = floor(to + 0.5); 4795 return maskLast(shiftRight(num, from), to - from); 4796 } 4797 4798 vec4 floatToRgba(float texelFloat, bool littleEndian) { 4799 if (texelFloat == 0.0) return vec4(0.0, 0.0, 0.0, 0.0); 4800 float sign = texelFloat > 0.0 ? 0.0 : 1.0; 4801 texelFloat = abs(texelFloat); 4802 float exponent = floor(log2(texelFloat)); 4803 float biased_exponent = exponent + 127.0; 4804 float fraction = ((texelFloat / exp2(exponent)) - 1.0) * 8388608.0; 4805 float t = biased_exponent / 2.0; 4806 float last_bit_of_biased_exponent = fract(t) * 2.0; 4807 float remaining_bits_of_biased_exponent = floor(t); 4808 float byte4 = extractBits(fraction, 0.0, 8.0) / 255.0; 4809 float byte3 = extractBits(fraction, 8.0, 16.0) / 255.0; 4810 float byte2 = (last_bit_of_biased_exponent * 128.0 + extractBits(fraction, 16.0, 23.0)) / 255.0; 4811 float byte1 = (sign * 128.0 + remaining_bits_of_biased_exponent) / 255.0; 4812 return ( 4813 littleEndian 4814 ? vec4(byte4, byte3, byte2, byte1) 4815 : vec4(byte1, byte2, byte3, byte4) 4816 ); 4817 } 4818`,M=` 4819#if dLightCount != 0 4820 uniform vec3 uLightDirection[dLightCount]; 4821 uniform vec3 uLightColor[dLightCount]; 4822#endif 4823uniform vec3 uAmbientColor; 4824 4825struct PhysicalMaterial { 4826 vec3 diffuseColor; 4827 float roughness; 4828 vec3 specularColor; 4829 float specularF90; 4830}; 4831 4832struct IncidentLight { 4833 vec3 color; 4834 vec3 direction; 4835}; 4836 4837struct ReflectedLight { 4838 vec3 directDiffuse; 4839 vec3 directSpecular; 4840 vec3 indirectDiffuse; 4841 vec3 indirectSpecular; 4842}; 4843 4844struct GeometricContext { 4845 vec3 position; 4846 vec3 normal; 4847 vec3 viewDir; 4848}; 4849 4850vec3 BRDF_Lambert(const in vec3 diffuseColor) { 4851 return RECIPROCAL_PI * diffuseColor; 4852} 4853 4854vec3 F_Schlick(const in vec3 f0, const in float f90, const in float dotVH) { 4855 // Original approximation by Christophe Schlick '94 4856 // float fresnel = pow( 1.0 - dotVH, 5.0 ); 4857 // Optimized variant (presented by Epic at SIGGRAPH '13) 4858 // https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf
4859 float fresnel = exp2((-5.55473 * dotVH - 6.98316) * dotVH); 4860 return f0 * (1.0 - fresnel) + (f90 * fresnel); 4861} 4862 4863// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2 4864// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf 4865float V_GGX_SmithCorrelated(const in float alpha, const in float dotNL, const in float dotNV) { 4866 float a2 = pow2(alpha); 4867 float gv = dotNL * sqrt(a2 + (1.0 - a2) * pow2(dotNV)); 4868 float gl = dotNV * sqrt(a2 + (1.0 - a2) * pow2(dotNL)); 4869 return 0.5 / max(gv + gl, EPSILON); 4870} 4871 4872// Microfacet Models for Refraction through Rough Surfaces - equation (33) 4873// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html 4874// alpha is "roughness squared" in Disneyâs reparameterization 4875float D_GGX(const in float alpha, const in float dotNH) { 4876 float a2 = pow2(alpha); 4877 float denom = pow2(dotNH) * (a2 - 1.0) + 1.0; // avoid alpha = 0 with dotNH = 1 4878 return RECIPROCAL_PI * a2 / pow2(denom); 4879} 4880 4881// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility 4882vec3 BRDF_GGX(const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness) { 4883 float alpha = pow2(roughness); // UE4's roughness 4884 vec3 halfDir = normalize( lightDir + viewDir); 4885 float dotNL = saturate(dot(normal, lightDir)); 4886 float dotNV = saturate(dot(normal, viewDir)); 4887 float dotNH = saturate(dot(normal, halfDir)); 4888 float dotVH = saturate(dot(viewDir, halfDir)); 4889 vec3 F = F_Schlick(f0, f90, dotVH); 4890 float V = V_GGX_SmithCorrelated(alpha, dotNL, dotNV); 4891 float D = D_GGX(alpha, dotNH); 4892 return F * (V * D); 4893} 4894 4895// Analytical approximation of the DFG LUT, one half of the 4896// split-sum approximation used in indirect specular lighting. 4897// via 'environmentBRDF' from "Physically Based Shading on Mobile" 4898// https://www.unrealengine.com/blog/physically-based-shading-on-mobile 4899vec2 DFGApprox(const in vec3 normal, const in vec3 viewDir, const in float roughness) { 4900 float dotNV = saturate(dot(normal, viewDir)); 4901 const vec4 c0 = vec4(-1, -0.0275, -0.572, 0.022); 4902 const vec4 c1 = vec4(1, 0.0425, 1.04, -0.04); 4903 vec4 r = roughness * c0 + c1; 4904 float a004 = min(r.x * r.x, exp2(-9.28 * dotNV)) * r.x + r.y; 4905 vec2 fab = vec2(-1.04, 1.04) * a004 + r.zw; 4906 return fab; 4907} 4908 4909// Fdez-Ag\xfcera's "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting" 4910// Approximates multiscattering in order to preserve energy. 4911// http://www.jcgt.org/published/0008/01/03/ 4912void computeMultiscattering(const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter) { 4913 vec2 fab = DFGApprox(normal, viewDir, roughness); 4914 vec3 FssEss = specularColor * fab.x + specularF90 * fab.y; 4915 float Ess = fab.x + fab.y; 4916 float Ems = 1.0 - Ess; 4917 vec3 Favg = specularColor + (1.0 - specularColor) * 0.047619; // 1/21 4918 vec3 Fms = FssEss * Favg / (1.0 - Ems * Favg); 4919 singleScatter += FssEss; 4920 multiScatter += Fms * Ems; 4921} 4922 4923void RE_Direct_Physical(const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { 4924 float dotNL = saturate(dot(geometry.normal, directLight.direction)); 4925 vec3 irradiance = dotNL * directLight.color; 4926 reflectedLight.directSpecular += irradiance * BRDF_GGX(directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness); 4927 reflectedLight.directDiffuse += irradiance * BRDF_Lambert(material.diffuseColor); 4928} 4929 4930void RE_IndirectDiffuse_Physical(const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { 4931 reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert(material.diffuseColor); 4932} 4933 4934void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { 4935 // Both indirect specular and indirect diffuse light accumulate here 4936 vec3 singleScattering = vec3(0.0); 4937 vec3 multiScattering = vec3(0.0); 4938 vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; 4939 computeMultiscattering(geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering); 4940 vec3 diffuse = material.diffuseColor * (1.0 - ( singleScattering + multiScattering)); 4941 reflectedLight.indirectSpecular += radiance * singleScattering; 4942 reflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance; 4943 reflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance; 4944} 4945`,P=` 4946varying vec3 vNormal; 4947`,k=` 4948vec4 readFromTexture(const in sampler2D tex, const in float i, const in vec2 dim) { 4949 float x = intMod(i, dim.x); 4950 float y = floor(intDiv(i, dim.x)); 4951 vec2 uv = (vec2(x, y) + 0.5) / dim; 4952 return texture2D(tex, uv); 4953} 4954 4955vec4 readFromTexture(const in sampler2D tex, const in int i, const in vec2 dim) { 4956 int x = imod(i, int(dim.x)); 4957 int y = i / int(dim.x); 4958 vec2 uv = (vec2(x, y) + 0.5) / dim; 4959 return texture2D(tex, uv); 4960} 4961`,B=` 4962 // rgbaToFloat adapted from https://github.com/ihmeuw/glsl-rgba-to-float 4963 // BSD 3-Clause License 4964 // 4965 // Copyright (c) 2019, Institute for Health Metrics and Evaluation All rights reserved. 4966 // Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4967 // - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 4968 // - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 4969 // - Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 4970 // 4971 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 4972 // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 4973 // IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
4974 // OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 4975 // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 4976 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 4977 // OF THE POSSIBILITY OF SUCH DAMAGE. 4978 4979 ivec4 floatsToBytes(vec4 inputFloats, bool littleEndian) { 4980 ivec4 bytes = ivec4(inputFloats * 255.0); 4981 return ( 4982 littleEndian 4983 ? bytes.abgr 4984 : bytes 4985 ); 4986 } 4987 4988 // Break the four bytes down into an array of 32 bits. 4989 void bytesToBits(const in ivec4 bytes, out bool bits[32]) { 4990 for (int channelIndex = 0; channelIndex < 4; ++channelIndex) { 4991 float acc = float(bytes[channelIndex]); 4992 for (int indexInByte = 7; indexInByte >= 0; --indexInByte) { 4993 float powerOfTwo = exp2(float(indexInByte)); 4994 bool bit = acc >= powerOfTwo; 4995 bits[channelIndex * 8 + (7 - indexInByte)] = bit; 4996 acc = mod(acc, powerOfTwo); 4997 } 4998 } 4999 } 5000 5001 // Compute the exponent of the 32-bit float. 5002 float getExponent(bool bits[32]) { 5003 const int startIndex = 1; 5004 const int bitStringLength = 8; 5005 const int endBeforeIndex = startIndex + bitStringLength; 5006 float acc = 0.0; 5007 int pow2 = bitStringLength - 1; 5008 for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) { 5009 acc += float(bits[bitIndex]) * exp2(float(pow2--)); 5010 } 5011 return acc; 5012 } 5013 5014 // Compute the mantissa of the 32-bit float. 5015 float getMantissa(bool bits[32], bool subnormal) { 5016 const int startIndex = 9; 5017 const int bitStringLength = 23; 5018 const int endBeforeIndex = startIndex + bitStringLength; 5019 // Leading/implicit/hidden bit convention: 5020 // If the number is not subnormal (with exponent 0), we add a leading 1 digit. 5021 float acc = float(!subnormal) * exp2(float(bitStringLength)); 5022 int pow2 = bitStringLength - 1; 5023 for (int bitIndex = startIndex; bitIndex < endBeforeIndex; ++bitIndex) { 5024 acc += float(bits[bitIndex]) * exp2(float(pow2--)); 5025 } 5026 return acc; 5027 } 5028 5029 // Parse the float from its 32 bits. 5030 float bitsToFloat(bool bits[32]) { 5031 float signBit = float(bits[0]) * -2.0 + 1.0; 5032 float exponent = getExponent(bits); 5033 bool subnormal = abs(exponent - 0.0) < 0.01; 5034 float mantissa = getMantissa(bits, subnormal); 5035 float exponentBias = 127.0; 5036 return signBit * mantissa * exp2(exponent - exponentBias - 23.0); 5037 } 5038 5039 float rgbaToFloat(vec4 texelRGBA, bool littleEndian) { 5040 ivec4 rgbaBytes = floatsToBytes(texelRGBA, littleEndian); 5041 bool bits[32]; 5042 bytesToBits(rgbaBytes, bits); 5043 return bitsToFloat(bits); 5044 } 5045`,_=` 5046#if defined(dSizeType_uniform) 5047 uniform float uSize; 5048#elif defined(dSizeType_attribute) 5049 attribute float aSize; 5050#elif defined(dSizeType_instance) || defined(dSizeType_group) || defined(dSizeType_groupInstance) || defined(dSizeType_vertex) || defined(dSizeType_vertexInstance) 5051 uniform vec2 uSizeTexDim; 5052 uniform sampler2D tSize; 5053#endif 5054 5055uniform float uSizeFactor; 5056`,R=` 5057vec4 texture3dFrom1dTrilinear(const in sampler2D tex, const in vec3 pos, const in vec3 gridDim, const in vec2 texDim, const in float offset) { 5058 float gdYZ = gridDim.z * gridDim.y; 5059 float gdZ = gridDim.z; 5060 vec3 p0 = floor(pos * gridDim); 5061 vec3 p1 = ceil(pos * gridDim); 5062 vec3 pd = (pos * gridDim - p0) / (p1 - p0); 5063 vec4 s000 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p0.x * gdYZ, texDim); 5064 vec4 s100 = readFromTexture(tex, offset + p0.z + p0.y * gdZ + p1.x * gdYZ, texDim); 5065 vec4 s001 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p0.x * gdYZ, texDim); 5066 vec4 s101 = readFromTexture(tex, offset + p1.z + p0.y * gdZ + p1.x * gdYZ, texDim); 5067 vec4 s010 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p0.x * gdYZ, texDim); 5068 vec4 s110 = readFromTexture(tex, offset + p0.z + p1.y * gdZ + p1.x * gdYZ, texDim); 5069 vec4 s011 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p0.x * gdYZ, texDim); 5070 vec4 s111 = readFromTexture(tex, offset + p1.z + p1.y * gdZ + p1.x * gdYZ, texDim); 5071 vec4 s00 = mix(s000, s100, pd.x); 5072 vec4 s01 = mix(s001, s101, pd.x); 5073 vec4 s10 = mix(s010, s110, pd.x); 5074 vec4 s11 = mix(s011, s111, pd.x); 5075 vec4 s0 = mix(s00, s10, pd.y); 5076 vec4 s1 = mix(s01, s11, pd.y); 5077 return mix(s0, s1, pd.z); 5078} 5079`,F=` 5080vec4 texture3dFrom2dLinear(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) { 5081 float zSlice0 = floor(pos.z * gridDim.z); 5082 float column0 = intMod(zSlice0 * gridDim.x, texDim.x) / gridDim.x; 5083 float row0 = floor(intDiv(zSlice0 * gridDim.x, texDim.x)); 5084 vec2 coord0 = (vec2(column0 * gridDim.x, row0 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim; 5085 vec4 color0 = texture2D(tex, coord0); 5086 5087 float zSlice1 = zSlice0 + 1.0; 5088 float column1 = intMod(zSlice1 * gridDim.x, texDim.x) / gridDim.x; 5089 float row1 = floor(intDiv(zSlice1 * gridDim.x, texDim.x)); 5090 vec2 coord1 = (vec2(column1 * gridDim.x, row1 * gridDim.y) + (pos.xy * gridDim.xy)) / texDim; 5091 vec4 color1 = texture2D(tex, coord1); 5092 5093 float delta0 = abs((pos.z * gridDim.z) - zSlice0); 5094 return mix(color0, color1, delta0); 5095} 5096`,L=` 5097vec4 texture3dFrom2dNearest(sampler2D tex, vec3 pos, vec3 gridDim, vec2 texDim) { 5098 float zSlice = floor(pos.z * gridDim.z + 0.5); // round to nearest z-slice 5099 float column = intMod(zSlice * gridDim.x, texDim.x) / gridDim.x; 5100 float row = floor(intDiv(zSlice * gridDim.x, texDim.x)); 5101 vec2 coord = (vec2(column * gridDim.x, row * gridDim.y) + (pos.xy * gridDim.xy)) / texDim; 5102 return texture2D(tex, coord); 5103} 5104`,z=` 5105#if defined(dRenderVariant_colorWboit) 5106 if (uRenderMask == MaskOpaque) { 5107 if (preFogAlpha < 1.0) { 5108 discard; 5109 } 5110 } else if (uRenderMask == MaskTransparent) { 5111 if (preFogAlpha != 1.0 && fragmentDepth < getDepth(gl_FragCoord.xy / uDrawingBufferSize)) { 5112 #ifdef dTransparentBackfaces_off 5113 if (interior) discard; 5114 #endif 5115 float alpha = gl_FragColor.a; 5116 float wboitWeight = alpha * clamp(pow(1.0 - fragmentDepth, 2.0), 0.01, 1.0); 5117 gl_FragColor = vec4(gl_FragColor.rgb * alpha * wboitWeight, alpha); 5118 // extra alpha is to handle pre-multiplied alpha 5119 #ifndef dGeometryType_directVolume
5120 gl_FragData[1] = vec4((uTransparentBackground ? alpha : 1.0) * alpha * wboitWeight); 5121 #else 5122 gl_FragData[1] = vec4(alpha * alpha * wboitWeight); 5123 #endif 5124 } else { 5125 discard; 5126 } 5127 } 5128#endif 5129`,N=` 5130#if defined(dRenderVariant_colorDpoit) 5131 if (uRenderMask == MaskOpaque) { 5132 if (preFogAlpha < 1.0) { 5133 discard; 5134 } 5135 } else if (uRenderMask == MaskTransparent) { 5136 vec2 coords = gl_FragCoord.xy / uDrawingBufferSize; 5137 if (preFogAlpha != 1.0 && fragmentDepth < getDepth(coords)) { 5138 #ifdef dTransparentBackfaces_off 5139 if (interior) discard; 5140 #endif 5141 5142 // adapted from https://github.com/tsherif/webgl2examples 5143 // The MIT License, Copyright 2017 Tarek Sherif, Shuai Shao 5144 5145 vec2 lastDepth = texture2D(tDpoitDepth, coords).rg; 5146 vec4 lastFrontColor = texture2D(tDpoitFrontColor, coords); 5147 5148 vec4 fragColor = gl_FragColor; 5149 5150 // depth value always increases 5151 // so we can use MAX blend equation 5152 gl_FragData[2].rg = vec2(-MAX_DPOIT_DEPTH); 5153 5154 // front color always increases 5155 // so we can use MAX blend equation 5156 gl_FragColor = lastFrontColor; 5157 5158 // back color is separately blend afterwards each pass 5159 gl_FragData[1] = vec4(0.0); 5160 5161 float nearestDepth = -lastDepth.x; 5162 float furthestDepth = lastDepth.y; 5163 float alphaMultiplier = 1.0 - lastFrontColor.a; 5164 5165 if (fragmentDepth < nearestDepth || fragmentDepth > furthestDepth) { 5166 // Skip this depth since it's been peeled. 5167 return; 5168 } 5169 5170 if (fragmentDepth > nearestDepth && fragmentDepth < furthestDepth) { 5171 // This needs to be peeled. 5172 // The ones remaining after MAX blended for 5173 // all need-to-peel will be peeled next pass. 5174 gl_FragData[2].rg = vec2(-fragmentDepth, fragmentDepth); 5175 return; 5176 } 5177 5178 // write to back and front color buffer 5179 if (fragmentDepth == nearestDepth) { 5180 gl_FragColor.rgb += fragColor.rgb * fragColor.a * alphaMultiplier; 5181 gl_FragColor.a = 1.0 - alphaMultiplier * (1.0 - fragColor.a); 5182 } else { 5183 gl_FragData[1] += fragColor; 5184 } 5185 5186 } else { 5187 discard; 5188 } 5189 } 5190#endif 5191`,G=` 5192precision highp float; 5193precision highp int; 5194 5195#include common 5196#include read_from_texture 5197#include common_vert_params 5198#include color_vert_params 5199#include size_vert_params 5200#include common_clip 5201 5202uniform float uPixelRatio; 5203uniform vec4 uViewport; 5204 5205attribute vec3 aPosition; 5206attribute mat4 aTransform; 5207attribute float aInstance; 5208attribute float aGroup; 5209 5210void main(){ 5211 int vertexId = VertexID; 5212 5213 #include assign_group 5214 #include assign_color_varying 5215 #include assign_marker_varying 5216 #include assign_clipping_varying 5217 #include assign_position 5218 #include assign_size 5219 5220 #ifdef dPointSizeAttenuation 5221 gl_PointSize = size * uPixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 5.0; 5222 #else 5223 gl_PointSize = size * uPixelRatio; 5224 #endif 5225 gl_PointSize = max(1.0, gl_PointSize); 5226 5227 gl_Position = uProjection * mvPosition; 5228 5229 #include clip_instance 5230} 5231`,U=` 5232precision highp float; 5233precision highp int; 5234 5235#include common 5236#include common_frag_params 5237#include color_frag_params 5238#include common_clip 5239 5240const vec2 center = vec2(0.5); 5241const float radius = 0.5; 5242 5243void main(){ 5244 #include fade_lod 5245 #include clip_pixel 5246 5247 float fragmentDepth = gl_FragCoord.z; 5248 #include assign_material_color 5249 5250 #if defined(dPointStyle_circle) 5251 float dist = distance(gl_PointCoord, center); 5252 if (dist > radius) discard; 5253 #elif defined(dPointStyle_fuzzy) 5254 float dist = distance(gl_PointCoord, center); 5255 float fuzzyAlpha = 1.0 - smoothstep(0.0, radius, dist); 5256 if (fuzzyAlpha < 0.0001) discard; 5257 #endif 5258 5259 #if defined(dPointStyle_fuzzy) && (defined(dRenderVariant_color) || defined(dRenderVariant_tracing)) 5260 material.a *= fuzzyAlpha; 5261 #endif 5262 5263 #include check_transparency 5264 5265 #if defined(dRenderVariant_pick) 5266 #include check_picking_alpha 5267 #ifdef requiredDrawBuffers 5268 gl_FragColor = vObject; 5269 gl_FragData[1] = vInstance; 5270 gl_FragData[2] = vGroup; 5271 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 5272 #else 5273 gl_FragColor = vColor; 5274 #endif 5275 #elif defined(dRenderVariant_depth) 5276 gl_FragColor = material; 5277 #elif defined(dRenderVariant_marking) 5278 gl_FragColor = material; 5279 #elif defined(dRenderVariant_emissive) 5280 gl_FragColor = material; 5281 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 5282 gl_FragColor = material; 5283 #include apply_marker_color 5284 5285 #if defined(dRenderVariant_color) 5286 #include apply_fog 5287 #include wboit_write 5288 #include dpoit_write 5289 #elif defined(dRenderVariant_tracing) 5290 gl_FragData[1] = vec4(normalize(vViewPosition), emissive); 5291 gl_FragData[2] = vec4(material.rgb, uDensity); 5292 #endif 5293 #endif 5294} 5295`,V=` 5296precision highp float; 5297precision highp int; 5298 5299#include common 5300#include read_from_texture 5301#include common_vert_params 5302#include color_vert_params 5303#include size_vert_params 5304#include common_clip 5305 5306uniform mat4 uModelView; 5307uniform mat4 uInvProjection; 5308uniform float uIsOrtho; 5309uniform bool uIsAsymmetricProjection; 5310 5311uniform vec2 uTexDim; 5312uniform sampler2D tPositionGroup; 5313 5314attribute mat4 aTransform; 5315attribute float aInstance; 5316 5317varying float vRadius; 5318varying vec3 vPoint; 5319varying vec3 vPointViewPosition; 5320 5321/** 5322 * Bounding rectangle of a clipped, perspective-projected 3D Sphere. 5323 * Michael Mara, Morgan McGuire. 2013 5324 *
5325 * Specialization by Arseny Kapoulkine, MIT License Copyright (c) 2018 5326 * https://github.com/zeux/niagara 5327 * 5328 * Only works for for symmetric projections. 5329 */ 5330void sphereProjection(const in vec3 p, const in float r, const in vec2 mapping) { 5331 vec3 pr = p * r; 5332 float pzr2 = p.z * p.z - r * r; 5333 5334 float vx = sqrt(p.x * p.x + pzr2); 5335 float minx = ((vx * p.x - pr.z) / (vx * p.z + pr.x)) * uProjection[0][0]; 5336 float maxx = ((vx * p.x + pr.z) / (vx * p.z - pr.x)) * uProjection[0][0]; 5337 5338 float vy = sqrt(p.y * p.y + pzr2); 5339 float miny = ((vy * p.y - pr.z) / (vy * p.z + pr.y)) * uProjection[1][1]; 5340 float maxy = ((vy * p.y + pr.z) / (vy * p.z - pr.y)) * uProjection[1][1]; 5341 5342 gl_Position.xy = vec2(maxx + minx, maxy + miny) * -0.5; 5343 gl_Position.xy -= mapping * vec2(maxx - minx, maxy - miny) * 0.5; 5344 gl_Position.xy *= gl_Position.w; 5345} 5346 5347const mat4 D = mat4( 5348 1.0, 0.0, 0.0, 0.0, 5349 0.0, 1.0, 0.0, 0.0, 5350 0.0, 0.0, 1.0, 0.0, 5351 0.0, 0.0, 0.0, -1.0 5352); 5353 5354/** 5355 * Compute point size and center using the technique described in: 5356 * "GPU-Based Ray-Casting of Quadratic Surfaces" http://dl.acm.org/citation.cfm?id=2386396 5357 * by Christian Sigg, Tim Weyrich, Mario Botsch, Markus Gross. 5358 */ 5359void quadraticProjection(const in vec3 position, const in float radius, const in vec2 mapping) { 5360 vec2 xbc, ybc; 5361 5362 mat4 T = mat4( 5363 radius, 0.0, 0.0, 0.0, 5364 0.0, radius, 0.0, 0.0, 5365 0.0, 0.0, radius, 0.0, 5366 position.x, position.y, position.z, 1.0 5367 ); 5368 5369 mat4 R = transpose4(uProjection * uModelView * aTransform * T); 5370 float A = dot(R[3], D * R[3]); 5371 float B = -2.0 * dot(R[0], D * R[3]); 5372 float C = dot(R[0], D * R[0]); 5373 xbc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A); 5374 xbc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A); 5375 float sx = abs(xbc[0] - xbc[1]) * 0.5; 5376 5377 A = dot(R[3], D * R[3]); 5378 B = -2.0 * dot(R[1], D * R[3]); 5379 C = dot(R[1], D * R[1]); 5380 ybc[0] = (-B - sqrt(B * B - 4.0 * A * C)) / (2.0 * A); 5381 ybc[1] = (-B + sqrt(B * B - 4.0 * A * C)) / (2.0 * A); 5382 float sy = abs(ybc[0] - ybc[1]) * 0.5; 5383 5384 gl_Position.xy = vec2(0.5 * (xbc.x + xbc.y), 0.5 * (ybc.x + ybc.y)); 5385 gl_Position.xy -= mapping * vec2(sx, sy); 5386 gl_Position.xy *= gl_Position.w; 5387} 5388 5389void main(void){ 5390 vec2 mapping = vec2(1.0, 1.0); // vertices 2 and 5 5391 #if __VERSION__ == 100 5392 int m = imod(VertexID, 6); 5393 #else 5394 int m = VertexID % 6; 5395 #endif 5396 if (m == 0) { 5397 mapping = vec2(-1.0, 1.0); 5398 } else if (m == 1 || m == 3) { 5399 mapping = vec2(-1.0, -1.0); 5400 } else if (m == 4) { 5401 mapping = vec2(1.0, -1.0); 5402 } 5403 5404 int vertexId = VertexID / 6; 5405 5406 vec4 positionGroup = readFromTexture(tPositionGroup, vertexId, uTexDim); 5407 vec3 position = positionGroup.rgb; 5408 float group = positionGroup.a; 5409 5410 #include assign_color_varying 5411 #include assign_marker_varying 5412 #include assign_clipping_varying 5413 #include assign_size 5414 5415 vRadius = size * uModelScale; 5416 5417 vec4 position4 = vec4(position, 1.0); 5418 vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader 5419 5420 float d; 5421 if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) { 5422 if (uModelScale != 1.0) { 5423 vRadius *= uLod.w; 5424 } else { 5425 d = (dot(uCameraPlane.xyz, vModelPosition) + uCameraPlane.w) / uModelScale; 5426 float f = min( 5427 smoothstep(uLod.x, uLod.x + uLod.z, d), 5428 1.0 - smoothstep(uLod.y - uLod.z, uLod.y, d) 5429 ) * uLod.w; 5430 vRadius *= f; 5431 } 5432 } 5433 5434 vec4 mvPosition = uModelView * aTransform * position4; 5435 5436 #ifdef dApproximate 5437 vec4 mvCorner = vec4(mvPosition.xyz, 1.0); 5438 mvCorner.xy += mapping * vRadius; 5439 gl_Position = uProjection * mvCorner; 5440 #else 5441 if (uIsOrtho == 1.0) { 5442 vec4 mvCorner = vec4(mvPosition.xyz, 1.0); 5443 mvCorner.xy += mapping * vRadius;
5444 gl_Position = uProjection * mvCorner; 5445 } else if (uIsAsymmetricProjection) { 5446 gl_Position = uProjection * vec4(mvPosition.xyz, 1.0); 5447 quadraticProjection(position, vRadius / uModelScale, mapping); 5448 } else { 5449 gl_Position = uProjection * vec4(mvPosition.xyz, 1.0); 5450 sphereProjection(mvPosition.xyz, vRadius, mapping); 5451 } 5452 #endif 5453 5454 vec4 vPoint4 = uInvProjection * gl_Position; 5455 vPoint = vPoint4.xyz / vPoint4.w; 5456 vPointViewPosition = -mvPosition.xyz / mvPosition.w; 5457 5458 if (gl_Position.z < -gl_Position.w) { 5459 mvPosition.z -= 2.0 * vRadius; // avoid clipping 5460 gl_Position.z = (uProjection * vec4(mvPosition.xyz, 1.0)).z; 5461 } 5462 5463 if (uModelScale == 1.0) { 5464 if (uLod.w != 0.0 && (uLod.x != 0.0 || uLod.y != 0.0)) { 5465 if (d < uLod.x || d > uLod.y) { 5466 // move out of [ -w, +w ] to 'discard' in vert shader 5467 gl_Position.z = 2.0 * gl_Position.w; 5468 } 5469 } 5470 } 5471 5472 #if defined(dClipPrimitive) && !defined(dClipVariant_instance) && dClipObjectCount != 0 5473 if (clipTest(vModelPosition / uModelScale)) { 5474 // move out of [ -w, +w ] to 'discard' in vert shader 5475 gl_Position.z = 2.0 * gl_Position.w; 5476 } 5477 #else 5478 #include clip_instance 5479 #endif 5480} 5481`,j=` 5482precision highp float; 5483precision highp int; 5484 5485#define bumpEnabled 5486 5487#include common 5488#include common_frag_params 5489#include color_frag_params 5490#include light_frag_params 5491#include common_clip 5492 5493uniform mat4 uInvView; 5494uniform float uAlphaThickness; 5495 5496uniform vec4 uInteriorColor; 5497uniform vec4 uInteriorSubstance; 5498 5499varying float vRadius; 5500varying vec3 vPoint; 5501varying vec3 vPointViewPosition; 5502 5503#ifdef dSolidInterior 5504 const bool solidInterior = true; 5505#else 5506 const bool solidInterior = false; 5507#endif 5508 5509bool SphereImpostor(out vec3 modelPos, out vec3 cameraPos, out vec3 cameraNormal, out bool interior, out float fragmentDepth){ 5510 vec3 cameraSpherePos = -vPointViewPosition; 5511 5512 vec3 rayOrigin = mix(vec3(0.0, 0.0, 0.0), vPoint, uIsOrtho); 5513 vec3 rayDirection = mix(normalize(vPoint), vec3(0.0, 0.0, 1.0), uIsOrtho); 5514 vec3 cameraSphereDir = mix(cameraSpherePos, rayOrigin - cameraSpherePos, uIsOrtho); 5515 5516 float B = dot(rayDirection, cameraSphereDir); 5517 float det = B * B + vRadius * vRadius - dot(cameraSphereDir, cameraSphereDir); 5518 5519 if (det < 0.0) return false; 5520 5521 float sqrtDet = sqrt(det); 5522 float posT = mix(B + sqrtDet, B - sqrtDet, uIsOrtho); 5523 float negT = mix(B - sqrtDet, B + sqrtDet, uIsOrtho); 5524 5525 cameraPos = rayDirection * negT + rayOrigin; 5526 modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz; 5527 fragmentDepth = calcDepth(cameraPos); 5528 5529 bool objectClipped = false; 5530 5531 #if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0 5532 if (clipTest(modelPos)) { 5533 objectClipped = true; 5534 fragmentDepth = -1.0; 5535 } 5536 #endif 5537 5538 if (fragmentDepth > 0.0) { 5539 cameraNormal = normalize(cameraPos - cameraSpherePos); 5540 interior = false; 5541 return true; 5542 } else if (uDoubleSided || solidInterior) { 5543 cameraPos = rayDirection * posT + rayOrigin; 5544 modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz; 5545 fragmentDepth = calcDepth(cameraPos); 5546 cameraNormal = -normalize(cameraPos - cameraSpherePos); 5547 interior = true; 5548 if (fragmentDepth > 0.0) { 5549 #ifdef dSolidInterior 5550 if (!objectClipped) { 5551 fragmentDepth = 0.0 + (0.0000001 / vRadius); 5552 cameraNormal = -mix(normalize(vPoint), vec3(0.0, 0.0, -1.0), uIsOrtho); 5553 5554 // intersection of ray with near plane 5555 float nearT = - (uNear + dot(rayOrigin, vec3(0.0, 0.0, 1.0))) / dot(rayDirection, vec3(0.0, 0.0, 1.0)); 5556 cameraPos = rayDirection * nearT + rayOrigin; 5557 modelPos = (uInvView * vec4(cameraPos, 1.0)).xyz; 5558 } 5559 #endif 5560 return true; 5561 } 5562 } 5563 5564 return false; 5565} 5566 5567void main(void){ 5568 vec3 cameraNormal; 5569 float fragmentDepth; 5570 5571 #ifdef dApproximate 5572 vec3 pointDir = -vPointViewPosition - vPoint; 5573 if (dot(pointDir, pointDir) > vRadius * vRadius) discard; 5574 vec3 vViewPosition = -vPointViewPosition; 5575 fragmentDepth = gl_FragCoord.z;
5576 #if !defined(dIgnoreLight) || defined(dXrayShaded) || defined(dRenderVariant_tracing) 5577 pointDir.z -= cos(length(pointDir)) * vRadius * 0.5; 5578 cameraNormal = -normalize(pointDir); 5579 #endif 5580 interior = false; 5581 #else 5582 vec3 modelPos; 5583 vec3 cameraPos; 5584 bool hit = SphereImpostor(modelPos, cameraPos, cameraNormal, interior, fragmentDepth); 5585 if (!hit) discard; 5586 5587 if (fragmentDepth < 0.0) discard; 5588 if (fragmentDepth > 1.0) discard; 5589 5590 gl_FragDepthEXT = fragmentDepth; 5591 5592 vec3 vModelPosition = modelPos; 5593 vec3 vViewPosition = cameraPos; 5594 #endif 5595 5596 #include fade_lod 5597 #if !defined(dClipPrimitive) && defined(dClipVariant_pixel) && dClipObjectCount != 0 5598 #include clip_pixel 5599 #endif 5600 5601 #ifdef dNeedsNormal 5602 vec3 normal = -cameraNormal; 5603 #endif 5604 5605 #include assign_material_color 5606 5607 #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 5608 if (uRenderMask == MaskTransparent && uAlphaThickness > 0.0) { 5609 material.a *= min(1.0, vRadius / (uAlphaThickness * uModelScale)); 5610 } 5611 #endif 5612 5613 #include check_transparency 5614 5615 #if defined(dRenderVariant_pick) 5616 #include check_picking_alpha 5617 #ifdef requiredDrawBuffers 5618 gl_FragColor = vObject; 5619 gl_FragData[1] = vInstance; 5620 gl_FragData[2] = vGroup; 5621 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 5622 #else 5623 gl_FragColor = vColor; 5624 #endif 5625 #elif defined(dRenderVariant_depth) 5626 gl_FragColor = material; 5627 #elif defined(dRenderVariant_marking) 5628 gl_FragColor = material; 5629 #elif defined(dRenderVariant_emissive) 5630 gl_FragColor = material; 5631 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 5632 #include apply_interior_color 5633 #include apply_light_color 5634 #include apply_marker_color 5635 5636 #if defined(dRenderVariant_color) 5637 #include apply_fog 5638 #include wboit_write 5639 #include dpoit_write 5640 #elif defined(dRenderVariant_tracing) 5641 gl_FragData[1] = vec4(normal, emissive); 5642 gl_FragData[2] = vec4(material.rgb, uDensity); 5643 #endif 5644 #endif 5645} 5646`,H=` 5647precision highp float; 5648precision highp int; 5649 5650#include common 5651#include read_from_texture 5652#include common_vert_params 5653#include color_vert_params 5654#include size_vert_params 5655#include common_clip 5656 5657uniform mat4 uModelView; 5658 5659attribute mat4 aTransform; 5660attribute float aInstance; 5661attribute float aGroup; 5662 5663attribute vec3 aMapping; 5664attribute vec3 aStart; 5665attribute vec3 aEnd; 5666attribute float aScale; 5667attribute float aCap; 5668attribute float aColorMode; 5669 5670varying mat4 vTransform; 5671varying vec3 vStart; 5672varying vec3 vEnd; 5673varying float vSize; 5674varying float vCap; 5675 5676uniform float uIsOrtho; 5677uniform vec3 uCameraDir; 5678 5679void main() { 5680 int vertexId = VertexID; 5681 5682 #include assign_group 5683 #include assign_color_varying 5684 #include assign_marker_varying 5685 #include assign_clipping_varying 5686 #include assign_size 5687 5688 mat4 modelTransform = uModel * aTransform; 5689 5690 vTransform = modelTransform; 5691 vStart = (modelTransform * vec4(aStart, 1.0)).xyz; 5692 vEnd = (modelTransform * vec4(aEnd, 1.0)).xyz; 5693 vSize = size * aScale * uModelScale; 5694 vCap = aCap; 5695 5696 vModelPosition = (vStart + vEnd) * 0.5; 5697 vec3 camDir = -mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho); 5698 vec3 dir = vEnd - vStart; 5699 float f = aMapping.x > 0.0 ? 1.0 : 0.0; 5700 // ensure cylinder 'dir' is pointing towards the camera 5701 if(dot(camDir, dir) < 0.0) { 5702 dir = -dir; 5703 f = 1.0 - f; 5704 } 5705 5706 vec3 left = cross(camDir, dir); 5707 vec3 up = cross(left, dir); 5708 left = vSize * normalize(left); 5709 up = vSize * normalize(up); 5710 5711 // move vertex in object-space from center to corner 5712 vModelPosition += aMapping.x * dir + aMapping.y * left + aMapping.z * up; 5713
5714 vec4 mvPosition = uView * vec4(vModelPosition, 1.0); 5715 vViewPosition = mvPosition.xyz; 5716 gl_Position = uProjection * mvPosition; 5717 5718 if (gl_Position.z < -gl_Position.w) { 5719 mvPosition.z -= 2.0 * (length(vEnd - vStart) + vSize); // avoid clipping 5720 gl_Position.z = (uProjection * mvPosition).z; 5721 } 5722 5723 #if defined(dDualColor) && defined(dRenderVariant_color) && (defined(dColorType_group) || defined(dColorType_groupInstance)) 5724 // dual-color mixing 5725 // - for aColorMode between 0 and 1 use aColorMode to interpolate 5726 // - for aColorMode == 2 do nothing, i.e., use vColor 5727 // - for aColorMode == 3 use position on cylinder axis to interpolate 5728 if (aColorMode <= 1.0){ 5729 vColor.rgb = mix(vColor.rgb, color2.rgb, aColorMode); 5730 } else if (aColorMode == 3.0) { 5731 vColor.rgb = mix(vColor.rgb, color2.rgb, mix(-0.25, 1.25, f / 1.5)); 5732 } 5733 #endif 5734 5735 #include clip_instance 5736} 5737`,q=` 5738precision highp float; 5739precision highp int; 5740 5741#define bumpEnabled 5742 5743uniform mat4 uView; 5744 5745varying mat4 vTransform; 5746varying vec3 vStart; 5747varying vec3 vEnd; 5748varying float vSize; 5749varying float vCap; 5750 5751uniform vec3 uCameraDir; 5752uniform vec3 uCameraPosition; 5753uniform mat4 uInvView; 5754 5755uniform vec4 uInteriorColor; 5756uniform vec4 uInteriorSubstance; 5757 5758#include common 5759#include common_frag_params 5760#include color_frag_params 5761#include light_frag_params 5762#include common_clip 5763 5764#ifdef dSolidInterior 5765 const bool solidInterior = true; 5766#else 5767 const bool solidInterior = false; 5768#endif 5769 5770// adapted from https://www.shadertoy.com/view/4lcSRn 5771// The MIT License, Copyright 2016 Inigo Quilez 5772bool CylinderImpostor( 5773 in vec3 rayOrigin, in vec3 rayDir, 5774 in vec3 start, in vec3 end, in float radius, 5775 out vec3 cameraNormal, out bool interior, 5776 out vec3 modelPosition, out vec3 viewPosition, out float fragmentDepth 5777){ 5778 vec3 ba = end - start; 5779 vec3 oc = rayOrigin - start; 5780 5781 float baba = dot(ba, ba); 5782 float bard = dot(ba, rayDir); 5783 float baoc = dot(ba, oc); 5784 5785 float k2 = baba - bard * bard; 5786 float k1 = baba * dot(oc, rayDir) - baoc * bard;
5787 float k0 = baba * dot(oc, oc) - baoc * baoc - radius * radius * baba; 5788 5789 float h = k1 * k1 - k2 * k0; 5790 if (h < 0.0) return false; 5791 5792 bool topCap = (vCap > 0.9 && vCap < 1.1) || vCap >= 2.9; 5793 bool bottomCap = (vCap > 1.9 && vCap < 2.1) || vCap >= 2.9; 5794 5795 #ifdef dSolidInterior 5796 bool topInterior = !topCap; 5797 bool bottomInterior = !bottomCap; 5798 topCap = true; 5799 bottomCap = true; 5800 #else 5801 bool topInterior = false; 5802 bool bottomInterior = false; 5803 #endif 5804 5805 bool clipped = false; 5806 bool objectClipped = false; 5807 5808 // body outside 5809 h = sqrt(h); 5810 float t = (-k1 - h) / k2; 5811 float y = baoc + t * bard; 5812 if (y > 0.0 && y < baba) { 5813 interior = false; 5814 cameraNormal = (oc + t * rayDir - ba * y / baba) / radius; 5815 modelPosition = rayOrigin + t * rayDir; 5816 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5817 fragmentDepth = calcDepth(viewPosition); 5818 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 5819 if (clipTest(modelPosition)) { 5820 objectClipped = true; 5821 fragmentDepth = -1.0; 5822 #ifdef dSolidInterior 5823 topCap = !topInterior; 5824 bottomCap = !bottomInterior; 5825 #endif 5826 } 5827 #endif 5828 if (fragmentDepth > 0.0) return true; 5829 clipped = true; 5830 } 5831 5832 if (!clipped) { 5833 if (topCap && y < 0.0) { 5834 // top cap 5835 t = -baoc / bard; 5836 if (abs(k1 + k2 * t) < h) { 5837 interior = topInterior; 5838 cameraNormal = -ba / baba; 5839 modelPosition = rayOrigin + t * rayDir;
5840 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5841 fragmentDepth = calcDepth(viewPosition); 5842 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 5843 if (clipTest(modelPosition)) { 5844 objectClipped = true; 5845 fragmentDepth = -1.0; 5846 #ifdef dSolidInterior 5847 topCap = !topInterior; 5848 bottomCap = !bottomInterior; 5849 #endif 5850 } 5851 #endif 5852 if (fragmentDepth > 0.0) { 5853 #ifdef dSolidInterior 5854 if (interior) cameraNormal = -rayDir; 5855 #endif 5856 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 5857 return true; 5858 #else 5859 return !interior; 5860 #endif 5861 } 5862 } 5863 } else if (bottomCap && y >= 0.0) { 5864 // bottom cap 5865 t = (baba - baoc) / bard; 5866 if (abs(k1 + k2 * t) < h) { 5867 interior = bottomInterior; 5868 cameraNormal = ba / baba; 5869 modelPosition = rayOrigin + t * rayDir;
5870 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5871 fragmentDepth = calcDepth(viewPosition); 5872 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 5873 if (clipTest(modelPosition)) { 5874 objectClipped = true; 5875 fragmentDepth = -1.0; 5876 #ifdef dSolidInterior 5877 topCap = !topInterior; 5878 bottomCap = !bottomInterior; 5879 #endif 5880 } 5881 #endif 5882 if (fragmentDepth > 0.0) { 5883 #ifdef dSolidInterior 5884 if (interior) cameraNormal = -rayDir; 5885 #endif 5886 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 5887 return true; 5888 #else 5889 return !interior; 5890 #endif 5891 } 5892 } 5893 } 5894 } 5895 5896 if (uDoubleSided || solidInterior) { 5897 // body inside 5898 h = -h; 5899 t = (-k1 - h) / k2; 5900 y = baoc + t * bard; 5901 if (y > 0.0 && y < baba) { 5902 interior = true; 5903 cameraNormal = -(oc + t * rayDir - ba * y / baba) / radius; 5904 modelPosition = rayOrigin + t * rayDir;
5905 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5906 fragmentDepth = calcDepth(viewPosition); 5907 if (fragmentDepth > 0.0) { 5908 #ifdef dSolidInterior 5909 if (!objectClipped) { 5910 fragmentDepth = 0.0 + (0.0000002 / vSize); 5911 cameraNormal = -rayDir; 5912 5913 // intersection of ray in model space with near plane in camera space 5914 vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz; 5915 vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz; 5916 float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z; 5917 viewPosition = cameraRayOrigin + nearT * cameraRayDir; 5918 modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz; 5919 } 5920 #endif 5921 return true; 5922 } 5923 } 5924 5925 if (topCap && y < 0.0) { 5926 // top cap 5927 t = -baoc / bard; 5928 if (abs(k1 + k2 * t) < -h) { 5929 interior = true; 5930 cameraNormal = ba / baba; 5931 modelPosition = rayOrigin + t * rayDir;
5932 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5933 fragmentDepth = calcDepth(viewPosition); 5934 if (fragmentDepth > 0.0) { 5935 #ifdef dSolidInterior 5936 if (!objectClipped) { 5937 fragmentDepth = 0.0 + (0.0000002 / vSize); 5938 cameraNormal = -rayDir; 5939 5940 // intersection of ray in model space with near plane in camera space 5941 vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz; 5942 vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz; 5943 float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z; 5944 viewPosition = cameraRayOrigin + nearT * cameraRayDir; 5945 modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz; 5946 } 5947 #endif 5948 return true; 5949 } 5950 } 5951 } else if (bottomCap && y >= 0.0) { 5952 // bottom cap 5953 t = (baba - baoc) / bard; 5954 if (abs(k1 + k2 * t) < -h) { 5955 interior = true; 5956 cameraNormal = -ba / baba; 5957 modelPosition = rayOrigin + t * rayDir;
5958 viewPosition = (uView * vec4(modelPosition, 1.0)).xyz; 5959 fragmentDepth = calcDepth(viewPosition); 5960 if (fragmentDepth > 0.0) { 5961 #ifdef dSolidInterior 5962 if (!objectClipped) { 5963 fragmentDepth = 0.0 + (0.0000002 / vSize); 5964 cameraNormal = -rayDir; 5965 5966 // intersection of ray in model space with near plane in camera space 5967 vec3 cameraRayOrigin = (uView * vec4(rayOrigin, 1.0)).xyz; 5968 vec3 cameraRayDir = (uView * vec4(rayDir, 0.0)).xyz; 5969 float nearT = - (uNear + cameraRayOrigin.z) / cameraRayDir.z; 5970 viewPosition = cameraRayOrigin + nearT * cameraRayDir; 5971 modelPosition = (uInvView * vec4(viewPosition, 1.0)).xyz; 5972 } 5973 #endif 5974 return true; 5975 } 5976 } 5977 } 5978 } 5979 5980 return false; 5981} 5982 5983void main() { 5984 vec3 rayOrigin = vModelPosition; 5985 vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho); 5986 5987 vec3 cameraNormal; 5988 vec3 modelPosition; 5989 vec3 viewPosition; 5990 float fragmentDepth; 5991 bool hit = CylinderImpostor(rayOrigin, rayDir, vStart, vEnd, vSize, cameraNormal, interior, modelPosition, viewPosition, fragmentDepth); 5992 if (!hit) discard; 5993 5994 if (fragmentDepth < 0.0) discard; 5995 if (fragmentDepth > 1.0) discard; 5996 5997 gl_FragDepthEXT = fragmentDepth; 5998 5999 vec3 vViewPosition = viewPosition; 6000 vec3 vModelPosition = modelPosition; 6001 6002 #include fade_lod 6003 #include clip_pixel 6004 6005 #ifdef dNeedsNormal 6006 mat3 normalMatrix = adjoint(uView); 6007 vec3 normal = normalize(normalMatrix * -normalize(cameraNormal)); 6008 #endif 6009 6010 #include assign_material_color 6011 #include check_transparency 6012 6013 #if defined(dRenderVariant_pick) 6014 #include check_picking_alpha 6015 #ifdef requiredDrawBuffers 6016 gl_FragColor = vObject; 6017 gl_FragData[1] = vInstance; 6018 gl_FragData[2] = vGroup; 6019 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 6020 #else 6021 gl_FragColor = vColor; 6022 #endif 6023 #elif defined(dRenderVariant_depth) 6024 gl_FragColor = material; 6025 #elif defined(dRenderVariant_marking) 6026 gl_FragColor = material; 6027 #elif defined(dRenderVariant_emissive) 6028 gl_FragColor = material; 6029 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6030 #include apply_interior_color 6031 #include apply_light_color 6032 #include apply_marker_color 6033 6034 #if defined(dRenderVariant_color) 6035 #include apply_fog 6036 #include wboit_write 6037 #include dpoit_write 6038 #elif defined(dRenderVariant_tracing) 6039 gl_FragData[1] = vec4(normal, emissive); 6040 gl_FragData[2] = vec4(material.rgb, uDensity); 6041 #endif 6042 #endif 6043} 6044`,X=` 6045precision highp float; 6046precision highp int; 6047 6048#include common 6049#include read_from_texture 6050#include common_vert_params 6051#include color_vert_params 6052#include size_vert_params 6053#include common_clip 6054 6055uniform mat4 uModelView; 6056 6057attribute vec3 aPosition; 6058attribute vec2 aMapping; 6059attribute float aDepth; 6060attribute vec2 aTexCoord; 6061attribute mat4 aTransform; 6062attribute float aInstance; 6063attribute float aGroup; 6064 6065uniform float uOffsetX; 6066uniform float uOffsetY; 6067uniform float uOffsetZ; 6068 6069uniform float uIsOrtho; 6070uniform float uPixelRatio; 6071uniform vec4 uViewport; 6072uniform mat4 uInvHeadRotation; 6073uniform bool uHasHeadRotation; 6074uniform mat4 uModelViewEye; 6075uniform mat4 uInvModelViewEye; 6076uniform bool uHasEyeCamera; 6077 6078varying vec2 vTexCoord; 6079 6080void main(void){ 6081 int vertexId = VertexID; 6082 6083 #include assign_group 6084 #include assign_color_varying 6085 #include assign_marker_varying 6086 #include assign_clipping_varying 6087 #include assign_size 6088 6089 vTexCoord = aTexCoord; 6090 6091 float scale = uModelScale; 6092 6093 float offsetX = uOffsetX * scale; 6094 float offsetY = uOffsetY * scale; 6095 float offsetZ = (uOffsetZ + aDepth * 0.95) * scale; 6096
6097 vec4 position4 = vec4(aPosition, 1.0); 6098 vec4 mvPosition = uHasEyeCamera 6099 ? uModelViewEye * aTransform * position4 6100 : uModelView * aTransform * position4; 6101 6102 vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader 6103 6104 // TODO 6105 // #ifdef FIXED_SIZE 6106 // if (ortho) { 6107 // scale /= pixelRatio * ((uViewport.w / 2.0) / -uCameraPosition.z) * 0.1; 6108 // } else { 6109 // scale /= pixelRatio * ((uViewport.w / 2.0) / -mvPosition.z) * 0.1; 6110 // } 6111 // #endif 6112 6113 vec4 mvCenter = vec4(mvPosition.xyz, 1.0); 6114 6115 if (vTexCoord.x == 10.0) { // indicates background plane 6116 // move a bit to the back, taking distance to camera into account to avoid z-fighting 6117 offsetZ -= 0.001 * distance(uCameraPosition, (uProjection * mvCenter).xyz); 6118 } 6119 6120 // apply Z offset in view space 6121 if (!uHasEyeCamera) { 6122 if (uIsOrtho == 1.0) { 6123 mvCenter.z += offsetZ; 6124 } else { 6125 mvCenter.xyz += normalize(-mvCenter.xyz) * offsetZ; 6126 } 6127 } 6128 6129 if (uHasEyeCamera) { 6130 mvCenter = uModelView * uInvModelViewEye * mvCenter; 6131 } 6132 6133 // project center to clip space 6134 vec4 clip = uProjection * mvCenter; 6135 6136 // compute corner offset in screen-space units 6137 vec2 cornerOffset = aMapping * size * scale; 6138 cornerOffset.x += offsetX; 6139 cornerOffset.y += offsetY; 6140 6141 if (uHasHeadRotation) { 6142 vec3 rotatedOffset = (uInvHeadRotation * vec4(cornerOffset, 0.0, 0.0)).xyz; 6143 clip += uProjection * vec4(rotatedOffset, 0.0); 6144 } else { 6145 // apply offset in clip space to avoid perspective distortion on the quad 6146 clip.xy += vec2(uProjection[0][0], uProjection[1][1]) * cornerOffset; 6147 } 6148 6149 gl_Position = clip; 6150 6151 vViewPosition = -mvCenter.xyz; 6152 6153 #include clip_instance 6154} 6155`,W=` 6156precision highp float; 6157precision highp int; 6158 6159#include common 6160#include common_frag_params 6161#include color_frag_params 6162#include common_clip 6163 6164uniform sampler2D tFont; 6165 6166uniform vec3 uBorderColor; 6167uniform float uBorderWidth; 6168uniform vec3 uBackgroundColor;
6169uniform float uBackgroundOpacity; 6170 6171varying vec2 vTexCoord; 6172 6173void main(){ 6174 #include fade_lod 6175 #include clip_pixel 6176 6177 float fragmentDepth = gl_FragCoord.z; 6178 6179 // determine if this is a background or glyph fragment 6180 bool isBackground = vTexCoord.x > 1.0; 6181 6182 // discard background for non-visual variants (depth, pick, marking, emissive) 6183 #if !defined(dRenderVariant_color) && !defined(dRenderVariant_tracing) 6184 if (isBackground) discard; 6185 #endif 6186 6187 // SDF test for glyph fragments â discard pixels outside glyph+border 6188 float rawSdf = 0.0; 6189 if (!isBackground) { 6190 rawSdf = texture2D(tFont, vTexCoord).a; 6191 float sdf = rawSdf + min(uBorderWidth, 0.49); // clamp to avoid exceeding max SDF range 6192 if (sdf < 0.5) discard; 6193 } 6194 6195 #ifdef enabledFragDepth 6196 gl_FragDepthEXT = fragmentDepth; 6197 #endif 6198 6199 #include assign_material_color 6200 6201 if (isBackground) { 6202 #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6203 material = vec4(uBackgroundColor, uBackgroundOpacity * material.a); 6204 #endif 6205 } else { 6206 #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6207 if (uBorderWidth > 0.0 && rawSdf < 0.5) { 6208 material.xyz = uBorderColor; 6209 } else { 6210 // push text fragments forward in depth so they render in front of border 6211 #ifdef enabledFragDepth 6212 gl_FragDepthEXT = fragmentDepth - 0.0001; 6213 #endif 6214 } 6215 #endif 6216 } 6217 6218 #include check_transparency 6219 6220 #if defined(dRenderVariant_pick) 6221 #include check_picking_alpha 6222 #ifdef requiredDrawBuffers 6223 gl_FragColor = vObject; 6224 gl_FragData[1] = vInstance; 6225 gl_FragData[2] = vGroup; 6226 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 6227 #else 6228 gl_FragColor = vColor; 6229 #endif 6230 #elif defined(dRenderVariant_depth) 6231 gl_FragColor = material; 6232 #elif defined(dRenderVariant_marking) 6233 gl_FragColor = material; 6234 #elif defined(dRenderVariant_emissive) 6235 gl_FragColor = material; 6236 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6237 gl_FragColor = material; 6238 #include apply_marker_color 6239 6240 #if defined(dRenderVariant_color) 6241 #include apply_fog 6242 #include wboit_write 6243 #include dpoit_write 6244 #elif defined(dRenderVariant_tracing) 6245 gl_FragData[1] = vec4(-normalize(vViewPosition), emissive); 6246 gl_FragData[2] = vec4(material.rgb, uDensity); 6247 #endif 6248 #endif 6249} 6250`,K=` 6251precision highp float; 6252precision highp int; 6253 6254#include common 6255#include read_from_texture 6256#include common_vert_params 6257#include color_vert_params 6258#include size_vert_params 6259#include common_clip 6260 6261uniform float uPixelRatio; 6262uniform vec4 uViewport; 6263 6264attribute mat4 aTransform; 6265attribute float aInstance; 6266attribute float aGroup; 6267 6268attribute vec2 aMapping; 6269attribute vec3 aStart; 6270attribute vec3 aEnd; 6271 6272void trimSegment(const in vec4 start, inout vec4 end) { 6273 // trim end segment so it terminates between the camera plane and the near plane 6274 // conservative estimate of the near plane 6275 float a = uProjection[2][2]; // 3rd entry in 3rd column 6276 float b = uProjection[3][2]; // 3rd entry in 4th column 6277 float nearEstimate = -0.5 * b / a; 6278 float alpha = (nearEstimate - start.z) / (end.z - start.z); 6279 end.xyz = mix(start.xyz, end.xyz, alpha); 6280} 6281 6282void main(){ 6283 float aspect = uViewport.z / uViewport.w; 6284 int vertexId = VertexID; 6285 6286 #include assign_group 6287 #include assign_color_varying 6288 #include assign_marker_varying 6289 #include assign_clipping_varying 6290 #include assign_size 6291 6292 mat4 modelView = uView * uModel * aTransform; 6293 6294 // camera space 6295 vec4 start = modelView * vec4(aStart, 1.0); 6296 vec4 end = modelView * vec4(aEnd, 1.0); 6297 6298 // assign position 6299 vec4 position4 = vec4((aMapping.y < 0.5) ? aStart : aEnd, 1.0); 6300 vec4 mvPosition = modelView * position4; 6301 vViewPosition = mvPosition.xyz; 6302 6303 vModelPosition = (uModel * aTransform * position4).xyz; // for clipping in frag shader 6304 6305 // special case for perspective projection, and segments that terminate either in, or behind, the camera plane 6306 // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space 6307 // but we need to perform ndc-space calculations in the shader, so we must address this issue directly 6308 // perhaps there is a more elegant solution -- WestLangley 6309 bool perspective = (uProjection[2][3] == -1.0); // 4th entry in the 3rd column 6310 if (perspective) { 6311 if (start.z < 0.0 && end.z >= 0.0) { 6312 trimSegment(start, end); 6313 } else if (end.z < 0.0 && start.z >= 0.0) { 6314 trimSegment(end, start); 6315 } 6316 } 6317 6318 // clip space 6319 vec4 clipStart = uProjection * start; 6320 vec4 clipEnd = uProjection * end; 6321 6322 // ndc space 6323 vec2 ndcStart = clipStart.xy / clipStart.w; 6324 vec2 ndcEnd = clipEnd.xy / clipEnd.w; 6325 6326 // direction 6327 vec2 dir = ndcEnd - ndcStart; 6328 6329 // account for clip-space aspect ratio 6330 dir.x *= aspect; 6331 dir = normalize(dir); 6332 6333 // perpendicular to dir 6334 vec2 offset = vec2(dir.y, - dir.x); 6335 6336 // undo aspect ratio adjustment 6337 dir.x /= aspect; 6338 offset.x /= aspect; 6339 6340 // sign flip 6341 if (aMapping.x < 0.0) offset *= -1.0; 6342 6343 // calculate linewidth 6344 float linewidth; 6345 #ifdef dLineSizeAttenuation 6346 linewidth = size * uPixelRatio * ((uViewport.w / 2.0) / -start.z) * 5.0; 6347 #else 6348 linewidth = size * uPixelRatio; 6349 #endif 6350 linewidth = max(1.0, linewidth); 6351 6352 // adjust for linewidth 6353 offset *= linewidth; 6354 6355 // adjust for clip-space to screen-space conversion 6356 offset /= uViewport.w; 6357 6358 // select end 6359 vec4 clip = (aMapping.y < 0.5) ? clipStart : clipEnd; 6360 6361 // back to clip space 6362 offset *= clip.w;
6363 clip.xy += offset; 6364 gl_Position = clip; 6365 6366 #include clip_instance 6367} 6368`,Q=` 6369precision highp float; 6370precision highp int; 6371 6372#include common 6373#include common_frag_params 6374#include color_frag_params 6375#include common_clip 6376 6377void main(){ 6378 #include fade_lod 6379 #include clip_pixel 6380 6381 float fragmentDepth = gl_FragCoord.z; 6382 #include assign_material_color 6383 #include check_transparency 6384 6385 #if defined(dRenderVariant_pick) 6386 #include check_picking_alpha 6387 #ifdef requiredDrawBuffers 6388 gl_FragColor = vObject; 6389 gl_FragData[1] = vInstance; 6390 gl_FragData[2] = vGroup; 6391 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 6392 #else 6393 gl_FragColor = vColor; 6394 #endif 6395 #elif defined(dRenderVariant_depth) 6396 gl_FragColor = material; 6397 #elif defined(dRenderVariant_marking) 6398 gl_FragColor = material; 6399 #elif defined(dRenderVariant_emissive) 6400 gl_FragColor = material; 6401 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6402 gl_FragColor = material; 6403 #include apply_marker_color 6404 6405 #if defined(dRenderVariant_color) 6406 #include apply_fog 6407 #include wboit_write 6408 #include dpoit_write 6409 #elif defined(dRenderVariant_tracing) 6410 gl_FragData[1] = vec4(normalize(vViewPosition), emissive); 6411 gl_FragData[2] = vec4(material.rgb, uDensity); 6412 #endif 6413 #endif 6414} 6415`,Z=` 6416precision highp float; 6417precision highp int; 6418precision highp sampler2D; 6419 6420#include common 6421#include read_from_texture 6422#include common_vert_params 6423#include color_vert_params 6424#include common_clip 6425#include texture3d_from_2d_linear 6426 6427#ifdef dGeometryType_textureMesh 6428 uniform vec2 uGeoTexDim; 6429 uniform sampler2D tPosition; 6430 uniform sampler2D tGroup; 6431 uniform sampler2D tNormal; 6432#else 6433 attribute vec3 aPosition; 6434 attribute float aGroup; 6435 attribute vec3 aNormal; 6436#endif 6437attribute mat4 aTransform; 6438attribute float aInstance; 6439 6440varying vec3 vNormal; 6441 6442void main(){ 6443 int vertexId = VertexID; 6444 6445 #include assign_group 6446 #include assign_marker_varying 6447 #include assign_clipping_varying 6448 #include assign_position 6449 #include assign_color_varying 6450 #include clip_instance 6451 6452 #ifdef dGeometryType_textureMesh 6453 vec3 normal = readFromTexture(tNormal, vertexId, uGeoTexDim).xyz; 6454 #else 6455 vec3 normal = aNormal; 6456 #endif 6457 mat3 normalMatrix = adjoint(modelView); 6458 vec3 transformedNormal = normalize(normalMatrix * normalize(normal)); 6459 #if defined(dFlipSided) 6460 if (!uDoubleSided) { // TODO checking uDoubleSided should not be required, ASR 6461 transformedNormal = -transformedNormal; 6462 } 6463 #endif 6464 vNormal = transformedNormal; 6465} 6466`,Y=` 6467precision highp float; 6468precision highp int; 6469 6470#define bumpEnabled 6471 6472#include common 6473#include common_frag_params 6474#include color_frag_params 6475#include light_frag_params 6476#include normal_frag_params 6477#include common_clip 6478 6479uniform vec4 uInteriorColor; 6480uniform vec4 uInteriorSubstance; 6481 6482void main() { 6483 #include fade_lod 6484 #include clip_pixel 6485 6486 interior = !gl_FrontFacing; 6487 6488 float fragmentDepth = gl_FragCoord.z; 6489 6490 #ifdef dNeedsNormal 6491 #if defined(dFlatShaded) 6492 vec3 fdx = dFdx(vViewPosition); 6493 vec3 fdy = dFdy(vViewPosition); 6494 vec3 normal = -normalize(cross(fdx,fdy)); 6495 #else 6496 vec3 normal = -normalize(vNormal); 6497 if (uDoubleSided) normal *= float(gl_FrontFacing) * 2.0 - 1.0; 6498 #endif 6499 6500 #if defined(dFlipSided) 6501 normal *= -1.0; 6502 #endif 6503 #endif 6504 6505 #include assign_material_color 6506 #include check_transparency 6507 6508 #if defined(dRenderVariant_pick) 6509 #include check_picking_alpha 6510 #ifdef requiredDrawBuffers 6511 gl_FragColor = vObject; 6512 gl_FragData[1] = vInstance; 6513 gl_FragData[2] = vGroup; 6514 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 6515 #else 6516 gl_FragColor = vColor; 6517 #endif 6518 #elif defined(dRenderVariant_depth) 6519 gl_FragColor = material; 6520 #elif defined(dRenderVariant_marking) 6521 gl_FragColor = material; 6522 #elif defined(dRenderVariant_emissive) 6523 gl_FragColor = material; 6524 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6525 #include apply_interior_color 6526 #include apply_light_color 6527 #include apply_marker_color 6528 6529 #if defined(dRenderVariant_color) 6530 #include apply_fog 6531 #include wboit_write 6532 #include dpoit_write 6533 #elif defined(dRenderVariant_tracing) 6534 gl_FragData[1] = vec4(normal, emissive); 6535 gl_FragData[2] = vec4(material.rgb, uDensity); 6536 #endif 6537 #endif 6538} 6539`,$=` 6540precision highp float; 6541 6542attribute vec3 aPosition; 6543attribute mat4 aTransform; 6544attribute float aInstance; 6545 6546uniform mat4 uModel; 6547uniform mat4 uModelView; 6548uniform mat4 uProjection; 6549uniform vec4 uInvariantBoundingSphere; 6550uniform float uModelScale; 6551 6552varying vec3 vModelPosition; 6553varying float vInstance; 6554varying vec4 vBoundingSphere; 6555varying mat4 vTransform; 6556 6557uniform vec3 uBboxSize; 6558uniform vec3 uBboxMin; 6559uniform vec3 uBboxMax; 6560uniform vec3 uGridDim; 6561uniform mat4 uTransform; 6562 6563uniform mat4 uUnitToCartn; 6564 6565void main() { 6566 vec4 unitCoord = vec4(aPosition + vec3(0.5), 1.0); 6567 vec4 mvPosition = uModelView * aTransform * uUnitToCartn * unitCoord; 6568 6569 vModelPosition = (uModel * aTransform * uUnitToCartn * unitCoord).xyz; 6570 vInstance = aInstance; 6571 vBoundingSphere = vec4( 6572 (uModel * aTransform * vec4(uInvariantBoundingSphere.xyz, 1.0)).xyz, 6573 uModelScale * uInvariantBoundingSphere.w 6574 ); 6575 vTransform = aTransform; 6576 6577 gl_Position = uProjection * mvPosition; 6578 6579 // move z position to near clip plane (but not too close to get precision issues) 6580 gl_Position.z = gl_Position.w - 0.01; 6581} 6582`,J=` 6583precision highp float; 6584precision highp int; 6585 6586#include common 6587#include light_frag_params 6588
6589#if dClipObjectCount != 0 6590 uniform int uClipObjectType[dClipObjectCount]; 6591 uniform bool uClipObjectInvert[dClipObjectCount]; 6592 uniform vec3 uClipObjectPosition[dClipObjectCount]; 6593 uniform vec4 uClipObjectRotation[dClipObjectCount]; 6594 uniform vec3 uClipObjectScale[dClipObjectCount]; 6595 uniform mat4 uClipObjectTransform[dClipObjectCount]; 6596#endif 6597#include common_clip 6598 6599#include read_from_texture 6600#include texture3d_from_1d_trilinear 6601#include texture3d_from_2d_nearest 6602#include texture3d_from_2d_linear 6603 6604uniform mat4 uProjection, uTransform, uModelView, uModel, uView; 6605uniform vec3 uCameraDir; 6606uniform float uModelScale; 6607 6608uniform sampler2D tDepth; 6609uniform vec2 uDrawingBufferSize; 6610 6611varying vec3 vModelPosition; 6612varying float vInstance; 6613varying vec4 vBoundingSphere; 6614varying mat4 vTransform; 6615 6616uniform mat4 uInvView; 6617uniform vec3 uGridDim; 6618uniform vec3 uBboxSize; 6619uniform sampler2D tTransferTex; 6620uniform float uTransferScale; 6621uniform float uStepScale; 6622uniform float uJumpLength; 6623 6624uniform int uObjectId; 6625uniform int uVertexCount; 6626uniform int uInstanceCount; 6627uniform int uGroupCount; 6628 6629#if defined(dColorMarker) 6630 uniform vec3 uHighlightColor; 6631 uniform vec3 uSelectColor; 6632 uniform vec3 uDimColor; 6633 uniform float uHighlightStrength; 6634 uniform float uSelectStrength; 6635 uniform float uDimStrength; 6636 uniform int uMarkerPriority; 6637 uniform float uMarkerAverage; 6638 6639 uniform float uMarker; 6640 uniform vec2 uMarkerTexDim; 6641 uniform sampler2D tMarker; 6642#endif 6643 6644uniform float uMetalness; 6645uniform float uRoughness; 6646uniform float uEmissive; 6647 6648// Density value to estimate object thickness 6649uniform float uDensity; 6650 6651uniform bool uFog; 6652uniform float uFogNear; 6653uniform float uFogFar; 6654uniform vec3 uFogColor; 6655 6656uniform float uAlpha; 6657uniform bool uTransparentBackground; 6658uniform float uXrayEdgeFalloff; 6659uniform float uCelSteps; 6660uniform float uExposure; 6661 6662uniform int uRenderMask; 6663 6664uniform float uNear; 6665uniform float uFar; 6666uniform float uIsOrtho; 6667 6668uniform vec3 uCellDim; 6669uniform vec3 uCameraPosition; 6670uniform mat4 uCartnToUnit; 6671 6672#if __VERSION__ != 100 6673 // for webgl1 this is given as a 'define' 6674 uniform int uMaxSteps; 6675#endif 6676 6677#if defined(dGridTexType_2d) 6678 precision highp sampler2D; 6679 uniform sampler2D tGridTex; 6680 uniform vec3 uGridTexDim; 6681#elif defined(dGridTexType_3d) 6682 precision highp sampler3D; 6683 uniform sampler3D tGridTex; 6684#endif 6685 6686#if defined(dColorType_uniform) 6687 uniform vec3 uColor; 6688#elif defined(dColorType_texture) 6689 uniform vec2 uColorTexDim; 6690 uniform sampler2D tColor; 6691#endif 6692 6693#ifdef dOverpaint 6694 #if defined(dOverpaintType_groupInstance) || defined(dOverpaintType_vertexInstance) 6695 uniform vec2 uOverpaintTexDim; 6696 uniform sampler2D tOverpaint; 6697 #endif 6698#endif 6699 6700#ifdef dUsePalette 6701 uniform vec2 uPaletteDomain; 6702 uniform sampler2D tPalette; 6703#endif 6704 6705#if defined(dGridTexType_2d) 6706 vec4 textureVal(vec3 pos) { 6707 return texture3dFrom2dLinear(tGridTex, pos + (vec3(0.5, 0.5, 0.0
6707) / uGridDim), uGridDim, uGridTexDim.xy); 6708 } 6709 vec4 textureGroup(vec3 pos) { 6710 return texture3dFrom2dNearest(tGridTex, pos + (vec3(0.5, 0.5, 0.0) / uGridDim), uGridDim, uGridTexDim.xy); 6711 } 6712#elif defined(dGridTexType_3d) 6713 vec4 textureVal(vec3 pos) { 6714 return texture(tGridTex, pos + (vec3(0.5) / uGridDim)); 6715 } 6716 vec4 textureGroup(vec3 pos) { 6717 return texelFetch(tGridTex, ivec3(pos * uGridDim), 0); 6718 } 6719#endif 6720 6721float calcDepth(const in vec3 pos) { 6722 vec2 clipZW = pos.z * uProjection[2].zw + uProjection[3].zw; 6723 return 0.5 + 0.5 * clipZW.x / clipZW.y; 6724} 6725 6726float transferFunction(float value) { 6727 return texture2D(tTransferTex, vec2(value, 0.0)).a; 6728} 6729 6730float getDepth(const in vec2 coords) { 6731 #ifdef depthTextureSupport 6732 return texture2D(tDepth, coords).r; 6733 #else 6734 return unpackRGBAToDepth(texture2D(tDepth, coords)); 6735 #endif 6736} 6737 6738const float gradOffset = 0.5; 6739 6740vec3 v3m4(vec3 p, mat4 m) { 6741 return (m * vec4(p, 1.0)).xyz; 6742} 6743 6744float preFogAlphaBlended = 0.0; 6745 6746vec4 raymarch(vec3 startLoc, vec3 step, vec3 rayDir) { 6747 mat3 normalMatrix = adjoint(uModelView * vTransform); 6748 mat4 cartnToUnit = uCartnToUnit * inverse4(vTransform); 6749 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 6750 mat4 modelTransform = uModel * vTransform * uTransform; 6751 #endif 6752 mat4 modelViewTransform = uModelView * vTransform * uTransform; 6753 6754 vec3 scaleVol = vec3(1.0) / uGridDim; 6755 vec3 pos = startLoc; 6756 vec4 cell; 6757 float prevValue = -1.0; 6758 float value = 0.0; 6759 vec4 src = vec4(0.0); 6760 vec4 dst = vec4(0.0); 6761 float fragmentDepth; 6762 6763 vec3 posMin = vec3(0.0); 6764 vec3 posMax = vec3(1.0) - vec3(1.0) / uGridDim; 6765 6766 vec3 unitPos; 6767 6768 vec3 nextPos; 6769 float nextValue; 6770 6771 vec4 material; 6772 vec4 overpaint; 6773 float metalness = uMetalness; 6774 float roughness = uRoughness; 6775 float emissive = uEmissive; 6776 6777 vec3 gradient = vec3(1.0); 6778 vec3 dx = vec3(gradOffset * scaleVol.x, 0.0, 0.0); 6779 vec3 dy = vec3(0.0, gradOffset * scaleVol.y, 0.0); 6780 vec3 dz = vec3(0.0, 0.0, gradOffset * scaleVol.z); 6781 6782 float maxDist = min(vBoundingSphere.w * 2.0, uFar - uNear); 6783 float maxDistSq = maxDist * maxDist; 6784 6785 for (int i = 0; i < uMaxSteps; ++i) { 6786 // break when beyond bounding-sphere or far-plane 6787 vec3 distVec = startLoc - pos; 6788 if (dot(distVec, distVec) > maxDistSq) break; 6789 6790 unitPos = v3m4(pos / uModelScale, cartnToUnit); 6791 6792 // continue when outside of grid 6793 if (unitPos.x > posMax.x || unitPos.y > posMax.y || unitPos.z > posMax.z || 6794 unitPos.x < posMin.x || unitPos.y < posMin.y || unitPos.z < posMin.z 6795 ) { 6796 prevValue = value; 6797 pos += step; 6798 continue; 6799 } 6800 6801 cell = textureVal(unitPos); 6802 value = cell.a; // current voxel value 6803 6804 if (uJumpLength > 0.0 && value < 0.01) { 6805 nextPos = pos + rayDir * uJumpLength; 6806 nextValue = textureVal(v3m4(nextPos / uModelScale, cartnToUnit)).a;
6807 if (nextValue < 0.01) { 6808 prevValue = nextValue; 6809 pos = nextPos; 6810 continue; 6811 } 6812 } 6813 6814 vec4 mvPosition = modelViewTransform * vec4(unitPos * uGridDim, 1.0); 6815 if (calcDepth(mvPosition.xyz) > getDepth(gl_FragCoord.xy / uDrawingBufferSize)) 6816 break; 6817 6818 #if defined(dClipVariant_pixel) && dClipObjectCount != 0 6819 vec3 modelPosition = v3m4(unitPos * uGridDim, modelTransform); 6820 if (clipTest(modelPosition)) { 6821 prevValue = value; 6822 pos += step; 6823 continue; 6824 } 6825 #endif 6826 6827 vec3 vViewPosition = mvPosition.xyz; 6828 material.a = transferFunction(value); 6829 6830 #ifdef dPackedGroup 6831 float group = unpackRGBToInt(textureGroup(floor(unitPos * uGridDim + 0.5) / uGridDim).rgb); 6832 #else 6833 vec3 g = floor(unitPos * uGridDim + 0.5); 6834 // note that we swap x and z because the texture is flipped around y 6835 #if defined(dAxisOrder_012) 6836 float group = g.z + g.y * uGridDim.z + g.x * uGridDim.z * uGridDim.y; // 210 6837 #elif defined(dAxisOrder_021) 6838 float group = g.y + g.z * uGridDim.y + g.x * uGridDim.y * uGridDim.z; // 120 6839 #elif defined(dAxisOrder_102) 6840 float group = g.z + g.x * uGridDim.z + g.y * uGridDim.z * uGridDim.x; // 201 6841 #elif defined(dAxisOrder_120) 6842 float group = g.x + g.z * uGridDim.x + g.y * uGridDim.x * uGridDim.z; // 021 6843 #elif defined(dAxisOrder_201) 6844 float group = g.y + g.x * uGridDim.y + g.z * uGridDim.y * uGridDim.x; // 102 6845 #elif defined(dAxisOrder_210) 6846 float group = g.x + g.y * uGridDim.x + g.z * uGridDim.x * uGridDim.y; // 012 6847 #endif 6848 #endif 6849 6850 #if defined(dColorType_direct) && defined(dUsePalette) 6851 float paletteValue = (value - uPaletteDomain[0]) / (uPaletteDomain[1] - uPaletteDomain[0]); 6852 material.rgb = texture2D(tPalette, vec2(clamp(paletteValue, 0.0, 1.0), 0.0)).rgb; 6853 #elif defined(dColorType_uniform) 6854 material.rgb = uColor; 6855 #elif defined(dColorType_instance) 6856 material.rgb = readFromTexture(tColor, vInstance, uColorTexDim).rgb; 6857 #elif defined(dColorType_group) 6858 material.rgb = readFromTexture(tColor, group, uColorTexDim).rgb; 6859 #elif defined(dColorType_groupInstance) 6860 material.rgb = readFromTexture(tColor, vInstance * float(uGroupCount) + group, uColorTexDim).rgb; 6861 #elif defined(dColorType_vertex) 6862 material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, 0.0).rgb; 6863 #elif defined(dColorType_vertexInstance) 6864 material.rgb = texture3dFrom1dTrilinear(tColor, unitPos, uGridDim, uColorTexDim, vInstance * float(uVertexCount)).rgb; 6865 #endif 6866 6867 #ifdef dOverpaint 6868 #if defined(dOverpaintType_groupInstance) 6869 overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim); 6870 #elif defined(dOverpaintType_vertexInstance) 6871 overpaint = texture3dFrom1dTrilinear(tOverpaint, unitPos, uGridDim, uOverpaintTexDim, vInstance * float(uVertexCount)); 6872 #endif 6873 6874 material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a); 6875 #endif 6876 6877 #if defined(dIgnoreLight) 6878 gl_FragColor.rgb = material.rgb; 6879 #else 6880 if (material.a >= 0.01) { 6881 #ifdef dPackedGroup 6882 // compute gradient by central differences 6883 gradient.x = textureVal(unitPos - dx).a - textureVal(unitPos + dx).a; 6884 gradient.y = textureVal(unitPos - dy).a - textureVal(unitPos + dy).a; 6885 gradient.z = textureVal(unitPos - dz).a - textureVal(unitPos + dz).a; 6886 #else 6887 gradient = cell.xyz * 2.0 - 1.0; 6888 #endif 6889 vec3 normal = -normalize(normalMatrix * normalize(gradient)); 6890 #include apply_light_color 6891 } else { 6892 gl_FragColor.rgb = material.rgb; 6893 } 6894 #endif 6895 6896 gl_FragColor.a = material.a * uAlpha * uTransferScale; 6897 6898 #if defined(dColorMarker) 6899 float marker = uMarker; 6900 if (uMarker == -1.0) { 6901 marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a; 6902 marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win 6903 } 6904 #endif 6905 #include apply_marker_color 6906 6907 preFogAlphaBlended = (1.0 - preFogAlphaBlended) * gl_FragColor.a + preFogAlphaBlended; 6908 fragmentDepth = calcDepth(mvPosition.xyz); 6909 #include apply_fog 6910 6911 src = gl_FragColor; 6912
6913 if (!uTransparentBackground || !uFog) { 6914 // done in 'apply_fog' otherwise 6915 src.rgb *= src.a; 6916 } 6917 dst = (1.0 - dst.a) * src + dst; // standard blending 6918 6919 // break if the color is opaque enough 6920 if (dst.a > 0.95) 6921 break; 6922 6923 pos += step; 6924 } 6925 6926 return dst; 6927} 6928 6929// TODO: support float texture for higher precision values??? 6930// TODO: support clipping exclusion texture support 6931 6932void main() { 6933 #if defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive) 6934 discard; 6935 #else 6936 if (gl_FrontFacing) 6937 discard; 6938 6939 vec3 rayDir = mix(normalize(vModelPosition - uCameraPosition), uCameraDir, uIsOrtho); 6940 vec3 step = rayDir * uStepScale * uModelScale; 6941 6942 float boundingSphereNear = distance(vBoundingSphere.xyz, uCameraPosition) - vBoundingSphere.w; 6943 float d = max(uNear, boundingSphereNear) - mix(0.0, distance(vModelPosition, uCameraPosition), uIsOrtho); 6944 vec3 start = mix(uCameraPosition, vModelPosition, uIsOrtho) + (d * rayDir); 6945 gl_FragColor = raymarch(start, step, rayDir); 6946 6947 float fragmentDepth = calcDepth((uView * vec4(start, 1.0)).xyz); 6948 float preFogAlpha = clamp(preFogAlphaBlended, 0.0, 1.0); 6949 #include wboit_write 6950 #endif 6951} 6952`,ee=` 6953precision highp float; 6954precision highp int; 6955 6956#include common 6957#include common_vert_params 6958 6959attribute vec3 aPosition; 6960attribute vec2 aUv; 6961attribute mat4 aTransform; 6962attribute float aInstance; 6963 6964varying vec2 vUv; 6965varying float vInstance; 6966 6967void main() { 6968 int vertexId = VertexID; 6969 6970 #include assign_position 6971 6972 vUv = aUv; 6973 vInstance = aInstance; 6974} 6975`,et=` 6976precision highp float; 6977precision highp int; 6978 6979#include common 6980#include read_from_texture 6981#include common_frag_params 6982#include common_clip 6983 6984uniform float uEmissive; 6985 6986// Density value to estimate object thickness 6987uniform float uDensity; 6988 6989#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 6990 #ifdef dOverpaint 6991 #if defined(dOverpaintType_instance) || defined(dOverpaintType_groupInstance) 6992 varying vec4 vOverpaint; 6993 uniform vec2 uOverpaintTexDim; 6994 uniform sampler2D tOverpaint; 6995 #endif 6996 uniform float uOverpaintStrength; 6997 #endif 6998#endif 6999 7000#if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive) 7001 #ifdef dEmissive 7002 #if defined(dEmissiveType_instance) || defined(dEmissiveType_groupInstance) 7003 varying float vEmissive; 7004 uniform vec2 uEmissiveTexDim; 7005 uniform sampler2D tEmissive; 7006 #endif 7007 uniform float uEmissiveStrength; 7008 #endif 7009#endif 7010 7011#ifdef dTransparency 7012 #if defined(dTransparencyType_instance) || defined(dTransparencyType_groupInstance) 7013 varying float vTransparency; 7014 uniform vec2 uTransparencyTexDim; 7015 uniform sampler2D tTransparency; 7016 #endif 7017 uniform float uTransparencyStrength; 7018#endif 7019 7020uniform vec2 uImageTexDim; 7021uniform sampler2D tImageTex; 7022uniform sampler2D tGroupTex; 7023uniform sampler2D tValueTex; 7024 7025uniform vec2 uMarkerTexDim; 7026uniform sampler2D tMarker; 7027 7028varying vec2 vUv; 7029varying float vInstance; 7030 7031#ifdef dUsePalette 7032 uniform sampler2D tPalette; 7033 uniform vec3 uPaletteDefault; 7034#endif 7035 7036uniform int uTrimType; 7037uniform vec3 uTrimCenter; 7038uniform vec4 uTrimRotation; 7039uniform vec3 uTrimScale; 7040uniform mat4 uTrimTransform; 7041 7042uniform float uIsoLevel; 7043 7044#if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell) || defined(dInterpolation_bspline) 7045 #define dInterpolation_cubic 7046#endif 7047 7048#if defined(dInterpolation_cubic) 7049 #if defined(dInterpolation_catmulrom) || defined(dInterpolation_mitchell) 7050 #if defined(dInterpolation_catmulrom) 7051 const float B = 0.0; 7052 const float C = 0.5; 7053 #elif defined(dInterpolation_mitchell) 7054 const float B = 0.333; 7055 const float C = 0.333; 7056 #endif 7057 7058 float cubicFilter(float x){ 7059 float f = x; 7060 if (f < 0.0) { 7061 f = -f; 7062 } 7063 if (f < 1.0) { 7064 return ((12.0 - 9.0 * B - 6.0 * C) * (f * f * f) + 7065 (-18.0 + 12.0 * B + 6.0 * C) * (f * f) + 7066 (6.0 - 2.0 * B)) / 6.0; 7067 }else if (f >= 1.0 && f < 2.0){ 7068 return ((-B - 6.0 * C) * ( f * f * f) 7069 + (6.0 * B + 30.0 * C) * (f * f) + 7070 (-(12.0 * B) - 48.0 * C) * f + 7071 8.0 * B + 24.0 * C) / 6.0; 7072 }else{ 7073 return 0.0; 7074 } 7075 } 7076 #elif defined(dInterpolation_bspline) 7077 float cubicFilter(float x) { 7078 float f = x; 7079 if (f < 0.0) { 7080 f = -f; 7081 } 7082 if (f >= 0.0 && f <= 1.0){ 7083 return (2.0 / 3.0) + (0.5) * (f * f * f) - (f * f); 7084 } else if (f > 1.0 && f <= 2.0) { 7085 return 1.0 / 6.0 * pow((2.0 - f), 3.0); 7086 } 7087 return 1.0; 7088 } 7089 #endif 7090 7091 vec4 biCubic(sampler2D tex, vec2 texCoord) { 7092 vec2 texelSize = 1.0 / uImageTexDim; 7093 texCoord -= texelSize / 2.0; 7094 vec4 nSum = vec4(0.0); 7095 float nDenom = 0.0; 7096 vec2 cell = fract(texCoord * uImageTexDim); 7097 for (float m = -1.0; m <= 2.0; ++m) { 7098 for (float n = -1.0; n <= 2.0; ++n) { 7099 vec4 vecData = texture2D(tex, texCoord + texelSize * vec2(m, n)); 7100 float c = abs(cubicFilter(m - cell.x) * cubicFilter(-n + cell.y)); 7101 nSum += vecData * c; 7102 nDenom += c; 7103 } 7104 } 7105 return nSum / nDenom; 7106 } 7107#endif 7108 7109void main() { 7110 if (uTrimType != 0 && getSignedDistance(vModelPosition, uTrimType, uTrimCenter, uTrimRotation, uTrimScale, uTrimTransform) > 0.0) discard; 7111 7112 #include fade_lod 7113 #include clip_pixel 7114 7115 #if defined(dInterpolation_cubic) 7116 #ifdef dUsePalette 7117 vec4 material = texture2D(tImageTex, vUv); 7118 if (material.rgb != vec3(1.0)) { 7119 material = biCubic(tImageTex, vUv); 7120 } 7121 #else 7122 vec4 material = biCubic(tImageTex, vUv); 7123 #endif 7124 #else 7125 vec4 material = texture2D(tImageTex, vUv); 7126 #endif 7127 7128 if (uIsoLevel >= 0.0) { 7129 if (texture2D(tValueTex, vUv).r < uIsoLevel) discard; 7130 7131 material.a = uAlpha; 7132 } else { 7133 if (material.a == 0.0) discard; 7134 7135 material.a *= uAlpha; 7136 } 7137 7138 float fragmentDepth = gl_FragCoord.z; 7139 7140 vec3 packedGroup = texture2D(tGroupTex, vUv).rgb; 7141 float group = packedGroup == vec3(0.0) ? -1.0 : unpackRGBToInt(packedGroup); 7142 7143 // apply per-group transparency 7144 #if defined(dTransparency) && (defined(dRenderVariant_pick) || defined(dRenderVariant_color) || defined(dRenderVariant_emissive) || defined(dRenderVariant_tracing)) 7145 float transparency = 0.0; 7146 #if defined(dTransparencyType_instance)
7147 transparency = readFromTexture(tTransparency, vInstance, uTransparencyTexDim).a; 7148 #elif defined(dTransparencyType_groupInstance) 7149 transparency = readFromTexture(tTransparency, vInstance * float(uGroupCount) + group, uTransparencyTexDim).a; 7150 #endif 7151 transparency *= uTransparencyStrength; 7152 7153 float ta = 1.0 - transparency; 7154 if (transparency < 0.09) ta = 1.0; // hard cutoff looks better 7155 7156 #if defined(dRenderVariant_pick) 7157 if (ta * uAlpha < uPickingAlphaThreshold) 7158 discard; // ignore so the element below can be picked 7159 #elif defined(dRenderVariant_emissive) 7160 if (ta < 1.0) 7161 discard; // emissive not supported with transparency 7162 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 7163 material.a *= ta; 7164 #endif 7165 #endif 7166 7167 if ((uRenderMask == MaskOpaque && material.a < 1.0) || 7168 (uRenderMask == MaskTransparent && material.a == 1.0) 7169 ) { 7170 discard; 7171 } 7172 7173 #if defined(dNeedsMarker) 7174 float marker = uMarker; 7175 if (group == -1.0) { 7176 marker = 0.0; 7177 } else if (uMarker == -1.0) { 7178 marker = readFromTexture(tMarker, vInstance * float(uGroupCount) + group, uMarkerTexDim).a; 7179 marker = floor(marker * 255.0 + 0.5); // rounding required to work on some cards on win 7180 } 7181 #endif 7182 7183 #if defined(dRenderVariant_color) || defined(dRenderVariant_tracing) || defined(dRenderVariant_emissive) 7184 float emissive = uEmissive; 7185 if (group == -1.0) { 7186 emissive = 0.0; 7187 } else { 7188 #ifdef dEmissive 7189 #if defined(dEmissiveType_instance) 7190 emissive += readFromTexture(tEmissive, vInstance, uEmissiveTexDim).a * uEmissiveStrength; 7191 #elif defined(dEmissiveType_groupInstance) 7192 emissive += readFromTexture(tEmissive, vInstance * float(uGroupCount) + group, uEmissiveTexDim).a * uEmissiveStrength; 7193 #endif 7194 #endif 7195 } 7196 #endif 7197 7198 #if defined(dRenderVariant_pick) 7199 if (group == -1.0) discard; 7200 7201 #include check_picking_alpha 7202 #ifdef requiredDrawBuffers 7203 gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0); 7204 gl_FragData[1] = vec4(packIntToRGB(vInstance), 1.0); 7205 gl_FragData[2] = vec4(packIntToRGB(group), 1.0); 7206 gl_FragData[3] = packDepthToRGBA(fragmentDepth); 7207 #else 7208 gl_FragColor = vColor; 7209 if (uPickType == 1) { 7210 gl_FragColor = vec4(packIntToRGB(float(uObjectId)), 1.0); 7211 } else if (uPickType == 2) { 7212 gl_FragColor = vec4(packIntToRGB(vInstance), 1.0); 7213 } else { 7214 gl_FragColor = vec4(packIntToRGB(group), 1.0); 7215 } 7216 #endif 7217 #elif defined(dRenderVariant_depth) 7218 if (uRenderMask == MaskOpaque) { 7219 gl_FragColor = packDepthToRGBA(fragmentDepth); 7220 } else if (uRenderMask == MaskTransparent) { 7221 gl_FragColor = packDepthWithAlphaToRGBA(fragmentDepth, material.a); 7222 } 7223 #elif defined(dRenderVariant_marking) 7224 if (uMarkingType == 1) { 7225 if (marker > 0.0) 7226 discard; 7227 gl_FragColor = packDepthToRGBA(fragmentDepth); 7228 } else { 7229 if (marker == 0.0) 7230 discard; 7231 float depthTest = 1.0; 7232 if (uMarkingDepthTest) { 7233 depthTest = (fragmentDepth >= getDepthPacked(gl_FragCoord.xy / uDrawingBufferSize)) ? 1.0 : 0.0; 7234 } 7235 bool isHighlight = intMod(marker, 2.0) > 0.1; 7236 float viewZ = depthToViewZ(uIsOrtho, fragmentDepth, uNear, uFar); 7237 float fogFactor = smoothstep(uFogNear, uFogFar, abs(viewZ)); 7238 if (fogFactor == 1.0) 7239 discard; 7240 gl_FragColor = vec4(0.0, depthTest, isHighlight ? 1.0 : 0.0, 1.0 - fogFactor); 7241 } 7242 #elif defined(dRenderVariant_emissive) 7243 gl_FragColor = vec4(emissive); 7244 #elif defined(dRenderVariant_color) || defined(dRenderVariant_tracing) 7245 #ifdef dUsePalette 7246 if (material.rgb == vec3(1.0)) { 7247 material.rgb = uPaletteDefault; 7248 } else { 7249 float v = ((material.r * 256.0 * 256.0 * 255.0 + material.g * 256.0 * 255.0 + material.b * 255.0) - 1.0) / PALETTE_SCALE; 7250 material.rgb = texture2D(tPalette, vec2(v, 0.0)).rgb; 7251 } 7252 #endif 7253 7254 // mix material with overpaint 7255 #if defined(dOverpaint) 7256 vec4 overpaint = vec4(0.0); 7257 if (group != -1.0) { 7258 #if defined(dOverpaintType_instance) 7259 overpaint = readFromTexture(tOverpaint, vInstance, uOverpaintTexDim); 7260 #elif defined(dOverpaintType_groupInstance) 7261 overpaint = readFromTexture(tOverpaint, vInstance * float(uGroupCount) + group, uOverpaintTexDim); 7262 #endif 7263 overpaint *= uOverpaintStrength; 7264 } 7265 material.rgb = mix(material.rgb, overpaint.rgb, overpaint.a); 7266 #endif 7267 7268 gl_FragColor = material; 7269 #include apply_marker_color 7270 7271 #if defined(dRenderVariant_color) 7272 #include apply_fog 7273 #include wboit_write 7274 #include dpoit_write 7275 #elif defined(dRenderVariant_tracing) 7276 gl_FragData[1] = vec4(normalize(vViewPosition), emissive); 7277 gl_FragData[2] = vec4(material.rgb, uDensity); 7278 #endif 7279 #endif 7280} 7281`,er=(0,a.s)(),ea={apply_fog:o,apply_interior_color:s,apply_light_color:l,apply_marker_color:u,assign_clipping_varying:c,assign_color_varying:d,assign_group:p,assign_marker_varying:f,assign_material_color:m,assign_position:h,assign_size:g,check_picking_alpha:b,check_transparency:y,clip_instance:x,clip_pixel:S,color_frag_params:T,color_vert_params:C,common_clip:O,common_frag_params:I,common_vert_params:A,common:w,fade_lod:D,float_to_rgba:E,light_frag_params:M,normal_frag_params:P,read_from_texture:k,rgba_to_float:B,size_vert_params:_,texture3d_from_1d_trilinear:R,texture3d_from_2d_linear:F,texture3d_from_2d_nearest:L,wboit_write:z,dpoit_write:N},en=/^(?!\/\/)\s*#include\s+(\S+)/gm,ei=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*\+\+i\s*\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g,eo=/[ \t]*\/\/.*\n/g,es=/[ \t]*\/\*[\s\S]*?\*\//g,el=/\n{2,}/g;function eu(e){return e.replace(en,(e,t)=>{let r=ea[t];if(!r)throw Error(`empty chunk, '${t}'`);return r}).trim().replace(eo,"\n").replace(es,"\n").replace(el,"\n")}function ec(e,t,r,a){let n="";for(let e=parseInt(t);e<parseInt(r);++e)n+=a.replace(/\[\s*i\s*\]/g,`[${e}]`).replace(/UNROLLED_LOOP_INDEX/g,`${e}`);return n}function ed(e,t){var r;return(r=e,t.dLightCount&&(r=r.replace(/dLightCount/g,`${t.dLightCount.ref.value}
7281`)),t.dClipObjectCount&&(r=r.replace(/dClipObjectCount/g,`${t.dClipObjectCount.ref.value}`)),r).replace(ei,ec)}function ep(e,t,r,a={},n={},i){return{id:er(),name:e,vert:eu(t),frag:eu(r),extensions:a,outTypes:n,ignoreDefine:i}}function ef(e,t,r){var a;if(t.startsWith("color")||"tracing"===t){if("dLightCount"===e)return!!(null===(a=r.dIgnoreLight)||void 0===a?void 0:a.ref.value)}else{let r=["dColorType","dUsePalette","dOverpaintType","dOverpaint","dSubstanceType","dSubstance","dColorMarker","dCelShaded","dLightCount"];return"depth"===t||t.startsWith("pick")||r.push("dXrayShaded"),"emissive"!==t&&r.push("dEmissiveType","dEmissive"),r.includes(e)}return!1}function em(e,t,r){return"dLightCount"===e||ef(e,t,r)}let eh=ep("points",G,U,{drawBuffers:"optional"},{},em),eg=ep("spheres",V,j,{fragDepth:"required",drawBuffers:"optional"},{},ef),ev=ep("cylinders",H,q,{fragDepth:"required",drawBuffers:"optional"},{},ef),eb=ep("text",X,W,{fragDepth:"optional",drawBuffers:"optional"},{},em),ey=ep("lines",K,Q,{drawBuffers:"optional"},{},em),ex=ep("mesh",Z,Y,{drawBuffers:"optional"},{},ef),eS=ep("direct-volume",$,J,{fragDepth:"optional",drawBuffers:"optional"},{},ef),eT=ep("image",ee,et,{drawBuffers:"optional"},{},em);function eC(e,t){var r;if(void 0===e)return"";let a=(null===(r=e.dRenderVariant)||void 0===r?void 0:r.ref.value)||"",n=[];for(let r in e){if(null==t?void 0:t(r,a,e))continue;let o=e[r].ref.value;void 0!==o&&("string"==typeof o?n.push(`#define ${r}_${o}`):"number"==typeof o?n.push(`#define ${r} ${o}`):"boolean"==typeof o?o&&n.push(`#define ${r}`):(0,i.UT)(o))}return n.join("\n")+"\n"}let eO=` 7282#define attribute in 7283#define varying out 7284#define texture2D texture 7285`,eI=` 7286#define varying in 7287#define texture2D texture 7288#define textureCube texture 7289#define texture2DLodEXT textureLod 7290#define textureCubeLodEXT textureLod 7291 7292#define gl_FragColor out_FragData0 7293#define gl_FragDepthEXT gl_FragDepth 7294`;function eA(e,t,r,a,i){let o=eC(a,i.ignoreDefine),s=eC(a,i.ignoreDefine),l=(0,n.D0)(e)?function(e,t){let r=["#version 300 es"];if(t.drawBuffers&&e.drawBuffers&&r.push("#define requiredDrawBuffers"),t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if("required"===t.multiDraw)throw Error("required 'GL_ANGLE_multi_draw' extension not available")}if(t.clipCullDistance){if(e.clipCullDistance)r.push("#extension GL_ANGLE_clip_cull_distance : enable"),r.push("#define enabledClipCullDistance");else if("required"===t.clipCullDistance)throw Error("required 'GL_ANGLE_clip_cull_distance' extension not available")}if(t.conservativeDepth){if(e.conservativeDepth)r.push("#extension GL_EXT_conservative_depth : enable"),r.push("#define enabledConservativeDepth");else if("required"===t.conservativeDepth)throw Error("required 'GL_EXT_conservative_depth' extension not available")}if(t.multiview2){if(e.multiview2)r.push("#extension GL_OVR_multiview2 : require"),r.push("#define enabledMultiview2");else if("required"===t.multiview2)throw Error("required 'GL_OVR_multiview2' extension not available")}return e.noNonInstancedActiveAttribs&&r.push("#define noNonInstancedActiveAttribs"),r.push(eO),r.join("\n")+"\n"}(t,i.extensions):function(e,t){let r=[];if(t.drawBuffers){if(e.drawBuffers)r.push("#define requiredDrawBuffers");else if("required"===t.drawBuffers)throw Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.multiDraw){if(e.multiDraw)r.push("#extension GL_ANGLE_multi_draw : require"),r.push("#define enabledMultiDraw");else if("required"===t.multiDraw)throw Error("required 'GL_ANGLE_multi_draw' extension not available")}return r.join("\n")+"\n"}(t,i.extensions),u=(0,n.D0)(e)?function(e,t,r,a){let n=["#version 300 es",`layout(location = 0) out highp ${a[0]||"vec4"} out_FragData0;`];if(r.fragDepth&&e.fragDepth&&n.push("#define enabledFragDepth"),r.drawBuffers&&e.drawBuffers){n.push("#define requiredDrawBuffers");for(let e=1,r=t.maxDrawBuffers;e<r;++e)n.push(`layout(location = ${e}) out highp ${a[e]||"vec4"} out_FragData${e};`)}return r.shaderTextureLod&&e.shaderTextureLod&&n.push("#define enabledShaderTextureLod"),e.depthTexture&&n.push("#define depthTextureSupport"),n.push(eI),n.join("\n")+"\n"}(t,r,i.extensions,i.outTypes):function(e,t){let r=["#extension GL_OES_standard_derivatives : enable"];
7294if(t.fragDepth){if(e.fragDepth)r.push("#extension GL_EXT_frag_depth : enable"),r.push("#define enabledFragDepth");else if("required"===t.fragDepth)throw Error("required 'GL_EXT_frag_depth' extension not available")}if(t.drawBuffers){if(e.drawBuffers)r.push("#extension GL_EXT_draw_buffers : require"),r.push("#define requiredDrawBuffers"),r.push("#define gl_FragColor gl_FragData[0]");else if("required"===t.drawBuffers)throw Error("required 'GL_EXT_draw_buffers' extension not available")}if(t.shaderTextureLod){if(e.shaderTextureLod)r.push("#extension GL_EXT_shader_texture_lod : enable"),r.push("#define enabledShaderTextureLod");else if("required"===t.shaderTextureLod)throw Error("required 'GL_EXT_shader_texture_lod' extension not available")}return e.depthTexture&&r.push("#define depthTextureSupport"),r.join("\n")+"\n"}(t,i.extensions),c=(0,n.D0)(e)?i.frag.replace(/gl_FragData\[([0-9]+)\]/g,"out_FragData$1"):i.frag;return{id:er(),name:i.name,vert:`${l}${o}${ed(i.vert,a)}`,frag:`${u}${s}${ed(c,a)}`,extensions:i.extensions,outTypes:i.outTypes}}},10410:function(e,t,r){r.d(t,{C:function(){return a}});let a=` 7295precision highp float; 7296 7297attribute vec2 aPosition; 7298uniform vec2 uQuadScale; 7299 7300void main(void) { 7301 vec2 position = aPosition * uQuadScale - vec2(1.0, 1.0) + uQuadScale; 7302 gl_Position = vec4(position, 0.0, 1.0); 7303} 7304`},62763:function(e,t,r){r.d(t,{Ej:function(){return c},HK:function(){return f},MX:function(){return p},R8:function(){return m},ny:function(){return d}});var a=r(16252),n=r(97667),i=r(62131),o=r(91407);let s=(0,a.s)();function l(e){let t=e.createBuffer();if(null===t)throw Error("Could not create WebGL buffer");return t}function u(e,t,r,a){let o=l(e),u=function(e,t){switch(t){case"static":return e.STATIC_DRAW;case"dynamic":return e.DYNAMIC_DRAW;case"stream":return e.STREAM_DRAW;default:(0,n.UT)(t)}}(e,r),c=function(e,t){switch(t){case"attribute":return e.ARRAY_BUFFER;case"elements":return e.ELEMENT_ARRAY_BUFFER;case"uniform":if((0,i.D0)(e))return e.UNIFORM_BUFFER;throw Error("WebGL2 is required for uniform buffers");case"pixel-pack":if((0,i.D0)(e))return e.PIXEL_PACK_BUFFER;throw Error("WebGL2 is required for pixel-pack buffers")}}(e,a),d=function(e,t){if(t instanceof Uint8Array)return e.UNSIGNED_BYTE;if(t instanceof Int8Array)return e.BYTE;if(t instanceof Uint16Array)return e.UNSIGNED_SHORT;if(t instanceof Int16Array)return e.SHORT;if(t instanceof Uint32Array)return e.UNSIGNED_INT;if(t instanceof Int32Array)return e.INT;if(t instanceof Float32Array)return e.FLOAT;(0,n.UT)(t)}(e,t),p=t.BYTES_PER_ELEMENT,f=t.length;function m(t){e.bindBuffer(c,o),e.bufferData(c,t,u)}m(t);let h=!1;return{id:s(),_usageHint:u,_bufferType:c,_dataType:d,_bpe:p,length:f,getByteCount:()=>p*f,getBuffer:()=>o,updateData:m,updateSubData:(t,r,a)=>{e.bindBuffer(c,o),a-r===t.length?e.bufferSubData(c,0,t):e.bufferSubData(c,r*p,t.subarray(r,r+a))},reset:()=>{o=l(e),m(t)},destroy:()=>{h||(e.deleteBuffer(o),h=!0)}}}function c(e,t,r){if("float32"===t)switch(r){case 1:return e.FLOAT;case 2:return e.FLOAT_VEC2;case 3:return e.FLOAT_VEC3;case 4:return e.FLOAT_VEC4;case 16:return e.FLOAT_MAT4}(0,n.UT)(t)}function d(e,t,r,a,n,i,o="static"){let{instancedArrays:s}=r,l=u(e,a,o,"attribute"),{_bufferType:c,_dataType:d,_bpe:p}=l;return{...l,divisor:i,bind:r=>{if(e.bindBuffer(c,l.getBuffer()),16===n)for(let a=0;a<4;++a)t.enableVertexAttrib(r+a),e.vertexAttribPointer(r+a,4,d,!1,16*p,4*a*p),s.vertexAttribDivisor(r+a,i);else t.enableVertexAttrib(r),e.vertexAttribPointer(r,n,d,!1,0,0),s.vertexAttribDivisor(r,i)},changeOffset:(t,r)=>{let a=r*p*n;if(e.bindBuffer(c,l.getBuffer()),16===n)for(let r=0;r<4;++r)e.vertexAttribPointer(t+r,4,d,!1,16*p,4*r*p+a);else e.vertexAttribPointer(t,n,d,!1,0,a)}}}function p(e,t,r){let a=[];return Object.keys(t).forEach(n=>{let i=t[n];"attribute"===i.type&&(a[a.length]=[n,e.resources.attribute(r[n].ref.value,i.itemSize,i.divisor)])}),a}function f(e,t,r="static"){let a=u(e,t,r,"elements");return{...a,bind:()=>{e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,a.getBuffer())}}}function m(e,t,r,a){let n=l(e),i=(0,o.oL)(e,t,a),u=(0,o.y6)(e,r,a),c=(0,o.tX)(r,a),d=0,p=0,f=!1;return{id:s(),_type:i,_format:u,_bpe:c,getByteCount:()=>c*d*p,read:function(t,r,a,o){d=a,p=o,e.bindBuffer(e.PIXEL_PACK_BUFFER,n),e.bufferData(e.PIXEL_PACK_BUFFER,a*o*c,e.STREAM_READ),e.readPixels(t,r,a,o,u,i,0),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)},getSubData:function(t){e.bindBuffer(e.PIXEL_PACK_BUFFER,n),e.getBufferSubData(e.PIXEL_PACK_BUFFER,0,t),e.bindBuffer(e.PIXEL_PACK_BUFFER,null)},reset:()=>{n=l(e)},destroy:()=>{f||(e.deleteBuffer(n),f=!0)}}}}
7304,62131:function(e,t,r){r.d(t,{$H:function(){return D},A4:function(){return c},B$:function(){return x},B5:function(){return l},Cw:function(){return m},D0:function(){return s},HN:function(){return d},IV:function(){return P},Lg:function(){return w},M:function(){return G},Nm:function(){return O},OQ:function(){return L},Oh:function(){return k},PI:function(){return N},Pm:function(){return p},QL:function(){return y},Rc:function(){return F},UQ:function(){return A},Vp:function(){return b},ZC:function(){return f},_$:function(){return U},aT:function(){return V},dl:function(){return z},gT:function(){return g},i7:function(){return h},iV:function(){return M},j7:function(){return T},p8:function(){return C},q:function(){return u},qE:function(){return E},qt:function(){return I},s$:function(){return _},u_:function(){return S},wI:function(){return R},xx:function(){return B}});var a=r(48502),n=r(75404),i=r(717),o=r(59837);function s(e){return"undefined"!=typeof WebGL2RenderingContext&&e instanceof WebGL2RenderingContext}function l(e){if(s(e))return{drawArraysInstanced:e.drawArraysInstanced.bind(e),drawElementsInstanced:e.drawElementsInstanced.bind(e),vertexAttribDivisor:e.vertexAttribDivisor.bind(e),VERTEX_ATTRIB_ARRAY_DIVISOR:e.VERTEX_ATTRIB_ARRAY_DIVISOR};{let t=e.getExtension("ANGLE_instanced_arrays");return null===t?null:{drawArraysInstanced:t.drawArraysInstancedANGLE.bind(t),drawElementsInstanced:t.drawElementsInstancedANGLE.bind(t),vertexAttribDivisor:t.vertexAttribDivisorANGLE.bind(t),VERTEX_ATTRIB_ARRAY_DIVISOR:t.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE}}}function u(e){if(s(e))return{FRAGMENT_SHADER_DERIVATIVE_HINT:e.FRAGMENT_SHADER_DERIVATIVE_HINT};{let t=e.getExtension("OES_standard_derivatives");return null===t?null:{FRAGMENT_SHADER_DERIVATIVE_HINT:t.FRAGMENT_SHADER_DERIVATIVE_HINT_OES}}}function c(e){return s(e)?{}:e.getExtension("OES_element_index_uint")}function d(e){if(s(e))return{VERTEX_ARRAY_BINDING:e.VERTEX_ARRAY_BINDING,bindVertexArray:e.bindVertexArray.bind(e),createVertexArray:e.createVertexArray.bind(e),deleteVertexArray:e.deleteVertexArray.bind(e),isVertexArray:e.isVertexArray.bind(e)};{let t=e.getExtension("OES_vertex_array_object");return null===t?null:{VERTEX_ARRAY_BINDING:t.VERTEX_ARRAY_BINDING_OES,bindVertexArray:t.bindVertexArrayOES.bind(t),createVertexArray:t.createVertexArrayOES.bind(t),deleteVertexArray:t.deleteVertexArrayOES.bind(t),isVertexArray:t.isVertexArrayOES.bind(t)}}}function p(e){return s(e)?{}:e.getExtension("OES_texture_float")}function f(e){return e.getExtension("OES_texture_float_linear")}function m(e){if(s(e))return{HALF_FLOAT:e.HALF_FLOAT};{let t=e.getExtension("OES_texture_half_float");return null===t?null:{HALF_FLOAT:t.HALF_FLOAT_OES}}}function h(e){return e.getExtension("OES_texture_half_float_linear")}function g(e){if(s(e))return{MIN:e.MIN,MAX:e.MAX};{let t=e.getExtension("EXT_blend_minmax");return null===t?null:{MIN:t.MIN_EXT,MAX:t.MAX_EXT}}}function b(e){return s(e)?{}:e.getExtension("EXT_frag_depth")}function y(e){if(s(e))return null===e.getExtension("EXT_color_buffer_float")?null:(e.getExtension("EXT_float_blend"),{RGBA32F:e.RGBA32F});{let t=e.getExtension("WEBGL_color_buffer_float");return null===t?(e.getExtension("OES_texture_float"),X(e,e.FLOAT)?{RGBA32F:34836}:null):(e.getExtension("EXT_float_blend"),{RGBA32F:t.RGBA32F_EXT})}}function x(e){if(s(e))return null===e.getExtension("EXT_color_buffer_half_float")?null:(e.getExtension("EXT_float_blend"),{RGBA16F:e.RGBA16F});{let t=e.getExtension("EXT_color_buffer_half_float");return null===t?(e.getExtension("OES_texture_half_float"),X(e,36193)?{RGBA16F:34842}:null):(e.getExtension("EXT_float_blend"),{RGBA16F:t.RGBA16F_EXT})}}function S(e){if(s(e))return{drawBuffers:e.drawBuffers.bind(e),COLOR_ATTACHMENT0:e.COLOR_ATTACHMENT0,COLOR_ATTACHMENT1:e.COLOR_ATTACHMENT1,COLOR_ATTACHMENT2:e.COLOR_ATTACHMENT2,COLOR_ATTACHMENT3:e.COLOR_ATTACHMENT3,COLOR_ATTACHMENT4:e.COLOR_ATTACHMENT4,COLOR_ATTACHMENT5:e.COLOR_ATTACHMENT5,COLOR_ATTACHMENT6:e.COLOR_ATTACHMENT6,COLOR_ATTACHMENT7:e.COLOR_ATTACHMENT7,DRAW_BUFFER0:e.DRAW_BUFFER0,DRAW_BUFFER1:e.DRAW_BUFFER1,DRAW_BUFFER2:e.DRAW_BUFFER2,DRAW_BUFFER3:e.DRAW_BUFFER3,DRAW_BUFFER4:e.DRAW_BUFFER4,DRAW_BUFFER5:e.DRAW_BUFFER5,DRAW_BUFFER6:e.DRAW_BUFFER6,DRAW_BUFFER7:e.DRAW_BUFFER7,MAX_COLOR_ATTACHMENTS:e.MAX_COLOR_ATTACHMENTS,MAX_DRAW_BUFFERS:e.MAX_DRAW_BUFFERS};{let t=e.getExtension("WEBGL_draw_buffers");return null===t?null:{drawBuffers:t.drawBuffersWEBGL.bind(t),COLOR_ATTACHMENT0:t.COLOR_ATTACHMENT0_WEBGL,COLOR_ATTACHMENT1:t.COLOR_ATTACHMENT1_WEBGL,COLOR_ATTACHMENT2:t.COLOR_ATTACHMENT2_WEBGL,COLOR_ATTACHMENT3:t.COLOR_ATTACHMENT3_WEBGL,COLOR_ATTACHMENT4:t.COLOR_ATTACHMENT4_WEBGL,COLOR_ATTACHMENT5:t.COLOR_ATTACHMENT5_WEBGL,COLOR_ATTACHMENT6:t.COLOR_ATTACHMENT6_WEBGL,COLOR_ATTACHMENT7:t.COLOR_ATTACHMENT7_WEBGL,DRAW_BUFFER0:t.DRAW_BUFFER0_WEBGL,DRAW_BUFFER1:t.DRAW_BUFFER1_WEBGL,DRAW_BUFFER2:t.DRAW_BUFFER2_WEBGL,DRAW_BUFFER3:t.DRAW_BUFFER3_WEBGL,DRAW_BUFFER4:t.DRAW_BUFFER4_WEBGL,DRAW_BUFFER5:t.DRAW_BUFFER5_WEBGL,DRAW_BUFFER6:t.DRAW_BUFFER6_WEBGL,DRAW_BUFFER7:t.DRAW_BUFFER7_WEBGL,MAX_COLOR_ATTACHMENTS:t.MAX_COLOR_ATTACHMENTS_WEBGL,MAX_DRAW_BUFFERS:t.MAX_DRAW_BUFFERS_WEBGL}}}function T(e){let t=e.getExtension("OES_draw_buffers_indexed");return null===t?null:{enablei:t.enableiOES.bind(t),disablei:t.disableiOES.bind(t),blendEquationi:t.blendEquationiOES.bind(t),blendEquationSeparatei:t.blendEquationSeparateiOES.bind(t),blendFunci:t.blendFunciOES.bind(t),blendFuncSeparatei:t.blendFuncSeparateiOES.bind(t),colorMaski:t.colorMaskiOES.bind(t)}}function C(e){return s(e)?{}:e.getExtension("EXT_shader_texture_lod")}function O(e){if(s(e))return{UNSIGNED_INT_24_8:e.UNSIGNED_INT_24_8};{let t=e.getExtension("WEBGL_depth_texture");return null===t?null:{UNSIGNED_INT_24_8:t.UNSIGNED_INT_24_8_WEBGL}}}function I(e){if(s(e))return{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:e.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING,SRGB8_ALPHA8:e.SRGB8_ALPHA8,SRGB8:e.SRGB8,SRGB:e.SRGB};{let t=e.getExtension("EXT_sRGB");return null===t?null:{FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:t.FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT,S
7304RGB8_ALPHA8:t.SRGB8_ALPHA8_EXT,SRGB8:t.SRGB_ALPHA_EXT,SRGB:t.SRGB_EXT}}}function A(e){if(s(e)){let t=e.getExtension("EXT_disjoint_timer_query_webgl2")||e.getExtension("EXT_disjoint_timer_query");return null===t?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:e.CURRENT_QUERY,QUERY_RESULT:e.QUERY_RESULT,QUERY_RESULT_AVAILABLE:e.QUERY_RESULT_AVAILABLE,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:e.createQuery.bind(e),deleteQuery:e.deleteQuery.bind(e),isQuery:e.isQuery.bind(e),beginQuery:e.beginQuery.bind(e),endQuery:e.endQuery.bind(e),queryCounter:t.queryCounterEXT.bind(t),getQuery:e.getQuery.bind(e),getQueryParameter:e.getQueryParameter.bind(e)}}{let t=e.getExtension("EXT_disjoint_timer_query");return null===t?null:{QUERY_COUNTER_BITS:t.QUERY_COUNTER_BITS_EXT,CURRENT_QUERY:t.CURRENT_QUERY_EXT,QUERY_RESULT:t.QUERY_RESULT_EXT,QUERY_RESULT_AVAILABLE:t.QUERY_RESULT_AVAILABLE_EXT,TIME_ELAPSED:t.TIME_ELAPSED_EXT,TIMESTAMP:t.TIMESTAMP_EXT,GPU_DISJOINT:t.GPU_DISJOINT_EXT,createQuery:t.createQueryEXT.bind(t),deleteQuery:t.deleteQueryEXT.bind(t),isQuery:t.isQueryEXT.bind(t),beginQuery:t.beginQueryEXT.bind(t),endQuery:t.endQueryEXT.bind(t),queryCounter:t.queryCounterEXT.bind(t),getQuery:t.getQueryEXT.bind(t),getQueryParameter:t.getQueryObjectEXT.bind(t)}}}function w(e){let t=e.getExtension("WEBGL_multi_draw");return t?{multiDrawArrays:t.multiDrawArraysWEBGL.bind(t),multiDrawElements:t.multiDrawElementsWEBGL.bind(t),multiDrawArraysInstanced:t.multiDrawArraysInstancedWE
7304BGL.bind(t),multiDrawElementsInstanced:t.multiDrawElementsInstancedWEBGL.bind(t)}:null}function D(e){let t=e.getExtension("WEBGL_draw_instanced_base_vertex_base_instance");return t?{drawArraysInstancedBaseInstance:t.drawArraysInstancedBaseInstanceWEBGL.bind(t),drawElementsInstancedBaseVertexBaseInstance:t.drawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function E(e){let t=e.getExtension("WEBGL_multi_draw_instanced_base_vertex_base_instance");return t?{multiDrawArraysInstancedBaseInstance:t.multiDrawArraysInstancedBaseInstanceWEBGL.bind(t),multiDrawElementsInstancedBaseVertexBaseInstance:t.multiDrawElementsInstancedBaseVertexBaseInstanceWEBGL.bind(t)}:null}function M(e){let t=e.getExtension("KHR_parallel_shader_compile");return null===t?null:{COMPLETION_STATUS:t.COMPLETION_STATUS_KHR}}function P(e){return s(e)?{}:e.getExtension("OES_fbo_render_mipmap")}function k(e){if(s(e)){let t=e.getExtension("WEBGL_provoking_vertex");if(t)return{FIRST_VERTEX_CONVENTION:t.FIRST_VERTEX_CONVENTION_WEBGL,LAST_VERTEX_CONVENTION:t.LAST_VERTEX_CONVENTION_WEBGL,PROVOKING_VERTEX:t.PROVOKING_VERTEX_WEBGL,provokingVertex:t.provokingVertexWEBGL.bind(t)}}return null}function B(e){if(s(e)){let t=e.getExtension("WEBGL_clip_cull_distance");if(t)return{MAX_CLIP_DISTANCES:t.MAX_CLIP_DISTANCES_WEBGL,MAX_CULL_DISTANCES:t.MAX_CULL_DISTANCES_WEBGL,MAX_COMBINED_CLIP_AND_CULL_DISTANCES:t.MAX_COMBINED_CLIP_AND_CULL_DISTANCES_WEBGL,CLIP_DISTANCE0:t.CLIP_DISTANCE0_WEBGL,CLIP_DISTANCE1:t.CLIP_DISTANCE1_WEBGL,CLIP_DISTANCE2:t.CLIP_DISTANCE2_WEBGL,CLIP_DISTANCE3:t.CLIP_DISTANCE3_WEBGL,CLIP_DISTANCE4:t.CLIP_DISTANCE4_WEBGL,CLIP_DISTANCE5:t.CLIP_DISTANCE5_WEBGL,CLIP_DISTANCE6:t.CLIP_DISTANCE6_WEBGL,CLIP_DISTANCE7:t.CLIP_DISTANCE7_WEBGL}}return null}function _(e){return s(e)&&e.getExtension("EXT_conservative_depth")?{}:null}function R(e){if(s(e)){let t=e.getExtension("WEBGL_stencil_texturing");if(t)return{DEPTH_STENCIL_TEXTURE_MODE:t.DEPTH_STENCIL_TEXTURE_MODE_WEBGL,STENCIL_INDEX:t.STENCIL_INDEX_WEBGL}}return null}function F(e){let t=e.getExtension("EXT_clip_control");return t?{LOWER_LEFT:t.LOWER_LEFT_EXT,UPPER_LEFT:t.UPPER_LEFT_EXT,NEGATIVE_ONE_TO_ONE:t.NEGATIVE_ONE_TO_ONE_EXT,ZERO_TO_ONE:t.ZERO_TO_ONE_EXT,CLIP_ORIGIN:t.CLIP_ORIGIN_EXT,CLIP_DEPTH_MODE:t.CLIP_DEPTH_MODE_EXT,clipControl:t.clipControlEXT.bind(t)}:null}function L(e){return s(e)&&e.getExtension("EXT_render_snorm")?{}:null}function z(e){return s(e)&&e.getExtension("WEBGL_render_shared_exponent")?{}:null}function N(e){let t=e.getExtension("EXT_texture_norm16");return t?{R16:t.R16_EXT,RG16:t.RG16_EXT,RGB16:t.RGB16_EXT,RGBA16:t.RGBA16_EXT,R16_SNORM:t.R16_SNORM_EXT,RG16_SNORM:t.RG16_SNORM_EXT,RGB16_SNORM:t.RGB16_SNORM_EXT,RGBA16_SNORM:t.RGBA16_SNORM_EXT}:null}function G(e){let t=e.getExtension("EXT_depth_clamp");return t?{DEPTH_CLAMP:t.DEPTH_CLAMP_EXT}:null}function U(e){if(s(e)){let t=e.getExtension("OVR_multiview2");if(t)return{FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR,FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX:t.FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR,MAX_VIEWS:t.MAX_VIEWS_OVR,FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS:t.FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR,framebufferTextureMultiview:t.framebufferTextureMultiviewOVR.bind(t)}}return null}function V(e){if(!s(e))return!1;if("undefined"!=typeof navigator){let e=window.navigator.userAgent.match(/Firefox\/([0-9]+)\./);return!e||parseInt(e[1])>=85}return!1}let j=` 7305attribute vec4 aPosition; 7306 7307void main() { 7308 gl_Position = aPosition; 7309}`,H=` 7310precision mediump float; 7311uniform vec4 uColor; 7312uniform sampler2D uTexture; 7313 7314void main() { 7315 gl_FragColor = texture2D(uTexture, vec2(0.5, 0.5)) * uColor; 7316}`,q=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function X(e,t){let r=(0,o.X)(e,{type:"vert",source:j}),s=(0,o.X)(e,{type:"frag",source:H});if(!r||!s)return!1;let l=(0,i.E)(e);e.attachShader(l,r),e.attachShader(l,s),e.linkProgram(l),e.useProgram(l);let u=e.getAttribLocation(l,"aPosition"),c=e.getUniformLocation(l,"uColor");if(!c)return a.Au&&console.log("error getting 'uColor' uniform location"),!1;let d=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,d),e.bufferData(e.ARRAY_BUFFER,q,e.STATIC_DRAW),e.enableVertexAttribArray(u),e.vertexAttribPointer(u,2,e.FLOAT,!1,0,0);let p=e.createTexture(),f=new Uint8Array([255,255,255,255]);e.bindTexture(e.TEXTURE_2D,p),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,e.UNSIGNED_BYTE,f);let m=e.createTexture();e.bindTexture(e.TEXTURE_2D,m),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,1,1,0,e.RGBA,t,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.NEAREST);let h=e.createFramebuffer();if(e.bindFramebuffer(e.FRAMEBUFFER,h),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,m,0),e.checkFramebufferStatus(e.FRAMEBUFFER)!==e.FRAMEBUFFER_COMPLETE)return a.Au&&console.log(`error creating framebuffer for '${t}'`),!1;e.bindTexture(e.TEXTURE_2D,p),e.uniform4fv(c,[0,10,20,1]),e.drawArrays(e.TRIANGLES,0,6),e.bindTexture(e.TEXTURE_2D,m),e.bindFramebuffer(e.FRAMEBUFFER,null),e.clearColor(1,0,0,1),e.clear(e.COLOR_BUFFER_BIT),e.uniform4fv(c,[0,.1,.05,1]),e.drawArrays(e.TRIANGLES,0,6);let g=new Uint8Array(4);if(e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,g),0!==g[0]||g[1]<248||g[2]<248||g[3]<254)return a.Au&&console.log(`not able to actually render to '${t}' texture`),!1;if(t===e.FLOAT){e.bindFramebuffer(e.FRAMEBUFFER,h);let t=new Float32Array(4);e.readPixels(0,0,1,1,e.RGBA,e.FLOAT,t);let r=e.getError();if(r)return a.Au&&console.log(`error reading float pixels: '${(0,n.Gi)(e,r)}'`),!1}return!0}},75404:function(e,t,r){r.d(t,{kr:function(){return U},Gi:function(){return P},Qe:function(){return M}});var a=r(62131),n=r(16252);let i=(0,n.s)();function o(e,t){let r=e.checkFramebufferStatus(e.FRAMEBUFFER);if(r!==e.FRAMEBUFFER_COMPLETE){let n=function(e,t){switch(t){case e.FRAMEBUFFER_COMPLETE:return"complete";case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"incomplete attachment";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"incomplete missing attachment";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"incomplete dimensions";case e.FRAMEBUFFER_UNSUPPORTED:return"unsupported"}if((0,a.D0)(e))switch(t){case e.FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:return"incomplete multisample";case e.RENDERBUFFER_SAMPLES:return"renderbuffer samples"}return"unknown error"}(e,r);throw Error(`Framebuffer status: ${n}${t?` (${t})`:""}`)}}function s(e){let t=e.createFramebuffer();if(null===t)throw Error("Could not create WebGL framebuffer");return t}
7316var l=r(54854),u=r(48502),c=r(67546);function d(e){let t=(0,a.B5)(e);if(null===t)throw Error('Could not find support for "instanced_arrays"');let r=(0,a.A4)(e);if(null===r)throw Error('Could not find support for "element_index_uint"');let n=(0,a.q)(e);if(null===n)throw Error('Could not find support for "standard_derivatives"');let i=(0,a.Pm)(e);u.Au&&null===i&&console.log('Could not find support for "texture_float"');let o=(0,a.ZC)(e);u.Au&&null===o&&console.log('Could not find support for "texture_float_linear"');let s=(0,a.Cw)(e);u.Au&&null===s&&console.log('Could not find support for "texture_half_float"');let l=(0,a.i7)(e);u.Au&&null===l&&console.log('Could not find support for "texture_half_float_linear"');let c=(0,a.Nm)(e);u.Au&&null===c&&console.log('Could not find support for "depth_texture"');let d=(0,a.gT)(e);u.Au&&null===d&&console.log('Could not find support for "blend_minmax"');let p=(0,a.HN)(e);u.Au&&null===p&&console.log('Could not find support for "vertex_array_object"');let f=(0,a.Vp)(e);u.Au&&null===f&&console.log('Could not find support for "frag_depth"');let m=(0,a.QL)(e);u.Au&&null===m&&console.log('Could not find support for "color_buffer_float"');let h=(0,a.B$)(e);u.Au&&null===h&&console.log('Could not find support for "color_buffer_half_float"');let g=(0,a.u_)(e);u.Au&&null===g&&console.log('Could not find support for "draw_buffers"');let b=(0,a.j7)(e);u.Au&&null===b&&console.log('Could not find support for "draw_buffers_indexed"');let y=(0,a.p8)(e);u.Au&&null===y&&console.log('Could not find support for "shader_texture_lod"');let x=(0,a.qt)(e);u.Au&&null===x&&console.log('Could not find support for "sRGB"');let S=(0,a.UQ)(e);u.Au&&null===S&&console.log('Could not find support for "disjoint_timer_query"');let T=(0,a.Lg)(e);u.Au&&null===T&&console.log('Could not find support for "multi_draw"');let C=(0,a.$H)(e);u.Au&&null===C&&console.log('Could not find support for "draw_instanced_base_vertex_base_instance"');let O=(0,a.qE)(e);u.Au&&null===O&&console.log('Could not find support for "multi_draw_instanced_base_vertex_base_instance"');let I=(0,a.iV)(e);u.Au&&null===I&&console.log('Could not find support for "parallel_shader_compile"');let A=(0,a.IV)(e);u.Au&&null===A&&console.log('Could not find support for "fbo_render_mipmap"');let w=(0,a.Oh)(e);u.Au&&null===w&&console.log('Could not find support for "provoking_vertex"');let D=(0,a.xx)(e);u.Au&&null===D&&console.log('Could not find support for "clip_cull_distance"');let E=(0,a.s$)(e);u.Au&&null===E&&console.log('Could not find support for "conservative_depth"');let M=(0,a.wI)(e);u.Au&&null===M&&console.log('Could not find support for "stencil_texturing"');let P=(0,a.Rc)(e);u.Au&&null===P&&console.log('Could not find support for "clip_control"');let k=(0,a.OQ)(e);u.Au&&null===k&&console.log('Could not find support for "render_snorm"');let B=(0,a.dl)(e);u.Au&&null===B&&console.log('Could not find support for "render_shared_exponent"');let _=(0,a.PI)(e);u.Au&&null===_&&console.log('Could not find support for "texture_norm16"');let R=(0,a.M)(e);u.Au&&null===R&&console.log('Could not find support for "depth_clamp"');let F=(0,a._$)(e);return u.Au&&null===F&&console.log('Could not find support for "multiview2"'),{instancedArrays:t,standardDerivatives:n,elementIndexUint:r,textureFloat:i,textureFloatLinear:o,textureHalfFloat:s,textureHalfFloatLinear:l,depthTexture:c,blendMinMax:d,vertexArrayObject:p,fragDepth:f,colorBufferFloat:m,colorBufferHalfFloat:h,drawBuffers:g,drawBuffersIndexed:b,shaderTextureLod:y,sRGB:x,disjointTimerQuery:S,multiDraw:T,drawInstancedBaseVertexBaseInstance:C,multiDrawInstancedBaseVertexBaseInstance:O,parallelShaderCompile:I,fboRenderMipmap:A,provokingVertex:w,clipCullDistance:D,conservativeDepth:E,stencilTexturing:M,clipControl:P,renderSnorm:k,renderSharedExponent:B,textureNorm16:_,depthClamp:R,multiview2:F,noNonInstancedActiveAttribs:(0,a.aT)(e)}}var p=r(717),f=r(59837),m=r(62763),h=r(36111);function g(e,t,r){let a=new Map,n=[];return{get:r=>{var i;let o=e(r),s=a.get(o);return s||(s=function(e,t=0){return{value:e,usageCount:t}}(t(r)),a.set(o,s),n.push(s.value)),s.usageCount+=1,{free:()=>{i.usageCount-=1},value:(i=s).value}},clear:()=>{a.forEach((e,t)=>{e.usageCount<=0&&(e.usageCount<0&&console.warn("Reference usageCount below zero."),r(e.value),a.delete(t),(0,h.KQ)(n,e.value))})},get count(){return a.size},values:n,dispose:()=>
7316{a.forEach(e=>r(e.value)),a.clear(),n.length=0}}}var b=r(69062);let y=(0,n.s)();function x(e){let t=e.createRenderbuffer();if(null===t)throw Error("Could not create WebGL renderbuffer");return t}var S=r(91407);let T=(0,n.s)();function C(e){let{vertexArrayObject:t}=e;if(!t)throw Error("VertexArrayObject not supported");let r=t.createVertexArray();if(!r)throw Error("Could not create WebGL vertex array");return r}function O(e){let{vertexArrayObject:t}=e;if(null===t)throw Error("VertexArrayObject not supported");return t}var I=r(58400);function A(e){return{...e.value,destroy:()=>{e.free()}}}let w=(0,n.s)();var D=r(89987),E=r(44712);function M(e,t){function r(r){try{return e.getContext(r,t)}catch(e){return null}}let n=((null==t?void 0:t.preferWebGl1)?null:r("webgl2"))||r("webgl")||r("experimental-webgl");return u.Au&&console.log(`isWebgl2: ${(0,a.D0)(n)}`),n}function P(e,t){switch(t){case e.NO_ERROR:return"no error";case e.INVALID_ENUM:return"invalid enum";case e.INVALID_VALUE:return"invalid value";case e.INVALID_OPERATION:return"invalid operation";case e.INVALID_FRAMEBUFFER_OPERATION:return"invalid framebuffer operation";case e.OUT_OF_MEMORY:return"out of memory";case e.CONTEXT_LOST_WEBGL:return"context lost"}return"unknown error"}function k(e,t){let r=e.getError();r!==e.NO_ERROR&&console.log(`WebGL error: '${P(e,r)}'${t?` (${t})`:""}`)}let B=new Uint8Array(4);function _(e,t,r){e.getSyncParameter(t,e.SYNC_STATUS)===e.SIGNALED?(e.deleteSync(t),r()):l.b2.setImmediate(_,e,t,r)}let R=!1;function F(e){e.bindFramebuffer(e.FRAMEBUFFER,null),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,B)}function L(e,t){t?e.bindFramebuffer(e.FRAMEBUFFER,t.framebuffer):e.bindFramebuffer(e.FRAMEBUFFER,null)}function z(e,t,r){var a,n;let i=null!==(a=null==t?void 0:t.framebufferWidth)&&void 0!==a?a:e.drawingBufferWidth;return"screen-space"===r&&(i*=2),{width:i,height:null!==(n=null==t?void 0:t.framebufferHeight)&&void 0!==n?n:e.drawingBufferHeight}}function N(e,t,r,a){let n="vertex"===t?e.VERTEX_SHADER:e.FRAGMENT_SHADER,i=e[`${r.toUpperCase()}_${a.toUpperCase()}`];return e.getShaderPrecisionFormat(n,i)}function G(e,t){return{lowFloat:N(e,t,"low","float"),mediumFloat:N(e,t,"medium","float"),highFloat:N(e,t,"high","float"),lowInt:N(e,t,"low","int"),mediumInt:N(e,t,"medium","int"),highInt:N(e,t,"high","int")}}function U(e,t={}){let r=d(e),n=function(e,t){let r={},a=e.getParameter(e.FRONT_FACE),n=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),o=e.getParameter(e.DEPTH_CLEAR_VALUE),s=e.getParameter(e.DEPTH_FUNC),l=e.getParameter(e.COLOR_WRITEMASK),u=e.getParameter(e.COLOR_CLEAR_VALUE),c=e.getParameter(e.BLEND_SRC_RGB),d=e.getParameter(e.BLEND_DST_RGB),p=e.getParameter(e.BLEND_SRC_ALPHA),f=e.getParameter(e.BLEND_DST_ALPHA),m=e.getParameter(e.BLEND_COLOR),h=e.getParameter(e.BLEND_EQUATION_RGB),g=e.getParameter(e.BLEND_EQUATION_ALPHA),b=e.getParameter(e.STENCIL_FUNC),y=e.getParameter(e.STENCIL_VALUE_MASK),x=e.getParameter(e.STENCIL_REF),S=e.getParameter(e.STENCIL_BACK_FUNC),T=e.getParameter(e.STENCIL_BACK_VALUE_MASK),C=e.getParameter(e.STENCIL_BACK_REF),O=e.getParameter(e.STENCIL_WRITEMASK),I=e.getParameter(e.STENCIL_BACK_WRITEMASK),A=e.getParameter(e.STENCIL_FAIL),w=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),D=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),E=e.getParameter(e.STENCIL_BACK_FAIL),M=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),P=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),k=e.getParameter(e.MAX_VERTEX_ATTRIBS),B=[],_=e.getParameter(e.VIEWPORT),R=e.getParameter(e.SCISSOR_BOX),F=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,L=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1,z=()=>{for(let e=0;e<k;++e)B[e]=0};return z(),{currentProgramId:-1,currentMaterialId:-1,currentRenderItemId:-1,enable:t=>{!0!==r[t]&&(e.enable(t),r[t]=!0)},disable:t=>{!1!==r[t]&&(e.disable(t),r[t]=!1)},frontFace:t=>{t!==a&&(e.frontFace(t),a=t)},cullFace:t=>{t!==n&&(e.cullFace(t),n=t)},depthMask:t=>{t!==i&&(e.depthMask(t),i=t)},clearDepth:t=>{t!==o&&(e.clearDepth(t),o=t)},depthFunc:t=>{t!==s&&(e.depthFunc(t),s=t)},colorMask:(t,r,a,n)=>{(t!==l[0]||r!==l[1]||a!==l[2]||n!==l[3])&&(e.colorMask(t,r,a,n),l[0]=t,l[1]=r,l[2]=a,l[3]=n)},clearColor:(t,r,a,n)=>{(t!==u[0]||r!==u[1]||a!==u[2]||n!==u[3])&&(e.clearColor(t,r,a,n),u[0]=t,u[1]=r,u[2]=a,u[3]=n)},blendFunc:(t,r)=>{(t!==c||r!==d||t!==p||r!==f)&&(e.blendFunc(t,r),c=t,d=r,p=t,f=r)},blendFuncSeparate:(t,r,a,n)=>{(t!==c||r!==d||a!==p||n!==f)&&(e.blendFuncSeparate(t,r,a,n),c=t,d=r,p=a,f=n)},blendEquation:t=>{(t!==h||t!==g)&&(e.blendEquation(t),h=t,g=t)},blendEquationSeparate:(t,r)=>{(t!==h||r!==g)&&(e.blendEquationSeparate(t,r),h=t,g=r)},blendColor:(t,r,a,n)=>
7316{(t!==m[0]||r!==m[1]||a!==m[2]||n!==m[3])&&(e.blendColor(t,r,a,n),m[0]=t,m[1]=r,m[2]=a,m[3]=n)},stencilFunc:(t,r,a)=>{(t!==b||r!==x||a!==y||t!==S||r!==C||a!==T)&&(e.stencilFunc(t,r,a),b=t,x=r,y=a,S=t,C=r,T=a)},stencilFuncSeparate:(t,r,a,n)=>{t===e.FRONT?(r!==b||a!==x||n!==y)&&(e.stencilFuncSeparate(t,r,a,n),b=r,x=a,y=n):t===e.BACK?(r!==S||a!==C||n!==T)&&(e.stencilFuncSeparate(t,r,a,n),S=r,C=a,T=n):t===e.FRONT_AND_BACK&&(r!==b||a!==x||n!==y||r!==S||a!==C||n!==T)&&(e.stencilFuncSeparate(t,r,a,n),b=r,x=a,y=n,S=r,C=a,T=n)},stencilMask:t=>{(t!==O||t!==I)&&(e.stencilMask(t),O=t,I=t)},stencilMaskSeparate:(t,r)=>{t===e.FRONT?r!==O&&(e.stencilMaskSeparate(t,r),O=r):t===e.BACK?r!==I&&(e.stencilMaskSeparate(t,r),I=r):t===e.FRONT_AND_BACK&&(r!==O||r!==I)&&(e.stencilMaskSeparate(t,r),O=r,I=r)},stencilOp:(t,r,a)=>{(t!==A||r!==D||a!==w||t!==E||r!==P||a!==M)&&(e.stencilOp(t,r,a),A=t,D=r,w=a,E=t,P=r,M=a)},stencilOpSeparate:(t,r,a,n)=>{t===e.FRONT?(r!==A||a!==D||n!==w)&&(e.stencilOpSeparate(t,r,a,n),A=r,D=a,w=n):t===e.BACK?(r!==E||a!==P||n!==M)&&(e.stencilOpSeparate(t,r,a,n),E=r,P=a,M=n):t===e.FRONT_AND_BACK&&(r!==A||a!==D||n!==w||r!==E||a!==P||n!==M)&&(e.stencilOpSeparate(t,r,a,n),A=r,D=a,w=n,E=r,P=a,M=n)},enableVertexAttrib:t=>{e.enableVertexAttribArray(t),B[t]=1},clearVertexAttribsState:z,disableUnusedVertexAttribs:()=>{for(let t=0;t<k;++t)0===B[t]&&e.disableVertexAttribArray(t)},viewport:(t,r,a,n)=>{(t!==_[0]||r!==_[1]||a!==_[2]||n!==_[3])&&(e.viewport(t,r,a,n),_[0]=t,_[1]=r,_[2]=a,_[3]=n)},scissor:(t,r,a,n)=>{(t!==R[0]||r!==R[1]||a!==R[2]||n!==R[3])&&(e.scissor(t,r,a,n),R[0]=t,R[1]=r,R[2]=a,R[3]=n)},clipControl:t.clipControl?(e,r)=>{(e!==F||r!==L)&&(t.clipControl.clipControl(e,r),F=e,L=r)}:void 0,reset:()=>{r={},a=e.getParameter(e.FRONT_FACE),n=e.getParameter(e.CULL_FACE_MODE),i=e.getParameter(e.DEPTH_WRITEMASK),o=e.getParameter(e.DEPTH_CLEAR_VALUE),s=e.getParameter(e.DEPTH_FUNC),l=e.getParameter(e.COLOR_WRITEMASK),u=e.getParameter(e.COLOR_CLEAR_VALUE),c=e.getParameter(e.BLEND_SRC_RGB),d=e.getParameter(e.BLEND_DST_RGB),p=e.getParameter(e.BLEND_SRC_ALPHA),f=e.getParameter(e.BLEND_DST_ALPHA),m=e.getParameter(e.BLEND_COLOR),h=e.getParameter(e.BLEND_EQUATION_RGB),g=e.getParameter(e.BLEND_EQUATION_ALPHA),b=e.getParameter(e.STENCIL_FUNC),y=e.getParameter(e.STENCIL_VALUE_MASK),x=e.getParameter(e.STENCIL_REF),S=e.getParameter(e.STENCIL_BACK_FUNC),T=e.getParameter(e.STENCIL_BACK_VALUE_MASK),C=e.getParameter(e.STENCIL_BACK_REF),O=e.getParameter(e.STENCIL_WRITEMASK),I=e.getParameter(e.STENCIL_BACK_WRITEMASK),A=e.getParameter(e.STENCIL_FAIL),w=e.getParameter(e.STENCIL_PASS_DEPTH_PASS),D=e.getParameter(e.STENCIL_PASS_DEPTH_FAIL),E=e.getParameter(e.STENCIL_BACK_FAIL),M=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_PASS),P=e.getParameter(e.STENCIL_BACK_PASS_DEPTH_FAIL),k=e.getParameter(e.MAX_VERTEX_ATTRIBS),B.length=0;for(let e=0;e<k;++e)B[e]=0;_=e.getParameter(e.VIEWPORT),R=e.getParameter(e.SCISSOR_BOX),F=t.clipControl?e.getParameter(t.clipControl.CLIP_ORIGIN):-1,L=t.clipControl?e.getParameter(t.clipControl.CLIP_DEPTH_MODE):-1}}}(e,r),h={resourceCounts:{attribute:0,elements:0,pixelPack:0,framebuffer:0,program:0,renderbuffer:0,shader:0,texture:0,cubeTexture:0,vertexArray:0},drawCount:0,instanceCount:0,instancedDrawCount:0,calls:{drawInstanced:0,drawInstancedBase:0,multiDrawInstancedBase:0,counts:0},culled:{lod:0,frustum:0,occlusion:0}},M={maxTextureSize:e.getParameter(e.MAX_TEXTURE_SIZE),max3dTextureSize:(0,a.D0)(e)?e.getParameter(e.MAX_3D_TEXTURE_SIZE):0,maxRenderbufferSize:e.getParameter(e.MAX_RENDERBUFFER_SIZE),maxDrawBuffers:r.drawBuffers?e.getParameter(r.drawBuffers.MAX_DRAW_BUFFERS):0,maxTextureImageUnits:e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),maxVertexTextureImageUnits:e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS)},P=function(e,t,r,n,l){let c={attribute:new Set,elements:new Set,pixelPack:new Set,framebuffer:new Set,program:new Set,renderbuffer:new Set,shader:new Set,texture:new Set,cubeTexture:new Set,vertexArray:new Set};function d(e,t){return c[e].add(t),r.resourceCounts[e]+=1,{...t,destroy:()=>{t.destroy(),c[e].delete(t),r.resourceCounts[e]-=1}}}let h=g(e=>JSON.stringify(e),t=>d("shader",(0,f.e)(e,t)),e=>{e.destroy()});function w(e,t){return A(h.get({type:e,source:t}))}let D=new Set,E=g(e=>{var t;let r=[e.shaderCode.id],a=(null===(t=e.defineValues.dRenderVariant)||void 0===t?void 0:t.ref.value)||"";
7316return Object.keys(e.defineValues).forEach(t=>{var n,i,o;(null===(i=(n=e.shaderCode).ignoreDefine)||void 0===i?void 0:i.call(n,t,a,e.defineValues))||r.push((0,b.Wu)(t),"boolean"==typeof(o=e.defineValues[t].ref.value)?o?1:0:"number"==typeof o?1e4*o:(0,b.Wu)(o))}),(0,b.nF)(r).toString()},r=>{let a=(0,p.H)(e,t,n,l,w,r);return"compute"!==a.variant&&D.add(a),d("program",a)},e=>{D.delete(e),e.destroy()});return{attribute:(r,a,i,o)=>d("attribute",(0,m.ny)(e,t,n,r,a,i,o)),elements:(t,r)=>d("elements",(0,m.HK)(e,t,r)),pixelPack:(t,r)=>{if(!(0,a.D0)(e))throw Error("WebGL2 is required for pixel-pack buffers");return d("pixelPack",(0,m.R8)(e,n,t,r))},framebuffer:()=>{let t,r;return d("framebuffer",(t=s(e),r=!1,{id:i(),bind:()=>e.bindFramebuffer(e.FRAMEBUFFER,t),reset:()=>{t=s(e)},destroy:()=>{r||(e.deleteFramebuffer(t),r=!0)}}))},program:(e,t,r)=>A(E.get({defineValues:e,shaderCode:t,schema:r})),renderbuffer:(t,r,n,i)=>d("renderbuffer",function(e,t,r,n,i){let s=x(e),l=()=>e.bindRenderbuffer(e.RENDERBUFFER,s),c=function(e,t){switch(t){case"depth16":return e.DEPTH_COMPONENT16;case"stencil8":return e.STENCIL_INDEX8;case"rgba4":return e.RGBA4;case"depth-stencil":return e.DEPTH_STENCIL;case"depth24":if((0,a.D0)(e))return e.DEPTH_COMPONENT24;throw Error("WebGL2 needed for `depth24` renderbuffer format");case"depth32f":if((0,a.D0)(e))return e.DEPTH_COMPONENT32F;throw Error("WebGL2 needed for `depth32f` renderbuffer format");case"depth24-stencil8":if((0,a.D0)(e))return e.DEPTH24_STENCIL8;throw Error("WebGL2 needed for `depth24-stencil8` renderbuffer format");case"depth32f-stencil8":if((0,a.D0)(e))return e.DEPTH32F_STENCIL8;throw Error("WebGL2 needed for `depth32f-stencil8` renderbuffer format")}}(e,t),d=function(e,t){switch(t){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"depth-stencil":return e.DEPTH_STENCIL_ATTACHMENT;case"color0":return e.COLOR_ATTACHMENT0}}(e,r);function p(){l(),e.renderbufferStorage(e.RENDERBUFFER,c,n,i)}p();let f=!1;return{id:y(),getByteCount:()=>(function(e){switch(e){case"depth16":case"rgba4":case"depth-stencil":case"depth32f":case"depth24-stencil8":return 4;case"stencil8":return 2;case"depth24":return 3;case"depth32f-stencil8":return 5}})(t)*n*i,bind:l,attachFramebuffer:t=>{t.bind(),l(),e.framebufferRenderbuffer(e.FRAMEBUFFER,d,e.RENDERBUFFER,s),u.Au&&o(e)},detachFramebuffer:t=>{t.bind(),l(),e.framebufferRenderbuffer(e.FRAMEBUFFER,d,e.RENDERBUFFER,null),u.Au&&o(e)},setSize:(e,t)=>
7316{n=e,i=t,p()},reset:()=>{s=x(e),p()},destroy:()=>{f||(e.deleteRenderbuffer(s),f=!0)}}}(e,t,r,n,i)),shader:w,texture:(t,r,a,i)=>d("texture",(0,S.cU)(e,n,t,r,a,i)),cubeTexture:(t,r,a)=>d("cubeTexture",(0,S.aN)(e,t,r,a)),vertexArray:(t,r,a)=>d("vertexArray",function(e,t,r,a,n){let i=T(),o=C(t),s=O(t);function l(){s.bindVertexArray(o),n&&n.bind(),r.bindAttributes(a),s.bindVertexArray(null),u=!0}let u=!1,c=!1;return{id:i,bind:()=>{u||l(),s.bindVertexArray(o)},update:l,reset:()=>{o=C(t),s=O(t),u=!1},destroy:()=>{c||(n&&(s.bindVertexArray(o),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),s.deleteVertexArray(o),c=!0)}}}(e,n,t,r,a)),getByteCounts:()=>{let e=0;c.texture.forEach(t=>{e+=t.getByteCount()});let t=0;c.cubeTexture.forEach(e=>{t+=e.getByteCount()});let r=0;c.attribute.forEach(e=>{r+=e.getByteCount()});let a=0;c.elements.forEach(e=>{a+=e.getByteCount()});let n=0;c.pixelPack.forEach(e=>{n+=e.getByteCount()});let i=0;return c.renderbuffer.forEach(e=>{i+=e.getByteCount()}),{texture:e,cubeTexture:t,attribute:r,elements:a,pixelPack:n,renderbuffer:i}},linkPrograms:e=>{for(let t of D)(!e||e.includes(t.variant))&&t.link()},finalizePrograms:(e,t)=>{let r=!0,a=0;for(let t of D)t.isReady()&&D.delete(t),(!e||e.includes(t.variant))&&(r=!1,a+=1);if(r)return!0;let n=!0,i=0,o=(0,I.z)();for(let r of D)if((!e||e.includes(r.variant))&&(r.finalize(t)?(D.delete(r),i+=1):n=!1,!t&&(0,I.z)()-o>16)){n=!1;break}return u.kM&&console.log(`Finalized ${i} of ${a} programs (${e?e.join(", "):"all"}) in ${((0,I.z)()-o).toFixed(2)} ms`),n},reset:()=>{c.attribute.forEach(e=>e.reset()),c.elements.forEach(e=>e.reset()),c.pixelPack.forEach(e=>e.reset()),c.framebuffer.forEach(e=>e.reset()),c.renderbuffer.forEach(e=>e.reset()),c.shader.forEach(e=>e.reset()),c.program.forEach(e=>e.reset()),c.vertexArray.forEach(e=>e.reset()),c.texture.forEach(e=>e.reset()),c.cubeTexture.forEach(e=>e.reset())},destroy:()=>{c.attribute.forEach(e=>e.destroy()),c.elements.forEach(e=>e.destroy()),c.pixelPack.forEach(e=>e.destroy()),c.framebuffer.forEach(e=>e.destroy()),c.renderbuffer.forEach(e=>e.destroy()),c.shader.forEach(e=>e.destroy()),c.program.forEach(e=>e.destroy()),c.vertexArray.forEach(e=>e.destroy()),c.texture.forEach(e=>e.destroy()),c.cubeTexture.forEach(e=>e.destroy()),h.clear(),E.clear(),D.clear()}}}(e,n,h,r,M),N=(0,E.e)(e,r,h);if(M.maxVertexTextureImageUnits<8)throw Error('Need "MAX_VERTEX_TEXTURE_IMAGE_UNITS" >= 8');let U={vertex:G(e,"vertex"),fragment:G(e,"fragment")};u.Au&&console.log({parameters:M,shaderPrecisionFormats:U});let V=r.provokingVertex;null==V||V.provokingVertex(V.FIRST_VERTEX_CONVENTION);let j=!1,H=new D.x,q=t.pixelScale||1,X={session:void 0,layer:void 0,changed:new D.x,clear:()=>{X.layer=void 0,X.session=void 0,X.changed.next()}},W=new Set;return{gl:e,isWebGL2:(0,a.D0)(e),get pixelRatio(){return("undefined"!=typeof window&&window.devicePixelRatio||1)*(q||1)},extensions:r,state:n,stats:h,resources:P,timer:N,get maxTextureSize(){return M.maxTextureSize},get max3dTextureSize(){return M.max3dTextureSize},get maxRenderbufferSize(){return M.maxRenderbufferSize},get maxDrawBuffers(){return M.maxDrawBuffers},get maxTextureImageUnits(){return M.maxTextureImageUnits},get shaderPrecisionFormats(){return U},namedComputeRenderables:Object.create(null),namedFramebuffers:Object.create(null),namedTextures:Object.create(null),get isContextLost(){return j||e.isContextLost()},contextRestored:H,setContextLost:()=>{j=!0,N.clear()},handleContextRestored:t=>{!function(e,t){let r=d(e);(0,c.mt)(t,(e,a)=>{"noNonInstancedActiveAttribs"===a?t.noNonInstancedActiveAttribs=r.noNonInstancedActiveAttribs:null!==e&&(null===r[a]?t[a]=null:Object.assign(e,r[a]))})}(e,r),n.reset(),n.currentMaterialId=-1,n.currentProgramId=-1,n.currentRenderItemId=-1,P.reset(),W.forEach(e=>e.reset()),null==t||t(),j=!1,H.next((0,I.z)())},xr:{get session(){return X.session},changed:X.changed,set:async(t,r)=>{var a,n;if(X.session!==t&&(await (null===(a=X.session)||void 0===a?void 0:a.end()),void 0!==t))try{await e.makeXRCompatible(),X.session=t,X.layer=new XRWebGLLayer(X.session,e,{antialias:!0,alpha:!0,depth:!0,framebufferScaleFactor:q*(null!==(n=null==r?void 0:r.resolutionScale)&&void 0!==n?n:1)}),await X.session.updateRenderState({baseLayer:X.layer}),X.session.addEventListener("end",X.clear),X.changed.next()}catch(e){throw t?await t.end():(X.layer=void 0,X.session=void 0),e}},end:async()=>{var e;return null===(e=X.session)||void 0===e?void 0:e.end()}},setPixelScale:e=>{q=e},createRenderTarget:(t,r,n,i,o,s)=>{let l=function(e,t,r,n,i=!0,o="uint8",s="nearest",l="rgba"){if("alpha"===l&&!(0,a.D0)(e))throw Error("cannot render to alpha format in webgl1");let u=t.framebuffer(),c="fp16"===o?t.texture("image-float16",l,"fp16",s):"float32"===o?t.texture("image-float32",l,"float",s):t.texture("image-uint8",l,"ubyte",s),d=i?(0,a.D0)(e)?t.renderbuffer("depth32f","depth",r,n):t.renderbuffer("depth16","depth",r,n):null;function p(){c.define(r,n),c.attachFramebuffer(u,"color0"),d&&d.attachFramebuffer(u)}p();let f=!1;return{id:w(),texture:c,framebuffer:u,depthRenderbuffer:d,getByteCount:()=>c.getByteCount()+(d?d.getByteCount():0),getWidth:()=>r,getHeight:()=>n,bind:()=>{u.bind()},setSize:(e,t)=>
7316{(r!==e||n!==t)&&(r=e,n=t,c.define(r,n),d&&d.setSize(r,n))},reset:()=>{p()},destroy:()=>{f||(c.destroy(),u.destroy(),d&&d.destroy(),f=!0)}}}(e,P,t,r,n,i,o,s);return W.add(l),{...l,destroy:()=>{l.destroy(),W.delete(l)}}},createDrawTarget:()=>({id:-1,texture:(0,S.DU)(e),framebuffer:{id:i(),bind:()=>{},reset:()=>{},destroy:()=>{}},depthRenderbuffer:null,getByteCount:()=>0,getWidth:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode).width},getHeight:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode).height},bind:()=>{L(e,X.layer)},setSize:()=>{},reset:()=>{},destroy:()=>{}}),bindDrawingBuffer:()=>L(e,X.layer),getDrawingBufferSize:()=>{var t;return z(e,X.layer,null===(t=X.session)||void 0===t?void 0:t.interactionMode)},readPixels:(t,r,n,i,s)=>{!function(e,t,r,n,i,s){if(u.Au&&o(e),s instanceof Uint8Array)e.readPixels(t,r,n,i,e.RGBA,e.UNSIGNED_BYTE,s);else if(s instanceof Float32Array)e.readPixels(t,r,n,i,e.RGBA,e.FLOAT,s);else if(s instanceof Int32Array&&(0,a.D0)(e))e.readPixels(t,r,n,i,e.RGBA_INTEGER,e.INT,s);else throw Error("unsupported readPixels buffer type");u.Au&&k(e)}(e,t,r,n,i,s)},waitForGpuCommandsComplete:()=>new Promise(t=>{(0,a.D0)(e)?function(e,t){let r=e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0);r?l.b2.setImmediate(_,e,r,t):(console.warn("Could not create a WebGLSync object"),e.readPixels(0,0,1,1,e.RGBA,e.UNSIGNED_BYTE,B),t())}(e,t):(R||(console.info("Sync object not supported in WebGL"),R=!0),F(e),t())}),waitForGpuCommandsCompleteSync:()=>F(e),getFenceSync:()=>(0,a.D0)(e)?e.fenceSync(e.SYNC_GPU_COMMANDS_COMPLETE,0):null,checkSyncStatus:t=>!(0,a.D0)(e)||e.getSyncParameter(t,e.SYNC_STATUS)===e.SIGNALED&&(e.deleteSync(t),!0),deleteSync:t=>{(0,a.D0)(e)&&e.deleteSync(t)},clear:(t,r,a,i)=>{let o=z(e,X.layer);L(e,X.layer),n.enable(e.SCISSOR_TEST),n.depthMask(!0),n.colorMask(!0,!0,!0,!0),n.clearColor(t,r,a,i),n.viewport(0,0,o.width,o.height),n.scissor(0,0,o.width,o.height),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT)},checkError:t=>{k(e,t)},checkFramebufferStatus:t=>{o(e,t)},destroy:t=>{var r,n,i,o;P.destroy(),function(e){let t=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS);for(let r=0;r<t;++r)e.activeTexture(e.TEXTURE0+r),e.bindTexture(e.TEXTURE_2D,null),e.bindTexture(e.TEXTURE_CUBE_MAP,null),(0,a.D0)(e)&&(e.bindTexture(e.TEXTURE_2D_ARRAY,null),e.bindTexture(e.TEXTURE_3D,null));let r=e.createBuffer();e.bindBuffer(e.ARRAY_BUFFER,r);let n=e.getParameter(e.MAX_VERTEX_ATTRIBS);for(let t=0;t<n;++t)e.vertexAttribPointer(t,1,e.FLOAT,!1,0,0);e.bindBuffer(e.ARRAY_BUFFER,null),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null),e.bindRenderbuffer(e.RENDERBUFFER,null),e.bindFramebuffer(e.FRAMEBUFFER,null),(0,a.D0)(e)&&(e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBuffer(e.PIXEL_PACK_BUFFER,null))}(e),null===(r=X.session)||void 0===r||r.removeEventListener("end",X.clear),null===(n=X.session)||void 0===n||n.end(),H.complete(),X.changed.complete(),(null==t?void 0:t.doNotForceWebGLContextLoss)||(null===(i=e.getExtension("WEBGL_lose_context"))||void 0===i||i.loseContext(),null===(o=e.getExtension("STACKGL_destroy_context"))||void 0===o||o.destroy())}}}},717:function(e,t,r){r.d(t,{E:function(){return c},H:function(){return d}});var a=r(45705),n=r(25770),i=r(62763),o=r(16252),s=r(48502),l=r(62131);let u=(0,o.s)();function c(e){let t=e.createProgram();if(null===t)throw Error("Could not create WebGL program");return t}function d(e,t,r,o,d,p){let f,m;let{defineValues:h,shaderCode:g,schema:b}=p,y=c(e),x=u(),S=function(e){if("string"!=typeof e)throw Error(`unknown program variant: ${e}`);return e.startsWith("color")?"color":e.startsWith("pick")?"pick":e}(h.dRenderVariant.ref.value),T=(0,a.AA)(e,r,o,h,g),C=d("vert",T.vert),O=d("frag",T.frag),I=!1,A=!1,w=!1;function D(){C.attach(y),O.attach(y),e.linkProgram(y),s.Au&&function(e,t){if(!e.getProgramParameter(t,e.LINK_STATUS))throw Error(`Could not compile WebGL program. 7317 7318${e.getProgramInfoLog(t)}`)}(e,y),I=!0}function E(){f=function(e,t,r){let a={};return Object.keys(r).forEach(i=>{let o=r[i];if("attribute"===o.type){let r=e.getAttribLocation(t,i);a[i]=r}else if("uniform"===o.type){let r=e.getUniformLocation(t,i);null===r&&(0,n.Dh)(o.kind)&&(r=e.getUniformLocation(t,i+"[0]")),a[i]=r}else if("texture"===o.type){let r=e.getUniformLocation(t,i);a[i]=r}}),a}(e,y,b),m=(0,n.ko)(b),s.Au&&(function(e,t,r){let a=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let n=0;n<a;++n){let a=e.getActiveAttrib(t,n);if(a){let{name:t,type:n}=a;if(t.startsWith("__activeAttribute")||"gl_InstanceID"===t||"gl_VertexID"===t||"gl_DrawID"===t||"gl_ViewID_OVR"===t)continue;let o=r[t];if(void 0===o)throw Error(`missing 'uniform' or 'texture' with name '${t}' in schema`);if("attribute"!==o.type)throw Error(`'${t}' must be of type 'attribute' but is '${o.type}'`);let s=(0,i.Ej)(e,o.kind,o.itemSize);if(s!==n)throw Error(`unexpected attribute type '${s}' for ${t}, expected '${n}'`)}}}(e,y,b),function(e,t,r){let a=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let i=0;i<a;++i){let a=e.getActiveUniform(t,i);if(a){let{name:t,type:i}=a;if(t.startsWith("__activeUniform")||"gl_InstanceID"===t||"gl_VertexID"===t||"gl_DrawID"===t||"gl_ViewID_OVR"===t)continue;let o=r[t.replace(/[[0-9]+\]$/,"")];if(void 0===o)throw Error(`missing 'uniform' or 'texture' with name '${t}' in schema`);if("uniform"===o.type){if((0,n.Yn)(e,o.kind)!==i)throw Error(`unexpected uniform type for ${t}`)}else if("texture"===o.type){if("image-float32"===o.kind||"image-uint8"===o.kind){if(i!==e.
7318SAMPLER_2D)throw Error(`unexpected sampler type for '${t}'`)}else if("volume-float32"===o.kind||"volume-uint8"===o.kind){if((0,l.D0)(e)){if(i!==e.SAMPLER_3D)throw Error(`unexpected sampler type for '${t}'`)}else throw Error("WebGL2 is required to use SAMPLER_3D")}}else throw Error(`'${t}' must be of type 'uniform' or 'texture' but is '${o.type}'`)}}}(e,y,b)),A=!0}return"compute"===S&&D(),{id:x,variant:S,isReady:()=>A,link:()=>{I||D()},finalize:t=>(I||D(),!A&&(t||!r.parallelShaderCompile||e.getProgramParameter(y,r.parallelShaderCompile.COMPLETION_STATUS))&&E(),A),use:()=>{if(s.Au&&!A)throw Error(`program not finalized: ${S}`);t.currentProgramId=x,e.useProgram(y)},setUniforms:t=>{for(let r=0,a=t.length;r<a;++r){let[a,n]=t[r];if(n){let t=f[a];null!==t&&m[a](e,t,n.ref.value)}}},uniform:(t,r)=>{let a=f[t];null!==a&&m[t](e,a,r)},bindAttributes:e=>{t.clearVertexAttribsState();for(let t=0,r=e.length;t<r;++t){let[r,a]=e[t],n=f[r];-1!==n&&a.bind(n)}t.disableUnusedVertexAttribs()},offsetAttributes:(e,t)=>{for(let r=0,a=e.length;r<a;++r){let[a,n]=e[r],i=f[a];-1!==i&&n.changeOffset(i,t)}},bindTextures:(t,r)=>{for(let a=0,n=t.length;a<n;++a){let[n,i]=t[a],o=f[n];null!=o&&(i.bind(a+r),m[n](e,o,a+r))}},reset:()=>{y=c(e),I&&D(),A&&E()},destroy:()=>{w||(C.destroy(),O.destroy(),e.deleteProgram(y),w=!0)}}}},57155:function(e,t,r){r.d(t,{s8:function(){return y},ww:function(){return b}});var a=r(62763),n=r(91407),i=r(18406),o=r(16252),s=r(85764),l=r(48502),u=r(36111),c=r(67546),d=r(25770);let p=(0,o.s)(),f=["color","pick","depth","marking","emissive","tracing"],m=["compute"];function h(e,t,r,a,n){return r={...r,dRenderVariant:s.IO.create(t)},void 0===n.dRenderVariant&&Object.defineProperty(n,"dRenderVariant",{value:(0,i.O0)("string")}),e.resources.program(r,a,n)}function g(e,t){if("color"===e)switch(t){case"blended":return"colorBlended";case"wboit":return"colorWboit";case"dpoit":return"colorDpoit"}return e}function b(e,t,r,a,n,i,o){return x(e,t,r,a,n,i,f,o)}function y(e,t,r,a,n,i=-1){return x(e,t,r,a,n,i,m,void 0)}function x(e,t,r,o,f,m,b,y){let x;let S=p(),{stats:T,state:C,resources:O}=e,{instancedArrays:I,vertexArrayObject:A,multiDrawInstancedBaseVertexBaseInstance:w,drawInstancedBaseVertexBaseInstance:D}=e.extensions;if(b=b.filter(t=>"tracing"!==t||!!e.extensions.drawBuffers),f.uVertexCount&&!e.extensions.noNonInstancedActiveAttribs){let e=f.uVertexCount.ref.value;f.aVertex=s.IO.create((0,u.d_)(new Float32Array(e))),o.aVertex=(0,i.LQ)("float32",1,0)}let{attributeValues:E,defineValues:M,textureValues:P,materialTextureValues:k,uniformValues:B,materialUniformValues:_,bufferedUniformValues:R}=(0,i.kA)(o,f),F=Object.entries(B),L=Object.entries(_),z=Object.entries(R),N=Object.entries((0,d.vZ)(R)),G=Object.entries(M),U=(0,i.Xe)(f),V=function(e,t){let{gl:r}=e;switch(t){case"points":return r.POINTS;case"lines":return r.LINES;case"line-strip":return r.LINE_STRIP;case"line-loop":return r.LINE_LOOP;case"triangles":return r.TRIANGLES;case"triangle-strip":return r.TRIANGLE_STRIP;case"triangle-fan":return r.TRIANGLE_FAN}}(e,t),j={};for(let t of b)j[t]=h(e,g(t,y),M,r,o);let H=(0,n.cE)(e,o,P),q=(0,n.cE)(e,o,k),X=(0,a.MX)(e,o,E),W=[];for(let e=0,t=X.length;e<t;++e){let t=X[e];
73181===t[1].divisor&&W.push(t)}let K=f.elements;K&&K.ref.value&&(x=O.elements(K.ref.value));let Q={};for(let e of b)Q[e]=A?O.vertexArray(j[e],X,x):null;let Z=f.drawCount.ref.value,Y=f.instanceCount.ref.value;T.drawCount+=Z,T.instanceCount+=Y,T.instancedDrawCount+=Y*Z;let $={attributes:!1,defines:!1,elements:!1,textures:!1},J=!1,ee=-1;return{id:S,materialId:m,getByteCount(){let e=0;for(let t=0,r=X.length;t<r;++t)e+=X[t][1].getByteCount();x&&(e+=x.getByteCount());for(let t=0,r=H.length;t<r;++t)e+=H[t][1].getByteCount();for(let t=0,r=q.length;t<r;++t)e+=q[t][1].getByteCount();return e},getProgram:e=>j[e],setTransparency:t=>{if(t!==y)for(let a of(y=t,b))j[a].destroy(),j[a]=h(e,g(a,y),M,r,o)},render:(t,r,a)=>{if(0===Z||0===Y)return;let n=j[t];if(n.id===ee&&C.currentRenderItemId===S)n.setUniforms(F),n.bindTextures(H,r);else{let e=Q[t];(n.id!==C.currentProgramId||n.id!==ee||-1===m||m!==C.currentMaterialId)&&(n.id!==C.currentProgramId&&n.use(),n.setUniforms(L),n.bindTextures(q,r+H.length),C.currentMaterialId=m,ee=n.id),n.setUniforms(F),n.setUniforms(N),n.bindTextures(H,r),e?(e.bind(),x&&x.bind()):(x&&x.bind(),n.bindAttributes(X)),C.currentRenderItemId=S}if(l.Au&&e.checkFramebufferStatus(`Framebuffer error rendering item id ${S}`),a){for(let e of a)if(0!==e.count){if(n.setUniforms(e.uniforms),w)x?w.multiDrawElementsInstancedBaseVertexBaseInstance(V,e.counts,0,x._dataType,e.offsets,0,e.instanceCounts,0,e.baseVertices,0,e.baseInstances,0,e.count):w.multiDrawArraysInstancedBaseInstance(V,e.firsts,0,e.counts,0,e.instanceCounts,0,e.baseInstances,0,e.count);else if(D){if(x)for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),D.drawElementsInstancedBaseVertexBaseInstance(V,e.counts[t],x._dataType,e.offsets[t],e.instanceCounts[t],e.baseVertices[t],e.baseInstances[t]));else for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),D.drawArraysInstancedBaseInstance(V,e.firsts[t],e.counts[t],e.instanceCounts[t],e.baseInstances[t]))}else if(x)for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),n.offsetAttributes(W,e.baseInstances[t]),I.drawElementsInstanced(V,e.counts[t],x._dataType,e.offsets[t],e.instanceCounts[t]));else for(let t=0;t<e.count;++t)e.counts[t]>0&&(n.uniform("uDrawId",t),n.offsetAttributes(W,e.baseInstances[t]),I.drawArraysInstanced(V,0,e.counts[t],e.instanceCounts[t]));if(l.kM){w?T.calls.multiDrawInstancedBase+=1:D?T.calls.drawInstancedBase+=e.count:T.calls.drawInstanced+=e.count;for(let t=0;t<e.count;++t)T.calls.counts+=e.instanceCounts[t]}}}else{let e=0;for(;;){let t=Math.min(Z-e,3e7);if(x?I.drawElementsInstanced(V,t,x._dataType,e*x._bpe,Y):I.drawArraysInstanced(V,e,t,Y),(e+=t)>=Z)break}l.kM&&(T.calls.drawInstanced+=1,T.calls.counts+=Y)}l.Au&&e.checkError(`Draw error rendering item id ${S}`)},update:()=>{if($.attributes=!1,$.defines=!1,$.elements=!1,$.textures=!1,f.aVertex){let e=f.uVertexCount.ref.value;f.aVertex.ref.value.length<e&&s.IO.update(f.aVertex,(0,u.d_)(new Float32Array(e)))}for(let e=0,t=G.length;e<t;++e){let[t,r]=G[e];r.ref.version!==U[t]&&($.defines=!0,U[t]=r.ref.version)}if($.defines)for(let t of b)j[t].destroy(),j[t]=h(e,g(t,y),M,r,o);f.drawCount.ref.version!==U.drawCount&&(T.drawCount+=f.drawCount.ref.value-Z,T.instancedDrawCount+=Y*f.drawCount.ref.value-Y*Z,Z=f.drawCount.ref.value,U.drawCount=f.drawCount.ref.version),f.instanceCount.ref.version!==U.instanceCount&&(T.instanceCount+=f.instanceCount.ref.value-Y,T.instancedDrawCount+=f.instanceCount.ref.value*Z-Y*Z,Y=f.instanceCount.ref.value,U.instanceCount=f.instanceCount.ref.version);for(let e=0,t=X.length;e<t;++e){let[t,r]=X[e],a=E[t];if(a.ref.version!==U[t]){if(r.length>=a.ref.value.length)r.updateSubData(a.ref.value,0,r.length);else{r.destroy();let{itemSize:n,divisor:i}=o[t];X[e][1]=O.attribute(a.ref.value,n,i),$.attributes=!0}U[t]=a.ref.version}}if(x&&f.elements.ref.version!==U.elements&&(x.length>=f.elements.ref.value.length?x.updateSubData(f.elements.ref.value,0,x.length):(x.destroy(),x=O.elements(f.elements.ref.value),$.elements=!0),U.elements=f.elements.ref.version),$.attributes||$.defines||$.elements)for(let e of b){let t=Q[e];t&&t.destroy(),Q[e]=A?O.vertexArray(j[e],X,x):null}for(let e=0,t=H.length;e<t;++e){let[t,r]=H[e],a=P[t];a.ref.version!==U[t]&&("texture"!==o[t].kind?(r.load(a.ref.value),$.textures=!0):H[e][1]=a.ref.value,U[t]=a.ref.version)}for(let e=0,t=q.length;e<t;++e){let[t,r]=q[e],a=k[t];a.ref.version!==U[t]&&("texture"!==o[t].kind?(r.load(a.ref.value),$.textures=!0):q[e][1]=a.ref.value,U[t]=a.ref.version)}for(let e=0,t=z.length;e<t;++e){let[t,r]=z[e];r.ref.version!==U[t]&&(s.IO.update(N[e][1],(0,c.I8)(r.ref.value)),U[t]=r.ref.version)}},destroy:()=>
7318{if(!J){for(let e of b){j[e].destroy();let t=Q[e];t&&t.destroy()}H.forEach(([e,t])=>{"texture"!==o[e].kind&&t.destroy()}),q.forEach(([e,t])=>{"texture"!==o[e].kind&&t.destroy()}),X.forEach(([e,t])=>t.destroy()),x&&x.destroy(),T.drawCount-=Z,T.instanceCount-=Y,T.instancedDrawCount-=Y*Z,J=!0}}}}},59837:function(e,t,r){r.d(t,{X:function(){return o},e:function(){return s}});var a=r(16252),n=r(48502);let i=(0,a.s)();function o(e,t){let{type:r,source:a}=t,i=e.createShader("vert"===r?e.VERTEX_SHADER:e.FRAGMENT_SHADER);if(null===i)throw Error(`Error creating ${r} shader`);if(e.shaderSource(i,a),e.compileShader(i),n.Au&&!1===e.getShaderParameter(i,e.COMPILE_STATUS))throw console.warn(`'${r}' shader info log '${e.getShaderInfoLog(i)}' 7319${function(e){let t=e.split("\n");for(let e=0;e<t.length;++e)t[e]=e+1+": "+t[e];return t.join("\n")}(a)}`),Error(`Error compiling ${r} shader`);return i}function s(e,t){let r=o(e,t);return{id:i(),attach:t=>{e.attachShader(t,r)},reset:()=>{r=o(e,t)},destroy:()=>{e.deleteShader(r)}}}},91407:function(e,t,r){r.d(t,{DU:function(){return O},aN:function(){return T},cE:function(){return x},cU:function(){return y},eP:function(){return S},oL:function(){return p},q9:function(){return C},tX:function(){return d},y6:function(){return c}});var a=r(85764),n=r(16252),i=r(62131),o=r(97667),s=r(67546),l=r(58463);let u=(0,n.s)();function c(e,t,r){switch(t){case"alpha":if((0,i.D0)(e)&&("float"===r||"fp16"===r))return e.RED;if((0,i.D0)(e)&&"int"===r)return e.RED_INTEGER;return e.ALPHA;case"rgb":if((0,i.D0)(e)&&"int"===r)return e.RGB_INTEGER;return e.RGB;case"rg":if((0,i.D0)(e)&&("float"===r||"fp16"===r))return e.RG;if((0,i.D0)(e)&&"int"===r)return e.RG_INTEGER;throw Error('texture format "rg" requires webgl2 and type "float" or int"');case"rgba":if((0,i.D0)(e)&&"int"===r)return e.RGBA_INTEGER;return e.RGBA;case"depth":return e.DEPTH_COMPONENT}}function d(e,t){return function(e){switch(e){case"alpha":return 1;case"rg":return 2;case"rgb":return 3;case"rgba":case"depth":return 4}}(e)*function(e){switch(e){case"ubyte":return 1;case"ushort":case"fp16":return 2;case"float":case"int":return 4}}(t)}function p(e,t,r){switch(r){case"ubyte":return e.UNSIGNED_BYTE;case"ushort":return e.UNSIGNED_SHORT;case"float":return e.FLOAT;case"fp16":if(t.textureHalfFloat)return t.textureHalfFloat.HALF_FLOAT;throw Error('extension "texture_half_float" unavailable');case"int":if((0,i.D0)(e))return e.INT;throw Error('texture type "int" requires webgl2')}}function f(e,t){switch(t){case"nearest":return e.NEAREST;case"linear":return e.LINEAR}}function m(e,t,r){switch(r){case"depth":return e.DEPTH_ATTACHMENT;case"stencil":return e.STENCIL_ATTACHMENT;case"color0":case 0:return e.COLOR_ATTACHMENT0}if(t.drawBuffers)switch(r){case"color1":case 1:return t.drawBuffers.COLOR_ATTACHMENT1;case"color2":case 2:return t.drawBuffers.COLOR_ATTACHMENT2;case"color3":case 3:return t.drawBuffers.COLOR_ATTACHMENT3;case"color4":case 4:return t.drawBuffers.COLOR_ATTACHMENT4;case"color5":case 5:return t.drawBuffers.COLOR_ATTACHMENT5;case"color6":case 6:return t.drawBuffers.COLOR_ATTACHMENT6;case"color7":case 7:return t.drawBuffers.COLOR_ATTACHMENT7}throw Error("unknown texture attachment")}function h(e){return"undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement}function g(e,t,r){return t===r.TEXTURE_3D}function b(e){let t=e.createTexture();if(null===t)throw Error("Could not create WebGL texture");return t}function y(e,t,r,a,n,o){let s;let y=u(),x=b(e);if(r.endsWith("float32")&&"float"!==n||r.endsWith("float16")&&"fp16"!==n||r.endsWith("uint8")&&"ubyte"!==n||r.endsWith("int32")&&"int"!==n||r.endsWith("depth")&&"ushort"!==n&&"float"!==n)throw Error(`texture kind '${r}' and type '${n}' are incompatible`);
7319if(!t.depthTexture&&"depth"===a)throw Error("extension 'WEBGL_depth_texture' needed for 'depth' texture format");let S=function(e,t){switch(t){case"image-uint8":case"image-float32":case"image-float16":case"image-depth":return e.TEXTURE_2D}if((0,i.D0)(e))switch(t){case"image-int32":return e.TEXTURE_2D;case"volume-uint8":case"volume-float32":case"volume-float16":return e.TEXTURE_3D}throw Error(`unknown texture kind '${t}'`)}(e,r),T=f(e,o),C=c(e,a,n),O=function(e,t,r){if((0,i.D0)(e))switch(t){case"alpha":switch(r){case"ubyte":return e.ALPHA;case"float":return e.R32F;case"fp16":return e.R16F;case"int":return e.R32I}case"rg":switch(r){case"ubyte":return e.RG;case"float":return e.RG32F;case"fp16":return e.RG16F;case"int":return e.RG32I}case"rgb":switch(r){case"ubyte":return e.RGB;case"float":return e.RGB32F;case"fp16":return e.RGB16F;case"int":return e.RGB32I}case"rgba":switch(r){case"ubyte":return e.RGBA;case"float":return e.RGBA32F;case"fp16":return e.RGBA16F;case"int":return e.RGBA32I}case"depth":switch(r){case"ushort":return e.DEPTH_COMPONENT16;case"float":return e.DEPTH_COMPONENT32F}}return c(e,t,r)}(e,a,n),I=p(e,t,n);function A(){e.bindTexture(S,x),e.texParameteri(S,e.TEXTURE_MAG_FILTER,T),e.texParameteri(S,e.TEXTURE_MIN_FILTER,T),e.texParameteri(S,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(S,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.bindTexture(S,null)}A();let w=0,D=0,E=0,M=!1,P=!1;function k(t,r,a){if(0===t||0===r||(0,i.D0)(e)&&S===e.TEXTURE_3D&&0===a)throw Error("empty textures are not allowed");if(w!==t||D!==r||E!==(a||0)){if(w=t,D=r,E=a||0,e.bindTexture(S,x),S===e.TEXTURE_2D)e.texImage2D(S,0,O,w,D,0,C,I,null);else if((0,i.D0)(e)&&S===e.TEXTURE_3D&&void 0!==E)e.texImage3D(S,0,O,w,D,E,0,C,I,null);else throw Error("unknown texture target")}}function B(t,r=!1){if(0===t.width||0===t.height||!h(t)&&(0,i.D0)(e)&&g(t,S,e)&&0===t.depth)throw Error("empty textures are not allowed");if(e.bindTexture(S,x),e.pixelStorei(e.UNPACK_ALIGNMENT,1),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),h(t))w=t.width,D=t.height,e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(e.TEXTURE_2D,x),e.texImage2D(e.TEXTURE_2D,0,O,C,I,t);else if(S===e.TEXTURE_2D){let a=t.filter?f(e,t.filter):T;e.texParameteri(S,e.TEXTURE_MAG_FILTER,a),e.texParameteri(S,e.TEXTURE_MIN_FILTER,a),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!!t.flipY),r?e.texSubImage2D(S,0,0,0,t.width,t.height,C,I,t.array):(w=t.width,D=t.height,e.texImage2D(S,0,O,w,D,0,C,I,t.array))}else if((0,i.D0)(e)&&g(t,S,e))e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),r?e.texSubImage3D(S,0,0,0,0,t.width,t.height,t.depth,C,I,t.array):(w=t.width,D=t.height,E=t.depth,e.texImage3D(S,0,O,w,D,E,0,C,I,t.array));else throw Error("unknown texture target");e.bindTexture(S,null),s=t}function _(){if(S!==e.TEXTURE_2D)throw Error("mipmap only supported for 2d textures");if((0,i.D0)(e)||(0,l.wt)(w)&&(0,l.wt)(D))e.bindTexture(S,x),e.texParameteri(S,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(S),e.bindTexture(S,null),M=!0;else throw Error("mipmap unsupported for non-power-of-two textures and webgl1")}return k(1,1,(0,i.D0)(e)&&S===e.TEXTURE_3D?1:0),{id:y,target:S,format:C,internalFormat:O,type:I,filter:T,getWidth:()=>w,getHeight:()=>D,getDepth:()=>E,getByteCount:()=>{var e,t,r;return e=w,t=D,r=E,d(a,n)*e*t*(r||1)},define:k,load:B,mipmap:_,bind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(S,x)},unbind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(S,null)},attachFramebuffer:function(r,a,n){if(r.bind(),S===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,m(e,t,a),e.TEXTURE_2D,x,0);else if((0,i.D0)(e)&&S===e.TEXTURE_3D){if(void 0===n)throw Error("need `layer` to attach 3D texture");e.framebufferTextureLayer(e.FRAMEBUFFER,m(e,t,a),x,0,n)}else throw Error("unknown/unsupported texture target")},detachFramebuffer:(r,a)=>{if(r.bind(),S===e.TEXTURE_2D)e.framebufferTexture2D(e.FRAMEBUFFER,m(e,t,a),e.TEXTURE_2D,null,0);else if((0,i.D0)(e)&&S===e.TEXTURE_3D)e.framebufferTextureLayer(e.FRAMEBUFFER,m(e,t,a),null,0,0);else throw Error("unknown texture target")},reset:()=>{x=b(e),A();let[t,r,a]=[w,D,E];w=0,D=0,E=0,k(t,r,a),s&&B(s),M&&_()},destroy:()=>{P||(e.deleteTexture(x),P=!0)}}}function x(e,t,r){let{resources:a}=e,n=[];
7319return Object.keys(t).forEach(e=>{let i=t[e];if("texture"===i.type){let t=r[e];if(t){if("texture"===i.kind)n[n.length]=[e,t.ref.value];else{let r=a.texture(i.kind,i.format,i.dataType,i.filter);r.load(t.ref.value),n[n.length]=[e,r]}}}}),n}function S(e,t,r){let n=new Image;n.onload=function(){r.load(n),a.IO.update(t,r)},n.src=e}function T(e,t,r,a){let n=e.TEXTURE_CUBE_MAP,i=e.LINEAR,l=e.RGBA,c=e.RGBA,p=e.UNSIGNED_BYTE,f=0,m=e.createTexture();function h(t,o,s,u){0===f&&(f=s.width),e.bindTexture(n,m),e.texImage2D(t,o,l,f,f,0,c,p,null),e.pixelStorei(e.UNPACK_ALIGNMENT,4),e.pixelStorei(e.UNPACK_COLORSPACE_CONVERSION_WEBGL,e.NONE),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,0),e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,!1),e.bindTexture(n,m),e.texImage2D(t,o,l,c,p,s),6!==(y+=1)||(x||(r?(e.texParameteri(n,e.TEXTURE_MIN_FILTER,e.LINEAR_MIPMAP_LINEAR),e.generateMipmap(n)):e.texParameteri(n,e.TEXTURE_MIN_FILTER,i),e.texParameteri(n,e.TEXTURE_MAG_FILTER,i)),u||null==a||a(x))}e.bindTexture(n,m);let g=[],y=0;(0,s.mt)(t,(t,r)=>{if(!t)return;let n=function(e,t){switch(t){case"nx":return e.TEXTURE_CUBE_MAP_NEGATIVE_X;case"ny":return e.TEXTURE_CUBE_MAP_NEGATIVE_Y;case"nz":return e.TEXTURE_CUBE_MAP_NEGATIVE_Z;case"px":return e.TEXTURE_CUBE_MAP_POSITIVE_X;case"py":return e.TEXTURE_CUBE_MAP_POSITIVE_Y;case"pz":return e.TEXTURE_CUBE_MAP_POSITIVE_Z}}(e,r),i=new Image;t instanceof File?i.src=URL.createObjectURL(t):(0,o.y8)(t)?t.then(e=>{i.src=URL.createObjectURL(e)}):i.src=t,g.push({cubeTarget:n,level:0,image:i}),i.addEventListener("load",()=>{h(n,0,i,!1)}),i.addEventListener("error",()=>{null==a||a(!0)})});let x=!1;return{id:u(),target:n,format:c,internalFormat:l,type:p,filter:i,getWidth:()=>f,getHeight:()=>f,getDepth:()=>0,getByteCount:()=>{var e,t,a,n;return 6*(e="rgba",t="ubyte",a=f,n=f,d(e,t)*a*n*1)*(r?2:1)},define:()=>{},load:()=>{},mipmap:()=>{},bind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(n,m)},unbind:t=>{e.activeTexture(e.TEXTURE0+t),e.bindTexture(n,null)},attachFramebuffer:()=>{},detachFramebuffer:()=>{},reset:()=>{for(let{cubeTarget:t,level:r,image:a}of(m=b(e),e.bindTexture(n,m),y=0,g))h(t,r,a,!0)},destroy:()=>{x||(e.deleteTexture(m),x=!0)}}}function C(e){return -1===e.format}function O(e){var t;let r=null!==(t=null==e?void 0:e.TEXTURE_2D)&&void 0!==t?t:3553;return{id:u(),target:r,format:-1,internalFormat:0,type:0,filter:0,getWidth:()=>0,getHeight:()=>0,getDepth:()=>0,getByteCount:()=>0,define:()=>{},load:()=>{},mipmap:()=>{},bind:t=>{e&&(e.activeTexture(e.TEXTURE0+t),e.bindTexture(r,null))},unbind:t=>{e&&(e.activeTexture(e.TEXTURE0+t),e.bindTexture(r,null))},attachFramebuffer:()=>{throw Error("cannot attach null-texture to a framebuffer")},detachFramebuffer:()=>{throw Error("cannot detach null-texture from a framebuffer")},reset:()=>{},destroy:()=>{}}}},44712:function(e,t,r){r.d(t,{e:function(){return i},y:function(){return function e(t){t.map(t=>{let r=function(e){let t=`${(e.gpuElapsed/1e3/1e3).toFixed(2)}`,r=`${(e.gpuAvg/1e3/1e3).toFixed(2)}`,a=`${e.cpuElapsed.toFixed(2)}`,n=`${e.cpuAvg.toFixed(2)}`;return`${e.label} ${t} ms (avg. ${r} ms) | CPU: ${a} ms (avg. ${n} ms)`}(t);t.children.length||t.calls||t.note?(console.groupCollapsed(r),t.calls&&console.log(t.calls),t.note&&console.log(t.note),e(t.children),console.groupEnd()):console.log(r)})}}});var a=r(58400);class n{add(e,t){var r,a;let n=this.avgs.get(e)||t;return r=n,a=this.count,r-=r/a,n=r+=t/a,this.avgs.set(e,n),n}get(e){return this.avgs.get(e)}stats(){return Object.fromEntries(this.avgs.entries())}clear(){this.avgs.clear()}constructor(e){this.count=e,this.avgs=new Map}}function i(e,t,r,i){var o;let s=t.disjointTimerQuery,l=null!==(o=null==i?void 0:i.avgCount)&&void 0!==o?o:30,u=new Map,c=new Map,d=[],p=new n(l),f=new n(l),m=[],h=null,g=!1,b=()=>{c.clear(),d.length=0,p.clear(),f.clear(),m=[],h=null,g=!1,s&&u.forEach((e,t)=>{s.deleteQuery(t)}),u.clear()},y=()=>{if(!s)return;let e=t.disjointTimerQuery?t.disjointTimerQuery.createQuery():null;e&&(s.beginQuery(s.TIME_ELAPSED,e),c.forEach((t,r)=>{t.queries.push(e)}),u.set(e,{refCount:c.size}),h=e)};return{resolve:()=>{let t=[];if(!s||!m.length||g)return t;u.forEach((t,r)=>{if(void 0!==t.timeElapsed)return;let a=s.getQueryParameter(r,s.QUERY_RESULT_AVAILABLE),n=e.getParameter(s.GPU_DISJOINT);if(a&&!n){let e=s.getQueryParameter(r,s.QUERY_RESULT);t.timeElapsed=e}(a||n)&&s.deleteQuery(r)});let r=[];for(let e of m)if(e.queries.every(e=>{var t;
7319return(null===(t=u.get(e))||void 0===t?void 0:t.timeElapsed)!==void 0})){let r=0;for(let t of e.queries){let e=u.get(t);r+=e.timeElapsed,e.refCount-=1}if(e.timeElapsed=r,e.root){let a=[],n=(e,t)=>{for(let r of e){let e=r.timeElapsed,a=r.cpu.end-r.cpu.start,i={label:r.label,gpuElapsed:e,gpuAvg:p.add(r.label,e),cpuElapsed:a,cpuAvg:f.add(r.label,a),children:[],calls:r.calls,note:r.note};t.push(i),n(r.children,i.children)}};n(e.children,a);let i=e.cpu.end-e.cpu.start;t.push({label:e.label,gpuElapsed:r,gpuAvg:p.add(e.label,r),cpuElapsed:i,cpuAvg:f.add(e.label,i),children:a,calls:e.calls,note:e.note})}}else r.push(e);return m=r,u.forEach((e,t)=>{0===e.refCount&&u.delete(t)}),t},mark:(e,t)=>{var n;if(!s)return;if(c.has(e))throw Error(`Timer mark for '${e}' already exists`);let i=null!==(n=null==t?void 0:t.captureStats)&&void 0!==n&&n;null!==h&&s.endQuery(s.TIME_ELAPSED);let o={label:e,queries:[],children:[],root:null===h,cpu:{start:(0,a.z)(),end:-1},captureStats:i};if((null==t?void 0:t.note)&&(o.note=t.note),c.set(e,o),d.length&&d[d.length-1].children.push(o),d.push(o),i){if(g)throw Error("Already capturing stats");r.calls.drawInstanced=0,r.calls.drawInstancedBase=0,r.calls.multiDrawInstancedBase=0,r.calls.counts=0,r.culled.lod=0,r.culled.frustum=0,r.culled.occlusion=0,g=!0}y()},markEnd:e=>{var t;if(!s)return;let n=c.get(e);if(!n)throw Error(`Timer mark for '${e}' does not exist`);if((null===(t=d.pop())||void 0===t?void 0:t.label)!==e)throw Error(`Timer mark for '${e}' has pending nested mark`);s.endQuery(s.TIME_ELAPSED),c.delete(e),n.cpu.end=(0,a.z)(),n.captureStats&&(n.calls={...r.calls},g=!1),m.push(n),c.size>0?y():h=null},stats:()=>({gpu:p.stats(),cpu:f.stats()}),formatedStats:()=>{let e={},t=p.stats(),r=f.stats();for(let a of Object.keys(t)){let n=`${(t[a]/1e3/1e3).toFixed(2)}`,i=`${r[a].toFixed(2)}`;e[a]=`${n} ms | CPU: ${i} ms`}return e},clear:b,destroy:()=>{b()}}}},25770:function(e,t,r){r.d(t,{Dh:function(){return o},Yn:function(){return i},ko:function(){return S},vZ:function(){return T}});var a=r(85764),n=r(67546);function i(e,t){switch(t){case"b":case"b[]":return e.BOOL;case"f":case"f[]":return e.FLOAT;case"i":case"i[]":return e.INT;case"v2":case"v2[]":return e.FLOAT_VEC2;case"v3":case"v3[]":return e.FLOAT_VEC3;case"v4":case"v4[]":case"q":case"q[]":return e.FLOAT_VEC4;case"iv2":case"iv2[]":return e.INT_VEC2;case"iv3":case"iv3[]":return e.INT_VEC3;case"iv4":case"iv4[]":return e.INT_VEC4;case"m3":case"m3[]":return e.FLOAT_MAT3;case"m4":case"m4[]":return e.FLOAT_MAT4;default:console.error(`unknown uniform kind '${t}'`)}}function o(e){return e.endsWith("[]")}function s(e,t,r){e.uniform1f(t,r)}function l(e,t,r){e.uniform1fv(t,r)}function u(e,t,r){e.uniform1i(t,r)}function c(e,t,r){e.uniform1iv(t,r)}function d(e,t,r){e.uniform2fv(t,r)}function p(e,t,r){e.uniform3fv(t,r)}function f(e,t,r){e.uniform4fv(t,r)}function m(e,t,r){e.uniform2iv(t,r)}function h(e,t,r){e.uniform3iv(t,r)}function g(e,t,r){e.uniform4iv(t,r)}function b(e,t,r){e.uniformMatrix3fv(t,!1,r)}function y(e,t,r){e.uniformMatrix4fv(t,!1,r)}function x(e){switch(e){case"f":return s;case"f[]":return l;case"i":case"t":case"b":return u;case"i[]":case"t[]":case"b[]":return c;case"v2":case"v2[]":return d;case"v3":case"v3[]":return p;case"v4":case"v4[]":case"q":case"q[]":return f;case"iv2":case"iv2[]":return m;case"iv3":case"iv3[]":return h;case"iv4":case"iv4[]":return g;case"m3":case"m3[]":return b;case"m4":case"m4[]":return y}}function S(e){let t={};return Object.keys(e).forEach(r=>{let a=e[r];"uniform"===a.type?t[r]=x(a.kind):"texture"===a.type&&(t[r]=x("t"))}),t}function T(e){let t={};return Object.keys(e).forEach(r=>{t[r]=a.IO.create((0,n.I8)(e[r].ref.value))}),t}},94284:function(e,t,r){r.d(t,{l:function(){return a}});var a,n=r(85764),i=r(27594);(a||(a={})).fromBuffer=function(e,t){return{name:t,readBuffer:(t,r,a,o)=>{let s,l;if("number"==typeof r){a=(0,n.ce)(a,r);let o=Math.min(e.length,t+a);s=o-t,l=i.z.fromUint8Array(new Uint8Array(e.buffer,t,o-t))}else{a=(0,n.ce)(a,r.length);let i=Math.min(e.length,t+a);r.set(e.subarray(t,i),o),s=i-t,l=r}return a!==s&&console.warn(`byteCount ${a} and bytesRead ${s} differ`),Promise.resolve({bytesRead:s,buffer:l})},writeBuffer:(e,t,r)=>(r=(0,n.ce)(r,t.length),console.error(".writeBuffer not implemented for FileHandle.fromBuffer"),Promise.resolve(0)),writeBufferSync:(e,t,r)=>(r=(0,n.ce)(r,t.length),console.error(".writeSync not implemented for FileHandle.fromBuffer"),0),close:n.ZT}}},27594:function(e,t,r){r.d(t,{z:function(){return a}});var a,n=r(85764);!function(e){function t(e){let t=new DataView(e.buffer);return Object.assign(e.subarray(0),{readInt8:e=>t.getInt8(e),readUInt8:e=>t.getUint8(e),writeInt8:(e,r)=>t.setInt8(r,e),writeUInt8:(e,r)=>t.setUint8(r,e),readInt16LE:e=>t.getInt16(e,!0),readInt32LE:e=>t.getInt32(e,!0),readUInt16LE:e=>t.getUint16(e,!0),readUInt32LE:e=>t.getUint32(e,!0),readFloatLE:e=>t.getFloat32(e,!0),readDoubleLE:e=>t.getFloat64(e,!0),writeInt16LE:(e,r)=>t.setInt16(r,e,!0),writeInt32LE:(e,r)=>t.setInt32(r,e,!0),writeUInt16LE:(e,r)=>t.setUint16(r,e,!0),writeUInt32LE:(e,r)=>t.setUint32(r,e,!0),writeFloatLE:(e,r)=>t.setFloat32(r,e,!0),writeDoubleLE:(e,r)=>t.setFloat64(r,e,!0),readInt16BE:e=>t.getInt16(e,!1),readInt32BE:e=>t.getInt32(e,!1),readUInt16BE:e=>t.getUint16(e,!1),readUInt32BE:e=>t.getUint32(e,!1),readFloatBE:e=>t.getFloat32(e,!1),readDoubleBE:e=>t.getFloat64(e,!1),writeInt16BE:(e,r)=>t.setInt16(r,e,!1),writeInt32BE:(e,r)=>t.setInt32(r,e,!1),writeUInt16BE:(e,r)=>t.setUint16(r,e,!1),writeUInt32BE:(e,r)=>t.setUint32(r,e,!1),writeFloatBE:(e,r)=>t.setFloat32(r,e,!1),writeDoubleBE:(e,r)=>t.setFloat64(r,e,!1),copy:(t,r,a,i)=>(r=(0,n.ce)(r,0),a=(0,n.ce)(a,0),i=(0,n.ce)(i,e.length),t.set(e.subarray(a,i),r),i-a)})}function r(e,t,r,a,n){for(let i=0;i<r;i+=a)for(let r=0;r<a;r++)t[n+i+a-r-1]=e[n+i+r]}e.fromUint8Array=t,e.fromArrayBuffer=function(e){return t(new Uint8Array(e))},e.fromBuffer=function(e){return e},e.IsNativeEndianLittle=13330===new Uint16Array(new Uint8Array([18,52]).buffer)[0],e.flipByteOrder=r,e.flipByteOrderInPlace2=function(e,t=0,r){let a=new Int16Array(e,t,r);for(let e=0,t=a.length;e<t;++e){let t=a[e];a[e]=(255&t)<<8|t>>8&255}},e.ensureLittleEndian=function(t,a,n,i,o){e.IsNativeEndianLittle||!n||i<=1||r(t,a,n,i,o)}}(a||(a={}))},35849:function(e,t,r){r.d(t,{$2:function(){return o},FS:function(){return s},SD:function(){return l},xT:function(){return n}});var a,n,i=r(27594);function o(e){return e===n.Float32?4:e===n.Int16||e===n.Uint16?2:1}function s(e,t){let r=o(t),a=new ArrayBuffer(r*e),s=i.z.fromArrayBuffer(a),l=i.z.IsNativeEndianLittle?a:new ArrayBuffer(r*e);return{type:t,elementByteSize:r,readBuffer:s,valuesBuffer:new Uint8Array(l),values:function(e,t,r=0,a){return e===n.Float32?new Float32Array(t,r,void 0):e===n.Int16?new Int16Array(t,r,void 0):e===n.Uint16?new Uint16Array(t,r,void 0):new Int8Array(t,r,a)}(t,l)}}async function l(e,t,r,a,n,o){return await t.readBuffer(r,e.readBuffer,a,n),e.elementByteSize>1&&(void 0!==o&&o!==i.z.IsNativeEndianLittle||!i.z.IsNativeEndianLittle)&&i.z.flip
7319ByteOrder(e.readBuffer,e.valuesBuffer,a,e.elementByteSize,n),e.values}(a=n||(n={})).Float32="float32",a.Int8="int8",a.Int16="int16",a.Uint16="uint16"},37461:function(e,t,r){r.d(t,{Qc:function(){return m},hc:function(){return p}});var a=r(54854),n=r(7600),i=r(94284),o=r(27594),s=r(35849);async function l(e){let{buffer:t}=await e.readBuffer(0,1024),r=String.fromCharCode(t.readUInt8(208),t.readUInt8(209),t.readUInt8(210),t.readUInt8(211));if("MAP "!==r)throw Error('ccp4 format error, missing "MAP " string');let a=[t.readUInt8(212),t.readUInt8(213)],n=!1;68===a[0]&&65===a[1]?n=!0:17===a[0]&&17===a[1]?n=!1:16>=t.readInt32LE(12)&&(n=!0);let i=n?e=>t.readInt32LE(4*e):e=>t.readInt32BE(4*e),o=n?e=>t.readFloatLE(4*e):e=>t.readFloatBE(4*e);return{header:{NC:i(0),NR:i(1),NS:i(2),MODE:i(3),NCSTART:i(4),NRSTART:i(5),NSSTART:i(6),NX:i(7),NY:i(8),NZ:i(9),xLength:o(10),yLength:o(11),zLength:o(12),alpha:o(13),beta:o(14),gamma:o(15),MAPC:i(16),MAPR:i(17),MAPS:i(18),AMIN:o(19),AMAX:o(20),AMEAN:o(21),ISPG:i(22),NSYMBT:i(23),LSKFLG:i(24),SKWMAT:[],SKWTRN:[],userFlag1:i(39),userFlag2:i(40),originX:o(49),originY:o(50),originZ:o(51),MAP:r,MACHST:a,ARMS:o(54)},littleEndian:n}}async function u(e,t,r,a,n,i){if(d(e)){let i=3*n;await r.readBuffer(a,t.readBuffer,n,i);let o=new Int8Array(t.valuesBuffer.buffer,i),s=(e.AMAX-e.AMIN)/255,l=.5*(e.AMIN+e.AMAX+s);for(let e=0;e<n;++e)t.values[e]=s*o[e]+l}else await (0,s.SD)(t,r,a,n,0,i)}function c(e){switch(e){case 0:return s.xT.Int8;case 1:return s.xT.Int16;case 2:return s.xT.Float32;case 3:throw Error("mode 3 unsupported, complex 16-bit integers");case 4:throw Error("mode 4 unsupported, complex 32-bit reals");case 6:s.xT.Uint16;case 16:throw Error("mode 16 unsupported, unsigned char * 3 (for rgb data, non-standard)")}throw Error(`unknown mode '${e}'`)}function d(e){return -128===e.userFlag1&&127===e.userFlag2}function p(e){return d(e)?s.xT.Float32:c(e.MODE)}async function f(e,t,r){await r.update({message:"Parsing CCP4/MRC/MAP file..."});let{header:a,littleEndian:n}=await l(e),i=1024+a.NSYMBT,o=c(a.MODE),d=p(a),f=a.NC*a.NR*a.NS,m=f*(0,s.$2)(o),h=(0,s.FS)(f,d);return u(a,h,e,i,m,n),{header:a,values:h.values,name:e.name}}function m(e,t){var r,s;return r=i.l.fromBuffer(o.z.fromUint8Array(e),t),s=e.length,a.iQ.create("Parse CCP4/MRC/MAP",async e=>{try{return n.X.success(await f(r,s,e))}catch(e){return n.X.error(e)}})}},49309:function(e,t,r){r.d(t,{Fz:function(){return p},i_:function(){return s}});let a=new ArrayBuffer(4);new Int32Array(a),new Float32Array(a);let n=new ArrayBuffer(4),i=new Int32Array(n),o=new Float32Array(n);function s(e){var t;return t=1.44269504*e,i[0]=8388608*((t<-126?-126:t)+126.94269504),o[0]}let l=new ArrayBuffer(8);new Int32Array(l),new Float32Array(l);let u=new ArrayBuffer(4),c=new Int32Array(u),d=new Float32Array(u);function p(e){return d[0]=e,11920928955078125e-23*c[0]-126.94269504}let f=new ArrayBuffer(16);new Int32Array(f),new Float32Array(f);let m=new ArrayBuffer(8);new Int32Array(m),new Float32Array(m);let h=new ArrayBuffer(4);new Int32Array(h),new Float32Array(h)},99592:function(e,t,r){r.d(t,{u:function(){return i}});var a=r(43975),n=r(2941);function i(){return i.create((0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)(),(0,n.H)())}!function(e){var t;function r(e,t){for(let r=0;r<6;++r)n.H.copy(e[r],t[r]);return e}(t=e.PlaneIndex||(e.PlaneIndex={}))[t.Right=0]="Right",t[t.Left=1]="Left",t[t.Bottom=2]="Bottom",t[t.Top=3]="Top",t[t.Far=4]="Far",t[t.Near=5]="Near",e.create=function(e,t,r,a,n,i){return[e,t,r,a,n,i]},e.copy=r,e.clone=function(t){return r(e(),t)},e.fromProjectionMatrix=function(e,t){let r=t[0],a=t[1],i=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],d=t[8],p=t[9],f=t[10],m=t[11],h=t[12],g=t[13],b=t[14],y=t[15];return n.H.setUnnormalized(e[0],o-r,c-s,m-d,y-h),n.H.setUnnormalized(e[1],o+r,c+s,m+d,y+h),n.H.setUnnormalized(e[2],o+a,c+l,m+p,y+g),n.H.setUnnormalized(e[3],o-a,c-l,m-p,y-g),n.H.setUnnormalized(e[4],o-i,c-u,m-f,y-b),n.H.setUnnormalized(e[5],o+i,c+u,m+f,y+b),e},e.intersectsSphere3D=function(e,t){let r=t.center,a=-t.radius;for(let t=0;t<6;++t)if(n.H.distanceToPoint(e[t],r)<a)return!1;return!0};let i=(0,a.A)();e.intersectsBox3D=function(e,t){for(let r=0;r<6;++r){let a=e[r];if(i[0]=a.normal[0]>0?t.max[0]:t.min[0],i[1]=a.normal[1]>0?t.max[1]:t.min[1],i[2]=a.normal[2]>0?t.max[2]:t.min[2],0>n.H.distanceToPoint(a,i))return!1}return!0},e.containsPoint=function(e,t){for(let r=0;r<6;++r)if(0>n.H.distanceToPoint(e[r],t))return!1;return!0}}(i||(i={}))},2941:function(e,t,r){r.d(t,{H:function(){return n}});var a=r(43975);function n(){return n.create(a.A.create(1,0,0),0)}!function(e){function t(e,t){return a.A.copy(e.normal,t.normal),e.constant=t.constant,e}function r(e,t,r){return a.A.copy(e.normal,t),e.constant=-a.A.dot(e.normal,r),e}e.create=function(e,t){return{normal:e,constant:t}},e.copy=t,e.clone=function(r){return t(e(),r)},e.normalize=function(e,t){let r=1/a.A.magnitude(t.normal);return a.A.scale(e.normal,t.normal,r),e.constant=t.constant*r,e},e.negate=function(e,t){return a.A.negate(e.normal,t.normal),e.constant=-t.constant,e},e.toArray=function(e,t,r){return a.A.toArray(e.normal,t,r),t[r+3]=e.constant,t},e.fromArray=function(e,t,r){return a.A.fromArray(e.normal,t,r),e.constant=t[r+3],e},e.fromNormalAndCoplanarPoint=r,e.fromCoplanarPoints=function(e,t,n,i){return r(e,a.A.triangleNormal((0,a.A)(),t,n,i),t),e};let n=(0,a.A)();function i(e,t){return a.A.dot(e.normal,t)+e.constant}e.setUnnormalized=function(e,t,r,i,o){a.A.set(n,t,r,i);let s=1/a.A.magnitude(n);return a.A.scale(e.normal,n,s),e.constant=o*s,e},e.distanceToPoint=i,e.distanceToSphere3D=function(e,t){return i(e,t.center)-t.radius},e.projectPoint=function(e,t,r){return a.A.scaleAndAdd(e,r,t.normal,-i(t,r))},e.intersectRay3D=function(e,t,r){let n=a.A.dot(t.normal,r.direction);if(0===n)return!1;let i=-(a.A.dot(t.normal,r.origin)+t.constant)/n;return!(i<0)&&(a.A.scaleAndAdd(e,r.origin,r.direction,i),!0)}}(n||(n={}))},27994:function(e,t,r){r.d(t,{o:function(){return n}});var a,n,i=r(31348);(a=n||(n={})).Descriptor={name:"atom_partial_charge"},a.Provider=i.n.create(a.Descriptor)},67370:function(e,t,r){r.d(t,{g:function(){return n},j:function(){return u}});var a,n,i=r(87144),o=r(54854),s=r(36111),l=r(67646);function u(e,t){return o.iQ.create("Create Volume",async()=>{let r;let{header:a,values:o}=e,u=i.es.Space(a.dim,[0,1,2],Float64Array);if(0===a.dataSetIds.length)r=o;else{let[e,n,i]=a.dim,s=((null==t?void 0:t.dataIndex)||0)+1,l=0,u=0;r=new Float64Array(e*n*i);for(let t=0;t<e;t++)for(let e=0;e<n;e++)for(let e=0;e<i;e++)r[l++]=o[u],u+=s}let c=i.es.create(u,i.es.Data1(r)),d=i.yb.fromTranslation((0,i.yb)(),a.origin),p=i.yb.fromBasis((0,i.yb)(),a.basisX,a.basisY,a.basisZ);return i.yb.mul(d,d,p),{label:null==t?void 0:t.label,entryId:null==t?void 0:t.entryId,grid:{transform:{kind:"matrix",matrix:d},cells:c,stats:{min:(0,s.GI)(r),max:(0,s.uH)(r),mean:(0,s.p7)(r),sigma:(0,s.Ud)(r)}},instances:[{transform:i.yb.identity()}],sourceData:n.create(e),customProperties:new l.S,_propertyData:Object.create(null)}})}(a=n||(n={})).is=function(e){return(null==e?void 0:e.kind)==="cube"},a.create=function(e){return{kind:"cube",name:e.name,data:e}}},23643:function(e,t,r){r.d(t,{I:function(){return n},N:function(){return u}});var a,n,i=r(54854),o=r(48930),s=r(87144),l=r(67646);function u(e,t){return i.iQ.create("Create Volume",async r=>{let{volume_data_3d_info:a,volume_data_3d:i}=e,u=o.EO.create(a.spacegroup_number.value(0)||"P 1",s.AO.ofArray(a.spacegroup_cell_size.value(0)),s.AO.scale(s.AO.zero(),s.AO.ofArray(a.spacegroup_cell_angles.value(0)),Math.PI/180)
7319),c=a.axis_order.value(0),d=s.es.convertToCanonicalAxisIndicesFastToSlow(c),p=d(a.sample_count.value(0)),f=s.es.Space(p,s.es.invertAxisOrder(c),Float32Array),m=s.es.create(f,s.es.Data1(i.values.toArray({array:Float32Array}))),h=s.AO.ofArray(d(a.origin.value(0))),g=s.AO.ofArray(d(a.dimensions.value(0)));return{label:null==t?void 0:t.label,entryId:null==t?void 0:t.entryId,periodicity:s.AO.isInteger(g)?"xyz":"none",grid:{transform:{kind:"spacegroup",cell:u,fractionalBox:o.XZ.create(h,s.AO.add(s.AO.zero(),h,g))},cells:m,stats:{min:a.min_sampled.value(0),max:a.max_sampled.value(0),mean:a.mean_sampled.value(0),sigma:a.sigma_sampled.value(0)}},instances:[{transform:s.yb.identity()}],sourceData:n.create(e),customProperties:new l.S,_propertyData:Object.create(null)}})}(a=n||(n={})).is=function(e){return(null==e?void 0:e.kind)==="dscif"},a.create=function(e){return{kind:"dscif",name:e._name,data:e}}},24407:function(e,t,r){r.d(t,{DN:function(){return f},Eq:function(){return u},L$:function(){return i},Qh:function(){return c},VF:function(){return d},um:function(){return s},vd:function(){return l},wp:function(){return o}});var a=r(34985);r(91044);var n=r(84942);function i(e,t,r){return(0,n.TZ)(t,r)===a.eK.N&&4===(0,n.ui)(e,t,r)&&0===(0,n.ls)(e,t,r,a.eK.H)}function o(e,t,r){return(0,n.TZ)(t,r)===a.eK.S&&3===(0,n.ls)(e,t,r,a.eK.O)}function s(e,t,r){return(0,n.TZ)(t,r)===a.eK.S&&4===(0,n.ls)(e,t,r,a.eK.O)}function l(e,t,r){return(0,n.TZ)(t,r)===a.eK.P&&(0,n.ls)(e,t,r,a.eK.O)===(0,n.ui)(e,t,r)}function u(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&2===(0,n.ls)(e,t,r,a.eK.O)&&1===(0,n.ls)(e,t,r,a.eK.C)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.TZ)(t,r)===a.eK.O&&(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}function c(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&3===(0,n.ui)(e,t,r)&&3===(0,n.ls)(e,t,r,a.eK.N)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}function d(e,t,r){let i=0;return(0,n.TZ)(t,r)===a.eK.C&&3===(0,n.ui)(e,t,r)&&2===(0,n.ls)(e,t,r,a.eK.N)&&1===(0,n.ls)(e,t,r,a.eK.C)&&(0,n.KM)(e,t,r,(t,r)=>{(0,n.ui)(e,t,r)-(0,n.ls)(e,t,r,a.eK.H)==1&&(i+=1)}),2===i}let p=new Set(["N","O","S","F","CL","BR","I"]);function f(e,t,r){let a=!1;return(0,n.KM)(e,t,r,(e,t)=>{var r;r=(0,n.TZ)(e,t),p.has(r)&&(a=!0)}),a}},14507:function(e,t,r){r.d(t,{BC:function(){return b},K8:function(){return d},Qq:function(){return n},VD:function(){return y},Yz:function(){return c},cP:function(){return u},xv:function(){return x}});var a,n,i=r(58463),o=r(87144),s=r(84942),l=r(34985);function u(e){switch(e){case n.Spherical:return"Spherical";case n.Terminal:return"Terminal";case n.Linear:return"Linear";case n.Trigonal:return"Trigonal";case n.Tetrahedral:return"Tetrahedral";case n.TrigonalBiPyramidal:return"Trigonal Bi-Pyramidal";case n.Octahedral:return"Octahedral";case n.SquarePlanar:return"Square Planar";case n.Unknown:return"Unknown"}}function c(e){switch(e){case 0:return n.Spherical;case 1:return n.Terminal;case 2:return n.Linear;case 3:return n.Trigonal;case 4:return n.Tetrahedral;default:return n.Unknown}}(a=n||(n={}))[a.Spherical=0]="Spherical",a[a.Terminal=1]="Terminal",a[a.Linear=2]="Linear",a[a.Trigonal=3]="Trigonal",a[a.Tetrahedral=4]="Tetrahedral",a[a.TrigonalBiPyramidal=5]="TrigonalBiPyramidal",a[a.Octahedral=6]="Octahedral",a[a.SquarePlanar=7]="SquarePlanar",a[a.Unknown=8]="Unknown";let d=new Map([[n.Linear,(0,i.Id)(180)],[n.Trigonal,(0,i.Id)(120)],[n.Tetrahedral,(0,i.Id)(109.4721)],[n.Octahedral,(0,i.Id)(90)]]),p=(0,o.AO)(),f=(0,o.AO)(),m=(0,o.AO)(),h=(0,o.AO)(),g=(0,o.AO)();function b(e,t,r,a,n,i=!0){let u=[],c=[];return t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m),(0,s.KM)(e,t,r,(e,t)=>{(0,s.TZ)(e,t)!==l.eK.H?(e.conformation.position(e.elements[t],g),o.AO.sub(f,g,m),u.push(o.AO.angle(p,f))):i||(e.conformation.position(e.elements[t],g),o.AO.sub(f,g,m),c.push(o.AO.angle(p,f)))}),[u,c]}function y(e,t,r,a,n){let i,u;t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m);let c=[(0,o.AO)(),(0,o.AO)()],d=0;if((0,s.KM)(e,t,r,(e,t)=>{d>
73191||(0,s.TZ)(e,t)===l.eK.H||(i=e,u=t,e.conformation.position(e.elements[t],g),o.AO.sub(c[d++],g,m))}),1===d&&i&&u&&(0,s.KM)(e,i,u,(e,a)=>{d>1||e===t&&a===r||(0,s.TZ)(e,a)===l.eK.H||(e.conformation.position(e.elements[a],g),o.AO.sub(c[d++],g,m))}),2===d)return o.AO.cross(f,c[0],c[1]),Math.abs(Math.PI/2-o.AO.angle(f,p))}function x(e,t,r,a,n){let i=r;t.conformation.position(t.elements[r],m),a.conformation.position(a.elements[n],h),o.AO.sub(p,h,m);let u=o.AO.squaredDistance(m,h);return(0,s.KM)(e,t,r,(e,t)=>{if((0,s.TZ)(e,t)===l.eK.H){e.conformation.position(e.elements[t],g);let r=o.AO.squaredDistance(g,h);r<u&&(u=r,i=t)}}),i}},84942:function(e,t,r){r.d(t,{E3:function(){return i},Fp:function(){return d},Il:function(){return s},KM:function(){return f},NT:function(){return l},TZ:function(){return n},ls:function(){return c},rY:function(){return p},rt:function(){return o},ui:function(){return u}});var a=r(91044);function n(e,t){return e.model.atomicHierarchy.atoms.type_symbol.value(e.elements[t])}function i(e,t){return e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(e.elements[t])}function o(e,t){return e.model.atomicHierarchy.atoms.label_atom_id.value(e.elements[t])}function s(e,t){return e.model.atomicHierarchy.atoms.label_alt_id.value(e.elements[t])}function l(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(e.elements[t])}function u(e,t,r){return function(e,t,r){let n=0,i=e.interUnitBonds.getEdgeIndices(r,t.id);for(let t=0,r=i.length;t<r;++t){let r=e.interUnitBonds.edges[i[t]];a.BondType.isCovalent(r.props.flag)&&(n+=1)}return n}(e,t,r)+function(e,t){let r=0,{offset:n,edgeProps:{flags:i}}=e.bonds;for(let e=n[t],o=n[t+1];e<o;++e)a.BondType.isCovalent(i[e])&&(r+=1);return r}(t,r)}function c(e,t,r,a){let i=0;return f(e,t,r,(e,t)=>{n(e,t)===a&&(i+=1)}),i}function d(e,t,r,n,i){return t===n?function(e,t,r){let{offset:n,b:i,edgeProps:{flags:o}}=e.bonds;a.BondType.is;for(let e=n[t],s=n[t+1];e<s;++e)if(i[e]===r&&a.BondType.isCovalent(o[e]))return!0;return!1}(t,r,i):function(e,t,r,n,i){let o=e.interUnitBonds.getEdge(r,t.id,i,n.id);return o&&a.BondType.isCovalent(o.props.flag)}(e,t,r,n,i)}function p(e,t,r){let{offset:n,b:i,edgeProps:{flags:o}}=e.bonds;for(let s=n[t],l=n[t+1];s<l;++s)a.BondType.isCovalent(o[s])&&r(e,i[s])}function f(e,t,r,n){!function(e,t,r,n){let i=e.interUnitBonds.getEdgeIndices(r,t.id);for(let t=0,r=i.length;t<r;++t){let r=e.interUnitBonds.edges[i[t]],o=e.unitMap.get(r.unitB);a.BondType.isCovalent(r.props.flag)&&n(o,r.indexB)}}(e,t,r,n),p(t,r,n)}r(34526)},21300:function(e,t,r){r.d(t,{D:function(){return l}});var a=r(14086),n=r(48984),i=r(20292),o=r(67646);let s={...n.P_},l=i.b.createProvider({label:"Interactions",descriptor:(0,o.d)({name:"molstar_computed_interactions"}),type:"local",defaultParams:s,getParams:e=>s,isApplicable:e=>!e.isCoarseGrained,obtain:async(e,t,r)=>{let i={...a.e.getDefaultValues(s),...r};return{value:await (0,n.uO)(e,t,i)}}})},65410:function(e,t,r){r.d(t,{$v:function(){return f},Bs:function(){return u},Te:function(){return d},Xx:function(){return y},bD:function(){return b},kf:function(){return h},s_:function(){return c},xz:function(){return g},yH:function(){return l}});var a,n,i,o,s,l,u,c,d,p,f,m=r(53288);(l||(l={})).createElementsIndex=function(e,t,r){let a=new Int32Array(r+1),n=new Int32Array(r),i=new Int32Array(r),{members:o,offsets:s}=t;for(let t=0,r=2*e.edgeCount;t<r;++t){let r=e.a[t],a=e.b[t];if(!(r>a)){for(let e=s[r],t=s[r+1];e<t;++e)++i[o[e]];for(let e=s[a],t=s[a+1];e<t;++e)++i[o[e]]}}let l=0;for(let e=0;e<r;e++)a[e]=l,l+=i[e];a[r]=l;let u=new Int32Array(l);for(let t=0,r=2*e.edgeCount;t<r;++t){let r=e.a[t],i=e.b[t];if(!(r>i)){for(let e=s[r],i=s[r+1];e<i;++e){let r=o[e];u[a[r]+n[r]]=t,++n[r]}for(let e=s[i],r=s[i+1];e<r;++e){let r=o[e];u[a[r]+n[r]]=t,++n[r]}}}return{indices:u,offsets:a}};class h extends m.G{getContactIndicesForElement(e,t){return this.elementKeyIndex.get(this.getElementKey(e,t.id))||[]}getElementKey(e,t){return`${e}|${t}`}constructor(e,t){super(e),this.elementKeyIndex=new Map;for(let e=0,r=this.edges.length;e<r;++e){let{unitA:r,indexA:a}=this.edges[e],{offsets:n,members:i}=t.get(r);for(let t=n[a],o=n[a+1];t<o;
7319++t){let a=this.getElementKey(i[t],r),n=this.elementKeyIndex.get(a);void 0===n?this.elementKeyIndex.set(a,[e]):n.push(e)}}}}function g(e){switch(e){case c.HydrogenBond:return"Hydrogen Bond";case c.Hydrophobic:return"Hydrophobic Contact";case c.HalogenBond:return"Halogen Bond";case c.Ionic:return"Ionic Interaction";case c.MetalCoordination:return"Metal Coordination";case c.CationPi:return"Cation-Pi Interaction";case c.PiStacking:return"Pi Stacking";case c.WeakHydrogenBond:return"Weak Hydrogen Bond";case c.Unknown:return"Unknown Interaction"}}function b(e){switch(e){case d.None:return"None";case d.PositiveCharge:return"Positive Charge";case d.NegativeCharge:return"Negative Charge";case d.AromaticRing:return"Aromatic Ring";case d.HydrogenDonor:return"Hydrogen Donor";case d.HydrogenAcceptor:return"Hydrogen Acceptor";case d.HalogenDonor:return"Halogen Donor";case d.HalogenAcceptor:return"Halogen Acceptor";case d.HydrophobicAtom:return"HydrophobicAtom";case d.WeakHydrogenDonor:return"Weak Hydrogen Donor";case d.IonicTypePartner:return"Ionic Type Partner";case d.DativeBondPartner:return"Dative Bond Partner";case d.TransitionMetal:return"Transition Metal";case d.IonicTypeMetal:return"Ionic Type Metal"}}function y(e){switch(e){case f.None:return"None";case f.QuaternaryAmine:return"Quaternary Amine";case f.TertiaryAmine:return"Tertiary Amine";case f.Sulfonium:return"Sulfonium";case f.SulfonicAcid:return"Sulfonic Acid";case f.Sulfate:return"Sulfate";case f.Phosphate:return"Phosphate";case f.Halocarbon:return"Halocarbon";case f.Guanidine:return"Guanidine";case f.Acetamidine:return"Acetamidine";case f.Carboxylate:return"Carboxylate"}}(a=u||(u={}))[a.None=0]="None",a[a.Filtered=1]="Filtered",(n=c||(c={}))[n.Unknown=0]="Unknown",n[n.Ionic=1]="Ionic",n[n.CationPi=2]="CationPi",n[n.PiStacking=3]="PiStacking",n[n.HydrogenBond=4]="HydrogenBond",n[n.HalogenBond=5]="HalogenBond",n[n.Hydrophobic=6]="Hydrophobic",n[n.MetalCoordination=7]="MetalCoordination",n[n.WeakHydrogenBond=8]="WeakHydrogenBond",(i=d||(d={}))[i.None=0]="None",i[i.PositiveCharge=1]="PositiveCharge",i[i.NegativeCharge=2]="NegativeCharge",i[i.AromaticRing=3]="AromaticRing",i[i.HydrogenDonor=4]="HydrogenDonor",i[i.HydrogenAcceptor=5]="HydrogenAcceptor",i[i.HalogenDonor=6]="HalogenDonor",i[i.HalogenAcceptor=7]="HalogenAcceptor",i[i.HydrophobicAtom=8]="HydrophobicAtom",i[i.WeakHydrogenDonor=9]="WeakHydrogenDonor",i[i.IonicTypePartner=10]="IonicTypePartner",i[i.DativeBondPartner=11]="DativeBondPartner",i[i.TransitionMetal=12]="TransitionMetal",i[i.IonicTypeMetal=13]="IonicTypeMetal",(o=p||(p={}))[o.None=0]="None",o[o.PositiveCharge=1]="PositiveCharge",o[o.NegativeCharge=2]="NegativeCharge",o[o.AromaticRing=3]="AromaticRing",o[o.HydrogenDonor=4]="HydrogenDonor",o[o.HydrogenAcceptor=5]="HydrogenAcceptor",o[o.HalogenDonor=6]="HalogenDonor",o[o.HalogenAcceptor=7]="HalogenAcceptor",o[o.HydrophobicAtom=8]="HydrophobicAtom",o[o.WeakHydrogenDonor=9]="WeakHydrogenDonor",o[o.IonicTypePartner=10]="IonicTypePartner",o[o.DativeBondPartner=11]="DativeBondPartner",o[o.TransitionMetal=12]="TransitionMetal",o[o.IonicTypeMetal=13]="IonicTypeMetal",(s=f||(f={}))[s.None=0]="None",s[s.QuaternaryAmine=1]="QuaternaryAmine",s[s.TertiaryAmine=2]="TertiaryAmine",s[s.Sulfonium=3]="Sulfonium",s[s.SulfonicAcid=4]="SulfonicAcid",s[s.Sulfate=5]="Sulfate",s[s.Phosphate=6]="Phosphate",s[s.Halocarbon=7]="Halocarbon",s[s.Guanidine=8]="Guanidine",s[s.Acetamidine=9]="Acetamidine",s[s.Carboxylate=10]="Carboxylate"},48984:function(e,t,r){r.d(t,{yd:function(){return s},P_:function(){return eq},uO:function(){return eX}});var a,n,i,o,s,l=r(14086),u=r(30502),c=r(69062),d=r(48930),p=r(34526),f=r(6017),m=r(87144),h=r(89615);!function(e){function t(e,t){let r=new Int32Array(t+1),a=new Int32Array(t),n=new Int32Array(t),{members:i,count:o,offsets:s}=e;for(let e=0,t=s[o];e<t;++e)++n[i[e]];let l=0;for(let e=0;e<t;e++)r[e]=l,l+=n[e];r[t]=l;let u=new Int32Array(l);for(let e=0;e<o;++e)for(let t=s[e],n=s[e+1];t<n;++t){let n=i[t];u[r[n]+a[n]]=e,++a[n]}return{indices:u,offsets:r}}function r(e,t){let r;let{count:a,types:n}=e,i=[];for(let e=0;e<a;++e)t.has(n[e])&&i.push(e);let o=p.SortedArray.ofSortedArray(i);return{indices:o,get lookup3d(){if(!r){let t={x:e.x,y:e.y,z:e.z,indices:o};r=(0,d.tN)(t,(0,h.z)(t))}return r}}}e.setPosition=function(e,t,r,a){return m.AO.set(e,a.x[r],a.y[r],a.z[r]),m.AO.transformMat4(e,e,t.conformation.operator.matrix),e},e.createElementsIndex=t,e.create=function(e,a){let n,i;return{...a,get lookup3d(){if(!n){let e={x:a.x,y:a.y,z:a.z,indices:p.hU.ofBounds(0,a.count)};n=(0,d.tN)(e,(0,h.z)(e))}return n}
7319,get elementsIndex(){return i||(i=t(a,e))},subset:e=>r(a,e)}},e.createSubset=r,e.Info=function(e,t,r){let a=f.g.get(e).value;if(!a||!a.has(t.id))throw Error("valence model required");return{unit:t,types:r.types,feature:-1,x:r.x,y:r.y,z:r.z,members:r.members,offsets:r.offsets,idealGeometry:a.get(t.id).idealGeometry}},e.position=function(e,t){return m.AO.set(e,t.x[t.feature],t.y[t.feature],t.z[t.feature]),m.AO.transformMat4(e,e,t.unit.conformation.operator.matrix),e};let a=(0,m.AO)(),n=(0,m.AO)();e.distance=function(e,t){let r=e.members[e.offsets[e.feature]],i=t.members[t.offsets[t.feature]];return e.unit.conformation.position(e.unit.elements[r],a),t.unit.conformation.position(t.unit.elements[i],n),m.AO.distance(a,n)},e.Provider=function(e,t){return{types:new Set(e),add:t}}}(a||(a={})),(n||(n={})).create=function(e=2048,t=1024,r){let n=c.pS.create(Float32Array,1,t,r?r.x:e),i=c.pS.create(Float32Array,1,t,r?r.y:e),o=c.pS.create(Float32Array,1,t,r?r.z:e),s=c.pS.create(Uint8Array,1,t,r?r.types:e),l=c.pS.create(Uint8Array,1,t,r?r.groups:e),u=c.pS.create(Uint32Array,1,t,r?r.offsets:e),d=c.pS.create(Uint32Array,1,t,r?r.members:e),p={x:0,y:0,z:0,offset:0,count:0};return{startState:()=>{p.x=0,p.y=0,p.z=0,p.offset=d.elementCount,p.count=0},pushMember:(e,t,r,a)=>{c.pS.add(d,a),p.x+=e,p.y+=t,p.z+=r,p.count+=1},markMember:e=>{c.pS.add(d,e)},finishState:(e,t)=>{let{count:r}=p;0!==r&&(c.pS.add(s,e),c.pS.add(l,t),c.pS.add(n,p.x/r),c.pS.add(i,p.y/r),c.pS.add(o,p.z/r),c.pS.add(u,p.offset))},add:(e,t,r,a,p,f)=>{c.pS.add(s,e),c.pS.add(l,t),c.pS.add(n,r),c.pS.add(i,a),c.pS.add(o,p),c.pS.add(u,d.elementCount),c.pS.add(d,f)},getFeatures:e=>{c.pS.add(u,d.elementCount);let t=c.pS.compact(n,!0),r=c.pS.compact(i,!0),p=c.pS.compact(o,!0),f=n.elementCount;return a.create(e,{x:t,y:r,z:p,count:f,types:c.pS.compact(s,!0),groups:c.pS.compact(l,!0),offsets:c.pS.compact(u,!0),members:c.pS.compact(d,!0)})}}};var g=r(65410),b=r(17814),y=r(53288);(i||(i={})).create=function(e,t){let r=[],a=[],n=[];return{add(e,t,i){r[r.length]=e,a[a.length]=t,n[n.length]=i},getContacts(){let i;let o=new b.a.EdgeBuilder(e.count,r,a),s=new Int8Array(o.slotCount),l=new Int8Array(o.slotCount);for(let e=0,t=o.edgeCount;e<t;e++)o.addNextEdge(),o.assignProperty(s,n[e]);let u=o.createGraph({type:s,flag:l});return Object.defineProperty(u,"elementsIndex",{get:()=>i||(i=g.yH.createElementsIndex(u,e,t))})}}},(o||(o={})).create=function(){let e=new y.G.Builder;return{startUnitPair(t,r){e.startUnitPair(t.id,r.id)},finishUnitPair(){e.finishUnitPair()},add(t,r,a){e.add(t,r,{type:a,flag:g.Bs.None})},getContacts:t=>new g.kf(e.getMap(),t)}};var x=r(53478),S=r(34985),T=r(125),C=r(84942);let O={lineOfSightDistFactor:l.e.Numeric(1,{min:0,max:3,step:.1})};function I(e,t,r){let a=t.members[t.offsets[t.feature]],n=r.members[r.offsets[r.feature]];if(a===n&&t.unit===r.unit)return!1;let i=(0,C.Il)(t.unit,a),o=(0,C.Il)(r.unit,n);return!(i&&o&&i!==o||t.unit===r.unit&&t.unit.model.atomicHierarchy.residueAtomSegments.count>1&&t.unit.residueIndex[t.unit.elements[a]]===r.unit.residueIndex[r.unit.elements[n]]||(0,C.Fp)(e,t.unit,a,r.unit,n))}function A(e,t,r,a){let n=(0,C.Il)(e,t),i=(0,C.Il)(r,a);return n&&i&&n!==i}function w(e,t){let{feature:r,offsets:a,members:n}=t;for(let t=a[r],i=a[r+1];t<i;++t)if(n[t]===e)return!0;return!1}let D=(0,m.AO)(),E=(0,m.AO)(),M=(0,m.AO)(),P=(0,T.ws)();function k(e,t,r,n){let i=t.feature,o=r.feature,s=t.members[t.offsets[i]],l=r.members[r.offsets[o]];a.position(E,t),a.position(M,r),m.AO.scale(D,m.AO.add(D,E,M),.5);let{count:c,indices:d,units:p,squaredDistances:f}=e.lookup3d.find(D[0],D[1],D[2],3*n,P);if(0===c)return!0;for(let e=0;e<c;++e){let a=d[e],i=p[e];if(!u.Unit.isAtomic(i))continue;let o=(0,C.TZ)(i,a);if(o===S.eK.H)continue;let c=(0,x.lT)(o);if(!(c*c*n*n<=f[e]||A(i,a,t.unit,s)||A(i,a,r.unit,l)||t.unit===i&&w(a,t)||r.unit===i&&w(a,r))&&(i.conformation.position(i.elements[a],D),!(1>m.AO.squaredDistance(D,E)||1>m.AO.squaredDistance(D,M))))return!1}return!0}let B=(0,m.yb)();var _=r(14507),R=r(58463);let F={distanceMax:l.e.Numeric(4,{min:1,max:5,step:.1}),angleMax:l.e.Numeric(30,{min:0,max:60,step:1})},L=[S.eK.CL,S.eK.BR,S.eK.I,S.eK.AT],z=[S.eK.N,S.eK.O,S.eK.S],N=[S.eK.C,S.eK.N,S.eK.P,S.eK.S],G=(0,R.Id)(180),U=(0,R.Id)(120),V=a.Provider([g.Te.HalogenDonor],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e);L.includes(s)&&r.add(g.Te.HalogenDonor,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}}),j=a.Provider([g.Te.HalogenAcceptor],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let s=0,l=a.length;s<l;++s){let l=(0,C.TZ)(t,s);if(z.includes(l)){let l=!1;(0,C.KM)(e,t,s,(e,t)=>{N.includes((0,C.TZ)(e,t))&&(l=!0)}),l&&r.add(g.Te.HalogenAcceptor,g.$v.None,n[a[s]],i[a[s]],o[a[s]],s)}}});var H=r(91044);let q={distanceMax:l.e.Numeric(3.5,{min:1,max:5,step:.1}),backbone:l.e.Boolean(!0,{description:"Include backbone-to-backbone hydrogen bonds"}),accAngleDevMax:l.e.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal acceptor angle"}),ignoreHydrogens:l.e.Boolean(!1,{description:"Ignore explicit hydrogens in geometric constraints"}),donAngleDevMax:l.e.Numeric(45,{min:0,max:180,step:1},{description:"Max deviation from ideal donor angle"}),accOutOfPlaneAngleMax:l.e.Numeric(90,{min:0,max:180,step:1}),donOutOfPlaneAngleMax:l.e.Numeric(45,{min:0,max:180,step:1})},X={...q,water:l.e.Boolean(!1,{description:"Include water-to-water hydrogen bonds"}),sulfurDistanceMax:l.e.Numeric(4.1,{min:1,max:5,step:.1})},W={...q};function K(e,t){let r=f.g.get(e).value;if(!r)throw Error("expected valence model to be available");let a=r.get(t.id);if(!a)throw Error("expected valence model for unit to be available");return a}function Q(e,t){return e.model.atomicHierarchy.derived.residue.moleculeType[e.residueIndex[e.elements[t]]]===H.MoleculeType.Water}function Z(e,t){return H.ProteinBackboneAtoms.has((0,C.rt)(e,t))}function Y(e,t){return"HIS"===(0,C.NT)(e,t)&&(0,C.TZ)(e,t)===S.eK.N&&e.rings.elementRingIndices.has(t)}function $(e){return{ignoreHydrogens:e.ignoreHydrogens,includeBackbone:e.backbone,maxAccAngleDev:(0,R.Id)(e.accAngleDevMax),maxDonAngleDev:(0,R.Id)(e.donAngleDevMax),maxAccOutOfPlaneAngle:(0,R.Id)(e.accOutOfPlaneAngleMax),maxDonOutOfPlaneAngle:(0,R.Id)(e.donOutOfPlaneAngleMax)}}let J=(0,R.Id)(120);function ee(e,t,r,a){var n,i;let o=t.members[t.offsets[t.feature]],s=r.members[r.offsets[r.feature]];if(!a.includeBackbone&&(n=t.unit,i=r.unit,Z(n,o)&&Z(i,s)))return;let[l,u]=(0,_.BC)(e,t.unit,o,r.unit,s,a.ignoreHydrogens),c=_.K8.get(t.idealGeometry[o])||J;if(l.some(e=>Math.abs(c-e)>a.maxDonAngleDev)||u.length&&!u.some(e=>e<a.maxDonAngleDev))return;if(t.idealGeometry[o]===_.Qq.Trigonal){let n=(0,_.VD)(e,t.unit,o,r.unit,s);if(void 0!==n&&n>a.maxDonOutOfPlaneAngle)return}let d=o;!a.ignoreHydrogens&&u.length>0&&(d=(0,_.xv)(e,t.unit,o,r.unit,s));let[p,f]=(0,_.BC)(e,r.unit,s,t.unit,d,a.ignoreHydrogens),m=_.K8.get(r.idealGeometry[s])||J;if(!p.some(e=>m-e>a.maxAccAngleDev)&&!f.some(e=>m-e>a.maxAccAngleDev)){if(r.idealGeometry[s]===_.Qq.Trigonal){let n=(0,_.VD)(e,r.unit,s,t.unit,o);if(void 0!==n&&n>a.maxAccOutOfPlaneAngle)return}return!0}}let et=a.Provider([g.Te.HydrogenDonor],function(e,t,r){let{totalH:a}=K(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation;for(let e=0,l=n.length;e<l;++e){let l=(0,C.TZ)(t,e);(Y(t,e)||a[e]>0&&(l===S.eK.N||l===S.eK.O||l===S.eK.S))&&r.add(g.Te.HydrogenDonor,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}),er=a.Provider([g.Te.WeakHydrogenDonor],function(e,t,r){let{totalH:a}=K(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation;for(let l=0,u=n.length;l<u;++l)(0,C.TZ)(t,l)===S.eK.C&&a[l]>0&&((0,C.ls)(e,t,l,S.eK.N)>0||(0,C.ls)(e,t,l,S.eK.O)>0||function(e,t){let{elementAromaticRingIndices:r,all:a}=e.rings,n=r.get(t);if(void 0===n)return!1;for(let t=0,r=n.length;t<r;++t){let r=a[n[t]];for(let t=0,a=r.length;t<a;++t){let a=(0,C.TZ)(e,r[t]);if(a===S.eK.N||a===S.eK.O)return!0}}return!1}(t,l))&&r.add(g.Te.WeakHydrogenDonor,g.$v.None,i[n[l]],o[n[l]],s[n[l]],l)}),ea=a.Provider([g.Te.HydrogenAcceptor],function(e,t,r){let{charge:a,implicitH:n,idealGeometry:i}=K(e,t),{elements:o}=t,{x:s,y:l,z:u}=t.model.atomicConformation,c=e=>{r.add(g.Te.HydrogenAcceptor,g.$v.None,s[o[e]],l[o[e]],u[o[e]],e)};for(let r=0,s=o.length;r<s;++r){let o=(0,C.TZ)(t,r);if(o===S.eK.O)c(r);else if(o===S.eK.N){if(Y(t,r))c(r);else if(a[r]<1){let a=(0,C.ui)(e,t,r)+n[r],o=i[r];(o===_.Qq.Tetrahedral&&a<4||o===_.Qq.Trigonal&&a<3||o===_.Qq.Linear&&a<2)&&c(r)}}else if(o===S.eK.S){let e=(0,C.NT)(t,r);("CYS"===e||"MET"===e||-1===(0,C.E3)(t,r))&&c(r)}}});var en=r(24407);let ei={distanceMax:l.e.Numeric(5,{min:0,max:8,step:.1})},eo={distanceMax:l.e.Numeric(5.5,{min:1,max:8,step:.1}),offsetMax:l.e.Numeric(2,{min:0,max:4,step:.1}),angleDevMax:l.e.Numeric(30,{min:0,max:180,step:1})},es={distanceMax:l.e.Numeric(6,{min:1,max:8,step:.1}),offsetMax:l.e.Numeric(2,{min:0,max:4,step:.1})},el=["ARG","HIS","LYS"],eu=["GLU","ASP"];function ec(e,t){let r=f.g.get(e).value;if(!r)throw Error("expected valence model to be available");let a=r.get(t.id);if(!a)throw Error("expected valence model for unit to be available");return a}let ed=(0,m.AO)(),ep=(0,m.AO)(),ef=(0,m.AO)(),em=(0,m.AO)(),eh=(0,m.AO)(),eg=(0,m.AO)();function ev(e,t){let{unit:r,feature:a,offsets:n,members:i}=t,{elements:o}=r,s=n[a];return t.unit.conformation.position(o[i[s]],ef),t.unit.conformation.position(o[i[s+1]],em),t.unit.conformation.position(o[i[s+2]],eh),m.AO.triangleNormal(e,ef,em,eh)}let eb=function(e,t,r){return a.position(ef,e),a.position(em,t),m.AO.sub(eh,ef,em),m.AO.projectOnPlane(eg,eh,r),m.AO.add(eg,eg,em),m.AO.distance(eg,em)},ey=(0,R.Id)(180),ex=(0,R.Id)(90),eS=(0,m.AO)(),eT=(0,m.AO)(),eC=a.Provider([g.Te.NegativeCharge],function(e,t,r){let{charge:a}=ec(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation,l=new Set,{label_comp_id:u}=t.model.atomicHierarchy.atoms,c=p.vI.transientSegments(t.model.atomicHierarchy.residueAtomSegments,n);for(;c.hasNext;){let{index:d,start:p,end:f}=c.move(),m=u.value(t.model.atomicHierarchy.residueAtomSegments.offsets[d]);if(eu.includes(m)){r.startState();for(let e=p;e<f;++e)(0,C.TZ)(t,e)!==S.eK.O||H.ProteinBackboneAtoms.has((0,C.rt)(t,e))||r.pushMember(i[n[e]],o[n[e]],s[n[e]],e);r.finishState(g.Te.NegativeCharge,g.$v.None)}else if(H.BaseNames.has(m))for(let a=p;a<f;++a)(0,en.vd)(e,t,a)&&(r.startState(),(0,C.KM)(e,t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.O&&r.pushMember(i[n[a]],o[n[a]],s[n[a]],a)}),r.finishState(g.Te.NegativeCharge,g.$v.Phosphate));else if(!H.PolymerNames.has(m)){for(let a=p;a<f;++a){r.startState(),(0,C.TZ)(t,a)!==S.eK.N||H.ProteinBackboneAtoms.has((0,C.rt)(t,a))||r.pushMember(i[n[a]],o[n[a]],s[n[a]],a),r.finishState(g.Te.NegativeCharge,g.$v.None);let u=g.$v.None;(0,en.wp)(e,t,a)?u=g.$v.SulfonicAcid:(0,en.vd)(e,t,a)?u=g.$v.Phosphate:(0,en.um)(e,t,a)?u=g.$v.Sulfate:(0,en.Eq)(e,t,a)&&(u=g.$v.Carboxylate),u&&(r.startState(),(0,C.KM)(e,t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.O&&(l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a))}),r.finishState(g.Te.NegativeCharge,u))}for(let e=p;e<f;++e)a[e]<0&&!l.has(e)&&r.add(g.Te.NegativeCharge,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}}),eO=a.Provider([g.Te.PositiveCharge],function(e,t,r){let{charge:a}=ec(e,t),{elements:n}=t,{x:i,y:o,z:s}=t.model.atomicConformation,l=new Set,{label_comp_id:u}=t.model.atomicHierarchy.atoms,c=p.vI.transientSegments(t.model.atomicHierarchy.residueAtomSegments,n);for(;c.hasNext;){let{index:d,start:p,end:f}=c.move(),m=u.value(t.model.atomicHierarchy.residueAtomSegments.offsets[d]);if(el.includes(m)){r.startState();for(let e=p;e<f;++e)(0,C.TZ)(t,e)!==S.eK.N||H.ProteinBackboneAtoms.has((0,C.rt)(t,e))||r.pushMember(i[n[e]],o[n[e]],s[n[e]],e);r.finishState(g.Te.PositiveCharge,g.$v.None)}else if(!H.PolymerNames.has(m)){l.clear();for(let a=p;a<f;++a){let u=g.$v.None;if((0,en.Qh)(e,t,a))u=g.$v.Guanidine;
7319else if((0,en.VF)(e,t,a))u=g.$v.Acetamidine;else if((0,en.L$)(e,t,a)){u=g.$v.QuaternaryAmine,r.startState(),l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a),(0,C.rY)(t,a,(e,t)=>{l.add(t),r.markMember(t)}),r.finishState(g.Te.PositiveCharge,u);continue}u&&(r.startState(),(0,C.rY)(t,a,(e,a)=>{(0,C.TZ)(t,a)===S.eK.N&&(l.add(a),r.pushMember(i[n[a]],o[n[a]],s[n[a]],a))}),r.finishState(g.Te.PositiveCharge,u))}for(let e=p;e<f;++e)a[e]>0&&!l.has(e)&&r.add(g.Te.PositiveCharge,g.$v.None,i[n[e]],o[n[e]],s[n[e]],e)}}}),eI=a.Provider([g.Te.AromaticRing],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e of t.rings.aromaticRings){let s=t.rings.all[e];r.startState();for(let e=0,t=s.length;e<t;++e){let t=s[e];r.pushMember(n[a[t]],i[a[t]],o[a[t]],t)}r.finishState(g.Te.AromaticRing,g.$v.None)}}),eA={distanceMax:l.e.Numeric(4,{min:1,max:5,step:.1})},ew=a.Provider([g.Te.HydrophobicAtom],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let s=0,l=a.length;s<l;++s){let l=(0,C.TZ)(t,s),u=!1;l===S.eK.C?(u=!0,(0,C.KM)(e,t,s,(e,t)=>{let r=(0,C.TZ)(e,t);r!==S.eK.C&&r!==S.eK.H&&(u=!1)})):l===S.eK.F&&(u=!0),u&&r.add(g.Te.HydrophobicAtom,g.$v.None,n[a[s]],i[a[s]],o[a[s]],s)}});var eD=r(63964);let eE={distanceMax:l.e.Numeric(3,{min:1,max:5,step:.1})},eM=[S.eK.LI,S.eK.NA,S.eK.K,S.eK.RB,S.eK.CS,S.eK.MG,S.eK.CA,S.eK.SR,S.eK.BA,S.eK.AL,S.eK.GA,S.eK.IN,S.eK.TL,S.eK.SC,S.eK.SN,S.eK.PB,S.eK.BI,S.eK.SB,S.eK.HG];function eP(e){return!H.ProteinBackboneAtoms.has(e)}function ek(e,t){return e===g.Te.TransitionMetal?t===g.Te.DativeBondPartner||t===g.Te.TransitionMetal:e===g.Te.IonicTypeMetal?t===g.Te.IonicTypePartner:void 0}let eB=a.Provider([g.Te.IonicTypeMetal,g.Te.TransitionMetal],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e),l=g.Te.None;eM.includes(s)?l=g.Te.IonicTypeMetal:((0,S.VQ)(s)||s===S.eK.ZN||s===S.eK.CD)&&(l=g.Te.TransitionMetal),l&&r.add(l,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}}),e_=a.Provider([g.Te.IonicTypePartner,g.Te.DativeBondPartner],function(e,t,r){let{elements:a}=t,{x:n,y:i,z:o}=t.model.atomicConformation;for(let e=0,s=a.length;e<s;++e){let s=(0,C.TZ)(t,e),l=(0,C.NT)(t,e),u=(0,C.rt)(t,e),c=!1,d=!1,p=H.AminoAcidNames.has(l),f=H.BaseNames.has(l);p||f?p?s===S.eK.O?["ASP","GLU","SER","THR","TYR","ASN","GLN"].includes(l)&&eP(u)?(c=!0,d=!0):H.ProteinBackboneAtoms.has(u)&&(c=!0,d=!0):s===S.eK.S&&("CYS"===l||"MET"===l)?(c=!0,d=!0):s===S.eK.N&&"HIS"===l&&eP(u)&&(c=!0):f&&(s===S.eK.O&&H.NucleicBackboneAtoms.has(u)?(c=!0,d=!0):["N3","N4","N7"].includes(u)?c=!0:["O2","O4","O6"].includes(u)&&(c=!0,d=!0)):(0,S.Rt)(s)||s===S.eK.O||s===S.eK.S?(c=!0,d=!0):s===S.eK.N&&(c=!0),c&&r.add(g.Te.DativeBondPartner,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e),d&&r.add(g.Te.IonicTypePartner,g.$v.None,n[a[e]],i[a[e]],o[a[e]],e)}});function eR(e,t,r,a,n){let{offsets:i,feature:o}=r,{offsets:s,feature:l}=a;for(let u=i[o],c=i[o+1];u<c;++u){let i=r.members[u],o=n.getContactIndicesForElement(i,r.unit);for(let r=0,i=o.length;r<i;++r){let i=o[r];if(e.includes(n.edges[i].props.type))for(let e=s[l],r=s[l+1];e<r;++e){let r=a.members[e];if(n.getContactIndicesForElement(r,a.unit).includes(i)){n.edges[t].props.flag=g.Bs.Filtered;return}}}}}function eF(e,t,r,a,n){let{edgeProps:{type:i,flag:o},elementsIndex:{offsets:s,indices:l}}=n,{offsets:u,feature:c}=r,{offsets:d,feature:p}=a;for(let n=u[c],f=u[c+1];n<f;++n){let u=r.members[n];for(let r=s[u],n=s[u+1];r<n;++r){let n=l[r];if(e.includes(i[n]))for(let e=d[p],r=d[p+1];e<r;++e){let r=a.members[e];for(let e=s[r],a=s[r+1];e<a;++e)if(n===l[e]){o[t]=g.Bs.Filtered;return}}}}}var eL=r(71522),ez=r(43398),eN=r(67589),eG=r(58202),eU=r(97667);!function(e){function t(e,t){let{unitA:r,indexA:a,unitB:n,indexB:i}=t,{contacts:o,unitsContacts:s}=e;if(r===n){let e=s.get(r.id),t=e.getDirectedEdgeIndex(a,i);return(0,g.xz)(e.edgeProps.type[t])}{let e=o.getEdgeIndex(a,r.id,i,n.id);return(0,g.xz)(o.edges[e].props.type)}}function r(e,t,r){let{unitsFeatures:n}=e;return ez.B.fromPairProvider(t.length,(e,r,i)=>{let o=t[e];a.setPosition(r,o.unitA,o.indexA,n.get(o.unitA.id)),a.setPosition(i,o.unitB,o.indexB,n.get(o.unitB.id))},r)}function n(e,r,a){let n=a[0];if(void 0===n)return"";let{unitA:i,indexA:o,unitB:s,indexB:l}=n,{unitsFeatures:c}=r,{members:d,offsets:p}=c.get(i.id),{members:f,offsets:m}=c.get(s.id),h={granularity:"element"};return(p[o+1]-p[o]>1||m[l+1]-m[l]>1)&&(h.granularity="residue"),[t(r,n),(0,eG.Gg)(u.Bond.Location(e,i,d[p[o]],e,s,f[m[l]]),h)].join("</br>")}e.Location=function(e,t,r,a,n,i){return(0,eL.o0)("interactions",{structure:t,interactions:e},{unitA:r,indexA:a,unitB:n,indexB:i})},e.isLocation=function(e){return!!e&&"data-location"===e.kind&&"interactions"===e.tag},e.areLocationsEqual=function(e,t){return e.data.structure===t.data.structure&&e.data.interactions===t.data.interactions&&e.element.indexA===t.element.indexA&&e.element.indexB===t.element.indexB&&e.element.unitA===t.element.unitA&&e.element.unitB===t.element.unitB},e.locationLabel=function(e){return t(e.data.interactions,e.element)},e.Loci=function(e,t,a){return(0,eN.SL)("interactions",{structure:e,interactions:t},a,e=>r(t,a,e),()=>n(e,t,a))},e.isLoci=function(e){return!!e&&"data-loci"===e.kind&&"interactions"===e.tag},e.getBoundingSphere=r,e.getLabel=n}(s||(s={}));let eV=[et,er,ea,eC,eO,eI,V,j,ew,eB,e_],ej={ionic:{name:"ionic",params:ei,createTester:e=>{let t={distanceMaxSq:e.distanceMax*e.distanceMax};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.NegativeCharge,g.Te.PositiveCharge]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if((i===g.Te.NegativeCharge&&o===g.Te.PositiveCharge||i===g.Te.PositiveCharge&&o===g.Te.NegativeCharge)&&function(e,t,r){let{feature:a,offsets:n,members:i}=e,{feature:o,offsets:s,members:l}=t;for(let u=n[a],c=n[a+1];u<c;++u){let a=i[u];e.unit.conformation.position(e.unit.elements[a],ed);for(let e=s[o],a=s[o+1];e<a;++e){let a=l[e];
7319if(t.unit.conformation.position(t.unit.elements[a],ep),m.AO.squaredDistance(ed,ep)<r)return!0}}return!1}(t,r,n.distanceMaxSq))return g.s_.Ionic})(0,r,a,0,t)}}},"pi-stacking":{name:"pi-stacking",params:eo,createTester:e=>{let t={offsetMax:e.offsetMax,angleDevMax:(0,R.Id)(e.angleDevMax)};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.AromaticRing]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if(i===g.Te.AromaticRing&&o===g.Te.AromaticRing){ev(eS,t),ev(eT,r);let e=m.AO.angle(eS,eT);if(Math.min(eb(t,r,eT),eb(r,t,eS))<=n.offsetMax&&(e<=n.angleDevMax||e>=ey-n.angleDevMax||e<=n.angleDevMax+ex&&e>=ex-n.angleDevMax))return g.s_.PiStacking}})(0,r,a,0,t)}}},"cation-pi":{name:"cation-pi",params:es,createTester:e=>{let t={offsetMax:e.offsetMax};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.AromaticRing,g.Te.PositiveCharge]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if(i===g.Te.AromaticRing&&o===g.Te.PositiveCharge||i===g.Te.PositiveCharge&&o===g.Te.AromaticRing){let[e,a]=i===g.Te.AromaticRing?[t,r]:[r,t];if(ev(eS,e),eb(a,e,eS)<=n.offsetMax)return g.s_.CationPi}})(0,r,a,0,t)}}},"halogen-bonds":{name:"halogen-bonds",params:F,createTester:e=>{let t={angleMax:(0,R.Id)(e.angleMax)};return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.HalogenDonor,g.Te.HalogenAcceptor]),getType:(e,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if((n!==g.Te.HalogenAcceptor||i!==g.Te.HalogenDonor)&&(n!==g.Te.HalogenDonor||i!==g.Te.HalogenAcceptor))return;let[o,s]=n===g.Te.HalogenDonor?[t,r]:[r,t],l=o.members[o.offsets[o.feature]],u=s.members[s.offsets[s.feature]],[c]=(0,_.BC)(e,o.unit,l,s.unit,u);if(1!==c.length||G-c[0]>a.angleMax)return;let[d]=(0,_.BC)(e,s.unit,u,o.unit,l);if(0!==d.length&&!d.some(e=>U-e>a.angleMax))return g.s_.HalogenBond})(e,r,a,t)}}},"hydrogen-bonds":{name:"hydrogen-bonds",params:X,createTester:e=>{let t=Math.max(e.distanceMax,e.sulfurDistanceMax),r={...$(e),includeWater:e.water,maxSulfurDistSq:e.sulfurDistanceMax*e.sulfurDistanceMax,maxDistSq:e.distanceMax*e.distanceMax};return{maxDistance:t,requiredFeatures:new Set([g.Te.HydrogenDonor,g.Te.HydrogenAcceptor]),getType:(e,t,a,n)=>(function(e,t,r,a,n){var i,o;let s=t.types[t.feature],l=r.types[r.feature];if((s!==g.Te.HydrogenAcceptor||l!==g.Te.HydrogenDonor)&&(s!==g.Te.HydrogenDonor||l!==g.Te.HydrogenAcceptor))return;let[u,c]=l===g.Te.HydrogenAcceptor?[t,r]:[r,t],d=u.members[u.offsets[u.feature]],p=c.members[c.offsets[c.feature]];if(!(a>((0,C.TZ)(u.unit,d)===S.eK.S||(0,C.TZ)(c.unit,p)===S.eK.S?n.maxSulfurDistSq:n.maxDistSq))&&!(!n.includeWater&&(i=u.unit,o=c.unit,Q(i,d)&&Q(o,p)))&&ee(e,u,c,n))return g.s_.HydrogenBond})(e,t,a,n,r)}}},"weak-hydrogen-bonds":{name:"weak-hydrogen-bonds",params:W,createTester:e=>{let t=$(e);return{maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.WeakHydrogenDonor,g.Te.HydrogenAcceptor]),getType:(e,r,a,n)=>(function(e,t,r,a,n){let i=t.types[t.feature],o=r.types[r.feature];if((i!==g.Te.WeakHydrogenDonor||o!==g.Te.HydrogenAcceptor)&&(i!==g.Te.HydrogenAcceptor||o!==g.Te.WeakHydrogenDonor))return;let[s,l]=o===g.Te.HydrogenAcceptor?[t,r]:[r,t];if(ee(e,s,l,n))return g.s_.WeakHydrogenBond})(e,r,a,0,t)}}},hydrophobic:{name:"hydrophobic",params:eA,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.HydrophobicAtom]),getType:(e,t,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if(n!==g.Te.HydrophobicAtom||i!==g.Te.HydrophobicAtom)return;let o=t.members[t.offsets[t.feature]],s=r.members[r.offsets[r.feature]];if((0,C.TZ)(t.unit,o)!==S.eK.F||(0,C.TZ)(r.unit,s)!==S.eK.F)return g.s_.Hydrophobic})(0,t,r,0)})},"metal-coordination":{name:"metal-coordination",params:eE,createTester:e=>({maxDistance:e.distanceMax,requiredFeatures:new Set([g.Te.IonicTypeMetal,g.Te.TransitionMetal,g.Te.IonicTypePartner,g.Te.DativeBondPartner]),getType:(e,t,r,a)=>(function(e,t,r,a){let n=t.types[t.feature],i=r.types[r.feature];if(ek(n,i)||ek(i,n))return g.s_.MetalCoordination})(0,t,r,0)})}},eH=function(e=[]){let t=Object.create(null);
7319return Object.keys(ej).forEach(r=>{t[r]=l.e.MappedStatic(e.includes(r)?"on":"off",{on:l.e.Group(ej[r].params),off:l.e.Group({})},{cycle:!0})}),t}(["cation-pi","pi-stacking","hydrogen-bonds","halogen-bonds","metal-coordination"]),eq={providers:l.e.Group(eH,{isFlat:!0}),contacts:l.e.Group(O,{label:"Advanced Options"})};async function eX(e,t,r,s){let c={...l.e.getDefaultValues(eq),...r},d=JSON.stringify(c);await f.g.attach(e,t);let h=[];(0,eU._2)(ej).forEach(e=>{let{name:t,params:r}=c.providers[e];"on"===t&&h.push(ej[e].createTester(r))});let b=new Set;h.forEach(e=>eD.F.add(b,e.requiredFeatures));let y=eV.filter(e=>eD.F.areIntersecting(b,e.types)),x=p.Ol.Mutable(),S=p.Ol.Mutable();for(let r=0,o=t.unitSymmetryGroups.length;r<o;++r){let l=t.unitSymmetryGroups[r];e.runtime.shouldUpdate&&await e.runtime.update({message:"computing interactions",current:r,max:o});let f=function(e,t,r,a){let i=`features-${a}`;if(t.transientCache.has(i))return t.transientCache.get(i);let o=t.elements.length,s=n.create(o,o/2);if(u.Unit.isAtomic(t))for(let a of r)a.add(e,t,s);let l=s.getFeatures(o);return t.transientCache.set(i,l),l}(t,l.units[0],y,d);for(let e=0,t=l.units.length;e<t;++e){let t=l.units[e];x.set(t.id,f)}if(null==s?void 0:s.skipIntraContacts)continue;let m=function(e,t,r,n,o){let s=i.create(r,t.elements.length);return u.Unit.isAtomic(t)&&function(e,t,r,n,i,o){for(let s of i)(function(e,t,r,n,i,o){let{x:s,y:l,z:u}=r,{lookup3d:c,indices:d}=r.subset(i.requiredFeatures),f=a.Info(e,t,r),m={...f},h=o.lineOfSightDistFactor;for(let t=0,r=p.hU.size(d);t<r;++t){let r=p.hU.getAt(d,t),{count:a,indices:o,squaredDistances:g}=c.find(s[r],l[r],u[r],i.maxDistance);if(0!==a){f.feature=r;for(let t=0;t<a;++t){let a=p.hU.getAt(d,o[t]);if(a<=r||(m.feature=a,!I(e,f,m)))continue;let s=i.getType(e,f,m,g[t]);s&&k(e,f,m,h)&&n.add(r,a,s)}}}})(e,t,r,n,s,o)}(e,t,r,s,n,o),s.getContacts()}(t,l.units[0],f,h,c.contacts);for(let e=0,t=l.units.length;e<t;++e){let t=l.units[e];S.set(t.id,m)}}let T=function(e,t,r,n,i){let s=o.create();return u.Structure.eachUnitPair(e,(i,o)=>{let l=t.get(i.id),u=t.get(o.id);!function(e,t,r,n,i,o,s,l){let{count:u,x:c,y:d,z:p}=r,{lookup3d:f}=i,h=m.yb.mul(B,n.conformation.operator.inverse,t.conformation.operator.matrix),g=!m.yb.isIdentity(h),b=(0,m.AO)(),y=Math.max(...s.map(e=>e.maxDistance)),{center:x,radius:S}=f.boundary.sphere,T=(S+y)*(S+y),C=l.lineOfSightDistFactor,O=a.Info(e,t,r),A=a.Info(e,n,i);o.startUnitPair(t,n);for(let t=0;t<u;++t){if(m.AO.set(b,c[t],d[t],p[t]),g&&m.AO.transformMat4(b,b,h),m.AO.squaredDistance(b,x)>T)continue;let{indices:r,count:a,squaredDistances:n}=f.find(b[0],b[1],b[2],y);if(0!==a){O.feature=t;for(let i=0;i<a;++i){let a=r[i];if(A.feature=a,!I(e,O,A))continue;let l=n[i];for(let r of s)if(l<r.maxDistance*r.maxDistance){let n=r.getType(e,O,A,l);if(n&&k(e,O,A,C)){o.add(t,a,n);break}}}}}o.finishUnitPair()}(e,i,l,o,u,s,r,n)},{maxRadius:Math.max(...r.map(e=>e.maxDistance)),validUnit:e=>u.Unit.isAtomic(e),validUnitPair:(t,r)=>(null==i?void 0:i.unitPairTest)?i.unitPairTest(t,r):u.Structure.validUnitPair(e,t,r)}),s.getContacts(t)}(t,x,h,c.contacts,s),C={unitsFeatures:x,unitsContacts:S,contacts:T};return!function(e,t){let{contacts:r,unitsContacts:n,unitsFeatures:i}=t,o=[function(e,t){let r,n;let{contacts:i}=t,o=function(e,t,r,a,n){let[i,o]=a.get(r)||[1/0,-1];e<i?(-1!==o&&n(o),a.set(r,[e,t])):n(t)};function s(e,t,r,n,i){let s=t.members[t.offsets[t.feature]],l=r.members[r.offsets[r.feature]],u=t.unit.getResidueIndex(s),c=r.unit.getResidueIndex(l),d=`${s}|${t.unit.id}|${c}|${r.unit.id}|A`,p=`${l}|${r.unit.id}|${u}|${t.unit.id}|B`,f=a.distance(t,r);o(f,e,d,n,i),o(f,e,p,n,i)}let l=new Map,u=e=>i.edges[e].props.flag=g.Bs.Filtered;return{isApplicable:e=>e===g.s_.Hydrophobic,handleInterContact:(e,t,r)=>{s(e,t,r,l,u)},startUnit:(e,t,a)=>{r=new Map,n=e=>t.edgeProps.flag[e]=g.Bs.Filtered},handleIntraContact:(e,t,a)=>{s(e,t,a,r,n)}}}(0,t),function(e,t){let{contacts:r}=t,a=(e,a)=>{let n=e.types[e.feature]===g.Te.WeakHydrogenDonor?a:e,i=n.members[n.offsets[n.feature]],{edgeProps:{type:o},elementsIndex:{offsets:s,indices:l}}=t.unitsContacts.get(n.unit.id);for(let e=s[i],t=s[i+1];e<t;++e)if(o[l[e]]===g.s_.HydrogenBond)return!0;let u=r.getEdgeIndices(n.feature,n.unit.id);for(let e=0,t=u.length;e<t;++e)if(r.edges[u[e]].props.type===g.s_.HydrogenBond)return!0;return!1};return{isApplicable:e=>
7319e===g.s_.WeakHydrogenBond,handleInterContact:(e,t,n)=>{a(t,n)&&(r.edges[e].props.flag=g.Bs.Filtered)},startUnit:()=>{},handleIntraContact:(e,r,n)=>{if(a(r,n)){let{flag:a}=t.unitsContacts.get(r.unit.id).edgeProps;a[e]=g.Bs.Filtered}}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Ionic,handleInterContact:(e,t,a)=>{eR([g.s_.HydrogenBond,g.s_.WeakHydrogenBond],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.HydrogenBond,g.s_.WeakHydrogenBond],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Hydrophobic||e===g.s_.CationPi,handleInterContact:(e,t,a)=>{eR([g.s_.PiStacking],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.PiStacking],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t),function(e,t){let{contacts:r}=t;return{isApplicable:e=>e===g.s_.Ionic,handleInterContact:(e,t,a)=>{eR([g.s_.MetalCoordination],e,t,a,r)},startUnit:()=>{},handleIntraContact:(e,r,a)=>{eF([g.s_.MetalCoordination],e,r,a,t.unitsContacts.get(r.unit.id))}}}(0,t)];for(let t=0,n=r.edgeCount;t<n;++t){let n=r.edges[t],s=e.unitMap.get(n.unitA),l=e.unitMap.get(n.unitB),u=a.Info(e,s,i.get(n.unitA));u.feature=n.indexA;let c=a.Info(e,l,i.get(n.unitB));for(let e of(c.feature=n.indexB,o))e.isApplicable(n.props.type)&&e.handleInterContact(t,u,c)}let s=n.keys();for(;;){let{done:t,value:r}=s.next();if(t)break;let l=n.get(r),c=i.get(r),d=e.unitMap.get(r);if(!u.Unit.isAtomic(d))continue;let p=a.Info(e,d,c),f=a.Info(e,d,c);for(let e of o)e.startUnit(d,l,c);for(let e=0,t=2*l.edgeCount;e<t;++e)for(let t of(p.feature=l.a[e],f.feature=l.b[e],o))t.isApplicable(l.edgeProps.type[e])&&t.handleIntraContact(e,p,f)}}(t,C),C}},11056:function(e,t,r){r.d(t,{Wt:function(){return j}});var a=r(14086),n=r(7791),i=r(84894),o=r(30502),s=r(87144),l=r(67589),u=r(34526),c=r(4376),d=r(21300),p=r(84889),f=r(31745),m=r(72558),h=r(48984),g=r(65410),b=r(48930),y=r(42743),x=r(97667);let S={sizeFactor:a.e.Numeric(.3,{min:0,max:10,step:.01}),dashCount:a.e.Numeric(6,{min:1,max:10,step:1}),dashScale:a.e.Numeric(.4,{min:0,max:2,step:.1}),ignoreHydrogens:a.e.Boolean(!1),ignoreHydrogensVariant:a.e.Select("all",a.e.arrayToOptions(["all","non-polar"])),includeParent:a.e.Boolean(!1),parentDisplay:a.e.Select("stub",a.e.arrayToOptions(["stub","full","between"]),{description:'Only has an effect when "includeParent" is enabled. "Stub" shows just the child side of interactions to the parent. "Full" shows both sides of interactions to the parent. "Between" shows only interactions to the parent.'})};var T=r(84942);async function C(e,t,r,a,n,i){if(!o.Unit.isAtomic(t))return c.K.createEmpty(i);let{child:l}=r,f=null==l?void 0:l.unitMap.get(t.id);if(l&&!f)return c.K.createEmpty(i);let m=o.StructureElement.Location.create(r,t),h=d.D.get(r).value,S=h.unitsFeatures.get(t.id),C=h.unitsContacts.get(t.id),{x:O,y:I,z:A,members:w,offsets:D,types:E}=S,{edgeCount:M,a:P,b:k,edgeProps:{flag:B,type:_}}=C,{sizeFactor:R,ignoreHydrogens:F,ignoreHydrogensVariant:L,parentDisplay:z}=n;if(!M)return c.K.createEmpty(i);let{elements:N,conformation:G}=t,U=(0,s.AO)(),V=(0,s.AO)(),j=(0,s.AO)(),{mesh:H,boundingSphere:q}=(0,p.fV)(e,{linkCount:2*M,position:(e,a,n)=>{let i=_[n];if(F&&"all"===L||i!==g.s_.HydrogenBond&&(i!==g.s_.WeakHydrogenBond||"non-polar"===L))s.AO.set(e,O[P[n]],I[P[n]],A[P[n]]),s.AO.set(a,O[k[n]],I[k[n]],A[k[n]]);else{let o=w[D[P[n]]],l=w[D[k[n]]];G.invariantPosition(N[o],V),G.invariantPosition(N[l],j);let u=s.AO.distance(V,j),c=u;s.AO.copy(e,V),s.AO.copy(a,j);let d=i===g.s_.HydrogenBond?g.Te.HydrogenDonor:g.Te.WeakHydrogenDonor;E[D[P[n]]]===d?(0,T.rY)(t,o,(a,n)=>{if((0,y.oy)(r,t,N[n],"all")){G.invariantPosition(N[n],U);let t=s.AO.distance(U,j);t<u&&(u=t,s.AO.copy(e,U))}}):(0,T.rY)(t,l,(e,n)=>{if((0,y.oy)(r,t,N[n],"all")){G.invariantPosition(N[n],U);let e=s.AO.distance(U,V);e<c&&(c=e,s.AO.copy(a,U))}})}},style:e=>p.uj.Dashed,radius:e=>{m.element=N[w[D[P[e]]]];let t=a.size.size(m);return m.element=N[w[D[k[e]]]],Math.min(t,a.size.size(m))*R},ignore:e=>{if(B[e]===g.Bs.Filtered)return!0;if(f){if("stub"===z){let t=P[e];for(let e=D[t],r=D[t+1];e<r;++e){let t=N[w[D[e]]];if(!u.SortedArray.has(f.elements,t))return!0}}else if("full"===z||"between"===z){let t=!1,r=!1,a=P[e];
7319for(let e=D[a],r=D[a+1];e<r;++e){let r=N[w[D[e]]];u.SortedArray.has(f.elements,r)||(t=!0)}let n=k[e];for(let e=D[n],t=D[n+1];e<t;++e){let t=N[w[D[e]]];u.SortedArray.has(f.elements,t)||(r=!0)}return"full"===z?t&&r:t===r}else(0,x.UT)(z)}return!1}},n,i);if(q)H.setBoundingSphere(q);else if(H.triangleCount>0){let e=b.CP.expand((0,b.CP)(),(null!=f?f:t).boundary.sphere,1*R);H.setBoundingSphere(e)}return H}let O={...f.PO,...p.Vj,...S};function I(e){return(0,f.UJ)({defaultProps:a.e.getDefaultValues(O),createGeometry:C,createLocationIterator:E,getLoci:A,eachLocation:D,setUpdateState:(e,t,r,a,n,i,o)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.dashCount!==r.dashCount||t.dashScale!==r.dashScale||t.dashCap!==r.dashCap||t.radialSegments!==r.radialSegments||t.ignoreHydrogens!==r.ignoreHydrogens||t.ignoreHydrogensVariant!==r.ignoreHydrogensVariant||t.parentDisplay!==r.parentDisplay;let s=d.D.get(i.structure).version;e.info.interactionsHash!==s&&(e.createGeometry=!0,e.updateTransform=!0,e.updateColor=!0,e.info.interactionsHash=s)}},e)}function A(e,t,r){let{objectId:a,instanceId:n,groupId:i}=e;if(r===a){let{structure:e,group:r}=t,a=e.unitMap.get(r.units[n].id),o=d.D.get(e).value,{a:s,b:l}=o.unitsContacts.get(a.id);return h.yd.Loci(e,o,[{unitA:a,indexA:s[i],unitB:a,indexB:l[i]},{unitA:a,indexA:l[i],unitB:a,indexB:s[i]}])}return l.Rh}let w=new Set;function D(e,t,r,a){let n=!1;if(h.yd.isLoci(e)){let{structure:a,group:i}=t;if(!o.Structure.areEquivalent(e.data.structure,a))return!1;let s=d.D.get(a).value;if(e.data.interactions!==s)return!1;let l=i.units[0],c=s.unitsContacts.get(l.id),p=2*c.edgeCount;for(let t of e.elements){if(t.unitA!==t.unitB)continue;let e=i.unitIndexMap.get(t.unitA.id);if(void 0!==e){let a=c.getDirectedEdgeIndex(t.indexA,t.indexB);-1!==a&&r(u.Xp.ofSingleton(e*p+a))&&(n=!0)}}}else if(o.StructureElement.Loci.is(e)){let{structure:i,group:s}=t;if(!o.Structure.areEquivalent(e.structure,i))return!1;let l=d.D.get(i).value;if(!l)return!1;let c=s.units[0],p=l.unitsContacts.get(c.id),f=l.unitsFeatures.get(c.id),m=2*p.edgeCount,{offset:h}=p,{offsets:g,indices:b}=f.elementsIndex,{members:y,offsets:x}=f;for(let t of e.elements){let e=s.unitIndexMap.get(t.unit.id);void 0!==e&&(u.hU.forEach(t.indices,e=>{for(let t=g[e],r=g[e+1];t<r;++t){let e=b[t];for(let t=h[e],r=h[e+1];t<r;++t)w.add(t)}}
7319),w.forEach(i=>{if(a){let e=p.a[i];for(let r=x[e],a=x[e+1];r<a;++r)if(!u.hU.has(t.indices,y[r]))return;let r=p.b[i];for(let e=x[r],a=x[r+1];e<a;++e)if(!u.hU.has(t.indices,y[e]))return}r(u.Xp.ofSingleton(e*m+i))&&(n=!0)}),w.clear())}}return n}function E(e){let{structure:t,group:r}=e,a=r.units[0],n=d.D.get(t).value,i=n.unitsContacts.get(a.id),o=2*i.edgeCount,s=r.units.length,l=h.yd.Location(n,t),{element:u}=l;return(0,m.OF)(o,s,1,(e,t)=>{let a=r.units[t];return u.unitA=a,u.indexA=i.a[e],u.unitB=a,u.indexB=i.b[e],l})}var M=r(43091),P=r(91327);function k(e,t,r,a,n){if(!t.hasAtomic)return c.K.createEmpty(n);let i=o.StructureElement.Location.create(t),{contacts:l,unitsFeatures:f}=d.D.get(t).value,{edgeCount:m,edges:h}=l,{sizeFactor:S,ignoreHydrogens:C,ignoreHydrogensVariant:O,parentDisplay:I}=a;if(!m)return c.K.createEmpty(n);let{child:A}=t,w=(0,s.AO)(),D=(0,s.AO)(),E=(0,s.AO)(),{mesh:M,boundingSphere:P}=(0,p.fV)(e,{linkCount:m,position:(e,r,a)=>{let{unitA:n,indexA:i,unitB:o,indexB:l,props:{type:u}}=h[a],c=f.get(n),d=f.get(o),p=t.unitMap.get(n),m=t.unitMap.get(o);if(C&&"all"===O||u!==g.s_.HydrogenBond&&(u!==g.s_.WeakHydrogenBond||"non-polar"===O))s.AO.set(e,c.x[i],c.y[i],c.z[i]),s.AO.transformMat4(e,e,p.conformation.operator.matrix),s.AO.set(r,d.x[l],d.y[l],d.z[l]),s.AO.transformMat4(r,r,m.conformation.operator.matrix);else{let a=c.members[c.offsets[i]],n=d.members[d.offsets[l]];p.conformation.position(p.elements[a],D),m.conformation.position(m.elements[n],E);let o=s.AO.distance(D,E),f=o;s.AO.copy(e,D),s.AO.copy(r,E);let h=u===g.s_.HydrogenBond?g.Te.HydrogenDonor:g.Te.WeakHydrogenDonor;c.types[c.offsets[i]]===h?(0,T.KM)(t,p,a,(r,a)=>{let n=r.elements[a];if((0,y.oy)(t,r,n,"all")){r.conformation.position(n,w);let t=s.AO.distance(w,E);t<o&&(o=t,s.AO.copy(e,w))}}):(0,T.KM)(t,m,n,(e,a)=>{let n=e.elements[a];if((0,y.oy)(t,e,n,"all")){e.conformation.position(n,w);let t=s.AO.distance(w,D);t<f&&(f=t,s.AO.copy(r,w))}})}},style:e=>p.uj.Dashed,radius:e=>{let a=h[e],n=f.get(a.unitA);i.unit=t.unitMap.get(a.unitA),i.element=i.unit.elements[n.members[n.offsets[a.indexA]]];let o=r.size.size(i),s=f.get(a.unitB);return i.unit=t.unitMap.get(a.unitB),i.element=i.unit.elements[s.members[s.offsets[a.indexB]]],Math.min(o,r.size.size(i))*S},ignore:e=>{if(h[e].props.flag===g.Bs.Filtered)return!0;if(A){let r=h[e];if("stub"===I){let e=A.unitMap.get(r.unitA);if(!e)return!0;let a=t.unitMap.get(r.unitA),{offsets:n,members:i}=f.get(r.unitA);for(let t=n[r.indexA],o=n[r.indexA+1];t<o;++t){let r=a.elements[i[t]];if(!u.SortedArray.has(e.elements,r))return!0}}else if("full"===I||"between"===I){let e=!1,a=!1,n=A.unitMap.get(r.unitA);if(n){let a=t.unitMap.get(r.unitA),{offsets:i,members:o}=f.get(r.unitA);for(let t=i[r.indexA],s=i[r.indexA+1];t<s;++t){let r=a.elements[o[t]];u.SortedArray.has(n.elements,r)||(e=!0)}}else e=!0;let i=A.unitMap.get(r.unitB);if(i){let e=t.unitMap.get(r.unitB),{offsets:n,members:o}=f.get(r.unitB);for(let t=n[r.indexB],s=n[r.indexB+1];t<s;++t){let r=e.elements[o[t]];u.SortedArray.has(i.elements,r)||(a=!0)}}else a=!0;return"full"===I?e&&a:e===a}else(0,x.UT)(I)}return!1}},a,n);if(P)M.setBoundingSphere(P);else if(M.triangleCount>0){let{child:e}=t,r=b.CP.expand((0,b.CP)(),(null!=e?e:t).boundary.sphere,1*S);M.setBoundingSphere(r)}return M}let B={...M.kN,...p.Vj,...S};function _(e){return(0,M.uS)({defaultProps:a.e.getDefaultValues(B),createGeometry:k,createLocationIterator:N,getLoci:R,eachLocation:z,setUpdateState:(e,t,r,a,n,i,o)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.dashCount!==r.dashCount||t.dashScale!==r.dashScale||t.dashCap!==r.dashCap||t.radialSegments!==r.radialSegments||t.ignoreHydrogens!==r.ignoreHydrogens||t.ignoreHydrogensVariant!==r.ignoreHydrogensVariant||t.parentDisplay!==r.parentDisplay;let s=d.D.get(i).version;e.info.interactionsHash!==s&&(e.createGeometry=!0,e.updateTransform=!0,e.updateColor=!0,e.info.interactionsHash=s)}},e)}function R(e,t,r){let{objectId:a,groupId:n}=e;if(r===a){let e=d.D.get(t).value,r=e.contacts.edges[n],a=t.unitMap.get(r.unitA),i=t.unitMap.get(r.unitB);return h.yd.Loci(t,e,[{unitA:a,indexA:r.indexA,unitB:i,indexB:r.indexB},{unitA:i,indexA:r.indexB,unitB:a,indexB:r.indexA}])}return l.Rh}let F=new Map,L=new Set;function z(e,t,r,a){let n=!1;if(h.yd.isLoci(e)){if(!o.Structure.areEquivalent(e.data.structure,t))return!1;let a=d.D.get(t).value;if(e.data.interactions!==a)return!1;let{contacts:i}=a;for(let t of e.elements){let e=i.getEdgeIndex(t.indexA,t.unitA.id,t.indexB,t.unitB.id);-1!==e&&r(u.Xp.ofSingleton(e))&&(n=!0)}}
7319else if(o.StructureElement.Loci.is(e)){if(!o.Structure.areEquivalent(e.structure,t)||a&&1===e.elements.length)return!1;let i=d.D.get(t).value;if(!i)return!1;let{contacts:s,unitsFeatures:l}=i;for(let t of e.elements)F.set(t.unit.id,t.indices);for(let t of e.elements){let{unit:e}=t;P.fb.isAtomic(e)&&u.hU.forEach(t.indices,t=>{for(let r of s.getContactIndicesForElement(t,e))L.add(r)})}L.forEach(e=>{if(a){let{indexA:t,unitA:r,indexB:a,unitB:n}=s.edges[e],i=F.get(r),o=F.get(n);if(!i||!o)return;let{offsets:c,members:d}=l.get(r);for(let e=c[t],r=c[t+1];e<r;++e)if(!u.hU.has(i,d[e]))return;let{offsets:p,members:f}=l.get(n);for(let e=p[a],t=p[a+1];e<t;++e)if(!u.hU.has(o,f[e]))return}r(u.Xp.ofSingleton(e))&&(n=!0)}),F.clear(),L.clear()}return n}function N(e){let t=d.D.get(e).value,{contacts:r}=t,a=r.edgeCount,n=h.yd.Location(t,e),{element:i}=n;return(0,m.OF)(a,1,1,t=>{let a=r.edges[t];return i.unitA=e.unitMap.get(a.unitA),i.indexA=a.indexA,i.unitB=e.unitMap.get(a.unitB),i.indexB=a.indexB,n},!0)}var G=r(25945);let U={"intra-unit":(e,t)=>(0,i.kV)("Intra-unit interactions cylinder",e,t,I),"inter-unit":(e,t)=>(0,i.sh)("Inter-unit interactions cylinder",e,t,_)},V={...O,...B,unitKinds:(0,G.I4)(["atomic"]),sizeFactor:a.e.Numeric(.2,{min:.01,max:1,step:.01}),visuals:a.e.MultiSelect(["intra-unit","inter-unit"],a.e.objectToOptions(U))},j=(0,i.Xz)({name:"interactions",label:"Non-covalent Interactions",description:"Displays non-covalent interactions as dashed cylinders.",factory:function(e,t){return n.hX.createMulti("Interactions",e,t,i.U_,U)},getParams:function(e,t){return a.e.clone(V)},defaultValues:a.e.getDefaultValues(V),defaultColorTheme:{name:"interaction-type"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>e.elementCount>0&&d.D.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>d.D.attach(e,t,void 0,!0),detach:e=>d.D.ref(e,!1)},getData:(e,t)=>t.includeParent?e.asParent():e,mustRecreate:(e,t)=>e.includeParent!==t.includeParent})},85471:function(e,t,r){r.d(t,{qN:function(){return g}});var a=r(70371),n=r(14086),i=r(21300),o=r(65410),s=r(79455),l=r(48984),u=r(69062),c=r(28253);let d=(0,a.Il)(13421772),p=(0,a.E)({HydrogenBond:2851770,Hydrophobic:8421504,HalogenBond:4259775,Ionic:15779860,MetalCoordination:9191577,CationPi:16744448,PiStacking:9220966,WeakHydrogenBond:12967404}),f=[["Hydrogen Bond",p.HydrogenBond],["Hydrophobic",p.Hydrophobic],["Halogen Bond",p.HalogenBond],["Ionic",p.Ionic],["Metal Coordination",p.MetalCoordination],["Cation Pi",p.CationPi],["Pi Stacking",p.PiStacking],["Weak HydrogenBond",p.WeakHydrogenBond]];function m(e){switch(e){case o.s_.HydrogenBond:return p.HydrogenBond;case o.s_.Hydrophobic:return p.Hydrophobic;case o.s_.HalogenBond:return p.HalogenBond;case o.s_.Ionic:return p.Ionic;case o.s_.MetalCoordination:return p.MetalCoordination;case o.s_.CationPi:return p.CationPi;case o.s_.PiStacking:return p.PiStacking;case o.s_.WeakHydrogenBond:return p.WeakHydrogenBond;case o.s_.Unknown:return d}}let h={},g={name:"interaction-type",label:"Interaction Type",category:c.J.Misc,factory:function e(t,r){let a=t.structure?i.D.get(t.structure):void 0,n=a?(0,u.TO)(a.id,a.version):-1;return{factory:e,granularity:"group",color:a&&a.value?e=>{if(l.yd.isLocation(e)){let{unitsContacts:t,contacts:r}=e.data.interactions,{unitA:a,unitB:n,indexA:i,indexB:o}=e.element;if(a===n){let e=t.get(a.id),r=e.getDirectedEdgeIndex(i,o);return m(e.edgeProps.type[r])}{let e=r.getEdgeIndex(i,a.id,o,n.id);return m(r.edges[e].props.type)}}return d}:()=>d,props:r,contextHash:n,description:"Assigns colors according the interaction type of a link.",legend:(0,s.Z)(f)}},getParams:function(e){return h},defaultValues:n.e.getDefaultValues(h),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?i.D.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&i.D.ref(e.structure,!1)}}},6017:function(e,t,r){r.d(t,{g:function(){return S}});var a=r(14086),n=r(30502),i=r(34985),o=r(14507),s=r(84942),l=r(48502),u=r(34526),c=r(91044);let d=new n.Bond.ElementBondIterator,p=new n.Bond.ElementBondIterator,f=new n.Bond.ElementBondIterator,m=new n.Bond.ElementBondIterator,h={assignCharge:a.e.Select("auto",[["always","always"],["auto","auto"],["never","never"]]),assignH:a.e.Select("auto",[["always","always"],["auto","auto"],["never","never"]])};async function g(e,t,r){let g={...a.e.getDefaultValues(h),...r},b=new Map,y=`valence-model-${JSON.stringify(g)}`;for(let e=0,r=t.units.length;e<r;++e){let r=t.units[e];if(n.Unit.isAtomic(r)){let e;r.transientCache.has(y)?e=r.transientCache.get(y):(e=function(e,t,r){let a;let n=t.elements.length,h=new Int8Array(n),g=new Int8Array(n),b=new Int8Array(n),y=new Int8Array(n),x=!!e.parent;if(x){let r=e.root.unitMap.get(t.id);if((a=u.SortedArray.indicesOf(r.elements,t.elements)).length!==t.elements.length)throw Error("expected to find an index for every element");t=r,e=e.root}let S=!1;for(let e=0;e<n;++e){let r=x?a[e]:e;if((0,s.TZ)(t,r)===i.eK.H){S=!0;break}}for(let u=0;u<n;++u){let[n,T,C,O]=function(e,t,r,a,n){let u=(0,s.ls)(e,t,r,i.eK.H),h=(0,s.TZ)(t,r),g=(0,s.E3)(t,r),b="always"===a.assignCharge||"auto"===a.assignCharge&&0===g,y="al
7319ways"===a.assignH||"auto"===a.assignH&&!n&&0===u,x=(0,s.ui)(e,t,r),S=function(e,t,r){let a=0,{offset:n,edgeProps:{flags:i,order:o}}=t.bonds;for(let e=n[r],t=n[r+1];e<t;++e)c.BondType.isCovalent(i[e])&&(a+=o[e]);return e.interUnitBonds.getEdgeIndices(r,t.id).forEach(t=>{let r=e.interUnitBonds.edges[t];c.BondType.isCovalent(r.props.flag)&&(a+=r.props.order)}),a}(e,t,r),T=function(e,t,r){let a=(0,s.TZ)(t,r),n=a===i.eK.O||a===i.eK.N;if(n&&4===(0,s.ui)(e,t,r))return!1;for(d.setElement(e,t,r);d.hasNext;){let t=d.move();if(t.order>1)return!0;if(n){let r=(0,s.TZ)(t.otherUnit,t.otherIndex);for(p.setElement(e,t.otherUnit,t.otherIndex);p.hasNext;){let e=p.move();if(e.order>1){if((r===i.eK.P||r===i.eK.S)&&(0,s.TZ)(e.otherUnit,e.otherIndex)===i.eK.O)continue;return!0}}}}return!1}(e,t,r),C=S-x>0,O=0,I=o.Qq.Unknown;switch(h){case i.eK.H:b&&(0===x?(g=1,I=o.Qq.Spherical):1===x&&(g=0,I=o.Qq.Terminal));break;case i.eK.C:b&&(g=0),y&&(O=Math.max(0,4-S-Math.abs(g))),I=(0,o.Yz)(x+O+Math.max(0,-g));break;case i.eK.N:if(b){if(y){if(T&&S<4)g=x-u==1&&S-u==2?1:0;else for(f.setElement(e,t,r);f.hasNext;){let e=f.move(),t=(0,s.TZ)(e.otherUnit,e.otherIndex);if(t===i.eK.S||(0,i.IP)(t)){g=0;break}g=1}}else g=S-3}y&&(O=Math.max(0,3-S+g)),I=T&&!C?(0,o.Yz)(x+O-g):(0,o.Yz)(x+O+1-g);break;case i.eK.O:if(b&&(y||(g=S-2),1===S)){f.setElement(e,t,r);e:for(;f.hasNext;){let a=f.move();for(m.setElement(e,a.otherUnit,a.otherIndex);m.hasNext;){let e=m.move();if(!(e.otherUnit===t&&e.otherIndex===r)&&(0,s.TZ)(e.otherUnit,e.otherIndex)===i.eK.O&&2===e.order){g=-1;break e}}}}y&&(O=Math.max(0,2-S+g)),I=T&&!C?(0,o.Yz)(x+O-g+1):(0,o.Yz)(x+O-g+2);break;case i.eK.S:b&&!y&&(g=S<=3&&0===(0,s.ls)(e,t,r,i.eK.O)?S-2:0),y&&S<2&&(O=Math.max(0,2-S+g)),S<=3&&(I=(0,o.Yz)(x+O-g+2));break;case i.eK.F:case i.eK.CL:case i.eK.BR:case i.eK.I:case i.eK.AT:b&&(g=S-1);break;case i.eK.LI:case i.eK.NA:case i.eK.K:case i.eK.RB:case i.eK.CS:case i.eK.FR:b&&(g=1-S);break;case i.eK.BE:case i.eK.MG:case i.eK.CA:case i.eK.SR:case i.eK.BA:case i.eK.RA:b&&(g=2-S);break;default:l.Au&&console.warn("Requested charge, protonation for an unhandled element",h)}return[g,O,O+u,I]}(e,t,x?a[u]:u,r,S);h[u]=n,g[u]=T,b[u]=C,y[u]=O}return{charge:h,implicitH:g,totalH:b,idealGeometry:y}}(t,r,g),r.transientCache.set(y,e)),b.set(r.id,e)}}return b}var b=r(20292),y=r(67646);let x={...h},S=b.b.createProvider({label:"Valence Model",descriptor:(0,y.d)({name:"molstar_computed_valence_model"}),type:"local",defaultParams:x,getParams:e=>x,isApplicable:e=>!0,obtain:async(e,t,r)=>{let n={...a.e.getDefaultValues(x),...r};return{value:await g(e.runtime,t,n)}}})},71522:function(e,t,r){r.d(t,{ad:function(){return a},o0:function(){return n}});let a={kind:"null-location"};function n(e,t,r){return{kind:"data-location",tag:e,data:t,element:r}}},67589:function(e,t,r){r.d(t,{GK:function(){return g},Rh:function(){return y},SL:function(){return T},dh:function(){return S},h:function(){return b},jF:function(){return x},o_:function(){return a}});var a,n=r(30502),i=r(20341),o=r(93898),s=r(48930),l=r(87144),u=r(91327),c=r(14086),d=r(85764),p=r(83576),f=r(75042),m=r(40424),h=r(34526);let g={kind:"every-loci"};function b(e){return!!e&&"every-loci"===e.kind}let y={kind:"empty-loci"};function x(e){return!!e&&"empty-loci"===e.kind}function S(e){return!!e&&"data-loci"===e.kind}function T(e,t,r,a,n){return{kind:"data-loci",tag:e,data:t,elements:r,getBoundingSphere:a,getLabel:n}}!function(e){let t=new p.q("98");function r(e,t){var r;if("every-loci"!==e.kind&&"empty-loci"!==e.kind){if(t||(t=(0,s.CP)()),"structure-loci"===e.kind)return s.CP.copy(t,e.structure.boundary.sphere);if("element-loci"===e.kind)return s.CP.copy(t,n.StructureElement.Loci.getBoundary(e).sphere);if("bond-loci"===e.kind)return i.fY.getBoundingSphere(e,t);if("shape-loci"===e.kind)return s.CP.copy(t,e.shape.geometry.boundingSphere);else if("group-loci"===e.kind)return o.F.getBoundingSphere(e,t);else if("data-loci"===e.kind)return null===(r=e.getBoundingSphere)||void 0===r?void 0:r.call(e,t);else if("volume-loci"===e.kind)return m.f.getBoundingSphere(e.volume,t);else if("isosurface-loci"===e.kind)return m.f.Isosurface.getBoundingSphere(e.volume,e.isoValue,t);else if("cell-loci"===e.kind)return m.f.Cell.getBoundingSphere(e.volume,e.elements,t);else if("segment-loci"===e.kind)return m.f.Segment.getBoundingSphere(e.volume,e.elements,t)}}e.getBundleBoundingSphere=function(e){let a=e.loci.map(e=>r(e)).filter(e=>!!e);for(let e of(t.reset(),a))t.includePositionRadius(e.center,e.radius);for(let e of(t.finishedIncludeStep(),a))t.radiusPositionRadius(e.center,e.radius);return t.getSphere()},e.areEqual=function(e,t){return!!(b(e)&&b(t)||x(e)&&x(t))||(S(e)&&S(t)?function(e,t){if(!(0,d.wU)(e.data,t.data)||e.tag!==t.tag||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r)if(!(0,d.wU)(e.elements[r],t.elements[r]))return!1;return!0}(e,t):u.vA.isLoci(e)&&u.vA.isLoci(t)?u.vA.areLociEqual(e,t):n.StructureElement.Loci.is(e)&&n.StructureElement.Loci.is(t)?n.StructureElement.Loci.areEqual(e,t):i.fY.isLoci(e)&&i.fY.isLoci(t)?i.fY.areLociEqual(e,t):o.b.isLoci(e)&&o.b.isLoci(t)?o.b.areLociEqual(e,t):o.F.isLoci(e)&&o.F.isLoci(t)?o.F.areLociEqual(e,t):m.f.isLoci(e)&&m.f.isLoci(t)?m.f.areLociEqual(e,t):m.f.Isosurface.isLoci(e)&&m.f.Isosurface.isLoci(t)?m.f.Isosurface.areLociEqual(e,t):m.f.Cell.isLoci(e)&&m.f.Cell.isLoci(t)?m.f.Cell.areLociEqual(e,t):!!(m.f.Segment.isLoci(e)&&m.f.Segment.isLoci(t))&&m.f.Segment.areLociEqual(e,t))},e.isEvery=function(e){return!!e&&"every-loci"===e.kind},e.isEmpty=function(e){return!b(e)&&(!!x(e)||(S(e)?0===e.elements.length:u.vA.isLoci(e)?u.vA.isLociEmpty(e):n.StructureElement.Loci.is(e)?n.StructureElement.Loci.isEmpty(e):i.fY.isLoci(e)?i.fY.isLociEmpty(e):o.b.isLoci(e)?o.b.isLociEmpty(e):o.F.isLoci(e)?o.F.isLociEmpty(e):m.f.isLoci(e)?m.f.isLociEmpty(e):m.f.Isosurface.isLoci(e)?m.f.Isosurface.isLociEmpty(e):m.f.Cell.isLoci(e)?m.f.Cell.isLociEmpty(e):!!m.f.Segment.isLoci(e)&&m.f.Segment.isLociEmpty(e)))},e.remap=function(e,t){return t instanceof u.vA&&(n.StructureElement.Loci.is(e)?e=n.StructureElement.Loci.remap(e,t):u.vA.isLoci(e)?e=u.vA.remapLoci(e,t):i.fY.isLoci(e)&&(e=i.fY.remapLoci(e,t))),e},e.getBoundingSphere=r;let a=s.CP.zero();e.getCenter=function(e,t){let n=r(e,a);return n?l.AO.copy(t||(0,l.AO)(),n.center):void 0},e.getPrincipalAxes=function(e){if("every-loci"!==e.kind&&"empty-loci"!==e.kind){if("structure-loci"===e.kind)return n.StructureElement.Loci.getPrincipalAxes(u.vA.toStructureElementLoci(e.structure));if("element-loci"===e.kind)return n.StructureElement.Loci.getPrincipalAxes(e);if("bond-loci"===e.kind)return;else if("shape-loci"===e.kind)return;else if("group-loci"===e.kind)return;else if("data-loci"===e.kind)return;else if("volume-loci"===e.kind)return;else if("isosurface-loci"===e.kind)return;else if("cell-loci"===e.kind)return;else if("segment-loci"===e.kind)return}};let g={element:e=>e,residue:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeResidues(e,!0):e,chain:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeChains(e):e,entity:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeEntities(e):e,model:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeModels(e):e,operator:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToWholeOperators(e):e,structure:e=>n.StructureElement.Loci.is(e)?u.vA.toStructureElementLoci(e.structure):o.F.isLoci(e)?o.b.Loci(e.shape):m.f.Cell.isLoci(e)?m.f.Loci(e.volume,h.Xp.ofLength(e.volume.instances.length)):m.f.Isosurface.isLoci(e)?m.f.Loci(e.volume,h.Xp.ofLength(e.volume.instances.length)):e,elementInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(e):e,residueInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(n.StructureElement.Loci.extendToWholeResidues(e,!0)):e,chainInstances:e=>n.StructureElement.Loci.is(e)?n.StructureElement.Loci.extendToAllInstances(n.StructureElement.Loci.extendToWholeChains(e)):e};function y(e,t){return g[t](e)}e.GranularityOptions=c.e.objectToOptions(g,e=>{switch(e){case"element":return"Atom/Coarse Element";case"elementInstances":return["Atom/Coarse Element Instances","With Symmetry"];case"structure":return"Structure/Shape";default:return e.indexOf("Instances")?[(0,f.ce)(e),"With Symmetry"]:(0,f.ce)(e)}}),e.simpleGranularity=function(e){return e.replace("Instances","")},e.applyGranularity=y,e.normalize=function(e,t,r=!1){return("element"!==t||r)&&i.fY.isLoci(e)&&(e=i.fY.toStructureElementLoci(e)),u.vA.
7319isLoci(e)&&(e=u.vA.toStructureElementLoci(e.structure)),n.StructureElement.Loci.is(e)&&(e=n.StructureElement.Loci.remap(e,e.structure.root)),t&&(e=y(e,t)),e}}(a||(a={}))},93898:function(e,t,r){r.d(t,{F:function(){return a.F},b:function(){return a.b}});var a=r(2462)},2462:function(e,t,r){r.d(t,{F:function(){return n},b:function(){return a}});var a,n,i=r(85764),o=r(34526),s=r(11803),l=r(87144),u=r(48930),c=r(43398),d=r(87909),p=r(62590),f=r(41306),m=r(67241),h=r(72558);!function(e){function t(e){return{color:(0,p.lS)({shape:e},{}),size:(0,d.wo)({shape:e},{})}}function r(e){let t=e.transforms.length,r=n.Location(e);return(0,h.OF)(e.groupCount,t,1,(e,t)=>(r.group=e,r.instance=t,r))}function a(e,t,r,a,n){let i=n&&n.aTransform.ref.value.length>=16*e.length?n.aTransform.ref.value:new Float32Array(16*e.length);for(let t=0,r=e.length;t<r;++t)l.yb.toArray(e[t],i,16*t);return(0,f.pH)(i,e.length,t,r,a,n)}e.create=function(e,t,r,a,n,o,u,c){return{id:i.hb.create22(),name:e,sourceData:t,geometry:r,transforms:u||[l.yb.identity()],get groupCount(){return null!=c?c:s.Z.getGroupCount(r)},getColor:a,getSize:n,getLabel:o}},e.getTheme=t,e.groupIterator=r,e.createTransform=a,e.createRenderObject=function(e,n){let i=t(e),o=s.Z.getUtils(e.geometry),l=(0,m.xH)(),u=r(e),c=a(e.transforms,e.geometry.boundingSphere,n.cellSize,n.batchSize),d=o.createValues(e.geometry,c,u,i,n),p=o.createRenderableState(n);return(0,m.Hq)(e.geometry.kind,d,p,l)},e.Loci=function(e){return{kind:"shape-loci",shape:e}},e.isLoci=function(e){return!!e&&"shape-loci"===e.kind},e.areLociEqual=function(e,t){return e.shape===t.shape},e.isLociEmpty=function(e){return 0===e.shape.groupCount}}(a||(a={})),function(e){function t(e){let t=0;for(let r of e.groups)t+=o.hU.size(r.ids);return t}e.Location=function(e,t=0,r=0){return{kind:"group-location",shape:e,group:t,instance:r}},e.isLocation=function(e){return!!e&&"group-location"===e.kind},e.Loci=function(e,t){return{kind:"group-loci",shape:e,groups:t}},e.isLoci=function(e){return!!e&&"group-loci"===e.kind},e.areLociEqual=function(e,t){if(e.shape!==t.shape||e.groups.length!==t.groups.length)return!1;for(let r=0,a=e.groups.length;r<a;++r){let{ids:a,instance:n}=e.groups[r],{ids:i,instance:s}=t.groups[r];if(n!==s||!o.hU.areEqual(a,i))return!1}return!0},e.isLociEmpty=function(e){return 0===t(e)},e.size=t;let r=new c.B,a=l.AO.zero();function n(e,t,n,i){let{indices:s,offsets:u}=t;for(let{ids:t,instance:c}of e)o.hU.forEach(t,e=>{for(let t=u[e],o=u[e+1];t<o;++t)l.AO.fromArray(a,n,3*s[t]),l.AO.transformMat4(a,a,i[c]),r.includeStep(a)})}function i(e,t,n,i){let{indices:s,offsets:u}=t;for(let{ids:t,instance:c}of e)o.hU.forEach(t,e=>{for(let t=u[e],o=u[e+1];t<o;++t)l.AO.fromArray(a,n,3*s[t]),l.AO.transformMat4(a,a,i[c]),r.radiusStep(a)})}e.getBoundingSphere=function(e,t){t||(t=(0,u.CP)()),r.reset();let a=0,{geometry:s,transforms:c}=e.shape;if("mesh"===s.kind||"points"===s.kind){let t="mesh"===s.kind?s.vertexBuffer.ref.value:s.centerBuffer.ref.value;n(e.groups,s.groupMapping,t,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,t,c)}else if("lines"===s.kind){let t=s.startBuffer.ref.value,a=s.endBuffer.ref.value;n(e.groups,s.groupMapping,t,c),n(e.groups,s.groupMapping,a,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,t,c),i(e.groups,s.groupMapping,a,c)}else{if("spheres"!==s.kind&&"text"!==s.kind)return u.CP.copy(t,s.boundingSphere);let l=s.centerBuffer.ref.value;for(let{ids:t,instance:u}of(n(e.groups,s.groupMapping,l,c),r.finishedIncludeStep(),i(e.groups,s.groupMapping,l,c),e.groups))o.hU.forEach(t,t=>{let r=e.shape.getSize(t,u);a<r&&(a=r)})}return l.AO.copy(t.center,r.center),t.radius=Math.sqrt(r.radiusSq),u.CP.expand(t,t,a),t}}(n||(n={}))},1573:function(e,t,r){r.d(t,{f:function(){return a.f},r:function(){return n.r}});var a=r(40424),n=r(27203)},27203:function(e,t,r){r.d(t,{r:function(){return a}});var a,n=r(48930),i=r(87144),o=r(36111);function s(e,t,r,a){let n=(a-r)/t;0===n&&(n=1);let i=new Int32Array(t);for(let a=0,o=e.length;a<o;a++){let o=Math.floor((e[a]-r)/n);o>=t?o=t-1:o<0&&(o=0),i[o]++}return{min:r,max:a,binWidth:n,counts:i}}var l=r(23833);let u=i.AO.transformMat4,c=i.AO.lerp;!function(e){e.One={transform:{kind:"matrix",matrix:i.yb.identity()},cells:i.es.create(i.es.Space([1,1,1],[0,1,2]),i.es.Data1([0])),stats:{min:0,max:0,mean:0,sigma:0}};let t=(0,i.yb)(),r=(0,i.yb)();function a(e,t,r,a,n){let i=Math.trunc(e[0]),o=Math.trunc(e[1]),s=Math.trunc(e[2]);if(i<0||i>=t||o<0||o>=r||s<0||s>=a)return Number.NaN;let u=e[0]-i,c=e[1]-o,d=e[2]-s,p=Math.min(i+1,t-1),f=Math.min(o+1,r-1),m=Math.min(s+1,a-1),h=n(i,o,s),g=n(p,o,s),b=n(i,f,s),y=n(p,f,s),x=(0,l.t7)((0,l.t7)(h,g,u),(0,l.t7)(b,y,u),
7319c);h=n(i,o,m),g=n(p,o,m),b=n(i,f,m),y=n(p,f,m);let S=(0,l.t7)((0,l.t7)(h,g,u),(0,l.t7)(b,y,u),c);return(0,l.t7)(x,S,d)}e.getGridToCartesianTransform=function(e){if("matrix"===e.transform.kind)return i.yb.copy((0,i.yb)(),e.transform.matrix);if("spacegroup"===e.transform.kind){let{cells:{space:a}}=e,o=i.yb.fromScaling(t,i.AO.div((0,i.AO)(),n.XZ.size((0,i.AO)(),e.transform.fractionalBox),i.AO.ofArray(a.dimensions))),s=i.yb.fromTranslation(r,e.transform.fractionalBox.min);return i.yb.mul3((0,i.yb)(),e.transform.cell.fromFractional,s,o)}return i.yb.identity()},e.areEquivalent=function(e,t){return e===t},e.isEmpty=function(e){return 0===e.cells.data.length},e.getBoundingSphere=function(t,r){r||(r=(0,n.CP)());let a=t.cells.space.dimensions,i=e.getGridToCartesianTransform(t);return n.CP.fromDimensionsAndTransform(r,a,i)},e.getHistogram=function(e,t){let r=e._historams;return r||(r=e._historams={}),r[t]||(r[t]=function(e,t,r){if(r)return s(e,t,r.min,r.max);{let[r,a]=(0,o.V0)(e);return s(e,t,r,a)}}(e.cells.data,t,{min:e.stats.min,max:e.stats.max})),r[t]},e.makeGetTrilinearlyInterpolated=function(t,r){let n=e.getGridToCartesianTransform(t);i.yb.invert(n,n);let o=(0,i.AO)(),{stats:s}=t,{dimensions:l,get:c}=t.cells.space,d=t.cells.data,[p,f,m]=l,h=(e,t,r)=>c(d,e,t,r);return function(e){u(o,e,n);let t=a(o,p,f,m,h);return Number.isNaN(t)?t:"relative"===r?(t-s.mean)/s.sigma:t}},e.trilinearlyInterpolate=a;let d=(0,i.AO)(),p=(0,i.AO)(),f=(0,i.AO)(),m=(0,i.AO)(),h=(0,i.AO)(),g=(0,i.AO)(),b=(0,i.AO)(),y=(0,i.AO)();function x(e,t,r,a,n,i){let o=Math.trunc(e[0]),s=Math.trunc(e[1]),l=Math.trunc(e[2]);if(o<0||o>=t||s<0||s>=r||l<0||l>=a)return!1;let u=e[0]-o,x=e[1]-s,S=e[2]-l,T=Math.min(o+1,t-1),C=Math.min(s+1,r-1),O=Math.min(l+1,a-1);return n(o,s,l,d),n(T,s,l,p),n(o,C,l,f),n(T,C,l,m),c(h,d,p,u),c(g,f,m,u),c(b,h,g,x),n(o,s,O,d),n(T,s,O,p),n(o,C,O,f),n(T,C,O,m),c(h,d,p,u),c(g,f,m,u),c(y,h,g,x),c(i,b,y,S),!0}function S(e){if(e._gradients)return e._gradients;let t=function(e){let{dimensions:t,get:r,dataOffset:a}=e.cells.space,n=e.cells.data,[i,o,s]=t,l=i*o*s,u=new Float32Array(3*l),c=1/0,d=-1/0,p=0,f=0;for(let e=0;e<s;++e)for(let t=0;t<o;++t)for(let l=0;l<i;++l){let m=3*a(l,t,e),h=Math.max(0,l-1),g=Math.min(i-1,l+1),b=Math.max(0,t-1),y=Math.min(o-1,t+1),x=Math.max(0,e-1),S=Math.min(s-1,e+1),T=(r(n,g,t,e)-r(n,h,t,e))/(g-h||1),C=(r(n,l,y,e)-r(n,l,b,e))/(y-b||1),O=(r(n,l,t,S)-r(n,l,t,x))/(S-x||1);u[m]=T,u[m+1]=C,u[m+2]=O;let I=T*T+C*C+O*O;I<c&&(c=I),I>d&&(d=I),p+=I,f+=I*I}c===1/0&&(c=0),d===-1/0&&(d=1);let m=p/l,h=Math.sqrt(f/l);return{values:u,magnitude:{min:c=Math.sqrt(c),max:d=Math.sqrt(d),mean:m,sigma:h}}}(e);return e._gradients=t,t}e.trilinearlyInterpolateVec3=x,e.getGradients=S,e.makeGetInterpolatedGradient=function(e){let{values:t}=S(e),{dimensions:r,dataOffset:a}=e.cells.space,[n,i,o]=r,s=(e,r,n,i)=>{let o=3*a(e,r,n);i[0]=t[o],i[1]=t[o+1],i[2]=t[o+2]};return function(e,t){return x(e,n,i,o,s,t)}}}(a||(a={}))},40424:function(e,t,r){r.d(t,{f:function(){return a}});var a,n=r(27203),i=r(34526),o=r(48930),s=r(87144),l=r(83576),u=r(67370),c=r(22177),d=r(67646),p=r(14086),f=r(61445),m=r(23643);!function(e){let t;e.is=function(e){var t,r,a,n;return(null===(n=null===(a=null===(r=null===(t=null==e?void 0:e.grid)||void 0===t?void 0:t.cells)||void 0===r?void 0:r.space)||void 0===a?void 0:a.dimensions)||void 0===n?void 0:n.length)&&(null==e?void 0:e.sourceData)&&(null==e?void 0:e.customProperties)&&(null==e?void 0:e._propertyData)},function(e){function t(t,r){return"absolute"===t.kind?t:{kind:"absolute",absoluteValue:e.calcAbsolute(r,t.relativeValue)}}e.areSame=function(e,r,a){return(0,c.q)(t(e,a).absoluteValue,t(r,a).absoluteValue,a.sigma/100)},e.absolute=function(e){return{kind:"absolute",absoluteValue:e}},e.relative=function(e){return{kind:"relative",relativeValue:e}},e.calcAbsolute=function(e,t){return t*e.sigma+e.mean},e.calcRelative=function(e,t){return 0===e.sigma?0:(t-e.mean)/e.sigma},e.toAbsolute=t,e.toRelative=function(t,r){return"relative"===t.kind?t:{kind:"relative",relativeValue:e.calcRelative(r,t.absoluteValue)}},e.toString=function(e){return"relative"===e.kind?`${e.relativeValue.toFixed(2)} Ï`:`${e.absoluteValue.toPrecision(4)}`}}(t=e.IsoValue||(e.IsoValue={})),e.adjustedIsoValue=function(r,a,n){if("relative"===n)return t.relative(a);let i=t.absolute(a);if(m.I.is(r.sourceData)){let t={min:r.sourceData.data.volume_data_3d_info.min_source.value(0),max:r.sourceData.data.volume_data_3d_info.max_source.value(0),mean:r.sourceData.data.volume_data_3d_info.mean_source.value(0),sigma:r.sourceData.data.volume_data_3d_info.sigma_source.value(0)};return e.IsoValue.toRelative(i,t)}return i};let r={min:-1,max:1,mean:0,sigma:.1};function a(t,a){let i=a||r,{min:o,max:s,mean:l,sigma:u}=i,c=(o-l)/u,d=(s-l)/u,m=t;return"absolute"===t.kind?t.absoluteValue<o?m=e.IsoValue.absolute(o):t.absoluteValue>s&&(m=e.IsoValue.absolute(s)):t.relativeValue<c?m=e.IsoValue.relative(c):t.relativeValue>d&&(m=e.IsoValue.relative(d)),p.e.Conditioned(m,{absolute:p.e.Converted(t=>e.IsoValue.toAbsolute(t,n.r.One.stats).absoluteValue,t=>e.IsoValue.absolute(t),p.e.Numeric(l,{min:o,max:s,step:(0,f.Zd)(u/100,2)},{immediateUpdate:!0})),relative:p.e.Converted(t=>e.IsoValue.toRelative(t,n.r.One.stats).relativeValue,t=>e.IsoValue.relative(t),p.e.Numeric(Math.min(1,d),{min:c,max:d,step:(0,f.Zd)(Math.round((s-o)/u)/100,2)},{immediateUpdate:!0}))},e=>"absolute"===e.kind?"absolute":"relative",(t,r)=>"absolute"===r?e.IsoValue.toAbsolute(t,i):e.IsoValue.toRelative(t,i),{isEssential:!0})}function h(e,t){if(e.instances.length!==t.instances.length)return!1;for(let r=0,a=e.instances.length;r<a;++r)if(!s.yb.areEqual(e.instances[r].transform,t.instances[r].transform,c.I))return!1;return!0}function g(e){return n.r.isEmpty(e.grid)||0===e.instances.length}e.createIsoValueParam=a,e.IsoValueParam=a(e.IsoValue.relative(2)),e.One={label:"",grid:n.r.One,instances:[],sourceData:{kind:"",name:"",data:{}},customProperties:new d.S,_propertyData:Object.create(null)},e.areEquivalent=function(e,t){return n.r.areEquivalent(e.grid,t.grid)&&h(e,t)},e.areInstanceTransformsEqual=h,e.isEmpty=g,e.isOrbitals=function(e){return!!u.g.is(e.sourceData)&&e.sourceData.data.header.orbitals},e.Loci=function(e,t){return{kind:"volume-loci",volume:e,instances:t}}
7319,e.isLoci=function(e){return!!e&&"volume-loci"===e.kind},e.areLociEqual=function(e,t){return e.volume===t.volume&&i.hU.areEqual(e.instances,t.instances)},e.isLociEmpty=function(e){return g(e.volume)||i.hU.isEmpty(e.instances)},e.getBoundingSphere=function(e,t){return n.r.getBoundingSphere(e.grid,t)},function(t){t.Loci=function(e,t,r){return{kind:"isosurface-loci",volume:e,isoValue:t,instances:r}},t.isLoci=function(e){return!!e&&"isosurface-loci"===e.kind},t.areLociEqual=function(t,r){return t.volume===r.volume&&e.IsoValue.areSame(t.isoValue,r.isoValue,t.volume.grid.stats)&&i.hU.areEqual(t.instances,r.instances)},t.isLociEmpty=function(e){return g(e.volume)||i.hU.isEmpty(e.instances)};let r=(0,o.XZ)();t.getBoundingSphere=function(t,a,i){let l=e.IsoValue.toAbsolute(a,t.grid.stats).absoluteValue,u=l<0,c=[0,0,0],d=t.grid.cells.space.getCoords,p=t.grid.cells.data,[f,m,h]=t.grid.cells.space.dimensions,g=f-1,b=m-1,y=h-1,x=0,S=0,T=0;for(let e=0,t=p.length;e<t;++e)(u&&p[e]<=l||!u&&p[e]>=l)&&(d(e,c),c[0]<g&&(g=c[0]),c[1]<b&&(b=c[1]),c[2]<y&&(y=c[2]),c[0]>x&&(x=c[0]),c[1]>S&&(S=c[1]),c[2]>T&&(T=c[2]));s.AO.set(r.min,g-1,b-1,y-1),s.AO.set(r.max,x+1,S+1,T+1);let C=n.r.getGridToCartesianTransform(t.grid);return o.XZ.transform(r,r,C),o.CP.fromBox3D(i||(0,o.CP)(),r)}}(e.Isosurface||(e.Isosurface={})),function(e){e.Loci=function(e,t){return{kind:"cell-loci",volume:e,elements:t}},e.isLoci=function(e){return!!e&&"cell-loci"===e.kind},e.areLociEqual=function(e,t){if(e.volume!==t.volume||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r){let a=e.elements[r],n=t.elements[r];if(!i.hU.areEqual(a.instances,n.instances)||!i.hU.areEqual(a.indices,n.indices))return!1}return!0},e.isLociEmpty=function(e){for(let{indices:t,instances:r}of e.elements)if(!i.hU.isEmpty(r)||!i.hU.isEmpty(t))return!1;return!0},e.getLociSize=function(e){let t=0;for(let{indices:r,instances:a}of e.elements)t+=i.hU.size(r)*i.hU.size(a);return t},e.Location=function(e,t,r){return{kind:"cell-location",volume:e,cell:t,instance:r}},e.isLocation=function(e){return!!e&&"cell-location"===e.kind};let t=new l.q("98"),r=(0,s.AO)(),a=(0,s.AO)();e.getBoundingSphere=function(e,l,u){t.reset();let c=n.r.getGridToCartesianTransform(e.grid),{getCoords:d}=e.grid.cells.space;for(let{indices:n,instances:o}of l)for(let l=0,u=i.hU.size(n);l<u;l++){d(i.hU.getAt(n,l),r),s.AO.transformMat4(r,r,c);for(let n=0,l=i.hU.size(o);n<l;n++){let l=e.instances[i.hU.getAt(o,n)];s.AO.transformMat4(a,r,l.transform),t.includePosition(a)}}for(let{indices:n,instances:o}of(t.finishedIncludeStep(),l))for(let l=0,u=i.hU.size(n);l<u;l++){d(i.hU.getAt(n,l),r),s.AO.transformMat4(r,r,c);for(let n=0,l=i.hU.size(o);n<l;n++){let l=e.instances[i.hU.getAt(o,n)];s.AO.transformMat4(a,r,l.transform),t.radiusPosition(a)}}let p=t.getSphere(u);return o.CP.expand(p,p,10*s.yb.getMaxScaleOnAxis(c))}}(e.Cell||(e.Cell={})),function(t){t.Loci=function(e,t){return{kind:"segment-loci",volume:e,elements:t}},t.isLoci=function(e){return!!e&&"segment-loci"===e.kind},t.areLociEqual=function(e,t){if(e.volume!==t.volume||e.elements.length!==t.elements.length)return!1;for(let r=0,a=e.elements.length;r<a;++r){let a=e.elements[r],n=t.elements[r];if(!i.hU.areEqual(a.instances,n.instances)||!i.hU.areEqual(a.segments,n.segments))return!1}return!0},t.isLociEmpty=function(e){for(let{segments:t,instances:r}of e.elements)if(!i.hU.isEmpty(r)||!i.hU.isEmpty(t))return!1;return!0},t.getLociSize=function(e){let t=0;for(let{segments:r,instances:a}of e.elements)t+=i.hU.size(r)*i.hU.size(a);return t};let r=(0,o.XZ)(),a=(0,o.XZ)(),s=(0,o.XZ)();t.getBoundingSphere=function(t,l,u){let c=e.Segmentation.get(t);if(!c)return e.getBoundingSphere(t,u);{o.XZ.setEmpty(r);let e=n.r.getGridToCartesianTransform(t.grid);for(let{segments:n,instances:u}of l){o.XZ.setEmpty(a);for(let e=0,t=i.hU.size(n);e<t;e++){let t=i.hU.getAt(n,e),r=c.bounds[t];o.XZ.add(a,r.min),o.XZ.add(a,r.max)}o.XZ.transform(a,a,e);for(let e=0,n=i.hU.size(u);e<n;e++){let n=t.instances[i.hU.getAt(u,e)];o.XZ.transform(s,a,n.transform),o.XZ.addBox3D(r,s)}}return o.CP.fromBox3D(u||(0,o.CP)(),r)}},t.Location=function(e,t,r){return{kind:"segment-location",volume:e,segment:t,instance:r}},t.isLocation=function(e){return!!e&&"segment-location"===e.kind}}(e.Segment||(e.Segment={})),e.PickingGranularity={set(e,t){e._propertyData.__picking_granularity__=t},get(e){var t;return null!==(t=e._propertyData.__picking_granularity__)&&void 0!==t?t:"voxel"}},e.Segmentation={set(e,t){e._propertyData.__segmentation__=t},get:e=>e._propertyData.__segmentation__}}(a||(a={}))},95403:function(e,t,r){r.r(t),r.d(t,{DownloadFile:function(){return p},OpenFiles:function(){return d}});var a=r(67801),n=r(54854),i=r(59725),o=r(12845),s=r(14086),l=r(2546),u=r(72762);async function c(e,t,r,a){var n,i,s,l;let u=(0,o.W)(null!==(i=null===(n=e.file)||void 0===n?void 0:n.name)&&void 0!==i?i:""),c=t.dataFormats.binaryExtensions.has(u.ext),{data:d}=await t.builders.data.readFile({file:e,isBinary:c}),p="auto"===r?t.dataFormats.auto(u,null===(s=d.cell)||void 0===s?void 0:s.obj):t.dataFormats.get(r);if(!p){t.log.warn(`OpenFiles: could not find data provider for '${u.ext}
7319'`),await t.state.data.build().delete(d).commit();return}let f=await p.parse(t,d);a&&await (null===(l=p.visuals)||void 0===l?void 0:l.call(p,t,f))}let d=a.lQ.build({display:{name:"Open Files",description:"Load one or more files and optionally create default visuals"},from:u.G.Root,params:(e,t)=>{let{extensions:r,options:a}=t.dataFormats;return{files:s.e.FileList({accept:Array.from(r.values()).map(e=>`.${e}`).join(",")+",.gz,.zip",multiple:!0}),format:s.e.MappedStatic("auto",{auto:s.e.EmptyGroup(),specific:s.e.Select(a[0][0],a)}),visuals:s.e.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>n.iQ.create("Open Files",async a=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{if(null===e.files){r.log.error("No file(s) selected");return}for(let t of e.files)try{if(t.file&&t.name.toLowerCase().endsWith(".zip")){let n=await (0,l.Ri)(a,await t.file.arrayBuffer());for(let[t,a]of Object.entries(n)){if(!(a instanceof Uint8Array)||0===a.length)continue;let n=i.x.File(new File([a],t));await c(n,r,"auto",e.visuals)}}else{let a="auto"===e.format.name?"auto":e.format.params;await c(t,r,a,e.visuals)}}catch(e){console.error(e),r.log.error(`Error opening file '${t.name}'`)}}).runInContext(a)})),p=a.lQ.build({display:{name:"Download File",description:"Load one or more file from an URL"},from:u.G.Root,params:(e,t)=>{let r=[...t.dataFormats.options,["zip","Zip"],["gzip","Gzip"]];return{url:s.e.Url(""),format:s.e.Select(r[0][0],r),isBinary:s.e.Boolean(!1),visuals:s.e.Boolean(!0,{description:"Add default visuals"})}}})(({params:e,state:t},r)=>n.iQ.create("Open Files",async a=>{r.behaviors.layout.leftPanelTabName.next("data"),await t.transaction(async()=>{var t,n,s;try{if("zip"===e.format||"gzip"===e.format){let s=await r.builders.data.download({url:e.url,isBinary:!0});if("zip"===e.format){let n=await (0,l.Ri)(a,(null===(t=s.obj)||void 0===t?void 0:t.data).buffer);for(let[t,a]of Object.entries(n)){if(!(a instanceof Uint8Array)||0===a.length)continue;let n=i.x.File(new File([a],t));await c(n,r,"auto",e.visuals)}}else{let t=i.x.getUrl(e.url),a=(0,o.W)(t).name;await c(i.x.File(new File([null===(n=s.obj)||void 0===n?void 0:n.data],a)),r,"auto",e.visuals)}}else{let t=r.dataFormats.get(e.format);if(!t){r.log.warn(`DownloadFile: could not find data provider for '${e.format}'`);return}let a=await r.builders.data.download({url:e.url,isBinary:e.isBinary}),n=await t.parse(r,a);e.visuals&&await (null===(s=t.visuals)||void 0===s?void 0:s.call(t,r,n))}}catch(t){console.error(t),r.log.error(`Error downloading '${"string"==typeof e.url?e.url:e.url.url}'`)}}).runInContext(a)}))},123:function(e,t,r){r.r(t),r.d(t,{AddTrajectory:function(){return E},DownloadStructure:function(){return S},EnableModelCustomProps:function(){return w},EnableStructureCustomProps:function(){return D},LoadTrajectory:function(){return M},PdbDownloadProvider:function(){return x},UpdateTrajectory:function(){return A}});var a=r(67801),n=r(54854),i=r(14086),o=r(6333),s=r(45203),l=r(74272),u=r(72762),c=r(45366),d=r(46102),p=r(59725),f=r(19892),m=r(12845),h=r(97667),g=r(15867),b=r(57939);let y=e=>{let t=e.config.get(f.OW.Structure.DefaultRepresentationPreset)||o.F3.auto.id;return i.e.Group({type:l.$.getParams(void 0,"auto").type,representation:i.e.Select(t,e.builders.structure.representation.getPresets().map(e=>[e.id,e.display.name,e.display.group]),{description:"Which representation preset to use."}),representationParams:i.e.Group(o.oo.CommonParams,{isHidden:!0}),asTrajectory:i.e.Optional(i.e.Boolean(!1,{description:"Load all entries into a single trajectory."}))},{isExpanded:!1})},x={rcsb:i.e.Group({encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{label:"RCSB PDB",isFlat:!0}),pdbe:i.e.Group({variant:i.e.Select("updated-bcif",[["updated-bcif","Updated (bcif)"],["updated","Updated"],["archival","Archival"]])},{label:"PDBe",isFlat:!0}),pdbj:i.e.EmptyGroup({label:"PDBj"})},S=a.lQ.build({from:u.G.Root,display:{name:"Download Structure",description:"Load a structure from the provided source and create its representation."},params:(e,t)=>{let r=y(t),a=t.config.get(f.OW.Download.DefaultPdbProvider)||"pdbe";return{source:i.e.MappedStatic("pdb",{pdb:i.e.Group({provider:i.e.Group({id:i.e.Text("1tqn",{label:"PDB Id(s)",description:"One or more comma/space separated PDB ids."}),server:i.e.MappedStatic(a,x)},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB"}),"pdb-ihm":i.e.Group({provider:i.e.Group({id:i.e.Text("8zzc",{label:"PDB-IHM Id(s)",description:"One or more comma/space separated ids."}),encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"PDB-IHM"}),swissmodel:i.e.Group({id:i.e.Text("Q9Y2I8",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"SWISS-MODEL",description:"Loads the best homology model or experimental structure"}),alphafolddb:i.e.Group({provider:i.e.Group({id:i.e.Text("Q8W3K0",{label:"UniProtKB AC(s)",description:"One or more comma/space separated ACs."}),encoding:i.e.Select("bcif",i.e.arrayToOptions(["cif","bcif"]))},{pivot:"id"}),options:r},{isFlat:!0,label:"AlphaFold DB",description:"Loads the predicted model if available"}),modelarchive:i.e.Group({id:i.e.Text("ma-bak-cepc-0003",{label:"Accession Code(s)",description:"One or more comma/space separated ACs."}),options:r},{isFlat:!0,label:"Model Archive"}),pubchem:i.e.Group({id:i.e.Text("2244,2245",{label:"PubChem ID",description:"One or more comma/space separated IDs."}),options:r},{isFlat:!0,label:"PubChem",description:"Loads 3D conformer from PubChem."}),url:i.e.Group({url:i.e.Url(""),format:i.e.Select("mmcif",i.e.arrayToOptions(s.pB.map(e=>e[0]),e=>e)),isBinary:i.e.Boolean(!1),label:i.e.Optional(i.e.Text("")),options:r},{isFlat:!0,label:"URL"})})}}})(({params:e,state:t},r)=>n.iQ.create("Download Structure",async a=>{let n;r.behaviors.layout.leftPanelTabName.next("data");let i=e.source,s=!1,l="mmcif";
7319switch(i.name){case"url":n=[{url:i.params.url,isBinary:i.params.isBinary,label:i.params.label||void 0}],l=i.params.format;break;case"pdb":n=await ("pdbe"===i.params.provider.server.name?C(i):"pdbj"===i.params.provider.server.name?O(i):"rcsb"===i.params.provider.server.name?I(i):(0,h.UT)(i)),s=!!i.params.options.asTrajectory;break;case"pdb-ihm":let u=e=>e.startsWith("PDBDEV_")?e:`PDBDEV_${e.padStart(8,"0")}`;n=await T(i.params.provider.id,e=>{if(null!==e.match(/^[1-9][A-Z0-9]{3}$/i))return"bcif"===i.params.provider.encoding?`https://pdb-ihm.org/bcif/${e.toLowerCase()}.bcif`:`https://pdb-ihm.org/cif/${e.toLowerCase()}.cif`;let t=u(e.toUpperCase());return"bcif"===i.params.provider.encoding?`https://pdb-ihm.org/bcif/${t}.bcif`:`https://pdb-ihm.org/cif/${t}.cif`},e=>{let t=e.toUpperCase();return t.match(/^[1-9][A-Z0-9]{3}$/)?`PDB-IHM: ${t}`:u(t)},"bcif"===i.params.provider.encoding),s=!!i.params.options.asTrajectory;break;case"swissmodel":n=await T(i.params.id,e=>`https://swissmodel.expasy.org/repository/uniprot/${e.toUpperCase()}.pdb`,e=>`SWISS-MODEL: ${e}`,!1),s=!!i.params.options.asTrajectory,l="pdb";break;case"alphafolddb":n=await T(i.params.provider.id,async e=>{let t=`https://www.alphafold.ebi.ac.uk/api/prediction/${e.toUpperCase()}`,a=await r.runTask(r.fetch({url:t,type:"json"}));if(Array.isArray(a)&&a.length>0){let e="bcif"===i.params.provider.encoding?"bcifUrl":"cifUrl";return a[0][e]}throw Error(`No AlphaFold DB entry for '${e}'`)},e=>`AlphaFold DB: ${e}`,"bcif"===i.params.provider.encoding),s=!!i.params.options.asTrajectory,l="mmcif";break;case"modelarchive":n=await T(i.params.id,e=>`https://www.modelarchive.org/doi/10.5452/${e.toLowerCase()}.cif`,e=>`Model Archive: ${e}`,!1),s=!!i.params.options.asTrajectory,l="mmcif";break;case"pubchem":n=await T(i.params.id,e=>`https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound/CID/${e.trim()}/record/SDF/?record_type=3d`,e=>`PubChem: ${e}`,!1),s=!!i.params.options.asTrajectory,l="mol";break;default:(0,h.UT)(i)}let c=e.source.params.options.representation||r.config.get(f.OW.Structure.DefaultRepresentationPreset)||o.F3.auto.id,d=c!==o.F3.empty.id,p="auto"===i.params.options.type.name?void 0:i.params.options.type;await t.transaction(async()=>{if(n.length>0&&s){let t=await r.builders.data.downloadBlob({sources:n.map((e,t)=>({id:""+t,url:e.url,isBinary:e.isBinary})),maxConcurrency:6},{state:{isGhost:!0}}),a=await r.builders.structure.parseTrajectory(t,{formats:n.map((e,t)=>({id:""+t,format:"cif"}))});await r.builders.structure.hierarchy.applyPreset(a,"default",{structure:p,showUnitcell:d,representationPreset:c,representationPresetParams:e.source.params.options.representationParams})}else for(let t of n){let a=await r.builders.data.download(t,{state:{isGhost:!0}}),n=r.dataFormats.get(l);if(!n)throw Error("unknown file format");let i=await r.builders.structure.parseTrajectory(a,n);await r.builders.structure.hierarchy.applyPreset(i,"default",{structure:p,showUnitcell:d,representationPreset:c,representationPresetParams:e.source.params.options.representationParams})}}).runInContext(a)}));async function T(e,t,r,a){let n=e.split(/[,\s]/).map(e=>e.trim()).filter(e=>!!e&&(e.length>=4||/^[1-9][0-9]*$/.test(e))),i=[];for(let e of n)i.push({url:p.x.Url(await t(e)),isBinary:a,label:r(e)});return i}async function C(e){if("pdb"!==e.name||"pdbe"!==e.params.provider.server.name)throw Error("expected pdbe");return"updated"===e.params.provider.server.params.variant?T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/static/entry/${e.toLowerCase()}_updated.cif`,e=>`PDBe: ${e} (updated cif)`,!1):"updated-bcif"===e.params.provider.server.params.variant?T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/entry-files/download/${e.toLowerCase()}.bcif`,e=>`PDBe: ${e} (updated cif)`,!0):T(e.params.provider.id,e=>`https://www.ebi.ac.uk/pdbe/static/entry/${e.toLowerCase()}.cif`,e=>`PDBe: ${e} (cif)`,!1)}async function O(e){if("pdb"!==e.name||"pdbj"!==e.params.provider.server.name)throw Error("expected pdbj");return T(e.params.provider.id,e=>`https://data.pdbjlc1.pdbj.org/pub/pdb/data/structures/divided/mmCIF/${e.toLowerCase().substring(1,3)}/${e.toLowerCase()}.cif`,e=>`PDBj: ${e} (cif)`,!1)}async function I(e){if("pdb"!==e.name||"rcsb"!==e.params.provider.server.name)throw Error("expected rcsb");return"cif"===e.params.provider.server.params.encoding?T(e.params.provider.id,e=>`https://files.rcsb.org/download/${e.toUpperCase()}.cif`,e=>`RCSB PDB: ${e} (cif)`,!1):T(e.params.provider.id,e=>`https://models.rcsb.org/${e.toUpperCase()}.bcif`,e=>`RCSB PDB: ${e} (bcif)`,!0)}let A=a.lQ.build({display:{name:"Update Trajectory"},params:{action:i.e.Select("advance",i.e.arrayToOptions(["advance","reset"])),by:i.e.Optional(i.e.Numeric(1,{min:-1,max:1,step:1}))}})(({params:e,state:t})=>{let r=t.selectQ(e=>e.ofTransformer(c.L.Model.ModelFromTrajectory)),n=t.build();if("reset"===e.action)for(let e of r)n.to(e).update({modelIndex:0});
7319else for(let i of r){let r=a.tE.findAncestorOfType(t.tree,t.cells,i.transform.ref,u.G.Molecule.Trajectory);if(!r||!r.obj)continue;let o=r.obj;n.to(i).update(t=>{let r=(t.modelIndex+e.by)%o.data.frameCount;return r<0&&(r+=o.data.frameCount),{modelIndex:r}})}return t.updateTree(n)}),w=a.lQ.build({display:{name:"Custom Model Properties",description:"Enable parameters for custom properties of the model."},from:u.G.Molecule.Model,params:(e,t)=>t.customModelProperties.getParams(null==e?void 0:e.data),isApplicable:(e,t,r)=>t.transformer!==d.CustomModelProperties})(({ref:e,params:t},r)=>r.builders.structure.insertModelProperties(e,t)),D=a.lQ.build({display:{name:"Custom Structure Properties",description:"Enable parameters for custom properties of the structure."},from:u.G.Molecule.Structure,params:(e,t)=>t.customStructureProperties.getParams(null==e?void 0:e.data),isApplicable:(e,t,r)=>t.transformer!==d.CustomStructureProperties})(({ref:e,params:t},r)=>r.builders.structure.insertStructureProperties(e,t)),E=a.lQ.build({display:{name:"Add Trajectory",description:"Add trajectory from existing model/topology and coordinates."},from:u.G.Root,params(e,t){let r=t.state.data,a=[...r.selectQ(e=>e.rootsOfType(u.G.Molecule.Model)),...r.selectQ(e=>e.rootsOfType(u.G.Molecule.Topology))].map(e=>[e.transform.ref,e.obj.label]),n=r.selectQ(e=>e.rootsOfType(u.G.Molecule.Coordinates)).map(e=>[e.transform.ref,e.obj.label]);return{model:i.e.Select(a.length?a[0][0]:"",a),coordinates:i.e.Select(n.length?n[0][0]:"",n)}}})(({params:e,state:t},r)=>n.iQ.create("Add Trajectory",a=>t.transaction(async()=>{let n=[e.model,e.coordinates],i=t.build().toRoot().apply(d.TrajectoryFromModelAndCoordinates,{modelRef:e.model,coordinatesRef:e.coordinates},{dependsOn:n}).apply(c.L.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(i).runInContext(a);let o=await r.builders.structure.createStructure(i.selector);await r.builders.structure.representation.applyPreset(o,"auto")}).runInContext(a))),M=a.lQ.build({display:{name:"Load Trajectory",description:"Load trajectory of model/topology and coordinates from URL or file."},from:u.G.Root,params(e,t){let{options:r}=t.dataFormats,a=r.filter(e=>e[2]===s.PF||e[2]===g.m2),n=r.filter(e=>e[2]===b.zp),o=[],l=[];for(let{provider:e}of t.dataFormats.list)e.category===s.PF||e.category===g.m2?(e.binaryExtensions&&o.push(...e.binaryExtensions),e.stringExtensions&&o.push(...e.stringExtensions)):e.category===b.zp&&(e.binaryExtensions&&l.push(...e.binaryExtensions),e.stringExtensions&&l.push(...e.stringExtensions));return{source:i.e.MappedStatic("file",{url:i.e.Group({model:i.e.Group({url:i.e.Url(""),format:i.e.Select(a[0][0],a),isBinary:i.e.Boolean(!1)},{isExpanded:!0}),coordinates:i.e.Group({url:i.e.Url(""),format:i.e.Select(n[0][0],n)},{isExpanded:!0})},{isFlat:!0}),file:i.e.Group({model:i.e.File({accept:o.map(e=>`.${e}`).join(","),label:"Model"}),coordinates:i.e.File({accept:l.map(e=>`.${e}`).join(","),label:"Coordinates"})},{isFlat:!0})},{options:[["url","URL"],["file","File"]]})}}})(({params:e,state:t},r)=>n.iQ.create("Load Trajectory",a=>t.transaction(async()=>{let n=e.source;if("file"===n.name&&(null===n.params.model||null===n.params.coordinates)){r.log.error("No file(s) selected");return}if("url"===n.name&&(!n.params.model||!n.params.coordinates)){r.log.error("No URL(s) given");return}let i=async(e,t,a)=>{let n=await r.builders.data.download({url:e,isBinary:a}),i=r.dataFormats.get(t);if(!i){r.log.warn(`LoadTrajectory: could not find data provider for '${t}'`);return}return i.parse(r,n)},o=async e=>{var t,a,n;if(!e)throw Error("No file selected");let i=(0,m.W)(null!==(a=null===(t=e.file)||void 0===t?void 0:t.name)&&void 0!==a?a:""),o=r.dataFormats.binaryExtensions.has(i.ext),{data:s}=await r.builders.data.readFile({file:e,isBinary:o}),l=r.dataFormats.auto(i,null===(n=s.cell)||void 0===n?void 0:n.obj);if(!l){r.log.warn(`LoadTrajectory: could not find data provider for '${i.ext}'`),await r.state.data.build().delete(s).commit();return}return l.parse(r,s)};try{let e;let s="url"===n.name?await i(n.params.model.url,n.params.model.format,n.params.model.isBinary):await o(n.params.model);e="trajectory"in s?await t.build().to(s.trajectory).apply(d.ModelFromTrajectory,{modelIndex:0}).commit():s.topology;let l="url"===n.name?await i(n.params.coordinates.url,n.params.coordinates.format,!0):await o(n.params.coordinates),u=[e.ref,l.ref],p=t.build().toRoot().apply(d.TrajectoryFromModelAndCoordinates,{modelRef:e.ref,coordinatesRef:l.ref},{dependsOn:u}).apply(c.L.Model.ModelFromTrajectory,{modelIndex:0});await t.updateTree(p).runInContext(a);let f=await r.builders.structure.createStructure(p.selector);await r.builders.structure.representation.applyPreset(f,"auto")}catch(e){console.error(e),r.log.error("Error loading trajectory")}}).runInContext(a)))},5932:function(e,t,r){r.d(t,{D:function(){return l},Z:function(){return u}});var a=r(2622),n=r(24641),i=r(14086),o=r(29414);async function s(e,t,r=!1){var n,o,s,l,u,c,d;if(t.data&&await e.runTask(e.state.data.setSnapshot(t.data)),null===(n=t.canvas3d)||void 0===n?void 0:n.props){let r=i.e.normalizeParams(a.h4,t.canvas3d.props,"children");((null===(o=t.camera)||void 0===o?void 0:o.current)||(null===(s=t.camera)||void 0===s?void 0:s.focus))&&(r.camera=void 0,r.cameraClipping=void 0,r.cameraFog=void 0),null===(l=e.canvas3d)||void 0===l||l.setProps(r)}
7319(null===(u=t.camera)||void 0===u?void 0:u.current)?null===(c=e.canvas3d)||void 0===c||c.requestCameraReset({snapshot:t.camera.current,durationMs:r||"instant"===t.camera.transitionStyle?0:t.camera.transitionDurationInMs}):(null===(d=t.camera)||void 0===d?void 0:d.focus)&&e.managers.camera.focusObject({...t.camera.focus,durationMs:r||"instant"===t.camera.transitionStyle?0:t.camera.transitionDurationInMs})}let l=o.q.create({name:"built-in.animate-state-snapshots",display:{name:"State Snapshots"},isExportable:!0,params:()=>({}),canApply(e){let t=e.managers.snapshot.state.entries;return t.size<1?{canApply:!1,reason:"At least 1 state required."}:t.some(e=>!!(null==e?void 0:e.snapshot.startAnimation))?{canApply:!1,reason:"Nested animations not supported."}:{canApply:e.managers.snapshot.state.entries.size>0}},setup(e,t,r){let a=r.managers.snapshot.state.entries.get(0);s(r,a.snapshot,!0)},getDuration:(e,t)=>({kind:"fixed",durationMs:t.managers.snapshot.state.entries.toArray().reduce((e,t)=>{var r;return e+(null!==(r=t.snapshot.durationInMs)&&void 0!==r?r:0)},0)}),initialState:(e,t)=>{let r=t.managers.snapshot.state.entries.toArray();return{totalDuration:r.reduce((e,t)=>{var r;return e+(null!==(r=t.snapshot.durationInMs)&&void 0!==r?r:0)},0),snapshots:r,currentIndex:0,currentTransitionFrame:0}},async apply(e,t,r){var a;if(t.current>=e.totalDuration)return{kind:"finished"};let i=0,o=0,l=0;for(let r of e.snapshots){if(l=t.current-i,i+=null!==(a=r.snapshot.durationInMs)&&void 0!==a?a:0,t.current<i)break;o++}if(o>=e.snapshots.length)return{kind:"finished"};let{transition:u,camera:c,canvas3d:d}=e.snapshots[o].snapshot,p=n.B.getStateTransitionFrameIndex(e.snapshots[o].snapshot,l);return u&&void 0!==p?o===e.currentIndex&&p===e.currentTransitionFrame?{kind:"skip"}:(0===p||o!==e.currentIndex?await s(r.plugin,{...u.frames[p],camera:c,canvas3d:d}):await s(r.plugin,u.frames[p]),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:p}}):o===e.currentIndex?{kind:"skip"}:(await s(r.plugin,e.snapshots[o].snapshot),{kind:"next",state:{...e,currentIndex:o,currentAnimationFrame:void 0}})}}),u=o.q.create({name:"built-in.animate-state-snapshot-transition",display:{name:"State Snapshot Transition"},isExportable:!0,params:()=>({}),canApply(e){let{snapshot:t}=e.managers,{current:r}=t;return(null==r?void 0:r.snapshot.transition)?{canApply:!0}:{canApply:!1,reason:"No transition found"}},setup(e,t,r){var a,n;let{current:i}=r.managers.snapshot;i&&s(r,null!==(n=null===(a=i.snapshot.transition)||void 0===a?void 0:a.frames[0])&&void 0!==n?n:i.snapshot,!0)},getDuration:(e,t)=>{var r,a;let{current:i}=t.managers.snapshot;return(null==i?void 0:i.snapshot.transition)?(null===(r=i.snapshot.transition)||void 0===r?void 0:r.loop)?{kind:"infinite"}:{kind:"fixed",durationMs:null!==(a=n.B.getStateTransitionDuration(i.snapshot))&&void 0!==a?a:0}:{kind:"fixed",durationMs:0}},initialState:(e,t)=>{var r,a;let{current:i}=t.managers.snapshot;if(i)return{totalDuration:(null===(r=i.snapshot.transition)||void 0===r?void 0:r.loop)?Number.MAX_VALUE:null!==(a=n.B.getStateTransitionDuration(i.snapshot))&&void 0!==a?a:0,snapshots:[i],currentIndex:0,currentTransitionFrame:void 0,isInitial:!0}},async apply(e,t,r){var a;let i=null===(a=e.snapshots[0])||void 0===a?void 0:a.snapshot;if(t.current>=e.totalDuration){if((null==i?void 0:i.transition)&&e.isInitial){let t=i.transition.frames.length-1;r.plugin.managers.snapshot.setSnapshotAnimationFrame(e.totalDuration,!1),await s(r.plugin,i.transition.frames[t])}return{kind:"finished"}}if(!i)return{kind:"finished"};let{transition:o,camera:l,canvas3d:u}=i,c=n.B.getStateTransitionFrameIndex(i,t.current);return o&&void 0!==c?c===e.currentTransitionFrame?{kind:"skip"}:(r.plugin.managers.snapshot.setSnapshotAnimationFrame(t.current,!1),0===c?await s(r.plugin,{...o.frames[c],camera:l,canvas3d:u}):await s(r.plugin,o.frames[c]),{kind:"next",state:{...e,currentAnimationFrame:c,isInitial:!1}}):{kind:"finished"}}})},29414:function(e,t,r){var a,n;r.d(t,{q:function(){return a}}),(n=a||(a={})).create=function(e){return e},n.getDuration=function(e,t){var r,a;if(t.customDurationMs)return t.customDurationMs;let n=null===(a=(r=t.definition).getDuration)||void 0===a?void 0:a.call(r,t.params,e);if((null==n?void 0:n.kind)==="fixed")return n.durationMs}},6333:function(e,t,r){r.d(t,{F3:function(){return B},oo:function(){return y}});var a,n=r(14086),i=r(54185),o=r(30502),s=r(67801),l=r(80541),u=r(19892),c=r(3305),d=r(43015),p=r(16454),f=r(54521),m=r(7164),h=r(64919),g=r(97667),b=r(43975);function y(e){return e}(a=y||(y={})).CommonParams={ignoreHydrogens:n.e.Optional(n.e.Boolean(!1)),ignoreHydrogensVariant:n.e.Optional(n.e.Select("all",n.e.arrayToOptions(["all","non-polar"]))),ignoreLight:n.e.Optional(n.e.Boolean(!1)),quality:n.e.Optional(n.e.Select("auto",i.w_)),theme:n.e.Optional(n.e.Group({globalName:n.e.Optional(n.e.Text("")),globalColorParam
7319s:n.e.Optional(n.e.Value({},{isHidden:!0})),carbonColor:n.e.Optional(n.e.Select("chain-id",n.e.arrayToOptions(["chain-id","operator-name","element-symbol"]))),symmetryColor:n.e.Optional(n.e.Text("")),symmetryColorParams:n.e.Optional(n.e.Value({},{isHidden:!0})),focus:n.e.Optional(n.e.Group({name:n.e.Optional(n.e.Text("")),params:n.e.Optional(n.e.Value({}))}))}))},a.reprBuilder=function(e,t,r){var a,n,i,o,s,l,u,c,d,m,h,g,b,y,x;let S=e.state.data.build(),T=e.builders.structure.representation,C=e.managers.structure.component.state.options.hydrogens,O={quality:e.managers.structure.component.state.options.visualQuality,ignoreHydrogens:"all"!==C,ignoreHydrogensVariant:"only-polar"===C?"non-polar":"all",ignoreLight:e.managers.structure.component.state.options.ignoreLight};t.quality&&"auto"!==t.quality&&(O.quality=t.quality),void 0!==t.ignoreHydrogens&&(O.ignoreHydrogens=!!t.ignoreHydrogens),void 0!==t.ignoreHydrogensVariant&&(O.ignoreHydrogensVariant=t.ignoreHydrogensVariant),void 0!==t.ignoreLight&&(O.ignoreLight=!!t.ignoreLight);let I=(null===(a=t.theme)||void 0===a?void 0:a.globalName)?null===(n=t.theme)||void 0===n?void 0:n.globalName:void 0,A=(null===(i=t.theme)||void 0===i?void 0:i.carbonColor)!==void 0?{carbonColor:"chain-id"===(x=null===(o=t.theme)||void 0===o?void 0:o.carbonColor)?{name:x,params:p.WT.defaultValues}:"operator-name"===x?{name:x,params:f.Zs.defaultValues}:{name:x,params:{}},...null===(s=t.theme)||void 0===s?void 0:s.globalColorParams}:{...null===(l=t.theme)||void 0===l?void 0:l.globalColorParams},w=r&&(null===(u=t.theme)||void 0===u?void 0:u.symmetryColor)&&r.units.some(e=>!e.conformation.operator.assembly&&e.conformation.operator.spgrOp>=0)?null===(c=t.theme)||void 0===c?void 0:c.symmetryColor:I;return{update:S,builder:T,color:I,symmetryColor:w,symmetryColorParam
7319s:(null===(d=t.theme)||void 0===d?void 0:d.symmetryColorParams)?{...null===(m=t.theme)||void 0===m?void 0:m.globalColorParams,...null===(h=t.theme)||void 0===h?void 0:h.symmetryColorParams}:{...null===(g=t.theme)||void 0===g?void 0:g.globalColorParams},globalColorParams:(null===(b=t.theme)||void 0===b?void 0:b.globalColorParams)?{...null===(y=t.theme)||void 0===y?void 0:y.globalColorParams}:void 0,typeParams:O,ballAndStickColor:A}},a.updateFocusRepr=function(e,t,r,a){if(e.state.hasBehavior(c.Y))return e.state.updateBehavior(c.Y,n=>{let i=(0,d.al)(e,t,"ball-and-stick",r||"element-symbol",a);n.surroundingsParams.colorTheme=i,n.targetParams.colorTheme=i})};let x=y.CommonParams,S=y.reprBuilder,T=y.updateFocusRepr,C=y({id:"preset-structure-representation-auto",display:{name:"Automatic",description:"Show representations based on the size of the structure. Smaller structures are shown with more detail than larger ones, ranging from atomistic display to coarse surfaces."},params:()=>x,apply(e,t,r){var a,n;let i=null===(n=null===(a=s.ze.resolveAndCheck(r.state.data,e))||void 0===a?void 0:a.obj)||void 0===n?void 0:n.data;if(!i)return{};let l=r.config.get(u.OW.Structure.SizeThresholds)||o.Structure.DefaultSizeThresholds,c=o.Structure.getSize(i,l),d=i.polymerResidueCount/i.polymerGapCount;switch(c){case o.Structure.Size.Gigantic:case o.Structure.Size.Huge:return D.apply(e,t,r);case o.Structure.Size.Large:return E.apply(e,t,r);case o.Structure.Size.Medium:if(d>3)return A.apply(e,t,r);case o.Structure.Size.Small:return M.apply(e,{...t,showCarbohydrateSymbol:!0},r);default:(0,g.UT)(c)}}}),O=y({id:"preset-structure-representation-empty",display:{name:"Empty",description:"Removes all existing representations."},apply:async(e,t,r)=>({})}),I="Basic",A=y({id:"preset-structure-representation-polymer-and-ligand",display:{name:"Polymer & Ligand",group:I,description:"Shows polymers as Cartoon, ligands as Ball & Stick, carbohydrates as 3D-SNFG and water molecules semi-transparent."},params:()=>x,async apply(e,t,r){var a,n,i,o,l,u,c,d,p,f;let m=s.ze.resolveAndCheck(r.state.data,e);if(!m)return{};let h={polymer:await P(r,m,"polymer"),ligand:await P(r,m,"ligand"),nonStandard:await P(r,m,"non-standard"),branched:await P(r,m,"branched",{label:"Carbohydrate"}),water:await P(r,m,"water"),ion:await P(r,m,"ion"),lipid:await P(r,m,"lipid"),coarse:await P(r,m,"coarse")},g=m.obj.data,b=((null===(i=null===(n=null===(a=h.water)||void 0===a?void 0:a.obj)||void 0===n?void 0:n.data)||void 0===i?void 0:i.elementCount)||0)>5e4?"line":"ball-and-stick",y=((null===(u=null===(l=null===(o=h.lipid)||void 0===o?void 0:o.obj)||void 0===l?void 0:l.data)||void 0===u?void 0:u.elementCount)||0)>2e4?"line":"ball-and-stick",{update:x,builder:C,typeParams:O,color:I,symmetryColor:A,symmetryColorParam
7319s:w,globalColorParams:D,ballAndStickColor:E}=S(r,t,g),M={polymer:C.buildRepresentation(x,h.polymer,{type:"cartoon",typeParams:O,color:A,colorParams:w},{tag:"polymer"}),ligand:C.buildRepresentation(x,h.ligand,{type:"ball-and-stick",typeParams:O,color:I,colorParams:E},{tag:"ligand"}),nonStandard:C.buildRepresentation(x,h.nonStandard,{type:"ball-and-stick",typeParams:O,color:I,colorParams:E},{tag:"non-standard"}),branchedBallAndStick:C.buildRepresentation(x,h.branched,{type:"ball-and-stick",typeParams:{...O,alpha:.3},color:I,colorParams:E},{tag:"branched-ball-and-stick"}),branchedSnfg3d:C.buildRepresentation(x,h.branched,{type:"carbohydrate",typeParams:O,color:I,colorParams:D},{tag:"branched-snfg-3d"}),water:C.buildRepresentation(x,h.water,{type:b,typeParams:{...O,alpha:.6,visuals:"line"===b?["intra-bond","element-point"]:void 0},color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"water"}),ion:C.buildRepresentation(x,h.ion,{type:"ball-and-stick",typeParams:O,color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"ion"}),lipid:C.buildRepresentation(x,h.lipid,{type:y,typeParams:{...O,alpha:.6,visuals:"line"===y?["intra-bond"]:void 0},color:I,colorParams:{carbonColor:{name:"element-symbol",params:{}},...D}},{tag:"lipid"}),coarse:C.buildRepresentation(x,h.coarse,{type:"spacefill",typeParams:O,color:I||"chain-id",colorParams:D},{tag:"coarse"})};return await x.commit({revertOnError:!1}),await T(r,g,null===(d=null===(c=t.theme)||void 0===c?void 0:c.focus)||void 0===d?void 0:d.name,null===(f=null===(p=t.theme)||void 0===p?void 0:p.focus)||void 0===f?void 0:f.params),{components:h,representations:M}}}),w=y({id:"preset-structure-representation-protein-and-nucleic",display:{name:"Protein & Nucleic",group:I,description:"Shows proteins as Cartoon and RNA/DNA as Gaussian Surface."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={protein:await k(r,l,"protein"),nucleic:await k(r,l,"nucleic")},c=l.obj.data,d={radiusOffset:c.isCoarseGrained?2:0,smoothness:c.isCoarseGrained?1:1.5},{update:p,builder:f,typeParams:m,symmetryColor:h,symmetryColorParam
7319s:g}=S(r,t,c),b={protein:f.buildRepresentation(p,u.protein,{type:"cartoon",typeParams:m,color:h,colorParams:g},{tag:"protein"}),nucleic:f.buildRepresentation(p,u.nucleic,{type:"gaussian-surface",typeParams:{...m,...d},color:h,colorParams:g},{tag:"nucleic"})};return await p.commit({revertOnError:!0}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:b}}}),D=y({id:"preset-structure-representation-coarse-surface",display:{name:"Coarse Surface",group:I,description:"Shows polymers and lipids as coarse Gaussian Surface."},params:()=>x,async apply(e,t,r){var a,n,i,l;let c=s.ze.resolveAndCheck(r.state.data,e);if(!c)return{};let d={polymer:await P(r,c,"polymer"),lipid:await P(r,c,"lipid")},p=c.obj.data,f=r.config.get(u.OW.Structure.SizeThresholds)||o.Structure.DefaultSizeThresholds,m=o.Structure.getSize(p,f),h=Object.create(null);m===o.Structure.Size.Gigantic?Object.assign(h,{traceOnly:!p.isCoarseGrained,radiusOffset:2,smoothness:1,visuals:["structure-gaussian-surface-mesh"]}):m===o.Structure.Size.Huge?Object.assign(h,{radiusOffset:p.isCoarseGrained?2:0,smoothness:1}):p.isCoarseGrained&&Object.assign(h,{radiusOffset:2,smoothness:1});let{update:g,builder:b,typeParams:y,symmetryColor:x,symmetryColorParam
7319s:C}=S(r,t,p),O={polymer:b.buildRepresentation(g,d.polymer,{type:"gaussian-surface",typeParams:{...y,...h},color:x,colorParams:C},{tag:"polymer"}),lipid:b.buildRepresentation(g,d.lipid,{type:"gaussian-surface",typeParams:{...y,...h},color:x,colorParams:C},{tag:"lipid"})};return await g.commit({revertOnError:!0}),await T(r,p,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(l=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===l?void 0:l.params),{components:d,representations:O}}}),E=y({id:"preset-structure-representation-polymer-cartoon",display:{name:"Polymer Cartoon",group:I,description:"Shows polymers as Cartoon."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={polymer:await P(r,l,"polymer")},c=l.obj.data,{update:d,builder:p,typeParams:f,symmetryColor:m,symmetryColorParams:h}=S(r,t,c),g={polymer:p.buildRepresentation(d,u.polymer,{type:"cartoon",typeParams:f,color:m,colorParams:h},{tag:"polymer"})};return await d.commit({revertOnError:!0}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:g}}}),M=y({id:"preset-structure-representation-atomic-detail",display:{name:"Atomic Detail",group:I,description:"Shows everything in atomic detail."},params:()=>({...x,showCarbohydrateSymbol:n.e.Boolean(!1)}),async apply(e,t,r){var a,n,i,o,l,u;let c=s.ze.resolveAndCheck(r.state.data,e);if(!c)return{};let d={all:await P(r,c,"all"),branched:void 0},p=c.obj.data,f=p.elementCount>1e5,g=p.elementCount>1e6,b=p.units.length>5e3,y=p.atomicResidueCount&&p.elementCount>1e3&&p.atomicResidueCount/p.elementCount<3,x=p.models[0],C=!!m.t.Provider.get(x)||h.q.isExhaustive(x),O="ball-and-stick";p.isCoarseGrained||b?O=g?"point":"spacefill":y&&!C?O="spacefill":f&&(O="line");let I=t.showCarbohydrateSymbol&&!f&&!y;I&&Object.assign(d,{branched:await P(r,c,"branched",{label:"Carbohydrate"})});let{update:A,builder:w,typeParams:D,color:E,ballAndStickColor:M,globalColorParams:k}=S(r,t,p),B=y&&!C?{carbonColor:{name:"element-symbol",params:{}},...k}:M,_={all:w.buildRepresentation(A,d.all,{type:O,typeParams:D,color:E,colorParams:B},{tag:"all"})};return I&&Object.assign(_,{snfg3d:w.buildRepresentation(A,d.branched,{type:"carbohydrate",typeParams:{...D,alpha:.4,visuals:["carbohydrate-symbol"]},color:E,colorParams:k},{tag:"snfg-3d"})}),await A.commit({revertOnError:!0}),await T(r,p,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:E,null!==(u=null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params)&&void 0!==u?u:B),{components:d,representations:_}}});function P(e,t,r,a){return e.builders.structure.tryCreateComponentStatic(t,r,a)}function k(e,t,r,a){return e.builders.structure.tryCreateComponentFromSelection(t,l.fS[r],`selection-${r}`,a)}let B={empty:O,auto:C,"atomic-detail":M,"polymer-cartoon":E,"polymer-
7319and-ligand":A,"protein-and-nucleic":w,"coarse-surface":D,illustrative:y({id:"preset-structure-representation-illustrative",display:{name:"Illustrative",group:"Miscellaneous",description:"Show everything in spacefill representation with illustrative colors and ignore light."},params:()=>x,async apply(e,t,r){var a,n,i,o,l;let u=s.ze.resolveAndCheck(r.state.data,e);if(!u)return{};let c={all:await P(r,u,"all"),branched:void 0},d=u.obj.data,{update:p,builder:f,typeParams:m,color:h}=S(r,t,d),g={all:f.buildRepresentation(p,c.all,{type:"spacefill",typeParams:{...m,ignoreLight:!0},color:"illustrative",colorParams:{style:{name:"entity-id",params:{overrideWater:!0}}}},{tag:"all"})};return await p.commit({revertOnError:!0}),await T(r,d,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:h,null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params),{components:c,representations:g}}}),"molecular-surface":y({id:"preset-structure-representation-molecular-surface",display:{name:"Molecular Surface",group:"Miscellaneous",description:"Show everything in molecular surface representation with illustrative colors."},params:()=>x,async apply(e,t,r){var a,n,i,o,l;let u=s.ze.resolveAndCheck(r.state.data,e);if(!u)return{};let c={all:await P(r,u,"all"),branched:void 0},d=u.obj.data,{update:p,builder:f,typeParams:m,color:h}=S(r,t,d),g={all:f.buildRepresentation(p,c.all,{type:"molecular-surface",typeParams:m,color:"entity-id",colorParams:{overrideWater:!0}},{tag:"all"})};return await p.commit({revertOnError:!0}),await T(r,d,null!==(i=null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name)&&void 0!==i?i:h,null===(l=null===(o=t.theme)||void 0===o?void 0:o.focus)||void 0===l?void 0:l.params),{components:c,representations:g}}}),"auto-lod":y({id:"preset-structure-representation-auto-lod",display:{name:"Automatic Detail",group:"Miscellaneous",description:"Shows more (or less) detailed representations automatically based on camera distance."},params:()=>x,async apply(e,t,r){var a,n,i,o;let l=s.ze.resolveAndCheck(r.state.data,e);if(!l)return{};let u={all:await P(r,l,"all")},c=l.obj.data,{update:d,builder:p,typeParams:f,color:m,symmetryColor:h,symmetryColorParam
7319s:g,ballAndStickColor:y}=S(r,t,c),x={gaussianSurface:p.buildRepresentation(d,u.all,{type:"gaussian-surface",typeParams:{...f,lod:b.A.create(30,1e7,100)},color:h,colorParams:g},{tag:"gaussian-surface"}),cartoon:p.buildRepresentation(d,u.all,{type:"cartoon",typeParams:{...f,lod:b.A.create(-20,300,100)},color:h,colorParams:g},{tag:"cartoon"}),ballAndStick:p.buildRepresentation(d,u.all,{type:"ball-and-stick",typeParams:{...f,lod:b.A.create(-20,40,20)},color:m,colorParams:y},{tag:"ball-and-stick"})};return await d.commit({revertOnError:!1}),await T(r,c,null===(n=null===(a=t.theme)||void 0===a?void 0:a.focus)||void 0===n?void 0:n.name,null===(o=null===(i=t.theme)||void 0===i?void 0:i.focus)||void 0===o?void 0:o.params),{components:u,representations:x}}})}},63536:function(e,t,r){r.d(t,{X:function(){return s},k:function(){return o}});var a=r(67546),n=r(2078),i=r(36111);class o{constructor(){this.subs=void 0}subscribe(e,t){if(!e)return{unsubscribe:()=>{}};void 0===this.subs&&(this.subs=[]);let r=e.subscribe(t);return this.subs.push(r),{unsubscribe:()=>{r&&this.subs&&(0,i.iV)(this.subs,r)&&(r.unsubscribe(),r=void 0)}}}get ev(){return this._ev||(this._ev=n.d.create())}dispose(){if(this._ev&&this._ev.dispose(),this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}}class s extends o{updateState(...e){let t=this.state,r=(0,a.gq)(t,e);return r!==t&&(this._state=r,!0)}get state(){return this._state}constructor(e){super(),this._state=e}}},57939:function(e,t,r){r.d(t,{Zf:function(){return l},zp:function(){return i}});var a=r(45366),n=r(2918);let i="Coordinates",o=(0,n.n)({label:"DCD",description:"DCD",category:i,binaryExtensions:["dcd"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromDcd).commit()}),s=(0,n.n)({label:"XTC",description:"XTC",category:i,binaryExtensions:["xtc"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromXtc).commit()}),l=[["dcd",o],["xtc",s],["trr",(0,n.n)({label:"TRR",description:"TRR",category:i,binaryExtensions:["trr"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromTrr).commit()})],["nctraj",(0,n.n)({label:"NCTRAJ",description:"NCTRAJ",category:i,binaryExtensions:["nc","nctraj"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromNctraj).commit()})],["lammpstrj",(0,n.n)({label:"LAMMPSTRAJ",description:"LAMMPSTRAJ",category:i,stringExtensions:["lammpstrj"],parse:(e,t)=>e.state.data.build().to(t).apply(a.L.Model.CoordinatesFromLammpstraj).commit()})]]},2918:function(e,t,r){r.d(t,{S:function(){return i},n:function(){return n}});var a=r(15943);function n(e){return e}function i(e,t){if("bcif"===e.ext)try{let e=(0,a.$)(t);if(e.encoder.startsWith("VolumeServer"))return"dscif";if(e.encoder.startsWith("volseg-volume-server"))return"segcif";if(s(e,"volume_data_3d_info")){if(s(e,"volume_data_3d"))return"dscif";if(s(e,"segmentation_data_3d"))return"segcif"}}catch(e){console.error(e)}else if("cif"===e.ext){if(t.startsWith("data_SERVER\n#\n_density_server_result"))return"dscif";if(t.startsWith("data_SERVER\n#\ndata_SEGMENTATION_DATA"))return"segcif";if(o(t,"volume_data_3d_info")){if(o(t,"volume_data_3d"))return"dscif";if(o(t,"segmentation_data_3d"))return"segcif"}if(t.includes("atom_site_fract_x")||t.includes("atom_site.fract_x"))return"coreCif"}return -1}function o(e,t){return e.includes(`_${t}.`)}function s(e,t){for(let r of e.dataBlocks)for(let e of r.categories)if(e.name===t)return!0;return!1}},15867:function(e,t,r){r.d(t,{j4:function(){return o},m2:function(){return i}});var a=r(45366),n=r(2918);let i="Topology",o=[["psf",(0,n.n)({label:"PSF",description:"PSF",category:i,stringExtensions:["psf"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParsePsf,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromPsf);return await r.commit(),{format:r.selector,topology:n.selector}}})],["prmtop",(0,n.n)({label:"PRMTOP",description:"PRMTOP",category:i,stringExtensions:["prmtop","parm7"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParsePrmtop,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromPrmtop);return await r.commit(),{format:r.selector,topology:n.selector}}})],["top",(0,n.n)({label:"TOP",description:"TOP",category:i,stringE
7319xtensions:["top"],parse:async(e,t)=>{let r=e.state.data.build().to(t).apply(a.L.Data.ParseTop,{},{state:{isGhost:!0}}),n=r.apply(a.L.Model.TopologyFromTop);return await r.commit(),{format:r.selector,topology:n.selector}}})]]},45203:function(e,t,r){r.d(t,{PF:function(){return i},pB:function(){return y}});var a=r(45366),n=r(2918);let i="Trajectory";function o(e,t){return e.builders.structure.hierarchy.applyPreset(t.trajectory,"default")}function s(e,t){return async(r,a,n)=>{let i=r.state.data;return{trajectory:await i.build().to(a).apply(e,t,{tags:null==n?void 0:n.trajectoryTags}).commit({revertOnError:!0})}}}let l={label:"PDB",description:"PDB",category:i,stringExtensions:["pdb","ent"],parse:s(a.L.Model.TrajectoryFromPDB),visuals:o},u={label:"PDBQT",description:"PDBQT",category:i,stringExtensions:["pdbqt"],parse:s(a.L.Model.TrajectoryFromPDB,{variant:"pdbqt"}),visuals:o},c={label:"PQR",description:"PQR",category:i,stringExtensions:["pqr"],parse:s(a.L.Model.TrajectoryFromPDB,{variant:"pqr"}),visuals:o},d={label:"XYZ",description:"XYZ",category:i,stringExtensions:["xyz"],parse:s(a.L.Model.TrajectoryFromXYZ),visuals:o},p={label:"Lammps Data",description:"Lammps Data",category:i,stringExtensions:["data"],parse:s(a.L.Model.TrajectoryFromLammpsData),visuals:o},f={label:"Lammps Trajectory Data",description:"Lammps Trajectory Data",category:i,stringExtensions:["lammpstrj"],parse:s(a.L.Model.TrajectoryFromLammpsTrajData),visuals:o},m={label:"GRO",description:"GRO",category:i,stringExtensions:["gro"],binaryExtensions:[],parse:s(a.L.Model.TrajectoryFromGRO),visuals:o},h={label:"MOL",description:"MOL",category:i,stringExtensions:["mol"],parse:s(a.L.Model.TrajectoryFromMOL),visuals:o},g={label:"SDF",description:"SDF",category:i,stringExtensions:["sdf","sd"],parse:s(a.L.Model.TrajectoryFromSDF),visuals:o},b={label:"MOL2",description:"MOL2",category:i,stringExtensions:["mol2"],parse:s(a.L.Model.TrajectoryFromMOL2),visuals:o},y=[["mmcif",{label:"mmCIF",description:"mmCIF",category:i,stringExtensions:["cif","mmcif","mcif"],binaryExtensions:["bcif"],isApplicable:(e,t)=>"mmcif"===e.ext||"mcif"===e.ext||("cif"===e.ext||"bcif"===e.ext)&&-1===(0,n.S)(e,t),parse:async(e,t,r)=>{var n,i;let o=e.state.data.build().to(t).apply(a.L.Data.ParseCif,void 0,{state:{isGhost:!0}}),s=await o.apply(a.L.Model.TrajectoryFromMmCif,void 0,{tags:null==r?void 0:r.trajectoryTags}).commit({revertOnError:!0});return((null===(i=null===(n=o.selector.cell)||void 0===n?void 0:n.obj)||void 0===i?void 0:i.data.blocks.length)||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:s}},visuals:o}],["cifCore",{label:"cifCore",description:"CIF Core",category:i,stringExtensions:["cif"],isApplicable:(e,t)=>"cif"===e.ext&&"coreCif"===(0,n.S)(e,t),parse:async(e,t,r)=>{var n,i;let o=e.state.data.build().to(t).apply(a.L.Data.ParseCif,void 0,{state:{isGhost:!0}}),s=await o.apply(a.L.Model.TrajectoryFromCifCore,void 0,{tags:null==r?void 0:r.trajectoryTags}).commit({revertOnError:!0});return((null===(i=null===(n=o.selector.cell)||void 0===n?void 0:n.obj)||void 0===i?void 0:i.data.blocks.length)||0)>1&&e.state.data.updateCellState(o.ref,{isGhost:!1}),{trajectory:s}},visuals:o}],["pdb",l],["pdbqt",u],["pqr",c],["gro",m],["xyz",d],["lammps_data",p],["lammps_traj_data",f],["mol",h],["sdf",g],["mol2",b]]},74272:function(e,t,r){r.d(t,{$:function(){return a}});var a,n=r(30502),i=r(75042),o=r(48930),s=r(14086),l=r(87144),u=r(98653),c=r(72762),d=r(5333),p=r(97667);let f={dynamicBonds:s.e.Optional(s.e.Boolean(!1,{description:"Ensure bonds are recalculated upon model changes. Also enables calculation of inter-unit bonds in water molecules and ions."}))};!function(e){async function t(e,t,r,a,i){let o;let s=d.I.Provider.get(r);!a&&s&&0!==s.assemblies.length&&(a=s.assemblies[0].id),s&&0!==s.assemblies.length?(o=u.j.findAssembly(r,a||""))||e.log.warn(`Model '${r.entryId}' has no assembly called '${a}', returning model structure.`):e.log.warn(`Model '${r.entryId}' has no assembly, returning model structure.`);let l=n.Structure.ofModel(r,i);if(!o){let e={label:"Model",description:n.Structure.elementDescription(l)};return new c.G.Molecule.Structure(l,e)}a=o.id;let p=await n.StructureSymmetry.buildAssembly(l,a).runInContext(t),f={label:`Assembly ${a}`,description:n.Structure.elementDescription(p)};return new c.G.Molecule.Structure(p,f)}async function r(e,t,r,a,i){let o=n.Structure.ofModel(t,i),s=await n.StructureSymmetry.buildSymmetryRange(o,r,a).runInContext(e),l={label:`Symmetry [${r}] to [${a}]`,description:n.Structure.elementDescription(s)};return new c.G.Molecule.Structure(s,l)}async function a(e,t,r,a){let i=n.Structure.ofModel(t,a),o=await n.StructureSymmetry.builderSymmetryMates(i,r).runInContext(e),s={label:"Symmetry Mates",description:n.Structure.elementDescription(o)};return new c.G.Molecule.Structure(o,s)}async function m(e,t,r,a,i){let o=n.Structure.ofModel(t,i),s=await n.StructureSymmetry.buildSymmetryAssembly(o,r,a).runInContext(e),l={label:"Symmetry Assembly",description:n.Structure.elementDescription(s)};return new c.G.Molecule.Structure(s,l)}async function h(e,i,o,s){let l=null==s?void 0:s.params,u=d.I.Provider.get(o);if(!u||!s||"model"===s.name){let e=n.Structure.ofModel(o,l);return new c.G.Molecule.Structure(e,{label:"Model",description:n.Structure.elementDescription(e)})}if("auto"===s.name){if(0!==u.assemblies.length)return t(e,i,o,void 0,l);{let e=n.Structure.ofModel(o,l);return new c.G.Molecule.Structure(e,{label:"Model",description:n.Structure.elementDescription(e)})}}return"assembly"===s.name?t(e,i,o,s.params.id,l):"symmetry"===s.name?r(i,o,s.params.ijkMin,s.params.ijkMax,l):"symmetry-mates"===s.name?a(i,o,s.params.radius,l):"symmetry-assembly"===s.name?m(i,o,s.params.generators,u,l):void(0,p.UT)(s)}e.getParams=function(e,t){let r=e&&d.I.Provider.get(e),a=r?r.assemblies.map(e=>[e.id,`${e.id}: ${(0,i.ce)(e.details)}`]):[],n=!r||!o.EO.isZero(r.spacegroup.cell),u=[];
7319if(r){let{operators:e}=r.spacegroup;for(let t=0,r=e.length;t<r;t++)u.push([t,`${t+1}: ${o.I5.getOperatorXyz(e[t])}`])}let c=[];e&&e.properties.structAsymMap.forEach(e=>{let t=e.id===e.auth_id?e.id:`${e.id} [auth ${e.auth_id}]`;c.push([e.id,t])});let p={auto:s.e.Group(f),model:s.e.Group(f),assembly:s.e.Group({id:s.e.Optional(e?s.e.Select(a.length?a[0][0]:"",a,{label:"Asm Id",description:"Assembly Id"}):s.e.Text("",{label:"Asm Id",description:"Assembly Id (use empty for the 1st assembly)"})),...f},{isFlat:!0}),"symmetry-mates":s.e.Group({radius:s.e.Numeric(5,{min:0,max:50,step:1}),...f},{isFlat:!0}),symmetry:s.e.Group({ijkMin:s.e.Vec3(l.AO.create(-1,-1,-1),{step:1},{label:"Min IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),ijkMax:s.e.Vec3(l.AO.create(1,1,1),{step:1},{label:"Max IJK",fieldLabels:{x:"I",y:"J",z:"K"}}),...f},{isFlat:!0}),"symmetry-assembly":s.e.Group({generators:s.e.ObjectList({operators:s.e.ObjectList({index:s.e.Select(0,u),shift:s.e.Vec3((0,l.AO)(),{step:1},{label:"IJK",fieldLabels:{x:"I",y:"J",z:"K"}})},e=>`${e.index+1}_${e.shift.map(e=>e+5).join("")}`,{defaultValue:[]}),asymIds:s.e.MultiSelect([],c)},e=>`${e.asymIds.length} asym ids, ${e.operators.length} operators`,{defaultValue:[]}),...f},{isFlat:!0})},m=[];return"auto"===t&&m.push(["auto","Auto"]),m.push(["model","Model"]),a.length>0&&m.push(["assembly","Assembly"]),n&&(m.push(["symmetry-mates","Symmetry Mates"]),m.push(["symmetry","Symmetry (indices)"]),m.push(["symmetry-assembly","Symmetry (assembly)"])),{type:s.e.MappedStatic(t||"model",p,{options:m})}},e.canAutoUpdate=function(e,t){return"symmetry-assembly"!==t.name&&("symmetry"!==t.name||"symmetry"!==e.name)},e.create=h}(a||(a={}))},43015:function(e,t,r){r.d(t,{YT:function(){return o},al:function(){return s},he:function(){return i},v2:function(){return l}});var a=r(30502),n=r(14086);function i(e,t,r={}){return"string"==typeof r.type||"string"==typeof r.color||"string"==typeof r.size?function(e,t,r){let a=r.type&&e.representation.structure.registry.get(r.type)||e.representation.structure.registry.default.provider,n=r.color&&e.representation.structure.themes.colorThemeRegistry.get(r.color)||e.representation.structure.themes.colorThemeRegistry.get(a.defaultColorTheme.name),i=r.size&&e.representation.structure.themes.sizeThemeRegistry.get(r.size)||e.representation.structure.themes.sizeThemeRegistry.get(a.defaultSizeTheme.name);return u(e,t,{type:a,typeParams:r.typeParams,color:n,colorParams:r.colorParams,size:i,sizeParams:r.sizeParams})}(e,t||a.Structure.Empty,r):u(e,t||a.Structure.Empty,r)}function o(e,t){let{themes:r}=e.representation.structure;return t?r.colorThemeRegistry.getApplicableTypes({structure:t}):r.colorThemeRegistry.types}function s(e,t,r,i,o){let{registry:s,themes:l}=e.representation.structure,u=s.get(r||s.default.name),c=l.colorThemeRegistry.get(i||u.defaultColorTheme.name),d=n.e.getDefaultValues(c.getParams({structure:t||a.Structure.Empty}));return c.name===u.defaultColorTheme.name&&Object.assign(d,u.defaultColorTheme.props),{name:c.name,params:Object.assign(d,o)}}function l(e,t,r,i,o){let{registry:s,themes:l}=e.representation.structure,u=s.get(r||s.default.name),c=l.sizeThemeRegistry.get(i||u.defaultSizeTheme.name),d=n.e.getDefaultValues(c.getParams({structure:t||a.Structure.Empty}));return c.name===u.defaultSizeTheme.name&&Object.assign(d,u.defaultSizeTheme.props),{name:c.name,params:Object.assign(d,o)}}function u(e,t,r={}){let{themes:a}=e.representation.structure,i={structure:t},o=r.type||e.representation.structure.registry.default.provider,s=Object.assign(n.e.getDefaultValues(o.getParams(a,t)),r.typeParams),l=r.color||a.colorThemeRegistry.get(o.defaultColorTheme.name),u=n.e.getDefaultValues(l.getParams(i));l.name===o.defaultColorTheme.name&&Object.assign(u,o.defaultColorTheme.props);let c=Object.assign(u,r.colorParams),d=r.size||a.sizeThemeRegistry.get(o.defaultSizeTheme.name),p=n.e.getDefaultValues(d.getParams(i));d.name===o.defaultSizeTheme.name&&Object.assign(p,o.defaultSizeTheme.props);let f=Object.assign(p,r.sizeParams);return{type:{name:o.name,params:s},colorTheme:{name:l.name,params:c},sizeTheme:{name:d.name,params:f}}}},80541:function(e,t,r){r.d(t,{B3:function(){return en},Cg:function(){return n},L$:function(){return eo},a3:function(){return er},eu:function(){return ea},fS:function(){return ei},fW:function(){return p}});var a,n,i=r(30502),o=r(91044),s=r(71649),l=r(89849),u=r(63964);r(45366);var c=r(34985),d=r(29724);function p(e,t,r={}){var a;let o;return{label:e,expression:t,description:r.description||"",category:null!==(a=r.category)&&void 0!==a?a:n.Misc,isHidden:!!r.isHidden,priority:r.priority||0,referencesCurrent:!!r.referencesCurrent,get query(){return o||(o=(0,l.MY)(t)),o},ensureCustomProperties:r.ensureCustomProperties,async getSelection(e,a,n){let s=e.managers.structure.selection.getStructure(n),u=s?i.StructureSelection.Sequence(n,[s]):i.StructureSelection.Empty(n);return r.ensureCustomProperties&&await r.ensureCustomProperties({runtime:a,assetManager:e.managers.asset},n),o||(o=(0,l.MY)(t)),o(new i.QueryContext(n,{currentSelection:u}))}}}(a=n||(n={})).Type="Type",a.Structure="Structure Property",a.Atom="Atom Property",a.Bond="Bond Property",a.Residue="Residue Property",a.AminoAcid="Amino Acid",a.NucleicBase="Nucleic Base",a.Manipulate="Manipulate Selection",a.Validation="Validation",a.Misc="Miscellaneous",a.Internal="Internal";let f=p("All",s.MolScriptBuilder.struct.generator.all(),{category:"",priority:1e3}),m=p("Current Selection",s.MolScriptBuilder.internal.generator.current(),{category:"",referencesCurrent:!0}),h=p("Polymer",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(polypeptide|cyclic-pseudo-peptide|peptide-like|nucleotide|peptide nucleic acid)","i"),s.MolScriptBuilder.ammp("entitySubtype")])])})]),{category:n.Type}),g=p("Trace",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("sphere","gaussian"),s.MolScriptBuilder.ammp("objectPrimitive")])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CA","P"),s.MolScriptBuilder.ammp("label_atom_id")])})])])]),{category:n.Structure}),b=s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(polypeptide|cyclic-pseudo-peptide|peptide-like)","i"),s.MolScriptBuilder.ammp("entitySubtype")])]),y=s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(nucleotide|peptide nucleic acid)","i"),s.MolScriptBuilder.ammp("entitySubtype")])]),x=s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("non-
7319polymer|(amino|carboxy) terminus|peptide-like","i"),s.MolScriptBuilder.ammp("chemCompType")]),S=p("Backbone",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])})])])]),{category:n.Structure}),T=p("Sidechain",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])])])})])])]),{category:n.Structure}),C=p("Sidechain with Trace",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.ProteinBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"CA"]),s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("auth_comp_id"),"PRO"]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"N"])])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y,"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([x]),"atom-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.NucleicBackboneAtoms)),s.MolScriptBuilder.ammp("label_atom_id")])]),s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("label_atom_id"),"P"])])})])])]),{category:n.Structure}),O=p("Protein",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b})]),{category:n.Type}),I=p("Nucleic",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":y})]),{category:n.Type}),A=p("Helix",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"residue-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.ammp("secondaryStructureFlags"),s.MolScriptBuilder.core.type.bitflags([o.SecondaryStructureType.Flag.Helix])])})]),{category:n.Structure,ensureCustomProperties:(e,t)=>d.N.attach(e,t)}),w=p("Beta Strand/Sheet",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":b,"residue-test":s.MolScriptBuilder.core.flags.hasAny([s.MolScriptBuilder.ammp("secondaryStructureFlags"),s.MolScriptBuilder.core.type.bitflags([o.SecondaryStructureType.Flag.Beta])])})]),{category:n.Structure,ensureCustomProperties:(e,t)=>d.N.attach(e,t)}),D=p("Water",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"water"])})]),{category:n.Type}),E=p("Ion",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entitySubtype"),"ion"])})]),{category:n.Type}),M=p("Lipid",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entitySubtype"),"lipid"])})]),{category:n.Type}),P=p("Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"branched"]),s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"non-polymer"]),s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("oligosaccharide","i"),s.MolScriptBuilder.ammp("entitySubtype")])])])})]),{category:n.Type}),k=p("Carbohydrate with Connected",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:P.expression,"layer-count":1,"as-whole-residues":!0})]),{category:n.Internal,isHidden:!0}),B=p("Connected to Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:k.expression,by:P.expression})]),{category:n.Internal,isHidden:!0}),_=p("Ligand",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.logic.and([s.MolScriptBuilder.core.logic.or([s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"non-polymer"]),s.MolScriptBuilder.core.rel.neq([s.MolScriptBuilder.ammp("entityPrdId"),""])]),s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("(oligosaccharide|lipid|ion)","i"),s.MolScriptBuilder.ammp("entitySubtype")])])]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.logic.not([s.MolScriptBuilder.core.str.match([s.MolScriptBuilder.re("saccharide","i"),s.MolScriptBuilder.ammp("chemCompType")])])})]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":x})])])]),by:s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.PolymerNames)),s.MolScriptBuilder.ammp("label_comp_id")])})]),s.MolScriptBuilder.struct.generator.atomGroups({"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...u.F.toArray(o.CommonProteinCaps)),s.MolScriptBuilder.ammp("label_comp_id")])})])})]),{category:n.Type}),R=p("Ligand with Connected",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:_.expression,"layer-count":1,"as-whole-residues":!0,"bond-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Covalent|o.BondType.Flag.MetallicCoordination])])})]),by:P.expression})]),{category:n.Internal,isHidden:!0}),F=p("Connected to Ligand",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:R.expression,by:_.expression})]),{category:n.Internal,isHidden:!0}),L=p("Connected to Ligand or Carbohydrate",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([B.expression,F.expression])]),{category:n.Internal,isHidden:!0}),z=p("Disulfide Bridges",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.combinator.merge([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.filter.isConnectedTo({0:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("SG"),s.MolScriptBuilder.ammp("label_atom_id")])}),target:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("SG"),s.MolScriptBuilder.ammp("label_atom_id")])}),"bond-test":!0})])]),s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.bondedAtomicPairs({0:s.MolScriptBuilder.core.flags.hasAny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Disulfide])])})])])])])]),{category:n.Bond}),N=p("NOS Bridges",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues([s.MolScriptBuilder.struct.filter.isConnectedTo({0:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CSO","LYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("OD","NZ"),s.MolScriptBuilder.ammp("label_atom_id")])}),target:s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("CSO","LYS"),s.MolScriptBuilder.ammp("auth_comp_id")]),"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("OD","NZ"),s.MolScriptBuilder.ammp("label_atom_id")])}),"bond-test":!0})])]),{category:n.Bond}),G=p("Non-standard Residues in Polymers",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("entityType"),"polymer"]),"chain-test":s.MolScriptBuilder.core.rel.eq([s.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":s.MolScriptBuilder.ammp("isNonStandard")})]),{category:n.Residue}),U=p("Coarse Elements",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"chain-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set("sphere","gaussian"),s.MolScriptBuilder.ammp("objectPrimitive")])})]),{category:n.Type}),V=p("Rings in Residues",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.rings()]),{category:n.Residue}),j=p("Aromatic Rings in Residues",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.rings({"only-aromatic":!0})]),{category:n.Residue}),H=p("Surrounding Residues (5 â«) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.includeSurroundings({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"as-whole-residues":!0}),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select residues within 5 â« of the current selection.",category:n.Manipulate,referencesCurrent:!0}),q=p("Surrounding Ligands (5 â«) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.surroundingLigands({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"include-water":!0})]),{description:"Select ligand components within 5 â« of the current selection.",category:n.Manipulate,referencesCurrent:!0}),X=p("Surrounding Atoms (5 â«) of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.modifier.includeSurroundings({0:s.MolScriptBuilder.internal.generator.current(),radius:5,"as-whole-residues":!1}),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select atoms within 5 â« of the current selection.",category:n.Manipulate,referencesCurrent:!0}),W=p("Inverse / Complement of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.exceptBy({0:s.MolScriptBuilder.struct.generator.all(),by:s.MolScriptBuilder.internal.generator.current()})]),{description:"Select everything not in the current selection.",category:n.Manipulate,referencesCurrent:!0}),K=p("Residues Covalently Bonded to Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"layer-count":1,"as-whole-residues":!0})]),{description:"Select residues covalently bonded to current selection.",category:n.Manipulate,referencesCurrent:!0}),Q=p("Covalently Bonded Component",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"fixed-point":!0})]),{description:"Select covalently bonded component based on current selection.",category:n.Manipulate,referencesCurrent:!0}),Z=p("Residues with Cov. or Metallic Bond to Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.includeConnected({0:s.MolScriptBuilder.internal.generator.current(),"layer-count":1,"as-whole-residues":!0,"bond-test":s.MolScriptBuilder.core.flags.hasA
7319ny([s.MolScriptBuilder.struct.bondProperty.flags(),s.MolScriptBuilder.core.type.bitflags([o.BondType.Flag.Covalent|o.BondType.Flag.MetallicCoordination])])})]),{description:"Select residues with covalent or metallic bond to current selection.",category:n.Manipulate,referencesCurrent:!0}),Y=p("Whole Residues of Selection",s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.modifier.wholeResidues({0:s.MolScriptBuilder.internal.generator.current()})]),{description:"Expand current selection to whole residues.",category:n.Manipulate,referencesCurrent:!0}),$=[[["HIS"],"Histidine"],[["ARG"],"Arginine"],[["LYS"],"Lysine"],[["ILE"],"Isoleucine"],[["PHE"],"Phenylalanine"],[["LEU"],"Leucine"],[["TRP"],"Tryptophan"],[["ALA"],"Alanine"],[["MET"],"Methionine"],[["PRO"],"Proline"],[["CYS"],"Cysteine"],[["ASN"],"Asparagine"],[["VAL"],"Valine"],[["GLY"],"Glycine"],[["SER"],"Serine"],[["GLN"],"Glutamine"],[["TYR"],"Tyrosine"],[["ASP"],"Aspartic Acid"],[["GLU"],"Glutamic Acid"],[["THR"],"Threonine"],[["SEC"],"Selenocysteine"],[["PYL"],"Pyrrolysine"],[["UNK"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0),J=[[["A","DA"],"Adenosine"],[["C","DC"],"Cytidine"],[["T","DT"],"Thymidine"],[["G","DG"],"Guanosine"],[["I","DI"],"Inosine"],[["U","DU"],"Uridine"],[["N","DN"],"Unknown"]].sort((e,t)=>e[1]<t[1]?-1:e[1]>t[1]?1:0);function ee([e,t],r,a=0){let n=1!==e.length||et.has(e[0])?`${t} (${e.join(", ")})`:`[${e[0]}] ${t}`;return p(n,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"residue-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...e),s.MolScriptBuilder.ammp("auth_comp_id")])})]),{category:r,priority:a,description:n})}let et=u.F.unionMany(o.AminoAcidNamesL,o.RnaBaseNames,o.DnaBaseNames,o.WaterNames);function er(e){let t=new Set;for(let r of e)r.uniqueElementSymbols.forEach(e=>t.add(e));let r=[];return t.forEach(e=>{let t=c.Dq[e]||e;r.push(function([e,t],r,a){let n=`${t} (${e.join(", ")})`;return p(n,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"atom-test":s.MolScriptBuilder.core.set.has([s.MolScriptBuilder.set(...e),s.MolScriptBuilder.acp("elementSymbol")])})]),{category:r,priority:0,description:n})}([[e],t],"Element Symbol",0))}),r}function ea(e){let t=new Map,r=new Set;for(let a of e)for(let e of(a.uniqueResidueNames.forEach(e=>r.add(e)),a.models))a.uniqueResidueNames.forEach(r=>{let a=e.properties.chemicalComponentMap.get(r);a&&t.set(r,a.name)});let a=[];return u.F.difference(r,et).forEach(e=>{let r=t.get(e)||e;a.push(ee([[e],r],"Ligand/Non-standard Residue",200))}),a}function en(e){let t=new Map,r=i.StructureElement.Location.create();for(let a of e)for(let e of(r.structure=a,a.unitSymmetryGroups)){r.unit=e.units[0],r.element=e.elements[0];let a=i.StructureProperties.entity.type(r);if("polymer"===a||"branched"===a){let e=i.StructureProperties.entity.pdbx_description(r);t.set(e.join(", "),e)}}let a=[];return t.forEach((e,t)=>{a.push(function([e,t],r,a){let n=`${t}`;return p(`${t}`,s.MolScriptBuilder.struct.modifier.union([s.MolScriptBuilder.struct.generator.atomGroups({"entity-test":s.MolScriptBuilder.core.list.equal([s.MolScriptBuilder.list(...e),s.MolScriptBuilder.ammp("entityDescription")])})]),{category:r,priority:300,description:n})}([e,t],"Polymer/Carbohydrate Entities",0))}),a}let ei={all:f,current:m,polymer:h,trace:g,backbone:S,sidechain:T,sidechainWithTrace:C,protein:O,nucleic:I,helix:A,beta:w,water:D,ion:E,lipid:M,branched:P,branchedPlusConnected:k,branchedConnectedOnly:B,ligand:_,ligandPlusConnected:R,ligandConnectedOnly:F,connectedOnly:L,disulfideBridges:z,nosBridges:N,nonStandardPolymer:G,coarse:U,ring:V,aromaticRing:j,surroundings:H,surroundingLigands:q,surroundingAtoms:X,complement:W,covalentlyBonded:K,covalentlyOrMetallicBonded:Z,covalentlyBondedComponent:Q,wholeResidues:Y};class eo{add(e){this.list.push(e),this.options.push([e,e.label,e.category]),this.version+=1}remove(e){let t=this.list.indexOf(e);-1!==t&&(this.list.splice(t,1),this.options.splice(t,1),this.version+=1)}constructor(){this.list=[],this.options=[],this.version=1,this.list.push(...Object.values(ei),...$.map(e=>ee(e,n.AminoAcid)),...J.map(e=>ee(e,n.NucleicBase))),this.options.push(...this.list.map(e=>[e,e.label,e.category]))}}},70899:function(e,t,r){r.d(t,{z:function(){return g}});var a=r(19394),n=r(85764),i=r(24641),o=r(63536),s=r(64870),l=r(2546),u=r(41334),c=r(67546
7319),d=r(23465),p=r(73118),f=r(54854),m=r(28250);class h{constructor(){this.queue=[]}run(e){this.queue.length<2?this.queue.push(e):this.queue[this.queue.length-1]=e,1===this.queue.length&&this.next()}async next(){for(;this.queue.length>0;)try{let e=this.queue[0];await e()}catch(e){console.error("Error in SingleTaskQueue execution:",e)}finally{this.queue.shift()}}}class g extends o.X{updateState(e){return"current"in e&&!("currentAnimationTimeMs"in e)?super.updateState({...e,currentAnimationTimeMs:0}):super.updateState(e)}get current(){let e=this.state.current;return this.state.entries.find(t=>t.snapshot.id===e)}getIndex(e){return this.state.entries.indexOf(e)}getEntry(e){if(e)return this.entryMap.get(e)}remove(e){let t=this.entryMap.get(e);t&&((null==t?void 0:t.image)&&this.plugin.managers.asset.delete(t.image),this.entryMap.delete(e),this.updateState({current:this.state.current===e?void 0:this.state.current,entries:this.state.entries.delete(this.getIndex(t))}),this.events.changed.next(void 0))}add(e){this.entryMap.set(e.snapshot.id,e),this.updateState({current:e.snapshot.id,entries:this.state.entries.push(e)}),this.events.changed.next(void 0)}replace(e,t,r){var a,n,i,o;let s=this.getEntry(e);if(!s)return;this.defaultSnapshotId=void 0,(null==s?void 0:s.image)&&this.plugin.managers.asset.delete(s.image);let l=this.getIndex(s),u=g.Entry(t,{key:null!==(a=null==r?void 0:r.key)&&void 0!==a?a:s.key,name:null!==(n=null==r?void 0:r.name)&&void 0!==n?n:s.name,description:null!==(i=null==r?void 0:r.description)&&void 0!==i?i:s.description,descriptionFormat:null!==(o=null==r?void 0:r.descriptionFormat)&&void 0!==o?o:s.descriptionFormat,image:null==r?void 0:r.image});this.entryMap.set(t.id,u),this.updateState({current:u.snapshot.id,entries:this.state.entries.set(l,u)}),this.events.changed.next(void 0)}move(e,t){let r=this.state.entries.size;if(r<2)return;let a=this.getEntry(e);if(!a)return;let n=this.getIndex(a),i=(n+t)%r;i<0&&(i+=r);let o=this.state.entries.get(i),s=this.state.entries.asMutable();s.set(i,a),s.set(n,o),this.updateState({current:a.snapshot.id,entries:s.asImmutable()}),this.events.changed.next(void 0)}update(e,t){var r,a,n;let i=this.getIndex(e);if(i<0)return;let o=this.state.entries.set(i,{...e,key:(null===(r=t.key)||void 0===r?void 0:r.trim())||void 0,name:(null===(a=t.name)||void 0===a?void 0:a.trim())||void 0,description:(null===(n=t.description)||void 0===n?void 0:n.trim())||void 0,descriptionFormat:t.descriptionFormat});this.updateState({entries:o}),this.entryMap.set(e.snapshot.id,this.state.entries.get(i)),this.events.changed.next(void 0)}clear(){0!==this.state.entries.size&&(this.entryMap.forEach(e=>{(null==e?void 0:e.image)&&this.plugin.managers.asset.delete(e.image)}),this.entryMap.clear(),this.updateState({current:void 0,entries:(0,a.aV)()}),this.events.changed.next(void 0))}applyKey(e){let t=this.state.entries.find(t=>t.key===e);t&&(this.updateState({current:t.snapshot.id}),this.events.changed.next(void 0),this.plugin.state.setSnapshot(t.snapshot))}setCurrent(e){let t=this.getEntry(e);return t&&(this.updateState({current:e}),this.events.changed.next(void 0)),t&&t.snapshot}setSnapshotAnimationFrame(e,t=!1){var r;let a=this.getEntry(this.state.current);if(!a)return;let n=null!==(r=i.B.getStateTransitionFrameIndex(a.snapshot,e))&&void 0!==r?r:0;return this.updateState({currentAnimationTimeMs:e})&&this.events.changed.next(void 0),t&&this.animationFrameQueue.run(()=>this.plugin.state.setAnimationSnapshot(a.snapshot,null!=n?n:0)),n}getNextId(e,t){let r=this.state.entries.size;if(!e){if(0===r)return;return this.state.entries.get(-1===t?r-1:0).snapshot.id}let a=this.getEntry(e);if(!a)return;let n=this.getIndex(a);if(!(n<0))return(n=(n+t)%r)<0&&(n+=r),this.state.entries.get(n).snapshot.id}applyNext(e){let t=this.getNextId(this.state.current,e);if(t){let e=this.setCurrent(t);if(e)return this.plugin.state.setSnapshot(e)}}async setStateSnapshot(e){var t;this.clear();let r=(0,a.aV)().asMutable();for(let t of e.entries)this.entryMap.set(t.snapshot.id,t),r.push(t);let n=e.current?e.current:e.entries.length>0?e.entries[0].snapshot.id:void 0;if(this.updateState({current:n,entries:r.asImmutable(),isPlaying:!1,nextSnapshotDelayInMs:e.playback?e.playback.nextSnapshotDelayInMs:g.DefaultNextSnapshotDelayInMs}),this.events.changed.next(void 0),!n)return;let i=this.getEntry(n),o=i&&i.snapshot;if(o)return await this.plugin.state.setSnapshot(o),(null===(t=e.playback)||void 0===t?void 0:t.isPlaying)&&this.play({delayFirst:!0}),o}async syncCurrent(e){var t,r;let a=0===this.state.entries.size,n=1===this.state.entries.size&&this.state.current&&(!this.defaultSnapshotId||this.state.current===this.defaultSnapshotId);if(!a&&!n)return;let i=this.plugin.state.getSnapshot(null==e?void 0:e.params),o=(null!==(r=null===(t=null==e?void 0:e.params)||void 0===t?void 0:t.image)&&void 0!==r?r:this.plugin.state.snapshotParams.value.image)?await g.getCanvasImageAsset(this.plugin,`${i.id}-image.png`):void 0;if(a)this.add(g.Entry(i,{name:null==e?void 0:e.name,description:null==e?void 0:e.description,descriptionFormat:null==e?void 0:e.descriptionFormat,image:o}));else if(n){let e=this.getEntry(this.state.current);(null==e?void 0:e.image)&&this.plugin.managers.asset.delete(e.image),this.replace(this.state.current,i,{image:o})}this.defaultSnapshotId=i.id}async getStateSnapshot(e){await this.syncCurrent(e);let t=this.state.entries.valueSeq().toArray();for(let e=0;e<t.length;e++)t[e]._transientData&&(t[e]={...t[e]},delete t[e]._transientData);return{timestamp:+new Date,version:d.L,name:e&&e.name,description:e&&e.description,current:this.state.current,playback:{isPlaying:!!(e&&e.playOnLoad),nextSnapshotDelayInMs:this.state.nextSnapshotDelayInMs},entries:t}}
7319async serialize(e){let t=JSON.stringify(await this.getStateSnapshot({params:null==e?void 0:e.params}),null,2);if(!(null==e?void 0:e.type)||"json"===e.type||"molj"===e.type)return new Blob([t],{type:"application/json;charset=utf-8"});{let e=new Uint8Array((0,s.KU)(t));(0,s.Fl)(e,0,t);let r={"state.json":e},a=[];for(let{asset:e,file:t}of this.plugin.managers.asset.assets)a.push([e.id,e]),r[`assets/${e.id}`]=new Uint8Array(await t.arrayBuffer());if(a.length>0){let e=JSON.stringify(a,null,2),t=new Uint8Array((0,s.KU)(e));(0,s.Fl)(t,0,e),r["assets.json"]=t}return new Blob([await this.plugin.runTask((0,l.sZ)(r))],{type:"application/zip"})}}async open(e){try{let t=e.name.toLowerCase();if(t.endsWith("json")||t.endsWith("molj")){let t=await this.plugin.runTask((0,u.j2)(e,"string")),r=JSON.parse(m.TT.toString(t));g.isStateSnapshot(r)?await this.setStateSnapshot(r):g.isStateSnapshot(r.data)?await this.setStateSnapshot(r.data):await this.plugin.state.setSnapshot(r)}else{let t=await this.plugin.runTask((0,u.j2)(e,"zip")),r=Object.create(null);(0,c.mt)(t,(e,t)=>{"state.json"!==t&&"assets.json"!==t&&(r[t.substring(t.indexOf("/")+1)]=e)});let a=new File([t["state.json"]],"state.json"),n=await this.plugin.runTask((0,u.j2)(a,"json"));if(t["assets.json"]){let e=new File([t["assets.json"]],"assets.json");for(let[t,a]of(await this.plugin.runTask((0,u.j2)(e,"json"))))this.plugin.managers.asset.set(a,new File([r[t]],a.name))}await this.setStateSnapshot(n)}this.events.opened.next(void 0)}catch(e){console.error(e),this.plugin.log.error("Error reading state")}}async startPlayback(){let{current:e}=this;if(e){if(!e.snapshot.transition)return this.next();{let e=this.setCurrent(this.state.current);await this.plugin.state.setSnapshot(e);let t=void 0!==e.durationInMs?e.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,t))}}}async play(e){if(this.state.isPlaying&&!(null==e?void 0:e.delayFirst)){if(null==e||!e.restart)return;await this.stop()}if(this.updateState({isPlaying:!0}),null==e?void 0:e.delayFirst){let e=this.getEntry(this.state.current);if(!e){this.next();return}this.events.changed.next(void 0);let t=e.snapshot,r=void 0!==t.durationInMs?t.durationInMs:this.state.nextSnapshotDelayInMs;this.timeoutHandle=setTimeout(this.next,r)}else this.startPlayback()}async stop(){await this.plugin.managers.animation.stop(),this.updateState({isPlaying:!1}),void 0!==this.timeoutHandle&&clearTimeout(this.timeoutHandle),this.timeoutHandle=void 0,this.events.changed.next(void 0)}async togglePlay(){this.state.isPlaying?(await this.stop(),this.plugin.managers.markdownExtensions.audio.pause()):await this.play()}dispose(){super.dispose(),this.entryMap.clear()}constructor(e){super({current:void 0,entries:(0,a.aV)(),isPlaying:!1,nextSnapshotDelayInMs:g.DefaultNextSnapshotDelayInMs}),this.plugin=e,this.entryMap=new Map,this.defaultSnapshotId=void 0,this.events={changed:this.ev(),opened:this.ev()},this.animationFrameQueue=new h,this.timeoutHandle=void 0,this.next=async()=>{this.timeoutHandle=void 0;let e=this.getNextId(this.state.current,1);if(!e||e===this.state.current){this.stop();return}let t=this.setCurrent(e);await this.plugin.state.setSnapshot(t);let r=void 0!==t.durationInMs?t.durationInMs:this.state.nextSnapshotDelayInMs;this.state.isPlaying&&(this.timeoutHandle=setTimeout(this.next,r))}}}g.DefaultNextSnapshotDelayInMs=1500,function(e){async function t(e,t){let r=f.iQ.create("Render Screenshot",async r=>{if(!e.helpers.viewportScreenshot)return;let a=await e.helpers.viewportScreenshot.getPreview(r,512);if(!a)return;let i=new File([await (0,p._c)(a.canvas,"png")],t),o={kind:"file",id:n.hb.create22(),name:t};return e.managers.asset.set(o,i),o});return e.runTask(r)}e.Entry=function(e,t){return{timestamp:+new Date,snapshot:e,...t}},e.isStateSnapshot=function(e){return!!e&&!!e.timestamp&&!!e.entries},e.getCanvasImageAsset=t}(g||(g={}))},72762:function(e,t,r){r.d(t,{E:function(){return i},G:function(){return n}});var a,n,i,o=r(67801);!function(e){function t(t){return e.Create({...t,typeClass:"Representation3D"})}e.Create=o.lZ.factory(),e.isRepresentation3D=function(e){return!!e&&"Representation3D"===e.type.typeClass},e.isBehavior=function(e){return!!e&&"Behavior"===e.type.typeClass},e.CreateRepresentation3D=t,e.CreateBehavior=function(t){return e.Create({...t,typeClass:"Behavior"})};class r extends e.Create({name:"Root",typeClass:"Root"}){}e.Root=r;class a extends e.Create({name:"Group",typeClass:"Group"}){}e.Group=a,function(t){class r extends e.Create({name:"String Data",typeClass:"Data"}){}t.String=r;class a extends e.Create({name:"Binary Data",typeClass:"Data"}){}t.Binary=a;
7319class n extends e.Create({name:"Data Blob",typeClass:"Data"}){}t.Blob=n}(e.Data||(e.Data={})),function(t){class r extends e.Create({name:"JSON Data",typeClass:"Data"}){}t.Json=r;class a extends e.Create({name:"CIF File",typeClass:"Data"}){}t.Cif=a;class n extends e.Create({name:"Cube File",typeClass:"Data"}){}t.Cube=n;class i extends e.Create({name:"PSF File",typeClass:"Data"}){}t.Psf=i;class o extends e.Create({name:"PRMTOP File",typeClass:"Data"}){}t.Prmtop=o;class s extends e.Create({name:"TOP File",typeClass:"Data"}){}t.Top=s;class l extends e.Create({name:"PLY File",typeClass:"Data"}){}t.Ply=l;class u extends e.Create({name:"CCP4/MRC/MAP File",typeClass:"Data"}){}t.Ccp4=u;class c extends e.Create({name:"DSN6/BRIX File",typeClass:"Data"}){}t.Dsn6=c;class d extends e.Create({name:"DX File",typeClass:"Data"}){}t.Dx=d;class p extends e.Create({name:"Format Blob",typeClass:"Data"}){}t.Blob=p}(e.Format||(e.Format={})),function(r){class a extends e.Create({name:"Coordinates",typeClass:"Object"}){}r.Coordinates=a;class n extends e.Create({name:"Topology",typeClass:"Object"}){}r.Topology=n;class i extends e.Create({name:"Model",typeClass:"Object"}){}r.Model=i;class o extends e.Create({name:"Trajectory",typeClass:"Object"}){}r.Trajectory=o;class s extends e.Create({name:"Structure",typeClass:"Object"}){}r.Structure=s,function(r){class a extends t({name:"Structure 3D"}){}r.Representation3D=a;class n extends e.Create({name:"Structure 3D State",typeClass:"Object"}){}r.Representation3DState=n;class i extends e.Create({name:"Selections",typeClass:"Object"}){}r.Selections=i}(s=r.Structure||(r.Structure={}))}(e.Molecule||(e.Molecule={})),function(r){class a extends e.Create({name:"Volume",typeClass:"Object"}){}r.Data=a;class n extends e.Create({name:"Lazy Volume",typeClass:"Object"}){}r.Lazy=n;class i extends t({name:"Volume 3D"}){}r.Representation3D=i}(e.Volume||(e.Volume={})),function(r){class a extends e.Create({name:"Shape Provider",typeClass:"Object"}){}r.Provider=a;class n extends t({name:"Shape 3D"}){}r.Representation3D=n}(e.Shape||(e.Shape={}))}(n||(n={})),(a=i||(i={})).CreateBuiltIn=o.td.factory("ms-plugin"),a.BuiltIn=o.td.builderFactory("ms-plugin")},45366:function(e,t,r){r.d(t,{L:function(){return X}});var a,n,i,o,s,l,u,c,d={};r.r(d),r.d(d,{CreateGroup:function(){return y}});var p={};r.r(p),r.d(p,{AssignColorVolume:function(){return U},CustomVolumeProperties:function(){return H},VolumeFromCcp4:function(){return R},VolumeFromCube:function(){return L},VolumeFromDensityServerCif:function(){return N},VolumeFromDsn6:function(){return F},VolumeFromDx:function(){return z},VolumeFromSegmentationCif:function(){return G},VolumeInstances:function(){return j},VolumeTransform:function(){return V}});var f=r(93876),m=r(67801),h=r(85764),g=r(14086),b=r(72762);let y=b.E.BuiltIn({name:"create-group",display:{name:"Group"},from:[],to:b.G.Group,params:{label:g.e.Text("Group"),description:g.e.Optional(g.e.Text(""))}})({apply:({params:e})=>new b.G.Group({},e),update:({oldParams:e,newParams:t,b:r})=>(0,h.VS)(e,t)?m.td.UpdateResult.Unchanged:(r.label=t.label,r.description=t.description,m.td.UpdateResult.Updated)});var x=r(46102),S=r(42639),T=r(87144),C=r(54854),O=r(48930),I=r(58463),A=r(37461),w=r(35849),D=r(36111),E=r(67646);(a=s||(s={})).is=function(e){return(null==e?void 0:e.kind)==="ccp4"},a.create=function(e){return{kind:"ccp4",name:e.name,data:e}};var M=r(23643);(n=l||(l={})).is=function(e){return(null==e?void 0:e.kind)==="dsn6"},n.create=function(e){return{kind:"dsn6",name:e.name,data:e}};var P=r(67370);(i=u||(u={})).is=function(e){return(null==e?void 0:e.kind)==="dx"},i.create=function(e){return{kind:"dx",name:e.name,data:e}};var k=r(1573),B=r(67546);(o=c||(c={})).is=function(e){return(null==e?void 0:e.kind)==="segcif"},o.create=function(e){return{kind:"segcif",name:e._name,data:e}};var _=r(40208);let R=b.E.BuiltIn({name:"volume-from-ccp4",display:{name:"Volume from CCP4/MRC/MAP",description:"Create Volume from CCP4/MRC/MAP data"},from:b.G.Format.Ccp4,to:b.G.Volume.Data,params:e=>({voxelSize:g.e.Vec3(T.AO.create(1,1,1)),offset:g.e.Vec3(T.AO.create(0,0,0)),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from CCP4/MRC/MAP",async r=>{var a,n;let i=await (a=e.data,n={...t,label:e.data.name||e.label},C.iQ.create("Create Volume",async e=>{let{header:t,values:r}=a,i=T.AO.create(t.xLength,t.yLength,t.zLength);n&&n.voxelSize&&T.AO.mul(i,i,n.voxelSize);let o=T.AO.create((0,I.Id)(t.alpha),(0,I.Id)(t.beta),(0,I.Id)(t.gamma)),l=t.ISPG>65536?0:t.ISPG,u=O.EO.create(l||"P 1",i,o),c=T.AO.create(t.MAPC-1,t.MAPR-1,t.MAPS-1),d=T.es.convertToCanonicalAxisIndicesFastToSlow(c),p=[t.NX,t.NY,t.NZ],f=d([t.NC,t.NR,t.NS]),m=0===t.originX&&0===t.originY&&0===t.originZ?T.AO.create(t.NCSTART,t.NRSTART,t.NSSTART):T.AO.create(t.originX/(t.xLength/t.NX),t.originY/(t.yLength/t.NY),t.originZ/(t.zLength/t.NZ));(null==n?void 0:n.offset)&&T.AO.add(m,m,n.offset);let h=d(m),g=T.AO.create(h[0]/p[0],h[1]/p[1],h[2]/p[2]),b=T.AO.create(f[0]/p[0],f[1]/p[1],f[2]/p[2]),y=T.es.Space(f,T.es.invertAxisOrder(c),function(e){let t=(0,A.hc)(e);switch(t){case w.xT.Float32:return Float32Array;case w.xT.Int8:return Int8Array;case w.xT.Int16:return Int16Array;case w.xT.Uint16:return Uint16Array}throw Error(`${t} is not a supported value format.`)}(t)),x=T.es.create(y,T.es.Data1(r)),S=0===t.AMIN&&0===t.AMAX&&0===t.AMEAN&&0===t.ARMS,C={transform:{kind:"spacegroup",cell:u,fractionalBox:O.XZ.create(g,T.AO.add((0,T.AO)(),g,b))},cells:x,stats:{min:Number.isNaN(t.AMIN)||S?(0,D.GI)(r):t.AMIN,max:Number.isNaN(t.AMAX)||S?(0,D.uH)(r):t.AMAX,mean:Number.isNaN(t.AMEAN)||S?(0,D.p7)(r):t.AMEAN,sigma:Number.isNaN(t.ARMS)||0===t.ARMS?(0,D.Ud)(r):t.ARMS}};return{label:null==n?void 0:n.label,entryId:null==n?void 0:n.entryId,periodicity:T.AO.isInteger(b)?"xyz":"none",grid:C,instances:[{transform:T.yb.i
7319dentity()}],sourceData:s.create(a),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(r),o={label:i.label||"Volume",description:`Volume ${e.data.header.NX}\u00D7${e.data.header.NX}\u00D7${e.data.header.NX}`};return new b.G.Volume.Data(i,o)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),F=b.E.BuiltIn({name:"volume-from-dsn6",display:{name:"Volume from DSN6/BRIX",description:"Create Volume from DSN6/BRIX data"},from:b.G.Format.Dsn6,to:b.G.Volume.Data,params:e=>({voxelSize:g.e.Vec3(T.AO.create(1,1,1)),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from DSN6/BRIX",async r=>{var a,n;let i=await (a=e.data,n={...t,label:e.data.name||e.label},C.iQ.create("Create Volume",async e=>{let{header:t,values:r}=a,i=T.AO.create(t.xlen,t.ylen,t.zlen);n&&n.voxelSize&&T.AO.mul(i,i,n.voxelSize);let o=T.AO.create((0,I.Id)(t.alpha),(0,I.Id)(t.beta),(0,I.Id)(t.gamma)),s=O.EO.create("P 1",i,o),u=[t.xRate,t.yRate,t.zRate],c=[t.xExtent,t.yExtent,t.zExtent],d=[t.xStart,t.yStart,t.zStart],p=T.AO.create(d[0]/u[0],d[1]/u[1],d[2]/u[2]),f=T.AO.create(c[0]/u[0],c[1]/u[1],c[2]/u[2]),m=T.es.Space(c,[0,1,2],Float32Array),h=T.es.create(m,T.es.Data1(r));return{label:null==n?void 0:n.label,entryId:null==n?void 0:n.entryId,periodicity:T.AO.isInteger(f)?"xyz":"none",grid:{transform:{kind:"spacegroup",cell:s,fractionalBox:O.XZ.create(p,T.AO.add(T.AO.zero(),p,f))},cells:h,stats:{min:(0,D.GI)(r),max:(0,D.uH)(r),mean:(0,D.p7)(r),sigma:void 0!==t.sigma?t.sigma:(0,D.Ud)(r)}},instances:[{transform:T.yb.identity()}],sourceData:l.create(a),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(r),o={label:i.label||"Volume",description:`Volume ${e.data.header.xExtent}\u00D7${e.data.header.yExtent}\u00D7${e.data.header.zExtent}`};return new b.G.Volume.Data(i,o)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),L=b.E.BuiltIn({name:"volume-from-cube",display:{name:"Volume from Cube",description:"Create Volume from Cube data"},from:b.G.Format.Cube,to:b.G.Volume.Data,params:e=>({dataIndex:e?g.e.Select(0,e.data.header.dataSetIds.map((e,t)=>[t,`${e}`])):g.e.Numeric(0),entryId:g.e.Text("")})})({apply:({a:e,params:t})=>C.iQ.create("Create volume from Cube",async r=>{let a=await (0,P.j)(e.data,{...t,label:e.data.name||e.label}).runInContext(r),n={label:a.label||"Volume",description:`Volume ${e.data.header.dim[0]}\u00D7${e.data.header.dim[1]}\u00D7${e.data.header.dim[2]}`};return new b.G.Volume.Data(a,n)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),z=b.E.BuiltIn({name:"volume-from-dx",display:{name:"Parse DX",description:"Create volume from DX data."},from:b.G.Format.Dx,to:b.G.Volume.Data})({apply:({a:e})=>C.iQ.create("Parse DX",async t=>{var r,a;let n=await (r=e.data,a={label:e.data.name||e.label},C.iQ.create("Create Volume",async()=>{let{header:e,values:t}=r,n=T.es.Space(e.dim,[0,1,2],Float64Array),i=T.es.create(n,T.es.Data1(t)),o=T.yb.fromTranslation((0,T.yb)(),e.min),s=T.yb.fromScaling((0,T.yb)(),e.h);return T.yb.mul(o,o,s),{label:null==a?void 0:a.label,entryId:null==a?void 0:a.entryId,grid:{transform:{kind:"matrix",matrix:o},cells:i,stats:{min:(0,D.GI)(t),max:(0,D.uH)(t),mean:(0,D.p7)(t),sigma:(0,D.Ud)(t)}},instances:[{transform:T.yb.identity()}],sourceData:u.create(r),customProperties:new E.S,_propertyData:Object.create(null)}})).runInContext(t),i={label:n.label||"Volume",description:`Volume ${e.data.header.dim[0]}\u00D7${e.data.header.dim[1]}\u00D7${e.data.header.dim[2]}`};return new b.G.Volume.Data(n,i)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),N=b.E.BuiltIn({name:"volume-from-density-server-cif",display:{name:"Volume from density-server CIF",description:"Identify and create all separate models in the specified CIF data block"},from:b.G.Format.Cif,to:b.G.Volume.Data,params(e){if(!e)return{blockHeader:g.e.Optional(g.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),entryId:g.e.Text("")};let t=e.data.blocks.slice(1);return{blockHeader:g.e.Optional(g.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"})),entryId:g.e.Text("")}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>C.iQ.create("Parse density-server CIF",async r=>{var a;let n=t.blockHeader||e.data.blocks[1].header,i=e.data.blocks.find(e=>e.header===n);if(!i)throw Error(`Data block '${[n]}' not found.`);let o=S.pe.schema.densityServer(i),s=await (0,M.N)(o,{entryId:t.entryId}).runInContext(r),[l,u,c]=s.grid.cells.space.dimensions,d={label:null!==(a=t.entryId)&&void 0!==a?a:o.volume_data_3d_info.name.value(0),description:`Volume ${l}\u00D7${u}\u00D7${c}`};return new b.G.Volume.Data(s,d)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),G=b.E.BuiltIn({name:"volume-from-segmentation-cif",display:{name:"Volume from Segmentation CIF"},from:b.G.Format.Cif,to:b.G.Volume.Data,params(e){let t=null==e?void 0:e.data.blocks.slice(1);return{blockHeader:t?g.e.Optional(g.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"})):g.e.Optional(g.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."})),segmentLabels:g.e.ObjectList({id:g.e.Numeric(-1),label:g.e.Text("")},e=>`${e.id} = ${e.label}`,{description:"Mapping of segment IDs to segment labels"}),ownerId:g.e.Text("",{isHidden:!0,description:"Reference to the object which manages this volume"})}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>C.iQ.create("Parse segmentation CIF",async r=>{var a;let n=t.blockHeader||e.data.blocks[1].header,i=e.data.blocks.find(e=>e.header===n);if(!i)throw Error(`Data block '${[n]}' not found.`);let o=S.pe.schema.segmentation(i),s={};for(let e of t.segmentLabels)s[e.id]=e.label;let l=await (a={segmentLabels:s,ownerId:t.ownerId},C.iQ.create("Create Segmentation Volume",async e=>{var t;let{volume_data_3d_info:r,segmentation_data_3d:n}=o,i=O.EO.create(r.spacegroup_number.value(0)||"P 1",T.AO.ofArray(r.spacegroup_cell_size.value(0)),T.AO.scale((0,T.AO)(),T.AO.ofArray(r.spacegroup_cell_angles.value(0)),Math.PI/180)
7319),s=r.axis_order.value(0),l=T.es.convertToCanonicalAxisIndicesFastToSlow(s),u=l(r.sample_count.value(0)),d=T.es.Space(u,T.es.invertAxisOrder(s),Float32Array),p=T.es.create(d,T.es.Data1(n.values.toArray({array:Float32Array}))),f=T.AO.ofArray(l(r.origin.value(0))),m=T.AO.ofArray(l(r.dimensions.value(0))),h={label:null==a?void 0:a.label,entryId:void 0,grid:{transform:{kind:"spacegroup",cell:i,fractionalBox:O.XZ.create(f,T.AO.add((0,T.AO)(),f,m))},cells:p,stats:{min:0,max:1,mean:0,sigma:1}},instances:[{transform:T.yb.identity()}],sourceData:c.create(o),customProperties:new E.S,_propertyData:{ownerId:null==a?void 0:a.ownerId}};k.f.PickingGranularity.set(h,"object");let g=new Map,b=new Map,{segment_id:y,set_id:x}=o.segmentation_data_table;for(let e=0,t=y.rowCount;e<t;++e){let t=y.value(e),r=x.value(e);0!==r&&0!==t&&(b.has(r)||b.set(r,new Set),b.get(r).add(t))}b.forEach((e,t)=>{e.forEach(e=>{g.has(e)||g.set(e,new Set),g.get(e).add(t)})});let S=[0,0,0],C=p.space.getCoords,I=p.data,[A,w,D]=h.grid.cells.space.dimensions,M=A-1,P=w-1,_=D-1,R={};b.forEach((e,t)=>{R[t]=[M,P,_,-1,-1,-1]});for(let e=0,t=I.length;e<t;++e){let t=I[e];if(0===t)continue;C(e,S);let r=R[t];S[0]<r[0]&&(r[0]=S[0]),S[1]<r[1]&&(r[1]=S[1]),S[2]<r[2]&&(r[2]=S[2]),S[0]>r[3]&&(r[3]=S[0]),S[1]>r[4]&&(r[4]=S[1]),S[2]>r[5]&&(r[5]=S[2])}let F={};return g.forEach((e,t)=>{F[t]=O.XZ.create(T.AO.create(M,P,_),T.AO.create(-1,-1,-1))}),(0,B.mt)(R,(e,t)=>{b.get(parseInt(t)).forEach(t=>{let r=F[t];e[0]<r.min[0]&&(r.min[0]=e[0]),e[1]<r.min[1]&&(r.min[1]=e[1]),e[2]<r.min[2]&&(r.min[2]=e[2]),e[3]>r.max[0]&&(r.max[0]=e[3]),e[4]>r.max[1]&&(r.max[1]=e[4]),e[5]>r.max[2]&&(r.max[2]=e[5])})}),k.f.Segmentation.set(h,{segments:g,sets:b,bounds:F,labels:null!==(t=null==a?void 0:a.segmentLabels)&&void 0!==t?t:{}}),h})).runInContext(r),[u,d,p]=l.grid.cells.space.dimensions,f={label:o.volume_data_3d_info.name.value(0),description:`Segmentation ${u}\u00D7${d}\u00D7${p}`};return new b.G.Volume.Data(l,f)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),U=b.E.BuiltIn({name:"assign-color-volume",display:{name:"Assign Color Volume",description:"Assigns another volume to be available for coloring."},from:b.G.Volume.Data,to:b.G.Volume.Data,isDecorator:!0,params(e,t){if(!e)return{ref:g.e.Text()};let r=t.state.data.select(m.tE.Generators.root.subtree().ofType(b.G.Volume.Data).filter(t=>{var r;return!!t.obj&&!(null===(r=t.obj)||void 0===r?void 0:r.data.colorVolume)&&t.obj!==e}));return 0===r.length?{ref:g.e.Text("",{isHidden:!0})}:{ref:g.e.Select(r[0].transform.ref,r.map(e=>[e.transform.ref,e.obj.label]))}}})({apply:({a:e,params:t,dependencies:r})=>C.iQ.create("Assign Color Volume",async a=>{if(!r||!r[t.ref])throw Error("Dependency not available.");let n=r[t.ref].data,i={...e.data,colorVolume:n},o={label:e.label,description:"Volume + Colors"};return new b.G.Volume.Data(i,o)})}),V=b.E.BuiltIn({name:"volume-transform",display:{name:"Transform Volume"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:{transform:_.KD}})({canAutoUpdate:()=>!1,apply({a:e,params:t}){let r=(0,_.sj)(t.transform)?k.r.getBoundingSphere(e.data.grid).center:T.AO.unit,a=(0,_.Gl)(t.transform,r),n={kind:"matrix",matrix:T.yb.mul((0,T.yb)(),a,k.r.getGridToCartesianTransform(e.data.grid))};return new b.G.Volume.Data({...e.data,grid:{...e.data.grid,transform:n}},{label:e.label,description:`${e.description} [Transformed]`})}}),j=b.E.BuiltIn({name:"volume-instances",display:{name:"Volume Instances"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:{transforms:g.e.ObjectList({transform:_.KD},()=>"Transform")}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=t.transforms.some(e=>(0,_.sj)(e.transform))?k.r.getBoundingSphere(e.data.grid).center:T.AO.unit,a=t.transforms.map(e=>({transform:(0,_.Gl)(e.transform,r)}));return a.length?new b.G.Volume.Data({...e.data,instances:a},{label:e.label,description:`${e.description} [Instanced]`}):e}}),H=b.E.BuiltIn({name:"custom-volume-properties",display:{name:"Custom Volume Properties"},isDecorator:!0,from:b.G.Volume.Data,to:b.G.Volume.Data,params:(e,t)=>t.customVolumeProperties.getParams(null==e?void 0:e.data)})({apply:({a:e,params:t},r)=>C.iQ.create("Custom Volume Props",async a=>(await q(e.data,r,a,t),new b.G.Volume.Data(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>C.iQ.create("Custom Volume Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customVolumeProperties.get(a);t&&e.data.customProperties.reference(t.descriptor,!1)}return await q(e.data,n,i,a),m.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customProperties.dispose()}});async function q(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customVolumeProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching volume prop '${r}': ${e}`)}else a.set(e,s)}}let X={Data:f,Misc:d,Model:x,Volume:p,Representation:r(10515),Shape:r(59990)}},93876:function(e,t,r){r.r(t),r.d(t,{DeflateData:function(){return ep},Download:function(){return ec},DownloadBlob:function(){return ed},ImportJson:function(){return eA},ImportString:function(){return eI},LazyVolume:function(){return eD},ParseBlob:function(){return eh},ParseCcp4:function(){return eT},ParseCif:function(){return eg},ParseCube:function(){return ev},ParseDsn6:function(){return eC},ParseDx:function(){return eO},ParseJson:function(){return ew},ParsePly:function(){return eS},ParsePrmtop:function(){return ey},ParsePsf:function(){return eb},ParseTop:function(){return ex},RawData:function(){return ef},ReadFile:function(){return em}});var a=r(37461),n=r(42639),i=r(54854),o=r(7600),s=r(94284),l=r(27594);function u(e){let{xExtent:t,yExtent:r,zExtent:a}=e;return{xBlocks:Math.ceil(t/8),yBlocks:Math.ceil(r/8),zBlocks:Math.ceil(a/8)}}async function c(e){let{buffer:t}=await e.readBuffer(0,512),r=String.fromCharCode.apply(null,t),a=r.startsWith(":-)"),n=a||100===t.readInt16LE(36);return{header:a?{xStart:parseInt(r.substr(10,5)),yStart:parseInt(r.substr(15,5)),zStart:parseInt(r.substr(20,5)),xExtent:parseInt(r.substr(32,5)),yExtent:parseInt(r.substr(38,5)),zExtent:parseInt(r.substr(42,5)),xRate:parseInt(r.substr(52,5)),yRate:parseInt(r.substr(58,5)),zRate:parseInt(r.substr(62,5)),xlen:parseFloat(r.substr(73,10)),ylen:parseFloat(r.substr(83,10)),zlen:parseFloat(r.substr(93,10)),alpha:parseFloat(r.substr(103,10)),beta:parseFloat(r.substr(113,10)),gamma:parseFloat(r.substr(123,10)),divisor:parseFloat(r.substr(138,12)),summand:parseInt(r.substr(155,8)),sigma:parseFloat(r.substr(170,12))}:function(e,t){let r=t?t=>e.readInt16LE(2*t):t=>e.readInt16BE(2*t),a=1/r(17);return{xStart:r(0),yStart:r(1),zStart:r(2),xExtent:r(3),yExtent:r(4),zExtent:r(5),xRate:r(6),yRate:r(7),zRate:r(8),xlen:r(9)*a,ylen:r(10)*a,zlen:r(11)*a,alpha:r(12)*a,beta:r(13)*a,gamma:r(14)*a,divisor:r(15)
7319/100,summand:r(16),sigma:void 0}}(t,n),littleEndian:n}}async function d(e,t,r,a){a||l.z.flipByteOrderInPlace2(t.buffer);let{divisor:n,summand:i,xExtent:o,yExtent:s,zExtent:c}=e,{xBlocks:d,yBlocks:p,zBlocks:f}=u(e),m=0;for(let e=0;e<f;++e)for(let a=0;a<p;++a)for(let l=0;l<d;++l)for(let u=0;u<8;++u){let d=8*e+u;for(let e=0;e<8;++e){let u=8*a+e;for(let e=0;e<8;++e){let a=8*l+e;if(a<o&&u<s&&d<c)r[(a*s+u)*c+d]=(t[m]-i)/n,++m;else{m+=8-e;break}}}}}async function p(e,t,r){await r.update({message:"Parsing DSN6/BRIX file..."});let{header:a,littleEndian:n}=await c(e),{buffer:i}=await e.readBuffer(512,t-512),{valueCount:o}=function(e){let{xExtent:t,yExtent:r,zExtent:a}=e,{xBlocks:n,yBlocks:i,zBlocks:o}=u(e),s=8*n*i*8*o*8;return{count:s,byteCount:1*s,valueCount:t*r*a}}(a),s=new Float32Array(o);return await d(a,i,s,n),{header:a,values:s,name:e.name}}let f=new Set(["char","uchar","short","ushort","int","uint","float","double","int8","uint8","int16","uint16","int32","uint32","float32","float64"]);function m(e){if(!f.has(e))throw Error(`unknown ply type '${e}'`);return e}var h=r(55291),g=r(86920),b=r(65665);function y(e){switch(e){case"char":case"uchar":case"int8":case"uint8":case"short":case"ushort":case"int16":case"uint16":case"int":case"uint":case"int32":case"uint32":return g.sg.Schema.int;case"float":case"double":case"float32":case"float64":return g.sg.Schema.float}}async function x(e,t){let r=function(e,t){let r=(0,h.Tokenizer)(e);return{data:e,tokenizer:r,runtimeCtx:t,comments:[],elementSpecs:[],elements:[]}}(e,t);t.update({message:"Parsing...",current:0,max:e.length}),function(e){let t,r,a;let{tokenizer:n,comments:i,elementSpecs:o}=e;!function(e){let t=e.data.indexOf("end_header",e.position);if(-1===t)throw Error("no 'end_header' record found");e.tokenStart=e.position,e.tokenEnd=t,e.position=t,h.Tokenizer.eatLine(e)}(n);let s=h.Tokenizer.getTokenString(n).split(/\r?\n/);if("ply"!==s[0])throw Error("data not starting with 'ply'");if("format ascii 1.0"!==s[1])throw Error("format not 'ascii 1.0'");function l(){if(void 0!==t&&void 0!==r&&void 0!==a){let e=!1;for(let t=0,r=a.length;t<r;++t)if("list"===a[t].kind){e=!0;break}e&&a.length,e?o.push({kind:"list",name:t,count:r,property:a[0]}):o.push({kind:"table",name:t,count:r,properties:a})}}for(let e=2,n=s.length;e<n;++e){let n=s[e],o=n.split(" ");if(n.startsWith("comment"))i.push(n.substr(8));else if(n.startsWith("element"))l(),a=[],t=o[1],r=parseInt(o[2]);else if(n.startsWith("property")){if(void 0===a)throw Error("properties outside of element");"list"===o[1]?a.push({kind:"list",countType:m(o[2]),dataType:m(o[3]),name:o[4]}):a.push({kind:"column",type:m(o[1]),name:o[2]})}else n.startsWith("end_header")?l():console.warn("unknown header line")}}(r),function(e){let{elementSpecs:t}=e;for(let r=0,a=t.length;r<a;++r){let a=t[r];"table"===a.kind?function(e,t){let{elements:r,tokenizer:a}=e,{count:n,properties:i}=t,o=i.length,s=[],l=[],u=[],c=new Map;for(let e=0;e<o;++e){let e=h.c.create(a.data,2*n);u.push(e)}for(let e=0;e<n;++e)for(let e=0;e<o;++e)h.Tokenizer.skipWhitespace(a),h.Tokenizer.markStart(a),h.Tokenizer.eatValue(a),h.c.addUnchecked(u[e],a.tokenStart,a.tokenEnd);for(let e=0;e<o;++e){let{type:t,name:r}=i[e],a=(0,b.IS)(u[e],y(t));s.push(r),l.push(t),c.set(r,a)}r.push({kind:"table",rowCount:n,propertyNames:s,propertyTypes:l,getProperty:e=>c.get(e)})}(e,a):"list"===a.kind&&function(e,t){let{elements:r,tokenizer:a}=e,{count:n,property:i}=t,o=h.c.create(a.data,6*n),s=new Uint32Array(n+1),l=0;for(let e=0;e<n;++e){for(h.Tokenizer.skipWhitespace(a),h.Tokenizer.markStart(a);10!==h.Tokenizer.skipWhitespace(a);)++l,h.Tokenizer.markStart(a),h.Tokenizer.eatValue(a),h.c.addToken(o,a);s[e+1]=l}let u={entries:[],count:0},c=(0,b.IS)(o,y(i.dataType));r.push({kind:"list",rowCount:n,name:i.name,type:i.dataType,value:e=>{let t=s[e]+1,r=c.value(t-1);for(let e=t,a=t+r;e<a;++e)u.entries[e-t]=c.value(e);return u.count=r,u}})}(e,a)}}(r);let{elements:a,elementSpecs:n,comments:i}=r,s=function(e,t,r){let a=new Map;for(let r=0,n=t.length;r<n;++r)a.set(t[r],e[r]);return{comments:r,elementNames:t,getElement:e=>a.get(e)}}(a,n.map(e=>e.name),i);return o.X.success(s)}let{readLine:S,skipWhitespace:T,eatValue:C,eatLine:O,markStart:I}=h.Tokenizer,A=/\s+/,w=/(^\*|REMARK)*/;async function D(e,t){let{tokenizer:r}=e,a=h.c.create(r.data,2*t),n=h.c.create(r.data,2*t),o=h.c.create(r.data,2*t),s=h.c.create(r.data,2*t),l=h.c.create(r.data,2*t),u=h.c.create(r.data,2*t),c=h.c.create(r.data,2*t),d=h.c.create(r.data,2*t),{position:p}=r,f=S(r).trim();r.position=p;let m=7===f.split(A).length,y=m?6:8,{length:x}=r,w=0;return await (0,i.rV)(e.runtimeCtx,1e5,void 0,e=>{let i=Math.min(t-w,e);for(let e=0;e<i;++e){for(let e=0;e<y;++e)if(T(r),I(r),C(r),m)switch(e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 2:h.c.addUnchecked(l,r.tokenStart,r.tokenEnd);break;case 3:h.c.addUnchecked(u,r.tokenStart,r.tokenEnd);break;case 4:h.c.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 5:h.c.addUnchecked(d,r.tokenStart,r.tokenEnd)}else switch(e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 2:h.c.addUnchecked(o,r.tokenStart,r.tokenEnd);break;case 3:h.c.addUnchecked(s,r.tokenStart,r.tokenEnd);break;case 4:h.c.addUnchecked(l,r.tokenStart,r.tokenEnd);break;case 5:h.c.addUnchecked(u,r.tokenStart,r.tokenEnd);break;case 6:h.c.addUnchecked(c,r.tokenStart,r.tokenEnd);break;case 7:h.c.addUnchecked(d,r.tokenStart,r.tokenEnd)}O(r),I(r)}return w+=i,i},e=>e.update({message:"Parsing...",current:r.position,max:x})),{count:t,atomId:(0,b.Lq)(a)(g.sg.Schema.int),segmentName:m?(0,b.Lq)(o)(g.sg.Schema.str):(0,b.Lq)(n)(g.sg.Schema.str),residueId:(0,b.Lq)(o)(g.sg.Schema.int),residueName:m?(0,b.Lq)(o)(g.sg.Schema.str):(0,b.Lq)(s)(g.sg.Schema.str),atomName:(0,b.Lq)(l)(g.sg.Schema.str),atomType:(0,b.Lq)(u)(g.sg.Schema.str),charge:(0,b.Lq)(c)(g.sg.Schema.float),mass:(0,b.Lq)(d)(g.sg.Schema.float)}}async function E(e,t){let{tokenizer:r}=e,a=h.c.create(r.data,2*t),n=h.c.create(r.data,2*t),{length:o}=r,s=0;return await (0,i.rV)(e.runtimeCtx,10,void 0,e=>{let i=Math.min(t-s,e);for(let e=0;e<i;++e)for(let e=0;e<2;++e)switch(T(r),I(r),C(r),e){case 0:h.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:h.c.addUnchecked(n,r.tokenStart,r.tokenEnd)}return s+=i,i},e=>e.update({message:"Parsing...",current:r.position,max:o}
7319)),{count:t,atomIdA:(0,b.Lq)(a)(g.sg.Schema.int),atomIdB:(0,b.Lq)(n)(g.sg.Schema.int)}}async function M(e,t){let r,a,n;let i=(0,h.Tokenizer)(e),s={tokenizer:i,runtimeCtx:t},l=S(s.tokenizer).trim();for(;i.tokenEnd<i.length;){let e=S(s.tokenizer).trim();if(e.includes("!NTITLE"))r=function(e,t){let r=[];for(let a=0;a<t;++a){let t=S(e.tokenizer);r.push(t.replace(w,"").trim())}return r}(s,parseInt(e.split(A)[0]));else if(e.includes("!NATOM")){let t=parseInt(e.split(A)[0]);a=await D(s,t)}else if(e.includes("!NBOND")){let t=parseInt(e.split(A)[0]);n=await E(s,t);break}else e.includes("!NTHETA")||e.includes("!NPHI")||e.includes("!NIMPHI")||e.includes("!NDON")||e.includes("!NACC")||e.includes("!NNB")||e.includes("!NGRP NST2")||e.includes("!MOLNT")||e.includes("!NUMLP NUMLPH")||e.includes("!NCRTERM")}if(void 0===r&&(r=[]),void 0===a)return o.X.error("no atoms data");if(void 0===n)return o.X.error("no bonds data");let u={id:l,title:r,atoms:a,bonds:n};return o.X.success(u)}var P=r(67801),k=r(41334),B=r(14086),_=r(72762),R=r(59725),F=r(87144),L=r(99408),z=r(28250),N=r(64870);function G(e){let t={h:(0,F.AO)()},r=0,a=0,n=/\s+/g;for(;;){let i;let o=h.Tokenizer.readLine(e);if(o.startsWith("object 1"))i=o.split(n),t.dim=F.AO.create(parseInt(i[5]),parseInt(i[6]),parseInt(i[7]));else if(o.startsWith("origin"))i=o.split(n),t.min=F.AO.create(parseFloat(i[1]),parseFloat(i[2]),parseFloat(i[3]));else if(o.startsWith("delta"))i=o.split(n),0===a?t.h[0]=parseFloat(i[1]):1===a?t.h[1]=parseFloat(i[2]):2===a&&(t.h[2]=parseFloat(i[3])),a+=1;else if(o.startsWith("object 3")){r+=o.length+1;break}r+=o.length+1}return{header:t,headerByteCount:r}}async function U(e,t,r){await e.update("Reading header...");let a=(0,h.Tokenizer)(t),{header:n}=G(a);await e.update("Reading values...");let s=await function(e,t,r){let a=r.dim[0]*r.dim[1]*r.dim[2],n=new Float64Array(a),o=0;return(0,i.rV)(e,1e6,n,(e,r)=>{let n=Math.min(a,o+e);for(let e=o;e<n;e++)h.Tokenizer.skipWhitespace(t),t.tokenStart=t.position,h.Tokenizer.eatValue(t),r[e]=(0,L.Iz)(t.data,t.tokenStart,t.tokenEnd);return o=n,n===a?0:1e6},(e,t,r)=>e.update({current:Math.min(r,a),max:a}))}(e,a,n);return o.X.success({header:n,values:s,name:r})}async function V(e,t,r){await e.update("Reading header...");let a=(0,N.en)(t,0,1e3),{header:n,headerByteCount:i}=G((0,h.Tokenizer)(a));await e.update("Reading values...");let s=n.dim[0]*n.dim[1]*n.dim[2],l=new DataView(t.buffer,t.byteOffset+i),u=new Float64Array(s);for(let e=0;e<s;e++)u[e]=l.getFloat64(8*e,!0);return o.X.success({header:n,values:u,name:r})}var j=r(7922),H=r(97667);let q=["NATOM","NTYPES","NBONH","MBONA","NTHETH","MTHETA","NPHIH","MPHIA","NHPARM","NPARM","NNB","NRES","NBONA","NTHETA","NPHIA","NUMBND","NUMANG","NPTRA","NATYP","NPHB","IFPERT","NBPER","NGPER","NDPER","MBPER","MGPER","MDPER","IFBOX","NMXRS","IFCAP","NUMEXTRA","NCOPY"],{readLine:X,markLine:W,trim:K}=h.Tokenizer;function Q(e,t,r,a){let{tokenizer:n}=e,i=h.c.create(n.data,2*t),o=0;for(;n.tokenEnd<n.length&&"%"!==n.data.charAt(n.position);){n.tokenStart=n.position;let e=Math.min(o+r,t);for(;o<e;++o){let e=n.position;K(n,n.position,n.position+a),h.c.addUnchecked(i,n.tokenStart,n.tokenEnd),n.position=e+a}W(n)}return i}async function Z(e,t){let r=(0,h.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n=Object.create(null),i=0;for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let e=X(a.tokenizer).trim();if(e.startsWith("%VERSION"))n.version=e.substring(8).trim();else if(e.startsWith("%FLAG")){let t=e.substring(5).trim(),i=X(a.tokenizer).trim();for(;i.startsWith("%COMMENT");)i=X(a.tokenizer).trim();if(!i.startsWith("%FORMAT"))throw Error(`expected %FORMAT got "${i}"`);if("TITLE"===t||"CTITLE"===t)n.title=function(e){let{tokenizer:t}=e,r=[];for(;t.tokenEnd<t.length&&"%"!==t.data.charAt(t.position);){let e=X(t).trim();e&&r.push(e)}return r}(a);else if("POINTERS"===t)n.pointers=function(e){let{tokenizer:t}=e,r=Object.create(null);q.forEach(e=>{r[e]=0});let a=0;for(;t.tokenEnd<t.length&&"%"!==t.data.charAt(t.position);){let e=X(t),n=Math.min(a+10,32);for(let t=0;a<n;++t,++a)r[q[a]]=parseInt(e.substring(8*t,8*t+8).trim())}return r}(a);else if("ATOM_NAME"===t){let e=Q(a,n.pointers.NATOM,20,4);n.atomName=(0,b.Lq)(e)(g.sg.Schema.str)}else if("CHARGE"===t){let e=Q(a,n.pointers.NATOM,5,16);n.charge=(0,b.Lq)(e)(g.sg.Schema.float)}else if("MASS"===t){let e=Q(a,n.pointers.NATOM,5,16);n.mass=(0,b.Lq)(e)(g.sg.Schema.float)}else if("RESIDUE_LABEL"===t){let e=Q(a,n.pointers.NRES,20,4);n.residueLabel=(0,b.Lq)(e)(g.sg.Schema.str)}else if("RESIDUE_POINTER"===t){let e=Q(a,n.pointers.NRES,10,8);n.residuePointer=(0,b.Lq)(e)(g.sg.Schema.int)}else if("BONDS_INC_HYDROGEN"===t){let e=Q(a,3*n.pointers.NBONH,10,8);n.bondsIncHydrogen=(0,b.Lq)(e)(g.sg.Schema.int)}else if("BONDS_WITHOUT_HYDROGEN"===t){let e=Q(a,3*n.pointers.NBONA,10,8);n.bondsWithoutHydrogen=(0,b.Lq)(e)(g.sg.Schema.int)}else if("RADII"===t){let e=Q(a,n.pointers.NATOM,5,16);n.radii=(0,b.Lq)(e)(g.sg.Schema.float)}else for(;r.tokenEnd<r.length&&"%"!==r.data.charAt(r.position);)W(r)}}return o.X.success(n)}
7319let Y={nr:g.sg.Schema.Int(),type:g.sg.Schema.Str(),resnr:g.sg.Schema.Int(),residu:g.sg.Schema.Str(),atom:g.sg.Schema.Str(),cgnr:g.sg.Schema.Int(),charge:g.sg.Schema.Float(),mass:g.sg.Schema.Float()},$={ai:g.sg.Schema.Int(),aj:g.sg.Schema.Int()},J={compound:g.sg.Schema.Str(),molCount:g.sg.Schema.Int()},{readLine:ee,markLine:et,skipWhitespace:er,markStart:ea,eatValue:en,eatLine:ei}=h.Tokenizer,eo=/\[ (.+) \]/,es=/\s+/;async function el(e,t){let r=(0,h.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n=Object.create(null),i=0;n.compounds={};let s={},l="";function u(){l&&s.atoms&&(n.compounds[l]=s,s={},l="")}for(;r.tokenEnd<r.length;){r.position-i>1e5&&t.shouldUpdate&&(i=r.position,await t.update({current:r.position,max:r.length}));let e=ee(a.tokenizer).trim();if(e&&"*"!==e[0]&&";"!==e[0]){if(e.startsWith("#include"))throw Error("#include statements not allowed");if(e.startsWith("[")){let t=e.match(eo);if(null===t)throw Error("expected field name");let i=t[1];if("moleculetype"===i)u(),l=function(e){let t;let{tokenizer:r}=e;for(;r.tokenEnd<r.length;){er(r);let e=r.data.charAt(r.position);if("["===e)break;if(";"===e||"*"===e){et(r);continue}if(void 0!==t)throw Error("more than one molName");t=ee(r).split(es)[0]}if(void 0===t)throw Error("missing molName");return t}(a);else if("atoms"===i)s.atoms=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64),n=h.c.create(t.data,64),i=h.c.create(t.data,64),o=h.c.create(t.data,64),s=h.c.create(t.data,64),l=h.c.create(t.data,64),u=h.c.create(t.data,64);for(;t.tokenEnd<t.length;){er(t);let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<8;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd);break;case 2:h.c.add(n,t.tokenStart,t.tokenEnd);break;case 3:h.c.add(i,t.tokenStart,t.tokenEnd);break;case 4:h.c.add(o,t.tokenStart,t.tokenEnd);break;case 5:h.c.add(s,t.tokenStart,t.tokenEnd);break;case 6:h.c.add(l,t.tokenStart,t.tokenEnd);break;case 7:h.c.add(u,t.tokenStart,t.tokenEnd)}et(t)}return g.iA.ofColumns(Y,{nr:(0,b.Lq)(r)(g.sg.Schema.int),type:(0,b.Lq)(a)(g.sg.Schema.str),resnr:(0,b.Lq)(n)(g.sg.Schema.int),residu:(0,b.Lq)(i)(g.sg.Schema.str),atom:(0,b.Lq)(o)(g.sg.Schema.str),cgnr:(0,b.Lq)(s)(g.sg.Schema.int),charge:(0,b.Lq)(l)(g.sg.Schema.float),mass:(0,b.Lq)(u)(g.sg.Schema.float)})}(a);else if("bonds"===i)s.bonds=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64);for(;t.tokenEnd<t.length;){er(t);let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<2;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd)}et(t)}return g.iA.ofColumns($,{ai:(0,b.Lq)(r)(g.sg.Schema.int),aj:(0,b.Lq)(a)(g.sg.Schema.int)})}(a);else if("system"===i)n.system=function(e){let t;let{tokenizer:r}=e;for(;r.tokenEnd<r.length;){er(r);let e=r.data.charAt(r.position);if("["===e)break;if(";"===e||"*"===e){et(r);continue}if(void 0!==t)throw Error("more than one system");t=ee(r).trim()}if(void 0===t)throw Error("missing system");return t}(a);else if("molecules"===i)u(),n.molecules=function(e){let{tokenizer:t}=e,r=h.c.create(t.data,64),a=h.c.create(t.data,64);for(;t.tokenEnd<t.length&&(er(t),!(t.position>=t.length));){let e=t.data.charAt(t.position);if("["===e)break;if(";"===e||"*"===e){et(t);continue}for(let e=0;e<2;++e)switch(er(t),ea(t),en(t),e){case 0:h.c.add(r,t.tokenStart,t.tokenEnd);break;case 1:h.c.add(a,t.tokenStart,t.tokenEnd)}ei(t),ea(t)}return g.iA.ofColumns(J,{compound:(0,b.Lq)(r)(g.sg.Schema.str),molCount:(0,b.Lq)(a)(g.sg.Schema.int)})}(a);else for(;r.tokenEnd<r.length&&"["!==r.data.charAt(r.position);)et(r)}}}return o.X.success(n)}var eu=r(2546);let ec=_.E.BuiltIn({name:"download",display:{name:"Download",description:"Download string or binary data from the specified URL"},from:[_.G.Root],to:[_.G.Data.String,_.G.Data.Binary],params:{url:B.e.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),label:B.e.Optional(B.e.Text("")),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, download data as binary (string otherwise)"}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Download",async a=>{let n=R.x.getUrlAsset(r.managers.asset,e.url),i=await r.managers.asset.resolve(n,e.isBinary?"binary":"string").runInContext(a);return t.asset=i,e.isBinary?new _.G.Data.Binary(i.data,{label:e.label?e.label:n.url}):new _.G.Data.String(i.data,{label:e.label?e.label:n.url})}),dispose({cache:e}){var t;
7319null===(t=null==e?void 0:e.asset)||void 0===t||t.dispose()},update:({oldParams:e,newParams:t,b:r})=>e.url!==t.url||e.isBinary!==t.isBinary?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||("string"==typeof t.url?t.url:t.url.url),P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged}),ed=_.E.BuiltIn({name:"download-blob",display:{name:"Download Blob",description:"Download multiple string or binary data from the specified URLs."},from:_.G.Root,to:_.G.Data.Blob,params:{sources:B.e.ObjectList({id:B.e.Text("",{label:"Unique ID"}),url:B.e.Url("https://www.ebi.ac.uk/pdbe/static/entry/1cbs_updated.cif",{description:"Resource URL. Must be the same domain or support CORS."}),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, download data as binary (string otherwise)"})),canFail:B.e.Optional(B.e.Boolean(!1,{description:"Indicate whether the download can fail and not be included in the blob as a result."}))},e=>`${e.id}: ${e.url}`),maxConcurrency:B.e.Optional(B.e.Numeric(4,{min:1,max:12,step:1},{description:"The maximum number of concurrent downloads."}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Download Blob",async a=>{let n=[],i=await (0,k.Qe)(a,r.managers.asset,e.sources,e.maxConcurrency||4),o=[];for(let t=0;t<i.length;t++){let a=i[t],s=e.sources[t];"error"===a.kind?r.log.warn(`Download ${a.id} (${s.url}) failed: ${a.error}`):(o.push(a.result),n.push(s.isBinary?{id:a.id,kind:"binary",data:a.result.data}:{id:a.id,kind:"string",data:a.result.data}))}return t.assets=o,new _.G.Data.Blob(n,{label:"Data Blob",description:`${n.length} ${1===n.length?"entry":"entries"}`})}),dispose({cache:e},t){let r=null==e?void 0:e.assets;if(r)for(let e of r)e.dispose()}}),ep=_.E.BuiltIn({name:"defalate-data",display:{name:"Deflate",description:"Deflate compressed data"},params:{method:B.e.Select("gzip",[["gzip","gzip"]]),isString:B.e.Boolean(!1),stringEncoding:B.e.Optional(B.e.Select("utf-8",[["utf-8","UTF8"]])),label:B.e.Optional(B.e.Text(""))},from:[_.G.Data.Binary],to:[_.G.Data.Binary,_.G.Data.String]})({apply:({a:e,params:t},r)=>i.iQ.create("Gzip",async r=>{let a=await (0,eu.ec)(r,e.data),n=t.label?t.label:e.label;if(t.isString){let e=(0,N.jV)(a);return new _.G.Data.String(e,{label:n})}return new _.G.Data.Binary(a,{label:n})})}),ef=_.E.BuiltIn({name:"raw-data",display:{name:"Raw Data",description:"Raw data supplied by value."},from:[_.G.Root],to:[_.G.Data.String,_.G.Data.Binary],params:{data:B.e.Value("",{isHidden:!0}),label:B.e.Optional(B.e.Text(""))}})({apply:({params:e})=>i.iQ.create("Raw Data",async()=>"string"==typeof e.data?new _.G.Data.String(e.data,{label:e.label?e.label:"String"}):Array.isArray(e.data)||e.data instanceof ArrayBuffer?new _.G.Data.Binary(new Uint8Array(e.data),{label:e.label?e.label:"Binary"}):e.data instanceof Uint8Array?new _.G.Data.Binary(e.data,{label:e.label?e.label:"Binary"}):void(0,H.UT)(e.data)),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||r.label,P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,customSerialization:{toJSON(e){if("string"==typeof e.data||Array.isArray(e.data))return e;if(e.data instanceof ArrayBuffer){let t=new Uint8Array(e.data),r=Array(t.length);for(let e=0,a=t.length;e<a;e++)r[e]=t[e];return{data:r,label:e.label}}if(e.data instanceof Uint8Array){let t=Array(e.data.length);for(let r=0,a=e.data.length;r<a;r++)t[r]=e.data[r];return{data:t,label:e.label}}},fromJSON:e=>e}}),em=_.E.BuiltIn({name:"read-file",display:{name:"Read File",description:"Read string or binary data from the specified file"},from:_.G.Root,to:[_.G.Data.String,_.G.Data.Binary],params:{file:B.e.File(),label:B.e.Optional(B.e.Text("")),isBinary:B.e.Optional(B.e.Boolean(!1,{description:"If true, open file as as binary (string otherwise)"}))}})({apply:({params:e,cache:t},r)=>i.iQ.create("Open File",async a=>{if(null===e.file)return r.log.error("No file(s) selected"),P.lZ.Null;let n=await r.managers.asset.resolve(e.file,e.isBinary?"binary":"string").runInContext(a);return t.asset=n,e.isBinary?new _.G.Data.Binary(n.data,{label:e.label?e.label:e.file.name}):new _.G.Data.String(n.data,{label:e.label?e.label:e.file.name})}),dispose({cache:e}){var t;
7319null===(t=null==e?void 0:e.asset)||void 0===t||t.dispose()},update({oldParams:e,newParams:t,b:r}){var a;return e.label!==t.label?(r.label=t.label||(null===(a=e.file)||void 0===a?void 0:a.name)||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged},isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user loaded files."})}),eh=_.E.BuiltIn({name:"parse-blob",display:{name:"Parse Blob",description:"Parse multiple data enties"},from:_.G.Data.Blob,to:_.G.Format.Blob,params:{formats:B.e.ObjectList({id:B.e.Text("",{label:"Unique ID"}),format:B.e.Select("cif",[["cif","cif"]])},e=>`${e.id}: ${e.format}`)}})({apply:({a:e,params:t},r)=>i.iQ.create("Parse Blob",async r=>{let a=new Map;for(let e of t.formats)a.set(e.id,e.format);let i=[];for(let t of e.data){if(!a.has(t.id))continue;let e=await ("string"===t.kind?n.pe.parse(t.data):n.pe.parseBinary(t.data)).runInContext(r);if(e.isError)throw Error(`${t.id}: ${e.message}`);i.push({id:t.id,kind:"cif",data:e.result})}return new _.G.Format.Blob(i,{label:"Format Blob",description:`${i.length} ${1===i.length?"entry":"entries"}`})})}),eg=_.E.BuiltIn({name:"parse-cif",display:{name:"Parse CIF",description:"Parse CIF from String or Binary data"},from:[_.G.Data.String,_.G.Data.Binary],to:_.G.Format.Cif})({apply:({a:e})=>i.iQ.create("Parse CIF",async t=>{let r=await n.pe.parse(e.data).runInContext(t);if(r.isError)throw Error(r.message);return 0===r.result.blocks.length?P.lZ.Null:new _.G.Format.Cif(r.result)})}),ev=_.E.BuiltIn({name:"parse-cube",display:{name:"Parse Cube",description:"Parse Cube from String data"},from:_.G.Data.String,to:_.G.Format.Cube})({apply:({a:e})=>i.iQ.create("Parse Cube",async t=>{var r,a;let n=await (r=e.data,a=e.label,i.iQ.create("Parse Cube",async e=>{await e.update("Reading header...");let t=(0,h.Tokenizer)(r),{header:n,atoms:s}=function(e){let t=h.Tokenizer.readLines(e,6),r=(e,r)=>{let a=+t[e].trim().split(/\s+/g)[r];return Number.isNaN(a)?0:a},a=e=>{let t=r(e+2,0);return[Math.abs(t),F.AO.create(.529177210859*r(e+2,1),.529177210859*r(e+2,2),.529177210859*r(e+2,3)),t]},n=t[0].trim(),i=t[1].trim(),[o,s,l]=a(0),[u,c]=a(1),[d,p]=a(2),[f,m]=a(3),b=function(e,t,r){let a=new Int32Array(t),n=new Float64Array(t),i=new Float32Array(t),o=new Float32Array(t),s=new Float32Array(t);for(let l=0;l<t;l++){let t=h.Tokenizer.readLine(e).trim().split(/\s+/g);a[l]=+t[0],n[l]=+t[1],i[l]=.529177210859*+t[2],o[l]=.529177210859*+t[3],s[l]=+t[4]*r}return{count:t,number:g.sg.ofArray({array:a,schema:g.sg.Schema.int}),nuclearCharge:g.sg.ofArray({array:n,schema:g.sg.Schema.float}),x:g.sg.ofArray({array:i,schema:g.sg.Schema.float}),y:g.sg.ofArray({array:o,schema:g.sg.Schema.float}),z:g.sg.ofArray({array:s,schema:g.sg.Schema.float})}}(e,o,.529177210859),y=[];if(l>=0){let e=r(2,4);0===e&&(e=1);for(let t=0;t<e;t++)y.push(t)}else{let t=h.Tokenizer.readLine(e).trim().split(/\s+/g);for(let e=0,r=+t[0];e<r;e++)y.push(+t[e+1])}return{header:{orbitals:l<0,comment1:n,comment2:i,atomCount:o,origin:s,dim:F.AO.create(u,d,f),basisX:c,basisY:p,basisZ:m,dataSetIds:y},atoms:b}}(t),l=await function(e,t,r){let a=r.dim[0]*r.dim[1]*r.dim[2]*r.dataSetIds.length,n=new Float64Array(a),o=0;return(0,i.rV)(e,1e6,n,(e,r)=>{let n=Math.min(a,o+e);for(let e=o;e<n;e++)h.Tokenizer.skipWhitespace(t),t.tokenStart=t.position,h.Tokenizer.eatValue(t),r[e]=(0,L.Iz)(t.data,t.tokenStart,t.tokenEnd);return o=n,n===a?0:1e6},(e,t,r)=>e.update({current:Math.min(r,a),max:a}))}(e,t,n);return o.X.success({header:n,atoms:s,values:l,name:a})})).runInContext(t);if(n.isError)throw Error(n.message);return new _.G.Format.Cube(n.result)})}),eb=_.E.BuiltIn({name:"parse-psf",display:{name:"Parse PSF",description:"Parse PSF from String data"},from:[_.G.Data.String],to:_.G.Format.Psf})({apply:({a:e})=>i.iQ.create("Parse PSF",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PSF",async e=>await M(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Psf(a.result)})}),ey=_.E.BuiltIn({name:"parse-prmtop",display:{name:"Parse PRMTOP",description:"Parse PRMTOP from String data"},from:[_.G.Data.String],to:_.G.Format.Prmtop})({apply:({a:e})=>i.iQ.create("Parse PRMTOP",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PRMTOP",async e=>await Z(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Prmtop(a.result)})}),ex=_.E.BuiltIn({name:"parse-top",display:{name:"Parse TOP",description:"Parse TOP from String data"},from:[_.G.Data.String],to:_.G.Format.Top})({apply:({a:e})=>i.iQ.create("Parse TOP",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse TOP",async e=>await el(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Top(a.result)})}),eS=_.E.BuiltIn({name:"parse-ply",display:{name:"Parse PLY",description:"Parse PLY from String data"},from:[_.G.Data.String],to:_.G.Format.Ply})({apply:({a:e})=>i.iQ.create("Parse PLY",async t=>{var r;let a=await (r=e.data,i.iQ.create("Parse PLY",async e=>await x(r,e))).runInContext(t);if(a.isError)throw Error(a.message);return new _.G.Format.Ply(a.result,{label:a.result.comments[0]||"PLY Data"})})}),eT=_.E.BuiltIn({name:"parse-ccp4",display:{name:"Parse CCP4/MRC/MAP",description:"Parse CCP4/MRC/MAP from Binary data"},from:[_.G.Data.Binary],to:_.G.Format.Ccp4})({apply:({a:e})=>i.iQ.create("Parse CCP4/MRC/MAP",async t=>{let r=await a.Qc(e.data,e.label).runInContext(t);if(r.isError)throw Error(r.message);return new _.G.Format.Ccp4(r.result)})}),eC=_.E.BuiltIn({name:"parse-dsn6",display:{name:"Parse DSN6/BRIX",description:"Parse CCP4/BRIX from Binary data"},from:[_.G.Data.Binary],to:_.G.Format.Dsn6})({apply:({a:e})=>i.iQ.create("Parse DSN6/BRIX",async t=>{var r,a,n,u;
7319let c=await (r=e.data,a=e.label,n=s.l.fromBuffer(l.z.fromUint8Array(r),a),u=r.length,i.iQ.create("Parse DSN6/BRIX",async e=>{try{return o.X.success(await p(n,u,e))}catch(e){return o.X.error(e)}})).runInContext(t);if(c.isError)throw Error(c.message);return new _.G.Format.Dsn6(c.result)})}),eO=_.E.BuiltIn({name:"parse-dx",display:{name:"Parse DX",description:"Parse DX from Binary/String data"},from:[_.G.Data.Binary,_.G.Data.String],to:_.G.Format.Dx})({apply:({a:e})=>i.iQ.create("Parse DX",async t=>{var r,a;let n=await (r=e.data,a=e.label,i.iQ.create("Parse DX",e=>z.TT.is(r)?U(e,r,a):V(e,r,a))).runInContext(t);if(n.isError)throw Error(n.message);return new _.G.Format.Dx(n.result)})}),eI=_.E.BuiltIn({name:"import-string",display:{name:"Import String",description:"Import given data as a string"},from:_.G.Root,to:_.G.Data.String,params:{data:B.e.Value(""),label:B.e.Optional(B.e.Text(""))}})({apply:({params:{data:e,label:t}})=>new _.G.Data.String(e,{label:t||""}),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported strings."})}),eA=_.E.BuiltIn({name:"import-json",display:{name:"Import JSON",description:"Import given data as a JSON"},from:_.G.Root,to:_.G.Format.Json,params:{data:B.e.Value({}),label:B.e.Optional(B.e.Text(""))}})({apply:({params:{data:e,label:t}})=>new _.G.Format.Json(e,{label:t||""}),update:({oldParams:e,newParams:t,b:r})=>e.data!==t.data?P.td.UpdateResult.Recreate:e.label!==t.label?(r.label=t.label||"",P.td.UpdateResult.Updated):P.td.UpdateResult.Unchanged,isSerializable:()=>({isSerializable:!1,reason:"Cannot serialize user imported JSON."})}),ew=_.E.BuiltIn({name:"parse-json",display:{name:"Parse JSON",description:"Parse JSON from String data"},from:[_.G.Data.String],to:_.G.Format.Json})({apply:({a:e})=>i.iQ.create("Parse JSON",async t=>{let r=await new Response(z.TT.toString(e.data)).json();return new _.G.Format.Json(r)})}),eD=_.E.BuiltIn({name:"lazy-volume",display:{name:"Lazy Volume",description:"A placeholder for lazy loaded volume representation"},from:_.G.Root,to:_.G.Volume.Lazy,params:{url:B.e.Url(""),isBinary:B.e.Boolean(!1),format:B.e.Text("ccp4"),entryId:B.e.Value("",{isHidden:!0}),isovalues:B.e.ObjectList({type:B.e.Text("relative"),value:B.e.Numeric(0),color:B.e.Color(j.t.black),alpha:B.e.Numeric(1,{min:0,max:1,step:.01}),volumeIndex:B.e.Numeric(0)},e=>`${e.type} ${e.value}`)}})({apply:({a:e,params:t})=>i.iQ.create("Lazy Volume",async e=>{let r=Array.isArray(t.entryId)?t.entryId.join(", "):t.entryId;return new _.G.Volume.Lazy(t,{label:`${r||t.url}`,description:"Lazy Volume"})})})},40208:function(e,t,r){r.d(t,{GW:function(){return u},Gl:function(){return f},K$:function(){return s},KD:function(){return m},OQ:function(){return o},Oq:function(){return i},_$:function(){return l},cY:function(){return c},sj:function(){return p}});var a=r(14086),n=r(87144);function i(e){return{pairs:[{loci:[e[0].loci,e[1].loci]}]}}function o(e){return{triples:[{loci:[e[0].loci,e[1].loci,e[2].loci]}]}}function s(e){let t=e[0].loci;return{quads:[{loci:[t,e[1].loci,e[2].loci,e[3].loci]}]}}function l(e){return{infos:[{loci:e[0].loci}]}}function u(e){return{locis:e.map(e=>e.loci)}}function c(e){return{locis:e.map(e=>e.loci)}}let d={center:(0,n.AO)(),rotation:(0,n.yb)(),translationToCenter:(0,n.yb)(),translationFromCenter:(0,n.yb)(),translation:(0,n.yb)(),local:(0,n.yb)()};function p(e){var t;return"components"===e.name&&(null===(t=e.params.rotationCenter)||void 0===t?void 0:t.name)==="centroid"}function f(e,t){var r,a;if("matrix"===e.name){let t=(0,n.yb)();return n.yb.copy(t,e.params.data),e.params.transpose&&n.yb.transpose(t,t),t}{(null===(r=e.params.rotationCenter)||void 0===r?void 0:r.name)==="centroid"?n.AO.copy(d.center,t):(null===(a=e.params.rotationCenter)||void 0===a?void 0:a.name)==="point"?n.AO.copy(d.center,e.params.rotationCenter.params.point):n.AO.set(d.center,0,0,0),n.yb.fromTranslation(d.translationToCenter,d.center),n.yb.fromRotation(d.rotation,e.params.angle*Math.PI/180,e.params.axis),n.yb.fromTranslation(d.translationFromCenter,n.AO.negate(d.center,d.center));let i=n.yb.mul3((0,n.yb)(),d.translationToCenter,d.rotation,d.translationFromCenter);return n.yb.fromTranslation(d.translation,e.params.translation),n.yb.mul(i,d.translation,i),i}}let m=a.e.MappedStatic("matrix",{matrix:a.e.Group({data:a.e.Mat4(n.yb.identity()),transpose:a.e.Boolean(!1)},{isFlat:!0}),components:a.e.Group({translation:a.e.Vec3(n.AO.create(0,0,0)),axis:a.e.Vec3(n.AO.create(1,0,0)),angle:a.e.Numeric(0,{min:-360,max:360,step:1},{description:"Angle in Degrees"}),rotationCenter:a.e.MappedStatic("point",{point:a.e.Group({point:a.e.Vec3(n.AO.create(0,0,0))},{isFlat:!0}),centroid:a.e.Group({})})},{isFlat:!0})},{label:"Kind"})},46102:function(e,t,r){r.r(t),r.d(t,{CoordinatesFromDcd:function(){return tQ},CoordinatesFromLammpstraj:function(){return tJ},CoordinatesFromNctraj:function(){return t$},CoordinatesFromTrr:function(){return tY},CoordinatesFromXtc:function(){return tZ},CustomModelProperties:function(){return rI},CustomStructureProperties:function(){return rw},ModelFromTrajectory:function(){return rc},ModelWithCoordinates:function(){return rh},MultiStructureSelectionFromBundle:function(){return rb},MultiStructureSelectionFromExpression:function(){return rv},ShapeFromPly:function(){return rE},StructureComplexElement:function(){return rC},StructureComplexElementTypes:function(){return rS},StructureComponent:function(){return rO},StructureFromModel:function(){return rp},StructureFromTrajectory:function(){return rd},StructureInstances:function(){return rm},StructureSelectionFromBundle:function(){return rx},StructureSelectionFromExpression:function(){return rg},StructureSelectionFromScript:function(){return ry},TopologyFromPrmtop:function(){return t1}
7319,TopologyFromPsf:function(){return t0},TopologyFromTop:function(){return t2},TrajectoryFromBlob:function(){return t5},TrajectoryFromCifCore:function(){return rs},TrajectoryFromCube:function(){return ro},TrajectoryFromGRO:function(){return t9},TrajectoryFromLammpsData:function(){return rt},TrajectoryFromLammpsTrajData:function(){return rr},TrajectoryFromMOL:function(){return ra},TrajectoryFromMOL2:function(){return ri},TrajectoryFromMmCif:function(){return t8},TrajectoryFromModelAndCoordinates:function(){return t4},TrajectoryFromPDB:function(){return t7},TrajectoryFromSDF:function(){return rn},TrajectoryFromXYZ:function(){return re},TransformStructureConformation:function(){return rf},getTrajectory:function(){return t3}});var a,n,i,o,s,l,u,c,d,p,f,m,h,g,b,y,x,S,T,C,O,I,A,w,D,E,M,P,k=r(7600),B=r(54854),_=r(3523),R=r(86920),F=r(55291),L=r(99408);async function z(e){let{tokenizer:t,numberOfAtoms:r}=e,a=await F.Tokenizer.readLinesAsync(t,r,e.runtimeCtx,1e5),n=t.data.substring(a.indices[0],a.indices[1]).substring(20).match(/\.\d+/g),i=6===n.length;e.header.hasVelocities=i,e.header.precision.position=n[0].length-1,e.header.precision.velocity=i?n[3].length-1:0;let o=e.header.precision.position+5,s=20+3*o,l=e.header.precision.velocity+4,u=function(e,t,r){return function(e,t,r,a){let{data:n,indices:i,count:o}=e,{valueType:s}=a,l="str"===s?e=>{let a=i[2*e]+t,o=i[2*e+1];if(a>=o)return"";let s=a+r;return s>o&&(s=o),(0,F.m)(n,a,s)}:"int"===s?e=>{let a=i[2*e]+t;return a>i[2*e+1]?0:(0,L.qY)(n,a,a+r)}:e=>{let a=i[2*e]+t;return a>i[2*e+1]?0:(0,L.Ym)(n,a,a+r)};return{schema:a,__array:void 0,isDefined:!0,rowCount:o,value:l,valueKind:e=>R.sg.ValueKinds.Present,toArray:e=>R.A_.createAndFillArray(o,l,e),areValuesEqual:(e,t)=>l(e)===l(t)}}(a,e,t,r)},c=R.sg.Undefined(e.numberOfAtoms,R.sg.Schema.float);return{count:e.numberOfAtoms,residueNumber:u(0,5,R.sg.Schema.int),residueName:u(5,5,R.sg.Schema.str),atomName:u(10,5,R.sg.Schema.str),atomNumber:u(15,5,R.sg.Schema.int),x:u(20,o,R.sg.Schema.float),y:u(20+o,o,R.sg.Schema.float),z:u(20+2*o,o,R.sg.Schema.float),vx:i?u(s,l,R.sg.Schema.float):c,vy:i?u(s+l,l,R.sg.Schema.float):c,vz:i?u(s+2*l,l,R.sg.Schema.float):c}}async function N(e,t){let r=(0,F.Tokenizer)(e);await t.update({message:"Parsing...",current:0,max:e.length});let a=[];for(;r.position<e.length;){let e={tokenizer:r,header:{title:"",timeInPs:0,hasVelocities:!1,precision:{position:0,velocity:0},box:[0,0,0]},numberOfAtoms:0,runtimeCtx:t};!function(e){let{tokenizer:t,header:r}=e,a=F.Tokenizer.readLine(t);0===a.trim().length&&(a=F.Tokenizer.readLine(t));let n=a.lastIndexOf("t=");n>=0?(r.timeInPs=parseFloat(a.substring(n+2)),r.title=a.substring(0,n).trim(),r.title&&","===r.title[r.title.length-1]&&(r.title=r.title.substring(0,r.title.length-1))):r.title=a}(e),function(e){let{tokenizer:t}=e;F.Tokenizer.markLine(t);let r=F.Tokenizer.getTokenString(t);e.numberOfAtoms=parseInt(r)}(e);let n=await z(e);!function(e){let{tokenizer:t}=e,r=F.Tokenizer.readLine(t).trim().split(/\s+/g);e.header.box=[+r[0],+r[1],+r[2]]}(e),a.push({header:e.header,atoms:n})}return k.X.success({structures:a})}var G=r(87144),U=r(70371),V=r(89623),j=r(4376),H=r(93898),q=r(69062),X=r(36111),W=r(14086),K=r(7922),Q=r(67546),Z=r(75042),Y=r(68303);function $(e){let t=e&&e.getElement("vertex"),r=e&&e.getElement("material"),a={group:"",vRed:"",vGreen:"",vBlue:"",mRed:"",mGreen:"",mBlue:""},n=[["",""]],i=[["",""]];if(t){for(let e=0,r=t.propertyNames.length;e<r;++e){let r=t.propertyNames[e],a=t.propertyTypes[e];("uchar"===a||"uint8"===a||"ushort"===a||"uint16"===a||"uint"===a||"uint32"===a||"int"===a)&&n.push([r,r]),("uchar"===a||"uint8"===a)&&i.push([r,r])}t.propertyNames.includes("atomid")?a.group="atomid":t.propertyNames.includes("material_index")&&(a.group="material_index"),t.propertyNames.includes("red")&&(a.vRed="red"),t.propertyNames.includes("green")&&(a.vGreen="green"),t.propertyNames.includes("blue")&&(a.vBlue="blue")}let o=[["",""]];if(r){for(let e=0,t=r.propertyNames.length;e<t;++e){let t=r.propertyNames[e],a=r.propertyTypes[e];("uchar"===a||"uint8"===a)&&o.push([t,t])}r.propertyNames.includes("red")&&(a.mRed="red"),r.propertyNames.includes("green")&&(a.mGreen="green"),r.propertyNames.includes("blue")&&(a.mBlue="blue")}let s=a.vRed&&a.vGreen&&a.vBlue?"vertex":a.mRed&&a.mGreen&&a.mBlue?"material":"uniform";return{...j.K.Params,coloring:W.e.MappedStatic(s,{vertex:W.e.Group({red:W.e.Select(a.vRed,i,{label:"Red Property"}),green:W.e.Select(a.vGreen,i,{label:"Green Property"}),blue:W.e.Select(a.vBlue,i,{label:"Blue Property"})},{isFlat:!0}),material:W.e.Group({red:W.e.Select(a.mRed,o,{label:"Red Property"}),green:W.e.Select(a.mGreen,o,{label:"Green Property"}),blue:W.e.Select(a.mBlue,o,{label:"Blue Property"})},{isFlat:!0}),uniform:W.e.Group({color:W.e.Color(K.t.grey),saturation:W.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:W.e.Numeric(0,{min:-6,max:6,step:.1})},{isFlat:!0})}),grouping:W.e.MappedStatic(a.group?"vertex":"none",{vertex:W.e.Group({group:W.e.Select(a.group,n,{label:"Group Property"})},{isFlat:!0}),none:W.e.Group({})})}}let J=$();async function ee(e,t,r,a,n){let i=V.V.createState(t.rowCount,t.rowCount/4,n),o=t.getProperty("x"),s=t.getProperty("y"),l=t.getProperty("z");if(!o||!s||!l)throw Error("missing coordinate properties");
7319let u=t.getProperty("nx"),c=t.getProperty("ny"),d=t.getProperty("nz");for(let r=0,n=t.rowCount;r<n;r+=1e5)!function(e,t,r,a,n){let{vertices:i,normals:o,groups:s}=r,l=a.getProperty("x"),u=a.getProperty("y"),c=a.getProperty("z");if(!l||!u||!c)throw Error("missing coordinate properties");let d=a.getProperty("nx"),p=a.getProperty("ny"),f=a.getProperty("nz"),m=!!d&&!!p&&!!f;for(let r=e;r<t;++r)q.pS.add3(i,l.value(r),u.value(r),c.value(r)),m&&q.pS.add3(o,d.value(r),p.value(r),f.value(r)),q.pS.add(s,n[r])}(r,Math.min(r+1e5,n),i,t,a),e.shouldUpdate&&await e.update({message:"adding ply mesh vertices",current:r,max:n});for(let t=0,a=r.rowCount;t<a;t+=1e5)!function(e,t,r,a){let{indices:n}=r;for(let r=e;r<t;++r){let{entries:e,count:t}=a.value(r);3===t?q.pS.add3(n,e[0],e[1],e[2]):4===t&&(q.pS.add3(n,e[2],e[1],e[0]),q.pS.add3(n,e[2],e[0],e[3]))}}(t,Math.min(t+1e5,a),i,r),e.shouldUpdate&&await e.update({message:"adding ply mesh faces",current:t,max:a});let p=V.V.getMesh(i);return u&&c&&d||j.K.computeNormals(p),Y.IO.updateIfChanged(p.varyingGroup,!0),p}let et=R.sg.Schema.int;function er(e,t,r){let a,n,i;let{coloring:o}=r,{rowCount:s}=e;if("vertex"===o.name)a=e.getProperty(o.params.red)||R.sg.ofConst(127,s,et),n=e.getProperty(o.params.green)||R.sg.ofConst(127,s,et),i=e.getProperty(o.params.blue)||R.sg.ofConst(127,s,et);else if("material"===o.name)a=t&&t.getProperty(o.params.red)||R.sg.ofConst(127,s,et),n=t&&t.getProperty(o.params.green)||R.sg.ofConst(127,s,et),i=t&&t.getProperty(o.params.blue)||R.sg.ofConst(127,s,et);else{let e=o.params.color;e=U.Il.saturate(e,o.params.saturation),e=U.Il.lighten(e,o.params.lightness);let[t,r,l]=U.Il.toRgb(e);a=R.sg.ofConst(t,s,et),n=R.sg.ofConst(r,s,et),i=R.sg.ofConst(l,s,et)}return{kind:o.name,red:a,green:n,blue:i}}function ea(e,t,r,a){let{kind:n,red:i,green:o,blue:s}=r,{ids:l,map:u,label:c}=a,{source:d,transforms:p}=e;return H.b.create("ply-mesh",d,t,e=>{let t="material"===n?e:u[e];return U.Il.fromRgb(i.value(t),o.value(t),s.value(t))},()=>1,e=>`${c} ${l[e]}`,p)}var en=r(24496),ei=r(58463);function eo(){return eo.empty()}!function(e){function t(e,t){return{size:e,anglesInRadians:t}}function r(){return t((0,G.AO)(),(0,G.AO)())}e.create=t,e.empty=r,e.fromBasis=function(e,a,n){let i=G.AO.magnitude(e),o=G.AO.magnitude(a),s=G.AO.magnitude(n),l=Math.acos(G.AO.dot(a,n)/(o*s)),u=Math.acos(G.AO.dot(e,n)/(i*s)),c=Math.acos(G.AO.dot(e,a)/(i*o));return i<=0||o<=0||s<=0||l>=Math.PI||u>=Math.PI||c>=Math.PI?r():t(G.AO.create(i,o,s),G.AO.create(l,u,c))}}(eo||(eo={}));var es=r(22177);function el(e,t,r,a){let n=r,i=a-1,o=t.charCodeAt(n);for(;(32===o||o>=48&&o<=57)&&n<=i;)o=t.charCodeAt(++n);for(o=t.charCodeAt(i);(32===o||o>=48&&o<=57)&&i>=n;)o=t.charCodeAt(--i);if(n===++i||n+1===i)return F.c.add(e,n,i);if(o=t.charCodeAt(n),n+2===i){let r=t.charCodeAt(n+1);if((78===o||110===o)&&(65===r||97===r)||(67===o||99===o)&&(76===r||108===r)||(70===o||102===o)&&(69===r||101===r)||(83===o||115===o)&&(73===r||105===r)||(66===o||98===o)&&(82===r||114===r)||(65===o||97===o)&&(83===r||115===r)||(76===o||108===o)&&(73===r||105===r)||(71===o||103===o)&&(65===r||97===r))return F.c.add(e,n,n+2)}if(67===o||99===o||72===o||104===o||78===o||110===o||79===o||111===o||80===o||112===o||83===o||115===o)return F.c.add(e,n,n+1);F.c.add(e,n,n)}let eu=new Set(["NA","CL","FE","SI","BR","AS","LI","GA"]),ec=new Set(["C","H","N","O","P","S","F","B"]),ed=/^[\s\d]+|[\s\d]+$/g;function ep(e,t){let r=(e=e.replace(ed,"").toUpperCase()).length;if(0===r||1===r||eu.has(e))return e;if(3===r&&t===e){if("SOD"===e)return"NA";if("POT"===e)return"K";if("CES"===e)return"CS";if("CAL"===e)return"CA";if("CLA"===e)return"CL"}return ec.has(e[0])?e[0]:""}var ef=r(91044),em=r(44740),eh=r(67738);let eg="ABCDEFGHIJKLMNOPQRSTUVWXYZ",ev=(0,eh.m)(function(e){let t=eg.length,r=e,a=0,n=eg[r%t];for(;r>=t;)n+=eg[(r=Math.floor(r/t))%t],a+=1;return a>=5&&console.warn("getChainId overflow"),n});var eb=r(3709),ey=r(18886),ex=r(91080),eS=r(36667);(a=g||(g={})).is=function(e){return(null==e?void 0:e.kind)==="gro"},a.fromGro=function(e){return{kind:"gro",name:e.structures[0].header.title,data:e}};var eT=r(12618),eC=r(42639);function eO(e,t){return{id:e,details:t,groups:[]}}let eI={1:"helx_rh_al_p",2:"helx_rh_om_p",3:"helx_rh_pi_p",4:"helx_rh_ga_p",5:"helx_rh_3t_p",6:"helx_lh_al_p",7:"helx_lh_om_p",8:"helx_lh_ga_p",9:"helx_rh_27_p",10:"helx_rh_pp_p"},eA={MOL_ID:"",MOLECULE:"",CHAIN:"",FRAGMENT:"",SYNONYM:"",EC:"",ENGINEERED:"",MUTATION:"",OTHER_DETAILS:""};var ew=r(65665);class eD{constructor(e,t,r,a){this.asymIds=e,this.modelNums=t,this.terIndices=r,this.hasAssemblies=a,this.asymIdCounts=new Map,this.currModelNum=void 0,this.currAsymId="",this.currLabelAsymId=""}clear(){this.asymIdCounts.clear(),this.currModelNum=void 0}get(e){let t=this.asymIds.value(e);if(this.hasAssemblies)return t;let r=this.modelNums[e];if(r!==this.currModelNum?(this.asymIdCounts.clear(),this.currModelNum=r,this.currLabelAsymId=t):this.currAsymId!==t&&(this.currAsymId=t,this.currLabelAsymId=t),this.asymIdCounts.has(t)){if(this.terIndices.has(e)){let e=this.asymIdCounts.get(t)+1;this.asymIdCounts.set(t,e),this.currLabelAsymId=`${t}_${e}`}}else this.asymIdCounts.set(t,0);return this.currLabelAsymId}}function eE(e,t,r,a,n,i){let{data:o}=r,s=n-a;F.c.addToken(e.group_PDB,F.Tokenizer.trim(r,a,a+6)),F.Tokenizer.trim(r,a+6,a+11),e.id[e.index]=r.data.substring(r.tokenStart,r.tokenEnd),F.c.addToken(e.auth_atom_id,F.Tokenizer.trim(r,a+12,a+16)),32===o.charCo
7319deAt(a+16)?F.c.add(e.label_alt_id,0,0):F.c.add(e.label_alt_id,a+16,a+17),F.c.addToken(e.auth_comp_id,F.Tokenizer.trim(r,a+17,a+21)),F.c.add(e.auth_asym_id,a+21,a+22),F.c.addToken(e.auth_seq_id,F.Tokenizer.trim(r,a+22,a+26)),32===o.charCodeAt(a+26)?F.c.add(e.pdbx_PDB_ins_code,0,0):F.c.add(e.pdbx_PDB_ins_code,a+26,a+27),F.c.addToken(e.Cartn_x,F.Tokenizer.trim(r,a+30,a+38)),F.c.addToken(e.Cartn_y,F.Tokenizer.trim(r,a+38,a+46)),F.c.addToken(e.Cartn_z,F.Tokenizer.trim(r,a+46,a+54)),"pqr"===i?(F.c.addToken(e.partial_charge,F.Tokenizer.trim(r,a+54,a+62)),el(e.type_symbol,o,a+12,a+16)):(F.c.addToken(e.occupancy,F.Tokenizer.trim(r,a+54,a+60)),s>=66?F.c.addToken(e.B_iso_or_equiv,F.Tokenizer.trim(r,a+60,a+66)):F.c.add(e.B_iso_or_equiv,0,0),"pdbqt"===i&&F.c.addToken(e.partial_charge,F.Tokenizer.trim(r,a+70,a+76)),s>=78&&"pdb"===i?(F.Tokenizer.trim(r,a+76,a+78),r.tokenStart<r.tokenEnd?F.c.addToken(e.type_symbol,r):el(e.type_symbol,o,a+12,a+16)):el(e.type_symbol,o,a+12,a+16)),e.pdbx_PDB_model_num[e.index]=t,e.index++}var eM=r(34985),eP=r(48502);function ek(e,t,r,a){let n=a.length;if(n>r-t)return!1;for(let r=0;r<n;r++)if(e.charCodeAt(t+r)!==a.charCodeAt(r))return!1;return!0}async function eB(e){let t;let{lines:r,variant:a}=e,{data:n,indices:i}=r,o=(0,F.Tokenizer)(n),s=0,l=0;for(let e=0,t=r.count;e<t;e++){let t=i[2*e],r=i[2*e+1];switch(n.charAt(t)){case"A":ek(n,t,r,"ATOM ")?s++:ek(n,t,r,"ANISOU")&&l++;break;case"H":ek(n,t,r,"HETATM")&&s++}}let u={},c=function(e,t){let r=()=>[],a=()=>F.c.create(e,2*t);return{index:0,group_PDB:a(),id:r(),auth_atom_id:a(),label_alt_id:a(),auth_comp_id:a(),auth_asym_id:a(),auth_seq_id:a(),pdbx_PDB_ins_code:a(),Cartn_x:a(),Cartn_y:a(),Cartn_z:a(),occupancy:a(),B_iso_or_equiv:a(),type_symbol:a(),pdbx_PDB_model_num:r(),label_entity_id:r(),partial_charge:a()}}(n,s),d=function(e,t){let r=()=>new Float32Array(t),a=()=>F.c.create(e,2*t);return{index:0,count:t,id:[],type_symbol:a(),pdbx_label_atom_id:a(),pdbx_label_alt_id:a(),pdbx_label_comp_id:a(),pdbx_label_asym_id:a(),pdbx_label_seq_id:a(),pdbx_PDB_ins_code:a(),"U[1][1]":r(),"U[2][2]":r(),"U[3][3]":r(),"U[1][2]":r(),"U[1][3]":r(),"U[2][3]":r(),pdbx_auth_seq_id:a(),pdbx_auth_comp_id:a(),pdbx_auth_asym_id:a(),pdbx_auth_atom_id:a()}}(n,l),p=new eb.L,f=[],m=[],h=0,g="",b=!1,y=!1,x=new Set;for(let s=0,l=r.count;s<l;s++){let l=i[2*s],S=i[2*s+1];switch(n.charAt(l)){case"A":ek(n,l,S,"ATOM ")?(h||(g=""+ ++h),eE(c,g,o,l,S,a)):ek(n,l,S,"ANISOU")&&function(e,t,r,a,n){let{data:i}=r;F.Tokenizer.trim(r,a+6,a+11),e.id[e.index]=i.substring(r.tokenStart,r.tokenEnd),F.c.addToken(e.pdbx_auth_atom_id,F.Tokenizer.trim(r,a+12,a+16)),32===i.charCodeAt(a+16)?F.c.add(e.pdbx_label_alt_id,0,0):F.c.add(e.pdbx_label_alt_id,a+16,a+17),F.c.addToken(e.pdbx_auth_comp_id,F.Tokenizer.trim(r,a+17,a+21)),F.c.add(e.pdbx_auth_asym_id,a+21,a+22),F.c.addToken(e.pdbx_auth_seq_id,F.Tokenizer.trim(r,a+22,a+26)),32===i.charCodeAt(a+26)?F.c.add(e.pdbx_PDB_ins_code,0,0):F.c.add(e.pdbx_PDB_ins_code,a+26,a+27),e["U[1][1]"][e.index]=(0,L.qY)(i,a+28,a+35)/1e4,e["U[2][2]"][e.index]=(0,L.qY)(i,a+35,a+42)/1e4,e["U[3][3]"][e.index]=(0,L.qY)(i,a+42,a+49)/1e4,e["U[
73191][2]"][e.index]=(0,L.qY)(i,a+49,a+56)/1e4,e["U[1][3]"][e.index]=(0,L.qY)(i,a+56,a+63)/1e4,e["U[2][3]"][e.index]=(0,L.qY)(i,a+63,a+70)/1e4,n-a>=78?(F.Tokenizer.trim(r,a+76,a+78),r.tokenStart<r.tokenEnd?F.c.addToken(e.type_symbol,r):el(e.type_symbol,i,a+12,a+16)):el(e.type_symbol,i,a+12,a+16),e.index++}(d,0,o,l,S);break;case"C":if(ek(n,l,S,"CRYST1"))f.push(...function(e,t){let r=(e,r)=>(t.substr(e,r)||"").trim(),a={entry_id:eC.Q8.ofString(e),length_a:eC.Q8.ofString(r(6,9)),length_b:eC.Q8.ofString(r(15,9)),length_c:eC.Q8.ofString(r(24,9)),angle_alpha:eC.Q8.ofString(r(33,7)),angle_beta:eC.Q8.ofString(r(40,7)),angle_gamma:eC.Q8.ofString(r(47,7)),Z_PDB:eC.Q8.ofString(r(66,4)),pdbx_unique_axis:eC.Q8.ofString("?")},n={entry_id:eC.Q8.ofString(e),"space_group_name_H-M":eC.Q8.ofString(r(55,11)),Int_Tables_number:eC.Q8.ofString("?"),cell_setting:eC.Q8.ofString("?"),space_group_name_Hall:eC.Q8.ofString("?")};return[eC.wA.ofFields("cell",a),eC.wA.ofFields("symmetry",n)]}(e.id||"?",n.substring(l,S)));else if(ek(n,l,S,"CONECT")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"CONECT");)e++;t?eP.Au&&console.log("only single CONECT block allowed, ignoring others"):t=[s,e],s=e-1}else if(ek(n,l,S,"COMPND")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"COMPND");)e++;p.setCompounds(function(e,t,r){let a;let n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),i={chains:[],description:""},o=[];for(let e=t;e<r;e++){let t;let r=n(e).substring(10,80).trim(),s=r.indexOf(":"),l=r.substring(0,s);l in eA?(a=l,t=r.substring(s+2)):t=r,t=t.replace(/;$/,""),"MOL_ID"===a?(i={chains:[],description:""},o.push(i)):"MOLECULE"===a?(i.description&&(i.description+=" "),i.description+=t):"CHAIN"===a&&Array.prototype.push.apply(i.chains,t.split(/\s*,\s*/))}let s=[];for(let e of o)for(let t of e.chains)s.push({description:e.description,chains:[t]});return s}(r,s,e)),s=e-1}break;case"H":if(ek(n,l,S,"HEADER"))!function(e,t,r,a){let n=e.substring(t,r);a.id_code=n.substring(62,66).trim()||void 0,a.dep_date=n.substring(50,59).trim()||void 0,a.classification=n.substring(10,50).trim()||void 0}(n,l,S,u);else if(ek(n,l,S,"HETATM"))h||(g=""+ ++h),eE(c,g,o,l,S,a);else if(ek(n,l,S,"HELIX")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"HELIX");)e++;f.push(function(e,t,r){let a=[],n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=n(e);a.push({serNum:t.substring(7,10).trim(),helixID:t.substring(11,14).trim(),initResName:t.substring(15,19).trim(),initChainID:t.substring(19,20).trim(),initSeqNum:t.substring(21,25).trim(),initICode:t.substring(25,26).trim(),endResName:t.substring(27,31).trim(),endChainID:t.substring(31,34).trim(),endSeqNum:t.substring(33,37).trim(),endICode:t.substring(37,38).trim(),helixClass:t.substring(38,40).trim(),comment:t.substring(40,70).trim(),length:t.substring(71,76).trim()})}let i=eC.Q8.ofStrings(a.map(e=>e.initChainID)),o=eC.Q8.ofStrings(a.map(e=>e.initResName)),s=eC.Q8.ofStrings(a.map(e=>e.endChainID)),l=eC.Q8.ofStrings(a.map(e=>e.endResName)),u={beg_label_asym_id:i,beg_label_comp_id:o,beg_label_seq_id:eC.Q8.ofUndefined(a.length,R.sg.Schema.int),beg_auth_asym_id:i,beg_auth_comp_id:o,beg_auth_seq_id:eC.Q8.ofStrings(a.map(e=>e.initSeqNum)),conf_type_id:eC.Q8.ofStrings(a.map(e=>eI[e.helixClass]||"helx_p")),details:eC.Q8.ofStrings(a.map(e=>e.comment)),end_label_asym_id:s,end_label_comp_id:l,end_label_seq_id:eC.Q8.ofUndefined(a.length,R.sg.Schema.int),end_auth_asym_id:s,end_auth_comp_id:l,end_auth_seq_id:eC.Q8.ofStrings(a.map(e=>e.endSeqNum)),id:eC.Q8.ofStrings(a.map(e=>e.serNum)),pdbx_beg_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.initICode)),pdbx_end_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.endICode)),pdbx_PDB_helix_class:eC.Q8.ofStrings(a.map(e=>e.helixClass)),pdbx_PDB_helix_length:eC.Q8.ofStrings(a.map(e=>e.length)),pdbx_PDB_helix_id:eC.Q8.ofStrings(a.map(e=>e.helixID))};return eC.wA.ofFields("struct_conf",u)}(r,s,e)),s=e-1}else if(ek(n,l,S,"HETNAM")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"HETNAM");)e++;m.push(...Array.from((function(e,t,r){let a=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),n=new Map;for(let e=t;e<r;e++){let t=a(e),r=t.substring(11,14).trim(),i=t.substring(15).trim();n.has(r)?n.set(r,`${n.get(r)} ${i}`):n.set(r,i)}return n})(r,s,e).entries())),s=e-1}break;case"M":if(ek(n,l,S,"MODEL ")&&(g=""+ ++h),ek(n,l,S,"MTRIX")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"MTRIX");)e++;f.push(...function(e,t,r){let a;let n=[],i=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=i(e),r=t.split(/\s+/),o=parseInt(t[5])-1;0===o&&(a=G.yb.identity(),n.push(a)),G.yb.setValue(a,o,0,parseFloat(r[2])),G.yb.setValue(a,o,1,parseFloat(r[3])),G.yb.setValue(a,o,2,parseFloat(r[4])),G.yb.setValue(a,o,3,parseFloat(r[5]))}if(0===n.length)return[];let o=[],s=1;
7319for(let e of n){let t={id:"ncsop"+s++,code:".",details:"."};for(let r=0;r<3;r++){for(let a=0;a<3;a++)t[`matrix[${r+1}][${a+1}]`]=""+G.yb.getValue(e,r,a);t[`vector[${r+1}]`]=""+G.yb.getValue(e,r,3)}o.push(t)}let l={id:eC.Q8.ofStrings(o.map(e=>e.id)),code:eC.Q8.ofStrings(o.map(e=>e.code)),details:eC.Q8.ofStrings(o.map(e=>e.details))};for(let e=0;e<3;e++){for(let t=0;t<3;t++){let r=`matrix[${e+1}][${t+1}]`;l[r]=eC.Q8.ofStrings(o.map(e=>e[r]))}let t=`vector[${e+1}]`;l[t]=eC.Q8.ofStrings(o.map(e=>e[t]))}return[eC.wA.ofFields("struct_ncs_oper",l)]}(r,s,e)),s=e-1}break;case"O":break;case"R":if(ek(n,l,S,"REMARK 350")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"REMARK 350");)e++;f.push(...function(e,t,r){let a=[],n,i,o,s=1,l=1,u=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=u(e);if("BIOMOLECULE:"===t.substr(11,12)){let r=t.substr(23).trim(),i=`Biomolecule ${r}`;"APPLY THE FOLLOWING TO CHAINS:"!==(t=u(e+1)).substr(11,30)&&(e++,i=t.substr(11).trim()),n=eO(r,i),a.push(n)}else if("BIOMT"===t.substr(13,5)){let e=t.split(/\s+/),r=parseInt(t[18])-1;0===r&&(o=G.yb.identity(),i.operators.push({id:s++,matrix:o})),G.yb.setValue(o,r,0,parseFloat(e[4])),G.yb.setValue(o,r,1,parseFloat(e[5])),G.yb.setValue(o,r,2,parseFloat(e[6])),G.yb.setValue(o,r,3,parseFloat(e[7]))}else if("APPLY THE FOLLOWING TO CHAINS:"===t.substr(11,30)||" AND CHAINS:"===t.substr(11,30)){"APPLY"===t.substr(11,5)&&(i={chains:[],operators:[]},n.groups.push(i));let e=t.substr(41,30).split(",");for(let t=0,r=e.length;t<r;++t){let r=e[t].trim();r&&i.chains.push(r)}}else if("APPLYING THE FOLLOWING TO CHAINS:"===t.substr(11,33)){n=eO(`${l}`,`Biomolecule ${l}`),a.push(n),l+=1,i={chains:[],operators:[]},n.groups.push(i);let r=(t=u(++e)).substr(11,69).split(",");for(let e=0,t=r.length;e<t;++e){let t=r[e].trim();t&&i.chains.push(t)}}}if(0===a.length)return[];let c={id:eC.Q8.ofStrings(a.map(e=>e.id)),details:eC.Q8.ofStrings(a.map(e=>e.details))},d=[];for(let e of a)for(let t of e.groups)d.push({assembly_id:e.id,oper_expression:t.operators.map(e=>e.id).join(","),asym_id_list:t.chains.join(",")});let p={assembly_id:eC.Q8.ofStrings(d.map(e=>e.assembly_id)),oper_expression:eC.Q8.ofStrings(d.map(e=>e.oper_expression)),asym_id_list:eC.Q8.ofStrings(d.map(e=>e.asym_id_list))},f=[];for(let e of a)for(let t of e.groups)for(let e of t.operators){let t={id:""+e.id,type:"?",name:"?",symmetry_operation:"?"};for(let r=0;r<3;r++){for(let a=0;a<3;a++)t[`matrix[${r+1}][${a+1}]`]=""+G.yb.getValue(e.matrix,r,a);t[`vector[${r+1}]`]=""+G.yb.getValue(e.matrix,r,3)}f.push(t)}let m={id:eC.Q8.ofStrings(f.map(e=>e.id)),type:eC.Q8.ofStrings(f.map(e=>e.type)),name:eC.Q8.ofStrings(f.map(e=>e.name)),symmetry_operation:eC.Q8.ofStrings(f.map(e=>e.symmetry_operation))};for(let e=0;e<3;e++){for(let t=0;t<3;t++){let r=`matrix[${e+1}][${t+1}]`;m[r]=eC.Q8.ofStrings(f.map(e=>e[r]))}let t=`vector[${e+1}]`;m[t]=eC.Q8.ofStrings(f.map(e=>e[t]))}return[eC.wA.ofFields("pdbx_struct_assembly",c),eC.wA.ofFields("pdbx_struct_assembly_gen",p),eC.wA.ofFields("pdbx_struct_oper_list",m)]}(r,s,e)),s=e-1,b=!0}break;case"S":if(ek(n,l,S,"SHEET")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"SHEET");)e++;f.push(function(e,t,r){let a=[],n=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]);for(let e=t;e<r;e++){let t=n(e);a.push({strand:t.substring(7,10).trim(),sheetID:t.substring(11,14).trim(),numStrands:t.substring(14,16).trim(),initResName:t.substring(17,21).trim(),initChainID:t.substring(21,22).trim(),initSeqNum:t.substring(22,26).trim(),initICode:t.substring(26,27).trim(),endResName:t.substring(28,32).trim(),endChainID:t.substring(32,33).trim(),endSeqNum:t.substring(33,37).trim(),endICode:t.substring(37,38).trim(),sense:t.substring(38,40).trim(),curAtom:t.substring(41,45).trim(),curResName:t.substring(45,49).trim(),curChainId:t.substring(49,50).trim(),curResSeq:t.substring(50,54).trim(),curICode:t.substring(54,55).trim(),prevAtom:t.substring(56,60).trim(),prevResName:t.substring(60,64).trim(),prevChainId:t.substring(64,65).trim(),prevResSeq:t.substring(65,69).trim(),prevICode:t.substring(69,70).trim()})}let i=eC.Q8.ofStrings(a.map(e=>e.initChainID)),o=eC.Q8.ofStrings(a.map(e=>e.initResName)),s=eC.Q8.ofStrings(a.map(e=>e.initSeqNum)),l=eC.Q8.ofStrings(a.map(e=>e.endChainID)),u=eC.Q8.ofStrings(a.map(e=>e.endResName)),c=eC.Q8.ofStrings(a.map(e=>e.endSeqNum)),d={beg_label_asym_id:i,beg_label_comp_id:o,beg_label_seq_id:s,beg_auth_asym_id:i,beg_auth_comp_id:o,beg_auth_seq_id:s,end_label_asym_id:l,end_label_comp_id:l,end_label_seq_id:c,end_auth_asym_id:l,end_auth_comp_id:u,end_auth_seq_id:c,id:eC.Q8.ofStrings(a.map(e=>
7319e.strand)),sheet_id:eC.Q8.ofStrings(a.map(e=>e.sheetID)),pdbx_beg_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.initICode)),pdbx_end_PDB_ins_code:eC.Q8.ofStrings(a.map(e=>e.endICode))};return eC.wA.ofFields("struct_sheet_range",d)}(r,s,e)),s=e-1}else if(ek(n,l,S,"SEQRES")){let e=s+1;for(;ek(n,l=i[2*e],S=i[2*e+1],"SEQRES");)e++;p.setSeqres(function(e,t,r){let a=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),n=new Map;for(let e=t;e<r;e++){let t=a(e),r=t.substring(11,12),i=t.substring(19).trim().split(/\s+/);n.has(r)||n.set(r,[]),n.get(r).push(...i)}return n}(r,s,e)),s=e-1,y=!0}break;case"T":ek(n,l,S,"TER")&&x.add(c.index)}}if(u.id_code){let e={id:eC.Q8.ofString(u.id_code)};f.push(eC.wA.ofFields("entry",e))}if(u.classification){let e={pdbx_keywords:eC.Q8.ofString(u.classification)};f.push(eC.wA.ofFields("struct_keywords",e))}if(u.dep_date){let e={recvd_initial_deposition_date:eC.Q8.ofString(u.dep_date)};f.push(eC.wA.ofFields("pdbx_database_status",e))}let S=R.sg.ofIntTokens(c.auth_seq_id),T=R.sg.ofStringTokens(c.auth_atom_id),C=R.sg.ofStringTokens(c.auth_comp_id),O=new eD(R.sg.ofStringTokens(c.auth_asym_id),c.pdbx_PDB_model_num,x,b),I=new em.Q(S,T);I.setNames(m),p.setNames(m);for(let e=0,t=C.rowCount;e<t;++e){let t=C.value(e),r=(0,ef.getMoleculeType)(I.add(t,e).type,t),a=O.get(e);c.label_entity_id[e]=p.getEntityId(t,r,a)}let A=function(e,t,r){t.clear();let a=eC.Q8.ofStrings(e.pdbx_PDB_model_num),n=eC.Q8.ofTokens(e.auth_asym_id),i=eC.Q8.ofTokens(e.auth_seq_id),o=eC.Q8.ofTokens(e.pdbx_PDB_ins_code),s=eC.Q8.ofTokens(e.auth_atom_id),l=eC.Q8.ofTokens(e.auth_comp_id),u=eC.Q8.ofStrings(e.id),c=r.hasSeqRes;if(!c){for(let e=0,t=u.rowCount;e<t;++e)if(""!==o.str(e)){c=!0;break}}let d=a.str(0),p=n.str(0),f=i.int(0),m=o.str(0),h=c?1:f,g=new Map,b=new Map,y=[],x=[],S=[];for(let e=0,r=u.rowCount;e<r;++e){let r=a.str(e),l=n.str(e),u=i.int(e),T=o.str(e),C=s.str(e);if(r!==d?(g.clear(),b.clear(),d=r,p=l,f=u,m=T,h=c?1:f):p!==l?(b.clear(),p=l,f=u,m=T,h=c?1:f):f!==u?(b.clear(),f!==h||c?h+=1:h=u,f=u,m=T):m!==T&&(b.clear(),m=T,h+=1),y[e]=t.get(e),b.has(C)){let e=b.get(C)+1;b.set(C,e),C=`${C}_${e}`}else b.set(C,0);x[e]=C,c&&(S[e]=h)}let T=R.sg.ofStringArray(y),C=R.sg.ofStringArray(x),O=c?eC.Q8.ofColumn(R.sg.ofIntArray(S)):eC.Q8.ofUndefined(e.index,R.sg.Schema.int);return{auth_asym_id:n,auth_atom_id:s,auth_comp_id:l,auth_seq_id:i,B_iso_or_equiv:eC.Q8.ofTokens(e.B_iso_or_equiv),Cartn_x:eC.Q8.ofTokens(e.Cartn_x),Cartn_y:eC.Q8.ofTokens(e.Cartn_y),Cartn_z:eC.Q8.ofTokens(e.Cartn_z),group_PDB:eC.Q8.ofTokens(e.group_PDB),id:u,label_alt_id:eC.Q8.ofTokens(e.label_alt_id),label_asym_id:eC.Q8.ofColumn(T),label_atom_id:eC.Q8.ofColumn(C),label_comp_id:l,label_seq_id:O,label_entity_id:eC.Q8.ofStrings(e.label_entity_id),occupancy:(0,ew.f7)(e.occupancy)?eC.Q8.ofUndefined(e.index,R.sg.Schema.float):eC.Q8.ofTokens(e.occupancy),type_symbol:eC.Q8.ofTokens(e.type_symbol),pdbx_PDB_ins_code:eC.Q8.ofTokens(e.pdbx_PDB_ins_code),pdbx_PDB_model_num:a,partial_charge:eC.Q8.ofTokens(e.partial_charge)}}(c,O,{hasAssemblies:b,hasSeqRes:y});"pdb"===a&&delete A.partial_charge,t&&f.push(function(e,t,r,a){let n={};for(let e=0,t=a.id.rowCount;e<t;++e)n[a.id.str(e)]=e;let i=t=>e.data.substring(e.indices[2*t],e.indices[2*t+1]),o=[],s=[],l=[],u=[],c=[],d=[],p=[],f=[],m=[],h=[],g=[],b=[],y=[],x=[],S=[],T=[11,16,21,26],C=1,O=-1,I={},A=!1;for(let e=t;e<r;e++){let t=i(e),r=n[parseInt(t.substr(6,5))];if(void 0!==r){O!==r&&(O=r,I={});for(let e=0;e<4;++e){let i=parseInt(t.substr(T[e],5));if(Number.isNaN(i))continue;let O=n[i];if(void 0===O||r>O)continue;if(void 0!==I[O]){l[I[O]]+=1,A=!0;continue}I[O]=C-1;let w=a.type_symbol.str(r),D=a.type_symbol.str(O);(0,eM.IP)(w)||(0,eM.IP)(D)?(o.push(`metalc${C}`),s.push("metalc")):(o.push(`covale${C}`),s.push("covale")),l.push(1),u.push(a.label_asym_id.str(r)),c.push(a.label_seq_id.int(r)),d.push(a.auth_seq_id.int(r)),p.push(a.label_atom_id.str(r)),f.push(a.label_alt_id.str(r)),m.push(a.pdbx_PDB_ins_code.str(r)),h.push(a.label_asym_id.str(O)),g.push(a.label_seq_id.int(O)),b.push(a.auth_seq_id.int(O)),y.push(a.label_atom_id.str(O)),x.push(a.label_alt_id.str(O)),S.push(a.pdbx_PDB_ins_code.str(O)),C+=1}}}let w={id:eC.Q8.ofStrings(o),conn_type_id:eC.Q8.ofStrings(s),ptnr1_label_asym_id:eC.Q8.ofStrings(u),ptnr1_label_seq_id:eC.Q8.ofNumbers(c),ptnr1_auth_seq_id:eC.Q8.ofNumbers(d),ptnr1_label_atom_id:eC.Q8.ofStrings(p),pdbx_ptnr1_label_alt_id:eC.Q8.ofStrings(f),pdbx_ptnr1_PDB_ins_code:eC.Q8.ofStrings(m),ptnr2_label_asym_id:eC.Q8.ofStrings(h),ptnr2_label_seq_id:eC.Q8.ofNumbers(g),ptnr2_auth_seq_id:eC.Q8.ofNumbers(b),ptnr2_label_atom_id:eC.Q8.ofStrings(y),pdbx_ptnr2_label_alt_id:eC.Q8.ofStrings(x),pdbx_ptnr2_PDB_ins_code:eC.Q8.ofStrings(S)};if(A){let e=["sing","doub","trpl","quad"];w.pdbx_value_order=eC.Q8.ofStrings(l.map(t=>e[t-1]||"sing"))}return eC.wA.ofFields("struct_conn",w)}(r,t[0],t[1],A));let w={entity:eC.wA.ofTable("entity",p.getEntityTable()),chem_comp:eC.wA.ofTable("chem_comp",I.getChemCompTable()),atom_site:eC.wA.ofFields("atom_site",A),atom_site_anisotrop:eC.wA.ofFields("atom_site_anisotrop",function(e){let t=eC.Q8.ofTokens(e.pdbx_auth_seq_id),r=eC.Q8.ofTokens(e.pdbx_auth_comp_id),a=eC.Q8.ofTokens(e.pdbx_auth_asym_id),n=eC.Q8.ofTokens(e.pdbx_auth_atom_id),i={id:eC.Q8.ofStrings(e.id),type_symbol:eC.Q8.ofTokens(e.type_symbol),pdbx_label_atom_id:n,pdbx_label_alt_id:eC.Q8.ofTokens(e.pdbx_label_alt_id),pdbx_label_comp_id:r,pdbx_label_asym_id:a,pdbx_label_seq_id:t,pdbx_PDB_ins_code:eC.Q8.ofTokens(e.pdbx_PDB_ins_code),pdbx_auth_seq_id:t,pdbx_auth_comp_id:r,pdbx_auth_asym_id:a,pdbx_auth_atom_id:n};return i["U[1][1]"]=eC.Q8.ofNumbers(e["U[1][1]"]),i["U[2][2]"]=eC.Q8.ofNumbers(e["U[2][2]"]),i["U[3][3]"]=eC.Q8.ofNumbers(e["U[3][3]"]),i["U[1][2]"]=eC.Q8.ofNumbers(e["U[1][2]"]),i["U[1][3]"]=eC.Q8.ofNumbers(e["U[1][3]"]),i["U[2][3]"]=eC.Q8.ofNumbers(e["U[2][3]"]),i}(d))};for(let e of f)w[e.name]=e;return{header:e.id||a.toUpperCase(),categoryNames:Object.keys(w),categories:w}}var e_=r(27994);(n=b||(b={})).is=function(e){return(null==e?void 0:e.kind)==="pdb"},n.create=function(e){return{kind:"pdb",name:e.id||"",data:e}};var eR=r(1710);(i=y||(y={})).is=function(e){return(null==e?void 0:e.kind)==="psf"},i.fromPsf=function(e){return{kind:"psf",name:e.id,data:e}};var eF=r(30502),eL=r(71649),ez=r(20694),eN=r(67801),eG=r(85764),eU=r(74272),eV=r(89849);!function(e){function t(e,t){let r=ez.Script.is(t)?t:void 0,a=ez.Script.is(t)?ez.Script.toExpression(t):t,n=(0,eV.MY)(a);return{script:r,expression:a,compiled:n,originalStructure:e,currentStructure:e}}function r(e,t){return e.compiled(new eF.QueryContext(t))}e.isUnchanged=function(e,t,r){return e.currentStructure===r&&(ez.Script.is(t)?!!e.script&&ez.Script.areEqual(e.script,t):e.expression===t)},e.create=t,e.run=r,e.createAndRun=function(e,a){let n=t(e,a);return{entry:n,selection:r(n,e)}},e.updateStructure=function(e,t){return e.currentStructure=t,e.compiled(new eF.QueryContext(t))},e.updateStructureObject=function(e,t,r){let a=eF.StructureSelection.unionStru
7319cture(t);e.label=`${r||"Selection"}`,e.description=eF.Structure.elementDescription(a),e.data=a}}(x||(x={}));var ej=r(72762),eH=r(80541),eq=r(97667);function eX(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t),i=F.c.create(e.data,2*t),o=F.c.create(e.data,2*t);for(let s=0;s<t;++s){F.Tokenizer.markLine(e);let{tokenStart:t,position:s}=e;F.Tokenizer.trim(e,t,t+10),F.c.addUnchecked(r,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+10,t+20),F.c.addUnchecked(a,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+20,t+30),F.c.addUnchecked(n,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+31,t+34),F.c.addUnchecked(i,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+36,t+39),F.c.addUnchecked(o,e.tokenStart,e.tokenEnd),e.position=s}return{count:t,x:(0,ew.Lq)(r)(R.sg.Schema.float),y:(0,ew.Lq)(a)(R.sg.Schema.float),z:(0,ew.Lq)(n)(R.sg.Schema.float),type_symbol:(0,ew.Lq)(i)(R.sg.Schema.str),formal_charge:(0,ew.Lq)(o)(R.sg.Schema.int)}}function eW(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t);for(let i=0;i<t;++i){F.Tokenizer.markLine(e);let{tokenStart:t,position:i}=e;F.Tokenizer.trim(e,t,t+3),F.c.addUnchecked(r,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+3,t+6),F.c.addUnchecked(a,e.tokenStart,e.tokenEnd),F.Tokenizer.trim(e,t+6,t+9),F.c.addUnchecked(n,e.tokenStart,e.tokenEnd),e.position=i}return{count:t,atomIdxA:(0,ew.Lq)(r)(R.sg.Schema.int),atomIdxB:(0,ew.Lq)(a)(R.sg.Schema.int),order:(0,ew.Lq)(n)(R.sg.Schema.int)}}function eK(e){let t;let r={atomIdx:[],charge:[]};for(;e.position<e.length;){let{position:a}=e;F.Tokenizer.trim(e,a+3,a+6);let n=F.Tokenizer.getTokenString(e);if("END"===n)break;switch(F.Tokenizer.eatLine(e),n){case"CHG":!function(e,t,r){F.Tokenizer.trim(e,t+6,t+9);let a=parseInt(F.Tokenizer.getTokenString(e));for(let n=0;n<a;++n){let a=9+8*n;F.Tokenizer.trim(e,t+a,t+a+4);let i=F.Tokenizer.getTokenString(e);r.atomIdx.push(+i),F.Tokenizer.trim(e,t+a+4,t+a+8);let o=F.Tokenizer.getTokenString(e);r.charge.push(+o)}F.Tokenizer.eatLine(e)}(e,a,r);break;case"APO":t=function(e){let t=e.trim().split(/\s+/g),r=[];for(let e=1;e<t.length;e+=2){let a=+t[e],n=+t[e+1]||0;r.push({atomIdx:a,kind:n})}return r}(F.Tokenizer.getTokenString(e).substring(3))}}return{formalCharges:{atomIdx:R.sg.ofIntArray(r.atomIdx),charge:R.sg.ofIntArray(r.charge)},attachmentPoints:t}}var eQ=r(7164);async function eZ(e,t,r){let{atoms:a,bonds:n,formalCharges:i}=e,o=R.sg.ofConst("MOL",e.atoms.count,R.sg.Schema.str),s=R.sg.ofConst("A",e.atoms.count,R.sg.Schema.str),l=R.sg.asArrayColumn(a.type_symbol),u=R.sg.ofConst(1,a.count,R.sg.Schema.int),c=new Int32Array(e.atoms.count);if(i.atomIdx.rowCount>0)for(let e=0;e<i.atomIdx.rowCount;e++)c[i.atomIdx.value(e)-1]=i.charge.value(e);else for(let t=0;t<e.atoms.count;t++)c[t]=function(e){switch(e){case 7:return -3;case 6:return -2;case 5:return -1;case 0:case 4:return 0;case 3:return 1;case 2:return 2;case 1:return 3;default:return console.error(`Value ${e} is outside the 0-7 range, defaulting to 0.`),0}}(a.formal_charge.value(t));let d=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:s,auth_atom_id:l,auth_comp_id:o,auth_seq_id:u,Cartn_x:R.sg.asArrayColumn(a.x,Float32Array),Cartn_y:R.sg.asArrayColumn(a.y,Float32Array),Cartn_z:R.sg.asArrayColumn(a.z,Float32Array),id:R.sg.range(1,a.count),label_asym_id:s,label_atom_id:l,label_comp_id:o,label_seq_id:u,label_entity_id:R.sg.ofConst("1",a.count,R.sg.Schema.str),occupancy:R.sg.ofConst(1,a.count,R.sg.Schema.float),type_symbol:l,pdbx_PDB_model_num:R.sg.ofConst(1,a.count,R.sg.Schema.int),pdbx_formal_charge:R.sg.ofIntArray(c)},a.count),p=new eb.L;p.setNames([["MOL","Unknown Entity"]]),p.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let f=new em.Q(u,l);f.setNames([["MOL","Unknown Molecule"]]),f.add("MOL",0);let m=(0,ey.p)({entity:p.getEntityTable(),chem_comp:f.getChemCompTable(),atom_site:d}),h=await (0,ex.c)(m,null!=t?t:S.create(e),r);if(h.frameCount>0){let e=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdxA,e=>e-1,Int32Array)),t=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdxB,e=>e-1,Int32Array)),r=R.sg.asArrayColumn(n.order,Int32Array),i=eQ.t.fromData({pairs:{indexA:e,indexB:t,order:r},count:a.count},{maxDistance:1/0});eQ.t.Provider.set(h.representative,i)}return h}(o=S||(S={})).is=function(e){return(null==e?void 0:e.kind)==="mol"},o.create=function(e){return{kind:"mol",name:e.title,data:e}};var eY=r(48930),e$=r(5333),eJ=r(39045);async function e0(e,t,r){var a;let n,i;let o=e.atom_site._rowCount,s=R.sg.ofConst("MOL",o,R.sg.Schema.str),l=R.sg.ofConst("A",o,R.sg.Schema.str),u=R.sg.ofConst(1,o,R.sg.Schema.int),c=function(e){let{cell:t,space_group:r}=e,a=function(e){let t=e.it_number.value(0),r=e["name_h-m_full"].isDefined?e["name_h-m_full"]:e["name_h-m_alt"],a=r.value(0).replace("_"," ");return e.it_number.isDefined?(r.isDefined,t):a}(r),n=eY.EO.create(a,G.AO.create(t.length_a.value(0),t.length_b.value(0),t.length_c.value(0)),G.AO.scale((0,G.AO)(),G.AO.create(t.angle_alpha.value(0),t.angle_beta.value(0),t.angle_gamma.value(0)),Math.PI/180)
7319);return{spacegroup:eY.I5.create(n),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}(e),d=c.spacegroup.cell.fromFractional,{fract_x:p,fract_y:f,fract_z:m}=e.atom_site,h=new Float32Array(o),g=new Float32Array(o),b=new Float32Array(o),y=(0,G.AO)();for(let e=0;e<o;++e)G.AO.set(y,p.value(e),f.value(e),m.value(e)),G.AO.transformMat4(y,y,d),h[e]=y[0],g[e]=y[1],b[e]=y[2];let{type_symbol:x,label:S}=e.atom_site;if(x.isDefined){let e=Array(o),t=new Int8Array(o);for(let r=0;r<o;++r){let a=x.value(r),n=a.length;if("+"===a[n-1]){let i=a.charCodeAt(n-2);n>=2&&i>=49&&i<=57?(e[r]=a.substring(0,n-2),t[r]=i-48):(e[r]=a.substring(0,n-1),t[r]=1)}else if(n>=2&&"+"===a[n-2])e[r]=a.substring(0,n-2),t[r]=a.charCodeAt(n-1)-48;else if("-"===a[n-1]){let i=a.charCodeAt(n-2);n>=2&&i>=48&&i<=57?(e[r]=a.substring(0,n-2),t[r]=-(i-48)):(e[r]=a.substring(0,n-1),t[r]=-1)}else n>=2&&"-"===a[n-2]?(e[r]=a.substring(0,n-2),t[r]=-(a.charCodeAt(n-1)-48)):(e[r]=a,t[r]=0)}n=R.sg.ofStringArray(e),i=R.sg.ofIntArray(t)}else{let e=Array(o);for(let t=0;t<o;++t)e[t]=ep(S.value(t),"");n=R.sg.ofStringArray(e),i=R.sg.Undefined(o,R.sg.Schema.int)}let T=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:l,auth_atom_id:S,auth_comp_id:s,auth_seq_id:u,Cartn_x:R.sg.ofFloatArray(h),Cartn_y:R.sg.ofFloatArray(g),Cartn_z:R.sg.ofFloatArray(b),id:R.sg.range(0,o-1),label_asym_id:l,label_atom_id:S,label_comp_id:s,label_seq_id:u,label_entity_id:R.sg.ofConst("1",o,R.sg.Schema.str),occupancy:e.atom_site.occupancy.isDefined?e.atom_site.occupancy:R.sg.ofConst(1,o,R.sg.Schema.float),type_symbol:n,pdbx_formal_charge:i,pdbx_PDB_model_num:R.sg.ofConst(1,o,R.sg.Schema.int),B_iso_or_equiv:e.atom_site.u_iso_or_equiv},o),C=e.chemical.name_common.value(0)||e.chemical.name_systematic.value(0)||e.chemical_formula.sum.value(0),O=new eb.L;O.setNames([["MOL",C||"Unknown Entity"]]),O.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let I=new em.Q(u,e.atom_site.type_symbol);I.setNames([["MOL",C||"Unknown Molecule"]]),I.add("MOL",0);let A=(0,ey.p)({entity:O.getEntityTable(),chem_comp:I.getChemCompTable(),atom_site:T}),w=await (0,ex.c)(A,t,r);if(w.frameCount>0){let r=w.representative;e$.I.Provider.set(r,c);let n=e.geom_bond._rowCount;if(n>0){let i={},{label:s}=e.atom_site;for(let e=0,t=s.rowCount;e<t;++e)i[s.value(e)]=e;let l=null===(a=t.data.frame.categories.ccdc_geom_bond_type)||void 0===a?void 0:a.getField(""),u=[],c=[],d=[],p=[],f=[],m=new Set,h=0,{atom_site_label_1:g,atom_site_label_2:b,valence:y,distance:x}=e.geom_bond;for(let e=0;e<n;++e){let t=i[g.value(e)],r=i[b.value(e)],a=t<r?(0,q.FY)(t,r):(0,q.FY)(r,t);if(!m.has(a)){if(m.add(a),u[h]=t,c[h]=r,p[h]=x.value(e)||-1,l){let t=l.str(e);"D"===t?(d[h]=2,f[h]=ef.BondType.Flag.Covalent):"A"===t?(d[h]=1,f[h]=ef.BondType.Flag.Covalent|ef.BondType.Flag.Aromatic):(d[h]=1,f[h]=ef.BondType.Flag.Covalent)}else f[h]=ef.BondType.Flag.Covalent,d[h]=y.isDefined?y.value(e):1;h+=1}}eQ.t.Provider.set(r,eQ.t.fromData({pairs:{indexA:R.sg.ofIntArray(u),indexB:R.sg.ofIntArray(c),order:R.sg.ofIntArray(d),distance:R.sg.ofFloatArray(p),flag:R.sg.ofIntArray(f)},count:o}))}}return w}async function e1(e,t){let{atoms:r}=e,a=R.sg.ofConst("MOL",e.atoms.count,R.sg.Schema.str),n=R.sg.ofConst("A",e.atoms.count,R.sg.Schema.str),i=R.sg.ofArray({array:R.sg.mapToArray(r.number,e=>(0,ef.getElementFromAtomicNumber)(e)),schema:R.sg.Schema.Aliased(R.sg.Schema.str)}),o=R.sg.ofConst(1,r.count,R.sg.Schema.int),s=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:n,auth_atom_id:i,auth_comp_id:a,auth_seq_id:o,Cartn_x:R.sg.asArrayColumn(r.x,Float32Array),Cartn_y:R.sg.asArrayColumn(r.y,Float32Array),Cartn_z:R.sg.asArrayColumn(r.z,Float32Array),id:R.sg.range(0,r.count-1),label_asym_id:n,label_atom_id:i,label_comp_id:a,label_seq_id:o,label_entity_id:R.sg.ofConst("1",r.count,R.sg.Schema.str),occupancy:R.sg.ofConst(1,r.count,R.sg.Schema.float),type_symbol:i,pdbx_PDB_model_num:R.sg.ofConst(1,r.count,R.sg.Schema.int)},r.count),l=new eb.L;l.setNames([["MOL","Unknown Entity"]]),l.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let u=new em.Q(o,i);u.setNames([["MOL","Unknown Molecule"]]),u.add("MOL",0);let c=(0,ey.p)({entity:l.getEntityTable(),chem_comp:u.getChemCompTable(),atom_site:s});return await (0,ex.c)(c,C.create(e),t)}eJ.T.Provider.formatRegistry.add("cifCore",function(e){if(!T.is(e.sourceData))return;let{atom_site:t,atom_site_aniso:r}=e.sourceData.data.db;
7319return{data:R.iA.ofPartialColumns(eJ.T.Schema,{U:r.u},r._rowCount),elementToAnsiotrop:eJ.T.getElementToAnsiotropFromLabel(t.label,r.label)}},function(e){return!!T.is(e.sourceData)&&e.sourceData.data.db.atom_site_aniso.u.isDefined}),(s=T||(T={})).is=function(e){return(null==e?void 0:e.kind)==="cifCore"},s.fromFrame=function(e,t){return t||(t=eC.pe.schema.cifCore(e)),{kind:"cifCore",name:t.database_code.depnum_ccdc_archive.value(0)||t.database_code.depnum_ccdc_fiz.value(0)||t.database_code.icsd.value(0)||t.database_code.mdf.value(0)||t.database_code.nbs.value(0)||t.database_code.csd.value(0)||t.database_code.cod.value(0)||t._name,data:{db:t,frame:e}}},(l=C||(C={})).is=function(e){return(null==e?void 0:e.kind)==="cube"},l.create=function(e){return{kind:"cube",name:e.header.comment1,data:e}};let{skipWhitespace:e2,eatValue:e3,markLine:e4,getTokenString:e5,skipStrictWhitespace:e6}=F.Tokenizer,e8=/\s+/g;function e7(e,t,r){let a=0;for(let n=0;n<e;n++){let e=0;for(e2(r);e6(r),r.tokenStart=r.position,e3(r),r.tokenStart!==r.tokenEnd;){let a=t[e++];a&&F.c.addUnchecked(a,r.tokenStart,r.tokenEnd)}e>a&&(a=e);for(let r=e;r<t.length;r++)F.c.addUnchecked(t[r],0,0)}return a+1}async function e9(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>ATOM"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_atoms),o=F.c.create(t.data,2*r.num_atoms),s=F.c.create(t.data,2*r.num_atoms),l=F.c.create(t.data,2*r.num_atoms),u=F.c.create(t.data,2*r.num_atoms),c=F.c.create(t.data,2*r.num_atoms),d=F.c.create(t.data,2*r.num_atoms),p=F.c.create(t.data,2*r.num_atoms),f=F.c.create(t.data,2*r.num_atoms),m=F.c.create(t.data,2*r.num_atoms),h=R.sg.Undefined(r.num_atoms,R.sg.Schema.float),g=R.sg.Undefined(r.num_atoms,R.sg.Schema.int),b=R.sg.Undefined(r.num_atoms,R.sg.Schema.str);t.position=a,t.lineNumber=n;let y=0,x=[i,o,s,l,u,c,d,p,f,m],{length:S}=t,T=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_atoms-T,e);return y=Math.max(y,e7(a,x,t)),T+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:S})),{count:r.num_atoms,atom_id:(0,ew.Lq)(i)(R.sg.Schema.int),atom_name:(0,ew.Lq)(o)(R.sg.Schema.str),x:(0,ew.Lq)(s)(R.sg.Schema.float),y:(0,ew.Lq)(l)(R.sg.Schema.float),z:(0,ew.Lq)(u)(R.sg.Schema.float),atom_type:y>5?(0,ew.Lq)(c)(R.sg.Schema.str):b,subst_id:y>6?(0,ew.Lq)(d)(R.sg.Schema.int):g,subst_name:y>7?(0,ew.Lq)(p)(R.sg.Schema.str):b,charge:y>8?(0,ew.Lq)(f)(R.sg.Schema.float):h,status_bits:y>9?(0,ew.Lq)(m)(R.sg.Schema.str):b}}async function te(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>BOND"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_bonds),o=F.c.create(t.data,2*r.num_bonds),s=F.c.create(t.data,2*r.num_bonds),l=F.c.create(t.data,2*r.num_bonds),u=F.c.create(t.data,2*r.num_bonds),c=R.sg.Undefined(r.num_bonds,R.sg.Schema.str);t.position=a,t.lineNumber=n;let d=0,p=[i,o,s,l,u],{length:f}=t,m=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_bonds-m,e);return d=Math.max(d,e7(a,p,t)),m+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:f})),{count:r.num_bonds,bond_id:(0,ew.Lq)(i)(R.sg.Schema.int),origin_atom_id:(0,ew.Lq)(o)(R.sg.Schema.int),target_atom_id:(0,ew.Lq)(s)(R.sg.Schema.int),bond_type:(0,ew.Lq)(l)(R.sg.Schema.str),status_bits:d>4?(0,ew.Lq)(u)(R.sg.Schema.str):c}}async function tt(e){let{tokenizer:t,molecule:r}=e;if(0===r.num_subst)return;for(;"@<TRIPOS>SUBSTRUCTURE"!==e5(t)&&t.position<t.data.length;)e4(t);let a=t.position,n=t.lineNumber,i=F.c.create(t.data,2*r.num_subst),o=F.c.create(t.data,2*r.num_subst),s=F.c.create(t.data,2*r.num_subst),l=F.c.create(t.data,2*r.num_subst),u=F.c.create(t.data,2*r.num_subst),c=F.c.create(t.data,2*r.num_subst),d=F.c.create(t.data,2*r.num_subst),p=F.c.create(t.data,2*r.num_subst),f=F.c.create(t.data,2*r.num_subst),m=R.sg.Undefined(r.num_subst,R.sg.Schema.int),h=R.sg.Undefined(r.num_subst,R.sg.Schema.str);t.position=a,t.lineNumber=n;let g=0,b=[i,o,s,l,u,c,d,p,f],{length:y}=t,x=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let a=Math.min(r.num_subst-x,e);return g=Math.max(g,e7(a,b,t)),x+=a,a},e=>e.update({message:"Parsing...",current:t.position,max:y})),{count:r.num_subst,subst_id:(0,ew.Lq)(i)(R.sg.Schema.int),subst_name:(0,ew.Lq)(o)(R.sg.Schema.str),root_atom:(0,ew.Lq)(s)(R.sg.Schema.int),subst_type:g>3?(0,ew.Lq)(l)(R.sg.Schema.str):h,dict_type:g>4?(0,ew.Lq)(u)(R.sg.Schema.str):h,chain:g>5?(0,ew.Lq)(c)(R.sg.Schema.str):h,sub_type:g>6?(0,ew.Lq)(d)(R.sg.Schema.str):h,inter_bonds:g>7?(0,ew.Lq)(p)(R.sg.Schema.int):m,status_bits:g>8?(0,ew.Lq)(f)(R.sg.Schema.str):h}}async function tr(e,t,r){let a=(0,F.Tokenizer)(t);e.update({message:"Parsing...",current:0,max:t.length});let n=[];for(;a.position<t.length;){let t={tokenizer:a,molecule:{mol_name:"",num_atoms:0,num_bonds:0,num_subst:0,num_feat:0,num_sets:0,mol_type:"",charge_type:"",status_bits:"",mol_comment:""},runtimeCtx:e};!function(e){let{tokenizer:t,molecule:r}=e;for(;"@<TRIPOS>MOLECULE"!==e5(t)&&t.position<t.data.length;)e4(t);e4(t),r.mol_name=e5(t),e4(t);let a=e5(t).trim().split(e8);r.num_atoms=parseInt(a[0]),r.num_bonds=parseInt(a[1]),r.num_subst=parseInt(a[2]),r.num_feat=parseInt(a[3]),r.num_sets=parseInt(a[4]),e4(t);let n=e5(t);if(n.startsWith("@<TRIPOS>"))return;r.mol_type=n,e4(t);let i=e5(t);if(i.startsWith("@<TRIPOS>"))return;r.charge_type=i,e4(t);let o=e5(t);if(o.startsWith("@<TRIPOS>"))return;r.status_bits=o,e4(t);let s=e5(t);s.startsWith("@<TRIPOS>")||(r.mol_comment=s)}(t);let r=await e9(t),i=await te(t),o=await tt(t),s=function(e){let{tokenizer:t}=e;for(;t.position<t.data.length;){let e=e5(t);if("@<TRIPOS>MOLECULE"===e)return;if("@<TRIPOS>CRYSIN"===e)break;e4(t)}if(t.position>=t.data.length)return;e4(t);let r=e5(t).trim().split(e8);return{a:parseFloat(r[0]),b:parseFloat(r[1]),c:parseFloat(r[2]),alpha:parseFloat(r[3]),beta:parseFloat(r[4]),gamma:parseFloat(r[5]),spaceGroup:parseInt(r[6],10),setting:parseInt(r[7],10)}}(t);for(n.push({molecule:t.molecule,atoms:r,bonds:i,substructures:o,crysin:s}),e2(a);"@<TRIPOS>MOLECULE"!==e5(a)&&a.position<a.data.length;)e4(a)}return k.X.success({name:r,structures:n})}async function ta(e,t){let r=[];for(let a=0,n=e.structures.length;a<n;++a){let n;let{molecule:i,atoms:o,bonds:s,substructures:l,crysin:u}=e.structures[a],c=Array(o.count),d=Array(o.count),p=Array(o.count),f=Array(o.count),m=Array(o.count),h=!1;for(let e=0;e<o.count;++e)if(o.atom_type.value(e).includes(".")){h=!0;break}let g=new Map;if(l)for(let e=0;e<l.count;++e){let t=l.root_atom.value(e),r=l.chain.value(e),a=l.sub_type.value(e);g.set(t,{chain:r,subType:a})}let b=new eb.L,y=new em.Q(o.subst_id,o.atom_name),x="",S=0,T="",C=ef.MoleculeType.Unknown,I=-1;for(let e=0;e<o.count;++e){let t=o.subst_name.value(e),r=o.subst_id.value(e),a=t.replace(/\d+$/,"")||"MOL",i=t.match(/(\d+)$/);m[e]=i?parseInt(i[1]):r;let s=g.get(o.atom_id.value(e));if(s&&(n=s),n&&n.subType&&"UNK"!==n.subType&&(a=n.subType),p[e]=h?o.atom_type.value(e).split(".")[0].toUpperCase():ep(o.atom_name.value(e),a),f[e]=a,r!==I){let t=(0,ef.getMoleculeType)(y.add(a,e).type,a);(null==n?void 0:n.chain)?T=n.chain:(t!==C||r!==I+1)&&(T=ev(S),S+=1),x=b.getEntityId(a,t,T),I=r,C=t}c[e]=x,d[e]=T}let A=R.sg.ofStringArray(p),w=R.sg.ofStringArray(f),D=R.sg.ofStringArray(c),E=R.sg.ofStringArray(d),M=R.sg.asArrayColumn(o.atom_name),P=R.sg.ofIntArray(m),k=R.iA.ofParti
7319alColumns(ey.d.atom_site,{auth_asym_id:E,auth_atom_id:M,auth_comp_id:w,auth_seq_id:P,Cartn_x:R.sg.asArrayColumn(o.x,Float32Array),Cartn_y:R.sg.asArrayColumn(o.y,Float32Array),Cartn_z:R.sg.asArrayColumn(o.z,Float32Array),id:R.sg.asArrayColumn(o.atom_id),label_asym_id:E,label_atom_id:M,label_comp_id:w,label_seq_id:o.subst_id,label_entity_id:D,occupancy:R.sg.ofConst(1,o.count,R.sg.Schema.float),type_symbol:A,pdbx_PDB_model_num:R.sg.ofConst(a,o.count,R.sg.Schema.int)},o.count),B=(0,ey.p)({entity:b.getEntityTable(),chem_comp:y.getChemCompTable(),atom_site:k}),_=await (0,ex.c)(B,O.create(e),t);if(_.frameCount>0){let e=R.sg.ofIntArray(R.sg.mapToArray(s.origin_atom_id,e=>e-1,Int32Array)),t=R.sg.ofIntArray(R.sg.mapToArray(s.target_atom_id,e=>e-1,Int32Array)),a=s.bond_id,n=R.sg.ofIntArray(R.sg.mapToArray(s.bond_type,e=>{switch(e){case"ar":case"am":case"un":return 1;case"du":case"nc":return 0;default:return parseInt(e)}},Int8Array)),l=R.sg.ofIntArray(R.sg.mapToArray(s.bond_type,e=>{switch(e){case"ar":case"am":return ef.BondType.Flag.Aromatic|ef.BondType.Flag.Covalent;case"du":case"nc":return ef.BondType.Flag.None;default:return ef.BondType.Flag.Covalent}},Int8Array)),c=eQ.t.fromData({pairs:{key:a,indexA:e,indexB:t,order:n,flag:l},count:o.count},{maxDistance:u?-1:1/0}),d=_.representative;if(eQ.t.Provider.set(d,c),e_.o.Provider.set(d,{data:o.charge,type:i.charge_type}),u){let e=function(e){if(1!==e.setting)return;let t=eY.EO.create(e.spaceGroup,G.AO.create(e.a,e.b,e.c),G.AO.scale((0,G.AO)(),G.AO.create(e.alpha,e.beta,e.gamma),Math.PI/180));return{spacegroup:eY.I5.create(t),assemblies:[],isNonStandardCrystalFrame:!1,ncsOperators:[]}}(u);e&&e$.I.Provider.set(d,e)}r.push(d)}}return new eF.ArrayTrajectory(r)}(u=O||(O={})).is=function(e){return(null==e?void 0:e.kind)==="mol2"},u.create=function(e){return{kind:"mol2",name:e.name,data:e}};let tn=new Uint32Array([0,0,0,0,0,0,0,0,0,8,10,12,16,20,25,32,40,50,64,80,101,128,161,203,256,322,406,512,645,812,1024,1290,1625,2048,2580,3250,4096,5060,6501,8192,10321,13003,16384,20642,26007,32768,41285,52015,65536,82570,104031,131072,165140,208063,262144,330280,416127,524287,660561,832255,1048576,1321122,1664510,2097152,2642245,3329021,4194304,5284491,6658042,8388607,10568983,13316085,16777216]);async function ti(e,t){let r=new DataView(t.buffer,t.byteOffset),a={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},n=a.frames,i=a.boxes,o=a.times,s=[0,0,0,0,0,0],l=[0,0,0],u=[0,0,0],c=[0,0,0],d=[.1,.1,.1],p=[.1,.1,.1],f=0,m=I.buf;for(;;){let a;let h=r.getInt32(f+4);f+=12,o.push(r.getFloat32(f)),f+=4;let g=new Float32Array(9);for(let e=0;e<9;++e)g[e]=10*r.getFloat32(f),f+=4;if(i.push(g),h<=9){a={count:h,x:new Float32Array(h),y:new Float32Array(h),z:new Float32Array(h)},f+=4;for(let e=0;e<h;++e)a.x[e]=r.getFloat32(f),a.y[e]=r.getFloat32(f+4),a.z[e]=r.getFloat32(f+8),f+=12}else{let e;m[0]=m[1]=m[2]=0,l[0]=l[1]=l[2]=0,c[0]=c[1]=c[2]=0,u[0]=u[1]=u[2]=0,d[0]=d[1]=d[2]=0,p[0]=p[1]=p[2]=0,a={count:h,x:new Float32Array(h),y:new Float32Array(h),z:new Float32Array(h)};let n=0,i=r.getInt32(f);f+=4;let o=r.getFloat32(f);f+=4,s[0]=r.getInt32(f),s[1]=r.getInt32(f+4),s[2]=r.getInt32(f+8),s[3]=r.getInt32(f+12),s[4]=r.getInt32(f+16),s[5]=r.getInt32(f+20),l[0]=s[3]-s[0]+1,l[1]=s[4]-s[1]+1,l[2]=s[5]-s[2]+1,f+=24,(l[0]|l[1]|l[2])>16777215?(u[0]=I.sizeOfInt(l[0]),u[1]=I.sizeOfInt(l[1]),u[2]=I.sizeOfInt(l[2]),e=0):e=I.sizeOfInts(3,l);let g=r.getInt32(f);f+=4;let b=g-1,y=tn[b=9>b?9:b]/2|0,x=tn[g]/2|0;c[0]=c[1]=c[2]=tn[g];let S=4*Math.ceil(r.getInt32(f)/4);f+=4;let T=1/o,C=0,O=0;for(d[0]=d[1]=d[2]=0;O<i;){0===e?(d[0]=I.decodeBits(t,f,u[0]),d[1]=I.decodeBits(t,f,u[1]),d[2]=I.decodeBits(t,f,u[2])):I.decodeInts(t,f,e,l,d),O++,d[0]+=s[0],d[1]+=s[1],d[2]+=s[2],p[0]=d[0],p[1]=d[1],p[2]=d[2];let r=I.decodeBits(t,f,1),i=0;if(1===r&&(i=(C=I.decodeBits(t,f,5))%3,C-=i,i--),C>0){d[0]=d[1]=d[2]=0;for(let e=0;e<C;e+=3){if(I.decodeInts(t,f,g,c,d),O++,d[0]+=p[0]-x,d[1]+=p[1]-x,d[2]+=p[2]-x,0===e){let e=d[0];d[0]=p[0],p[0]=e,e=d[1],d[1]=p[1],p[1]=e,e=d[2],d[2]=p[2],p[2]=e,a.x[n]=p[0]*T,a.y[n]=p[1]*T,a.z[n]=p[2]*T,n++}else p[0]=d[0],p[1]=d[1],p[2]=d[2];
7319a.x[n]=d[0]*T,a.y[n]=d[1]*T,a.z[n]=d[2]*T,n++}}else a.x[n]=d[0]*T,a.y[n]=d[1]*T,a.z[n]=d[2]*T,n++;g+=i,i<0?(x=y,y=g>9?tn[g-1]/2|0:0):i>0&&(y=x,x=tn[g]/2|0),c[0]=c[1]=c[2]=tn[g],(0===c[0]||0===c[1]||0===c[2])&&function(){throw Error("(xdrfile error) Undefined error.")}()}f+=S}for(let e=0;e<h;e++)a.x[e]*=10,a.y[e]*=10,a.z[e]*=10;if(n.push(a),e.shouldUpdate&&await e.update({current:f,max:t.length}),f>=t.length)break}return o.length>=1&&(a.timeOffset=o[0]),o.length>=2&&(a.deltaTime=o[1]-o[0]),a}!function(e){e.sizeOfInt=function(e){let t=1,r=0;for(;e>=t&&r<32;)r++,t<<=1;return r};let t=new Uint8Array(32);e.sizeOfInts=function(e,r){let a=1,n=0;t[0]=1;for(let n=0;n<e;n++){let e;let i=0;for(e=0;e<a;e++)i+=t[e]*r[n],t[e]=255&i,i>>=8;for(;0!==i;)t[e++]=255&i,i>>=8;a=e}let i=1;for(a--;t[a]>=i;)n++,i*=2;return n+8*a};let r=new ArrayBuffer(24);e.buf=new Int32Array(r);let a=new Uint32Array(r);function n(t,r,n){let i=n,o=(1<<i)-1,s=a[1],l=a[2],u=e.buf[0],c=0;for(;i>=8;)c|=(l=l<<8|t[r+u++])>>s<<i-8,i-=8;return i>0&&(s<i&&(s+=8,l=l<<8|t[r+u++]),s-=i,c|=l>>s&(1<<i)-1),c&=o,e.buf[0]=u,e.buf[1]=s,e.buf[2]=l,c}e.decodeBits=n;let i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];e.decodeInts=function(t,r,o,s,l){let u=o,c=0;for(i[0]=0,i[1]=0,i[2]=0,i[3]=0;u>8;)i[c++]=function(t,r){let n=a[2],i=e.buf[0];return n=n<<8|t[r+i],e.buf[0]=i+1,e.buf[2]=n,n>>a[1]&255}(t,r),u-=8;u>0&&(i[c++]=n(t,r,u));for(let e=2;e>0;e--){let t=0,r=s[e];for(let e=c-1;e>=0;e--){let a=(t=t<<8|i[e])/r|0;i[e]=a,t-=a*r}l[e]=t}l[0]=i[0]|i[1]<<8|i[2]<<16|i[3]<<24}}(I||(I={})),(c=A||(A={})).is=function(e){return(null==e?void 0:e.kind)==="xyz"},c.create=function(e){return{kind:"xyz",name:"xyz",data:e}};let to={lj:{mass:"unitless",distance:"unitless",time:"unitless",energy:"unitless",velocity:"unitless",force:"unitless",torque:"unitless",temperature:"unitless",pressure:"unitless",viscosity:"unitless",charge:"unitless",density:"unitless",scale:1},real:{mass:"grams/mole",distance:"Angstroms",time:"femtoseconds",energy:"Kcal/mol",velocity:"Angstroms/femtosecond",force:"Kcal/mol-Angstrom",torque:"Kcal/mol",temperature:"Kelvin",pressure:"atmospheres",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},metal:{mass:"grams/mole",distance:"Angstroms",time:"picoseconds",energy:"eV",velocity:"Angstroms/picosecond",force:"eV/Angstrom",torque:"eV",temperature:"Kelvin",pressure:"bars",viscosity:"Poise",charge:"multiple of electron charge",dipole:"charge*Angstroms",electricField:"volts/Angstrom",density:"g/cm^3",scale:1},si:{mass:"kilograms",distance:"meters",time:"seconds",energy:"Joules",velocity:"meters/second",force:"Newtons",torque:"Newton-meters",temperature:"Kelvin",pressure:"Pascals",viscosity:"Pascal*second",charge:"Coulombs",dipole:"Coulombs*meters",electricField:"volts/meter",density:"kg/m^3",scale:1},cgs:{mass:"grams",distance:"centimeters",time:"seconds",energy:"ergs",velocity:"centimeters/second",force:"dynes",torque:"dyne-centimeters",temperature:"Kelvin",pressure:"dyne/cm^2",viscosity:"Poise",charge:"statcoulombs",dipole:"statcoul-cm",electricField:"statvolt/cm",density:"g/cm^3",scale:1},electron:{mass:"atomic mass units",distance:"Bohr",time:"femtoseconds",energy:"Hartrees",velocity:"Bohr/atomic time units",force:"Hartrees/Bohr",temperature:"Kelvin",pressure:"Pascals",charge:"multiple of electron charge",dipole:"Debye",electricField:"volts/cm",density:"unitless",torque:"",viscosity:"",scale:.529177},micro:{mass:"picograms",distance:"micrometers",time:"microseconds",energy:"picogram-micrometer^2/microsecond^2",velocity:"micrometers/microsecond",force:"picogram-micrometer/microsecond^2",torque:"picogram-micrometer^2/microsecond^2",temperature:"Kelvin",pressure:"picogram/(micrometer-microsecond^2)",viscosity:"picogram/(micrometer-microsecond)",charge:"picocoulombs",dipole:"picocoulomb-micrometer",electricField:"volt/micrometer",density:"pg/μm^3",scale:1},nano:{mass:"attograms",distance:"nanometers",time:"nanoseconds",energy:"attogram-nanometer^2/nanosecond^2",velocity:"nanometers/nanosecond",force:"attogram-nanometer/nanosecond^2",torque:"attogram-nanometer^2/nanosecond^2",temperature:"Kelvin",pressure:"attogram/(nanometer-nanosecond^2)",viscosity:"attogram/(nanometer-nanosecond)",charge:"multiple of electron charge",di
7319pole:"charge-nanometer",electricField:"volt/nanometer",density:"ag/nm^3",scale:10}},ts=["real","metal","si","cgs","electron","micro","nano","lj"],{readLine:tl,skipWhitespace:tu,eatValue:tc,eatLine:td,markStart:tp}=F.Tokenizer,tf=/\s+/;async function tm(e,t,r){let{tokenizer:a}=e,n=F.c.create(a.data,2*t),i=F.c.create(a.data,2*t),o=F.c.create(a.data,2*t),s=F.c.create(a.data,2*t),l=F.c.create(a.data,2*t),u=F.c.create(a.data,2*t),c=F.c.create(a.data,2*t),d={full:[n,i,o,s,l,u,c],atomic:[n,o,l,u,c],bond:[n,i,o,l,u,c]},p=d[r].length,{position:f}=a;tl(a).trim(),a.position=f;let{length:m}=a,h=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let n=Math.min(t-h,e);for(let e=0;e<n;++e){for(let e=0;e<p;++e){tu(a),tp(a),tc(a);let t=d[r][e];t&&F.c.addUnchecked(t,a.tokenStart,a.tokenEnd)}td(a),tp(a)}return h+=n,n},e=>e.update({message:"Parsing...",current:a.position,max:m})),{count:t,atomId:(0,ew.Lq)(n)(R.sg.Schema.int),moleculeId:(0,ew.Lq)(i)(R.sg.Schema.int),atomType:(0,ew.Lq)(o)(R.sg.Schema.int),charge:(0,ew.Lq)(s)(R.sg.Schema.float),x:(0,ew.Lq)(l)(R.sg.Schema.float),y:(0,ew.Lq)(u)(R.sg.Schema.float),z:(0,ew.Lq)(c)(R.sg.Schema.float)}}async function th(e,t){let{tokenizer:r}=e,a=F.c.create(r.data,2*t),n=F.c.create(r.data,2*t),i=F.c.create(r.data,2*t),o=F.c.create(r.data,2*t),{length:s}=r,l=0;return await (0,B.rV)(e.runtimeCtx,10,void 0,e=>{let s=Math.min(t-l,e);for(let e=0;e<s;++e)for(let e=0;e<4;++e)switch(tu(r),tp(r),tc(r),e){case 0:F.c.addUnchecked(a,r.tokenStart,r.tokenEnd);break;case 1:F.c.addUnchecked(n,r.tokenStart,r.tokenEnd);break;case 2:F.c.addUnchecked(i,r.tokenStart,r.tokenEnd);break;case 3:F.c.addUnchecked(o,r.tokenStart,r.tokenEnd)}return l+=s,s},e=>e.update({message:"Parsing...",current:r.position,max:s})),{count:t,bondId:(0,ew.Lq)(a)(R.sg.Schema.int),bondType:(0,ew.Lq)(n)(R.sg.Schema.int),atomIdA:(0,ew.Lq)(i)(R.sg.Schema.int),atomIdB:(0,ew.Lq)(o)(R.sg.Schema.int)}}let tg=["full","atomic","bond"];async function tv(e,t){let r,a;let n=(0,F.Tokenizer)(e),i={tokenizer:n,runtimeCtx:t},o=0,s=0,l="full";for(;n.tokenEnd<n.length;){let e=tl(i.tokenizer).trim();if(e.includes("atoms"))o=parseInt(e.split(tf)[0]);else if(e.includes("bonds"))s=parseInt(e.split(tf)[0]);else if(e.includes("Masses"));else if(e.includes("Atoms")){let t=e.split("#");if(t.length>1){let e=t[1].trim();tg.includes(e)?l=e:console.warn(`Unknown atom style: ${e}`)}r=await tm(i,o,l)}else e.includes("Bonds")&&(a=await th(i,s))}if(void 0===r)return k.X.error("no atoms data");void 0===a&&(a={count:0,bondId:R.sg.ofIntArray([]),bondType:R.sg.ofIntArray([]),atomIdA:R.sg.ofIntArray([]),atomIdB:R.sg.ofIntArray([])});let u={atoms:r,bonds:a};return k.X.success(u)}async function tb(e,t,r="real"){let{atoms:a,bonds:n}=e,i=[],o=a.count,s=to[r].scale,l=Array(o),u=new Int32Array(o),c=new Float32Array(o),d=new Float32Array(o),p=new Float32Array(o),f=new Int32Array(o),m=0;for(let e=0;e<o;e++)l[m]=a.atomType.value(e).toString(),c[m]=a.x.value(e)*s,d[m]=a.y.value(e)*s,p[m]=a.z.value(e)*s,u[m]=a.atomId.value(e)-1,f[m]=0,m++;let h=R.sg.ofConst("MOL",o,R.sg.Schema.str),g=R.sg.ofLambda({value:e=>a.moleculeId.value(e).toString(),rowCount:o,schema:R.sg.Schema.str}),b=R.sg.ofConst(1,o,R.sg.Schema.int),y=R.sg.ofStringArray(l),x=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:g,auth_atom_id:y,auth_comp_id:h,auth_seq_id:b,Cartn_x:R.sg.ofFloatArray(c),Cartn_y:R.sg.ofFloatArray(d),Cartn_z:R.sg.ofFloatArray(p),id:R.sg.ofIntArray(u),label_asym_id:g,label_atom_id:y,label_comp_id:h,label_seq_id:b,label_entity_id:R.sg.ofConst("1",o,R.sg.Schema.str),occupancy:R.sg.ofConst(1,o,R.sg.Schema.float),type_symbol:y,pdbx_PDB_model_num:R.sg.ofIntArray(f)},o),S=new eb.L;S.setNames([["MOL","Unknown Entity"]]),S.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let T=new em.Q(b,y);T.setNames([["MOL","Unknown Molecule"]]),T.add("MOL",0);let C=(0,ey.p)({entity:S.getEntityTable(),chem_comp:T.getChemCompTable(),atom_site:x}),O=await (0,ex.c)(C,w.create(e),t);if(O.frameCount>0){let e=O.representative;if(0!==n.count){let t=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdA,e=>
7319e-1,Int32Array)),r=R.sg.ofIntArray(R.sg.mapToArray(n.atomIdB,e=>e-1,Int32Array)),i=n.bondId,o=R.sg.ofConst(1,n.count,R.sg.Schema.int),s=R.sg.ofConst(ef.BondType.Flag.Covalent,n.count,R.sg.Schema.int),l=eQ.t.fromData({pairs:{key:i,indexA:t,indexB:r,order:o,flag:s},count:a.count},{maxDistance:1/0});eQ.t.Provider.set(e,l)}e_.o.Provider.set(e,{data:a.charge,type:"NO_CHARGES"}),i.push(e)}return new eF.ArrayTrajectory(i)}(d=w||(w={})).is=function(e){return(null==e?void 0:e.kind)==="data"},d.create=function(e){return{kind:"data",name:"data",data:e}};let{readLine:ty,skipWhitespace:tx,eatValue:tS,eatLine:tT,markStart:tC}=F.Tokenizer;async function tO(e,t,r){let{tokenizer:a}=e,n=Object.fromEntries(r.map((e,t)=>[e,t])),i=r.findIndex(e=>"x"===e[0]),o=r.findIndex(e=>"y"===e[0]),s=r.findIndex(e=>"z"===e[0]),l=r[i],u=F.c.create(a.data,2*t),c=F.c.create(a.data,2*t),d=F.c.create(a.data,2*t),p=F.c.create(a.data,2*t),f=F.c.create(a.data,2*t),m=F.c.create(a.data,2*t),{position:h}=a;a.position=h;let g=r.length,{length:b}=a,y=0;return await (0,B.rV)(e.runtimeCtx,1e5,void 0,e=>{let r=Math.min(t-y,e);for(let e=0;e<r;++e){for(let e=0;e<g;++e)switch(tx(a),tC(a),tS(a),e){case n.id:F.c.addUnchecked(u,a.tokenStart,a.tokenEnd);break;case n.mol:F.c.addUnchecked(c,a.tokenStart,a.tokenEnd);break;case n.type:F.c.addUnchecked(d,a.tokenStart,a.tokenEnd);break;case i:F.c.addUnchecked(p,a.tokenStart,a.tokenEnd);break;case o:F.c.addUnchecked(f,a.tokenStart,a.tokenEnd);break;case s:F.c.addUnchecked(m,a.tokenStart,a.tokenEnd)}tT(a),tC(a)}return y+=r,r},e=>e.update({message:"Parsing...",current:a.position,max:b})),{count:t,atomMode:l,atomId:(0,ew.Lq)(u)(R.sg.Schema.int),moleculeId:(0,ew.Lq)(c)(R.sg.Schema.int),atomType:(0,ew.Lq)(d)(R.sg.Schema.int),x:(0,ew.Lq)(p)(R.sg.Schema.float),y:(0,ew.Lq)(f)(R.sg.Schema.float),z:(0,ew.Lq)(m)(R.sg.Schema.float)}}async function tI(e,t){let r=(0,F.Tokenizer)(e),a={tokenizer:r,runtimeCtx:t},n={frames:[],times:[],bounds:[],timeOffset:0,deltaTime:0},i=n.frames,o=0,s=0;for(;r.tokenEnd<r.length;){let e=ty(a.tokenizer).trim();if(e.includes("ITEM: TIMESTEP"))s=parseInt(ty(a.tokenizer).trim()),n.times.push(s);else if(e.includes("ITEM: NUMBER OF ATOMS"))o=parseInt(ty(a.tokenizer).trim());else if(e.includes("ITEM: ATOMS")){let t=e.split(" ").slice(2),r=await tO(a,o,t);i.push(r)}else if(e.includes("ITEM: BOX BOUNDS")){let t=e.split("ITEM: BOX BOUNDS ")[1].split(" "),r=t[0],i=t[1],o=t[2],s=ty(a.tokenizer).trim().split(" "),l=ty(a.tokenizer).trim().split(" "),u=ty(a.tokenizer).trim().split(" "),c=parseFloat(s[0]),d=parseFloat(s[1]),p=parseFloat(l[0]),f=parseFloat(l[1]),m=parseFloat(u[0]),h=parseFloat(u[1]);n.bounds.push({lower:[c,p,m],length:[d-c,f-p,h-m],periodicity:[r,i,o]})}}return n.times.length>=1&&(n.timeOffset=n.times[0]),n.times.length>=2&&(n.deltaTime=n.times[1]-n.times[0]),k.X.success(n)}function tA(e){return B.iQ.create("Parse Lammp Trajectory",async t=>await tI(e,t))}var tw=r(95446);function tD(e,t="real"){return B.iQ.create("Parse Lammps Trajectory",async r=>{await r.update("Converting to coordinates");let a=to[t].scale,n=(0,en.q)(e.deltaTime,"step"),i=(0,en.q)(e.timeOffset,n.unit),o={x:0,y:0,z:0},s={x:1,y:1,z:1},l=e.frames[0].atomMode.includes("s"),u=[];for(let t=0,r=e.frames.length;t<r;++t){let r=e.bounds[t];l&&(s.x=r.length[0],s.y=r.length[1],s.z=r.length[2],o.x=r.lower[0],o.y=r.lower[1],o.z=r.lower[2]);let c=e.frames[t].count,d=new Float32Array(c),p=new Float32Array(c),f=new Float32Array(c),m=0;for(let r=0;r<c;r++)d[m]=(e.frames[t].x.value(r)*s.x+o.x)*a,p[m]=(e.frames[t].y.value(r)*s.y+o.y)*a,f[m]=(e.frames[t].z.value(r)*s.z+o.z)*a,m++;u.push({elementCount:e.frames[t].count,x:d,y:p,z:f,xyzOrdering:{isIdentity:!0},time:(0,en.q)(i.value+n.value*t,n.unit)})}return en.r.create(u,n,i)})}async function tE(e,t,r="real"){let a=e.frames[0],n=a.count,i=a.atomMode,o=e.bounds[0],s={x:0,y:0,z:0},l={x:1,y:1,z:1},u=to[r].scale;i.includes("s")&&(l.x=o.length[0],l.y=o.length[1],l.z=o.length[2],s.x=o.lower[0],s.y=o.lower[1],s.z=o.lower[2]);let c=Array(n),d=new Int32Array(n),p=new Float32Array(n),f=new Float32Array(n),m=new Float32Array(n),h=new Int32Array(n),g=0;for(let e=0;e<n;e++)c[g]=a.atomType.value(e).toString(),p[g]=(a.x.value(e)*l.x+s.x)*u,f[g]=(a.y.value(e)*l.y+s.y)*u,m[g]=(a.z.value(e)*l.z+s.z)*u,d[g]=a.atomId.value(e),h[g]=0,g++;let b=R.sg.ofConst("MOL",n,R.sg.Schema.str),y=R.sg.ofLambda({value:e=>a.moleculeId.value(e).toString(),rowCount:n,schema:R.sg.Schema.str}),x=R.sg.ofConst(1,n,R.sg.Schema.int),S=R.sg.ofStringArray(c),T=R.iA.ofParti
7319alColumns(ey.d.atom_site,{auth_asym_id:y,auth_atom_id:S,auth_comp_id:b,auth_seq_id:x,Cartn_x:R.sg.ofFloatArray(p),Cartn_y:R.sg.ofFloatArray(f),Cartn_z:R.sg.ofFloatArray(m),id:R.sg.ofIntArray(d),label_asym_id:y,label_atom_id:S,label_comp_id:b,label_seq_id:x,label_entity_id:R.sg.ofConst("1",n,R.sg.Schema.str),occupancy:R.sg.ofConst(1,n,R.sg.Schema.float),type_symbol:S,pdbx_PDB_model_num:R.sg.ofIntArray(h)},n),C=new eb.L;C.setNames([["MOL","Unknown Entity"]]),C.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let O=new em.Q(x,S);O.setNames([["MOL","Unknown Molecule"]]),O.add("MOL",0);let I=(0,ey.p)({entity:C.getEntityTable(),chem_comp:O.getChemCompTable(),atom_site:T}),A=(await (0,ex.c)(I,D.create(e),t)).representative,w=await tD(e,r).runInContext(t);return tw.Hn.trajectoryFromModelAndCoordinates(A,w)}function tM(e){F.Tokenizer.skipWhitespace(e),F.Tokenizer.eatValue(e)}function tP(e,t){let{position:r}=e;F.Tokenizer.skipWhitespace(e),F.Tokenizer.eatValue(e),F.Tokenizer.trim(e,r,e.position),F.c.addUnchecked(t,e.tokenStart,e.tokenEnd)}(p=D||(D={})).is=function(e){return(null==e?void 0:e.kind)==="lammpstrj"},p.create=function(e){return{kind:"lammpstrj",name:"lammpstrj",data:e}};let tk="$$$$";async function tB(e){let t=new DataView(e.buffer),r={frames:[],boxes:[],times:[],timeOffset:0,deltaTime:0},a=r.frames,n=r.boxes,i=r.times,o=0;for(;;){o+=8;let r=t.getInt32(o);o+=4+r;let s=t.getInt32(o+8),l=t.getInt32(o+12),u=t.getInt32(o+16),c=t.getInt32(o+28),d=t.getInt32(o+32),p=t.getInt32(o+36),f=t.getInt32(o+40);o+=52;let m=s/9,h=3*f;if(8===m?i.push(t.getFloat64(o)):i.push(t.getFloat32(o)),o+=2*m,s){let e=new Float32Array(9);if(8===m)for(let r=0;r<9;++r)e[r]=10*t.getFloat64(o),o+=8;else for(let r=0;r<9;++r)e[r]=10*t.getFloat32(o),o+=4;n.push(e)}if(o+=l+u,c){let r=new Float32Array(f),n=new Float32Array(f),i=new Float32Array(f);if(8===m)for(let e=0;e<f;++e)r[e]=10*t.getFloat64(o),n[e]=10*t.getFloat64(o+8),i[e]=10*t.getFloat64(o+16),o+=24;else{let t=new Uint32Array(e.buffer,o,h);for(let e=0;e<h;++e){let r=t[e];t[e]=(255&r)<<24|(65280&r)<<8|r>>8&65280|r>>24&255}let a=new Float32Array(e.buffer,o,h);for(let e=0;e<f;++e)r[e]=10*a[3*e],n[e]=10*a[3*e+1],i[e]=10*a[3*e+2],o+=12}a.push({count:f,x:r,y:n,z:i})}if((o+=d+p)>=e.byteLength)break}return i.length>=1&&(r.timeOffset=i[0]),i.length>=2&&(r.deltaTime=i[1]-i[0]),r}(f=E||(E={})).is=function(e){return(null==e?void 0:e.kind)==="sdf"},f.create=function(e){return{kind:"sdf",name:e.molFile.title,data:e}};let t_=[];class tR{constructor(e,t={}){this._mark=0,this._marks=[],this.offset=0,this.littleEndian=!0;let r=!1;void 0===e&&(e=8192),"number"==typeof e?e=new ArrayBuffer(e):r=!0;let a=t.offset?t.offset>>>0:0,n=e.byteLength-a,i=a;e instanceof ArrayBuffer||e instanceof SharedArrayBuffer||(e.byteLength!==e.buffer.byteLength&&(i=e.byteOffset+a),e=e.buffer),r?this._lastWrittenByte=n:this._lastWrittenByte=0,this.buffer=e,this.length=n,this.byteLength=n,this.byteOffset=i,this._data=new DataView(this.buffer,i,n)}available(e=1){return this.offset+e<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(e){return void 0===e&&(e=1),this.offset+=e,this}seek(e){return this.offset=e,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let e=this._marks.pop();if(void 0===e)throw Error("Mark stack empty");return this.seek(e),this}rewind(){return this.offset=0,this}ensureAvailable(e){if(void 0===e&&(e=1),!this.available(e)){let t=2*(this.offset+e),r=new Uint8Array(t);r.set(new Uint8Array(this.buffer)),this.buffer=r.buffer,this.length=this.byteLength=t,this._data=new DataView(this.buffer)}return this}readBoolean(){return 0!==this.readUint8()}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(e){void 0===e&&(e=1);let t=new Uint8Array(e);for(let r=0;r<e;r++)t[r]=this.readByte();return t}readInt16(){let e=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}readUint16(){let e=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,e}readInt32(){let e=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}readUint32(){let e=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat32(){let e=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat64(){let e=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}readChar(){return String.fromCharCode(this.readInt8())}readChars(e=1){t_.length=e;for(let t=0;t<e;t++)t_[t]=this.readChar();return t_.join("")}writeBoolean(e=!1){return this.writeUint8(e?255:0),this}writeInt8(e){return this.ensureAvailable(1),this._data.setInt8(this.offset++,e),this._updateLastWrittenByte(),this}writeUint8(e){return this.ensureAvailable(1),this._data.setUint8(this.offset++,e),this._updateLastWrittenByte(),this}writeByte(e){return this.writeUint8(e)}writeBytes(e){this.ensureAvailable(e.length);for(let t=0;t<e.length;t++)this._data.setUint8(this.offset++,e[t]);return this._updateLastWrittenByte(),this}writeInt16(e){return this.ensureAvailable(2),this._data.setInt16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeUint16(e){return this.ensureAvailable(2),this._data.setUint16(this.offset,e,this.littleEndian),this.offset+=2,this._updateLastWrittenByte(),this}writeInt32(e){return this.ensureAvailable(4),this._data.setInt32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeUint32(e){return this.ensureAvailable(4),this._data.setUint32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat32(e){return this.ensureAvailable(4),this._data.setFloat32(this.offset,e,this.littleEndian),this.offset+=4,this._updateLastWrittenByte(),this}writeFloat64(e){return this.ensureAvailable(8),this._data.setFloat64(this.offset,e,this.littleEndian),this.offset+=8,this._updateLastWrittenByte(),this}writeChar(e){return this.writeUint8(e.charCodeAt(0))}writeChars(e){for(let t=0;t<e.length;t++)this.writeUint8(e.charCodeAt(t));return this}toArray(){return new Uint8Array(this.buffer,this.byteOffset,this._lastWrittenByte)}_updateLastWrittenByte(){this.offset>this._lastWrittenByte&&(this._lastWrittenByte=this.offset)}}function tF(e,t){if(e)throw TypeError("Not a valid NetCDF v3.x file: "+t)}function tL(e){e.offset%4!=0&&e.skip(4-e.offset%4)}function tz(e){let t=e.readUint32(),r=e.readChars(t);return tL(e),r}let tN={BYTE:1,CHAR:2,SHORT:3,INT:4,FLOAT:5,DOUBLE:6};function tG(e){switch(Number(e)){case tN.BYTE:return"byte";case tN.CHAR:return"char";case tN.SHORT:return"short";case tN.INT:return"int";case tN.FLOAT:return"float";case tN.DOUBLE:return"double";default:return"undefined"}}function tU(e){switch(Number(e)){case tN.BYTE:case tN.CHAR:return 1;case tN.SHORT:return 2;case tN.INT:case tN.FLOAT:return 4;case tN.DOUBLE:return 8;default:return -1}}function tV(e){switch(String(e)){case"byte":return tN.BYTE;case"char":return tN.CHAR;case"short":return tN.SHORT;case"int":return tN.INT;case"float":return tN.FLOAT;case"double":return tN.DOUBLE;default:return -1}}function tj(e,t){if(1===e)return t();{let r=Array(e);for(let a=0;a<e;a++)r[a]=t();return r}}function tH(e,t,r){switch(t){case tN.BYTE:return e.readBytes(r);case tN.CHAR:var a;
7319return 0===(a=e.readChars(r)).charCodeAt(a.length-1)?a.substring(0,a.length-1):a;case tN.SHORT:return tj(r,e.readInt16.bind(e));case tN.INT:return tj(r,e.readInt32.bind(e));case tN.FLOAT:return tj(r,e.readFloat32.bind(e));case tN.DOUBLE:return tj(r,e.readFloat64.bind(e));default:tF(!0,"non valid type "+t);return}}function tq(e){let t;let r=e.readUint32();if(0===r)return tF(0!==e.readUint32(),"wrong empty tag for list of attributes"),[];{tF(12!==r,"wrong tag for list of attributes");let a=e.readUint32();t=Array(a);for(let r=0;r<a;r++){let a=tz(e),n=e.readUint32();tF(n<1||n>6,"non valid type "+n);let i=e.readUint32(),o=tH(e,n,i);tL(e),t[r]={name:a,type:tG(n),value:o}}}return t}class tX{constructor(e){let t=new tR(e);t.setBigEndian(),tF("CDF"!==t.readChars(3),"should start with CDF");let r=t.readByte();tF(r>2,"unknown version"),this.header=function(e,t){let r={recordDimension:{length:e.readUint32()}};r.version=t;let a=function(e){let t,r,a;let n=e.readUint32();if(0===n)return tF(0!==e.readUint32(),"wrong empty tag for list of dimensions"),[];{tF(10!==n,"wrong tag for list of dimensions");let i=e.readUint32();t=Array(i);for(let n=0;n<i;n++){let i=tz(e),o=e.readUint32();0===o&&(r=n,a=i),t[n]={name:i,size:o}}return{dimensions:t,recordId:r,recordName:a}}}(e);r.recordDimension.id=a.recordId,r.recordDimension.name=a.recordName,r.dimensions=a.dimensions,r.globalAttributes=tq(e);let n=function(e,t,r){let a;let n=e.readUint32(),i=0;if(0===n)return tF(0!==e.readUint32(),"wrong empty tag for list of variables"),[];{tF(11!==n,"wrong tag for list of variables");let o=e.readUint32();a=Array(o);for(let n=0;n<o;n++){let o=tz(e),s=e.readUint32(),l=Array(s);for(let t=0;t<s;t++)l[t]=e.readUint32();let u=tq(e),c=e.readUint32();tF(c<1&&c>6,"non valid type "+c);let d=e.readUint32(),p=e.readUint32();2===r&&(tF(p>0,"offsets larger than 4GB not supported"),p=e.readUint32()),l[0]===t&&(i+=d),a[n]={name:o,dimensions:l,attributes:u,type:tG(c),size:d,offset:p,record:l[0]===t}}}return{variables:a,recordStep:i}}(e,a.recordId,t);return r.variables=n.variables,r.recordDimension.recordStep=n.recordStep,r}(t,r),this.buffer=t}get version(){return 1===this.header.version?"classic format":"64-bit offset format"}get recordDimension(){return this.header.recordDimension}get dimensions(){return this.header.dimensions}get globalAttributes(){return this.header.globalAttributes}get variables(){return this.header.variables}hasDataVariable(e){return this.header.variables&&-1!==this.header.variables.findIndex(t=>t.name===e)}getDataVariable(e){var t;let r;if(void 0===(r="string"==typeof e?null===(t=this.header.variables)||void 0===t?void 0:t.find(t=>t.name===e):e))throw Error("variable not found");return(this.buffer.seek(r.offset),r.record)?function(e,t,r){let a=tV(t.type),n=t.size?t.size/tU(a):1,i=r.length,o=Array(i),s=r.recordStep;for(let t=0;t<i;t++){let r=e.offset;o[t]=tH(e,a,n),e.seek(r+s)}return o}(this.buffer,r,this.header.recordDimension):function(e,t){let r=tV(t.type),a=t.size/tU(r),n=Array(a);for(let t=0;t<a;t++)n[t]=tH(e,r,1);return n}(this.buffer,r)}}async function tW(e){let t=new tX(e.buffer),r={coordinates:[],time:[],timeOffset:0,deltaTime:1};for(let e of t.getDataVariable("coordinates"))r.coordinates.push(e);if(t.hasDataVariable("velocities")){let e=[];for(let r of t.getDataVariable("velocities"))e.push(r);r.velocities=e}if(t.hasDataVariable("forces")){let e=[];for(let r of t.getDataVariable("forces"))e.push(r);r.forces=e}if(t.hasDataVariable("cell_lengths")){let e=[];
7319for(let r of t.getDataVariable("cell_lengths"))e.push(r);r.cell_lengths=e}if(t.hasDataVariable("cell_angles")){let e=[];for(let r of t.getDataVariable("cell_angles"))e.push(r);r.cell_angles=e}if(t.hasDataVariable("time")){let e=[];for(let r of t.getDataVariable("time"))e.push(r);r.time=e}return r.time&&(r.time.length>=1&&(r.timeOffset=r.time[0]),r.time.length>=2&&(r.deltaTime=r.time[1]-r.time[0])),r}(m=M||(M={})).is=function(e){return(null==e?void 0:e.kind)==="prmtop"},m.fromPrmtop=function(e){return{kind:"prmtop",name:e.title.join(" ")||"PRMTOP",data:e}},(h=P||(P={})).is=function(e){return(null==e?void 0:e.kind)==="top"},h.fromTop=function(e){return{kind:"top",name:e.system||"TOP",data:e}};var tK=r(40208);let tQ=ej.E.BuiltIn({name:"coordinates-from-dcd",display:{name:"Parse DCD",description:"Parse DCD binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse DCD",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse DCD",async e=>{try{let e=function(e){let t=new DataView(e.buffer),r=Object.create(null),a=[],n=0,i=new Int32Array(e.buffer,0,23),o=i[0]!==t.getInt32(0);if(84!==i[0]){let r=e.byteLength;for(let e=0;e<r;e+=4)t.setFloat32(e,t.getFloat32(e),!0)}if(84!==i[0])throw Error("dcd bad format, header block start");if("CORD"!==String.fromCharCode(t.getUint8(4),t.getUint8(5),t.getUint8(6),t.getUint8(7)))throw Error("dcd bad format, format string");let s=!1,l=!1,u=!1;if(0!==i[22]&&(s=!0,0!==i[12]&&(l=!0),1===i[13]&&(u=!0)),r.NSET=i[2],r.ISTART=i[3],r.NSAVC=i[4],r.NAMNF=i[10],s?r.DELTA=t.getFloat32(44,o):r.DELTA=t.getFloat64(44,o),84!==i[22])throw Error("dcd bad format, header block end");n=n+84+8;let c=t.getInt32(n,o),d=n+1;if((c-4)%80!=0)throw Error("dcd bad format, title block start");if(r.TITLE=(0,_.YO)(e.subarray(d,c)),t.getInt32(d+c+4-1,o)!==c)throw Error("dcd bad format, title block end");if(n=n+c+8,4!==t.getInt32(n,o))throw Error("dcd bad format, natom block start");if(r.NATOM=t.getInt32(n+4,o),4!==t.getInt32(n+8,o))throw Error("dcd bad format, natom block end");if(n=n+4+8,r.NAMNF>0)throw Error("dcd format with fixed atoms unsupported, aborting");let p=r.NATOM,f=4*p;for(let i=0,s=r.NSET;i<s;++i){let r=Object.create(null);r.elementCount=p,l&&(n+=4,r.cell=[t.getFloat64(n,o),t.getFloat64(n+1,o),t.getFloat64(n+16,o),t.getFloat64(n+24,o),t.getFloat64(n+32,o),t.getFloat64(n+40,o)],n+=52);for(let a=0;a<3;++a){if(t.getInt32(n,o)!==f)throw Error(`dcd bad format, coord block start: ${i}, ${a}`);n+=4;let s=new Float32Array(e.buffer,n,p);if(0===a?r.x=s:1===a?r.y=s:r.z=s,n+=f,t.getInt32(n,o)!==f)throw Error(`dcd bad format, coord block end: ${i}, ${a}`);n+=4}if(u){let e=t.getInt32(n,o);n+=4+e+4}a.push(r)}return{header:r,frames:a}}(r);return k.X.success(e)}catch(e){return k.X.error(e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse DCD",async e=>{await e.update("Converting to coordinates");let{header:t}=a,r=t.DELTA?(0,en.q)(20.45482949774598*t.DELTA,"ps"):(0,en.q)(1,"step"),n=t.ISTART>=1?(0,en.q)((t.ISTART-1)*r.value,r.unit):(0,en.q)(0,r.unit),i=[];for(let e=0,t=a.frames.length;e<t;++e){let t=a.frames[e],o={elementCount:t.elementCount,time:(0,en.q)(n.value+r.value*e,r.unit),x:t.x,y:t.y,z:t.z,xyzOrdering:{isIdentity:!0}};if(t.cell){let e=t.cell;e[1]>=-1&&e[1]<=1&&e[3]>=-1&&e[3]<=1&&e[4]>=-1&&e[4]<=1?o.cell=eo.create(G.AO.create(e[0],e[2],e[5]),G.AO.create((0,ei.Id)(90-90*Math.asin(e[1])/ei.MZ),(0,ei.Id)(90-90*Math.asin(e[3])/ei.MZ),(0,ei.Id)(90-90*Math.asin(e[4])/ei.MZ))):e[0]<0||e[1]<0||e[2]<0||e[3]<0||e[4]<0||e[5]<0||e[3]>180||e[4]>180||e[5]>180?o.cell=eo.fromBasis(G.AO.create(e[0],e[1],e[3]),G.AO.create(e[1],e[2],e[4]),G.AO.create(e[3],e[4],e[5])):o.cell=eo.create(G.AO.create(e[0],e[2],e[5]),G.AO.create((0,ei.Id)((0,es.q)(e[1],0,es.I)?90:e[1]),(0,ei.Id)((0,es.q)(e[3],0,es.I)?90:e[3]),(0,ei.Id)((0,es.q)(e[4],0,es.I)?90:e[4])))}i.push(o)}return en.r.create(i,r,n)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tZ=ej.E.BuiltIn({name:"coordinates-from-xtc",display:{name:"Parse XTC",description:"Parse XTC binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse XTC",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse XTC",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await ti(e,r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse XTC",async e=>{await e.update("Converting to coordinates");
7319let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.frames.length;e<i;++e){let i=a.boxes[e],o=G.AO.fromArray((0,G.AO)(),i,0),s=G.AO.fromArray((0,G.AO)(),i,3),l=G.AO.fromArray((0,G.AO)(),i,6);n.push({elementCount:a.frames[e].count,cell:eo.fromBasis(o,s,l),x:a.frames[e].x,y:a.frames[e].y,z:a.frames[e].z,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)})}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tY=ej.E.BuiltIn({name:"coordinates-from-trr",display:{name:"Parse TRR",description:"Parse TRR binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse TRR",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse TRR",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await tB(r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse TRR",async e=>{await e.update("Converting to coordinates");let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.frames.length;e<i;++e){let i=a.boxes[e],o=G.AO.fromArray((0,G.AO)(),i,0),s=G.AO.fromArray((0,G.AO)(),i,3),l=G.AO.fromArray((0,G.AO)(),i,6);n.push({elementCount:a.frames[e].count,cell:eo.fromBasis(o,s,l),x:a.frames[e].x,y:a.frames[e].y,z:a.frames[e].z,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)})}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),t$=ej.E.BuiltIn({name:"coordinates-from-nctraj",display:{name:"Parse NCTRAJ",description:"Parse NCTRAJ binary data."},from:[ej.G.Data.Binary],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse NCTRAJ",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse NCTRAJ",async e=>{try{e.update({canAbort:!0,message:"Parsing trajectory..."});let t=await tW(r);return k.X.success(t)}catch(e){return k.X.error(""+e)}})).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse NCTRAJ",async e=>{await e.update("Converting to coordinates");let t=(0,en.q)(a.deltaTime,"step"),r=(0,en.q)(a.timeOffset,t.unit),n=[];for(let e=0,i=a.coordinates.length;e<i;++e){let i=a.coordinates[e],o=i.length/3,s=new Float32Array(o),l=new Float32Array(o),u=new Float32Array(o);for(let e=0,t=i.length;e<t;e+=3)s[e/3]=i[e],l[e/3]=i[e+1],u[e/3]=i[e+2];let c={elementCount:o,x:s,y:l,z:u,xyzOrdering:{isIdentity:!0},time:(0,en.q)(r.value+t.value*e,t.unit)};if(a.cell_lengths){let t=a.cell_lengths[e],r=G.AO.scale((0,G.AO)(),G.AO.unitX,t[0]),n=G.AO.scale((0,G.AO)(),G.AO.unitY,t[1]),i=G.AO.scale((0,G.AO)(),G.AO.unitZ,t[2]);c.cell=eo.fromBasis(r,n,i)}n.push(c)}return en.r.create(n,t,r)})).runInContext(t);return new ej.G.Molecule.Coordinates(i,{label:e.label,description:"Coordinates"})})}),tJ=ej.E.BuiltIn({name:"coordinates-from-lammpstraj",display:{name:"Parse LAMMPSTRAJ",description:"Parse LAMMPSTRAJ data."},from:[ej.G.Data.String],to:ej.G.Molecule.Coordinates})({apply:({a:e})=>B.iQ.create("Parse LAMMPSTRAJ",async t=>{let r=await tA(e.data).runInContext(t);if(r.isError)throw Error(r.message);let a=await tD(r.result).runInContext(t);return new ej.G.Molecule.Coordinates(a,{label:e.label,description:"Coordinates"})})}),t0=ej.E.BuiltIn({name:"topology-from-psf",display:{name:"PSF Topology",description:"Create topology from PSF."},from:[ej.G.Format.Psf],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse PSF",async e=>{let t=y.fromPsf(r),a=function(e){let t=Array(e.count),r=Array(e.count),a=new Uint32Array(e.count),n=new Uint32Array(e.count),i=Array(e.count),o=new eb.L,s=new em.Q(e.residueId,e.atomName),l="",u=0,c="",d=0,p=e.segmentName.value(0),f=!1,m=ef.MoleculeType.Unknown,h=-1;for(let g=0,b=e.count;g<b;++g){let b=e.residueId.value(g),y=e.segmentName.value(g);if(p!==y?(c=ev(u),u+=1,d=0,f=!0,p=y):f=!1,f||b!==h){let t=e.residueName.value(g),r=(0,ef.getMoleculeType)(s.add(t,g).type,t);f||r===m&&b===h+1||(c=ev(u),u+=1,d=0),l=o.getEntityId(t,r,c),d+=1,h=b,m=r}t[g]=l,r[g]=c,a[g]=d,n[g]=g,i[g]=ep(e.atomName.value(g),e.residueName.value(g))}
7319let g=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:e.segmentName,auth_atom_id:e.atomName,auth_comp_id:e.residueName,auth_seq_id:e.residueId,id:R.sg.ofIntArray(n),label_asym_id:R.sg.ofStringArray(r),label_atom_id:e.atomName,label_comp_id:e.residueName,label_seq_id:R.sg.ofIntArray(a),label_entity_id:R.sg.ofStringArray(t),occupancy:R.sg.ofConst(1,e.count,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(i),pdbx_PDB_model_num:R.sg.ofConst(1,e.count,R.sg.Schema.int)},e.count);return(0,ey.p)({entity:o.getEntityTable(),chem_comp:s.getChemCompTable(),atom_site:g})}(r.atoms),{atomIdA:n,atomIdB:i}=r.bonds,o={indexA:R.sg.ofLambda({value:e=>n.value(e)-1,rowCount:n.rowCount,schema:n.schema}),indexB:R.sg.ofLambda({value:e=>i.value(e)-1,rowCount:i.rowCount,schema:i.schema}),order:R.sg.ofConst(1,r.bonds.count,R.sg.Schema.int)};return eR.d.create(r.id,a,o,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})}),t1=ej.E.BuiltIn({name:"topology-from-prmtop",display:{name:"PRMTOP Topology",description:"Create topology from PRMTOP."},from:[ej.G.Format.Prmtop],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse PRMTOP",async e=>{let t=M.fromPrmtop(r),a=function(e){let{pointers:t,residuePointer:r,residueLabel:a,atomName:n}=e,i=t.NATOM,o=t.NRES,s=new Uint32Array(i),l=[],u=(e,t,r)=>{let n=a.value(e);for(let a=t;a<r;++a)s[a]=e+1,l[a]=n};for(let e=0,t=o-1;e<t;++e)u(e,r.value(e)-1,r.value(e+1)-1);u(o-1,r.value(o-1)-1,i);let c=R.sg.ofIntArray(s),d=R.sg.ofStringArray(l),p=Array(i),f=Array(i),m=new Uint32Array(i),h=new Uint32Array(i),g=new eb.L,b=new em.Q(c,n),y="",x=0,S="",T=0,C=ef.MoleculeType.Unknown,O=-1;for(let e=0;e<i;++e){let t=c.value(e);if(t!==O){let r=d.value(e),a=(0,ef.getMoleculeType)(b.add(r,e).type,r);a!==C&&(S=ev(x),x+=1,T=0),y=g.getEntityId(r,a,S),T+=1,O=t,C=a}p[e]=y,f[e]=S,m[e]=T,h[e]=e}let I=R.sg.ofIntArray(h),A=R.sg.ofStringArray(f),w=Array(i);for(let e=0;e<i;++e)w[e]=ep(n.value(e),d.value(e));let D=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:A,auth_atom_id:R.sg.asArrayColumn(n),auth_comp_id:d,auth_seq_id:c,id:R.sg.asArrayColumn(I),label_asym_id:A,label_atom_id:R.sg.asArrayColumn(n),label_comp_id:d,label_seq_id:R.sg.ofIntArray(m),label_entity_id:R.sg.ofStringArray(p),occupancy:R.sg.ofConst(1,i,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(w),pdbx_PDB_model_num:R.sg.ofConst(1,i,R.sg.Schema.int)},i);return(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:D})}(r),{pointers:{NBONH:n,NBONA:i},bondsIncHydrogen:o,bondsWithoutHydrogen:s}=r,l=n+i,u={indexA:R.sg.ofLambda({value:e=>e<n?o.value(3*e)/3:s.value((e-n)*3)/3,rowCount:l,schema:R.sg.Schema.int}),indexB:R.sg.ofLambda({value:e=>e<n?o.value(3*e+1)/3:s.value((e-n)*3+1)/3,rowCount:l,schema:R.sg.Schema.int}),order:R.sg.ofConst(1,l,R.sg.Schema.int)};return eR.d.create(r.title.join(" ")||"PRMTOP",a,u,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})}),t2=ej.E.BuiltIn({name:"topology-from-top",display:{name:"TOP Topology",description:"Create topology from TOP."},from:[ej.G.Format.Top],to:ej.G.Molecule.Topology})({apply:({a:e})=>B.iQ.create("Create Topology",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse TOP",async e=>{let t=P.fromTop(r),a=function(e){let{molecules:t,compounds:r}=e,a={},n=0;for(let e=0,i=t._rowCount;e<i;++e){let i=t.compound.value(e),o=t.molCount.value(e),{atoms:s}=r[i];R.sg.asArrayColumn(s.atom),R.sg.asArrayColumn(s.resnr),R.sg.asArrayColumn(s.residu),n+=o*s._rowCount;let l=s.resnr.value(0);a[i]=!0;for(let e=1,t=s._rowCount;e<t;++e){let t=s.resnr.value(e);if(t!==l){a[i]=!1;break}l=t}}let i=Array(n),o=new Uint32Array(n),s=Array(n),l=0;for(let e=0,n=t._rowCount;e<n;++e){let n=t.compound.value(e),u=t.molCount.value(e),{atoms:c}=r[n],d=a[n];for(let e=0;e<u;++e)for(let t=0,r=c._rowCount;t<r;++t)i[l]=c.atom.value(t),o[l]=c.resnr.value(t),s[l]=c.residu.value(t),d&&(o[l]+=e),l+=1}let u=R.sg.ofStringArray(i),c=R.sg.ofIntArray(o),d=R.sg.ofStringArray(s),p=Array(n),f=Array(n),m=new Uint32Array(n),h=new Uint32Array(n),g=new eb.L,b=new em.Q(c,u),y="",x=0,S="",T=0,C=ef.MoleculeType.Unknown,O=-1;for(let e=0,t=n;e<t;++e){let t=c.value(e);if(t!==O){let r=d.value(e),a=(0,ef.getMoleculeType)(b.add(r,e).type,r);a!==C&&(S=ev(x),x+=1,T=0),y=g.getEntityId(r,a,S),T+=1,O=t,C=a}p[e]=y,f[e]=S,m[e]=T,h[e]=e}let I=R.sg.ofIntArray(h),A=R.sg.ofStringArray(f),w=Array(n);for(let e=0;e<n;++e)w[e]=ep(u.value(e),d.value(e));
7319let D=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:A,auth_atom_id:R.sg.asArrayColumn(u),auth_comp_id:d,auth_seq_id:c,id:R.sg.asArrayColumn(I),label_asym_id:A,label_atom_id:R.sg.asArrayColumn(u),label_comp_id:d,label_seq_id:R.sg.ofIntArray(m),label_entity_id:R.sg.ofStringArray(p),occupancy:R.sg.ofConst(1,n,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(w),pdbx_PDB_model_num:R.sg.ofConst(1,n,R.sg.Schema.int)},n);return(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:D})}(r),n=function(e){let{molecules:t,compounds:r}=e,a=[],n=[],i=0;for(let e=0,o=t._rowCount;e<o;++e){let o=t.compound.value(e),s=t.molCount.value(e),{atoms:l,bonds:u}=r[o];if(u)for(let e=0;e<s;++e){for(let e=0,t=u._rowCount;e<t;++e)a.push(u.ai.value(e)-1+i),n.push(u.aj.value(e)-1+i);i+=l._rowCount}else if("TIP3"===o)for(let e=0;e<s;++e)a.push(0+i),n.push(1+i),a.push(0+i),n.push(2+i),i+=l._rowCount;else i+=s*l._rowCount}return{indexA:R.sg.ofIntArray(a),indexB:R.sg.ofIntArray(n),order:R.sg.ofConst(1,a.length,R.sg.Schema.int)}}(r);return eR.d.create(r.system||"TOP",a,n,t)})).runInContext(t);return new ej.G.Molecule.Topology(a,{label:a.label||e.label,description:"Topology"})})});async function t3(e,t,r){if(t.type===ej.G.Molecule.Topology.type){let a=t.data;return await eF.Model.trajectoryFromTopologyAndCoordinates(a,r).runInContext(e)}if(t.type===ej.G.Molecule.Model.type){let e=t.data;return eF.Model.trajectoryFromModelAndCoordinates(e,r)}throw Error("no model/topology found")}let t4=ej.E.BuiltIn({name:"trajectory-from-model-and-coordinates",display:{name:"Trajectory from Topology & Coordinates",description:"Create a trajectory from existing model/topology and coordinates."},from:ej.G.Root,to:ej.G.Molecule.Trajectory,params:{modelRef:W.e.Text("",{isHidden:!0}),coordinatesRef:W.e.Text("",{isHidden:!0})}})({apply:({params:e,dependencies:t})=>B.iQ.create("Create trajectory from model/topology and coordinates",async r=>{let a=t[e.coordinatesRef].data,n=await t3(r,t[e.modelRef],a),i={label:"Trajectory",description:`${n.frameCount} model${1===n.frameCount?"":"s"}`};return new ej.G.Molecule.Trajectory(n,i)})}),t5=ej.E.BuiltIn({name:"trajectory-from-blob",display:{name:"Parse Blob",description:"Parse format blob into a single trajectory."},from:ej.G.Format.Blob,to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse Format Blob",async t=>{let r=[];for(let a of e.data){if("cif"!==a.kind)continue;let e=a.data.blocks[0],n=await (0,eT.kN)(e).runInContext(t);if(0===n.frameCount)throw Error("No models found.");for(let e=0;e<n.frameCount;e++){let a=await B.iQ.resolveInContext(n.getFrameAtIndex(e),t);r.push(a)}}for(let e=0;e<r.length;e++)eF.Model.TrajectoryInfo.set(r[e],{index:e,size:r.length});let a={label:"Trajectory",description:`${r.length} model${1===r.length?"":"s"}`};return new ej.G.Molecule.Trajectory(new eF.ArrayTrajectory(r),a)})});function t6(e){let t=e.representative;return{label:`${t.entry}`,description:`${e.frameCount} model${1===e.frameCount?"":"s"}`}}let t8=ej.E.BuiltIn({name:"trajectory-from-mmcif",display:{name:"Trajectory from mmCIF",description:"Identify and create all separate models in the specified CIF data block"},from:ej.G.Format.Cif,to:ej.G.Molecule.Trajectory,params(e){if(!e)return{loadAllBlocks:W.e.Optional(W.e.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all datablocks into a single trajectory."})),blockHeader:W.e.Optional(W.e.Text(void 0,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:e=>!0===e.loadAllBlocks})),blockIndex:W.e.Optional(W.e.Numeric(0,{min:0,step:1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:e=>!0===e.loadAllBlocks||e.blockHeader}))};let{blocks:t}=e.data,r=t.map(e=>[e.header,e.header]);return r.push(["","[Use Block Index]"]),{loadAllBlocks:W.e.Optional(W.e.Boolean(!1,{description:"If True, ignore Block Header and Block Index parameters and parse all data blocks into a single trajectory."})),blockHeader:W.e.Optional(W.e.Select(t[0]&&t[0].header,r,{description:"Header of the block to parse. If not specifed, Block Index parameter applies.",hideIf:e=>!0===e.loadAllBlocks})),blockIndex:W.e.Optional(W.e.Numeric(0,{min:0,step:1,max:t.length-1},{description:"Zero-based index of the block to parse. Only applies when Block Header parameter is not specified.",hideIf:e=>!0===e.loadAllBlocks||e.blockHeader}))}}})({isApplicable:e=>e.data.blocks.length>0,apply:({a:e,params:t})=>B.iQ.create("Parse mmCIF",async r=>{var a;let n;if(t.loadAllBlocks){let t=[];for(let a of e.data.blocks){r.shouldUpdate&&await r.update(`Parsing ${a.header}...`);let e=await (0,eT.kN)(a).runInContext(r);for(let a=0;a<e.frameCount;a++)t.push(await B.iQ.resolveInContext(e.getFrameAtIndex(a),r))}n=new eF.ArrayTrajectory(t)}else{let i=t.blockHeader||e.data.blocks[null!==(a=t.blockIndex)&&void 0!==a?a:0].header,o=e.data.blocks.find(e=>e.header===i);if(!o)throw Error(`Data block '${[i]}' not found.`);n=!o.categoryNames.includes("chem_comp_atom")||o.categoryNames.includes("atom_site")||o.categoryNames.includes("ihm_sphere_obj_site")||o.categoryNames.includes("ihm_gaussian_obj_site")?await (0,eT.kN)(o,e.data).runInContext(r):await (0,eT.Dx)(o).runInContext(r)}if(0===n.frameCount)throw Error("No models found.");let i=t6(n);return new ej.G.Molecule.Trajectory(n,i)})}),t7=ej.E.BuiltIn({name:"trajectory-from-pdb",display:{name:"Parse PDB",description:"Parse PDB string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{variant:W.e.Select("pdb",W.e.arrayToOptions(["pdb","pdbqt","pqr"]))}})({apply:({a:e,params:t})=>B.iQ.create("Parse PDB",async r=>{var a,n,i,o;let s=await (a=e.data,n=e.label,i=t.variant,B.iQ.create("Parse PDB",async e=>k.X.success({lines:await F.Tokenizer.readAllLinesAsync(a,e),id:n,variant:i||"pdb"}))).runInContext(r);if(s.isError)throw Error(s.message);let l=await (o=s.result,B.iQ.create("Parse PDB",async e=>{var t;await e.update("Converting to mmCIF");let r=await eB(o),a=eT.rg.fromFrame(r,void 0,b.create(o)),n=(0,ey.p)(a.data.db,!0),i=await (0,ex.c)(n,a,e),s=null===(t=r.categories.atom_site)||void 0===t?void 0:t.getField("partial_charge");if(s&&1===i.frameCount){let e=i.representative,t=e.atomicHierarchy.atomSourceIndex,r=R.sg.isIdentity(t)?void 0:t.toArray({array:Int32Array}),a=s.toFloatArray(),n=r?R.sg.ofFloatArray(R.sg.mapToArray(t,e=>a[e],Float32Array)):R.sg.ofFloatArray(a);e_.o.Provider.set(e,{data:n,type:"GASTEIGER"})}return i})).runInContext(r),u=t6(l);return new ej.G.Molecule.Trajectory(l,u)})}),t9=ej.E.BuiltIn({name:"trajectory-from-gro",display:{name:"Parse GRO",description:"Parse GRO string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse GRO",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse GRO",async e=>await N(r,e))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse GRO",async e=>{let t=g.fromGro(a),r=[];for(let n=0,i=a.structures.length;n<i;++n){let i=function(e,t){let r=e.atomName,a=e.residueName,n=Array(e.count),i=Array(e.count),o=new Uint32Array(e.count),s=new Uint32Array(e.count),l=Array(e.count),u=new eb.L,c=new em.Q(e.residueNumber,e.atomName),d="",p=0,f="",m=0,h=ef.MoleculeType.Unknown,g=-1;for(let t=0,r=e.count;t<r;
7319++t){let r=e.residueNumber.value(t);if(r!==g){let a=e.residueName.value(t),n=(0,ef.getMoleculeType)(c.add(a,t).type,a);n===h&&(r===g+1||99999===g&&0===r)||(f=ev(p),p+=1,m=0),d=u.getEntityId(a,n,f),m+=1,g=r,h=n}n[t]=d,i[t]=f,o[t]=m,s[t]=t,l[t]=ep(e.atomName.value(t),e.residueName.value(t))}let b=R.sg.ofStringArray(i),y=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:b,auth_atom_id:r,auth_comp_id:a,auth_seq_id:e.residueNumber,Cartn_x:R.sg.ofFloatArray(R.sg.mapToArray(e.x,e=>10*e,Float32Array)),Cartn_y:R.sg.ofFloatArray(R.sg.mapToArray(e.y,e=>10*e,Float32Array)),Cartn_z:R.sg.ofFloatArray(R.sg.mapToArray(e.z,e=>10*e,Float32Array)),id:R.sg.ofIntArray(s),label_asym_id:b,label_atom_id:r,label_comp_id:a,label_seq_id:R.sg.ofIntArray(o),label_entity_id:R.sg.ofStringArray(n),occupancy:R.sg.ofConst(1,e.count,R.sg.Schema.float),type_symbol:R.sg.ofStringArray(l),pdbx_PDB_model_num:R.sg.ofConst(t,e.count,R.sg.Schema.int)},e.count);return(0,ey.p)({entity:u.getEntityTable(),chem_comp:c.getChemCompTable(),atom_site:y})}(a.structures[n].atoms,n+1),o=await (0,ex.c)(i,t,e);1===o.frameCount&&r.push(o.representative)}return new eS.E(r)})).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),re=ej.E.BuiltIn({name:"trajectory-from-xyz",display:{name:"Parse XYZ",description:"Parse XYZ string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse XYZ",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse Mol",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=[];for(;;){let e=function(e){let t=e.position>=e.data.length-1?0:+F.Tokenizer.readLine(e);isNaN(t)&&(t=0);let r=F.Tokenizer.readLine(e),a=new Float64Array(t),n=new Float64Array(t),i=new Float64Array(t),o=Array(t);for(let r=0;r<t;++r){let t=F.Tokenizer.readLineTrim(e).split(/\s+/g);o[r]=t[0],a[r]=+t[1],n[r]=+t[2],i[r]=+t[3]}return{count:t,comment:r,x:R.sg.ofFloatArray(a),y:R.sg.ofFloatArray(n),z:R.sg.ofFloatArray(i),type_symbol:R.sg.ofStringArray(o)}}(t);if(0===e.count)break;r.push(e)}return k.X.success({molecules:r})})(r))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse XYZ",e=>(function(e,t){let{molecules:r}=e,a=0;for(let e of r)a+=e.count;let n=Array(a),i=new Int32Array(a),o=new Float32Array(a),s=new Float32Array(a),l=new Float32Array(a),u=new Int32Array(a),c=0;for(let e=0;e<r.length;e++){let t=r[e];for(let r=0;r<t.count;r++)n[c]=t.type_symbol.value(r),o[c]=t.x.value(r),s[c]=t.y.value(r),l[c]=t.z.value(r),i[c]=r,u[c]=e,c++}let d=R.sg.ofConst("MOL",a,R.sg.Schema.str),p=R.sg.ofConst("A",a,R.sg.Schema.str),f=R.sg.ofConst(1,a,R.sg.Schema.int),m=R.sg.ofStringArray(n),h=R.iA.ofPartialColumns(ey.d.atom_site,{auth_asym_id:p,auth_atom_id:m,auth_comp_id:d,auth_seq_id:f,Cartn_x:R.sg.ofFloatArray(o),Cartn_y:R.sg.ofFloatArray(s),Cartn_z:R.sg.ofFloatArray(l),id:R.sg.ofIntArray(i),label_asym_id:p,label_atom_id:m,label_comp_id:d,label_seq_id:f,label_entity_id:R.sg.ofConst("1",a,R.sg.Schema.str),occupancy:R.sg.ofConst(1,a,R.sg.Schema.float),type_symbol:m,pdbx_PDB_model_num:R.sg.ofIntArray(u)},a),g=new eb.L;g.setNames([["MOL","Unknown Entity"]]),g.getEntityId("MOL",ef.MoleculeType.Unknown,"A");let b=new em.Q(f,m);b.setNames([["MOL","Unknown Molecule"]]),b.add("MOL",0);let y=(0,ey.p)({entity:g.getEntityTable(),chem_comp:b.getChemCompTable(),atom_site:h});return(0,ex.c)(y,A.create(e),t)})(a,e))).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rt=ej.E.BuiltIn({name:"trajectory-from-lammps-data",display:{name:"Parse Lammps Data",description:"Parse Lammps Data from string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{unitsStyle:W.e.Select("real",W.e.arrayToOptions(ts))}})({apply:({a:e,params:t})=>B.iQ.create("Parse Lammps Data",async r=>{var a,n,i;let o=await (a=e.data,B.iQ.create("Parse LammpsData",async e=>await tv(a,e))).runInContext(r);if(o.isError)throw Error(o.message);let s=await (n=o.result,void 0===(i=t.unitsStyle)&&(i="real"),B.iQ.create("Parse Lammps Data",e=>tb(n,e,i))).runInContext(r),l=t6(s);return new ej.G.Molecule.Trajectory(s,l)})}),rr=ej.E.BuiltIn({name:"trajectory-from-lammps-traj-data",display:{name:"Parse Lammps traj Data",description:"Parse Lammps Traj Data string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory,params:{unitsStyle:W.e.Select("real",W.e.arrayToOptions(ts))}})({apply:({a:e,params:t})=>B.iQ.create("Parse Lammps Data",async r=>{var a,n;let i=await tA(e.data).runInContext(r);if(i.isError)throw Error(i.message);let o=await (a=i.result,void 0===(n=t.unitsStyle)&&(n="real"),B.iQ.create("Parse Lammps Traj Data",e=>tE(a,e,n))).runInContext(r),s=t6(o);return new ej.G.Molecule.Trajectory(o,s)})}),ra=ej.E.BuiltIn({name:"trajectory-from-mol",display:{name:"Parse MOL",description:"Parse MOL string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL",async t=>{var r,a;let n=await (r=e.data,B.iQ.create("Parse Mol",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=F.Tokenizer.readLine(t).trim(),a=F.Tokenizer.readLine(t).trim(),n=F.Tokenizer.readLine(t).trim(),i=F.Tokenizer.readLine(t),o=+i.substr(0,3),s=+i.substr(3,3),l={title:r,program:a,comment:n,atoms:eX(t,o),bonds:eW(t,s),...eK(t)};return k.X.success(l)})(r))).runInContext(t);if(n.isError)throw Error(n.message);let i=await (a=n.result,B.iQ.create("Parse MOL",e=>eZ(a,void 0,e))).runInContext(t),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rn=ej.E.BuiltIn({name:"trajectory-from-sdf",display:{name:"Parse SDF",description:"Parse SDF string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse SDF",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse Sdf",async()=>(function(e){let t=(0,F.Tokenizer)(e),r=[];for(;t.position<t.length;
7319){let e=function(e){let t=F.Tokenizer.readLine(e).trim(),r=F.Tokenizer.readLine(e).trim(),a=F.Tokenizer.readLine(e).trim(),n=F.Tokenizer.readLine(e),i=n.trim().endsWith("V3000"),{atomCount:o,bondCount:s}=i?function(e){let t=F.c.create(e.data,1),r=F.c.create(e.data,1);return F.Tokenizer.eatLine(e),tM(e),tM(e),tM(e),tP(e,t),tP(e,r),F.Tokenizer.eatLine(e),{atomCount:(0,ew.Lq)(t)(R.sg.Schema.int).value(0),bondCount:(0,ew.Lq)(r)(R.sg.Schema.int).value(0)}}(e):{atomCount:+n.substr(0,3),bondCount:+n.substr(3,3)};if(Number.isNaN(o)||Number.isNaN(s)){for(;e.position<e.length&&!F.Tokenizer.readLine(e).startsWith(tk););return}let l={atomIdx:R.sg.ofConst(0,o,R.sg.Schema.int),charge:R.sg.ofConst(0,o,R.sg.Schema.int)},u=i?function(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t),i=F.c.create(e.data,2*t);for(let o=0;o<t;++o){F.Tokenizer.markLine(e),tM(e),tM(e),tM(e);let{position:t}=e;tP(e,i),tP(e,r),tP(e,a),tP(e,n),e.position=t}return F.Tokenizer.eatLine(e),F.Tokenizer.eatLine(e),{count:t,x:(0,ew.Lq)(r)(R.sg.Schema.float),y:(0,ew.Lq)(a)(R.sg.Schema.float),z:(0,ew.Lq)(n)(R.sg.Schema.float),type_symbol:(0,ew.Lq)(i)(R.sg.Schema.str),formal_charge:R.sg.ofConst(0,t,R.sg.Schema.int)}}(e,o):eX(e,o),c=i?function(e,t){let r=F.c.create(e.data,2*t),a=F.c.create(e.data,2*t),n=F.c.create(e.data,2*t);for(let i=0;i<t;++i){F.Tokenizer.markLine(e),tM(e),tM(e),tM(e);let{position:t}=e;tP(e,n),tP(e,r),tP(e,a),e.position=t}return F.Tokenizer.eatLine(e),F.Tokenizer.eatLine(e),{count:t,atomIdxA:(0,ew.Lq)(r)(R.sg.Schema.float),atomIdxB:(0,ew.Lq)(a)(R.sg.Schema.float),order:(0,ew.Lq)(n)(R.sg.Schema.float)}}(e,s):eW(e,s),d=i?{formalCharges:l}:eK(e),p=function(e){let t=F.c.create(e.data,32),r=F.c.create(e.data,32);for(;e.position<e.length;){let a=F.Tokenizer.readLine(e);if(a.startsWith(tk))break;if(a&&a.startsWith("> ")){F.c.add(t,e.tokenStart+2,e.tokenEnd),F.Tokenizer.markLine(e);let a=e.tokenStart,n=e.tokenEnd,i=!1;for(;e.position<e.length;){let t=F.Tokenizer.readLine(e);if(!t||t.startsWith(tk)||t.startsWith("> ")){F.c.add(r,a,n),i=!0;break}n=e.tokenEnd}i||F.c.add(r,a,n)}}return{dataHeader:(0,ew.Lq)(t)(R.sg.Schema.str),data:(0,ew.Lq)(r)(R.sg.Schema.str)}}(e);return{molFile:{title:t,program:r,comment:a,atoms:u,bonds:c,...d},dataItems:p}}(t);e&&r.push(e)}return k.X.success({compounds:r})})(r))).runInContext(t);if(a.isError)throw Error(a.message);let n=[];for(let e of a.result.compounds){let r=await (function(e){return B.iQ.create("Parse SDF",t=>eZ(e.molFile,E.create(e),t))})(e).runInContext(t);for(let e=0;e<r.frameCount;e++)n.push(await B.iQ.resolveInContext(r.getFrameAtIndex(e),t))}let i=new eF.ArrayTrajectory(n),o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),ri=ej.E.BuiltIn({name:"trajectory-from-mol2",display:{name:"Parse MOL2",description:"Parse MOL2 string and create trajectory."},from:[ej.G.Data.String],to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL2",async t=>{var r,a,n;let i=await (r=e.data,a=e.label,B.iQ.create("Parse MOL2",async e=>await tr(e,r,a))).runInContext(t);if(i.isError)throw Error(i.message);let o=await (n=i.result,B.iQ.create("Parse MOL2",e=>ta(n,e))).runInContext(t),s=t6(o);return new ej.G.Molecule.Trajectory(o,s)})}),ro=ej.E.BuiltIn({name:"trajectory-from-cube",display:{name:"Parse Cube",description:"Parse Cube file to create a trajectory."},from:ej.G.Format.Cube,to:ej.G.Molecule.Trajectory})({apply:({a:e})=>B.iQ.create("Parse MOL",async t=>{var r;let a=await (r=e.data,B.iQ.create("Parse Cube",e=>e1(r,e))).runInContext(t),n=t6(a);return new ej.G.Molecule.Trajectory(a,n)})}),rs=ej.E.BuiltIn({name:"trajectory-from-cif-core",display:{name:"Parse CIF Core",description:"Identify and create all separate models in the specified CIF data block"},from:ej.G.Format.Cif,to:ej.G.Molecule.Trajectory,params(e){if(!e)return{blockHeader:W.e.Optional(W.e.Text(void 0,{description:"Header of the block to parse. If none is specifed, the 1st data block in the file is used."}))};let{blocks:t}=e.data;return{blockHeader:W.e.Optional(W.e.Select(t[0]&&t[0].header,t.map(e=>[e.header,e.header]),{description:"Header of the block to parse"}))}}})({apply:({a:e,params:t})=>B.iQ.create("Parse CIF Core",async r=>{let a=t.blockHeader||e.data.blocks[0].header,n=e.data.blocks.find(e=>e.header===a);if(!n)throw Error(`Data block '${[a]}' not found.`);let i=await (function(e){let t=T.fromFrame(e);return B.iQ.create("Parse CIF Core",e=>e0(t.data.db,t,e))})(n).runInContext(r);if(0===i.frameCount)throw Error("No models found.");let o=t6(i);return new ej.G.Molecule.Trajectory(i,o)})}),rl=e=>e+1,ru=e=>e-1,rc=ej.E.BuiltIn({name:"model-from-trajectory",display:{name:"Molecular Model",description:"Create a molecular model from specified index in a trajectory."},from:ej.G.Molecule.Trajectory,to:ej.G.Molecule.Model,params:e=>e?{modelIndex:W.e.Converted(rl,ru,W.e.Numeric(1,{min:1,max:e.data.frameCount,step:1},{description:"Model Index",immediateUpdate:!0}))}:{modelIndex:W.e.Numeric(0,{},{description:"Zero-based index of the model",immediateUpdate:!0})}})({isApplicable:e=>e.data.frameCount>0,apply:({a:e,params:t})=>B.iQ.create("Model from Trajectory",async r=>{let a=Math.round(t.modelIndex)%e.data.frameCount;a<0&&(a+=e.data.frameCount);let n=await B.iQ.resolveInContext(e.data.getFrameAtIndex(a),r),i=`Model ${a+1}`,o=1===e.data.frameCount?void 0:`of ${e.data.frameCount}`;return new ej.G.Molecule.Model(n,{label:i,description:o})}),interpolate:(e,t,r)=>({modelIndex:r>=1?t.modelIndex:e.modelIndex+Math.floor((t.modelIndex-e.modelIndex+1)*r)}),dispose({b:e}){null==e||e.data.customProperties.dispose()}}),rd=ej.E.BuiltIn({name:"structure-from-trajectory",display:{name:"Structure from Trajectory",description:"Create a molecular structure from a trajectory."},from:ej.G.Molecule.Trajectory,to:ej.G.Molecule.Structure})({apply:({a:e})=>B.iQ.create("Build Structure",async t=>{let r=await eF.Structure.ofTrajectory(e.data,t),a={label:"Ensemble",description:eF.Structure.elementDescription(r)};return new ej.G.Molecule.Structure(r,a)}),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rp=ej.E.BuiltIn({name:"structure-from-model",display:{name:"Structure",description:"Create a molecular structure (model, assembly, or symmetry) from the specified model."},from:ej.G.Molecule.Model,to:ej.G.Molecule.Structure,params:e=>eU.$.getParams(e&&e.data)})({canAutoUpdate:({oldParams:e,newParams:t})=>eU.$.canAutoUpdate(e.type,t.type),apply:({a:e,params:t},r)=>B.iQ.create("Build Structure",async a=>eU.$.create(r,a,e.data,t&&t.type)),update:({a:e,b:t,oldParams:r,newParams:a})=>(0,eG.vZ)(r,a)?t.data.model===e.data?eN.td.UpdateResult.Unchanged:eF.Model.areHierarchiesEqual(e.data,t.data.model)?(t.data=t.data.remapModel(e.data),eN.td.UpdateResult.Updated):eN.td.UpdateResult.Recreate:eN.td.UpdateResult.Recreate,dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rf=ej.E.BuiltIn({name:"transform-structure-conformation",display:{name:"Transform Conformation"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{transform:tK.KD}})({canAutoUpdate:({newParams:e})=>"matrix"!==e.transform.name,apply({a:e,params:t}){let r=(0,tK.sj)(t.transform)?e.data.boundary.sphere.center:G.AO.unit,a=(0,tK.Gl)(t.transform,r),n=eF.Structure.transform(e.data,a);return new ej.G.Molecule.Structure(n,{label:e.label,description:`${e.description} [Transformed]`})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rm=ej.E.BuiltIn({name:"structure-instances",display:{name:"Structure Instances"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{transforms:W.e.ObjectList({transform:tK.KD},()=>"Transform")}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=t.transforms.some(e=>(0,tK.sj)(e.transform))?e.data.boundary.sphere.center:G.AO.unit,a=t.transforms.map(e=>(0,tK.Gl)(e.transform,r));if(!a.length)return e;let n=eF.Structure.instances(e.data,a);return new ej.G.Molecule.Structure(n,{label:e.label,description:`${e.description} [Instanced]`})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rh=ej.E.BuiltIn({name:"model-with-coordinates",display:{name:"Model With Coordinates",description:"Updates the current model with provided coordinate frame"},from:ej.G.Molecule.Model,to:ej.G.Molecule.Model,params:{frameIndex:W.e.Optional(W.e.Numeric(0,void 0,{isHidden:!0})),frameCount:W.e.Optional(W.e.Numeric(1,void 0,{isHidden:!0})),atomicCoordinateFrame:W.e.Optional(W.e.Value(void 0,{isHidden:!0}))},isDecorator:!0})({apply({a:e,params:t}){var r,a;if(!t.atomicCoordinateFrame)return e;let n={...e.data,atomicConformation:eF.Model.getAtomicConformationFromFrame
7319(e.data,t.atomicCoordinateFrame)};return eF.Model.TrajectoryInfo.set(n,{index:null!==(r=t.frameIndex)&&void 0!==r?r:0,size:null!==(a=t.frameCount)&&void 0!==a?a:1}),new ej.G.Molecule.Model(n,{label:e.label,description:e.description})},update:({a:e,b:t,oldParams:r,newParams:a})=>{var n,i;return r.atomicCoordinateFrame===a.atomicCoordinateFrame?eN.td.UpdateResult.Unchanged:(a.atomicCoordinateFrame?t.data={...t.data,atomicConformation:eF.Model.getAtomicConformationFromFrame(t.data,a.atomicCoordinateFrame)}:t.data=e.data,eF.Model.TrajectoryInfo.set(t.data,{index:null!==(n=a.frameIndex)&&void 0!==n?n:0,size:null!==(i=a.frameCount)&&void 0!==i?i:1}),eN.td.UpdateResult.Updated)}}),rg=ej.E.BuiltIn({name:"structure-selection-from-expression",display:{name:"Selection",description:"Create a molecular structure from the specified expression."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({expression:W.e.Value(eL.MolScriptBuilder.struct.generator.all,{isHidden:!0}),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){let{selection:a,entry:n}=x.createAndRun(e.data,t.expression);if(r.entry=n,eF.StructureSelection.isEmpty(a))return eN.lZ.Null;let i=eF.StructureSelection.unionStructure(a),o={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(i)};return new ej.G.Molecule.Structure(i,o)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(r.expression!==a.expression)return eN.td.UpdateResult.Recreate;let i=n.entry;if(i.currentStructure===e.data)return eN.td.UpdateResult.Unchanged;let o=x.updateStructure(i,e.data);return eF.StructureSelection.isEmpty(o)?eN.td.UpdateResult.Null:(x.updateStructureObject(t,o,a.label),eN.td.UpdateResult.Updated)},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rv=ej.E.BuiltIn({name:"structure-multi-selection-from-expression",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:ej.G.Root,to:ej.G.Molecule.Structure.Selections,params:()=>({selections:W.e.ObjectList({key:W.e.Text(void 0,{description:"A unique key."}),ref:W.e.Text(),groupId:W.e.Optional(W.e.Text()),expression:W.e.Value(eL.MolScriptBuilder.struct.generator.empty)},e=>e.ref,{isHidden:!0}),isTransitive:W.e.Optional(W.e.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let a=new Map,n=[],i=0;for(let t of e.selections){let{selection:e,entry:o}=x.createAndRun(r[t.ref].data,t.expression);a.set(t.key,o);let s=eF.StructureSelection.toLociWithSourceUnits(e);n.push({key:t.key,structureRef:t.ref,loci:s,groupId:t.groupId}),i+=eF.StructureElement.Loci.size(s)}t.entries=a;let o={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new ej.G.Molecule.Structure.Selections(n,o)},update:({b:e,oldParams:t,newParams:r,cache:a,dependencies:n})=>{if(!!t.isTransitive!=!!r.isTransitive)return eN.td.UpdateResult.Recreate;let i=a.entries,o=new Map,s=new Map;for(let t of e.data)s.set(t.key,t);let l=!1,u=0,c=[];for(let e of r.selections){let t=n[e.ref].data,a=!1;if(i.has(e.key)){let n=i.get(e.key);if(x.isUnchanged(n,e.expression,t)&&s.has(e.key)){let t=s.get(e.key);t.groupId!==e.groupId&&(t.groupId=e.groupId,l=!0),o.set(e.key,n),c.push(t),u+=eF.StructureElement.Loci.size(t.loci);continue}if(n.expression!==e.expression)a=!0;else{let a=!1;if(r.isTransitive){if(eF.Structure.areUnitIdsAndIndicesEqual(n.originalStructure,t)){let r=x.run(n,n.originalStructure);n.currentStructure=t,o.set(e.key,n);let a=eF.StructureElement.Loci.remap(eF.StructureSelection.toLociWithSourceUnits(r),t);c.push({key:e.key,structureRef:e.ref,loci:a,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(a),l=!0}else a=!0}else a=!0;if(a){l=!0;let r=x.updateStructure(n,t);o.set(e.key,n);let a=eF.StructureSelection.toLociWithSourceUnits(r);c.push({key:e.key,structureRef:e.ref,loci:a,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(a)}}}else a=!0;if(a){l=!0;let{selection:r,entry:a}=x.createAndRun(t,e.expression);o.set(e.key,a);let n=eF.StructureSelection.toLociWithSourceUnits(r);c.push({key:e.key,structureRef:e.ref,loci:n,groupId:e.groupId}),u+=eF.StructureElement.Loci.size(n)}}
7319return l?(a.entries=o,e.data=c,e.label=`${r.label||"Multi-selection"}`,e.description=`${c.length} source(s), ${u} element(s) total`,eN.td.UpdateResult.Updated):eN.td.UpdateResult.Unchanged}}),rb=ej.E.BuiltIn({name:"structure-multi-selection-from-bundle",display:{name:"Multi-structure Measurement Selection",description:"Create selection object from multiple structures."},from:ej.G.Root,to:ej.G.Molecule.Structure.Selections,params:()=>({selections:W.e.ObjectList({key:W.e.Text(void 0,{description:"A unique key."}),ref:W.e.Text(),groupId:W.e.Optional(W.e.Text()),bundle:W.e.Value(eF.StructureElement.Bundle.Empty)},e=>e.ref,{isHidden:!0}),isTransitive:W.e.Optional(W.e.Boolean(!1,{isHidden:!0,description:"Remap the selections from the original structure if structurally equivalent."})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({params:e,cache:t,dependencies:r}){let a=new Map,n=[],i=0;for(let t of e.selections){let e=r[t.ref].data,o=eF.StructureElement.Bundle.toLoci(t.bundle,e);n.push({key:t.key,structureRef:t.ref,loci:o,groupId:t.groupId}),i+=eF.StructureElement.Loci.size(o),a.set(t.key,{source:e})}t.entries=a;let o={label:`${e.label||"Multi-selection"}`,description:`${e.selections.length} source(s), ${i} element(s) total`};return new ej.G.Molecule.Structure.Selections(n,o)},update:({b:e,oldParams:t,newParams:r,cache:a,dependencies:n})=>{if(!!t.isTransitive!=!!r.isTransitive)return eN.td.UpdateResult.Recreate;let i=a.entries,o=new Map,s=new Map;for(let e of t.selections)s.set(e.key,e.bundle);let l=new Map;for(let t of e.data)l.set(t.key,t);let u=!1,c=0,d=[];for(let e of r.selections){let t=!1;if(i.has(e.key)){let r=n[e.ref].data,a=i.get(e.key),p=s.get(e.key);if(p&&r===a.source&&e.bundle.hash===a.source.hashCode&&eF.StructureElement.Bundle.areEqual(e.bundle,p)){let t=l.get(e.key);t.groupId!==e.groupId&&(t.groupId=e.groupId,u=!0),o.set(e.key,a),d.push(t),c+=eF.StructureElement.Loci.size(t.loci);continue}t=!0}else t=!0;if(t){u=!0;let t=n[e.ref].data,r=eF.StructureElement.Bundle.toLoci(e.bundle,t);d.push({key:e.key,structureRef:e.ref,loci:r,groupId:e.groupId}),c+=eF.StructureElement.Loci.size(r),o.set(e.key,{source:t})}}return u?(a.entries=o,e.data=d,e.label=`${r.label||"Multi-selection"}`,e.description=`${d.length} source(s), ${c} element(s) total`,eN.td.UpdateResult.Updated):eN.td.UpdateResult.Unchanged}}),ry=ej.E.BuiltIn({name:"structure-selection-from-script",display:{name:"Selection",description:"Create a molecular structure from the specified script."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({script:W.e.Script({language:"mol-script",expression:"(sel.atom.atom-groups :residue-test (= atom.resname ALA))"}),label:W.e.Optional(W.e.Text(""))})})({apply({a:e,params:t,cache:r}){let{selection:a,entry:n}=x.createAndRun(e.data,t.script);r.entry=n;let i=eF.StructureSelection.unionStructure(a),o={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(i)};return new ej.G.Molecule.Structure(i,o)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(!ez.Script.areEqual(r.script,a.script))return eN.td.UpdateResult.Recreate;let i=n.entry;if(i.currentStructure===e.data)return eN.td.UpdateResult.Unchanged;let o=x.updateStructure(i,e.data);return x.updateStructureObject(t,o,a.label),eN.td.UpdateResult.Updated},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rx=ej.E.BuiltIn({name:"structure-selection-from-bundle",display:{name:"Selection",description:"Create a molecular structure from the specified structure-element bundle."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({bundle:W.e.Value(eF.StructureElement.Bundle.Empty,{isHidden:!0}),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply({a:e,params:t,cache:r}){if(t.bundle.hash!==e.data.hashCode)return eN.lZ.Null;r.source=e.data;let a=eF.StructureElement.Bundle.toStructure(t.bundle,e.data);if(0===a.elementCount)return eN.lZ.Null;let n={label:`${t.label||"Selection"}`,description:eF.Structure.elementDescription(a)};return new ej.G.Molecule.Structure(a,n)},update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>{if(!eF.StructureElement.Bundle.areEqual(r.bundle,a.bundle))return eN.td.UpdateResult.Recreate;if(a.bundle.hash!==e.data.hashCode)return eN.td.UpdateResult.Null;if(n.source===e.data)return eN.td.UpdateResult.Unchanged;n.source=e.data;let i=eF.StructureElement.Bundle.toStructure(a.bundle,e.data);return 0===i.elementCount?eN.td.UpdateResult.Null:(t.label=`${a.label||"Selection"}`,t.description=eF.Structure.elementDescription(i),t.data=i,eN.td.UpdateResult.Updated)},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}
7319),rS={polymer:"polymer",protein:"protein",nucleic:"nucleic",water:"water",branched:"branched",ligand:"ligand","non-standard":"non-standard",coarse:"coarse","atomic-sequence":"atomic-sequence","atomic-het":"atomic-het",spheres:"spheres"},rT=W.e.objectToOptions(rS),rC=ej.E.BuiltIn({name:"structure-complex-element",display:{name:"Complex Element",description:"Create a molecular structure from the specified model."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:{type:W.e.Select("atomic-sequence",rT,{isHidden:!0})}})({apply({a:e,params:t}){let r,a;switch(t.type){case"polymer":r=eH.fS.polymer.query,a="Polymer";break;case"protein":r=eH.fS.protein.query,a="Protein";break;case"nucleic":r=eH.fS.nucleic.query,a="Nucleic";break;case"water":r=eF.Queries.internal.water(),a="Water";break;case"branched":r=eH.fS.branchedPlusConnected.query,a="Branched";break;case"ligand":r=eH.fS.ligandPlusConnected.query,a="Ligand";break;case"non-standard":r=eH.fS.nonStandardPolymer.query,a="Non-standard";break;case"coarse":r=eH.fS.coarse.query,a="Coarse";break;case"atomic-sequence":r=eF.Queries.internal.atomicSequence(),a="Sequence";break;case"atomic-het":r=eF.Queries.internal.atomicHet(),a="HET Groups/Ligands";break;case"spheres":r=eF.Queries.internal.spheres(),a="Coarse Spheres";break;default:(0,eq.UT)(t.type)}let n=r(new eF.QueryContext(e.data)),i=eF.StructureSelection.unionStructure(n);return 0===i.elementCount?eN.lZ.Null:new ej.G.Molecule.Structure(i,{label:a,description:eF.Structure.elementDescription(i)})},dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rO=ej.E.BuiltIn({name:"structure-component",display:{name:"Component",description:"A molecular structure component."},from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:()=>({type:W.e.MappedStatic("static",{static:W.e.Text("polymer"),expression:W.e.Value(eL.MolScriptBuilder.struct.generator.all),bundle:W.e.Value(eF.StructureElement.Bundle.Empty),script:W.e.Script({language:"mol-script",expression:"(sel.atom.all)"})},{isHidden:!0}),nullIfEmpty:W.e.Optional(W.e.Boolean(!0,{isHidden:!0})),label:W.e.Text("",{isHidden:!0})})})({apply:({a:e,params:t,cache:r})=>(function(e,t,r){let a;r.source=e;let n=eF.Structure.Empty;switch(t.type.name){case"static":{let r;switch(t.type.params){case"all":r=eH.fS.all.query,a="All";break;case"polymer":r=eH.fS.polymer.query,a="Polymer";break;case"protein":r=eH.fS.protein.query,a="Protein";break;case"nucleic":r=eH.fS.nucleic.query,a="Nucleic";break;case"water":r=eF.Queries.internal.water(),a="Water";break;case"ion":r=eH.fS.ion.query,a="Ion";break;case"lipid":r=eH.fS.lipid.query,a="Lipid";break;case"branched":r=eH.fS.branchedPlusConnected.query,a="Branched";break;case"ligand":r=eH.fS.ligandPlusConnected.query,a="Ligand";break;case"non-standard":r=eH.fS.nonStandardPolymer.query,a="Non-standard";break;case"coarse":r=eH.fS.coarse.query,a="Coarse";break;default:(0,eq.UT)(t.type)}let i=r(new eF.QueryContext(e));n=eF.StructureSelection.unionStructure(i);break}case"script":case"expression":{let{selection:a,entry:i}=x.createAndRun(e,t.type.params);r.entry=i,n=eF.StructureSelection.unionStructure(a);break}case"bundle":if(t.type.params.hash!==e.hashCode)break;n=eF.StructureElement.Bundle.toStructure(t.type.params,e)}if(t.nullIfEmpty&&0===n.elementCount)return eN.lZ.Null;let i={label:`${t.label||a||"Component"}`,description:eF.Structure.elementDescription(n)};return new ej.G.Molecule.Structure(n,i)})(e.data,t,r),update:({a:e,b:t,oldParams:r,newParams:a,cache:n})=>(function(e,t,r,a,n){if(r.type.name!==a.type.name)return eN.td.UpdateResult.Recreate;let i=!1;switch(a.type.name){case"static":if(r.type.params!==a.type.params||!eF.Structure.areEquivalent(e,n.source))return eN.td.UpdateResult.Recreate;if(t.data.model===e.model)return eN.td.UpdateResult.Unchanged;if(!eF.Model.areHierarchiesEqual(e.model,t.data.model))return eN.td.UpdateResult.Recreate;return t.data=t.data.remapModel(e.model),eN.td.UpdateResult.Updated;case"script":if(!ez.Script.areEqual(r.type.params,a.type.params))return eN.td.UpdateResult.Recreate;case"expression":{if(r.type.params!==a.type.params)return eN.td.UpdateResult.Recreate;if(e===n.source)break;let o=n.entry,s=x.updateStructure(o,e);
7319n.source=e,t.data=eF.StructureSelection.unionStructure(s),x.updateStructureObject(t,s,a.label),i=!0;break}case"bundle":if(e===n.source&&eF.StructureElement.Bundle.areEqual(r.type.params,a.type.params))break;n.source=e,a.type.params.hash!==e.hashCode?(i=0!==t.data.elementCount,t.data=0===t.data.elementCount?t.data:eF.Structure.Empty):(i=!0,t.data=eF.StructureElement.Bundle.toStructure(a.type.params,e))}if(i){if(a.nullIfEmpty&&0===t.data.elementCount)return eN.td.UpdateResult.Null;t.description=eF.Structure.elementDescription(t.data)}return r.label!==a.label&&(i=!0,t.label=`${a.label||t.label}`),i?eN.td.UpdateResult.Updated:eN.td.UpdateResult.Unchanged})(e.data,t,r,a,n),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}}),rI=ej.E.BuiltIn({name:"custom-model-properties",display:{name:"Custom Model Properties"},isDecorator:!0,from:ej.G.Molecule.Model,to:ej.G.Molecule.Model,params:(e,t)=>t.customModelProperties.getParams(null==e?void 0:e.data)})({apply:({a:e,params:t},r)=>B.iQ.create("Custom Props",async a=>(await rA(e.data,r,a,t),new ej.G.Molecule.Model(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>B.iQ.create("Custom Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customModelProperties.get(a);t&&e.data.customProperties.reference(t.descriptor,!1)}return await rA(e.data,n,i,a),eN.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customProperties.dispose()}});async function rA(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customModelProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching model prop '${r}': ${e}`)}else a.set(e,s)}}let rw=ej.E.BuiltIn({name:"custom-structure-properties",display:{name:"Custom Structure Properties"},isDecorator:!0,from:ej.G.Molecule.Structure,to:ej.G.Molecule.Structure,params:(e,t)=>t.customStructureProperties.getParams(null==e?void 0:e.data.root)})({apply:({a:e,params:t},r)=>B.iQ.create("Custom Props",async a=>(await rD(e.data.root,r,a,t),new ej.G.Molecule.Structure(e.data,{label:e.label,description:e.description}))),update:({a:e,b:t,oldParams:r,newParams:a},n)=>e.data!==t.data?eN.td.UpdateResult.Recreate:B.iQ.create("Custom Props",async i=>{for(let a of(t.data=e.data,t.label=e.label,t.description=e.description,r.autoAttach)){let t=n.customStructureProperties.get(a);t&&e.data.customPropertyDescriptors.reference(t.descriptor,!1)}return await rD(e.data.root,n,i,a),eN.td.UpdateResult.Updated}),dispose({b:e}){null==e||e.data.customPropertyDescriptors.dispose()}});async function rD(e,t,r,a){let n={runtime:r,assetManager:t.managers.asset,errorContext:t.errorContext},{autoAttach:i,properties:o}=a;for(let r of Object.keys(o)){let a=t.customStructureProperties.get(r),s=o[r];if(i.includes(r)||a.isHidden)try{await a.attach(n,e,s,!0)}catch(e){t.log.warn(`Error attaching structure prop '${r}': ${e}`)}else a.set(e,s)}}let rE=ej.E.BuiltIn({name:"shape-from-ply",display:{name:"Shape from PLY",description:"Create Shape from PLY data"},from:ej.G.Format.Ply,to:ej.G.Shape.Provider,params:e=>({transforms:W.e.Optional(W.e.Value([],{isHidden:!0})),label:W.e.Optional(W.e.Text("",{isHidden:!0}))})})({apply:({a:e,params:t})=>B.iQ.create("Create shape from PLY",async r=>{var a;let n=await (a=e.data,B.iQ.create("Shape Provider",async e=>{let r,n,i,o,s,l;return{label:"Mesh",data:{source:a,transforms:null==t?void 0:t.transforms},params:$(a),getShape:async(e,t,a,u)=>{let c=t.source.getElement("vertex");if(!c)throw Error("missing vertex element");let d=t.source.getElement("face");if(!d)throw Error("missing face element");let p=t.source.getElement("material"),f=!1,m=!1;return r&&r===t||(f=!0),n&&W.e.isParamEqual(J.grouping,n.grouping,a.grouping)||(f=!0),n&&W.e.isParamEqual(J.coloring,n.coloring,a.coloring)||(m=!0),f?(s=er(c,p,a),l=function(e,t){let{grouping:r}=t,{rowCount:a}=e,n="vertex"===r.name?e.getProperty(r.params.group):void 0,i="vertex"===r.
7319name?(0,Z.ce)(r.params.group):"Vertex",o=n?n.toArray({array:Uint32Array}):(0,X.d_)(new Uint32Array(a)),s=new Uint32Array((n?(0,X.uH)(o):a-1)+1);for(let e=0,t=o.length;e<t;++e)s[o[e]]=e;return{ids:o,map:s,label:i}}(c,a),i=ea(t,o=await ee(e,c,d,l.ids,u&&u.geometry),s,l)):m&&(s=er(c,p,a),i=ea(t,o,s,l)),r=t,n=(0,Q.I8)(a),i},geometryUtils:j.K.Utils}})).runInContext(r),i={label:t.label||"Shape"};return new ej.G.Shape.Provider(n,i)})})},10515:function(e,t,r){r.r(t),r.d(t,{ClippingStructureRepresentation3DFromBundle:function(){return t9},ClippingStructureRepresentation3DFromScript:function(){return t7},EmissiveStructureRepresentation3DFromBundle:function(){return t5},EmissiveStructureRepresentation3DFromScript:function(){return t4},ExplodeStructureRepresentation3D:function(){return t$},ModelUnitcell3D:function(){return ra},OverpaintStructureRepresentation3DFromBundle:function(){return t1},OverpaintStructureRepresentation3DFromScript:function(){return t0},ShapeRepresentation3D:function(){return rr},SpinStructureRepresentation3D:function(){return tJ},StructureBoundingBox3D:function(){return rn},StructureRepresentation3D:function(){return tZ},StructureSelectionsAngle3D:function(){return ro},StructureSelectionsDihedral3D:function(){return rs},StructureSelectionsDistance3D:function(){return ri},StructureSelectionsLabel3D:function(){return rl},StructureSelectionsOrientation3D:function(){return ru},StructureSelectionsPlane3D:function(){return rc},SubstanceStructureRepresentation3DFromBundle:function(){return t8},SubstanceStructureRepresentation3DFromScript:function(){return t6},ThemeStrengthRepresentation3D:function(){return re},TransparencyStructureRepresentation3DFromBundle:function(){return t3},TransparencyStructureRepresentation3DFromScript:function(){return t2},UnwindStructureAssemblyRepresentation3D:function(){return tY},VolumeRepresentation3D:function(){return rt},VolumeRepresentation3DHelpers:function(){return n}});var a,n,i=r(30502),o=r(1573),s=r(67801),l=r(54854),u=r(60843),c=r(14086),d=r(72762),p=r(7922),f=r(11803),m=r(7791),h=r(93898),g=r(89987),b=r(67241),y=r(11650),x=r
7319(85688),S=r(99289),T=r(85764),C=r(69587),O=r(17411),I=r(67589),A=r(34526),w=r(80898),D=r(30131),E=r(48502);function M(e,t,r={}){let a,n,i,o,s=0,d=new g.x,p=m.hX.createState(),M=(0,b.xH)(),P=[],k=-1,B=u.Q.createEmpty(),_=t.Params,R=c.e.getDefaultValues(_);r.modifyState&&m.hX.updateState(p,r.modifyState(p));let F=y.wV.create();function L(e,t){return(0,I.h)(e)||h.b.isLoci(e)&&e.shape===n?t(R.instanceGranularity?A.Xp.ofBounds(0,n.transforms.length):A.Xp.ofBounds(0,n.groupCount*n.transforms.length)):R.instanceGranularity?function(e,t,r){let a=!1;if(!h.F.isLoci(e)||h.F.isLociEmpty(e)||e.shape!==t)return!1;for(let t of e.groups)r(A.Xp.ofSingleton(t.instance))&&(a=!0);return a}(e,n,t):function(e,t,r){if(!h.F.isLoci(e)||e.shape!==t)return!1;let a=!1,{groupCount:n}=t,{groups:i}=e;for(let{ids:e,instance:t}of i)if(A.Xp.is(e)){let i=t*n+A.Xp.start(e),o=t*n+A.Xp.end(e);r(A.Xp.ofBounds(i,o))&&(a=!0)}else for(let i=0,o=e.length;i<o;i++){let o=t*n+e[i];r(A.Xp.ofSingleton(o))&&(a=!0)}return a}(e,n,t)}return{label:"Shape geometry",get groupCount(){return i?i.count:0},get props(){return R},get params(){return _},get state(){return p},get theme(){return B},renderObjects:P,get geometryVersion(){return k},updated:d,createOrUpdate:function(u={},c){return r.modifyProps&&(u=r.modifyProps(u)),l.iQ.create("ShapeRepresentation.create",async l=>{let g=Object.assign(R,u),S=c?await e(l,c,g,n):void 0;if(function(e={},t){y.wV.reset(F),(t||n)&&(t&&!n?F.createNew=!0:t&&n&&t.id===n.id||(t&&n&&t.id!==n.id?(F.updateTransform=!0,F.createGeometry=!0):t&&console.warn("unexpected state")),e.instanceGranularity!==R.instanceGranularity&&(F.updateTransform=!0),F.updateTransform&&(F.updateColor=!0,F.updateSize=!0,F.updateMatrix=!0),F.createGeometry&&(F.updateColor=!0,F.updateSize=!0))}(u,S),S&&(n=S,Object.assign(B,h.b.getTheme(n))),F.createNew){P.length=0,i=h.b.groupIterator(n);let e=h.b.createTransform(n.transforms,n.geometry.boundingSphere,g.cellSize,g.batchSize),s=t.createValues(n.geometry,e,i,B,g),l=t.createRenderableState(g);r.modifyState&&Object.assign(l,r.modifyState(l)),m.hX.updateState(p,l),(a=(0,b.Hq)(n.geometry.kind,s,l,M))&&P.push(a),o=t.createPositionIterator(n.geometry,a.values)}else{if(!a)throw Error("expected renderObject to be available");if(F.updateTransform){let{instanceCount:e,groupCount:t}=i=h.b.groupIterator(n);u.instanceGranularity?(0,x.eL)(e,"instance",a.values):(0,x.eL)(e*t,"groupInstance",a.values)}F.updateMatrix&&(h.b.createTransform(n.transforms,n.geometry.boundingSphere,g.cellSize,g.batchSize,a.values),"lodLevels"in a.values&&T.IO.update(a.values.lodLevels,a.values.lodLevels.ref.value)),F.createGeometry&&(T.IO.updateIfChanged(a.values.drawCount,f.Z.getDrawCount(n.geometry)),T.IO.updateIfChanged(a.values.uVertexCount,f.Z.getVertexCount(n.geometry)),T.IO.updateIfChanged(a.values.uGroupCount,i.groupCount)),F.updateColor&&(0,C.is)(i,o,B.color,a.values),F.updateSize&&"uSize"in a.values&&(0,O.H4)(i,o,B.size,a.values),t.updateValues(a.values,g),t.updateRenderableState(a.state,g),(F.updateTransform||F.createGeometry)&&(t.updateBoundingSphere(a.values,n.geometry),o=t.createPositionIterator(n.geometry,a.values))}R=g,(F.createGeometry||F.createNew)&&(k+=1),d.next(s++)})},getLoci(e){let{objectId:t,groupId:r,instanceId:i}=e;return a&&a.id===t?r===w.i.Null?h.b.Loci(n):h.F.Loci(n,[{ids:A.hU.ofSingleton(r),instance:i}]):I.Rh},getAllLoci:()=>[h.b.Loci(n)],eachLocation:e=>{for(i.reset();i.hasNext;){let{location:t,isSecondary:r}=i.move();e(t,r)}},mark(e,t){if(!S.E5.is(p.markerActions,t))return!1;if(h.F.isLoci(e)||h.b.isLoci(e)){if(e.shape!==n)return!1}else if(!(0,I.h)(e))return!1;return D.u.mark(a,e,t,L)},setState(e){r.modifyState&&(e=r.modifyState(e)),a&&(void 0!==e.visible&&D.u.setVisibility(a,e.visible),void 0!==e.alphaFactor&&D.u.setAlphaFactor(a,e.alphaFactor),void 0!==e.pickable&&D.u.setPickable(a,e.pickable),void 0!==e.colorOnly&&D.u.setColorOnly(a,e.colorOnly),void 0!==e.overpaint&&D.u.setOverpaint(a,e.overpaint,L,!0),void 0!==e.transparency&&D.u.setTransparency(a,e.transparency,L,!0),void 0!==e.substance&&D.u.setSubstance(a,e.substance,L,!0),void 0!==e.transform&&D.u.setTransform(a,e.transform)),m.hX.updateState(p,e)},setTheme(e){E.Au&&console.warn("The `ShapeRepresentation` theme is fixed to `ShapeGroupColorTheme` and `ShapeGroupSizeTheme`. Colors are taken from `Shape.getColor` and sizes from `Shape.getSize`")},destroy(){P.length=0,a&&(a.state.disposed=!0,a=void 0)}}}var P=r(87144),k=r(41306);let B=(0,P.yb)();class _{constructor(e){this.structure=e,this.groupUnitTransforms=[],this.unitOffsetMap=A.Ol.Mutable(),this.groupIndexMap=new Map,this._isIdentity=void 0,this.version=0,this.unitTransforms=new Float32Array(16*e.units.length),this.size=e.units.length,this.reset();let t=0;for(let r=0,a=e.unitSymmetryGroups.length;r<a;++r){let a=e.unitSymmetryGroups[r];this.groupIndexMap.set(a,r);let n=this.unitTransforms.subarray(t,t+16*a.units.length);this.groupUnitTransforms.push(n);for(let e=0,r=a.units.length;e<r;++e)this.unitOffsetMap.set(a.units[e].id,t+16*e);t+=16*a.units.length}}reset(){this.version=0,(0,k.Sj)(this.unitTransforms,this.size),this._isIdentity=!0}get isIdentity(){if(void 0===this._isIdentity){this._isIdentity=!0;for(let e=0,t=16*this.size;e<t;e+=16)if(P.yb.fromArray(B,this.unitTransforms,e),!P.yb.isIdentity(B)){this._isIdentity=!1;break}}return this._isIdentity}setTransform(e,t){this.version=(this.version+1)%2147483647,P.yb.toArray(e,this.unitTransforms,this.unitOffsetMap.get(t.id)),this._isIdentity=void 0}getTransform(e,t){return P.yb.fromArray(e,this.unitTransforms,this.unitOffsetMap.get(t.id))}getSymmetryGroupTransforms(e){return this.groupUnitTransforms[this.groupIndexMap.get(e)]}}var R=r(48930);let F=(0,P.yb)();function L(e,t,r){for(let a=0,n=e.units.length;a<n;a++){let n=e.units[a];R.mj.lerpFromIdentity(F,n.conformation.operator,r),t.setTransform(F,n)}}let z=(0,P.AO)(),N=(0,P.AO)(),G=(0,P.yb)();function U(e,t,r,a){let n=a.radius*r;for(let r=0,i=e.units.length;r<i;r++){let i=e.units[r];P.AO.transformMat4(z,i.lookup3d.boundary.sphere.center,i.conformation.operator.matrix),P.AO.sub(N,z,a.center),P.AO.setMagnitude(N,N,n),P.yb.fromTranslation(G,N),t.setTransform(G,i)}}let V={axis:c.e.MappedStatic("custom",{structure:c.e.Group({principalAxis:c.e.Select("dirA",[["dirA","A"],["dirB","B"],["dirC","C"]])}),custom:c.e.Group({vector:c.e.Vec3(P.AO.create(0,0,1))})}),origin:c.e.MappedStatic("structure",{structure:c.e.Group({}),custom:c.e.Group({vector:c.e.Vec3(P.AO.create(0,0,0))})})};function j(e,t){return{axis:"custom"===t.axis.name?t.axis.params.vector:i.Structure.getPrincipalAxes(e).momentsAxes[t.axis.params.principalAxis],origin:"custom"===t.origin.name?t.origin.params.vector:i.Structure.getPrincipalAxes(e).momentsAxes.origin}}let H=(0,P.yb)(),q=(0,P.yb)(),X=(0,P.yb)();function W(e,t,r,a,n){for(let i=0,o=e.units.length;i<o;i++){let o=e.units[i];P.AO.negate(N,n),P.yb.fromTranslation(G,N),P.yb.fromRotation(H,Math.PI*r*2,a),P.yb.fromTranslation(q,n),P.yb.mul(X,H,G),P.yb.mul(X,q,X),t.setTransform(X,o)}}var K=r(70371),Q=r(30481),Z=r(65109),Y=r(54185),$=r(20694),J=r(4376),ee=r(89623),et=r(70759),er=r(16207);let ea=P.yb.fromTranslation((0,P.yb)(),P.AO.create(.5,.5,.5)),en=(0,er.gW)((0,er.iC)((0,et.pE)()),ea),ei=(0,P.AO)(),eo=(0,P.yb)(),es={...J.K.Params,cellColor:c.e.Color(p.t.orange),cellScale:c.e.Numeric(2,{min:.1,max:5,step:.1}),ref:c.e.Select("model",c.e.objectToOptions({origin:"Origin",model:"Model"}),{isEssential:!0}),attachment:c.e.Select("corner",c.e.objectToOptions({corner:"Corner",center:"Center"}),{isEssential:!0})},el={mesh:(e,t)=>M(ec,J.K.Utils)},eu={...es};function ec(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),{fromFractional:n}=e.symmetry.spacegroup.cell;P.AO.copy(ei,e.ref),"center"===t.attachment?(P.AO.trunc(ei,ei),P.AO.subScalar(ei,ei,.5)):P.AO.floor(ei,ei),P.yb.fromTranslation(eo,ei);let i=(0,er.gW)((0,er.iC)(en),eo),o=Math.cbrt(e.symmetry.spacegroup.cell.volume)/300*t.cellScale;a.currentGroup=1,ee.V.addCage(a,n,i,o,2,20);let s=R.CP.fromDimensionsAndTransform((0,R.CP)(),P.AO.unit,n);P.AO.transformMat4(ei,ei,n),R.CP.translate(s,s,ei),R.CP.expand(s,s,o);let l=ee.V.getMesh(a);return l.setBoundingSphere(s),l}(t,r,a&&a.geometry),o=i.Symmetry.getUnitcellLabel(t.symmetry);return h.b.create(o,t,n,()=>r.cellColor,()=>1,()=>o)}function ed(e,t,r){let a=(0,P.AO)();return"model"===r.ref&&P.AO.transformMat4(a,i.Model.getCenter(e),t.spacegroup.cell.toFractional),{symmetry:t,ref:a}}var ep=r(96046),ef=r(21071),em=r(13070),eh=r(23844),eg=r(58202),ev=r(59071);let eb={unitLabel:c.e.Text("â«",{isEssential:!0})}
7319,ey={...ep.x.Params,...eb,lineSizeAttenuation:c.e.Boolean(!0),linesColor:c.e.Color(p.t.lightgreen,{isEssential:!0}),linesSize:c.e.Numeric(.075,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.2,{min:.01,max:.2,step:.01})},ex={...ev.i,...eb},eS={lines:(e,t)=>M(eA,ep.x.Utils,{modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(ew,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},eT={...ey,...ex,visuals:c.e.MultiSelect(["lines","text"],c.e.objectToOptions(eS))};function eC(e,t){let{sphereA:r,sphereB:a,center:n}=t,[i,o]=e.loci;return I.o_.getBoundingSphere(i,r),I.o_.getBoundingSphere(o,a),P.AO.add(n,r.center,a.center),P.AO.scale(n,n,.5),t.distance=P.AO.distance(r.center,a.center),t}let eO={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),center:(0,P.AO)(),distance:0};function eI(e,t){return 1===e.pairs.length?`Distance ${(0,eg.xf)(e.pairs[0],{unitLabel:t,measureOnly:!0})}`:`${e.pairs.length} Distances`}function eA(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.pairs.length;r<n;++r)eC(e.pairs[r],eO),a.addFixedLengthDashes(eO.sphereA.center,eO.sphereB.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=eI(t,r.unitLabel);return h.b.create(i,t,n,()=>r.linesColor,()=>r.linesSize,e=>(0,eg.xf)(t.pairs[e],r))}function ew(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.pairs.length;r<n;++r){eC(e.pairs[r],eO);let{center:n,distance:i,sphereA:o,sphereB:s}=eO,l=t.customText||`${i.toFixed(2)} ${t.unitLabel}`,u=Math.max(2,o.radius,s.radius)/2;a.add(l,n[0],n[1],n[2],1,u,r)}return a.getText()}(t,r,a&&a.geometry),i=eI(t,r.unitLabel);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.xf)(t.pairs[e],r))}var eD=r(40208);let eE={...ev.i},eM={text:(e,t)=>M(e_,ef.x.Utils)},eP={...eE,scaleByRadius:c.e.Boolean(!0),visuals:c.e.MultiSelect(["text"],c.e.objectToOptions(eM)),snapshotKey:c.e.Text("",{isEssential:!0,disableInteractiveUpdates:!0,description:"Activate the snapshot with the provided key when clicking on the label"}),tooltip:c.e.Text("",{isEssential:!0,multiline:!0,disableInteractiveUpdates:!0,placeholder:"Tooltip",description:"Tooltip text to be displayed when hovering over the label"})},ek=(0,R.CP)();function eB(e,t=!1){return e.label||(0,eg.Ve)(e.loci,{hidePrefix:!0,htmlStyling:!1,condensed:t})}function e_(e,t,r,a){var n,i;let o;let s=function(e,t,r){let a=eh.w.create(t,128,64,r),n=t.customText.trim();for(let r=0,i=e.infos.length;r<i;++r){let i=e.infos[r],o=I.o_.getBoundingSphere(i.loci,ek);if(!o)continue;let{center:s,radius:l}=o,u=n||eB(i,!0);a.add(u,s[0],s[1],s[2],t.scaleByRadius?l/.9:0,t.scaleByRadius?Math.max(1,l):1,r)}return a.getText()}(t,r,a&&a.geometry),l=1===t.infos.length?eB(t.infos[0]):`${t.infos.length} Labels`,u=null!==(i=null===(n=r.tooltip)||void 0===n?void 0:n.trim())&&void 0!==i?i:"",c=r.customText.trim();return o=u?e=>u:c?e=>c:e=>eB(t.infos[e]),h.b.create(l,t,s,()=>r.textColor,()=>r.textSize,o)}let eR=(0,P.AO)(),eF=P.yb.identity(),eL=new Float32Array(18),ez=new Uint8Array([0,1,2,3,4,5]);r(84785),r(34748),P.AO.zero(),P.AO.zero();let eN=(0,P.AO)(),eG=(0,P.AO)(),eU=(0,P.AO)(),eV=(0,P.AO)(),ej=P.yb.identity(),eH=new Float32Array(24),eq=new Uint8Array([0,1,0,3,0,6,1,2,1,7,2,3,2,4,3,5,4,5,4,7,5,6,6,7]);var eX=r(98338);let eW={color:c.e.Color(p.t.orange),scaleFactor:c.e.Numeric(1,{min:.1,max:10,step:.1}),radiusScale:c.e.Numeric(2,{min:.1,max:10,step:.1})},eK={...J.K.Params,...eW},eQ={...J.K.Params,...eW},eZ={...J.K.Params,...eW},eY={axes:(e,t)=>M(eJ,J.K.Utils),box:(e,t)=>M(e0,J.K.Utils),ellipsoid:(e,t)=>M(e1,J.K.Utils)},e$={...eK,...eQ,...eZ,visuals:c.e.MultiSelect(["box"],c.e.objectToOptions(eY))};function eJ(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis);return R.QB.scale(n.momentsAxes,n.momentsAxes,t.scaleFactor),a.currentGroup=0,!function(e,t,r,a,n){let{origin:i,dirA:o,dirB:s,dirC:l}=t;P.AO.add(eR,i,o),P.AO.toArray(P.AO.add(eR,i,o),eL,0),P.AO.toArray(P.AO.sub(eR,i,o),eL,3),P.AO.toArray(P.AO.add(eR,i,s),eL,6),P.AO.toArray(P.AO.sub(eR,i,s),eL,9),P.AO.toArray(P.AO.add(eR,i,l),eL,12),P.AO.toArray(P.AO.sub(eR,i,l),eL,15);let u=(0,er.aK)(eL,ez),c=R.QB.volume(t);ee.V.addCage(e,eF,u,Math.cbrt(c)/300*r,2,20)}
7319(a,n.momentsAxes,t.radiusScale,0,0),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Principal Axes of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}function e0(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis);return R.QB.scale(n.boxAxes,n.boxAxes,t.scaleFactor),a.currentGroup=0,!function(e,t,r,a,n){let{origin:i,dirA:o,dirB:s,dirC:l}=t,u=P.AO.negate(eG,o),c=P.AO.negate(eU,s),d=P.AO.negate(eV,l),p=0,f=function(e,t,r){P.AO.copy(eN,i),P.AO.add(eN,eN,e),P.AO.add(eN,eN,t),P.AO.add(eN,eN,r),P.AO.toArray(eN,eH,p),p+=3};f(o,s,l),f(o,s,d),f(o,c,d),f(o,c,l),f(u,c,d),f(u,c,l),f(u,s,l),f(u,s,d);let m=(0,er.aK)(eH,eq),h=R.QB.volume(t);ee.V.addCage(e,ej,m,Math.cbrt(h)/300*r,2,20)}(a,n.boxAxes,t.radiusScale,0,0),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Oriented Box of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}function e1(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis).boxAxes,{origin:o,dirA:s,dirB:l}=n,u=R.QB.size((0,P.AO)(),n);P.AO.scale(u,u,.5*t.scaleFactor);let c=P.AO.create(u[2],u[1],u[0]);return a.currentGroup=0,(0,eX.j)(a,o,s,l,c,2),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Oriented Ellipsoid of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}var e2=r(58463);let e3={radius:1,segments:36,thetaStart:0,thetaLength:2*Math.PI};function e4(e){let{radius:t,segments:r,thetaStart:a,thetaLength:n}={...e3,...e},i=n===2*Math.PI,o=i?r+1:r+2,s=new Float32Array(3*o),l=new Float32Array(3*o),u=new Uint32Array(3*r);s[0]=0,s[1]=0,s[2]=0,l[0]=0,l[1]=1,l[2]=0;for(let e=0,i=3;e<r;++e,i+=3){let o=a+e/r*n;s[i]=t*Math.sin(o),s[i+1]=0,s[i+2]=t*Math.cos(o),l[i]=0,l[i+1]=1,l[i+2]=0}for(let e=1,t=0;e<r;++e,t+=3)u[t]=e,u[t+1]=e+1,u[t+2]=0;if(i){let e=(r-1)*3;u[e]=r,u[e+1]=1,u[e+2]=0}else{let e=a+n,i=(r+1)*3;s[i]=t*Math.sin(e),s[i+1]=0,s[i+2]=t*Math.cos(e),l[i]=0,l[i+1]=1,l[i+2]=0;let o=(r-1)*3;u[o]=r,u[o+1]=r+1,u[o+2]=0}return{vertices:s,normals:l,indices:u}}var e5=r(81725);let e6={color:c.e.Color(p.t.lightgreen),arcScale:c.e.Numeric(.7,{min:.01,max:1,step:.01})},e8={...ep.x.Params,...e6,lineSizeAttenuation:c.e.Boolean(!0),linesSize:c.e.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.04,{min:.01,max:.2,step:.01})},e7={...e8},e9={...e8},te={...J.K.Params,...e6,ignoreLight:c.e.Boolean(!0),sectorOpacity:c.e.Numeric(.75,{min:0,max:1,step:.01})},tt={vectors:(e,t)=>M(tu,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arc:(e,t)=>M(tc,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),sector:(e,t)=>M(td,J.K.Utils,{modifyProps:e=>({...e,alpha:e.sectorOpacity}),modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(tp,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},tr={...e7,...e9,...te,...ev.i,visuals:c.e.MultiSelect(["vectors","sector","text"],c.e.objectToOptions(tt))},ta=(0,P.AO)(),tn=(0,P.yb)();function ti(e,t,r){let{sphereA:a,sphereB:n,sphereC:i}=t,{arcDirA:o,arcDirC:s,arcNormal:l}=t,[u,c,d]=e.loci;I.o_.getBoundingSphere(u,a),I.o_.getBoundingSphere(c,n),I.o_.getBoundingSphere(d,i),P.AO.sub(o,a.center,n.center),P.AO.sub(s,i.center,n.center),P.AO.cross(l,o,s);let p=Math.min(P.AO.magnitude(o),P.AO.magnitude(s));return t.radius=p*r,t.angle=P.AO.angle(o,s),t}function to(e,t){let{radius:r,angle:a}=e,n=t?(0,e2.UN)(a,r)/t:32;P.yb.targetTo(tn,e.sphereB.center,e.sphereA.center,e.arcNormal),P.yb.setTranslation(tn,e.sphereB.center),P.yb.mul(tn,tn,P.yb.rotY180);let i=e4({radius:r,thetaLength:a,segments:n});return(0,e5.ik)(i,tn)}let ts={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),sphereC:(0,R.CP)(),arcDirA:(0,P.AO)(),arcDirC:(0,P.AO)(),arcNormal:(0,P.AO)(),radius:0,angle:0};function tl(e){return 1===e.triples.length?`Angle ${(0,eg.Wf)(e.triples[0],{measureOnly:!0})}`:`${e.triples.length} Angles`}function tu(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.triples.length;r<n;++r)ti(e.triples[r],ts,t.arcScale),a.addFixedLengthDashes(ts.sphereB.center,ts.sphereA.center,t.dashLength,r),a.addFixedLengthDashes(ts.sphereB.center,ts.sphereC.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tc(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale);let{indices:n,vertices:i}=to(ts,t.dashLength);for(let e=0,t=n.length;e<t;e+=3){if(e%2==1)continue;let t=3*n[e],o=3*n[e+1],s=i[t],l=i[t+1],u=i[t+2],c=i[o],d=i[o+1],p=i[o+2];a.add(s,l,u,c,d,p,r)}}return a.getLines()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function td(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale);let n=to(ts);
7319a.currentGroup=r,ee.V.addPrimitive(a,P.yb.id,n),ee.V.addPrimitiveFlipped(a,P.yb.id,n)}return ee.V.getMesh(a)}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.color,()=>1,e=>(0,eg.Wf)(t.triples[e]))}function tp(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.triples.length;r<n;++r){ti(e.triples[r],ts,t.arcScale),P.AO.add(ta,ts.arcDirA,ts.arcDirC),P.AO.setMagnitude(ta,ta,ts.radius),P.AO.add(ta,ts.sphereB.center,ta);let n=(0,e2.ZY)(ts.angle).toFixed(2),i=t.customText||`${n}\u00B0`,o=Math.max(2,ts.sphereA.radius,ts.sphereB.radius,ts.sphereC.radius)/2;a.add(i,ta[0],ta[1],ta[2],.1,o,r)}return a.getText()}(t,r,a&&a.geometry),i=tl(t);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.Wf)(t.triples[e]))}let tf={color:c.e.Color(p.t.lightgreen),arcScale:c.e.Numeric(.7,{min:.01,max:1,step:.01})},tm={...ep.x.Params,...tf,lineSizeAttenuation:c.e.Boolean(!0),linesSize:c.e.Numeric(.04,{min:.01,max:5,step:.01}),dashLength:c.e.Numeric(.04,{min:.01,max:.2,step:.01})},th={...tm},tg={...tm},tv={...tm},tb={...tm},ty={...J.K.Params,...tf,ignoreLight:c.e.Boolean(!0),sectorOpacity:c.e.Numeric(.75,{min:0,max:1,step:.01})},tx={vectors:(e,t)=>M(tD,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),extenders:(e,t)=>M(tP,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),connector:(e,t)=>M(tE,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arms:(e,t)=>M(tM,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),arc:(e,t)=>M(tk,ep.x.Utils,{modifyState:e=>({...e,pickable:!1})}),sector:(e,t)=>M(tB,J.K.Utils,{modifyProps:e=>({...e,alpha:e.sectorOpacity}),modifyState:e=>({...e,markerActions:S.E5.Highlighting})}),text:(e,t)=>M(t_,ef.x.Utils,{modifyState:e=>({...e,markerActions:S.dd.None})})},tS={...th,...tg,...tv,...tb,...ty,...ev.i,visuals:c.e.MultiSelect(["extenders","arms","sector","text"],c.e.objectToOptions(tx))},tT=(0,P.AO)(),tC=(0,P.yb)();function tO(e,t,r){let{sphereA:a,sphereB:n,sphereC:i,sphereD:o,dirBA:s,dirCD:l,projA:u,projD:c}=t,{arcPointA:d,arcPointD:p,arcDirA:f,arcDirD:m,arcCenter:h,arcNormal:g}=t,[b,y,x,S]=e.loci;I.o_.getBoundingSphere(b,a),I.o_.getBoundingSphere(y,n),I.o_.getBoundingSphere(x,i),I.o_.getBoundingSphere(S,o),P.AO.add(h,n.center,i.center),P.AO.scale(h,h,.5),P.AO.sub(s,a.center,n.center),P.AO.sub(l,o.center,i.center),P.AO.add(d,h,s),P.AO.add(p,h,l),P.AO.sub(g,i.center,n.center),P.AO.orthogonalize(f,g,s),P.AO.orthogonalize(m,g,l),P.AO.projectPointOnVector(u,d,f,h),P.AO.projectPointOnVector(c,p,m,h);let T=Math.min(P.AO.distance(u,h),P.AO.distance(c,h))*r;P.AO.setMagnitude(f,f,T),P.AO.setMagnitude(m,m,T),P.AO.add(d,h,f),P.AO.add(p,h,m),t.radius=T,t.angle=P.AO.dihedralAngle(a.center,n.center,i.center,o.center),P.AO.matchDirection(tT,g,P.AO.sub(tT,d,a.center));let C=T/Math.cos(P.AO.angle(s,tT)-e2.MZ);P.AO.add(u,n.center,P.AO.setMagnitude(tT,s,C)),P.AO.matchDirection(tT,g,P.AO.sub(tT,p,o.center));let O=T/Math.cos(P.AO.angle(l,tT)-e2.MZ);return P.AO.add(c,i.center,P.AO.setMagnitude(tT,l,O)),t}function tI(e,t){let{radius:r,angle:a}=e,n=t?(0,e2.UN)(a,r)/t:32;P.yb.targetTo(tC,e.arcCenter,a<0?e.arcPointD:e.arcPointA,e.arcNormal),P.yb.setTranslation(tC,e.arcCenter),P.yb.mul(tC,tC,P.yb.rotY180);let i=e4({radius:r,thetaLength:Math.abs(a),segments:n});return(0,e5.ik)(i,tC)}let tA={sphereA:(0,R.CP)(),sphereB:(0,R.CP)(),sphereC:(0,R.CP)(),sphereD:(0,R.CP)(),dirBA:(0,P.AO)(),dirCD:(0,P.AO)(),projA:(0,P.AO)(),projD:(0,P.AO)(),arcPointA:(0,P.AO)(),arcPointD:(0,P.AO)(),arcDirA:(0,P.AO)(),arcDirD:(0,P.AO)(),arcCenter:(0,P.AO)(),arcNormal:(0,P.AO)(),radius:0,angle:0};function tw(e){return 1===e.quads.length?`Dihedral ${(0,eg.U7)(e.quads[0],{measureOnly:!0})}`:`${e.quads.length} Dihedrals`}function tD(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.arcCenter,tA.arcPointA,t.dashLength,r),a.addFixedLengthDashes(tA.arcCenter,tA.arcPointD,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tE(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.sphereB.center,tA.sphereC.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tM(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.sphereB.center,tA.sphereA.center,t.dashLength,r),a.addFixedLengthDashes(tA.sphereC.center,tA.sphereD.center,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tP(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r)tO(e.quads[r],tA,t.arcScale),a.addFixedLengthDashes(tA.arcPointA,tA.projA,t.dashLength,r),a.addFixedLengthDashes(tA.arcPointD,tA.projD,t.dashLength,r);return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tk(e,t,r,a){let n=function(e,t,r){let a=em.R.create(128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale);let{indices:n,vertices:i}=tI(tA,t.dashLength);for(let e=0,t=n.length;e<t;e+=3){if(e%2==1)continue;let t=3*n[e],o=3*n[e+1],s=i[t],l=i[t+1],u=i[t+2],c=i[o],d=i[o+1],p=i[o+2];a.add(s,l,u,c,d,p,r)}}return a.getLines()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>r.linesSize,()=>"")}function tB(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale);let n=tI(tA);
7319a.currentGroup=r,ee.V.addPrimitive(a,P.yb.id,n),ee.V.addPrimitiveFlipped(a,P.yb.id,n)}return ee.V.getMesh(a)}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.color,()=>1,e=>(0,eg.U7)(t.quads[e]))}function t_(e,t,r,a){let n=function(e,t,r){let a=eh.w.create(t,128,64,r);for(let r=0,n=e.quads.length;r<n;++r){tO(e.quads[r],tA,t.arcScale),P.AO.add(tT,tA.arcDirA,tA.arcDirD),P.AO.setMagnitude(tT,tT,tA.radius),P.AO.add(tT,tA.arcCenter,tT);let n=(0,e2.ZY)(tA.angle).toFixed(2);"-0.00"===n&&(n="0.00");let i=t.customText||`${n}\u00B0`,o=Math.max(2,tA.sphereA.radius,tA.sphereB.radius,tA.sphereC.radius,tA.sphereD.radius)/2;a.add(i,tT[0],tT[1],tT[2],.1,o,r)}return a.getText()}(t,r,a&&a.geometry),i=tw(t);return h.b.create(i,t,n,()=>r.textColor,()=>r.textSize,e=>(0,eg.U7)(t.quads[e]))}var tR=r(5333),tF=r(1813),tL=r(97667),tz=r(59990);let tN={vertices:new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]),normals:new Float32Array([0,0,1,0,0,1,0,0,1,0,0,1]),indices:new Uint32Array([0,2,1,1,2,3])};tN.vertices,new Uint32Array([0,1,2,3,3,1,2,0]);let tG={...J.K.Params,color:c.e.Color(p.t.orange),scaleFactor:c.e.Numeric(1,{min:.1,max:10,step:.1})},tU={plane:(e,t)=>M(tq,J.K.Utils)},tV={...tG,visuals:c.e.MultiSelect(["plane"],c.e.objectToOptions(tU))},tj=(0,P.yb)(),tH=(0,P.AO)();function tq(e,t,r,a){let n=function(e,t,r){let a=ee.V.createState(256,128,r),n=i.StructureElement.Loci.getPrincipalAxesMany(e.locis).boxAxes;return P.AO.add(tH,n.origin,n.dirC),P.yb.targetTo(tj,tH,n.origin,n.dirB),P.yb.scale(tj,tj,R.QB.size(tH,n)),P.yb.scaleUniformly(tj,tj,t.scaleFactor),P.yb.setTranslation(tj,n.origin),a.currentGroup=0,ee.V.addPrimitive(a,tj,tN),ee.V.addPrimitiveFlipped(a,tj,tN),ee.V.getMesh(a)}(t,r,a&&a.geometry),o=function(e){let t=(0,eg.Cj)(e,{countsOnly:!0});return`Best Fit Plane of ${t}`}(t.locis);return h.b.create(o,t,n,()=>r.color,()=>1,()=>o)}var tX=r(5909),tW=r(34813),tK=r(23833),tQ=r(37792);let tZ=d.E.BuiltIn({name:"structure-representation-3d",display:"3D Representation",from:d.G.Molecule.Structure,to:d.G.Molecule.Structure.Representation3D,params:(e,t)=>{let{registry:r,themes:a}=t.representation.structure,n=r.get(r.default.name);if(!e)return{type:c.e.Mapped(r.default.name,r.types,e=>c.e.Group(r.get(e).getParams(a,i.Structure.Empty))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.types,e=>c.e.Group(a.colorThemeRegistry.get(e).getParams({structure:i.Structure.Empty})),{help:e=>{let{name:t,params:r}=e,n=a.colorThemeRegistry.get(t).factory({},r);return{description:n.description,legend:n.legend}}}),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.types,e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams({structure:i.Structure.Empty})))};let o={structure:e.data};return{type:c.e.Mapped(r.default.name,r.getApplicableTypes(e.data),t=>c.e.Group(r.get(t).getParams(a,e.data))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.getApplicableTypes(o),e=>c.e.Group(a.colorThemeRegistry.get(e).getParams(o)),{help:e=>{let{name:t,params:r}=e,n=a.colorThemeRegistry.get(t).factory(o,r);return{description:n.description,legend:n.legend}}}),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.getApplicableTypes(o),e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams(o)))}}})({canAutoUpdate:({a:e,oldParams:t,newParams:r})=>e.data.elementCount<1e4||t.type.name===r.type.name&&"custom"!==r.type.params.quality,apply:({a:e,params:t,cache:r},a)=>l.iQ.create("Structure Representation",async r=>{var n,i;let o={runtime:r,assetManager:a.managers.asset,errorContext:a.errorContext},s=a.representation.structure.registry.get(t.type.name),l=(null===(n=s.getData)||void 0===n?void 0:n.call(s,e.data,t.type.params))||e.data;s.ensureCustomProperties&&await s.ensureCustomProperties.attach(o,l);let c=s.factory({webgl:null===(i=a.canvas3d)||void 0===i?void 0:i.webgl,...a.representation.structure.themes},s.getParams);await u.Q.ensureDependencies(o,a.representation.structure.themes,{structure:l},t),c.setTheme(u.Q.create(a.representation.structure.themes,{structure:l},t));let p=t.type.params||{};return await c.createOrUpdate(p,l).runInContext(r),new d.G.Molecule.Structure.Representation3D({repr:c,sourceData:e.data},{label:s.label})}),update:({a:e,b:t,oldParams:r,newParams:a,cache:n},i)=>l.iQ.create("Structure Representation",async n=>{var o,l;if(a.type.name!==r.type.name)return s.td.UpdateResult.Recreate;let c=i.representation.structure.registry.get(a.type.name);if(null===(o=c.mustRecreate)||void 0===o?void 0:o.call(c,r.type.params,a.type.params))return s.td.UpdateResult.Recreate;let d=(null===(l=c.getData)||void 0===l?void 0:l.call(c,e.data,a.type.params))||e.data,p={runtime:n,assetManager:i.managers.asset,errorContext:i.errorContext};c.ensureCustomProperties&&await c.ensureCustomProperties.attach(p,d),u.Q.releaseDependencies(i.representation.structure.themes,{structure:t.data.sourceData},r),await u.Q.ensureDependencies(p,i.representation.structure.themes,{structure:d},a),t.data.repr.setTheme(u.Q.create(i.representation.structure.themes,{structure:d},a));let f={...t.data.repr.props,...a.type.params};return await t.data.repr.createOrUpdate(f,d).runInContext(n),t.data.sourceData=e.data,s.td.UpdateResult.Updated}),dispose({b:e,params:t},r){if(!e||!t)return;let a=e.data.sourceData,n=r.representation.structure.registry.get(t.type.name);n.ensureCustomProperties&&n.ensureCustomProperties.detach(a),u.Q.releaseDependencies(r.representation.structure.themes,{structure:a},t)},interpolate(e,t,r){if("uniform"!==e.colorTheme.name||"uniform"!==t.colorTheme.name)return r<=.5?e:t;let a=e.colorTheme.params.value,n=t.colorTheme.params.value,i=K.Il.interpolate(a,n,r);return{type:r<=.5?e.type:t.type,colorTheme:{name:"uniform",params:{value:i}},sizeTheme:r<=.5?e.sizeTheme:t.sizeTheme}}}),tY=d.E.BuiltIn({name:"unwind-structure-assembly-representation-3d",display:"Unwind Assembly 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.
731901})}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r);return L(r,a,t.t),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Unwind T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;return e.data.sourceData!==n||e.data.repr!==t.data.repr?s.td.UpdateResult.Recreate:a.t===r.t?s.td.UpdateResult.Unchanged:(L(n,t.data.state.unitTransforms,r.t),t.label=`Unwind T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated)}}),t$=d.E.BuiltIn({name:"explode-structure-representation-3d",display:"Explode 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.01})}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r);return U(r,a,t.t,r.root.boundary.sphere),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Explode T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=e.data.sourceData;return t.data.info!==n||e.data.repr!==t.data.repr?s.td.UpdateResult.Recreate:a.t===r.t?s.td.UpdateResult.Unchanged:(U(n,t.data.state.unitTransforms,r.t,n.root.boundary.sphere),t.label=`Explode T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated)}}),tJ=d.E.BuiltIn({name:"spin-structure-representation-3d",display:"Spin 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:{t:c.e.Numeric(0,{min:0,max:1,step:.01}),...V}})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=new _(r),{axis:n,origin:i}=j(r.root,t);return W(r,a,t.t,n,i),new d.G.Molecule.Structure.Representation3DState({state:{unitTransforms:a},initialState:{unitTransforms:new _(r)},info:r,repr:e.data.repr},{label:`Spin T = ${t.t.toFixed(2)}`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=e.data.sourceData;if(t.data.info!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;if(a.t===r.t&&a.axis===r.axis&&a.origin===r.origin)return s.td.UpdateResult.Unchanged;let i=t.data.state.unitTransforms,{axis:o,origin:l}=j(n.root,r);return W(n,i,r.t,o,l),t.label=`Spin T = ${r.t.toFixed(2)}`,t.data.repr=e.data.repr,s.td.UpdateResult.Updated}}),t0=d.E.BuiltIn({name:"overpaint-structure-representation-3d-from-script",display:"Overpaint 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),color:c.e.Color(p.t.blueviolet),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":K.Il.toRgbString(e.color)}`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),color:p.t.blueviolet,clear:!1}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Q.k.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{overpaint:n},initialState:{overpaint:Q.k.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Overpaint (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.overpaint,u=Q.k.ofScript(r.layers,i);return Q.k.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.overpaint=u,t.data.repr=e.data.repr,t.label=`Overpaint (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t1=d.E.BuiltIn({name:"overpaint-structure-representation-3d-from-bundle",display:"Overpaint 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),color:c.e.Color(p.t.blueviolet),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":K.Il.toRgbString(e.color)}`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,color:p.t.blueviolet,clear:!1}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Q.k.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{overpaint:n},initialState:{overpaint:Q.k.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Overpaint (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.overpaint,u=Q.k.ofBundle(r.layers,i);return Q.k.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.overpaint=u,t.data.repr=e.data.repr,t.label=`Overpaint (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t2=d.E.BuiltIn({name:"transparency-structure-representation-3d-from-script",display:"Transparency 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),value:c.e.Numeric(.5,{min:0,max:1,step:.
731901},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Z.i.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{transparency:n},initialState:{transparency:Z.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Transparency (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.transparency,u=Z.i.ofScript(r.layers,i);return Z.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.transparency=u,t.data.repr=e.data.repr,t.label=`Transparency (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t3=d.E.BuiltIn({name:"transparency-structure-representation-3d-from-bundle",display:"Transparency 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),value:c.e.Numeric(.5,{min:0,max:1,step:.01},{label:"Transparency"})},e=>`Transparency (${e.value})`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=Z.i.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{transparency:n},initialState:{transparency:Z.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Transparency (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.transparency,u=Z.i.ofBundle(r.layers,i);return Z.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.transparency=u,t.data.repr=e.data.repr,t.label=`Transparency (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t4=d.E.BuiltIn({name:"emissive-structure-representation-3d-from-script",display:"Emissive 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),value:c.e.Numeric(.5,{min:0,max:1,step:.01},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),value:.5}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tQ.i.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{emissive:n},initialState:{emissive:tQ.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Emissive (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.emissive,u=tQ.i.ofScript(r.layers,i);return tQ.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.emissive=u,t.data.repr=e.data.repr,t.label=`Emissive (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t5=d.E.BuiltIn({name:"emissive-structure-representation-3d-from-bundle",display:"Emissive 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),value:c.e.Numeric(.5,{min:0,max:1,step:.
731901},{label:"Emissive"})},e=>`Emissive (${e.value})`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,value:.5}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tQ.i.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{emissive:n},initialState:{emissive:tQ.i.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Emissive (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.emissive,u=tQ.i.ofBundle(r.layers,i);return tQ.i.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.emissive=u,t.data.repr=e.data.repr,t.label=`Emissive (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t6=d.E.BuiltIn({name:"substance-structure-representation-3d-from-script",display:"Substance 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),material:tW.F.getParam(),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":tW.F.toString(e.material)}`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),material:(0,tW.F)({roughness:1}),clear:!1}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tX.A.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{substance:n},initialState:{substance:tX.A.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Substance (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.substance,u=tX.A.ofScript(r.layers,i);return tX.A.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.substance=u,t.data.repr=e.data.repr,t.label=`Substance (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t8=d.E.BuiltIn({name:"substance-structure-representation-3d-from-bundle",display:"Substance 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),material:tW.F.getParam(),clear:c.e.Boolean(!1)},e=>`${e.clear?"Clear":tW.F.toString(e.material)}`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,material:(0,tW.F)({roughness:1}),clear:!1}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=e.data.repr.geometryVersion,n=tX.A.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{substance:n},initialState:{substance:tX.A.Empty},info:{structure:r,geometryVersion:a},repr:e.data.repr},{label:`Substance (${n.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info,i=e.data.sourceData;if(i!==n.structure||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let o=e.data.repr.geometryVersion;if(o!==n.geometryVersion&&(0,Y.IH)(e.data.repr.props))return s.td.UpdateResult.Recreate;let l=t.data.state.substance,u=tX.A.ofBundle(r.layers,i);return tX.A.areEqual(l,u)?s.td.UpdateResult.Unchanged:(n.geometryVersion=o,t.data.state.substance=u,t.data.repr=e.data.repr,t.label=`Substance (${u.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t7=d.E.BuiltIn({name:"clipping-structure-representation-3d-from-script",display:"Clipping 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({script:c.e.Script((0,$.Script)("(sel.atom.all)","mol-script")),groups:c.e.Converted(e=>tF.z.Groups.toNames(e),e=>
7319tF.z.Groups.fromNames(e),c.e.MultiSelect((0,tL._2)(tF.z.Groups.Names),c.e.objectToOptions(tF.z.Groups.Names)))},e=>`${tF.z.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{script:(0,$.Script)("(sel.atom.all)","mol-script"),groups:tF.z.Groups.Flag.None}]})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=tF.z.ofScript(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{clipping:a},initialState:{clipping:tF.z.Empty},info:r,repr:e.data.repr},{label:`Clipping (${a.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;if(e.data.sourceData!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let i=t.data.state.clipping,o=tF.z.ofScript(r.layers,n);return tF.z.areEqual(i,o)?s.td.UpdateResult.Unchanged:(t.data.state.clipping=o,t.data.repr=e.data.repr,t.label=`Clipping (${o.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),t9=d.E.BuiltIn({name:"clipping-structure-representation-3d-from-bundle",display:"Clipping 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({layers:c.e.ObjectList({bundle:c.e.Value(i.StructureElement.Bundle.Empty),groups:c.e.Converted(e=>tF.z.Groups.toNames(e),e=>tF.z.Groups.fromNames(e),c.e.MultiSelect((0,tL._2)(tF.z.Groups.Names),c.e.objectToOptions(tF.z.Groups.Names)))},e=>`${tF.z.Groups.toNames(e.groups).length} group(s)`,{defaultValue:[{bundle:i.StructureElement.Bundle.Empty,groups:tF.z.Groups.Flag.None}],isHidden:!0})})})({canAutoUpdate:()=>!0,apply({a:e,params:t}){let r=e.data.sourceData,a=tF.z.ofBundle(t.layers,r);return new d.G.Molecule.Structure.Representation3DState({state:{clipping:a},initialState:{clipping:tF.z.Empty},info:r,repr:e.data.repr},{label:`Clipping (${a.layers.length} Layers)`})},update({a:e,b:t,newParams:r,oldParams:a}){let n=t.data.info;if(e.data.sourceData!==n||e.data.repr!==t.data.repr)return s.td.UpdateResult.Recreate;let i=t.data.state.clipping,o=tF.z.ofBundle(r.layers,n);return tF.z.areEqual(i,o)?s.td.UpdateResult.Unchanged:(t.data.state.clipping=o,t.data.repr=e.data.repr,t.label=`Clipping (${o.layers.length} Layers)`,s.td.UpdateResult.Updated)}}),re=d.E.BuiltIn({name:"theme-strength-representation-3d",display:"Theme Strength 3D Representation",from:d.G.Molecule.Structure.Representation3D,to:d.G.Molecule.Structure.Representation3DState,params:()=>({overpaintStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),transparencyStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),emissiveStrength:c.e.Numeric(1,{min:0,max:1,step:.01}),substanceStrength:c.e.Numeric(1,{min:0,max:1,step:.01})})})({canAutoUpdate:()=>!0,apply:({a:e,params:t})=>new d.G.Molecule.Structure.Representation3DState({state:{themeStrength:{overpaint:t.overpaintStrength,transparency:t.transparencyStrength,emissive:t.emissiveStrength,substance:t.substanceStrength}},initialState:{themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1}},info:{},repr:e.data.repr},{label:"Theme Strength",description:`${t.overpaintStrength.toFixed(2)}, ${t.transparencyStrength.toFixed(2)}, ${t.emissiveStrength.toFixed(2)}, ${t.substanceStrength.toFixed(2)}`}),update({a:e,b:t,newParams:r,oldParams:a}){var n,i,o,l;return r.overpaintStrength===(null===(n=t.data.state.themeStrength)||void 0===n?void 0:n.overpaint)&&r.transparencyStrength===(null===(i=t.data.state.themeStrength)||void 0===i?void 0:i.transparency)&&r.emissiveStrength===(null===(o=t.data.state.themeStrength)||void 0===o?void 0:o.emissive)&&r.substanceStrength===(null===(l=t.data.state.themeStrength)||void 0===l?void 0:l.substance)?s.td.UpdateResult.Unchanged:(t.data.state.themeStrength={overpaint:r.overpaintStrength,transparency:r.transparencyStrength,emissive:r.emissiveStrength,substance:r.substanceStrength},t.data.repr=e.data.repr,t.label="Theme Strength",t.description=`${r.overpaintStrength.toFixed(2)}, ${r.transparencyStrength.toFixed(2)}, ${r.emissiveStrength.toFixed(2)}, ${r.substanceStrength.toFixed(2)}`,s.td.UpdateResult.Updated)},interpolate:(e,t,r)=>({overpaintStrength:(0,tK.t7)(e.overpaintStrength,t.overpaintStrength,r),transparencyStrength:(0,tK.t7)(e.transparencyStrength,t.transparencyStrength,r),emissiveStrength:(0,tK.t7)(e.emissiveStrength,t.emissiveStrength,r),substanceStrength:(0,tK.t7)(e.substanceStrength,t.substanceStrength,r)})});(a=n||(n={})).getDefaultParams=function(e,t,r,a,n,i,o,s){let l=e.representation.volume.registry.get(t),u=e.representation.volume.themes.colorThemeRegistry.get(n||l.defaultColorTheme.name),d=e.representation.volume.themes.sizeThemeRegistry.get(o||l.defaultSizeTheme.name),p=c.e.getDefaultValues(l.getParams(e.representation.volume.themes,r));return{type:{name:t,params:a?{...p,...a}:p},colorTheme:{name:u.name,params:i?{...u.defaultValues,...i}:u.defaultValues},sizeTheme:{name:d.name,params:s?{...d.defaultValues,...s}:d.defaultValues}}},a.getDefaultParamsStatic=function(e,t,r,a,n,i,o){let s=e.representation.volume.registry.get(t),l=e.representation.volume.themes.colorThemeRegistry.get(a||s.defaultColorTheme.name),u=e.representation.volume.themes.sizeThemeRegistry.get(i||s.defaultSizeTheme.name);return{type:{name:t,params:r?{...s.defaultValues,...r}:s.defaultValues},colorTheme:{name:s.defaultColorTheme.name,params:n?{...l.defaultValues,...n}:l.defaultValues},sizeTheme:{name:s.defaultSizeTheme.name,params:o?{...u.defaultValues,...o}:u.defaultValues}}},a.getDescription=function(e){var t,r,a,n;return e.isoValue?o.f.IsoValue.toString(e.isoValue):(null===(r=null===(t=e.renderMode)||void 0===t?void 0:t.params)||void 0===r?void 0:r.isoValue)?o.f.IsoValue.toString(null===(n=null===(a=e.renderMode)||void 0===a?void 0:a.params)||void 0===n?void 0:n.isoValue):void 0};let rt=d.E.BuiltIn({name:"volume-representation-3d",display:"3D Representation",from:d.G.Volume.Data,to:d.G.Volume.Representation3D,params:(e,t)=>{let{registry:r,themes:a}=t.representation.volume,n=r.get(r.default.name);if(!e)return{type:c.e.Mapped(r.default.name,r.types,e=>
7319c.e.Group(r.get(e).getParams(a,o.f.One))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.types,e=>c.e.Group(a.colorThemeRegistry.get(e).getParams({volume:o.f.One}))),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.types,e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams({volume:o.f.One})))};let i={volume:e.data};return{type:c.e.Mapped(r.default.name,r.types,t=>c.e.Group(r.get(t).getParams(a,e.data))),colorTheme:c.e.Mapped(n.defaultColorTheme.name,a.colorThemeRegistry.getApplicableTypes(i),e=>c.e.Group(a.colorThemeRegistry.get(e).getParams(i))),sizeTheme:c.e.Mapped(n.defaultSizeTheme.name,a.sizeThemeRegistry.getApplicableTypes(i),e=>c.e.Group(a.sizeThemeRegistry.get(e).getParams(i)))}}})({canAutoUpdate:({oldParams:e,newParams:t})=>e.type.name===t.type.name,apply:({a:e,params:t},r)=>l.iQ.create("Volume Representation",async a=>{var i;let o={runtime:a,assetManager:r.managers.asset,errorContext:r.errorContext},s=r.representation.volume.registry.get(t.type.name);s.ensureCustomProperties&&await s.ensureCustomProperties.attach(o,e.data);let l=s.factory({webgl:null===(i=r.canvas3d)||void 0===i?void 0:i.webgl,...r.representation.volume.themes},s.getParams);await u.Q.ensureDependencies(o,r.representation.volume.themes,{volume:e.data},t),l.setTheme(u.Q.create(r.representation.volume.themes,{volume:e.data,locationKinds:s.locationKinds},t));let c=t.type.params||{};return await l.createOrUpdate(c,e.data).runInContext(a),new d.G.Volume.Representation3D({repr:l,sourceData:e.data},{label:s.label,description:n.getDescription(c)})}),update:({a:e,b:t,oldParams:r,newParams:a},i)=>l.iQ.create("Volume Representation",async o=>{var l;if(a.type.name!==r.type.name)return s.td.UpdateResult.Recreate;let c=i.representation.volume.registry.get(a.type.name);if(null===(l=c.mustRecreate)||void 0===l?void 0:l.call(c,r.type.params,a.type.params))return s.td.UpdateResult.Recreate;let d={runtime:o,assetManager:i.managers.asset,errorContext:i.errorContext};c.ensureCustomProperties&&await c.ensureCustomProperties.attach(d,e.data),u.Q.releaseDependencies(i.representation.volume.themes,{volume:t.data.sourceData},r),await u.Q.ensureDependencies(d,i.representation.volume.themes,{volume:e.data},a),t.data.repr.setTheme(u.Q.create(i.representation.volume.themes,{volume:e.data,locationKinds:c.locationKinds},a));let p={...t.data.repr.props,...a.type.params};return await t.data.repr.createOrUpdate(p,e.data).runInContext(o),t.data.sourceData=e.data,t.description=n.getDescription(p),s.td.UpdateResult.Updated}),dispose({b:e,params:t},r){if(!e||!t)return;let a=e.data.sourceData,n=r.representation.volume.registry.get(t.type.name);n.ensureCustomProperties&&n.ensureCustomProperties.detach(a),u.Q.releaseDependencies(r.representation.volume.themes,{volume:a},t)}}),rr=d.E.BuiltIn({name:"shape-representation-3d",display:"3D Representation",from:d.G.Shape.Provider,to:d.G.Shape.Representation3D,params:(e,t)=>e?e.data.params:Y.ev.Params})({canAutoUpdate:()=>!0,apply:({a:e,params:t})=>l.iQ.create("Shape Representation",async r=>{let a={...c.e.getDefaultValues(e.data.params),...t},n=M(e.data.getShape,e.data.geometryUtils);return await n.createOrUpdate(a,e.data.data).runInContext(r),new d.G.Shape.Representation3D({repr:n,sourceData:e.data},{label:e.data.label})}),update:({a:e,b:t,newParams:r})=>l.iQ.create("Shape Representation",async a=>{let n={...t.data.repr.props,...r};return await t.data.repr.createOrUpdate(n,e.data.data).runInContext(a),t.data.sourceData=e.data,s.td.UpdateResult.Updated})}),ra=d.E.BuiltIn({name:"model-unitcell-3d",display:"Model Unit Cell",from:d.G.Molecule.Model,to:d.G.Shape.Representation3D,params:()=>({...eu})})({isApplicable:e=>!!tR.I.Provider.get(e.data),canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Model Unit Cell",async a=>{var n,i,o;let l=tR.I.Provider.get(e.data);if(!l)return s.lZ.Null;let u=ed(e.data,l,t),c=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>eu,m.hX.createMulti("Unit Cell",i,o,m.hX.StateBuilder,el));return await c.createOrUpdate(t,u).runInContext(a),new d.G.Shape.Representation3D({repr:c,sourceData:u},{label:"Unit Cell",description:l.spacegroup.name})}),update:({a:e,b:t,newParams:r})=>l.iQ.create("Model Unit Cell",async a=>{let n=tR.I.Provider.get(e.data);if(!n)return s.td.UpdateResult.Null;let i={...t.data.repr.props,...r},o=ed(e.data,n,i);return await t.data.repr.createOrUpdate(i,o).runInContext(a),t.data.sourceData=o,s.td.UpdateResult.Updated})}),rn=d.E.BuiltIn({name:"structure-bounding-box-3d",display:"Bounding Box",from:d.G.Molecule.Structure,to:d.G.Shape.Representation3D,params:{radiu
7319s:c.e.Numeric(.05,{min:.01,max:4,step:.01},{isEssential:!0}),color:c.e.Color(p.t.red,{isEssential:!0}),...J.K.Params}})({canAutoUpdate:()=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Bounding Box",async r=>{let a=M((e,t,r,a)=>{let n=(0,tz.getBoxMesh)(t.box,t.radius,null==a?void 0:a.geometry);return h.b.create("Bouding Box",t,n,()=>t.color,()=>1,()=>"Bounding Box")},J.K.Utils);return await a.createOrUpdate(t,{box:e.data.boundary.box,radius:t.radius,color:t.color}).runInContext(r),new d.G.Shape.Representation3D({repr:a,sourceData:e.data},{label:"Bounding Box"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Bounding Box",async r=>(await t.data.repr.createOrUpdate(a,{box:e.data.boundary.box,radius:a.radius,color:a.color}).runInContext(r),t.data.sourceData=e.data,s.td.UpdateResult.Updated))}),ri=d.E.BuiltIn({name:"structure-selections-distance-3d",display:"3D Distance",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...eT})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Distance",async a=>{var n,i,o;let s=(0,eD.Oq)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>eT,m.hX.createMulti("Distance",i,o,m.hX.StateBuilder,eS));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Distance"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Distance",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.Oq)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),ro=d.E.BuiltIn({name:"structure-selections-angle-3d",display:"3D Angle",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tr})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Angle",async a=>{var n,i,o;let s=(0,eD.OQ)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>tr,m.hX.createMulti("Angle",i,o,m.hX.StateBuilder,tt));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Angle"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Angle",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.OQ)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rs=d.E.BuiltIn({name:"structure-selections-dihedral-3d",display:"3D Dihedral",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tS})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Dihedral",async a=>{var n,i,o;let s=(0,eD.K$)(e.data),l=(i={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},o=()=>tS,m.hX.createMulti("Dihedral",i,o,m.hX.StateBuilder,tx));return await l.createOrUpdate(t,s).runInContext(a),new d.G.Shape.Representation3D({repr:l,sourceData:s},{label:"Dihedral"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Dihedral",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.K$)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rl=d.E.BuiltIn({name:"structure-selections-label-3d",display:"3D Label",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...eP})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Label",async a=>{var n,i,o,s,l;let u=(0,eD._$)(e.data),c=(s={webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},l=()=>eP,m.hX.createMulti("Label",s,l,m.hX.StateBuilder,eM));await c.createOrUpdate(t,u).runInContext(a);let p=!!((null===(i=t.snapshotKey)||void 0===i?void 0:i.trim())||(null===(o=t.tooltip)||void 0===o?void 0:o.trim()));return c.setState({pickable:p,markerActions:p?S.E5.Highlighting:S.dd.None}),new d.G.Shape.Representation3D({repr:c,sourceData:u},{label:"Label"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Label",async r=>{var n,i;let o={...t.data.repr.props,...a},l=(0,eD._$)(e.data);await t.data.repr.createOrUpdate(o,l).runInContext(r),t.data.sourceData=l;let u=!!((null===(n=a.snapshotKey)||void 0===n?void 0:n.trim())||(null===(i=a.tooltip)||void 0===i?void 0:i.trim()));return t.data.repr.setState({pickable:u,markerActions:u?S.E5.Highlighting:S.dd.None}),s.td.UpdateResult.Updated})}),ru=d.E.BuiltIn({name:"structure-selections-orientation-3d",display:"3D Orientation",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...e$})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Orientation",async a=>{var n;let i=(0,eD.GW)(e.data),o=function(e,t){let r=m.hX.createMulti("Orientation",e,t,m.hX.StateBuilder,eY);return r.setState({markerActions:S.E5.Highlighting}),r}({webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},()=>e$);return await o.createOrUpdate(t,i).runInContext(a),new d.G.Shape.Representation3D({repr:o,sourceData:i},{label:"Orientation"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Orientation",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.GW)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})}),rc=d.E.BuiltIn({name:"structure-selections-plane-3d",display:"3D Plane",from:d.G.Molecule.Structure.Selections,to:d.G.Shape.Representation3D,params:()=>({...tV})})({canAutoUpdate:({oldParams:e,newParams:t})=>!0,apply:({a:e,params:t},r)=>l.iQ.create("Structure Plane",async a=>{var n;let i=(0,eD.cY)(e.data),o=function(e,t){let r=m.hX.createMulti("Plane",e,t,m.hX.StateBuilder,tU);return r.setState({markerActions:S.E5.Highlighting}),r}({webgl:null===(n=r.canvas3d)||void 0===n?void 0:n.webgl,...r.representation.structure.themes},()=>tV);return await o.createOrUpdate(t,i).runInContext(a),new d.G.Shape.Representation3D({repr:o,sourceData:i},{label:"Plane"})}),update:({a:e,b:t,oldParams:r,newParams:a},n)=>l.iQ.create("Structure Plane",async r=>{let n={...t.data.repr.props,...a},i=(0,eD.cY)(e.data);return await t.data.repr.createOrUpdate(n,i).runInContext(r),t.data.sourceData=i,s.td.UpdateResult.Updated})})},59990:function(e,t,r){r.r(t),r.d(t,{BoxShape3D:function(){return f},getBoxMesh:function(){return m}});var a=r(4376),n=r(89623),i=r(70759),o=r(48930),s=r(87144),l=r(93898),u=r(54854),c=r(7922),d=r(14086),p=r(72762);let f=p.E.BuiltIn({name:"box-shape-3d",display:"Box Shape",from:p.G.Root,to:p.G.Shape.Provider,params:{bottomLeft:d.e.Vec3((0,s.AO)()),topRight:d.e.Vec3(s.AO.create(1,1,1)),radius:d.e.Numeric(.15,{min:.01,max:4,step:.01}),color:d.e.Color(c.t.red)}})({canAutoUpdate:()=>!0,apply:({params:e})=>u.iQ.create("Shape Representation",async t=>new p.G.Shape.Provider({label:"Box",data:e,params:a.K.Params,getShape:(t,r)=>{let a=m(o.XZ.create(e.bottomLeft,e.topRight),e.radius);return l.b.create("Box",r,a,()=>r.color,()=>1,()=>"Box")},geometryUtils:a.K.Utils},{label:"Box"}))});function m(e,t,r){let a=s.AO.sub((0,s.AO)(),e.max,e.min),l=s.yb.fromTranslation((0,s.yb)(),s.AO.create(.5,.5,.5)),u=s.yb.fromScaling((0,s.yb)(),a),c=s.yb.fromTranslation((0,s.yb)(),e.min),d=s.yb.mul3((0,s.yb)(),c,u,l),p=n.V.createState(256,128,r);p.currentGroup=1,n.V.addCage(p,d,(0,i.pE)(),t,2,20);let f=n.V.getMesh(p),m=s.AO.scaleAndAdd((0,s.AO)(),e.min,a,.5),h=s.AO.distance(e.min,m);return f.setBoundingSphere(o.CP.create(m,h)),f}},22401:function(e,t,r){r.d(t,{Q:function(){return c},Xl:function(){return l},e5:function(){return s},x9:function(){return u}});var a=r(5862),n=r(67058),i=r(52755),o=r(86517);let s=n.createContext(void 0);class l extends n.Component{subscribe(e,t){void 0===this.subs&&(this.subs=[]),this.subs.push(e.subscribe(t))}componentWillUnmount(){if(this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}constructor(e,t){super(e),this.subs=void 0,this.plugin=t,this.init&&this.init()}}l.contextType=s;class u extends n.PureComponent{subscribe(e,t){void 0===this.subs&&(this.subs=[]),this.subs.push(e.subscribe(t))}componentWillUnmount(){if(this.subs){for(let e of this.subs)e.unsubscribe();this.subs=void 0}}constructor(e,t){super(e,t),this.subs=void 0,this.plugin=t,this.init&&this.init()}}u.contextType=s;class c extends l{toggleCollapsed(){this.setState({isCollapsed:!this.state.isCollapsed})}componentDidUpdate(e){void 0!==this.props.initiallyCollapsed&&e.initiallyCollapsed!==this.props.initiallyCollapsed&&this.setState({isCollapsed:this.props.initiallyCollapsed})}render(){var e;if(this.state.isHidden)return null;let t=this.state.header.toLowerCase().replace(/\s/g,""),r=this.state.isCollapsed?"msp-transform-wrapper msp-transform-wrapper-collapsed":"msp-transform-wrapper";return(0,a.jsxs)("div",{className:r,children:[(0,a.jsx)("div",{id:t,className:"msp-transform-header",children:(0,a.jsxs)(i.zx,{icon:this.state.brand?void 0:this.state.isCollapsed?o.Sr:o.x3,noOverflow:!0,onClick:()=>this.toggleCollapsed(),className:this.state.brand?`msp-transform-header-brand msp-transform-header-brand-${this.state.brand.accent}`:void 0,title:`Click to ${this.state.isCollapsed?"expand":"collapse"}`,children:[(0,a.jsx)(o.JO,{svg:null===(e=this.state.brand)||void 0===e?void 0:e.svg,inline:!0}),this.state.header,(0,a.jsx)("small",{style:{margin:"0 6px"},children:this.state.isCollapsed?"":this.state.description})]})}),!this.state.isCollapsed&&this.renderControls()]})}constructor(e,t){super(e,t);let r=this.defaultState();void 0!==e.initiallyCollapsed&&(r.isCollapsed=e.initiallyCollapsed),void 0!==e.header&&(r.header=e.header),this.state=r}}},75600:function(e,t,r){r.d(t,{P:function(){return s}});var a=r(5862),n=r(67058),i=r(52755),o=r(86517);class s extends n.PureComponent{constructor(){super(...arguments),this.hide=()=>this.props.onSelect(void 0)}render(){let e=this.props,t=(0,a.jsx)(l,{items:e.items,onSelect:e.onSelect,current:e.current,multiselect:this.props.multiselect,noOffset:this.props.noOffset,noAccent:this.props.noAccent});return(0,a.jsxs)("div",{className:`msp-action-menu-options${e.header?"":" msp-action-menu-options-no-header"}`,children:[e.header&&(0,a.jsx)(i.eQ,{header:e.header,title:e.title,initialExpanded:!0,hideExpander:!0,hideOffset:!0,onHeaderClick:this.hide,topRightIcon:o.sZ,children:t}),!e.header&&t]})}}!function(e){function t(t,r){let a;let{label:n,value:i,category:o,selected:s,icon:l,addOn:u,description:c}=r||{},d=[];for(let p=0;p<t.length;p++){let f;let m=t[p];if((null==r?void 0:r.filter)&&!r.filter(m))continue;let h=null==o?void 0:o(m),g=n?n(m):""+m,b=i?i(m):m,y=c?c(m):"string"==typeof m?m:void 0;h?(a||(a=new Map),(f=a.get(h))||(f=[e.Header(h,{description:h})],a.set(h,f),d.push(f))):f=d;let x=null==u?void 0:u(m);f.push({kind:"item",label:g,value:b,icon:l?l(m):void 0,selected:s?s(m):void 0,addOn:x,description:y})}return d}e.Header=function(e,t){return t?{kind:"header",label:e,...t}:{kind:"header",label:e}},e.Item=function(e,t,r){return{kind:"item",label:e,value:t,...r}},e.createItems=t;let r={value:e=>e[0],label:e=>e[1],category:e=>e[2]};e.createItemsFromSelectOptions=function(e,a){return t(e,a?{...r,...a}:r)},e.hasSelectedItem=function e(t){if(p(t))return!1;if(d(t))return!!t.selected;for(let r of t)if(e(r))return!0;return!1},e.findItem=function e(t,r){if(!p(t)){if(d(t))return t.value===r?t:void 0;for(let a of t){let t=e(a,r);if(t)return t}}},e.getFirstItem=function e(t){if(!p(t)){if(d(t))return t;for(let r of t){let t=e(r);if(t)return t}}}}(s||(s={}));class l extends n.PureComponent{constructor(){super(...arguments),this.state=l.createState(this.props),this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()},this.selectAll=()=>{let e=f(this.props.items,[]).filter(e=>!e.selected);this.props.onSelect(e)},this.selectNone=()=>{let e=f(this.props.items,[]).filter(e=>!!e.selected);this.props.onSelect(e)}}static createState(e,t){let r=c(e.items)&&p(e.items[0])?e.items[0]:void 0,a=(null==r||!r.isIndependent)&&(e.multiselect?s.hasSelectedItem(e.items):!!e.current&&!!s.findItem(e.items,e.current.value)||s.hasSelectedItem(e.items));return{header:r,hasCurrent:a,isExpanded:a||(null!=t?t:!!(null==r?void 0:r.initiallyExpanded))}}componentDidUpdate(e){if(this.props.items!==e.items||this.props.current!==e.current){let t=c(this.props.items)&&c(e.items)&&p(this.props.items[0])&&p(e.items[0])&&this.props.items[0].label===e.items[0].label?this.state.isExpanded:void 0;this.setState(l.createState(this.props,t))}}get multiselectHeader(){let{header:e,hasCurrent:t}=this.state;return(0,a.jsxs)("div",{className:"msp-flex-row msp-control-group-header",children:[(0,a.jsx)(i.zx,{icon:this.state.isExpanded?o.x3:o.Sr,flex:!0,noOverflow:!0,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}.${(null==e?void 0:e.description)?` ${null==e?void 0:e.description}`:""}`,children:t?(0,a.jsx)("b",{children:null==e?void 0:e.label}):null==e?void 0:e.label}),(0,a.jsx)(i.zx,{icon:o.pW,flex:!0,onClick:this.selectAll,style:{flex:"0 0 50px",textAlign:"right"},children:"All"}),(0,a.jsx)(i.zx,{icon:o.sZ,flex:!0,onClick:this.selectNone,style:{flex:"0 0 50px",textAlign:"right"},children:"None"})]})}get basicHeader(){let{header:e,hasCurrent:t}=this.state;return(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginTop:"1px"},children:(0,a.jsx)(i.zx,{noOverflow:!0,icon:this.state.isExpanded?o.x3:o.Sr,onClick:this.toggleExpanded,title:`Click to ${this.state.isExpanded?"collapse":"expand"}. ${(null==e?void 0:e.description)?null==e?void 0:e.description:""}`,children:t?(0,a.jsx)("b",{children:null==e?void 0:e.label}):null==e?void 0:e.label})})}render(){let{items:e,onSelect:t,current:r}=this.props;if(p(e))return null;if(d(e))return(0,a.jsx)(u,{item:e,onSelect:t,current:r,multiselect:this.props.multiselect});let{header:n}=this.state;return(0,a.jsxs)(a.Fragment,{children:[n&&(this.props.multiselect&&this.state.isExpanded?this.multiselectHeader:this.basicHeader),(0,a.jsx)("div",{className:this.props.noOffset?void 0:this.props.noAccent?"msp-control-offset":"msp-accent-offset",children:(!n||this.state.isExpanded)&&e.map((e,n)=>p(e)?null:d(e)?(0,a.jsx)(u,{item:e,onSelect:t,current:r,multiselect:this.props.multiselect},n):(0,a.jsx)(l,{items:e,onSelect:t,current:r,multiselect:this.props.multiselect,noAccent:!0},n))})]})}}let u=({item:e,onSelect:t,current:r,multiselect:n})=>{let o=r===e,s=e.addOn?{position:"relative"}:void 0;return(0,a.jsxs)(i.zx,{icon:e.icon,noOverflow:!0,className:"msp-action-menu-button",onClick:r=>t(n?[e]:e,r),disabled:e.disabled,style:s,title:e.description,children:[o||e.selected?(0,a.jsx)("b",{children:e.label}):e.label,e.addOn]})};function c(e){return!!e&&Array.isArray(e)}function d(e){return e&&"item"===e.kind}function p(e){return e&&"header"===e.kind}function f(e,t){if(p(e))return t;if(d(e))return t.push(e),t;for(let r of e)f(r,t);return t}},75679:function(e,t,r){let a;r.d(t,{CR:function(){return d},rm:function(){return f},qL:function(){return c}});var n=r(5862),i=r(70371),o=r(75042),s=r(67058),l=r(52755);let u=(0,r(34602).bc)([["black",0],["gray",8421504],["white",16777215],["red",13840661],["orange",14840576],["yellow",16565248],["green",6863872],["cyan",1484197],["blue",40160],["purple",8086783],["magenta",16394495],["violet",8200583]]);class c extends s.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.param.isExpanded||!!this.props.hideNameRow,lightness:0},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()},this.onClickSwatch=e=>{let t=i.Il.fromHexString(e.currentTarget.getAttribute("data-color")||"0");t!==this.props.value&&(this.props.param.isExpanded||this.setState({isExpanded:!1}),this.update(t))},this.onR=e=>{let[,t,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(e,t,r);a!==this.props.value&&this.update(a)},this.onG=e=>{let[t,,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(t,e,r);a!==this.props.value&&this.update(a)},this.onB=e=>{let[t,r]=i.Il.toRgb(this.props.value),a=i.Il.fromRgb(t,r,e);a!==this.props.value&&this.update(a)},this.onRGB=e=>{let t=i.Il.fromHexStyle(e.currentTarget.value||"0"
7319);t!==this.props.value&&this.update(t)},this.onLighten=()=>{this.update(i.Il.lighten(this.props.value,.1))},this.onDarken=()=>{this.update(i.Il.darken(this.props.value,.1))}}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}swatch(){return(0,n.jsx)("div",{className:"msp-combined-color-swatch",children:u.map(e=>(0,n.jsx)(l.zx,{inline:!0,"data-color":e[1],onClick:this.onClickSwatch,style:{background:i.Il.toStyle(e[1])}},e[1]))})}render(){let e=this.props.param.label||(0,o.l9)(this.props.name),[t,r,a]=i.Il.toRgb(this.props.value),s=(0,n.jsxs)(n.Fragment,{children:[this.swatch(),(0,n.jsx)(l.Ft,{label:"RGB",className:"msp-control-label-short",control:(0,n.jsxs)("div",{style:{display:"flex",textAlignLast:"center",left:"80px"},children:[(0,n.jsx)(l.oi,{onChange:this.onR,numeric:!0,value:t,delayMs:250,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)(l.oi,{onChange:this.onG,numeric:!0,value:r,delayMs:250,style:{order:2,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)(l.oi,{onChange:this.onB,numeric:!0,value:a,delayMs:250,style:{order:3,flex:"1 1 auto",minWidth:0},className:"msp-form-control",onEnter:this.props.onEnter,blurOnEnter:!0,blurOnEscape:!0}),(0,n.jsx)("input",{onInput:this.onRGB,type:"color",value:i.Il.toHexStyle(this.props.value),style:{order:4,flex:"1 1 auto",minWidth:"32px",width:"32px",height:"32px",padding:"0 2px 0 2px",background:"none",border:"none",cursor:"pointer"}})]})}),(0,n.jsxs)("div",{style:{display:"flex",textAlignLast:"center"},children:[(0,n.jsx)(l.zx,{onClick:this.onLighten,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Lighten"}),(0,n.jsx)(l.zx,{onClick:this.onDarken,style:{order:1,flex:"1 1 auto",minWidth:0},className:"msp-form-control",children:"Darken"})]})]});return this.props.hideNameRow?s:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(l.Ft,{title:this.props.param.description,label:e,control:(0,n.jsx)(l.zx,{onClick:this.toggleExpanded,inline:!0,className:"msp-combined-color-button",style:{background:i.Il.toStyle(this.props.value)}})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:s})]})}}function d(){return a||(a=(0,n.jsx)(n.Fragment,{children:u.map(e=>(0,n.jsx)("option",{value:e[1],style:{background:`${i.Il.toStyle(e[1])}`},children:(0,o.ce)(e[0])},e[1]))}))}let p=function(){let e=new Map;for(let t of u)e.set(t[1],t[0]);return e}();function f(e){return p.has(e)?null:(0,n.jsx)("option",{value:e,style:{background:`${i.Il.toStyle(e)}`},children:i.Il.toRgbString(e)},i.Il.toHexString(e))}},52755:function(e,t,r){r.d(t,{CO:function(){return m},Ft:function(){return g},M$:function(){return d},eQ:function(){return s},hU:function(){return f},iI:function(){return h},oi:function(){return u},wc:function(){return c},zx:function(){return p}});var a=r(5862),n=r(67058),i=r(70371),o=r(86517);class s extends n.Component{constructor(){super(...arguments),this.state={isExpanded:!!this.props.initialExpanded},this.headerClicked=()=>{this.props.onHeaderClick?this.props.onHeaderClick():this.setState({isExpanded:!this.state.isExpanded})}}render(){let e=this.props.hideOffset?"msp-control-group-children":"msp-control-group-children msp-control-offset";return this.props.childrenClassName&&(e+=" "+this.props.childrenClassName),(0,a.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative",marginTop:this.props.noTopMargin?0:void 0},children:[(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginLeft:this.props.headerLeftMargin},title:this.props.title,children:(0,a.jsxs)(p,{onClick:this.headerClicked,children:[!this.props.hideExpander&&(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.Sr:o.x3}),this.props.topRightIcon&&(0,a.jsx)(o.JO,{svg:this.props.topRightIcon,style:{position:"absolute",right:"2px",top:0}}),(0,a.jsx)("b",{children:this.props.header})]})}),this.state.isExpanded&&(0,a.jsx)("div",{className:e,style:{display:this.state.isExpanded?"block":"none",maxHeight:this.props.maxHeight,overflow:"hidden",overflowY:"auto"},children:this.props.children})]})}}function l(e){return e}class u extends n.PureComponent{constructor(){super(...arguments),this.input=n.createRef(),this.delayHandle=void 0,this.pendingValue=void 0,this.state={originalValue:"",value:""},this.onBlur=()=>{this.setState({value:""+this.state.originalValue}),this.props.onBlur&&this.props.onBlur()},this.raiseOnChange=()=>{void 0!==this.pendingValue&&(this.props.onChange(this.pendingValue),this.pendingValue=void 0)},this.onChange=e=>{let t=e.target.value;if(this.props.isValid&&!this.props.isValid(t)||this.props.numeric&&Number.isNaN(+t)){this.clearTimeout(),this.setState({value:t});return}if(this.props.numeric)this.setState({value:t},()=>this.triggerChanged(t,+t));else{let e=(this.props.toValue||l)(t),r=(this.props.fromValue||l)(e);this.setState({value:r},()=>this.triggerChanged(r,e))}},this.onKeyUp=e=>
7319{(27===e.charCode||27===e.keyCode||"Escape"===e.key)&&this.props.blurOnEscape&&this.input.current&&this.input.current.blur()},this.onKeyPress=e=>{(13===e.keyCode||13===e.charCode||"Enter"===e.key)&&(this.isPending&&(this.clearTimeout(),this.raiseOnChange()),this.props.blurOnEnter&&this.input.current&&this.input.current.blur(),this.props.onEnter&&this.props.onEnter()),e.stopPropagation()}}get isPending(){return void 0!==this.delayHandle}clearTimeout(){this.isPending&&(clearTimeout(this.delayHandle),this.delayHandle=void 0)}triggerChanged(e,t){this.clearTimeout(),e!==this.state.originalValue&&(this.props.delayMs?(this.pendingValue=t,this.delayHandle=setTimeout(this.raiseOnChange,this.props.delayMs)):this.props.onChange(t))}static getDerivedStateFromProps(e,t){let r=e.fromValue?e.fromValue(e.value):e.value;return r===t.originalValue?null:{originalValue:r,value:r}}render(){return(0,a.jsx)("input",{type:"text",className:this.props.className,style:this.props.style,ref:this.input,onBlur:this.onBlur,value:this.state.value,placeholder:this.props.placeholder,onChange:this.onChange,onKeyPress:this.props.onEnter||this.props.blurOnEnter||this.props.blurOnEscape?this.onKeyPress:void 0,onKeyDown:this.props.blurOnEscape?this.onKeyUp:void 0,disabled:!!this.props.isDisabled})}}class c extends n.Component{constructor(){super(...arguments),this.state={isExpanded:!1},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){let{label:e,pivot:t,controls:r}=this.props;return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(g,{label:(0,a.jsxs)(a.Fragment,{children:[e,(0,a.jsx)("button",{className:"msp-btn-link msp-btn-icon msp-control-group-expander",onClick:this.toggleExpanded,title:`${this.state.isExpanded?"Less":"More"} options`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.OE:o.so,style:{display:"inline-block"}})})]}),control:t,children:this.props.colorStripe&&(0,a.jsx)("div",{className:"msp-expandable-group-color-stripe",style:{backgroundColor:i.Il.toStyle(this.props.colorStripe)}})}),this.state.isExpanded&&(0,a.jsx)("div",{className:"msp-control-offset",children:r})]})}}function d(e){return(0,a.jsxs)("div",{className:`msp-section-header${e.accent?" msp-transform-header-brand-"+e.accent:""}`,children:[e.icon&&(0,a.jsx)(o.JO,{svg:e.icon}),e.title," ",(0,a.jsx)("small",{children:e.desc})]})}function p(e){let t,r="msp-btn";return e.inline||(r+=" msp-btn-block"),e.noOverflow&&(r+=" msp-no-overflow"),e.flex&&(r+=" msp-flex-item"),("on"===e.commit||e.commit)&&(r+=" msp-btn-commit msp-btn-commit-on"),"off"===e.commit&&(r+=" msp-btn-commit msp-btn-commit-off"),e.children||(r+=" msp-btn-childless"),e.className&&(r+=" "+e.className),e.flex&&("number"==typeof e.flex?t={flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:"string"==typeof e.flex&&(t={flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex})),e.style&&(t?Object.assign(t,e.style):t=e.style),(0,a.jsxs)("button",{onClick:e.onClick,title:e.title,disabled:e.disabled,style:t,className:r,"data-id":e["data-id"],"data-color":e["data-color"],onContextMenu:e.onContextMenu,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,children:[e.icon&&(0,a.jsx)(o.JO,{svg:e.icon}),e.children]})}function f(e){let t,r=`msp-btn msp-btn-icon${e.small?"-small":""}${e.className?" "+e.className:""}`;return void 0!==e.toggleState&&(r+=` msp-btn-link-toggle-${e.toggleState?"on":"off"}`),e.transparent&&(r+=" msp-transparent-bg"),e.flex&&(t="boolean"==typeof e.flex?{flex:"0 0 32px",padding:0}:"number"==typeof e.flex?{flex:`0 0 ${e.flex}px`,padding:0,maxWidth:`${e.flex}px`}:{flex:`0 0 ${e.flex}`,padding:0,maxWidth:e.flex}),e.style&&(t?Object.assign(t,e.style):t=e.style),(0,a.jsxs)("button",{className:r,onClick:e.onClick,title:e.title,disabled:e.disabled,"data-id":e["data-id"],style:t,children:[e.svg&&(0,a.jsx)(o.JO,{svg:e.svg}),e.extraContent]}
7319)}class m extends n.PureComponent{constructor(){super(...arguments),this.onClick=e=>{e.currentTarget.blur(),this.props.toggle()}}render(){let e=this.props,t=e.label,r=e.isSelected?`${e.className||""} msp-control-current`:e.className;return(0,a.jsx)(p,{icon:this.props.icon,onClick:this.onClick,title:this.props.title,inline:this.props.inline,disabled:e.disabled,style:e.style,className:r,children:t&&this.props.isSelected?(0,a.jsx)("b",{children:t}):t})}}class h extends n.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.initiallyExpanded},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}render(){return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)("div",{className:"msp-control-group-header",style:{marginTop:void 0!==this.props.marginTop?this.props.marginTop:"1px",marginLeft:this.props.headerLeftMargin},children:(0,a.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,style:this.props.headerStyle,children:[(0,a.jsx)(o.JO,{svg:this.state.isExpanded?o.x3:o.Sr}),this.props.header]})}),this.state.isExpanded&&(this.props.noOffset?this.props.children:(0,a.jsx)("div",{className:this.props.accent?"msp-accent-offset":"msp-control-offset",children:this.props.children}))]})}}function g(e){let t="msp-control-row";return e.className&&(t+=" "+e.className),(0,a.jsxs)("div",{className:t,children:[(0,a.jsx)("span",{className:"msp-control-row-label",title:e.title,children:e.label}),(0,a.jsx)("div",{className:"msp-control-row-ctrl",children:e.control}),e.children]})}},86517:function(e,t,r){r.d(t,{$z:function(){return tt},B1:function(){return K},BO:function(){return eo},Bk:function(){return tu},C:function(){return eg},Ds:function(){return er},E5:function(){return O},GB:function(){return g},GH:function(){return th},GT:function(){return eX},Hs:function(){return el},Hx:function(){return eL},JO:function(){return n},Md:function(){return eZ},Ne:function(){return e8},Nj:function(){return tb},O4:function(){return X},OE:function(){return e0},Ot:function(){return tf},P3:function(){return Z},Pj:function(){return tv},Ri:function(){return ti},S1:function(){return T},SB:function(){return eR},Sr:function(){return F},Sv:function(){return e$},U9:function(){return en},UY:function(){return eV},X4:function(){return z},Yh:function(){return eT},Yv:function(){return tg},Z:function(){return eN},Zj:function(){return G},_$:function(){return c},_U:function(){return H},bu:function(){return m},cS:function(){return eD},dU:function(){return eK},dw:function(){return ep},e0:function(){return eb},e3:function(){return eA},ec:function(){return e9},ed:function(){return eB},fw:function(){return V},gu:function(){return ts},gv:function(){return A},h5:function(){return l},hY:function(){return e2},hc:function(){return ta},iZ:function(){return eM},ip:function(){return M},jE:function(){return k},ks:function(){return eH},lW:function(){return p},n2:function(){return ee},n3:function(){return ex},nI:function(){return td},pW:function(){return ec},qN:function(){return y},rd:function(){return e4},sZ:function(){return em},so:function(){return D},uL:function(){return eO},x3:function(){return _},yi:function(){return $},yn:function(){return ty}});var a=r(5862);function n(e){return e.svg?(0,a.jsx)("span",{className:`msp-icon msp-material-icon${e.inline?" msp-icon-inline":""}`,title:e.title,style:e.style,children:(0,a.jsx)(e.svg,{})}):null}let i=(0,a.jsx)("circle",{r:"6px",id:"circle-left",cy:"12px",cx:"8px",strokeWidth:"1px"}),o=(0,a.jsx)("circle",{r:"6px",id:"circle-right",cy:"12px",cx:"16px",strokeWidth:"1px"}),s=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"}),(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"})]})]});function l(){return s}let u=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o,(0,a.jsxs)("mask",{id:"mask-left",children:[(0,a.jsx)("use",{href:"#circle-left",fill:"white",stroke:"white"}),(0,a.jsx)("use",{href:"#circle-right",fill:"black",strokeWidth:"0px",stroke:"white"})]})]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",mask:"url(#mask-left)"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function c(){return u}let d=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o,(0,a.jsx)("clipPath",{id:"clip-left",children:(0,a.jsx)("use",{href:"#circle-right"})})]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-filled",clipPath:"url(#clip-left)"}),(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-empty"})]})]});function p(){return d}let f=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsxs)("defs",{children:[i,o]}),(0,a.jsxs)("g",{children:[(0,a.jsx)("use",{href:"#circle-left",className:"msp-shape-empty"}),(0,a.jsx)("use",{href:"#circle-right",className:"msp-shape-filled"})]})]});function m(){return f}let h=(0,a.jsx)("svg",{width:"17px",height:"17px",viewBox:"0 0 299.463 299.463",strokeWidth:"6px",children:(0,a.jsx)("g",{children:(0,a.jsx)("path",{d:"M256.851,173.832v-48.201c22.916-4.918,34.151-30.668,22.556-50.771c-11.547-20.004-39.486-23.251-55.242-5.844 l-41.746-24.106C189.618,22.603,172.861,0,149.734,0c-23.132,0-39.881,22.609-32.685,44.911L75.305,69.016 C59.522,51.586,31.597,54.88,20.061,74.863c-11.63,20.163-0.298,45.862,22.557,50.769v48.2 c-22.821,4.898-34.195,30.591-22.556,50.771c11.529,19.972,39.454,23.285,55.242,5.845l41.746,24.106 c-7.199,22.3
731908,9.559,44.911,32.685,44.911c23.132,0,39.88-22.609,32.685-44.911l41.745-24.106 c15.817,17.469,43.73,14.099,55.242-5.844c0,0,0-0.001,0.001-0.002c4.587-7.953,5.805-17.213,3.431-26.076 C279.392,185.657,269.129,176.461,256.851,173.832z M249.62,72.088c20.568,0,27.428,27.191,10.008,37.239 c-0.003,0.002-0.006,0.003-0.009,0.005c-10.04,5.81-22.85,1.762-27.877-8.475C225.206,87.548,234.938,72.088,249.62,72.088z M149.734,14.4c11.005,0,19.958,8.954,19.958,19.959c0,11.127-9.077,19.958-19.958,19.958c-10.95,0-19.958-8.9-19.958-19.958 C129.776,23.354,138.729,14.4,149.734,14.4z M39.84,109.328c-17.451-10.067-10.534-37.24,10.01-37.24 c15.311,0,24.922,16.653,17.251,29.942C61.681,111.397,49.517,114.925,39.84,109.328z M59.802,224.702 c-9.535,5.503-21.768,2.229-27.268-7.298c-7.639-13.242,1.887-29.945,17.236-29.945c0.013,0,0.027,0,0.04,0 C70.07,187.48,77.49,214.469,59.802,224.702z M149.734,285.062c-11.005,0-19.958-8.954-19.958-19.958 c0-11.127,9.077-19.958,19.958-19.958c10.954,0,19.958,8.903,19.958,19.958C169.693,276.109,160.74,285.062,149.734,285.062z M216.953,217.982l-41.727,24.095c-13.778-15.22-37.459-14.94-50.983,0l-41.728-24.096c6.196-19.289-5.541-39.835-25.498-44.149 V125.63c19.752-4.268,31.762-24.65,25.498-44.149l41.727-24.095c13.629,15.055,37.32,15.093,50.983,0l41.728,24.096 c-6.196,19.29,5.534,39.835,25.498,44.149v48.202C222.61,178.123,210.721,198.581,216.953,217.982z M266.935,217.404 c-5.501,9.528-17.732,12.802-27.261,7.302c-17.682-10.23-10.301-37.247,10.032-37.247 C264.984,187.459,274.602,204.112,266.935,217.404z"})})});function g(){return h}let b=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M21,16.5C21,16.88 20.79,17.21 20.47,17.38L12.57,21.82C12.41,21.94 12.21,22 12,22C11.79,22 11.59,21.94 11.43,21.82L3.53,17.38C3.21,17.21 3,16.88 3,16.5V7.5C3,7.12 3.21,6.79 3.53,6.62L11.43,2.18C11.59,2.06 11.79,2 12,2C12.21,2 12.41,2.06 12.57,2.18L20.47,6.62C20.79,6.79 21,7.12 21,7.5V16.5M12,4.15L6.04,7.5L12,10.85L17.96,7.5L12,4.15M5,15.91L11,19.29V12.58L5,9.21V15.91M19,15.91V9.21L13,12.58V19.29L19,15.91Z"})});function y(){return b}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M17,22V20H20V17H22V20.5C22,20.89 21.84,21.24 21.54,21.54C21.24,21.84 20.89,22 20.5,22H17M7,22H3.5C3.11,22 2.76,21.84 2.46,21.54C2.16,21.24 2,20.89 2,20.5V17H4V20H7V22M17,2H20.5C20.89,2 21.24,2.16 21.54,2.46C21.84,2.76 22,3.11 22,3.5V7H20V4H17V2M7,2V4H4V7H2V3.5C2,3.11 2.16,2.76 2.46,2.46C2.76,2.16 3.11,2 3.5,2H7M13,17.25L17,14.95V10.36L13,12.66V17.25M12,10.92L16,8.63L12,6.28L8,8.63L12,10.92M7,14.95L11,17.25V12.66L7,10.36V14.95M18.23,7.59C18.73,7.91 19,8.34 19,8.91V15.23C19,15.8 18.73,16.23 18.23,16.55L12.75,19.73C12.25,20.05 11.75,20.05 11.25,19.73L5.77,16.55C5.27,16.23 5,15.8 5,15.23V8.91C5,8.34 5.27,7.91 5.77,7.59L11.25,4.41C11.5,4.28 11.75,4.22 12,4.22C12.25,4.22 12.5,4.28 12.75,4.41L18.23,7.59Z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M16,4L9,8.04V15.96L16,20L23,15.96V8.04M16,6.31L19.8,8.5L16,10.69L12.21,8.5M0,7V9H7V7M11,10.11L15,12.42V17.11L11,14.81M21,10.11V14.81L17,17.11V12.42M2,11V13H7V11M4,15V17H7V15"})});let x=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10.07,14.27C10.57,14.03 11.16,14.25 11.4,14.75L13.7,19.74L15.5,18.89L13.19,13.91C12.95,13.41 13.17,12.81 13.67,12.58L13.95,12.5L16.25,12.05L8,5.12V15.9L9.82,14.43L10.07,14.27M13.64,21.97C13.14,22.21 12.54,22 12.31,21.5L10.13,16.76L7.62,18.78C7.45,18.92 7.24,19 7,19A1,1 0 0,1 6,18V3A1,1 0 0,1 7,2C7.24,2 7.47,2.09 7.64,2.23L7.65,2.22L19.14,11.86C19.57,12.22 19.62,12.85 19.27,13.27C19.12,13.45 18.91,13.57 18.7,13.61L15.54,14.23L17.74,18.96C18,19.46 17.76,20.05 17.26,20.28L13.64,21.97Z"})});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{fill:"currentColor",d:"M14,2H6A2,2 0 0,0 4,4V20A2,2 0 0,0 6,22H18A2,2 0 0,0 20,20V8L14,2M18,20H6V4H13V9H18V20Z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{fill:"currentColor",d:"M20,11H23V13H20V11M1,11H4V13H1V11M13,1V4H11V1H13M4.92,3.5L7.05,5.64L5.63,7.05L3.5,4.93L4.92,3.5M16.95,5.63L19.07,3.5L20.5,4.93L18.37,7.05L16.95,5.63M12,6A6,6 0 0,1 18,12C18,14.22 16.79,16.16 15,17.2V19A1,1 0 0,1 14,20H10A1,1 0 0,1 9,19V17.2C7.21,16.16 6,14.22 6,12A6,6 0 0,1 12,6
7319M14,21V22A1,1 0 0,1 13,23H11A1,1 0 0,1 10,22V21H14M11,18H13V15.87C14.73,15.43 16,13.86 16,12A4,4 0 0,0 12,8A4,4 0 0,0 8,12C8,13.86 9.27,15.43 11,15.87V18Z"})});let S=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{fill:"currentColor",d:"M7.5,5.6L5,7L6.4,4.5L5,2L7.5,3.4L10,2L8.6,4.5L10,7L7.5,5.6M19.5,15.4L22,14L20.6,16.5L22,19L19.5,17.6L17,19L18.4,16.5L17,14L19.5,15.4M22,2L20.6,4.5L22,7L19.5,5.6L17,7L18.4,4.5L17,2L19.5,3.4L22,2M13.34,12.78L15.78,10.34L13.66,8.22L11.22,10.66L13.34,12.78M14.37,7.29L16.71,9.63C17.1,10 17.1,10.65 16.71,11.04L5.04,22.71C4.65,23.1 4,23.1 3.63,22.71L1.29,20.37C0.9,20 0.9,19.35 1.29,18.96L12.96,7.29C13.35,6.9 14,6.9 14.37,7.29Z"})});function T(){return S}let C=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M3 17.25V21H6.75L17.81 9.93L14.06 6.18L3 17.25M22.61 18.36L18.36 22.61L13.16 17.41L14.93 15.64L15.93 16.64L18.4 14.16L19.82 15.58L18.36 17L19.42 18L20.84 16.6L22.61 18.36M6.61 10.83L1.39 5.64L5.64 1.39L7.4 3.16L4.93 5.64L6 6.7L8.46 4.22L9.88 5.64L8.46 7.05L9.46 8.05L6.61 10.83M20.71 7C21.1 6.61 21.1 6 20.71 5.59L18.37 3.29C18 2.9 17.35 2.9 16.96 3.29L15.12 5.12L18.87 8.87L20.71 7Z"})});function O(){return C}let I=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22 11V3h-7v3H9V3H2v8h7V8h2v10h4v3h7v-8h-7v3h-2V8h2v3h7zM7 9H4V5h3v4zm10 6h3v4h-3v-4zm0-10h3v4h-3V5z"})});function A(){return I}let w=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})});function D(){return w}let E=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20 12l-1.41-1.41L13 16.17V4h-2v12.17l-5.58-5.59L4 12l8 8 8-8z"})});function M(){return P}let P=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15 2c-2.71 0-5.05 1.54-6.22 3.78-1.28.67-2.34 1.72-3 3C3.54 9.95 2 12.29 2 15c0 3.87 3.13 7 7 7 2.71 0 5.05-1.54 6.22-3.78 1.28-.67 2.34-1.72 3-3C20.46 14.05 22 11.71 22 9c0-3.87-3.13-7-7-7M9 20c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.87 3.13 7 7 7-.84.63-1.88 1-3 1m3-3c-2.76 0-5-2.24-5-5 0-1.12.37-2.16 1-3 0 3.86 3.13 6.99 7 7-.84.63-1.88 1-3 1m4.7-3.3c-.53.19-1.1.3-1.7.3-2.76 0-5-2.24-5-5 0-.6.11-1.17.3-1.7.53-.19 1.1-.3 1.7-.3 2.76 0 5 2.24 5 5 0 .6-.11 1.17-.3 1.7M19 12c0-3.86-3.13-6.99-7-7 .84-.63 1.87-1 3-1 2.76 0 5 2.24 5 5 0 1.12-.37 2.16-1 3"})});function k(){return E}let B=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 10l5 5 5-5z"})});function _(){return B}let R=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10 17l5-5-5-5v10z"})});function F(){return R}let L=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 12l1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8-8 8z"})});function z(){return L}let N=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6v3l4-4-4-4v3c-4.42 0-8 3.58-8 8 0 1.57.46 3.03 1.24 4.26L6.7 14.8c-.45-.83-.7-1.79-.7-2.8 0-3.31 2.69-6 6-6zm6.76 1.74L17.3 9.2c.44.84.7 1.79.7 2.8 0 3.31-2.69 6-6 6v-3l-4 4 4 4v-3c4.42 0 8-3.58 8-8 0-1.57-.46-3.03-1.24-4.26z"})});function G(){return N}let U=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 12h-2v3h-3v2h5zM7 9h3V7H5v5h2zm14-6H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m0 16.01H3V4.99h18z"})});function V(){return U}let j=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 13c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm-3 .5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM6 5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm15 5.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM14 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0-3.5c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zm-11 10c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm7 7c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm0-17c.28 0 .5-.22.5-.5s-.22-.5-.5-.5-.5.22-.5.5.22.5.5.5zM10 7c.55 0 1-.45 1-1s-.45-1-1-1-1 .45-1 1 .45 1 1 1zm0 5.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm8 .5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-8c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0-4c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm3 8.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zM14 17c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm0 3.5c-.28 0-.5.22-.5.5s.22.5.5.5.5-.22.5-.5-.22-.5-.5-.5zm-4-12c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0 8.5c-.55 0-1 .45-1 1s.45 1 1 1 1-.45 1-1-.45-1-1-1zm4-4.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-4c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z"})});function H(){return j}let q=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15 7v12.97l-4.21-1.81-.79
7319-.34-.79.34L5 19.97V7h10m4-6H8.99C7.89 1 7 1.9 7 3h10c1.1 0 2 .9 2 2v13l2 1V3c0-1.1-.9-2-2-2zm-4 4H5c-1.1 0-2 .9-2 2v16l7-3 7 3V7c0-1.1-.9-2-2-2z"})});function X(){return q}let W=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34a.9959.9959 0 00-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z"})});function K(){return W}let Q=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.61 18.99l-9.08-9.08c.93-2.34.45-5.1-1.44-7C9.79.61 6.21.4 3.66 2.26L7.5 6.11 6.08 7.52 2.25 3.69C.39 6.23.6 9.82 2.9 12.11c1.86 1.86 4.57 2.35 6.89 1.48l9.11 9.11c.39.39 1.02.39 1.41 0l2.3-2.3c.4-.38.4-1.01 0-1.41zm-3 1.6l-9.46-9.46c-.61.45-1.29.72-2 .82-1.36.2-2.79-.21-3.83-1.25C3.37 9.76 2.93 8.5 3 7.26l3.09 3.09 4.24-4.24-3.09-3.09c1.24-.07 2.49.37 3.44 1.31 1.08 1.08 1.49 2.57 1.24 3.96-.12.71-.42 1.37-.88 1.96l9.45 9.45-.88.89z"})});function Z(){return Q}let Y=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M22.7 19l-9.1-9.1c.9-2.3.4-5-1.5-6.9-2-2-5-2.4-7.4-1.3L9 6 6 9 1.6 4.7C.4 7.1.9 10.1 2.9 12.1c1.9 1.9 4.6 2.4 6.9 1.5l9.1 9.1c.4.4 1 .4 1.4 0l2.3-2.3c.5-.4.5-1.1.1-1.4z"})});function $(){return Y}let J=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M14.25 2.26l-.08-.04-.01.02C13.46 2.09 12.74 2 12 2 6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10c0-4.75-3.31-8.72-7.75-9.74zM19.41 9h-7.99l2.71-4.7c2.4.66 4.35 2.42 5.28 4.7zM13.1 4.08L10.27 9l-1.15 2L6.4 6.3C7.84 4.88 9.82 4 12 4c.37 0 .74.03 1.1.08zM5.7 7.09L8.54 12l1.15 2H4.26C4.1 13.36 4 12.69 4 12c0-1.85.64-3.55 1.7-4.91zM4.59 15h7.98l-2.71 4.7c-2.4-.67-4.34-2.42-5.27-4.7zm6.31 4.91L14.89 13l2.72 4.7C16.16 19.12 14.18 20 12 20c-.38 0-.74-.04-1.1-.09zm7.4-3l-4-6.91h5.43c.17.64.27 1.31.27 2 0 1.85-.64 3.55-1.7 4.91z"})});function ee(){return J}let et=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9.4 10.5l4.77-8.26C13.47 2.09 12.75 2 12 2c-2.4 0-4.6.85-6.32 2.25l3.66 6.35.06-.1zM21.54 9c-.92-2.92-3.15-5.26-6-6.34L11.88 9h9.66zm.26 1h-7.49l.29.5 4.76 8.25C21 16.97 22 14.61 22 12c0-.69-.07-1.35-.2-2zM8.54 12l-3.9-6.75C3.01 7.03 2 9.39 2 12c0 .69.07 1.35.2 2h7.49l-1.15-2zm-6.08 3c.92 2.92 3.15 5.26 6 6.34L12.12 15H2.46zm11.27 0l-3.9 6.76c.7.15 1.42.24 2.17.24 2.4 0 4.6-.85 6.32-2.25l-3.66-6.35-.93 1.6z"})});function er(){return et}let ea=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm3.59-13L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41z"})});function en(){return ea}let ei=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"})});function eo(){return ei}let es=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 8c-2.21 0-4 1.79-4 4s1.79 4 4 4 4-1.79 4-4-1.79-4-4-4zm-7 7H3v4c0 1.1.9 2 2 2h4v-2H5v-4zM5 5h4V3H5c-1.1 0-2 .9-2 2v4h2V5zm14-2h-4v2h4v4h2V5c0-1.1-.9-2-2-2zm0 16h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4z"})});function el(){return es}let eu=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"})});function ec(){return eu}let ed=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function ep(){return ed}let ef=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"})});function em(){return ef}let eh=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19.35 10.04C18.67 6.59
731915.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"})});function eg(){return eh}let ev=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z"})});function eb(){return ev}let ey=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M16 1H4c-1.1 0-2 .9-2 2v14h2V3h12V1zm-1 4H8c-1.1 0-1.99.9-1.99 2L6 21c0 1.1.89 2 1.99 2H19c1.1 0 2-.9 2-2V11l-6-6zM8 21V7h6v5h5v9H8z"})});function ex(){return ey}let eS=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M17 15h2V7c0-1.1-.9-2-2-2H9v2h8v8zM7 17V1H5v4H1v2h4v10c0 1.1.9 2 2 2h10v4h2v-4h4v-2H7z"})});function eT(){return eS}let eC=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M3 5v4h2V5h4V3H5c-1.1 0-2 .9-2 2zm2 10H3v4c0 1.1.9 2 2 2h4v-2H5v-4zm14 4h-4v2h4c1.1 0 2-.9 2-2v-4h-2v4zm0-16h-4v2h4v4h2V5c0-1.1-.9-2-2-2z"})});function eO(){return eC}let eI=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V5h14v14zm-5.04-6.71l-2.75 3.54-1.96-2.36L6.5 17h11l-3.54-4.71z"})});function eA(){return eI}let ew=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M16 9v10H8V9h8m-1.5-6h-5l-1 1H5v2h14V4h-3.5l-1-1zM18 7H6v12c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7z"})});function eD(){return ew}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z"})});let eE=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"})});function eM(){return eE}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"})});let eP=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm2 4v-2H3c0 1.1.89 2 2 2zM3 9h2V7H3v2zm12 12h2v-2h-2v2zm4-18H9c-1.11 0-2 .9-2 2v10c0 1.1.89 2 2 2h10c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 12H9V5h10v10zm-8 6h2v-2h-2v2zm-4 0h2v-2H7v2z"})});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"})});let ek=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})});function eB(){return ek}let e_=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"})});function eR(){return e_}let eF=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M11 18h2v-2h-2v2zm1-16C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8zm0-14c-2.21 0-4 1.79-4 4h2c0-1.1.9-2 2-2s2 .9 2 2c0 2-3 1.75-3 5h2c0-2.25 3-2.5 3-5 0-2.21-1.79-4-4-4z"})});function eL(){return eF}let ez=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 5.69l5 4.5V18h-2v-6H9v6H7v-7.81l5-4.5M12 3L2 12h3v8h6v-6h2v6h6v-8h3L12 3z"})});function eN(){return ez}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"})});let eG=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19.5 9.5c-1.03 0-1.9.62-2.29 1.5h-2.92c-.39-.88-1.26-1.5-2.29-1.5s-1.9.62-2.29 1.5
7319H6.79c-.39-.88-1.26-1.5-2.29-1.5C3.12 9.5 2 10.62 2 12s1.12 2.5 2.5 2.5c1.03 0 1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5s1.9-.62 2.29-1.5h2.92c.39.88 1.26 1.5 2.29 1.5 1.38 0 2.5-1.12 2.5-2.5s-1.12-2.5-2.5-2.5z"})}),eU=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 10c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm12 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2zm-6 0c-1.1 0-2 .9-2 2s.9 2 2 2 2-.9 2-2-.9-2-2-2z"})});function eV(){return eU}let ej=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"})});function eH(){return ej}let eq=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"})});function eX(){return eq}let eW=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 4H5c-1.11 0-2 .9-2 2v12c0 1.1.89 2 2 2h4v-2H5V8h14v10h-4v2h4c1.1 0 2-.9 2-2V6c0-1.1-.89-2-2-2zm-7 6l-4 4h3v6h2v-6h3l-4-4z"})});function eK(){return eW}let eQ=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M8 5v14l11-7z"})});function eZ(){return eQ}let eY=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"})});function e$(){return eY}let eJ=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 13H5v-2h14v2z"})});function e0(){return eJ}let e1=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"})});function e2(){return e1}let e3=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",strokeWidth:"0.1px",children:(0,a.jsx)("path",{d:"M17 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V7l-4-4zm2 16H5V5h11.17L19 7.83V19zm-7-7c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM6 6h9v4H6z"})});function e4(){return e3}let e5=(0,a.jsxs)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:[(0,a.jsx)("circle",{cx:"7",cy:"14",r:"3"}),(0,a.jsx)("circle",{cx:"11",cy:"6",r:"3"}),(0,a.jsx)("circle",{cx:"16.6",cy:"17.6",r:"3"})]});(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"})});let e6=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 6h2v12H6zm3.5 6l8.5 6V6z"})});function e8(){return e6}let e7=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6 6h12v12H6z"})});function e9(){return e7}let te=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 6h16v2H4zm2-4h12v2H6zm14 8H4c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2v-8c0-1.1-.9-2-2-2zm0 10H4v-8h16v8zm-10-7.27v6.53L16 16z"})});function tt(){return te}let tr=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M6.99 11L3 15l3.99 4v-3H14v-2H6.99v-3zM21 9l-3.99-4v3H10v2h7.01v3L21 9z"})});function ta(){return tr}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M21 4H7V2H5v20h2v-8h14l-2-5zm-6 5c0 1.1-.9 2-2 2s-2-.9-2-2 .9-2 2-2 2 .9 2 2"})});let tn=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M3 17v2h6v-2H3zM3 5v2h10V5H3zm10 16v-2h8v-2h-8v-2h-2v6h2zM7 9v2H3v2h4v2h2V9H7zm14 4v-2H11v2h10zm-6-4h2V7h4V5h-4V3h-2v6z"})});function ti(){return tn}let to=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5-.59 1.22-1.42 2.27-2.41 3.12l1.41 1.41c1.39-1.23 2.49-2.77 3.18-4.53C21.27 7.11 17 4 12 4c-1.27 0-2.49.2-3.64.57l1.65 1.65C10.66 6.09 11.32 6 12 6zm-1.07 1.14L13 9.21c.57.25 1.03.71 1.28 1.28l2.07 2.07c.08-.34.14-.7.14-1.07C16.5 9.01 14.48 7 12 7c-.37 0-.72.05-1.07.14zM2.01 3.87l2.68 2.68C3.06 7.83 1.77 9.53 1 11.5 2.73 15.89 7 19 12 19c1.52 0 2.98-.29 4.32-.82l3.42 3.42 1.41-1.41L3.42 2.45 2.01 3.87zm7.5 7.5l2.61 2.61c-.04.01-.08.02-.12.02-1.38 0-2.5-1.12-2.5-2.5 0-.05.01-.08.01-.13zm-3.4-3.4l1.75 1.75c-.23.55-.36 1.15-.36 1.78 0 2.48 2.02 4.5 4.5 4.5.63 0 1.23-.13 1.7
73197-.36l.98.98c-.88.24-1.8.38-2.75.38-3.79 0-7.17-2.13-8.82-5.5.7-1.43 1.72-2.61 2.93-3.53z"})});function ts(){return to}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M20 2H4c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M6 9h12v2H6zm8 5H6v-2h8zm4-6H6V6h12z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M4 4h16v12H5.17L4 17.17zm0-2c-1.1 0-1.99.9-1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm2 10h8v2H6zm0-3h12v2H6zm0-3h12v2H6z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4z"})}),(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10H7v-2h10z"})});let tl=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12 6c3.79 0 7.17 2.13 8.82 5.5C19.17 14.87 15.79 17 12 17s-7.17-2.13-8.82-5.5C4.83 8.13 8.21 6 12 6m0-2C7 4 2.73 7.11 1 11.5 2.73 15.89 7 19 12 19s9.27-3.11 11-7.5C21.27 7.11 17 4 12 4zm0 5c1.38 0 2.5 1.12 2.5 2.5S13.38 14 12 14s-2.5-1.12-2.5-2.5S10.62 9 12 9m0-2c-2.48 0-4.5 2.02-4.5 4.5S9.52 16 12 16s4.5-2.02 4.5-4.5S14.48 7 12 7z"})});function tu(){return tl}let tc=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M1 21h22L12 2
73191 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z"})});function td(){return tc}(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M 9.64 7.64 c 0.23 -0.5 0.36 -1.05 0.36 -1.64 c 0 -2.21 -1.79 -4 -4 -4 S 2 3.79 2 6 s 1.79 4 4 4 c 0.59 0 1.14 -0.13 1.64 -0.36 L 10 12 l -2.36 2.36 C 7.14 14.13 6.59 14 6 14 c -2.21 0 -4 1.79 -4 4 s 1.79 4 4 4 s 4 -1.79 4 -4 c 0 -0.59 -0.13 -1.14 -0.36 -1.64 L 12 14 l 7 7 h 3 v -1 L 9.64 7.64 Z M 6 8 c -1.1 0 -2 -0.89 -2 -2 s 0.9 -2 2 -2 s 2 0.89 2 2 s -0.9 2 -2 2 Z m 0 12 c -1.1 0 -2 -0.89 -2 -2 s 0.9 -2 2 -2 s 2 0.89 2 2 s -0.9 2 -2 2 Z m 6 -7.5 c -0.28 0 -0.5 -0.22 -0.5 -0.5 s 0.22 -0.5 0.5 -0.5 s 0.5 0.22 0.5 0.5 s -0.22 0.5 -0.5 0.5 Z M 19 3 l -6 6 l 2 2 l 7 -7 V 3 Z"})});let tp=(0,a.jsx)("svg",{width:"24px",height:"24px",viewBox:"0 0 24 24",children:(0,a.jsx)("path",{d:"M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0 c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2 c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1 C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06 c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41 l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41 c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36 c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"})});function tf(){return tp}let tm=(0,a.jsxs)("svg",{width:"16px",height:"16px",viewBox:"0 0 16 16",children:[(0,a.jsx)("path",{d:"M8 1.248c1.857 0 3.526.641 4.65 1.794a5 5 0 0 1 2.518 1.09C13.907 1.482 11.295 0 8 0 4.75 0 2.12 1.48.844 4.122a5 5 0 0 1 2.289-1.047C4.236 1.872 5.974 1.248 8 1.248"}),(0,a.jsx)("path",{d:"M12 12a4 4 0 0 1-2.786-1.13l-.002-.002a1.6 1.6 0 0 0-.276-.167A2.2 2.2 0 0 0 8 10.5c-.414 0-.729.103-.935.201a1.6 1.6 0 0 0-.277.167l-.002.002A4 4 0 1 1 4 4h8a4 4 0 0 1 0 8"})]});function th(){return tm}let tg=function(){return x},tv=function(){return e5},tb=function(){return eG},ty=function(){return eP}},91126:function(e,t,r){let a;r.d(t,{NN:function(){return k},Fp:function(){return E},G4:function(){return M},Sz:function(){return V},di:function(){return _}});var n=r(5862),i=r(67058),o=r(87144),s=r(20694),l=r(59725),u=r(70371),c=r(66939),d=r(67738),p=r(61445),f=r(14086),m=r(75042),h=r(22401),g=r(75600),b=r(75679),y=r(52755),x=r(86517);class S extends i.PureComponent{render(){let{legend:e}=this.props,t=e.colors.map(e=>Array.isArray(e)?`${u.Il.toStyle(e[0])} ${100*e[1]}%`:u.Il.toStyle(e)).join(", ");return(0,n.jsx)("div",{className:"msp-scale-legend",children:(0,n.jsxs)("div",{style:{background:`linear-gradient(to right, ${t})`},children:[(0,n.jsx)("span",{style:{float:"left"},children:e.minLabel}),(0,n.jsx)("span",{style:{float:"right"},children:e.maxLabel})]})})}}class T extends i.PureComponent{render(){let{legend:e}=this.props;return(0,n.jsx)("div",{className:"msp-table-legend",children:e.table.map((e,t)=>{let[r,a]=e;return(0,n.jsxs)("div",{children:[(0,n.jsx)("div",{className:"msp-table-legend-color",style:{backgroundColor:u.Il.toStyle(a)}}),(0,n.jsx)("div",{className:"msp-table-legend-text",children:r})]},t)})})}}class C extends i.Component{constructor(e){super(e),this.state={show:!1},this.handleHover=this.handleHover.bind(this),this.handleHoverOff=this.handleHoverOff.bind(this),this.deletePoint=this.deletePoint.bind(this)}handleHover(){this.setState({show:!0});let e=o.Sg.create(this.props.nX,this.props.nY);this.props.onmouseover(e)}handleHoverOff(){this.setState({show:!1}),this.props.onmouseover(void 0)}deletePoint(){this.props.delete(this.props.id)}render(){return[(0,n.jsx)("circle",{r:"10",id:`${this.props.id}`,cx:this.props.x,cy:this.props.y,onClick:this.props.onclick,onDoubleClick:this.props.delete(this.props.id),onMouseEnter:this.handleHover,onMouseLeave:this.handleHoverOff,onMouseDown:this.props.onmousedown,fill:"black"},`${this.props.id}circle`)]}}var O=r(1573),I=r(36111);class A extends i.Component{constructor(e){for(let t of(super(e),this.handleKeyDown=e=>{},this.handleKeyUp=e=>{},this.handleClick=e=>e=>{},this.handleMouseDown=e=>t=>{if(0===e||e===this.state.points.length-1||this.state.canSelectMultiple)return;let r=this.normalizePoint(o.Sg.create(this.state.points[e][0],this.state.points[e][1]));this.ghostPoints.push(document.createElementNS(this.namespace,"circle")),this.ghostPoints[0].setAttribute("r","10"),this.ghostPoints[0].setAttribute("fill","orange"),this.ghostPoints[0].setAttribute("cx",`${r[0]}`),this.ghostPoints[0].setAttribute("cy",`${r[1]}`),this.ghostPoints[0].setAttribute("style","display: none"),this.gElement.appendChild(this.ghostPoints[0]),this.updatedX=r[0],this.updatedY=r[1],this.selected=[e]},this.deletePoint=e=>t=>{if(0===e||e===this.state.points.length-1)return;let r=this.state.points.filter((t,r)=>r!==e);r.sort((e,t)=>
7319e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:r}),this.change(r),t.stopPropagation()},this.myRef=i.createRef(),this.state={points:[o.Sg.create(0,0),o.Sg.create(1,0)],copyPoint:void 0,canSelectMultiple:!1},this.height=400,this.width=600,this.padding=70,this.selected=void 0,this.ghostPoints=[],this.namespace="http://www.w3.org/2000/svg",this.props.data))this.state.points.push(t);this.state.points.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.handleDrag=this.handleDrag.bind(this),this.handleMultipleDrag=this.handleMultipleDrag.bind(this),this.handleDoubleClick=this.handleDoubleClick.bind(this),this.refCallBack=this.refCallBack.bind(this),this.handlePointUpdate=this.handlePointUpdate.bind(this),this.change=this.change.bind(this),this.handleKeyUp=this.handleKeyUp.bind(this),this.handleLeave=this.handleLeave.bind(this),this.handleEnter=this.handleEnter.bind(this)}render(){let e=this.renderPoints(),t=this.renderLines(),r=this.renderHistogram();return[(0,n.jsx)("div",{children:(0,n.jsxs)("svg",{className:"msp-canvas",ref:this.refCallBack,viewBox:`0 0 ${this.width+this.padding} ${this.height+this.padding}`,onMouseMove:this.handleDrag,onMouseUp:this.handlePointUpdate,onMouseLeave:this.handleLeave,onMouseEnter:this.handleEnter,tabIndex:0,onKeyDown:this.handleKeyDown,onKeyUp:this.handleKeyUp,onDoubleClick:this.handleDoubleClick,children:[(0,n.jsxs)("g",{stroke:"black",fill:"black",children:[r,t,e]}),(0,n.jsx)("g",{className:"ghost-points",stroke:"black",fill:"black"})]})},"LineGraph"),(0,n.jsx)("div",{id:"modal-root"},"modal")]}componentDidMount(){this.gElement=document.getElementsByClassName("ghost-points")[0]}change(e){let t=e.slice();t.shift(),t.pop(),this.props.onChange(t)}handleDrag(e){let t;if(void 0===this.selected)return;let r=this.myRef.createSVGPoint(),a=this.padding/2;r.x=e.clientX,r.y=e.clientY;let n=r.matrixTransform(this.myRef.getScreenCTM().inverse());t=o.Sg.create(n.x,n.y),t=(n.x<a||n.x>this.width+a)&&(n.y>this.height+a||n.y<a)?o.Sg.create(this.updatedX,this.updatedY):n.x<a?o.Sg.create(a,n.y):n.x>this.width+a?o.Sg.create(this.width+a,n.y):n.y>this.height+a?o.Sg.create(n.x,this.height+a):n.y<a?o.Sg.create(n.x,a):o.Sg.create(n.x,n.y),this.updatedX=t[0],this.updatedY=t[1];let i=this.unNormalizePoint(t);this.ghostPoints[0].setAttribute("style","display: visible"),this.ghostPoints[0].setAttribute("cx",`${t[0]}`),this.ghostPoints[0].setAttribute("cy",`${t[1]}`),this.props.onDrag(i)}handleMultipleDrag(){}handlePointUpdate(e){let t=this.selected;if(this.state.canSelectMultiple)return;if(void 0===t||0===t[0]||t[0]===this.state.points.length-1){this.setState({copyPoint:void 0});return}this.selected=void 0;let r=this.unNormalizePoint(o.Sg.create(this.updatedX,this.updatedY)),a=this.state.points.filter((e,r)=>r!==t[0]);a.push(r),a.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:a}),this.change(a),this.gElement.innerHTML="",this.ghostPoints=[],document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}handleDoubleClick(e){let t=this.myRef.createSVGPoint();t.x=e.clientX,t.y=e.clientY;let r=t.matrixTransform(this.myRef.getScreenCTM().inverse()),a=this.state.points,n=this.padding/2;if(r.x<n||r.x>this.width+n||r.y>this.height+n||r.y<this.padding/2)return;let i=this.unNormalizePoint(o.Sg.create(r.x,r.y));a.push(i),a.sort((e,t)=>e[0]===t[0]?0===e[0]?e[1]-t[1]:1===e[1]?t[1]-e[1]:e[1]-t[1]:e[0]-t[0]),this.setState({points:a}),this.change(a)}handleLeave(){void 0!==this.selected&&(document.addEventListener("mousemove",this.handleDrag,!0),document.addEventListener("mouseup",this.handlePointUpdate,!0))}handleEnter(){document.removeEventListener("mousemove",this.handleDrag,!0),document.removeEventListener("mouseup",this.handlePointUpdate,!0)}normalizePoint(e){let t=this.padding/2,r=this.width+t,a=this.height+t,n=e[0]*(r-t)+t,i=e[1]*(a-t)+t,s=this.height+this.padding-i;return o.Sg.create(n,s)}unNormalizePoint(e){let t=this.padding/2,r=this.width+t,a=this.height+t,n=(e[0]-t)/(r-t),i=(this.height+this.padding-e[1]-t)/(a-t);return o.Sg.create(n,i)}refCallBack(e){e&&(this.myRef=e)}renderHistogram(){if(!this.props.volume)return null;let e=O.r.getHistogram(this.props.volume.grid,40),t=[],r=e.counts.length,a=this.width/r,i=this.padding/2,o=(0,I.uH)(e.counts)||1;for(let s=0;s<r;s++){let l=this.width*s/(r-1)+i,u=this.height+i,c=this.height*(1-e.counts[s]/o)+i;t.push((0,n.jsx)("line",{x1:l,x2:l,y1:u,y2:c,stroke:"#ded9ca",strokeWidth:a},`histogram${s}`))}return t}renderPoints(){let e;let t=[];for(let r=0;r<this.state.points.length;r++)0!==r&&r!==this.state.points.length-1&&(e=this.normalizePoint(this.state.points[r]),t.push((0,n.jsx)(C,{id:r,x:e[0],y:e[1],nX:this.state.points[r][0],nY:this.state.points[r][1],selected:!1,delete:this.deletePoint,onmouseover:this.props.onHover,onmousedown:this.handleMouseDown(r),onclick:this.handleClick(r)}
7319,r)));return t}renderLines(){let e,t,r,a,i;let s=[],l=[],u=this.padding/2;for(let n of this.state.points)e=this.width+u,t=this.height+this.padding,r=n[0]*(e-u)+u,a=n[1]*(t-u)+u,i=this.height+this.padding-a,s.push(o.Sg.create(r,i));let c=s.length;for(let e=0;e<c-1;e++){let t=s[e][0],r=s[e][1],a=s[e+1][0],i=s[e+1][1];l.push((0,n.jsx)("line",{x1:t,x2:a,y1:r,y2:i,stroke:"#cec9ba",strokeWidth:"5"},`lineOf${e}`))}return l}}var w=r(47792),D=r(55368);class E extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{var t,r;if(null===(r=(t=this.props).onChange)||void 0===r||r.call(t,e,this.props.values),this.props.onChangeValues){let t={...this.props.values,[e.name]:e.value};this.props.onChangeValues(t,this.props.values)}},this.paramGroups=(0,d.j)(e=>(function(e){function t(e,t){let r=e[0],a=t[0];return r&&r[1].category?a&&a[1].category&&r[1].category<a[1].category?-1:1:-1}let r=Object.keys(e),a={params:[[]],map:void 0},n={params:[[]],map:void 0};for(let t of r){let r=e[t];r.isHidden||function(e,t,r){let a=P(t);if(a){if(t.category){r.map||(r.map=new Map);let n=r.map.get(t.category);n||(n=[],r.map.set(t.category,n),r.params.push(n)),n.push([e,t,a])}else r.params[0].push([e,t,a])}}(t,r,r.isEssential?a:n)}return a.params.sort(t),n.params.sort(t),{essentials:a.params,advanced:n.params}})(e))}renderGroup(e){var t;let r;if(0===e.length)return null;let a=this.props.values,i=null;for(let[o,s,l]of e)null!==(t=s.hideIf)&&void 0!==t&&t.call(s,a)||(i||(i=[]),r=s.category,i.push((0,n.jsx)(l,{param:s,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled,name:o,value:a[o]},o)));return i?r?[(0,n.jsx)(y.iI,{header:r,children:i},r)]:i:null}renderPart(e){let t=null;for(let r of e){let e=this.renderGroup(r);if(e)for(let r of(t||(t=[]),e))t.push(r)}return t}render(){let e=this.paramGroups(this.props.params),t=this.renderPart(e.essentials),r=this.renderPart(e.advanced);return t&&r?(0,n.jsxs)(n.Fragment,{children:[t,(0,n.jsx)(y.iI,{header:"Advanced Options",children:r})]}):t||r}}class M extends h.Xl{constructor(){super(...arguments),this.state={isDisabled:!1},this.setSettings=(e,t)=>{let r={...t,[e.name]:e.value},a=this.props.mapping.update(r,this.plugin);this.props.mapping.apply(a,this.plugin)}}componentDidMount(){this.subscribe(this.plugin.state.data.behaviors.isUpdating,e=>{this.setState({isDisabled:e})})}render(){let e=this.props.mapping.getTarget(this.plugin),t=this.props.mapping.getValues(e,this.plugin),r=this.props.mapping.params(this.plugin);return(0,n.jsx)(E,{params:r,values:t,onChange:this.setSettings,isDisabled:this.state.isDisabled})}}function P(e){switch(e.type){case"value":case"data-ref":return;case"boolean":return F;case"number":return void 0!==e.min&&void 0!==e.max?N:z;case"converted":return ed;case"conditioned":return ec;case"multi-select":return en;case"color":return b.qL;case"color-list":return e.offsets?$:Y;case"vec3":return J;case"mat4":return ee;case"url":return et;case"file":return er;case"file-list":return ea;case"select":return j;case"value-ref":return H;case"text":return G;case"interval":return void 0!==e.min&&void 0!==e.max?X:q;case"group":return ei;case"mapped":return eo;case"line-graph":return L;case"script":return ep;case"object-list":return eu;default:console.warn(`${e} has no associated UI component`);return}}class k extends i.PureComponent{render(){let{legend:e,description:t}=this.props,r=e&&function(e){switch(e.kind){case"scale-legend":return S;case"table-legend":return T;default:console.warn(`${e} has no associated UI component`);return}}(e);return(0,n.jsx)("div",{className:"msp-help-text",children:(0,n.jsxs)("div",{children:[(0,n.jsxs)("div",{className:"msp-help-description",children:[(0,n.jsx)(x.JO,{svg:x.Hx,inline:!0}),t]}),r&&(0,n.jsx)("div",{className:"msp-help-legend",children:(0,n.jsx)(r,{legend:e})})]})})}}function B(e){let{props:t,state:r,control:a,toggleHelp:i,addOn:o}=e,s=[];t.param.shortLabel&&s.push("msp-control-label-short"),t.param.twoColumns&&s.push("msp-control-col-2"),t.param.multiline&&s.push("msp-control-twoline");let l=s.join(" "),u=t.param.label||(0,m.l9)(t.name),c=t.param.help?t.param.help(t.value):{description:t.param.description,legend:t.param.legend},d=c.description||c.legend,p=u+(d?". Click for help.":"");return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{className:l,title:p,label:(0,n.jsxs)(n.Fragment,{children:[u,d&&(0,n.jsx)(_,{show:r.showHelp,toggle:i,title:p})]}),control:a}),d&&r.showHelp&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(k,{legend:c.legend,description:c.description})}),o]})}function _({show:e,toggle:t,title:r}){return(0,n.jsx)("button",{className:"msp-help msp-btn-link msp-btn-icon msp-control-group-expander",onClick:t,title:r||`${e?"Hide":"Show"} help`,style:{background:"transparent",textAlign:"left",padding:"0"},children:(0,n.jsx)(x.JO,{svg:x.Hx})})}class R extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp}
7319)}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderAddOn(){return null}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}class F extends R{constructor(){super(...arguments),this.onClick=e=>{this.update(!this.props.value),e.currentTarget.blur()}}renderControl(){return(0,n.jsxs)("button",{onClick:this.onClick,disabled:this.props.isDisabled,children:[(0,n.jsx)(x.JO,{svg:this.props.value?x.pW:x.dw}),this.props.value?"On":"Off"]})}}class L extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1,isOverPoint:!1,message:`${this.props.param.defaultValue.length} points`},this.onHover=e=>{this.setState({isOverPoint:!this.state.isOverPoint}),e?this.setState({message:this.pointToLabel(e)}):this.setState({message:`${this.props.value.length} points`})},this.onDrag=e=>{this.setState({message:this.pointToLabel(e)})},this.onChange=e=>{this.props.onChange({name:this.props.name,param:this.props.param,value:e})},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}pointToLabel(e){var t,r;if(!e)return"";let a=null===(r=(t=this.props.param).getVolume)||void 0===r?void 0:r.call(t);if(!a)return`(${e[0].toFixed(2)}, ${e[1].toFixed(2)})`;{let{min:t,max:r,mean:n,sigma:i}=a.grid.stats,o=t+(r-t)*e[0];return`(${o.toFixed(2)} | ${((o-n)/i).toFixed(2)}Ï, ${e[1].toFixed(2)})`}}render(){var e,t;let r=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:r,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:`${this.state.message}`})}),(0,n.jsx)("div",{className:"msp-control-offset",style:{display:this.state.isExpanded?"block":"none",marginTop:1},children:(0,n.jsx)(A,{data:this.props.value,volume:null===(t=(e=this.props.param).getVolume)||void 0===t?void 0:t.call(e),onChange:this.onChange,onHover:this.onHover,onDrag:this.onDrag})})]})}}class z extends i.PureComponent{constructor(){super(...arguments),this.state={value:"0"},this.update=e=>{let t=(0,p.p8)(this.props.param.step||.01);e=parseFloat(e.toFixed(t)),this.props.onChange({param:this.props.param,name:this.props.name,value:e})}}render(){let e=this.props.param.label||(0,m.l9)(this.props.name),t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01);return(0,n.jsx)(y.Ft,{title:this.props.param.description,label:t,control:(0,n.jsx)(y.oi,{numeric:!0,value:parseFloat(this.props.value.toFixed(r)),onEnter:this.props.onEnter,placeholder:e,isDisabled:this.props.isDisabled,onChange:this.update})})}}class N extends R{constructor(){super(...arguments),this.onChange=e=>{this.update(e)}}renderControl(){let e=void 0===this.props.value?this.props.param.defaultValue:this.props.value;return(0,n.jsx)(w.iR,{value:e,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,onChangeImmediate:this.props.param.immediateUpdate?this.onChange:void 0,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}}class G extends R{constructor(){super(...arguments),this.updateValue=e=>{e!==this.props.value&&this.update(e)}}renderControl(){let e=this.props.param.placeholder||this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsx)(U,{props:this.props,placeholder:e,update:this.updateValue})}}function U({props:e,placeholder:t,update:r}){let[a,o]=i.useState(e.value),[s,l]=i.useState(!1);i.useEffect(()=>{o(e.value)},[e.value]);let u=t=>{s||e.param.disableInteractiveUpdates?o(t.target.value):(o(t.target.value),r(t.target.value))},c=t=>{l(!1);let a=t.target;e.param.disableInteractiveUpdates?o(a.value):(o(a.value),r(a.value))},d=t=>{e.param.disableInteractiveUpdates&&(o(t.target.value),r(t.target.value))},p=t=>{"Enter"===t.key&&(e.onEnter&&!e.param.multiline?(t.stopPropagation(),e.onEnter()):t.shiftKey||t.ctrlKey||t.metaKey?t.currentTarget.blur():e.param.disableInteractiveUpdates&&!e.param.multiline&&(o(a),r(a)))};return e.param.multiline?(0,n.jsx)("div",{className:"msp-control-text-area-wrapper",children:(0,n.jsx)("textarea",{value:null!=a?a:"",placeholder:t,disabled:e.isDisabled,onChange:u,onBlur:d,onKeyDown:p,onCompositionStart:()=>l(!0),onCompositionEnd:c}
7319)}):(0,n.jsx)("input",{type:"text",value:null!=a?a:"",placeholder:t,disabled:e.isDisabled,onChange:u,onBlur:d,onKeyDown:p,onCompositionStart:()=>l(!0),onCompositionEnd:c})}class V extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{"number"==typeof this.props.param.defaultValue?this.update(parseInt(e.target.value,10)):this.update(e.target.value)}}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}render(){let e=void 0!==this.props.value&&!this.props.param.options.some(e=>e[0]===this.props.value);return(0,n.jsxs)("select",{className:"msp-form-control",title:this.props.title,value:void 0!==this.props.value?this.props.value:this.props.param.defaultValue,onChange:this.onChange,disabled:this.props.isDisabled,children:[e&&(0,n.jsx)("option",{value:this.props.value,children:`[Invalid] ${this.props.value}`},this.props.value),this.props.param.options.map(([e,t])=>(0,n.jsx)("option",{value:e,children:t},e))]})}}class j extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,showOptions:!1},this.onSelect=e=>{e&&e.value!==this.props.value?this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:e.value})}):this.setState({showOptions:!1})},this.toggle=()=>this.setState({showOptions:!this.state.showOptions}),this.cycle=()=>{let{options:e}=this.props.param,t=e.findIndex(e=>e[0]===this.props.value),r=t===e.length-1?0:t+1;this.props.onChange({param:this.props.param,name:this.props.name,value:e[r][0]})},this.items=(0,d.j)(e=>g.P.createItemsFromSelectOptions(e.options)),this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}renderControl(){var e;let t=this.items(this.props.param),r=void 0!==this.props.value?g.P.findItem(t,this.props.value):void 0,a=r?r.label:void 0===this.props.value?`${(null===(e=g.P.getFirstItem(t))||void 0===e?void 0:e.label)||""} [Default]`:`[Invalid] ${this.props.value}`,i=this.props.param.cycle?this.cycle:this.toggle,o=this.props.param.cycle?"center":"left",s=this.props.param.cycle?"on"===this.props.value?x.pW:"off"===this.props.value?x.dw:void 0:void 0;return(0,n.jsx)(y.CO,{disabled:this.props.isDisabled,style:{textAlign:o,overflow:"hidden",textOverflow:"ellipsis"},label:a,title:a,icon:s,toggle:i,isSelected:this.state.showOptions,className:"msp-select-toggle"})}renderAddOn(){if(!this.state.showOptions)return null;let e=this.items(this.props.param),t=g.P.findItem(e,this.props.value);return(0,n.jsx)(g.P,{items:e,current:t,onSelect:this.onSelect})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}class H extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,showOptions:!1},this.onSelect=e=>{e&&e.value!==this.props.value?this.setState({showOptions:!1},()=>{this.props.onChange({param:this.props.param,name:this.props.name,value:{ref:e.value}})}):this.setState({showOptions:!1})},this.toggle=()=>this.setState({showOptions:!this.state.showOptions}),this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}get items(){return g.P.createItemsFromSelectOptions(this.props.param.getOptions(this.context))}renderControl(){var e;let t=this.items,r=this.props.value.ref?g.P.findItem(t,this.props.value.ref):void 0,a=r?r.label:`[Ref] ${null!==(e=this.props.value.ref)&&void 0!==e?e:""}`;return(0,n.jsx)(y.CO,{disabled:this.props.isDisabled,style:{textAlign:"left",overflow:"hidden",textOverflow:"ellipsis"},label:a,title:a,toggle:this.toggle,isSelected:this.state.showOptions})}renderAddOn(){if(!this.state.showOptions)return null;let e=this.items,t=g.P.findItem(e,this.props.value.ref);return(0,n.jsx)(g.P,{items:e,current:t,onSelect:this.onSelect})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderAddOn()})}}H.contextType=h.e5;class q extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={0:f.e.Numeric(0,{step:this.props.param.step},{label:"Min"}),1:f.e.Numeric(0,{step:this.props.param.step},{label:"Max"})},this.componentChange=({name:e,value:t})=>{let r=[...this.props.value];r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01),a=`[${e[0].toFixed(r)}, ${e[1].toFixed(r)}]`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:a})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}}class X extends R{constructor(){super(...arguments),this.onChange=e=>{this.update(e)}}renderControl(){return(0,n.jsx)(w.Ng,{value:this.props.value,min:this.props.param.min,max:this.props.param.max,step:this.props.param.step,onChange:this.onChange,disabled:this.props.isDisabled,onEnter:this.props.onEnter})}}let W=(0,d.m)(D.Os),K=(0,d.m)(D.uf);function Q(e,t="0"){var r;return{background:(r=e.colors,"set"===e.kind?K(r):W(r)),position:"absolute",bottom:"0",height:"4px",right:t,left:"0"}}function Z(){return a||(a=function(){let e=e=>{let t=(0,c.jy)(e[0]);return(0,n.jsx)("div",{style:Q({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})})};return{ColorPresets:{all:g.P.createItemsFromSelectOptions(c.EA,{addOn:e,description:e=>e[3]}),scale:g.P.createItemsFromSelectOptions(c.Sq,{addOn:e,description:e=>e[3]}),set:g.P.createItemsFromSelectOptions(c.Yg,{addOn:e,description:e=>e[3]})},ColorsParam:f.e.ObjectList({color:f.e.Color(0)},({color:e})=>u.Il.toHexString(e).toUpperCase()),OffsetColorsParam:f.e.ObjectList({color:f.e.Color(0),offset:f.e.Numeric(0,{min:0,max:1,step:.
731901})},({color:e,offset:t})=>`${u.Il.toHexString(e).toUpperCase()} [${t.toFixed(2)}]`),IsInterpolatedParam:f.e.Boolean(!1,{label:"Interpolated"})}}())}class Y extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,show:void 0},this.toggleEdit=()=>this.setState({show:"edit"===this.state.show?void 0:"edit"}),this.togglePresets=()=>this.setState({show:"presets"===this.state.show?void 0:"presets"}),this.selectPreset=e=>{if(!e)return;this.setState({show:void 0});let t=(0,c.jy)(e.value);this.update({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})},this.colorsChanged=({value:e})=>{this.update({kind:this.props.value.kind,colors:e.map(e=>e.color)})},this.isInterpolatedChanged=({value:e})=>{this.update({kind:e?"interpolate":"set",colors:this.props.value.colors})},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderControl(){let{value:e}=this.props;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[1===e.colors.length?"1 color":`${e.colors.length} colors`,(0,n.jsx)("div",{style:Q(e,"33px")})]}),(0,n.jsx)(y.hU,{svg:x.O4,onClick:this.togglePresets,toggleState:"presets"===this.state.show,title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:e,ColorsParam:t,IsInterpolatedParam:r}=Z(),a=e[this.props.param.presetKind];if("presets"===this.state.show)return(0,n.jsx)(g.P,{items:a,onSelect:this.selectPreset});let i=this.props.value.colors.map(e=>({color:Array.isArray(e)?e[0]:e}));return(0,n.jsxs)("div",{className:"msp-control-offset",children:[(0,n.jsx)(eu,{name:"colors",param:t,value:i,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,n.jsx)(F,{name:"isInterpolated",param:r,value:"interpolate"===this.props.value.kind,onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}}class $ extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1,show:void 0},this.toggleEdit=()=>this.setState({show:"edit"===this.state.show?void 0:"edit"}),this.togglePresets=()=>this.setState({show:"presets"===this.state.show?void 0:"presets"}),this.selectPreset=e=>{if(!e)return;this.setState({show:void 0});let t=(0,c.jy)(e.value);this.update({kind:"qualitative"!==t.type?"interpolate":"set",colors:t.list})},this.colorsChanged=({value:e})=>{let t=e.map(e=>[e.color,e.offset]);t.sort((e,t)=>e[1]-t[1]),this.update({kind:this.props.value.kind,colors:t})},this.isInterpolatedChanged=({value:e})=>{this.update({kind:e?"interpolate":"set",colors:this.props.value.colors})},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}update(e){this.props.onChange({param:this.props.param,name:this.props.name,value:e})}renderControl(){let{value:e}=this.props;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("button",{onClick:this.toggleEdit,style:{position:"relative",paddingRight:"33px"},children:[1===e.colors.length?"1 color":`${e.colors.length} colors`,(0,n.jsx)("div",{style:Q(e,"33px")})]}),(0,n.jsx)(y.hU,{svg:x.O4,onClick:this.togglePresets,toggleState:"presets"===this.state.show,title:"Color Presets",style:{padding:0,position:"absolute",right:0,top:0,width:"32px"}})]})}renderColors(){if(!this.state.show)return null;let{ColorPresets:e,OffsetColorsParam:t,IsInterpolatedParam:r}=Z(),a=e[this.props.param.presetKind];if("presets"===this.state.show)return(0,n.jsx)(g.P,{items:a,onSelect:this.selectPreset});let i=this.props.value.colors,o=i.map((e,t)=>Array.isArray(e)?{color:e[0],offset:e[1]}:{color:e,offset:t/i.length});return o.sort((e,t)=>e.offset-t.offset),(0,n.jsxs)("div",{className:"msp-control-offset",children:[(0,n.jsx)(eu,{name:"colors",param:t,value:o,onChange:this.colorsChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter}),(0,n.jsx)(F,{name:"isInterpolated",param:r,value:"interpolate"===this.props.value.kind,onChange:this.isInterpolatedChanged,isDisabled:this.props.isDisabled,onEnter:this.props.onEnter})]})}render(){return B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:this.renderColors()})}}class J extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={0:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.x||"X"}),1:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.y||"Y"}),2:f.e.Numeric(0,{step:this.props.param.step},{label:this.props.param.fieldLabels&&this.props.param.fieldLabels.z||"Z"})},this.componentChange=({name:e,value:t})=>{let r=o.AO.copy(o.AO.zero(),this.props.value);r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,p.p8)(this.props.param.step||.01),a=`[${e[0].toFixed(r)}, ${e[1].toFixed(r)}, ${e[2].toFixed(r)}]`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,n.jsx)("div",{title:a,className:"msp-no-overflow",style:{display:"block"},children:a})})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})})]})}}class ee extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.components={json:f.e.Text(JSON.stringify((0,o.yb)()),{description:"JSON array with 4x4 matrix in a column major (j * 4 + i indexing) format"})},this.componentChange=({name:e,value:t})=>{let r=o.yb.copy((0,o.yb)(),this.props.value);"json"===e?o.yb.copy(r,JSON.parse(t)):r[+e]=t,this.change(r)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}changeValue(e){return t=>{let r=o.yb.copy((0,o.yb)(),this.props.value);r[e]=t,this.change(r)}}get grid(){let e=this.props.value,t=[];for(let r=0;r<4;r++){let a=[];for(let t=0;t<4;t++)a.push((0,n.jsx)(y.oi,{numeric:!0,delayMs:50,value:o.yb.getValue(e,r,t),onChange:this.changeValue(4*t+r),className:"msp-form-control",blurOnEnter:!0,isDisabled:this.props.isDisabled},t));t.push((0,n.jsx)("div",{className:"msp-flex-row",children:a},r))}return(0,n.jsx)("div",{className:"msp-parameter-matrix",children:t})}render(){let e={json:JSON.stringify(this.props.value)},t=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:(0,n.jsx)("div",{className:"msp-no-overflow",style:{display:"block"},children:"4\xd74 Matrix"})})}),this.state.isExpanded&&(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.grid,(0,n.jsx)(E,{params:this.components,values:e,onChange:this.componentChange,onEnter:this.props.onEnter})]})]})}}class et extends R{constructor(){super(...arguments),this.onChange=e=>{let t=e.target.value;t!==l.x.getUrl(this.props.value||"")&&this.update(l.x.Url(t))},this.onKeyPress=e=>{(13===e.keyCode||13===e.charCode||"Enter"===e.key)&&this.props.onEnter&&this.props.onEnter(),e.stopPropagation()}}renderControl(){let e=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsx)("input",{type:"text",value:l.x.getUrl(this.props.value||""),placeholder:e,onChange:this.onChange,onKeyPress:this.props.onEnter?this.onKeyPress:void 0,disabled:this.props.isDisabled})}}class er extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.onChangeFile=e=>{this.change(e.target.files[0])},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp}
7319)}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:l.x.File(e)})}renderControl(){let e=this.props.value;return(0,n.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[e?e.name:"Select a file..."," ",(0,n.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFile,type:"file",multiple:!1,accept:this.props.param.accept})]})}render(){return this.props.param.label?B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}}class ea extends i.PureComponent{constructor(){super(...arguments),this.state={showHelp:!1},this.onChangeFileList=e=>{this.change(e.target.files)},this.toggleHelp=()=>this.setState({showHelp:!this.state.showHelp})}change(e){let t=[];if(e)for(let r=0,a=e.length;r<a;++r)t.push(l.x.File(e[r]));this.props.onChange({name:this.props.name,param:this.props.param,value:t})}renderControl(){let e=this.props.value,t=[];if(e)for(let r of e)t.push(r.name);let r=0===t.length?"Select files...":1===t.length?t[0]:`${t.length} files selected`;return(0,n.jsxs)("div",{className:"msp-btn msp-btn-block msp-btn-action msp-loader-msp-btn-file",style:{marginTop:"1px"},children:[r," ",(0,n.jsx)("input",{disabled:this.props.isDisabled,onChange:this.onChangeFileList,type:"file",multiple:!0,accept:this.props.param.accept})]})}render(){return this.props.param.label?B({props:this.props,state:this.state,control:this.renderControl(),toggleHelp:this.toggleHelp,addOn:null}):this.renderControl()}}class en extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}toggle(e){return t=>{0>this.props.value.indexOf(e)?this.change(this.props.value.concat(e)):this.change(this.props.value.filter(t=>t!==e)),t.currentTarget.blur()}}render(){let e=this.props.value,t=this.props.param.emptyValue,r=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:r,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:0===e.length&&t?t:`${e.length} of ${this.props.param.options.length}`})}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:this.props.param.options.map(([t,r])=>{let a=e.indexOf(t)>=0;return(0,n.jsx)(y.zx,{onClick:this.toggle(t),disabled:this.props.isDisabled,style:{marginTop:"1px"},children:(0,n.jsx)("span",{style:{float:a?"left":"right"},children:a?`â ${r}`:`${r} â`})},t)})})]})}}class ei extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!!this.props.param.isExpanded,showPresets:!1,showHelp:!1},this.onChangeParam=e=>{this.change({...this.props.value,[e.name]:e.value})},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded}),this.toggleShowPresets=()=>this.setState({showPresets:!this.state.showPresets}),this.presetItems=(0,d.j)(e=>{var t;return g.P.createItemsFromSelectOptions(null!==(t=e.presets)&&void 0!==t?t:[])}),this.onSelectPreset=e=>{this.setState({showPresets:!1}),this.change(null==e?void 0:e.value)}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}pivotedPresets(){if(!this.props.param.presets)return null;let e=this.props.param.label||(0,m.l9)(this.props.name);return(0,n.jsxs)("div",{className:"msp-control-group-wrapper",children:[(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,n.jsx)(x.JO,{svg:x.O4}),e," Presets"]}
7319)}),this.state.showPresets&&(0,n.jsx)(g.P,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]})}presets(){return this.props.param.presets?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"msp-control-group-presets-wrapper",children:(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleShowPresets,children:[(0,n.jsx)(x.JO,{svg:x.O4}),"Presets"]})})}),this.state.showPresets&&(0,n.jsx)(g.P,{items:this.presetItems(this.props.param),onSelect:this.onSelectPreset})]}):null}pivoted(){let e=this.props.param.pivot,t=this.props.param.params,r=t[e],a=P(r),i=(0,n.jsx)(a,{name:e,param:r,value:this.props.value[e],onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});if(!this.state.isExpanded)return(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[i,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options",style:{opacity:.7}})]});let o=Object.create(null);for(let r of Object.keys(t))r!==e&&(o[r]=t[r]);return(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[i,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:"More Options"}),(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.pivotedPresets(),(0,n.jsx)(E,{params:o,onEnter:this.props.onEnter,values:this.props.value,onChange:this.onChangeParam,isDisabled:this.props.isDisabled})]})]})}render(){let e=this.props.param.params;if(0===Object.keys(e).length)return null;if(this.props.param.pivot)return this.pivoted();let t=this.props.param.label||(0,m.l9)(this.props.name),r=(0,n.jsx)(E,{params:e,onChange:this.onChangeParam,values:this.props.value,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled});return this.props.inMapped?(0,n.jsx)("div",{className:"msp-control-offset",children:r}):this.props.param.isFlat?r:(0,n.jsxs)("div",{className:"msp-control-group-wrapper",style:{position:"relative"},children:[(0,n.jsx)("div",{className:"msp-control-group-header",children:(0,n.jsxs)("button",{className:"msp-btn msp-form-control msp-btn-block",onClick:this.toggleExpanded,children:[(0,n.jsx)(x.JO,{svg:this.state.isExpanded?x.x3:x.Sr}),t]})}),this.presets(),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:r})]})}}class eo extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.valuesCache={},this.onChangeName=e=>{this.change({name:e.value,params:this.getValues(e.value)})},this.onChangeParam=e=>{this.setValues(this.props.value.name,e.value),this.change({name:this.props.value.name,params:e.value})},this.toggleExpanded=()=>this.setState({isExpanded:!this.state.isExpanded})}setValues(e,t){this.valuesCache[e]=t}getValues(e){return e in this.valuesCache?this.valuesCache[e]:this.props.param.map(e).defaultValue}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}areParamsEmpty(e){for(let t of Object.keys(e))if(!e[t].isHidden)return!1;return!0}render(){let e=this.props.value||this.props.param.defaultValue,t=this.props.param.map(e.name),r=this.props.param.label||(0,m.l9)(this.props.name),a=P(t),i=this.props.param.help,o=i?{...this.props.param.select,help:e=>i({name:e,params:this.getValues(e)})}:this.props.param.select,s=(0,n.jsx)(j,{param:o,isDisabled:this.props.isDisabled,onChange:this.onChangeName,onEnter:this.props.onEnter,name:r,value:e.name});return a?"group"!==t.type||t.isFlat?(0,n.jsxs)(n.Fragment,{children:[s,(0,n.jsx)(a,{param:t,value:e.params,name:e.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):this.areParamsEmpty(t.params)?s:(0,n.jsxs)("div",{className:"msp-mapped-parameter-group",children:[s,(0,n.jsx)(y.hU,{svg:x.Ri,onClick:this.toggleExpanded,toggleState:this.state.isExpanded,title:`${r} Properties`,style:{opacity:this.state.isExpanded?void 0:.7}}),this.state.isExpanded&&(0,n.jsx)(ei,{inMapped:!0,param:t,value:e.params,name:e.name,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):s}}class es extends i.PureComponent{constructor(){super(...arguments),this.state={current:this.props.value},this.onChangeParam=e=>{this.setState({current:{...this.state.current,[e.name]:e.value}})},this.apply=()=>{this.props.apply(this.state.current)}}componentDidUpdate(e){(this.props.params!==e.params||this.props.value!==e.value)&&this.setState({current:this.props.value})}render(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(E,{params:this.props.params,onChange:this.onChangeParam,values:this.state.current,onEnter:this.apply,isDisabled:this.props.isDisabled}),(0,n.jsx)("button",{className:"msp-btn msp-btn-block msp-form-control msp-control-top-offset",onClick:this.apply,disabled:this.props.isDisabled,children:this.props.isUpdate?"Update":"Add"})]})}}class el extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.update=e=>{this.props.actions.update(e,this.props.index)},this.moveUp=()=>{this.props.actions.move(this.props.index,-1)},this.moveDown=()=>{this.props.actions.move(this.props.index,1)},this.remove=()=>{this.setState({isExpanded:!1}),this.props.actions.remove(this.props.index)},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}render(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"msp-param-object-list-item",children:[(0,n.jsxs)("button",{className:"msp-btn msp-btn-block msp-form-control",onClick:this.toggleExpanded,children:[(0,n.jsx)("span",{children:`${this.props.index+1}: `}),this.props.param.getLabel(this.props.value)]}),(0,n.jsxs)("div",{children:[(0,n.jsx)(y.hU,{svg:x.jE,title:"Move Up",onClick:this.moveUp,small:!0}),(0,n.jsx)(y.hU,{svg:x.X4,title:"Move Down",onClick:this.moveDown,small:!0}),(0,n.jsx)(y.hU,{svg:x.cS,title:"Remove",onClick:this.remove,small:!0})]})]}),this.state.isExpanded&&(0,n.jsx)("div",{className:"msp-control-offset",children:(0,n.jsx)(es,{params:this.props.param.element,apply:this.update,value:this.props.value,isUpdate:!0,isDisabled:this.props.isDisabled})})]})}}class eu extends i.PureComponent{constructor(){super(...arguments),this.state={isExpanded:!1},this.add=e=>{this.change([...this.props.value,e])},this.actions={update:(e,t)=>
7319{let r=this.props.value.slice(0);r[t]=e,this.change(r)},move:(e,t)=>{let r=this.props.value;if(1===r.length)return;let a=(e+t)%r.length;a<0&&(a+=r.length);let n=(r=r.slice(0))[e];r[e]=r[a],r[a]=n,this.change(r)},remove:e=>{let t=this.props.value,r=[];for(let a=0;a<t.length;a++)e!==a&&r.push(t[a]);this.change(r)}},this.toggleExpanded=e=>{this.setState({isExpanded:!this.state.isExpanded}),e.currentTarget.blur()}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.label||(0,m.l9)(this.props.name),r=`${e.length} item${1!==e.length?"s":""}`;return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(y.Ft,{label:t,control:(0,n.jsx)("button",{onClick:this.toggleExpanded,disabled:this.props.isDisabled,children:r})}),this.state.isExpanded&&(0,n.jsxs)("div",{className:"msp-control-offset",children:[this.props.value.map((e,t)=>(0,n.jsx)(el,{param:this.props.param,value:e,index:t,actions:this.actions,isDisabled:this.props.isDisabled},t)),(0,n.jsx)(y.eQ,{header:"New Item",children:(0,n.jsx)(es,{params:this.props.param.element,apply:this.add,value:this.props.param.ctor(),isDisabled:this.props.isDisabled})})]})]})}}class ec extends i.PureComponent{constructor(){super(...arguments),this.onChangeCondition=e=>{this.change(this.props.param.conditionedValue(this.props.value,e.value))},this.onChangeParam=e=>{this.change(e.value)}}change(e){this.props.onChange({name:this.props.name,param:this.props.param,value:e})}render(){let e=this.props.value,t=this.props.param.conditionForValue(e),r=this.props.param.conditionParams[t],a=this.props.param.label||(0,m.l9)(this.props.name),i=P(r),o=(0,n.jsx)(j,{param:this.props.param.select,isDisabled:this.props.isDisabled,onChange:this.onChangeCondition,onEnter:this.props.onEnter,name:`${a} Kind`,value:t});return i?(0,n.jsxs)(n.Fragment,{children:[o,(0,n.jsx)(i,{param:r,value:e,name:a,onChange:this.onChangeParam,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled})]}):o}}class ed extends i.PureComponent{constructor(){super(...arguments),this.onChange=e=>{this.props.onChange({name:this.props.name,param:this.props.param,value:this.props.param.toValue(e.value)})}}render(){let e=this.props.param.fromValue(this.props.value),t=P(this.props.param.converted);return t?(0,n.jsx)(t,{param:this.props.param.converted,value:e,name:this.props.name,onChange:this.onChange,onEnter:this.props.onEnter,isDisabled:this.props.isDisabled}):null}}class ep extends i.PureComponent{constructor(){super(...arguments),this.onChange=({name:e,value:t})=>{t!==this.props.value[e]&&this.props.onChange({param:this.props.param,name:this.props.name,value:{...this.props.value,[e]:t}})}}render(){let e={defaultValue:this.props.value.language,options:f.e.objectToOptions(s.Script.Info),type:"select"},t=(0,n.jsx)(j,{param:e,isDisabled:this.props.isDisabled,onChange:this.onChange,onEnter:this.props.onEnter,name:"language",value:this.props.value.language}),r={defaultValue:this.props.value.language,type:"text"},a=(0,n.jsx)(G,{param:r,isDisabled:this.props.isDisabled,onChange:this.onChange,name:"expression",value:this.props.value.expression});return(0,n.jsxs)(n.Fragment,{children:[t,"mol-script"!==this.props.value.language&&(0,n.jsxs)("div",{className:"msp-help-text",style:{padding:"10px"},children:[(0,n.jsx)(x.JO,{svg:x.nI})," Support for PyMOL, VMD, and Jmol selections is an experimental feature and may not always work as intended."]}),a]})}}},47792:function(e,t,r){r.d(t,{Ng:function(){return u},iR:function(){return l}});var a=r(5862),n=r(67058),i=r(52755),o=r(85764),s=r(58684);class l extends n.Component{constructor(){super(...arguments),this.state={isChanging:!1,current:0},this.begin=()=>{this.setState({isChanging:!0})},this.end=e=>{this.setState({isChanging:!1}),this.props.onChange(e)},this.updateCurrent=e=>{var t,r;this.setState({current:e}),null===(r=(t=this.props).onChangeImmediate)||void 0===r||r.call(t,e)},this.updateManually=e=>{this.setState({isChanging:!0});let t=e;1===this.props.step&&(t=Math.round(t)),t<this.props.min&&(t=this.props.min),t>this.props.max&&(t=this.props.max),this.setState({current:t,isChanging:!0})},this.onManualBlur=()=>{this.setState({isChanging:!1}),this.props.onChange(this.state.current)},this.onMouseWheel=e=>{let{dx:t,dy:r,dz:a}=(0,s.fN)(e),n=e.getModifierState("Shift"),i=(t>=0?1:-1)*(r>=0?1:-1)*(a>=0?1:-1)*(this.props.max-this.props.min)/(n?100:25);this.updateCurrent(this.state.current+i)}}static getDerivedStateFromProps(e,t){return t.isChanging||e.value===t.current?null:{current:e.value}}render(){let e=this.props.step;return void 0===e&&(e=1),(0,a.jsxs)("div",{className:this.props.hideInput?"msp-slider msp-slider-no-input":"msp-slider",children:[(0,a.jsx)("div",{children:(0,a.jsx)(b,{min:this.props.min,max:this.props.max,step:e,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onWheel:this.onMouseWheel,onChange:this.updateCurrent,onAfterChange:this.end})}),(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current,blurOnEnter:!0,onBlur:this.onManualBlur,isDisabled:this.props.disabled,onChange:this.updateManually})})]})}}class u extends n.Component{constructor(){super(...arguments),this.state={isChanging:!1,current:[0,1]},this.begin=()=>{this.setState({isChanging:!0})},this.end=e=>{this.setState({isChanging:!1}),this.props.onChange(e)},this.updateCurrent=e=>{this.setState({current:e})},this.updateMax=e=>{let t=e;1===this.props.step&&(t=Math.round(t)),t<this.state.current[0]?t
7319=this.state.current[0]:t<this.props.min&&(t=this.props.min),t>this.props.max&&(t=this.props.max),this.props.onChange([this.state.current[0],t])},this.updateMin=e=>{let t=e;1===this.props.step&&(t=Math.round(t)),t<this.props.min&&(t=this.props.min),t>this.state.current[1]?t=this.state.current[1]:t>this.props.max&&(t=this.props.max),this.props.onChange([t,this.state.current[1]])}}static getDerivedStateFromProps(e,t){return t.isChanging||e.value[0]===t.current[0]&&e.value[1]===t.current[1]?null:{current:e.value}}render(){let e=this.props.step;return void 0===e&&(e=1),(0,a.jsxs)("div",{className:"msp-slider2",children:[(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current[0],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMin})}),(0,a.jsx)("div",{children:(0,a.jsx)(b,{min:this.props.min,max:this.props.max,step:e,value:this.state.current,disabled:this.props.disabled,onBeforeChange:this.begin,onChange:this.updateCurrent,onAfterChange:this.end,range:!0,allowCross:!0})}),(0,a.jsx)("div",{children:(0,a.jsx)(i.oi,{numeric:!0,delayMs:50,value:this.state.current[1],onEnter:this.props.onEnter,blurOnEnter:!0,isDisabled:this.props.disabled,onChange:this.updateMax})})]})}}function c(e){let t=[],r={}.hasOwnProperty;for(let e=0;e<arguments.length;e++){let a=arguments[e];if(!a)continue;let n=typeof a;if("string"===n||"number"===n)t.push(a);else if(Array.isArray(a))t.push(c.apply(null,a));else if("object"===n)for(let e in a)r.call(a,e)&&a[e]&&t.push(e)}return t.join(" ")}function d(e){return e.touches.length>1||"touchend"===e.type.toLowerCase()&&e.touches.length>0}function p(e,t){return e?t.touches[0].clientY:t.touches[0].pageX}function f(e,t){return e?t.clientY:t.pageX}function m(e,t){let r=t.getBoundingClientRect();return e?r.top+.5*r.height:r.left+.5*r.width}function h(e){e.stopPropagation(),e.preventDefault()}class g extends n.Component{render(){let{className:e,tipFormatter:t,vertical:r,offset:n,value:i,index:o}=this.props,s=r?{bottom:`${n}%`}:{left:`${n}%`};return(0,a.jsx)("div",{className:e,style:s,title:t(i,o)})}}class b extends n.Component{constructor(e){let t;super(e),this.sliderElement=n.createRef(),this.handleElements=[],this.dragOffset=0,this.startPosition=0,this.startValue=0,this._getPointsCache=void 0,this.onMouseDown=e=>{if(0!==e.button)return;let t=f(this.props.vertical,e);if(this.isEventFromHandle(e)){let r=m(this.props.vertical,e.target);this.dragOffset=t-r,t=r}else this.dragOffset=0;this.onStart(t),this.addDocumentEvents("mouse"),h(e)},this.onTouchMove=e=>{if(d(e)){this.end("touch");return}let t=p(this.props.vertical,e);this.onMove(e,t-this.dragOffset)},this.onTouchStart=e=>{if(d(e))return;let t=p(this.props.vertical,e);if(this.isEventFromHandle(e)){let r=m(this.props.vertical,e.target);this.dragOffset=t-r,t=r}else this.dragOffset=0;this.onStart(t),this.addDocumentEvents("touch"),h(e)},this.eventHandlers={touchmove:e=>this.onTouchMove(e),touchend:e=>this.end("touch"),mousemove:e=>this.onMouseMove(e),mouseup:e=>this.end("mouse")},this.calcOffset=e=>{let{min:t,max:r}=this.props;return(e-t)/(r-t)*100};let{range:r,min:a,max:i}=e,o=r?Array.apply(null,Array(+r+1)).map(()=>a):a,s="defaultValue"in e?e.defaultValue:o,l=void 0!==e.value?e.value:s,u=(r?l:[a,l]).map(e=>this.trimAlignValue(e));t=r&&u[0]===u[u.length-1]&&u[0]===i?0:u.length-1,this.state={handle:null,recent:t,bounds:u}}componentDidUpdate(e){if(!("value"in this.props||"min"in this.props||"max"in this.props))return;let{bounds:t}=this.state;if(e.range){let e=(this.props.value||t).map(e=>this.trimAlignValue(e,this.props));if(e.every((e,r)=>e===t[r]))return;this.setState({bounds:e}),t.some(e=>this.isValueOutOfBounds(e,this.props))&&this.props.onChange(e)}else{let r=void 0!==this.props.value?this.props.value:t[1],a=this.trimAlignValue(r,this.props);if(a===t[1]&&t[0]===e.min)return;this.setState({bounds:[e.min,a]}),this.isValueOutOfBounds(t[1],this.props)&&this.props.onChange(a)}}onChange(e){let t=this.props;"value"in t?void 0!==e.handle&&this.setState({handle:e.handle}):this.setState(e);let r={...this.state,...e},a=t.range?r.bounds:r.bounds[1];t.onChange(a)}onMouseMove(e){let t=f(this.props.vertical,e);this.onMove(e,t-this.dragOffset)}onMove(e,t){h(e);let r=this.props,a=this.state,n=t-this.startPosition,i=(n=this.props.vertical?-n:n)/this.getSliderLength()*(r.max-r.min),o=this.trimAlignValue(this.startValue+i);if(o===a.bounds[a.handle])return;let s=[...a.bounds];s[a.handle]=o;let l=a.handle;if(r.pushable){let e=a.bounds[l];this.pushSurroundingHandles(s,l,e)}else r.allowCross&&(s.sort((e,t)=>
7319e-t),l=s.indexOf(o));this.onChange({handle:l,bounds:s})}onStart(e){this.props.onBeforeChange(this.getValue());let t=this.calcValueByPos(e);this.startValue=t,this.startPosition=e;let r=this.state,{bounds:a}=r,n=1;if(this.props.range){let e=0;for(let r=1;r<a.length-1;++r)t>a[r]&&(e=r);Math.abs(a[e+1]-t)<Math.abs(a[e]-t)&&(e+=1),n=e;let i=a[e+1]===a[e];i&&(n=r.recent),i&&t!==a[e+1]&&(n=t<a[e+1]?e:e+1)}if(this.setState({handle:n,recent:n}),t===r.bounds[n])return;let i=[...r.bounds];i[n]=t,this.onChange({bounds:i})}getPoints(){let{marks:e,step:t,min:r,max:a}=this.props,n=this._getPointsCache;if(!n||n.marks!==e||n.step!==t){let n={...e};if(null!==t)for(let e=r;e<=a;e+=t)n[e]=e;let i=Object.keys(n).map(parseFloat);i.sort((e,t)=>e-t),this._getPointsCache={marks:e,step:t,points:i}}return this._getPointsCache.points}getPrecision(e){let t=e.toString(),r=0;return t.indexOf(".")>=0&&(r=t.length-t.indexOf(".")-1),r}getSliderLength(){let e=this.sliderElement.current;return e?this.props.vertical?e.clientHeight:e.clientWidth:0}getSliderStart(){let e=this.sliderElement.current.getBoundingClientRect();return this.props.vertical?e.top:e.left}getValue(){let{bounds:e}=this.state;return this.props.range?e:e[1]}addDocumentEvents(e){"touch"===e?(document.addEventListener("touchmove",this.eventHandlers.touchmove),document.addEventListener("touchend",this.eventHandlers.touchend)):"mouse"===e&&(document.addEventListener("mousemove",this.eventHandlers.mousemove),document.addEventListener("mouseup",this.eventHandlers.mouseup))}calcValue(e){let{vertical:t,min:r,max:a}=this.props,n=Math.abs(e/this.getSliderLength());return t?(1-n)*(a-r)+r:n*(a-r)+r}calcValueByPos(e){let t=e-this.getSliderStart();return this.trimAlignValue(this.calcValue(t))}end(e){this.removeEvents(e),this.props.onAfterChange(this.getValue()),this.setState({handle:null})}isEventFromHandle(e){for(let t of this.handleElements)if(t.current===e.target)return!0;return!1}isValueOutOfBounds(e,t){return e<t.min||e>t.max}pushHandle(e,t,r,a){let n=e[t],i=e[t];for(;r*(i-n)<a;){if(!this.pushHandleOnePoint(e,t,r))return e[t]=n,!1;i=e[t]}return!0}pushHandleOnePoint(e,t,r){let a=this.getPoints(),n=a.indexOf(e[t])+r;if(n>=a.length||n<0)return!1;let i=t+r,o=a[n],{pushable:s}=this.props,l=r*(e[i]-o);return!!this.pushHandle(e,i,r,+s-l)&&(e[t]=o,!0)}pushSurroundingHandles(e,t,r){let{pushable:a}=this.props,n=e[t],i=0;if(e[t+1]-n<+a?i=1:n-e[t-1]<+a&&(i=-1),0===i)return;let o=t+i,s=i*(e[o]-n);this.pushHandle(e,o,i,+a-s)||(e[t]=r)}removeEvents(e){"touch"===e?(document.removeEventListener("touchmove",this.eventHandlers.touchmove),document.removeEventListener("touchend",this.eventHandlers.touchend)):"mouse"===e&&(document.removeEventListener("mousemove",this.eventHandlers.mousemove),document.removeEventListener("mouseup",this.eventHandlers.mouseup))}trimAlignValue(e,t){let{handle:r,bounds:a}=this.state||{},{marks:n,step:i,min:o,max:s,allowCross:l}={...this.props,...t||{}},u=e;u<=o&&(u=o),u>=s&&(u=s),!l&&null!=r&&r>0&&u<=a[r-1]&&(u=a[r-1]),!l&&null!=r&&r<a.length-1&&u>=a[r+1]&&(u=a[r+1]);let c=Object.keys(n).map(parseFloat);if(null!==i){let e=Math.round((u-o)/i)*i+o;c.push(e)}let d=c.map(e=>Math.abs(u-e)),p=c[d.indexOf(Math.min.apply(Math,d))];return null!==i?parseFloat(p.toFixed(this.getPrecision(i))):p}render(){let{handle:e,bounds:t}=this.state,{className:r,prefixCls:i,disabled:s,vertical:l,range:u,step:d,marks:p,tipFormatter:f}=this.props,m=this.props.handle,h=t.map(this.calcOffset),g=`${i}-handle`,b=t.map((e,r)=>c({[g]:!0,[`${g}-${r+1}`]:!0,[`${g}-lower`]:0===r,[`${g}-upper`]:r===t.length-1})),y={prefixCls:i,noTip:null===d||null===f,tipFormatter:f,vertical:l};if(this.handleElements.length!==t.length){this.handleElements=[];for(let e=0;e<t.length;e++)this.handleElements.push(n.createRef())}let x=t.map((t,r)=>n.cloneElement(m,{...y,className:b[r],value:t,offset:h[r],dragging:e===r,index:r,key:r,ref:this.handleElements[r]}));u||x.shift();let S=c({[i]:!0,[`${i}-with-marks`]:Object.keys(p).length,[`${i}-disabled`]:s,[`${i}-vertical`]:this.props.vertical,[r]:!!r});return(0,a.jsxs)("div",{ref:this.sliderElement,className:S,onTouchStart:s?o.ZT:this.onTouchStart,onMouseDown:s?o.ZT:this.onMouseDown,onWheel:s?o.ZT:this.props.onWheel,children:[(0,a.jsx)("div",{className:`${i}-rail`}),x]})}}b.defaultProps={prefixCls:"msp-slider-base",className:"",min:0,max:100,step:1,marks:{},handle:(0,a.jsx)(g,{className:"",vertical:!1,offset:0,tipFormatter:e=>e,value:0,index:0}),onBeforeChange:o.ZT,onChange:o.ZT,onAfterChange:o.ZT,tipFormatter:(e,t)=>e,disabled:!1,range:!1,vertical:!1,allowCross:!0,pushable:!1}},46636:function(e,t,r){r.r(t),r.d(t,{DefaultPluginUISpec:function(){return ei}});var a,n,i={};r.r(i),r.d(i,{AssignColorVolume:function(){return k},DownloadDensity:function(){return P}});var o=r(8777),s=r(29414),l=r(72762),u=r(45366),c=r(67801),d=r(16668),p=r(14086);let f=s.q.create({name:"built-in.animate-assembly-unwind",display:{name:"Unwind Assembly"},isExportable:!0,params:e=>{let t=[["all","All"]];for(let r of e.state.data.select(c.tE.Generators.rootsOfType(l.G.Molecule.Structure)))t.push([r.transform.ref,r.obj.data.models[0].label]);return{durationInMs:p.e.Numeric(3e3,{min:100,max:1e4,step:100}),playOnce:p.e.Boolean(!1),target:p.e.Select(t[0][0],t)}},canApply(e){let t=e.state.data,r=c.EW.RootRef;return{canApply:t.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D,r)).length>0}},getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),initialState:()=>({t:0}),setup(e,t,r){let a=r.state.data,n=e.target&&"all"!==e.target?e.target:c.EW.RootRef,i=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D,n)),o=a.build(),s=!1;for(let e of i)a.select(c.tE.Generators.ofTransformer(u.L.Representation.UnwindStructureAssemblyRepresentation3D,e.transform.ref)).length>0||(s=!0,o.to(e).apply(u.L.Representation.UnwindStructureAssemblyRepresentation3D,{t:0},{tags:"animate-assembly-unwind"}));
7319if(s)return o.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3DState).withTag("animate-assembly-unwind"));if(0===n.length)return;let i=a.build();for(let e of n)i.delete(e.transform.ref);return i.commit()},async apply(e,t,r){let a=r.plugin.state.data,n=r.params.target&&"all"!==r.params.target?r.params.target:c.EW.RootRef,i=a.select(c.tE.Generators.ofTransformer(u.L.Representation.UnwindStructureAssemblyRepresentation3D,n));if(0===i.length)return{kind:"finished"};let o=a.build(),s=(t.current-t.lastApplied)/r.params.durationInMs,l=e.t+s,p=!1;for(let e of(r.params.playOnce&&l>=1?(p=!0,l=1):l%=1,i))o.to(e).update({t:l});return(await d.I.State.Update(r.plugin,{state:a,tree:o,options:{doNotLogTiming:!0}}),p)?{kind:"finished"}:{kind:"next",state:{t:l}}}});var m=r(23833),h=r(38964),g=r(43975);let b=(0,g.A)(),y=(0,g.A)(),x=(0,h.D)(),S=s.q.create({name:"built-in.animate-camera-spin",display:{name:"Camera Spin",description:"Spin the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(4e3,{min:100,max:2e4,step:100}),speed:p.e.Numeric(1,{min:1,max:10,step:1},{description:"How many times to spin in the specified duration."}),direction:p.e.Select("cw",[["cw","Clockwise"],["ccw","Counter Clockwise"]],{cycle:!0})}),initialState:(e,t)=>{var r;return{snapshot:null===(r=t.canvas3d)||void 0===r?void 0:r.camera.getSnapshot()}},getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{var a;null===(a=r.canvas3d)||void 0===a||a.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){var a,n;if(0===t.current)return{kind:"next",state:e};let i=e.snapshot;if(i.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?(null===(a=t.animation)||void 0===a?void 0:a.currentFrame)/(t.animation.frameCount+1):(0,m.uZ)(t.current/r.params.durationInMs,0,1),s=2*Math.PI*o*r.params.speed*("ccw"===r.params.direction?-1:1);g.A.sub(b,i.position,i.target),g.A.normalize(y,i.up),h.D.setAxisAngle(x,y,s),g.A.transformQuat(b,b,x);let l=g.A.add((0,g.A)(),i.target,b);return(null===(n=r.plugin.canvas3d)||void 0===n||n.requestCameraReset({snapshot:{...i,position:l},durationMs:0}),o>=.99999)?{kind:"finished"}:{kind:"next",state:e}}}),T=s.q.create({name:"built-in.animate-model-index",display:{name:"Animate Trajectory"},isExportable:!0,params:()=>({mode:p.e.MappedStatic("loop",{palindrome:p.e.Group({}),loop:p.e.Group({direction:p.e.Select("forward",[["forward","Forward"],["backward","Backward"]])}),once:p.e.Group({direction:p.e.Select("forward",[["forward","Forward"],["backward","Backward"]])},{isFlat:!0})},{options:[["palindrome","Palindrome"],["loop","Loop"],["once","Once"]]}),duration:p.e.MappedStatic("fixed",{fixed:p.e.Group({durationInS:p.e.Numeric(5,{min:1,max:120,step:.1},{description:"Duration in seconds"})},{isFlat:!0}),computed:p.e.Group({targetFps:p.e.Numeric(30,{min:5,max:250,step:1},{label:"Target FPS"})},{isFlat:!0}),sequential:p.e.Group({maxFps:p.e.Numeric(30,{min:5,max:60,step:1})},{isFlat:!0})})}),canApply(e){let t=e.state.data;for(let e of t.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory))){let r=c.tE.findAncestorOfType(t.tree,t.cells,e.transform.ref,l.G.Molecule.Trajectory);if(r&&r.obj&&r.obj.data.frameCount>1)return{canApply:!0}}return{canApply:!1,reason:"No trajectory to animate"}},getDuration:(e,t)=>{var r;if((null===(r=e.duration)||void 0===r?void 0:r.name)==="fixed")return{kind:"fixed",durationMs:1e3*e.duration.params.durationInS};if("computed"===e.duration.name){let r=t.state.data,a=r.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory)),n=0;for(let t of a){let a=c.tE.findAncestorOfType(r.tree,r.cells,t.transform.ref,l.G.Molecule.Trajectory);a&&a.obj&&(n=Math.max(Math.ceil(1e3*a.obj.data.frameCount/e.duration.params.targetFps),n))}return{kind:"fixed",durationMs:n}}return{kind:"unknown"}},initialState:()=>({}),async apply(e,t,r){if("sequential"===r.params.duration.name&&t.current>0&&t.current-t.lastApplied<1e3/r.params.duration.params.maxFps)return{kind:"skip"};let a=r.plugin.state.data,n=a.select(c.tE.Generators.ofTransformer(u.L.Model.ModelFromTrajectory));if(0===n.length)return{kind:"finished"};let i=a.build(),o=r.params,s=e.palindromeDirections||{},p=!1,f=!0;
7319for(let e of n){let r=c.tE.findAncestorOfType(a.tree,a.cells,e.transform.ref,l.G.Molecule.Trajectory);if(!r||!r.obj)continue;let n=r.obj;n.data.frameCount<=1||i.to(e).update(r=>{let a=n.data.frameCount;if(1===a)return r;if(f=!1,"sequential"===o.duration.name){let t=1;if("once"===o.mode.name){if(-1==(t="backward"===o.mode.params.direction?-1:1)&&0===r.modelIndex||1===t&&r.modelIndex===a-1)return p=!0,r}else"palindrome"===o.mode.name&&(t=0===r.modelIndex?1:r.modelIndex===a-1?-1:s[e.transform.ref]||1);s[e.transform.ref]=t;let n=(r.modelIndex+t)%a;return n<0&&(n+=a),p=p||-1===t&&0===n||1===t&&n===a-1,{modelIndex:n}}{let e="fixed"===o.duration.name?1e3*o.duration.params.durationInS:Math.ceil(1e3*n.data.frameCount/o.duration.params.targetFps);if("once"===o.mode.name&&t.current>=e)return p=!0,{modelIndex:n.data.frameCount-1};let r=t.current%e/e;return"loop"===o.mode.name&&"backward"===o.mode.params.direction&&(r=1-r),"palindrome"===o.mode.name&&(r*=2)>1&&(r=2-r),{modelIndex:Math.min(Math.floor(n.data.frameCount*r),n.data.frameCount-1)}}})}return(f||await d.I.State.Update(r.plugin,{state:a,tree:i,options:{doNotLogTiming:!0}}),f||"once"===o.mode.name&&p)?{kind:"finished"}:"palindrome"===o.mode.name?{kind:"next",state:{palindromeDirections:s}}:{kind:"next",state:{}}}});var C=r(5932),O=r(40217),I=r(3305),A=r(123),w=r(54854),D=r(12845),E=r(59725),M=r(97667);let P=c.lQ.build({from:l.G.Root,display:{name:"Download Density",description:"Load a density from the provided source and create its default visual."},params:(e,t)=>{let{options:r}=t.dataFormats;return{source:p.e.MappedStatic("pdb-xray",{"pdb-xray":p.e.Group({provider:p.e.Group({id:p.e.Text("1tqn",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"]])},{pivot:"id"}),type:p.e.Select("2fofc",[["2fofc","2Fo-Fc"],["fofc","Fo-Fc"]])},{isFlat:!0}),"pdb-xray-ds":p.e.Group({provider:p.e.Group({id:p.e.Text("1tqn",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:p.e.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),"pdb-emd-ds":p.e.Group({provider:p.e.Group({id:p.e.Text("emd-8004",{label:"Id"}),server:p.e.Select("pdbe",[["pdbe","PDBe"],["rcsb","RCSB PDB"]])},{pivot:"id"}),detail:p.e.Numeric(3,{min:0,max:6,step:1},{label:"Detail"})},{isFlat:!0}),url:p.e.Group({url:p.e.Url(""),isBinary:p.e.Boolean(!1),format:p.e.Select("auto",r)},{isFlat:!0})},{options:[["pdb-xray","PDB X-ray maps"],["pdb-emd-ds","PDB EMD Density Server"],["pdb-xray-ds","PDB X-ray Density Server"],["url","URL"]]})}}})(({params:e},t)=>w.iQ.create("Download Density",async r=>{var a,n;let i,o,s;let l=e.source;switch(l.name){case"url":i=l.params;break;case"pdb-xray":i={url:E.x.Url("2fofc"===l.params.type?`https://www.ebi.ac.uk/pdbe/coordinates/files/${l.params.provider.id.toLowerCase()}.ccp4`:`https://www.ebi.ac.uk/pdbe/coordinates/files/${l.params.provider.id.toLowerCase()}_diff.ccp4`),isBinary:!0,label:`PDBe X-ray map: ${l.params.provider.id}`};break;case"pdb-emd-ds":i="pdbe"===l.params.provider.server?{url:E.x.Url(`https://www.ebi.ac.uk/pdbe/densities/emd/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`PDBe EMD Density Server: ${l.params.provider.id}`}:{url:E.x.Url(`https://maps.rcsb.org/em/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`RCSB PDB EMD Density Server: ${l.params.provider.id}`};break;case"pdb-xray-ds":i="pdbe"===l.params.provider.server?{url:E.x.Url(`https://www.ebi.ac.uk/pdbe/densities/x-ray/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`PDBe X-ray Density Server: ${l.params.provider.id}`}:{url:E.x.Url(`https://maps.rcsb.org/x-ray/${l.params.provider.id.toLowerCase()}/cell?detail=${l.params.detail}`),isBinary:!0,label:`RCSB PDB X-ray Density Server: ${l.params.provider.id}`};break;default:(0,M.UT)(l)}let u=await t.builders.data.download(i);switch(l.name){case"url":i=l.params,o="auto"===l.params.format?t.dataFormats.auto((0,D.W)(E.x.getUrl(i.url)),null===(a=u.cell)||void 0===a?void 0:a.obj):t.dataFormats.get(l.params.format);break;case"pdb-xray":s=l.params.provider.id,o=t.dataFormats.get("ccp4");break;case"pdb-emd-ds":case"pdb-xray-ds":s=l.params.provider.id,o=t.dataFormats.get("dscif");break;default:(0,M.UT)(l)}if(!o){t.log.warn("DownloadDensity: Format provider not found.");return}let c=await o.parse(t,u,{entryId:s});await (null===(n=o.visuals)||void 0===n?void 0:n.call(o,t,c))})),k=c.lQ.build({display:{name:"Assign Volume Colors",description:"Assigns another volume to be available for coloring."},from:l.G.Volume.Data,isApplicable:e=>!e.data.colorVolume,params(e,t){let r=t.state.data.select(c.tE.Generators.root.subtree().ofType(l.G.Volume.Data).filter(t=>{var r;return!!t.obj&&!(null===(r=t.obj)||void 0===r?void 0:r.data.colorVolume)&&t.obj!==e}));return 0===r.length?{ref:p.e.Text("",{isHidden:!0,label:"Volume"})}:{ref:p.e.Select(r[0].transform.ref,r.map(e=>[e.transform.ref,e.obj.label]),{label:"Volume"})}}})(({ref:e,params:t,state:r},a)=>a.build().to(e).apply(u.L.Volume.AssignColorVolume,{ref:t.ref},{dependsOn:[t.ref]}).commit());var B=r(95403),_=r(85764);let R=s.q.create({name:"built-in.animate-state-interpolation",display:{name:"Animate State (experimental)"},params:()=>({transtionDurationInMs:p.e.Numeric(2e3,{min:100,max:3e4,step:10})}),canApply:e=>({canApply:e.managers.snapshot.state.entries.size>1}),initialState:()=>({}),async apply(e,t,r){let a=r.plugin.managers.snapshot.state.entries;if(a.size<2)return{kind:"finished"};let n=t.current%r.params.transtionDurationInMs/r.params.transtionDurationInMs,i=Math.floor(t.current/r.params.transtionDurationInMs)%a.size,o=Math.ceil(t.current/r.params.transtionDurationInMs);o===i&&o++,o%=a.size;let s=a.get(i).snapshot,l=a.get(o).snapshot;if(!s.data||!l.data)return{kind:"skip"};let u=s.data.tree.transforms,p=l.data.tree.transforms,f=r.plugin.state.data,m=f.build();for(let e of u)for(let t of p){let a;if(t.ref!==e.ref||t.version===e.version)continue;let i=c.EW.fromJSON(e),o=c.EW.fromJSON(t),s=f.cells.get(e.ref);s&&(a=i.transformer.definition.interpolate?i.transformer.definition.interpolate(i.params,o.params,n,r.plugin):n<=.5?i.params:o.params,(0,_.wU)(s,a)||m.to(e.ref).update(a))}return await d.I.State.Update(r.plugin,{state:f,tree:m,options:{doNotLogTiming:!0}}),{kind:"next",state:{}}}}),F=s.q.create({name:"built-in.animate-structure-spin",display:{name:"Spin Structure"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(3e3,{min:100,max:1e4,step:100})}),initialState:()=>({t:0}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),async setup(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3D)),i=a.build(),o=!1;for(let e of n)a.select(c.tE.Generators.ofTransformer(u.L.Representation.SpinStructureRepresentation3D,e.transform.ref)).length>0||(o=!0,i.to(e.transform.ref).apply(u.L.Representation.SpinStructureRepresentation3D,{t:0},{tags:"animate-structure-spin"}));
7319if(o)return i.commit({doNotUpdateCurrent:!0})},teardown(e,t,r){let a=r.state.data,n=a.select(c.tE.Generators.ofType(l.G.Molecule.Structure.Representation3DState).withTag("animate-structure-spin"));if(0===n.length)return;let i=a.build();for(let e of n)i.delete(e.transform.ref);return i.commit()},async apply(e,t,r){var a;let n=r.plugin.state.data,i=n.select(c.tE.Generators.ofTransformer(u.L.Representation.SpinStructureRepresentation3D));if(0===i.length)return{kind:"finished"};let o=n.build(),s=(t.current-t.lastApplied)/r.params.durationInMs,l=(e.t+s)%1;for(let e of i)o.to(e).update({...null===(a=e.params)||void 0===a?void 0:a.values,t:l});return await d.I.State.Update(r.plugin,{state:n,tree:o,options:{doNotLogTiming:!0}}),{kind:"next",state:{t:l}}}});var L=r(58463);let z=(0,g.A)(),N=(0,g.A)(),G=(0,h.D)(),U=s.q.create({name:"built-in.animate-camera-rock",display:{name:"Camera Rock",description:"Rock the 3D scene around the x-axis in view space"},isExportable:!0,params:()=>({durationInMs:p.e.Numeric(4e3,{min:100,max:2e4,step:100}),speed:p.e.Numeric(1,{min:1,max:10,step:1},{description:"How many times to rock from side to side."}),angle:p.e.Numeric(10,{min:0,max:180,step:1},{description:"How many degrees to rotate in each direction."})}),initialState:(e,t)=>({snapshot:t.canvas3d.camera.getSnapshot()}),getDuration:e=>({kind:"fixed",durationMs:e.durationInMs}),teardown:(e,t,r)=>{var a;null===(a=r.canvas3d)||void 0===a||a.requestCameraReset({snapshot:t.snapshot,durationMs:0})},async apply(e,t,r){var a,n;if(0===t.current)return{kind:"next",state:e};let i=e.snapshot;if(i.radiusMax<1e-4)return{kind:"finished"};let o=t.animation?(null===(a=t.animation)||void 0===a?void 0:a.currentFrame)/(t.animation.frameCount+1):(0,m.uZ)(t.current/r.params.durationInMs,0,1),s=Math.sin(o*r.params.speed*Math.PI*2)*(0,L.Id)(r.params.angle);g.A.sub(z,i.position,i.target),g.A.normalize(N,i.up),h.D.setAxisAngle(G,N,s),g.A.transformQuat(z,z,G);let l=g.A.add((0,g.A)(),i.target,z);return(null===(n=r.plugin.canvas3d)||void 0===n||n.requestCameraReset({snapshot:{...i,position:l},durationMs:0}),o>=.99999)?{kind:"finished"}:{kind:"next",state:e}}});(a=n||(n={})).Action=function(e,t){return{action:e,customControl:t&&t.customControl,autoUpdate:t&&t.autoUpdate}},a.Behavior=function(e,t={}){return{transformer:e,defaultParams:t}};let V=()=>({actions:[n.Action(A.DownloadStructure),n.Action(i.DownloadDensity),n.Action(B.DownloadFile),n.Action(B.OpenFiles),n.Action(A.LoadTrajectory),n.Action(A.EnableModelCustomProps),n.Action(A.EnableStructureCustomProps),n.Action(o.rJ),n.Action(o.k6),n.Action(o.aU),n.Action(u.L.Data.Download),n.Action(u.L.Data.ParseCif),n.Action(u.L.Data.ParseCcp4),n.Action(u.L.Data.ParseDsn6),n.Action(u.L.Model.TrajectoryFromMmCif),n.Action(u.L.Model.TrajectoryFromCifCore),n.Action(u.L.Model.TrajectoryFromPDB),n.Action(u.L.Model.TransformStructureConformation),n.Action(u.L.Model.StructureInstances),n.Action(u.L.Model.StructureFromModel),n.Action(u.L.Model.StructureFromTrajectory),n.Action(u.L.Model.ModelFromTrajectory),n.Action(u.L.Model.StructureSelectionFromScript),n.Action(u.L.Representation.StructureRepresentation3D),n.Action(u.L.Representation.StructureSelectionsDistance3D),n.Action(u.L.Representation.StructureSelectionsAngle3D),n.Action(u.L.Representation.StructureSelectionsDihedral3D),n.Action(u.L.Representation.StructureSelectionsLabel3D),n.Action(u.L.Representation.StructureSelectionsOrientation3D),n.Action(u.L.Representation.ModelUnitcell3D),n.Action(u.L.Representation.StructureBoundingBox3D),n.Action(u.L.Representation.ExplodeStructureRepresentation3D),n.Action(u.L.Representation.SpinStructureRepresentation3D),n.Action(u.L.Representation.UnwindStructureAssemblyRepresentation3D),n.Action(u.L.Representation.OverpaintStructureRepresentation3DFromScript),n.Action(u.L.Representation.TransparencyStructureRepresentation3DFromScript),n.Action(u.L.Representation.ClippingStructureRepresentation3DFromScript),n.Action(u.L.Representation.SubstanceStructureRepresentation3DFromScript),n.Action(u.L.Representation.ThemeStrengthRepresentation3D),n.Action(k),n.Action(u.L.Volume.VolumeFromCcp4),n.Action(u.L.Volume.VolumeFromDsn6),n.Action(u.L.Volume.VolumeFromCube),n.Action(u.L.Volume.VolumeFromDx),n.Action(u.L.Representation.VolumeRepresentation3D),n.Action(u.L.Volume.VolumeTransform),n.Action(u.L.Volume.VolumeInstances)],behaviors:[n.Behavior(O.DN.Representation.HighlightLoci),n.Behavior(O.DN.Representation.SelectLoci),n.Behavior(O.DN.Representation.DefaultLociLabelProvider),n.Behavior(O.DN.Representation.FocusLoci),n.Behavior(O.DN.Camera.FocusLoci),n.Behavior(O.DN.Camera.CameraAxisHelper),n.Behavior(O.DN.Camera.CameraControls),n.Behavior(O.DN.State.SnapshotControls),n.Behavior(I.Y),n.Behavior(O.DN.CustomProps.StructureInfo),n.Behavior(O.DN.CustomProps.AccessibleSurfaceArea),n.Behavior(O.DN.CustomProps.BestDatabaseSequenceMapping),n.Behavior(O.DN.CustomProps.Interactions),n.Behavior(O.DN.CustomProps.SecondaryStructure),n.Behavior(O.DN.CustomProps.ValenceModel),n.Behavior(O.DN.CustomProps.CrossLinkRestraint),n.Behavior(O.DN.CustomProps.Streamlines)],animations:[T,S,U,C.D,C.Z,f,F,R]});var j=r(5862),H=r(22401),q=r(83733),X=r(52755),W=r(91126),K=r(47792),Q=r(1573),Z=r(87144),Y=r(7922),$=r(61445),J=r(37156),ee=r(86517);let et={color:p.e.Color(Y.t.black,{description:"Display color of the volume."}),wireframe:p.e.Boolean(!1,{description:"Control display of the volume as a wireframe."}
7319),opacity:p.e.Numeric(.3,{min:0,max:1,step:.01},{description:"Opacity of the volume."})},er=new Map([["em",[-5,5]],["2fo-fc",[0,3]],["fo-fc(+ve)",[1,5]],["fo-fc(-ve)",[-5,-1]]]);class ea extends H.Xl{constructor(){super(...arguments),this.ref=c.tE.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name),this.getVisible=()=>{let e=this.plugin.state.data,t=this.ref;return!!t&&!e.cells.get(t).state.isHidden},this.toggleVisible=()=>{let e=this.plugin.state.data,t=this.ref;t&&(0,J.setSubtreeVisibility)(e,t,!e.cells.get(t).state.isHidden)}}componentDidUpdate(){this.ref=c.tE.findTagInSubtree(this.plugin.state.data.tree,this.props.bCell.transform.ref,this.props.name)}componentDidMount(){this.subscribe(this.plugin.state.data.events.cell.stateUpdated,e=>{this.ref===e.ref&&this.forceUpdate()})}render(){let e=this.props,{isRelative:t,stats:r}=e,a=e.channels[e.name],{min:n,max:i,mean:o,sigma:s}=r,l=Math.round(100*("relative"===a.isoValue.kind?a.isoValue.relativeValue:a.isoValue.absoluteValue))/100,u=(n-o)/s,c=(i-o)/s;if(!this.props.isUnbounded){let e=er.get(this.props.name);"em"===this.props.name?(u=Math.max(e[0],u),c=Math.min(e[1],c)):(u=e[0],c=e[1])}let d=o+s*u,p=o+s*c,f=(0,$.Zd)(t?Math.round((p-d)/s)/100:s/100,2),m=t?u:d,h=t?c:p;return(0,j.jsx)(X.wc,{label:e.label+(e.isRelative?" Ï":""),colorStripe:a.color,pivot:(0,j.jsxs)("div",{className:"msp-volume-channel-inline-controls",children:[(0,j.jsx)(K.iR,{value:l,min:m,max:h,step:f,onChange:r=>e.changeIso(e.name,r,t),onChangeImmediate:r=>e.changeIso(e.name,r,t),disabled:e.params.isDisabled,onEnter:e.params.events.onEnter}),(0,j.jsx)(X.hU,{svg:this.getVisible()?ee.Bk:ee.gu,onClick:this.toggleVisible,toggleState:!1,disabled:e.params.isDisabled})]}),controls:(0,j.jsx)(W.Fp,{onChange:({name:t,value:r})=>e.changeParams(e.name,t,r),params:et,values:a,onEnter:e.params.events.onEnter,isDisabled:e.params.isDisabled})})}}class en extends H.Xl{constructor(){super(...arguments),this.changeIso=(e,t,r)=>{let a=this.props.params;this.newParams({...a,entry:{name:a.entry.name,params:{...a.entry.params,channels:{...a.entry.params.channels,[e]:{...a.entry.params.channels[e],isoValue:r?Q.f.IsoValue.relative(t):Q.f.IsoValue.absolute(t)}}}}})},this.changeParams=(e,t,r)=>{let a=this.props.params;this.newParams({...a,entry:{name:a.entry.name,params:{...a.entry.params,channels:{...a.entry.params.channels,[e]:{...a.entry.params.channels[e],[t]:r}}}}})},this.changeOption=({name:e,value:t})=>{let r=this.props.params;if("entry"===e)this.newParams({...r,entry:{name:t,params:r.entry.params}});else{let e=this.props.b.data,a="em"===e.info.kind,n=t.params.isRelative,i=e.info.header.sampling[0],o=r.entry.params.channels,s={...r.entry.params.view.name===t.name?r.entry.params.view.params:this.props.info.params.entry.map(r.entry.name).params.view.map(t.name).defaultValue};"selection-box"===t.name?s.radius=t.params.radius:"camera-target"===t.name?(s.radius=t.params.radius,s.dynamicDetailLevel=t.params.dynamicDetailLevel):"box"===t.name?(s.bottomLeft=t.params.bottomLeft,s.topRight=t.params.topRight):"auto"===t.name&&(s.radius=t.params.radius,s.selectionDetailLevel=t.params.selectionDetailLevel),s.isUnbounded=!!t.params.isUnbounded,this.newParams({...r,entry:{name:r.entry.name,params:{...r.entry.params,view:{name:t.name,params:s},detailLevel:t.params.detailLevel,channels:a?{em:this.convert(o.em,i.valuesInfo[0],n)}:{"2fo-fc":this.convert(o["2fo-fc"],i.valuesInfo[0],n),"fo-fc(+ve)":this.convert(o["fo-fc(+ve)"],i.valuesInfo[1],n),"fo-fc(-ve)":this.convert(o["fo-fc(-ve)"],i.valuesInfo[1],n)}}}})}}}areInitial(e){return p.e.areEqual(this.props.info.params,e,this.props.info.initialValues)}newParams(e){this.props.events.onChange(e,this.areInitial(e))}convert(e,t,r){return{...e,isoValue:r?Q.f.IsoValue.toRelative(e.isoValue,t):Q.f.IsoValue.toAbsolute(e.isoValue,t)}}render(){if(!this.props.b)return null;let e=this.props.b.data,t="em"===e.info.kind,r=t?"em":"2fo-fc",a=this.props.params,n=this.props.info.params.entry.map(a.entry.name),i=n.params.detailLevel,o={...i,label:"Dynamic Detail",defaultValue:n.params.view.map("camera-target").params.dynamicDetailLevel.defaultValue},s={...i,label:"Selection Detail",defaultValue:n.params.view.map("auto").params.selectionDetailLevel.defaultValue},l=e.info.header.sampling[0],u="relative"===a.entry.params.channels[r].isoValue.kind,c=p.e.Boolean(u,{description:"Use normalized or absolute isocontour scale.",label:"Normalized"}),d=!!a.entry.params.view.params.isUnbounded,f=p.e.Boolean(d,{description:"Show full/limited range of iso-values for more fine-grained control.",label:"Unbounded"}),m="off"===a.entry.params.view.name,h={entry:p.e.Select(a.entry.name,e.data.entries.map(e=>[e.dataId,e.dataId]),{isHidden:m,description:"Which entry with volume data to display."}),view:p.e.MappedStatic(a.entry.params.view.name,{off:p.e.Group({isRelative:p.e.Boolean(u,{isHidden:!0}),isUnbounded:p.e.Boolean(d,{isHidden:!0})},{description:"Display off."}),box:p.e.Group({bottomLeft:p.e.Vec3(Z.AO.zero()),topRight:p.e.Vec3(Z.AO.zero()),detailLevel:i,isRelative:c,isUnbounded:f},{description:"Static box defined by cartesian coords."}
7319),"selection-box":p.e.Group({radius:p.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in â« within which the volume is shown."}),detailLevel:i,isRelative:c,isUnbounded:f},{description:"Box around focused element."}),"camera-target":p.e.Group({radius:p.e.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),detailLevel:{...i,isHidden:!0},dynamicDetailLevel:o,isRelative:c,isUnbounded:f},{description:"Box around camera target."}),cell:p.e.Group({detailLevel:i,isRelative:c,isUnbounded:f},{description:"Box around the structure's bounding box."}),auto:p.e.Group({radius:p.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in â« within which the volume is shown."}),detailLevel:i,selectionDetailLevel:s,isRelative:c,isUnbounded:f},{description:"Box around focused element."})},{options:q.a.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Focus" shows the volume around the element/atom last interacted with. "Around Camera" shows the volume around the point the camera is targeting. "Whole Structure" shows the volume for the whole structure.'})},g={entry:a.entry.name,view:{name:a.entry.params.view.name,params:{detailLevel:a.entry.params.detailLevel,radius:a.entry.params.view.params.radius,bottomLeft:a.entry.params.view.params.bottomLeft,topRight:a.entry.params.view.params.topRight,selectionDetailLevel:a.entry.params.view.params.selectionDetailLevel,dynamicDetailLevel:a.entry.params.view.params.dynamicDetailLevel,isRelative:u,isUnbounded:d}}};return m?(0,j.jsx)(W.Fp,{onChange:this.changeOption,params:h,values:g,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled}):(0,j.jsxs)(j.Fragment,{children:[!t&&(0,j.jsx)(ea,{label:"2Fo-Fc",name:"2fo-fc",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:d}),!t&&(0,j.jsx)(ea,{label:"Fo-Fc(+ve)",name:"fo-fc(+ve)",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:d}),!t&&(0,j.jsx)(ea,{label:"Fo-Fc(-ve)",name:"fo-fc(-ve)",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[1],isUnbounded:d}),t&&(0,j.jsx)(ea,{label:"EM",name:"em",bCell:this.props.bCell,channels:a.entry.params.channels,changeIso:this.changeIso,changeParams:this.changeParams,isRelative:u,params:this.props,stats:l.valuesInfo[0],isUnbounded:d}),(0,j.jsx)(W.Fp,{onChange:this.changeOption,params:h,values:g,onEnter:this.props.events.onEnter,isDisabled:this.props.isDisabled})]})}}let ei=()=>({...V(),customParamEditors:[[o.aU,en]]})},40217:function(e,t,r){r.d(t,{mB:function(){return r_},qZ:function(){return m.q},DN:function(){return rR}});var a,n,i,o,s,l={};r.r(l),r.d(l,{SyncRepresentationToCanvas:function(){return y},SyncStructureRepresentation3DState:function(){return x},UpdateRepresentationVisibility:function(){return S},registerDefault:function(){return b}});var u={};r.r(u),r.d(u,{Focus:function(){return w},FocusObject:function(){return D},OrientAxes:function(){return E},Reset:function(){return I},ResetAxes:function(){return M},SetSnapshot:function(){return A},registerDefault:function(){return O}});var c={};r.r(c),r.d(c,{Canvas3DSetSettings:function(){return B},registerDefault:function(){return k}});var d={};r.r(d),r.d(d,{CameraAxisHelper:function(){return Y},CameraControls:function(){return ee},DefaultClickResetCameraOnEmpty:function(){return q},DefaultClickResetCameraOnEmptySelectMode:function(){return X},DefaultFocusLociBindings:function(){return W},FocusLoci:function(){return Z},NoPrimaryFocusLociBindings:function(){return K}});var p={};r.r(p),r.d(p,{SnapshotControls:function(){return ei}});var f={};r.r(f),r.d(f,{AccessibleSurfaceArea:function(){return ez},BestDatabaseSequenceMapping:function(){return e4},CrossLinkRestraint:function(){return tI},Interactions:function(){return eX},SecondaryStructure:function(){return eK},Streamlines:function(){return rB},StructureInfo:function(){return el},ValenceModel:function(){return eY}});var m=r(45213),h=r(37156),g=r(72762);function b(e){y(e),x(e),S(e)}function y(e){let t=e.state.data.events;t.object.created.subscribe(t=>{var r;
7319g.G.isRepresentation3D(t.obj)&&(T(t.state.cells.get(t.ref),t.obj.data.repr),t.obj.data.repr.setState({syncManually:!0}),null===(r=e.canvas3d)||void 0===r||r.add(t.obj.data.repr))}),t.object.updated.subscribe(t=>{var r,a;t.oldObj&&g.G.isRepresentation3D(t.oldObj)&&(null===(r=e.canvas3d)||void 0===r||r.remove(t.oldObj.data.repr),t.oldObj.data.repr.destroy()),g.G.isRepresentation3D(t.obj)&&(T(t.state.cells.get(t.ref),t.obj.data.repr),"recreate"===t.action&&t.obj.data.repr.setState({syncManually:!0}),null===(a=e.canvas3d)||void 0===a||a.add(t.obj.data.repr))}),t.object.removed.subscribe(t=>{var r;g.G.isRepresentation3D(t.obj)&&(null===(r=e.canvas3d)||void 0===r||r.remove(t.obj.data.repr),t.obj.data.repr.destroy())})}function x(e){let t=e.state.data.events;t.object.created.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.state),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)}),t.object.updated.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.state),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)}),t.object.removed.subscribe(t=>{var r;if(!g.G.Molecule.Structure.Representation3DState.is(t.obj))return;let a=t.obj.data;a.repr.setState(a.initialState),null===(r=e.canvas3d)||void 0===r||r.update(a.repr)})}function S(e){e.state.data.events.cell.stateUpdated.subscribe(t=>{var r;let a=t.state.cells.get(t.ref);g.G.isRepresentation3D(a.obj)&&T(a,a.obj.data.repr)&&(null===(r=e.canvas3d)||void 0===r||r.syncVisibility())})}function T(e,t){return!!e.state.isHidden===t.state.visible&&(t.setState({visible:!e.state.isHidden}),!0)}var C=r(16668);function O(e){I(e),w(e),D(e),A(e),E(e),M(e)}function I(e){C.I.Camera.Reset.subscribe(e,t=>{e.managers.camera.reset(null==t?void 0:t.snapshot,null==t?void 0:t.durationMs)})}function A(e){C.I.Camera.SetSnapshot.subscribe(e,({snapshot:t,durationMs:r})=>{e.managers.camera.setSnapshot(t,r)})}function w(e){C.I.Camera.Focus.subscribe(e,({center:t,radius:r,durationMs:a})=>{e.managers.camera.focusSphere({center:t,radius:r},{durationMs:a}),e.events.canvas3d.settingsUpdated.next(void 0)})}function D(e){C.I.Camera.FocusObject.subscribe(e,async t=>{e.managers.camera.focusObject(t)})}function E(e){C.I.Camera.OrientAxes.subscribe(e,({structures:t,durationMs:r})=>{e.managers.camera.orientAxes(t,r)})}function M(e){C.I.Camera.ResetAxes.subscribe(e,({durationMs:t})=>{e.managers.camera.resetAxes(t)})}var P=r(2622);function k(e){B(e)}function B(e){C.I.Canvas3D.ResetSettings.subscribe(e,()=>{var t;null===(t=e.canvas3d)||void 0===t||t.setProps(P.Ug),e.events.canvas3d.settingsUpdated.next(void 0)}),C.I.Canvas3D.SetSettings.subscribe(e,t=>{var r;e.canvas3d&&(null===(r=e.canvas3d)||void 0===r||r.setProps(t.settings),e.events.canvas3d.settingsUpdated.next(void 0))})}var _=r(51064),R=r(67589),F=r(14086),L=r(58684),z=r(64770),N=r(19609),G=r(87144);let U=L.b4,V=L.N0,j=z.K.Trigger,H=z.K.TriggerKey,q=(0,z.K)([j(U.Flag.Primary,V.create()),j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Reset camera focus","Click on nothing using ${triggers}"),X=(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Reset camera focus (Selection Mode)","Click on nothing using ${triggers}"),W={clickCenterFocus:(0,z.K)([j(U.Flag.Primary,V.create()),j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:q,clickResetCameraOnEmptySelectMode:X},K={clickCenterFocus:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0})),j(U.Flag.Trigger)],"Camera center and focus","Click element using ${triggers}"),clickCenterFocusSelectMode:(0,z.K)([j(U.Flag.Secondary,V.create()),j(U.Flag.Primary,V.create({control:!0}))],"Camera center and focus (Selection Mode)","Click element using ${triggers}"),clickResetCameraOnEmpty:q,clickResetCameraOnEmptySelectMode:X},Q={minRadius:F.e.Numeric(8,{min:1,max:50,step:1}),extraRadius:F.e.Numeric(4,{min:1,max:50,step:1},{description:"Value added to the bounding-sphere radius of the Loci"}),durationMs:F.e.Numeric(250,{min:0,max:1e3,step:1},{description:"Camera transition duration"}),bindings:F.e.Value(W,{isHidden:!0})},Z=m.q.create({name:"camera-focus-loci",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeOb
7319servable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{var a,n,i,o,s,l,u,c;if(!this.ctx.canvas3d)return;let d=this.ctx.selectionMode?this.params.bindings.clickCenterFocusSelectMode:this.params.bindings.clickCenterFocus,p=this.ctx.selectionMode?null!==(a=this.params.bindings.clickResetCameraOnEmptySelectMode)&&void 0!==a?a:X:null!==(n=this.params.bindings.clickResetCameraOnEmpty)&&void 0!==n?n:q;if(R.o_.isEmpty(e.loci)&&z.K.match(p,t,r)){C.I.Camera.Reset(this.ctx,{});return}let f=null!==(l=null===(s=null===(o=null===(i=e.repr)||void 0===i?void 0:i.props)||void 0===o?void 0:o.snapshotKey)||void 0===s?void 0:s.trim())&&void 0!==l?l:"",m=null===(c=null===(u=e.repr)||void 0===u?void 0:u.props)||void 0===c?void 0:c.markdownCommands;if(!f&&("object"!=typeof m||!(Object.keys(m).length>0))&&z.K.match(d,t,r)){let t=R.o_.normalize(e.loci,this.ctx.managers.interactivity.props.granularity);this.ctx.managers.camera.focusLoci(t,this.params)}})}},params:()=>Q,display:{name:"Camera Focus Loci on Canvas"}}),Y=m.q.create({name:"camera-axis-helper",category:"interaction",ctor:class extends m.q.Handler{register(){let e=N.sE.None,t=0;this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:r})=>{let a,n;if(!this.ctx.canvas3d||!(0,N.EJ)(r.loci))return;let i=r.loci.elements[0].groupId;if(i===N.sE.None){e=N.sE.None,t=0;return}let{camera:o}=this.ctx.canvas3d;if(i>=N.sE.X&&i<=N.sE.Z){e=N.sE.None,t=0;let r=G.AO.sub((0,G.AO)(),o.target,o.position),s=G.AO.cross((0,G.AO)(),r,o.up);(n=(0,G.AO)())[i-1]=1,a=G.AO.cross((0,G.AO)(),n,s),0===G.AO.magnitude(a)&&(a=r)}else e===i?t=(t+1)%2:(e=i,t=0),i===N.sE.XY?(n=t?G.AO.unitX:G.AO.unitY,a=G.AO.negUnitZ):i===N.sE.XZ?(n=t?G.AO.unitX:G.AO.unitZ,a=G.AO.negUnitY):(n=t?G.AO.unitY:G.AO.unitZ,a=G.AO.negUnitX);this.ctx.canvas3d.requestCameraReset({snapshot:(e,t)=>t.getInvariantFocus(e.boundingSphereVisible.center,e.boundingSphereVisible.radius,n,a)})})}},params:()=>({}),display:{name:"Camera Axis Helper"}}),$={keySpinAnimation:(0,z.K)([H("I")],"Spin Animation","Press ${triggers}"),keyRockAnimation:(0,z.K)([H("O")],"Rock Animation","Press ${triggers}"),keyToggleFlyMode:(0,z.K)([H("Space",V.create({shift:!0}))],"Toggle Fly Mode","Press ${triggers}"),keyResetView:(0,z.K)([H("T")],"Reset View","Press ${triggers}"),keyGlobalIllumination:(0,z.K)([H("G")],"Global Illumination","Press ${triggers}")},J={bindings:F.e.Value($,{isHidden:!0})},ee=m.q.create({name:"camera-controls",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.key,({code:e,key:t,modifiers:r})=>{var a;if(!this.ctx.canvas3d)return;let n={...$,...this.params.bindings},i=this.ctx.canvas3d.props.trackball,o=this.ctx.canvas3d.props.illumination;if(z.K.matchKey(n.keySpinAnimation,e,r,t)){let e="spin"!==i.animate.name?"spin":"off";"off"===e?C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{}}}}}):C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{speed:.1,axis:G.AO.create(0,-1,0)}}}}})}if(z.K.matchKey(n.keyRockAnimation,e,r,t)){let e="rock"!==i.animate.name?"rock":"off";"off"===e?C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{}}}}}):C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,animate:{name:e,params:{speed:.3,angle:10,axis:G.AO.create(0,-1,0)}}}}})}if(z.K.matchKey(n.keyToggleFlyMode,e,r,t)){let e=!i.flyMode;C.I.Canvas3D.SetSettings(this.ctx,{settings:{trackball:{...i,flyMode:e}}}),(null===(a=this.ctx.canvas3dContext)||void 0===a?void 0:a.canvas)&&(this.ctx.canvas3dContext.canvas.style.cursor=e?"crosshair":"unset")}z.K.matchKey(n.keyResetView,e,r,t)&&C.I.Camera.Reset(this.ctx,{}),z.K.matchKey(n.keyGlobalIllumination,e,r,t)&&C.I.Canvas3D.SetSettings(this.ctx,{settings:{illumination:{...o,enabled:!o.enabled}}})})}},params:()=>J,display:{name:"Camera Controls on Canvas"}}),et=L.N0,er=z.K.TriggerKey,ea={next:(0,z.K)([er("ArrowRight",et.create({control:!0})),er("GamepadY")]),previous:(0,z.K)([er("ArrowLeft",et.create({control:!0})),er("GamepadX")]),first:(0,z.K)([er("ArrowUp",et.create({control:!0}))]),last:(0,z.K)([er("ArrowDown",et.create({control:!0}))])},en={bindings:F.e.Value(ea,{isHidden:!0})}
7319,ei=m.q.create({name:"snapshot-controls",category:"interaction",ctor:class extends m.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.keyReleased,({code:e,modifiers:t,key:r})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let a=this.params.bindings,{snapshot:n}=this.ctx.managers;if(z.K.matchKey(a.next,e,t,r)&&n.applyNext(1),z.K.matchKey(a.previous,e,t,r)&&n.applyNext(-1),z.K.matchKey(a.first,e,t,r)){let e=n.state.entries.get(0),t=n.setCurrent(e.snapshot.id);if(t)return this.ctx.state.setSnapshot(t)}if(z.K.matchKey(a.last,e,t,r)){let e=n.state.entries.get(n.state.entries.size-1),t=n.setCurrent(e.snapshot.id);if(t)return this.ctx.state.setSnapshot(t)}})}},params:()=>en,display:{name:"Snapshot Controls"}});var eo=r(30502),es=r(67801);let el=m.q.create({name:"structure-info-prop",category:"custom-props",display:{name:"Structure Info"},ctor:class extends m.q.Handler{get maxModelIndex(){var e,t;let r=-1;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let n=(null===(e=a.obj)||void 0===e?void 0:e.data)&&eo.Model.Index.get(null===(t=a.obj)||void 0===t?void 0:t.data).value;void 0!==n&&n>r&&(r=n)}return r}get maxStructureIndex(){var e,t;let r=-1;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Structure))){let n=(null===(e=a.obj)||void 0===e?void 0:e.data)&&eo.Structure.Index.get(null===(t=a.obj)||void 0===t?void 0:t.data).value;void 0!==n&&n>r&&(r=n)}return r}get asymIdOffset(){var e;let t=0,r=0;for(let a of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let n=null===(e=a.obj)||void 0===e?void 0:e.data;if(n){let e=eo.Model.AsymIdCount.get(n),a=eo.Model.AsymIdOffset.get(n).value;void 0!==e&&void 0!==a&&(t=Math.max(t,a.auth+e.auth),r=Math.max(r,a.label+e.label))}}return{auth:t,label:r}}setModelMaxIndex(){var e;let t=this.maxModelIndex;for(let r of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Model))){let a=null===(e=r.obj)||void 0===e?void 0:e.data;a&&eo.Model.MaxIndex.get(a).value!==t&&eo.Model.MaxIndex.set(a,{value:t},t)}}setStructureMaxIndex(){var e;let t=this.maxModelIndex;for(let r of this.ctx.state.data.select(es.tE.Generators.rootsOfType(g.G.Molecule.Structure))){let a=null===(e=r.obj)||void 0===e?void 0:e.data;a&&eo.Structure.MaxIndex.get(a).value!==t&&eo.Structure.MaxIndex.set(a,{value:t},t)}}handleModel(e,t){if(void 0===eo.Model.Index.get(e).value){let r=t&&eo.Model.Index.get(t).value,a=null!=r?r:this.maxModelIndex+1;eo.Model.Index.set(e,{value:a},a)}if(void 0===eo.Model.AsymIdOffset.get(e).value){let r=t&&eo.Model.AsymIdOffset.get(t).value,a=null!=r?r:{...this.asymIdOffset};eo.Model.AsymIdOffset.set(e,{value:a},a)}}handleStructure(e,t){if(void 0!==e.parent||void 0!==eo.Structure.Index.get(e).value)return;let r=t&&eo.Structure.Index.get(t).value,a=null!=r?r:this.maxStructureIndex+1;eo.Structure.Index.set(e,{value:a},a)}handle(e,t,r){g.G.Molecule.Structure.is(t)?this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator||void 0!==t.data.parent||this.handleStructure(t.data,null==r?void 0:r.data):g.G.Molecule.Model.is(t)&&!this.ctx.state.data.tree.transforms.get(e).transformer.definition.isDecorator&&this.handleModel(t.data,null==r?void 0:r.data)}register(){this.ctx.customModelProperties.register(eo.Model.AsymIdOffset,!0),this.ctx.customModelProperties.register(eo.Model.Index,!0),this.ctx.customModelProperties.register(eo.Model.MaxIndex,!0),this.ctx.customStructureProperties.register(eo.Structure.Index,!0),this.ctx.customStructureProperties.register(eo.Structure.MaxIndex,!0),this.subscribeObservable(this.ctx.state.data.events.object.created,e=>{this.handle(e.ref,e.obj),this.setModelMaxIndex(),this.setStructureMaxIndex()}),this.subscribeObservable(this.ctx.state.data.events.object.updated,e=>{this.handle(e.ref,e.obj,e.oldObj)})}unregister(){this.ctx.customModelProperties.unregister(eo.Model.AsymIdOffset.descriptor.name),this.ctx.customModelProperties.unregister(eo.Model.Index.descriptor.name),this.ctx.customModelProperties.unregister(eo.Model.MaxIndex.descriptor.name),this.ctx.customStructureProperties.unregister(eo.Structure.Index.descriptor.name),this.ctx.customStructureProperties.unregister(eo.Structure.MaxIndex.descriptor.name)}}});var eu=r(54854);let ec=[-1,1.76,1.87,1.65,1.5,1.4,1.85,1.8,1.6,1.4],ed={ALA:121,ARG:265,ASN:187,ASP:187,CYS:148,GLU:214,GLN:214,GLY:97,HIS:216,ILE:195,LEU:191,LYS:230,MET:203,PHE:228,PRO:154,SER:143,THR:163,TRP:264,TYR:255,VAL:165};var ep=r(8155),ef=r(91044),em=r(53478),eh=r(91327),eg=r(57871);function ev(e){let t=(0,em.lT)(e),r=ec.indexOf(t);return -1===r&&(r=ec.length,ec[r]=t),r}async function eb(e,t){let{atomRadiusType:r}=t;for(let a=0;a<r.length;a+=5e3)e.shouldUpdate&&await e.update({message:"Computing per residue surface accessibility...",current:a,max:r.length}),function(e,t,r){let{structure:a,atomRadiusType:n,serialResidueIndex:i,area:o,spherePoints:s,scalingConstant:l,maxLookupRadius:u,probeSize:c}=e,{lookup3d:d,serialMapping:p,unitIndexMap:f,units:m}=a,{cumulativeUnitElementCount:h,elementIndices:g,unitIndices:b}=p;for(let e=t;e<r;++e){let t=ec[n[e]];if(t===ec[0])continue;let r=m[b[e]],a=g[e],p=r.conformation.x(a),y=r.conformation.y(a),x=r.conformation.z(a),{count:S,units:T,indices:C,squaredDistances:O}=d.find(p,y,x,u),I=c+t,A=c+I,w=[];for(let e=0;e<S;++e){let t=T[e],i=h[f.get(t.id)]+C[e],o=g[i],s=ec[n[i]];if(r===t&&a===o||s===ec[0])continue;let l=c+s;if(O[e]<(A+s)*(A+s)){let r=g[i];w[w.length]=[O[e],(O[e]+I*I-l*l)/(2*I),t.conformation.x(r)-p,t.conformation.y(r)-y,t.conformation.z(r)-x]}}w.sort((e,t)=>
7319e[0]-t[0]);let D=0;t:for(let e=0;e<s.length;++e){let[t,r,a]=s[e];for(let e=0;e<w.length;++e){let[,n,i,o,s]=w[e];if(t*i+r*o+a*s>n)continue t}++D}o[i[e]]+=l*D*I*I}}(t,a,Math.min(a+5e3,r.length))}var ey=r(34526);let ex={numberOfSpherePoints:F.e.Numeric(92,{min:12,max:360,step:1},{description:"Number of sphere points to sample per atom: 92 (original paper), 960 (BioJava), 3000 (EPPIC) - see Shrake A, Rupley JA: Environment and exposure to solvent of protein atoms. Lysozyme and insulin. J Mol Biol 1973."}),probeSize:F.e.Numeric(1.4,{min:.1,max:4,step:.01},{description:"Corresponds to the size of a water molecule: 1.4 (original paper), 1.5 (occassionally used)"}),nonPolymer:F.e.Boolean(!1,{description:"Include non-polymer atoms as occluders."}),traceOnly:F.e.Boolean(!1,{description:"Compute only using alpha-carbons, if true increase probeSize accordingly (e.g., 4 A). Considers only canonical amino acids."})};!function(e){var t;let r;async function a(e,t,r){let a=function(e,t){let{elementCount:r,atomicResidueCount:a}=e,{probeSize:n,nonPolymer:i,traceOnly:o,numberOfSpherePoints:s}=t;return{structure:e,probeSize:n,nonPolymer:i,traceOnly:o,spherePoints:function(e){let t=[],r=Math.PI*(3-Math.sqrt(5)),a=2/e;for(let n=0;n<e;++n){let e=n*a-1+a/2,i=Math.sqrt(1-e*e),o=n*r;t[t.length]=G.AO.create(Math.cos(o)*i,e,Math.sin(o)*i)}return t}(s),scalingConstant:4*Math.PI/s,maxLookupRadius:2*t.probeSize+2*ec[2],atomRadiusType:new Int8Array(r),serialResidueIndex:new Int32Array(r),area:new Float32Array(a)}}(t,r);!function(e){let{key:t}=eh.StructureProperties.residue,{type_symbol:r,label_atom_id:a,label_comp_id:n}=eh.StructureProperties.atom,{structure:i,atomRadiusType:o,serialResidueIndex:s}=e,l=eh.X$.Location.create(i),u=0,c=0,d=-1;l.structure=i;for(let p=0,f=0,m=i.units.length;p<m;++p){let m=i.units[p],{elements:h}=m;l.unit=m,u=-1;for(let i=0,p=h.length;i<p;++i){let p=h[i],g=f+i;l.element=p,u!==(c=t(l))&&++d,u=c;let b=r(l),y=(0,ep.o5)(b);if((0,ep.oy)(y)){o[g]=0,s[g]=-1;continue}let x=a(l),S=(0,eg.Ut)(m,p);if(S===ef.MoleculeType.Water||!e.nonPolymer&&!(0,ef.isPolymer)(S)){o[g]=0,s[g]=-1;continue}let T=n(l);if(e.traceOnly&&("CA"!==x&&"BB"!==x||!ed[T])){o[g]=0,s[g]=d;continue}(0,ef.isNucleic)(S)?o[g]=function(e,t,r){switch(t){case"C":return 7;case"N":return 8;case"P":return 9;case"O":return 5}return ev(t)}(0,b,0):S===ef.MoleculeType.Protein?o[g]=function(e,t,r){switch(t){case"O":return 5;case"S":return 6;case"N":return"NZ"===e?4:3;case"C":switch(e){case"C":case"CE1":case"CE2":case"CE3":case"CH2":case"CZ":case"CZ2":case"CZ3":return 1;case"CA":case"CB":case"CE":case"CG1":case"CG2":return 2;default:switch(r){case"PHE":case"TRP":case"TYR":case"HIS":case"ASP":case"ASN":return 1;case"PRO":case"LYS":case"ARG":case"MET":case"ILE":case"LEU":return 2;case"GLU":case"GLN":return"CD"===e?1:2}}}return ev(t)}(x,b,T):o[g]=ev(b),s[g]=d}f+=h.length}}(a),await eb(e,a);let{area:n,serialResidueIndex:i}=a;return{area:n,serialResidueIndex:i}}function n(e,t){return t/(ed[e]||121)}function i(e,t){let{area:r,serialResidueIndex:a}=t,n=a[ey.SortedArray.indexOf(ey.SortedArray.ofSortedArray(e.structure.root.serialMapping.elementIndices),e.element)];return -1===n?-1:r[n]}function o(e,t){let r=i(e,t);return -1===r?-1:n(eo.StructureProperties.atom.label_comp_id(e),r)}e.compute=function(e,t={}){let r={...F.e.getDefaultValues(ex),...t};return eu.iQ.create("Compute Accessible Surface Area",async t=>await a(t,e,r))},(t=r=e.Flags||(e.Flags={}))[t.NA=0]="NA",t[t.Buried=1]="Buried",t[t.Accessible=2]="Accessible",e.Flag={NA:r.NA,Buried:r.Buried,Accessible:r.Accessible},e.normalize=n,e.getValue=i,e.getNormalizedValue=o,e.getFlag=function(e,t){let a=o(e,t);return -1===a?r.NA:a<.16?r.Buried:r.Accessible}}(n||(n={}));var eS=r(20292),eT=r(89849),eC=r(61707),eO=r(44818),eI=r(67646);let eA={...ex},ew={isBuried:eT.tF.Dynamic((0,eC.Cr)("computed","accessible-surface-area.is-buried",eO.D.Bool),e=>{if(!eo.Unit.isAtomic(e.element.unit))return!1;let t=eD.get(e.element.structure).value;return!!t&&n.getFlag(e.element,t)===n.Flags.Buried}),isAccessible:eT.tF.Dynamic((0,eC.Cr)("computed","accessible-surface-area.is-accessible",eO.D.Bool),e=>{if(!eo.Unit.isAtomic(e.element.unit))return!1;let t=eD.get(e.element.structure).value;return!!t&&n.getFlag(e.element,t)===n.Flags.Accessible})},eD=eS.b.createProvider({label:"Accessible Surface Area",descriptor:(0,eI.d)({name:"molstar_accessible_surface_area",symbols:ew}),type:"root",defaultParams:eA,getParams:e=>eA,isApplicable:e=>!0,obtain:async(e,t,r)=>{let a={...F.e.getDefaultValues(eA),...r};return{value:await n.compute(t,a).runInContext(e.runtime)}}});var eE=r(70371),eM=r(69062),eP=r(28253);let ek=(0,eE.Il)(16448250),eB={list:F.e.ColorList("yellow-green-blue",{presetKind:"scale"})},e_={name:"accessible-surface-area",label:"Accessible Surface Area",category:eP.J.Residue,factory:function e(t,r){let a;let i=eE.qe.create({listOrName:r.list.colors,minLabel:"buried",maxLabel:"exposed",domain:[0,1]}),o=t.structure&&eD.get(t.structure),s=o?(0,eM.TO)(o.id,o.version):-1;
7319if((null==o?void 0:o.value)&&t.structure){let e=eo.StructureElement.Location.create(t.structure),r=o.value,s=e=>{let t=n.getNormalizedValue(e,r);return -1===t?ek:i.color(t)};a=t=>eo.StructureElement.Location.is(t)&&eo.Unit.isAtomic(t.unit)?s(t):eo.Bond.isLocation(t)?(e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],s(e)):ek}else a=()=>ek;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,contextHash:s,description:"Assigns a color based on the relative accessible surface area of a residue.",legend:i?i.legend:void 0}},getParams:function(e){return eB},defaultValues:F.e.getDefaultValues(eB),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?eD.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&eD.ref(e.structure,!1)}};var eR=r(36111),eF=r(80541),eL=r(71649);let ez=m.q.create({name:"computed-accessible-surface-area-prop",category:"custom-props",display:{name:"Accessible Surface Area"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eD,this.labelProvider={label:e=>{if(this.params.showTooltip)return function(e){if("element-loci"===e.kind){if(0===e.elements.length)return;let t=eD.get(e.structure).value;if(!t||e.structure.customPropertyDescriptors.hasReference(eD.descriptor))return;let{getSerialIndex:r}=e.structure.root.serialMapping,{area:a,serialResidueIndex:n}=t,i=new Set,o=0;for(let{indices:t,unit:s}of e.elements){let{elements:e}=s;ey.hU.forEach(t,t=>{let l=n[r(s,e[t])];-1===l||i.has(l)||(o+=a[l],i.add(l))})}if(0===i.size)return;let s=`<small>(${i.size} ${i.size>1?"Residues sum":"Residue"})</small>`;return`Accessible Surface Area ${s}: ${o.toFixed(2)} \u212B<sup>2</sup>`}if("structure-loci"===e.kind){let t=eD.get(e.structure).value;if(!t||e.structure.customPropertyDescriptors.hasReference(eD.descriptor))return;return`Accessible Surface Area <small>(Whole Structure)</small>: ${(0,eR.dD)(t.area).toFixed(2)} \u212B<sup>2</sup>`}}(e)}}}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){eT.Jh.addCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(e_),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.query.structure.registry.add(eN),this.ctx.query.structure.registry.add(eG)}unregister(){eT.Jh.removeCustomProp(this.provider.descriptor),this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(e_),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.query.structure.registry.remove(eN),this.ctx.query.structure.registry.remove(eG)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})}),eN=(0,eF.fW)("Buried Protein Residues",eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.modifier.wholeResidues([eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.generator.atomGroups({"chain-test":eL.MolScriptBuilder.core.rel.eq([eL.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":ew.isBuried.symbol()})])])]),{description:"Select buried protein residues.",category:eF.Cg.Residue,ensureCustomProperties:(e,t)=>eD.attach(e,t)}),eG=(0,eF.fW)("Accessible Protein Residues",eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.modifier.wholeResidues([eL.MolScriptBuilder.struct.modifier.union([eL.MolScriptBuilder.struct.generator.atomGroups({"chain-test":eL.MolScriptBuilder.core.rel.eq([eL.MolScriptBuilder.ammp("objectPrimitive"),"atomistic"]),"residue-test":ew.isAccessible.symbol()})])])]),{description:"Select accessible protein residues.",category:eF.Cg.Residue,ensureCustomProperties:(e,t)=>eD.attach(e,t)});var eU=r(21300),eV=r(45665),ej=r(65410),eH=r(85471),eq=r(11056);let eX=m.q.create({name:"computed-interactions-prop",category:"custom-props",display:{name:"Interactions"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eU.D,this.labelProvider={label:e=>{if(this.params.showTooltip&&"element-loci"===e.kind){if(0===e.elements.length)return;let t=[];
7319for(let r of this.getStructures(e.structure)){let a=this.provider.get(r).value;if(!a)continue;let n=eV.X.Loci.remap(e,r);if(1!==n.elements.length)continue;let i=n.elements[0];if(1!==ey.hU.size(i.indices))continue;let o=a.unitsFeatures.get(i.unit.id);if(!o)continue;let s=[],l=[],u=[],c=ey.hU.start(i.indices),{types:d,groups:p,elementsIndex:{indices:f,offsets:m}}=o;for(let e=m[c],t=m[c+1];e<t;++e){let t=f[e],r=d[t],a=p[t];r&&s.push((0,ej.bD)(r)),a&&l.push((0,ej.Xx)(a))}s.length&&u.push(`<small>Types</small> ${s.join(", ")}`),l.length&&u.push(`<small>Groups</small> ${l.join(", ")}`),u.length&&t.push(`Interaction Feature: ${u.join(" | ")}`)}return t.length?t.join("<br/>"):void 0}}}}getStructures(e){let t=[],r=this.ctx.helpers.substructureParent.get(e);if(r)for(let e of this.ctx.state.data.select(es.tE.Generators.ofType(g.G.Molecule.Structure,r.transform.ref)))e.obj&&(0,eR.S8)(t,e.obj.data);return t}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(eH.qN),this.ctx.managers.lociLabels.addProvider(this.labelProvider),this.ctx.representation.structure.registry.add(eq.Wt)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(eH.qN),this.ctx.managers.lociLabels.removeProvider(this.labelProvider),this.ctx.representation.structure.registry.remove(eq.Wt)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})});var eW=r(29724);let eK=m.q.create({name:"computed-secondary-structure-prop",category:"custom-props",display:{name:"Secondary Structure"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eW.N}update(e){let t=this.params.autoAttach!==e.autoAttach;return this.params.autoAttach=e.autoAttach,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name)}},params:()=>({autoAttach:F.e.Boolean(!1)})});var eQ=r(6017),eZ=r(14507);let eY=m.q.create({name:"computed-valence-model-prop",category:"custom-props",display:{name:"Valence Model"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=eQ.g,this.labelProvider={label:e=>{if(this.params.showTooltip&&"element-loci"===e.kind){if(0===e.elements.length)return;let t=[];for(let r of this.getStructures(e.structure)){let a=this.provider.get(r).value;if(!a)continue;let n=eo.StructureElement.Loci.remap(e,r);if(1!==n.elements.length)continue;let i=n.elements[0];if(1!==ey.hU.size(i.indices))continue;let o=a.get(i.unit.id);if(!o)continue;let s=ey.hU.start(i.indices),l=o.charge[s],u=o.idealGeometry[s],c=o.implicitH[s],d=o.totalH[s];t.push(`Valence Model: <small>Charge</small> ${l} | <small>Ideal Geometry</small> ${(0,eZ.cP)(u)} | <small>Implicit H</small> ${c} | <small>Total H</small> ${d}`)}return t.length?t.join("<br/>"):void 0}}}}getStructures(e){let t=[],r=this.ctx.helpers.substructureParent.get(e);if(r)for(let e of this.ctx.state.data.select(es.tE.Generators.ofType(g.G.Molecule.Structure,r.transform.ref)))e.obj&&(0,eR.S8)(t,e.obj.data);return t}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customStructureProperties.register(this.provider,this.params.autoAttach),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customStructureProperties.unregister(this.provider.descriptor.name),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:F.e.Boolean(!1),showTooltip:F.e.Boolean(!0)})});var e$=r(20962),eJ=r(62713);let e0=(0,eE.Il)(16448250),e1=new Map,e2={...(0,eJ.r)({type:"colors",colorList:"set-1"})},e3={name:"sifts-mapping",label:"SIFTS Mapping",category:eP.J.Residue,factory:function e(t,r){let a;if(t.structure){for(let e of t.structure.models){let t=e$._.Provider.get(e).value;if(t)for(let e of t.accession)!e||e1.has(e)||e1.set(e,e1.size)}let e=eo.StructureElement.Location.create(t.structure),n=(0,eJ.X)(e1.size+1,r,{valueLabel:e=>`${e}`}),i=new Map,o=e=>{let t=e$._.getKey(e);if(!t)return e0;if(i.has(t))return i.get(t);let r=n.color(e1.get(t));return i.set(t,r),r};a=t=>eo.StructureElement.Location.is(t)&&eo.Unit.isAtomic(t.unit)?o(t):eo.Bond.isLocation(t)?(e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],o(e)):e0}else a=()=>e0;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,description:"Assigns a color based on SIFTS mapping."}},getParams:function(e){return e2},defaultValues:F.e.getDefaultValues(e2),isApplicable:e=>{var t;return!!(null===(t=e.structure)||void 0===t?void 0:t.models.some(e=>e$._.Provider.isApplicable(e)))},ensureCustomProperties:{attach:async(e,t)=>{if(t.structure)for(let r of t.structure.models)await e$._.Provider.attach(e,r,void 0,!0)},detach:e=>{if(e.structure)for(let t of e.structure.models)e$._.Provider.ref(t,!1)}}},e4=m.q.create({name:"sifts-mapping-prop",category:"custom-props",display:{name:"SIFTS Mapping"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=e$._.Provider,this.labelProvider={label:e=>{if(this.params.showTooltip)return function(e){if("element-loci"===e.kind){if(0===e.elements.length)return;let t=e.elements[0],r=t.unit,a=eo.StructureElement.Location.create(e.structure,r,r.elements[ey.hU.getAt(t.indices,0)]);return e$._.getLabel(a)}}(e)}}}update(e){let t=this.params.autoAttach!==e.autoAttach||this.params.showTooltip!==e.showTooltip;return this.params.autoAttach=e.autoAttach,this.params.showTooltip=e.showTooltip,this.ctx.customStructureProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customModelProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.structure.themes.colorThemeRegistry.add(e3),this.ctx.managers.lociLabels.addProvider(this.labelProvider)}unregister(){this.ctx.customModelProperties.unregister(this.provider.descriptor.name),this.ctx.representation.structure.themes.colorThemeRegistry.remove(e3),this.ctx.managers.lociLabels.removeProvider(this.labelProvider)}},params:()=>({autoAttach:F.e.Boolean(!0),showTooltip:F.e.Boolean(!0)})});var e5=r(31348);(a=i||(i={})).Descriptor={name:"ihm_cross_link_restraint"},a.Provider=e5.n.create(a.Descriptor),a.fromTable=function(e,t){let r={entity_id:e.entity_id_1,asym_id:e.asym_id_1,seq_id:e.seq_id_1,atom_id:e.atom_id_1},a={entity_id:e.entity_id_2,asym_id:e.asym_id_2,seq_id:e.seq_id_2,atom_id:e.atom_id_2};function n(e,t,r){let a=e.get(t);a?a.push(r):e.set(t,[r])}function i(r,a){let i=a.entity_id.value(r),u=a.asym_id.value(r),c=a.seq_id.value(r);if("by-atom"===e.model_granularity.value(r)){let e=t.atomicHierarchy.index.findAtom({auth_seq_id:c,label_asym_id:u,label_atom_id:a.atom_id.value(r),label_entity_id:i});e>=0&&n(o,e,r)}else if(t.coarseHierarchy.isDefined){let e=t.coarseHierarchy.spheres.findSequenceKey(i,u,c);if(e>=0)n(s,e,r);else{let e=t.coarseHierarchy.gaussians.findSequenceKey(i,u,c);e>=0&&n(l,e,r)}}}let o=new Map,s=new Map,l=new Map,u=[];for(let t=0;t<e._rowCount;++t)i(t,r),i(t,a);return{getIndicesByElement:(e,t)=>
7319{let r=(function(e){switch(e){case eo.Unit.Kind.Atomic:return o;case eo.Unit.Kind.Spheres:return s;case eo.Unit.Kind.Gaussians:return l}})(t).get(e);return void 0!==r?r:u},data:e}};var e6=r(12618),e8=r(7791),e7=r(4376),e9=r(72558),te=r(84889),tt=r(43091),tr=r(84894);let ta=[];function tn(e,t,r,a){return`${e}|${t.id}|${r}|${a.id}`}class ti{getPairIndices(e,t,r,a){let n=tn(e,t,r,a);return this.pairKeyIndices.get(n)||ta}getPairs(e,t,r,a){return this.getPairIndices(e,t,r,a).map(e=>this.pairs[e])}constructor(e){this.pairs=e;let t=new Map;this.pairs.forEach((e,r)=>{let a=tn(e.indexA,e.unitA,e.indexB,e.unitB),n=t.get(a);n?n.push(r):t.set(a,[r])}),this.count=e.length,this.pairKeyIndices=t}}var to=r(71522),ts=r(43398),tl=r(58202);let tu=eS.b.createProvider({label:"Cross Link Restraint",descriptor:(0,eI.d)({name:"integrative-cross-link-restraint"}),type:"local",defaultParams:{},getParams:e=>({}),isApplicable:e=>e.models.some(e=>!!i.Provider.get(e)),obtain:async(e,t,r)=>({value:function(e){let t=[];if(!e.models.some(e=>i.Provider.get(e)))return new ti(t);let r=e.units.length;for(let a=0;a<r;++a){let n=e.units[a];!function(e,t){if("mmCIF"!==t.model.sourceData.kind)return;let r=i.Provider.get(t.model);if(!r)return;let{elements:a}=t,n=a.length,o=t.kind,s=new Map;for(let e=0;e<n;e++){let t=a[e];r.getIndicesByElement(t,o).forEach(t=>{let r=s.get(t);r?r.push(e):s.set(t,[e])})}s.forEach((a,n)=>{if(a.length<2)return;let[i,o]=a;e.push(td(t,i,t,o,r,n),td(t,o,t,i,r,n))})}(t,n);for(let o=a+1;o<r;++o){let r=e.units[o];n.model===r.model&&function(e,t,r){if(t.model!==r.model||"mmCIF"!==t.model.sourceData.kind)return;let a=i.Provider.get(t.model);if(!a)return;let n=new Map,o=new Map;
7319tc(n,t,a),tc(o,r,a),n.forEach((n,i)=>{let s=o.get(i);void 0!==s&&e.push(td(t,n,r,s,a,i),td(r,s,t,n,a,i))})}(t,n,r)}}return new ti(t)}(t)})});function tc(e,t,r){let{elements:a}=t,n=a.length,i=t.kind;for(let t=0;t<n;t++){let n=a[t];r.getIndicesByElement(n,i).forEach(r=>e.set(r,t))}}function td(e,t,r,a,n,i){return{unitA:e,indexA:t,unitB:r,indexB:a,restraintType:n.data.restraint_type.value(i),distanceThreshold:n.data.distance_threshold.value(i),psi:n.data.psi.value(i),sigma1:n.data.sigma_1.value(i),sigma2:n.data.sigma_2.value(i)}}!function(e){(e.Tag||(e.Tag={})).CrossLinkRestraint="cross-link-restraint",e.isApplicable=function(e){return e.models.some(e=>!!i.Provider.get(e))};let t=(0,G.AO)(),r=(0,G.AO)();function a(e){return e.unitA.conformation.position(e.unitA.elements[e.indexA],t),e.unitB.conformation.position(e.unitB.elements[e.indexB],r),G.AO.distance(t,r)}function n(e,t){let r=e.pairs[t];return`Cross Link Restraint | Type: ${r.restraintType} | Threshold: ${r.distanceThreshold} \u212B | Psi: ${r.psi} | Sigma 1: ${r.sigma1} | Sigma 2: ${r.sigma2} | Distance: ${a(r).toFixed(2)} \u212B`}function o(e,t,r){return ts.B.fromPairProvider(t.length,(r,a,n)=>{let i=e.pairs[t[r]];i.unitA.conformation.position(i.unitA.elements[i.indexA],a),i.unitB.conformation.position(i.unitB.elements[i.indexB],n)},r)}function s(e,t,r){let a=r[0];if(void 0===a)return"";let i=t.pairs[a];return[n(t,a),(0,tl.Gg)(eo.Bond.Location(e,i.unitA,i.indexA,e,i.unitB,i.indexB))].join("</br>")}e.distance=a,e.Location=function(e,t,r){return(0,to.o0)("cross-link-restraints",{structure:t,crossLinkRestraints:e},r)},e.isLocation=function(e){return!!e&&"data-location"===e.kind&&"cross-link-restraints"===e.tag},e.areLocationsEqual=function(e,t){return e.data.structure===t.data.structure&&e.data.crossLinkRestraints===t.data.crossLinkRestraints&&e.element===t.element},e.locationLabel=function(e){return n(e.data.crossLinkRestraints,e.element)},e.Loci=function(e,t,r){return(0,R.SL)("cross-link-restraints",{structure:e,crossLinkRestraints:t},r,e=>o(t,r,e),()=>s(e,t,r))},e.isLoci=function(e){return!!e&&"data-loci"===e.kind&&"interactions"===e.tag},e.getBoundingSphere=o,e.getLabel=s}(o||(o={}));var tp=r(48930);function tf(e,t,r,a,n){let i=tu.get(t).value;if(!i.count)return e7.K.createEmpty(n);let{sizeFactor:o}=a,s=eo.StructureElement.Location.create(t),l={linkCount:i.count,position:(e,t,r)=>{let a=i.pairs[r],n=a.unitA,o=a.unitB;n.conformation.position(n.elements[a.indexA],e),o.conformation.position(o.elements[a.indexB],t)},radius:e=>{let t=i.pairs[e];return s.unit=t.unitA,s.element=t.unitA.elements[t.indexA],r.size.size(s)*o}},{mesh:u,boundingSphere:c}=(0,te.fV)(e,l,a,n);if(c)u.setBoundingSphere(c);else if(u.triangleCount>0){let e=tp.CP.expand((0,tp.CP)(),t.boundary.sphere,1*o);u.setBoundingSphere(e)}return u}let tm={...tt.kN,...te.Vj,sizeFactor:F.e.Numeric(.5,{min:0,max:10,step:.1})};function th(e){return(0,tt.uS)({defaultProps:F.e.getDefaultValues(tm),createGeometry:tf,createLocationIterator:tg,getLoci:tv,eachLocation:tb,setUpdateState:(e,t,r)=>{e.createGeometry=t.sizeFactor!==r.sizeFactor||t.radialSegments!==r.radialSegments||t.linkCap!==r.linkCap}},e)}function tg(e){let t=tu.get(e).value,{pairs:r}=t,a=r.length,n=o.Location(t,e);return(0,e9.OF)(a,1,1,e=>(n.element=e,n),!0)}function tv(e,t,r){let{objectId:a,groupId:n}=e;if(r===a){let e=tu.get(t).value;if(e.pairs[n])return o.Loci(t,e,[n])}return R.Rh}function tb(e,t,r){let a=!1;if(o.isLoci(e)){if(!eo.Structure.areEquivalent(e.data.structure,t))return!1;let n=tu.get(t).value;if(e.data.crossLinkRestraints!==n)return!1;for(let t of e.elements)r(ey.Xp.ofSingleton(t))&&(a=!0)}return a}let ty={"cross-link-restraint":(e,t)=>(0,tr.sh)("Cross-link restraint",e,t,th)},tx={...tm},tS=(0,tr.Xz)({name:o.Tag.CrossLinkRestraint,label:"Cross Link Restraint",description:"Displays cross-link restraints.",factory:function(e,t){return e8.hX.createMulti("CrossLinkRestraint",e,t,tr.U_,ty)},getParams:function(e,t){return F.e.clone(tx)},defaultValues:F.e.getDefaultValues(tx),defaultColorTheme:{name:o.Tag.CrossLinkRestraint},defaultSizeTheme:{name:"uniform"},isApplicable:e=>o.isApplicable(e),ensureCustomProperties:{attach:(e,t)=>tu.attach(e,t,void 0,!0),detach:e=>tu.ref(e,!1)}}),tT=(0,eE.Il)(13421772),tC={domain:F.e.Interval([.5,1.5],{step:.
731901}),list:F.e.ColorList("red-grey",{presetKind:"scale"})},tO={name:"cross-link",label:"Cross Link",category:eP.J.Misc,factory:function e(t,r){let a,n;let i=t.structure&&tu.get(t.structure).value;if(i){let e=(n=eE.qe.create({domain:r.domain,listOrName:r.list.colors})).color;a=t=>{if(o.isLocation(t)){let r=i.pairs[t.element];if(r)return e(o.distance(r)/r.distanceThreshold)}return tT}}else a=()=>tT;return{factory:e,granularity:"group",color:a,props:r,description:"Colors cross-links by the deviation of the observed distance versus the modeled distance (e.g. modeled / `ihm_cross_link_restraint.distance_threshold`).",legend:n?n.legend:void 0}},getParams:function(e){return tC},defaultValues:F.e.getDefaultValues(tC),isApplicable:e=>!!e.structure&&o.isApplicable(e.structure),ensureCustomProperties:{attach:(e,t)=>t.structure?tu.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&tu.ref(e.structure,!1)}},tI=m.q.create({name:"integrative-cross-link-restraint",category:"custom-props",display:{name:"Cross Link Restraint"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=i.Provider}register(){this.provider.formatRegistry.add("mmCIF",tA),this.ctx.representation.structure.themes.colorThemeRegistry.add(tO),this.ctx.representation.structure.registry.add(tS)}unregister(){this.provider.formatRegistry.remove("mmCIF"),this.ctx.representation.structure.themes.colorThemeRegistry.remove(tO),this.ctx.representation.structure.registry.remove(tS)}}});function tA(e){if(!e6.rg.is(e.sourceData))return;let{ihm_cross_link_restraint:t}=e.sourceData.data.db;if(0!==t._rowCount)return i.fromTable(t,e)}var tw=r(85764),tD=r(75042);!function(e){function t(e){let t=e.descriptor.name,r=r=>(t in r._propertyData||(r._propertyData[t]={props:{...F.e.getDefaultValues(e.getParams(r))},data:tw.qE.create(void 0)}),r._propertyData[t]),a=(e,a,n)=>{let i=r(e);e._propertyData[t]={props:a,data:tw.qE.withValue(i.data,n)}};return{label:e.label,descriptor:e.descriptor,isHidden:e.isHidden,getParams:t=>{let a=F.e.clone(e.getParams(t));return F.e.setDefaultValues(a,r(t).props),a},defaultParams:e.defaultParams,isApplicable:e.isApplicable,attach:async(t,n,i={},o)=>{o&&n.customProperties.reference(e.descriptor,!0);let s=r(n),l=F.e.merge(e.defaultParams,s.props,i);if(s.data.value&&F.e.areEqual(e.defaultParams,s.props,l))return;let{value:u,assets:c}=await e.obtain(t,n,l);n.customProperties.add(e.descriptor),n.customProperties.assets(e.descriptor,c),a(n,l,u)},ref:(t,r)=>t.customProperties.reference(e.descriptor,r),get:e=>{var t;return null===(t=r(e))||void 0===t?void 0:t.data},set:(t,n={},i)=>{let o=r(t),s=F.e.merge(e.defaultParams,o.props,n);F.e.areEqual(e.defaultParams,o.props,s)||(a(t,s,i),t.customProperties.assets(e.descriptor))},props:e=>r(e).props}}e.createProvider=t,e.createSimple=function(e,r){let a={value:F.e.Value(r,{isHidden:!0})};return t({label:(0,tD.ce)(e),descriptor:(0,eI.d)({name:e}),isHidden:!0,defaultParams:a,getParams:()=>({value:F.e.Value(r,{isHidden:!0})}),isApplicable:()=>!0,obtain:async(e,t,r)=>({...F.e.getDefaultValues(a),...r})})}}(s||(s={}));var tE=r(40424),tM=r(1571),tP=r(27203);let tk=G.AO.fromArray,tB=G.AO.distance,t_=G.AO.setMagnitude,tR=G.AO.create,tF=G.AO.copy,tL=G.AO.add,tz={seedDensity:F.e.Numeric(10,{min:1,max:30,step:1},{description:"Percentage of cells with seed."}),stepSize:F.e.Numeric(.35,{min:.01,max:1,step:.01},{description:"Step size in grid space."}),minSeparation:F.e.Numeric(0,{min:0,max:5,step:.5},{description:"Minimum separation between streamlines in grid space. 0 to disable."})},tN=(0,G.AO)(),tG=(0,G.AO)(),tU=(0,G.AO)(),tV=(0,G.AO)();function tj(e,t,r,a,n,i,o){let{space:s}=t.cells,[l,u,c]=s.dimensions,d=s.dataOffset,p=i*n,f=5*Math.max(l,u,c)/n,m=n/1.1,h=new Map,g=Math.ceil(2/n);tF(tG,a);let b=0;for(let t=0;t<f&&!(tG[0]<1)&&!(tG[0]>l-2)&&!(tG[1]<1)&&!(tG[1]>u-2)&&!(tG[2]<1)&&!(tG[2]>c-2)&&r(tG,tU);++t){let t=d(Math.round(tG[0]),Math.round(tG[1]),Math.round(tG[2]));if(o&&o[t])break;let r=(h.get(t)||0)+1;if(h.set(t,r),r>g)break;t_(tN,tU,p);let a=tR(tG[0]+.5*tN[0],tG[1]+.5*tN[1],tG[2]+.5*tN[2]);tB(tV,a)>=m&&(e.push(a),tF(tV,a)),b++,tL(tG,tG,tN)}return b}async function tH(e,t,r){let{space:a}=t.cells,[n,i,o]=a.dimensions,s=a.dataOffset,{seedDensity:l,stepSize:u,minSeparation:c}=r,d=Math.max(1,Math.floor(Math.min(n,i,o)/l)),p=n-2-d,f=i-2-d,m=o-2-d,h=new tM._Q,g=[];for(let e=1;e<=m;e+=d)for(let t=1;t<=f;t+=d)for(let r=1;r<=p;r+=d)g.push(r+h.float()*d,t+h.float()*d,e+h.float()*d);for(let e=g.length/3-1;e>0;
7319e--){let t=Math.floor(h.float()*(e+1)),r=3*e,a=3*t,n=g[r],i=g[r+1],o=g[r+2];g[r]=g[a],g[r+1]=g[a+1],g[r+2]=g[a+2],g[a]=n,g[a+1]=i,g[a+2]=o}await e.update({isIndeterminate:!1,current:0,max:g.length/3});let b=tP.r.makeGetInterpolatedGradient(t),y=c>0,x=y?new Uint8Array(n*i*o):void 0,S=[];if(y){let e=Math.ceil(c),t=c*c;for(let r=-e;r<=e;++r)for(let a=-e;a<=e;++a)for(let n=-e;n<=e;++n)n*n+a*a+r*r<=t&&S.push([n,a,r])}let T=[],C=(0,G.AO)();for(let r=0;r<g.length;r+=3){e.shouldUpdate&&await e.update({current:r/3+1}),tk(C,g,r);let a=function(e,t,r,a,n){let i=[];return tj(i,e,t,r,a,-1,n)>1&&i.reverse(),tj(i,e,t,r,a,1,n),i}(t,b,C,u,x);if(a.length*u>=3&&(T.push(a),x))for(let e=0,t=a.length;e<t;++e){let t=a[e],r=Math.round(t[0]),l=Math.round(t[1]),u=Math.round(t[2]);for(let e=0,t=S.length;e<t;++e){let t=S[e],a=r+t[0],c=l+t[1],d=u+t[2];a>=0&&a<n&&c>=0&&c<i&&d>=0&&d<o&&(x[s(a,c,d)]=1)}}}return T}async function tq(e,t,r){return tH(e.runtime,t.grid,r)}let tX={type:F.e.MappedStatic("basic",{basic:F.e.Group(tz,{isFlat:!0})})},tW=s.createProvider({label:"Streamlines",descriptor:(0,eI.d)({name:"molstar_streamlines"}),defaultParams:tX,getParams:e=>tX,isApplicable:e=>!tE.f.Segmentation.get(e),obtain:async(e,t,r)=>{let a={...F.e.getDefaultValues(tX),...r};if("basic"===a.type.name)return{value:await tq(e,t,a.type.params)}}});var tK=r(96046),tQ=r(13070),tZ=r(89623),tY=r(53608),t$=r(1573),tJ=r(69126),t0=r(97187),t1=r(67330),t2=r(83576),t3=r(43975);function t4(e,t,r){return(0,R.SL)("streamlines",{streamlines:e,volume:t},r,a=>(function(e,t,r,a){t5.reset();let n=tP.r.getGridToCartesianTransform(t.grid);for(let{indices:a,instances:i}of r)for(let r=0,o=t1.h.size(a);r<o;r++)for(let o of e[t1.h.getAt(a,r)]){t3.A.transformMat4(t6,o,n);for(let e=0,r=t1.h.size(i);e<r;e++){let r=t.instances[t1.h.getAt(i,e)];t3.A.transformMat4(t8,t6,r.transform),t5.includePosition(t8)}}for(let{indices:a,instances:i}of(t5.finishedIncludeStep(),r))for(let r=0,o=t1.h.size(a);r<o;r++)for(let o of e[t1.h.getAt(a,r)]){t3.A.transformMat4(t6,o,n);for(let e=0,r=t1.h.size(i);e<r;e++){let r=t.instances[t1.h.getAt(i,e)];t3.A.transformMat4(t8,t6,r.transform),t5.radiusPosition(t8)}}return t5.getSphere(a)})(e,t,r,a),()=>(function(e,t,r){let a=function(e){let t=0;for(let r of e)t+=t1.h.size(r.indices)*t1.h.size(r.instances);return t}(r),n=[`${t.label||"Volume"}`];if(0===a)n.push("No Streamlines");else if(1===a){let e=t1.h.start(r[0].indices);if(n.push(`Streamline #${e}`),t.instances.length>1){let e=t1.h.start(r[0].instances);n.push(`Instance #${e}`)}}else n.push(`${a} Streamlines`);return n.join(" | ")})(0,t,r))}let t5=new t2.q("98"),t6=(0,t3.A)(),t8=(0,t3.A)(),t7={anchorEnabled:F.e.Boolean(!1,{label:"Anchor"}),anchorCenter:F.e.Vec3((0,t3.A)(),void 0,{hideIf:e=>!e.anchorEnabled}),anchorRadius:F.e.Numeric(1,{min:0,max:10,step:.1},{hideIf:e=>!e.anchorEnabled}),dashEnabled:F.e.Boolean(!1,{label:"Dash"}),dashPoints:F.e.Numeric(5,{min:1,max:25,step:1},{description:"Number of streamline points per dash/gap",hideIf:e=>!e.dashEnabled}),dashShift:F.e.Boolean(!1,{description:"Shift dashes so dashes become gaps and vice versa",hideIf:e=>!e.dashEnabled})},t9=(0,t3.A)();function re(e,t,r){if(e.length<2)return!1;if(!r.anchorEnabled)return!0;let a=e[0];if(t3.A.transformMat4(t9,a,t),t3.A.distance(t9,r.anchorCenter)<=r.anchorRadius)return!0;let n=e[e.length-1];return t3.A.transformMat4(t9,n,t),t3.A.distance(t9,r.anchorCenter)<=r.anchorRadius}function rt(e,t){let r=tW.get(e).value,a=t0.X.ofLength(r.length),n=t0.X.ofLength(e.instances.length);return t4(r,e,[{indices:a,instances:n}])}function rr(e,t,r,a,n){let{objectId:i,groupId:o,instanceId:s}=e;if(n===i){let e=tE.f.PickingGranularity.get(t),r=t1.h.ofSingleton(s);return"volume"===e?tE.f.Loci(t,r):t4(tW.get(t).value,t,[{indices:t1.h.ofSingleton(o),instances:r}])}return R.Rh}function ra(e,t,r,a,n){let i=!1,o=tW.get(t).value.length;if(tE.f.isLoci(e)){if(!tE.f.areEquivalent(e.volume,t))return!1;if(t0.X.is(e.instances)){let t=t0.X.start(e.instances)*o,r=t0.X.end(e.instances)*o;n(t0.X.ofBounds(t,r))&&(i=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*o;
7319n(t0.X.ofBounds(r,r+o))&&(i=!0)}}else if(e&&"data-loci"===e.kind&&"streamlines"===e.tag){if(!tE.f.areEquivalent(e.data.volume,t))return!1;for(let{indices:t,instances:r}of e.elements)t0.X.is(t)?t1.h.forEach(r,e=>{let r=e*o;n(t0.X.offset(t,r))&&(i=!0)}):t1.h.forEach(t,e=>{t1.h.forEach(r,t=>{let r=t*o;n(t0.X.ofSingleton(r+e))&&(i=!0)})})}return i}function rn(e){let t=tW.get(e).value,r=t.length,a=e.instances.length,n=(0,to.o0)("streamlines",{volume:e,streamlines:t},{index:void 0,instance:void 0});return(0,e9.OF)(r,a,1,(e,t)=>(n.element.index=e,n.element.instance=t,n))}var ri=r(54185);let ro=t3.A.fromArray,rs=t3.A.sub,rl=t3.A.normalize,ru=t3.A.isZero,rc=t3.A.set,rd=t3.A.cross,rp=t3.A.toArray,rf=t3.A.copy,rm=t3.A.magnitude,rh=t3.A.rotateAroundAxis,rg=t3.A.dot;function rv(e,t,r,a){let n=(0,t3.A)(),i=(0,t3.A)(),o=(0,t3.A)(),s=(0,t3.A)(),l=(0,t3.A)(),u=(0,t3.A)();ro(l,e,0),ro(u,e,3),rs(n,u,l),rl(n,n),ru(n)&&rc(n,1,0,0);let c=Math.abs(n[0]),d=Math.abs(n[1]),p=Math.abs(n[2]);c<=d&&c<=p?rc(o,1,0,0):d<=p?rc(o,0,1,0):rc(o,0,0,1),rd(s,n,o),rl(s,s),rd(o,s,n),rl(o,o),rp(o,t,0),rp(s,r,0),rf(i,n);for(let c=1;c<a;++c){c<a-1?(ro(l,e,(c-1)*3),ro(u,e,(c+1)*3)):(ro(l,e,(c-1)*3),ro(u,e,3*c)),rs(n,u,l),rl(n,n);let d=rg(i,n);if(d<.9999){let e=(0,t3.A)();if(rd(e,i,n),rm(e)>1e-4){rl(e,e);let t=Math.acos(Math.min(1,Math.max(-1,d)));rh(o,o,e,t),rh(s,s,e,t)}}rd(s,n,o),rl(s,s),rd(o,s,n),rl(o,o),rp(o,t,3*c),rp(s,r,3*c),rf(i,n)}}var rb=r(94828);let ry=G.AO.transformMat4,rx=G.AO.transformMat4Offset,rS=G.AO.toArray,rT={...t7,...tK.x.Params,useLineStrips:F.e.Boolean(!0)};function rC(e){return(0,rb.Y)({defaultProps:F.e.getDefaultValues(rT),createGeometry:rI,createLocationIterator:rn,getLoci:rr,eachLocation:ra,setUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash!==n&&(void 0!==e.info.streamlinesHash&&(e.createGeometry=!0,e.updateLocation=!0),e.info.streamlinesHash=n),r.anchorEnabled===a.anchorEnabled&&G.AO.equals(r.anchorCenter,a.anchorCenter)&&r.anchorRadius===a.anchorRadius||(e.createGeometry=!0),(r.dashEnabled!==a.dashEnabled||r.dashPoints!==a.dashPoints||r.dashShift!==a.dashShift)&&(e.createGeometry=!0),r.useLineStrips!==a.useLineStrips&&(e.createGeometry=!0)},initUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash=n},geometryUtils:tK.x.Utils},e)}function rO(e){let t=0;for(let r of e)t+=r.length;return t}function rI(e,t,r,a,n,i){let o;let{cells:{space:s}}=t.grid,l=s.dimensions,u=t$.r.getGridToCartesianTransform(t.grid),c=tW.get(t).value,d=rO(c),{dashEnabled:p,dashPoints:f,dashShift:m}=n,h=2*f;if(n.useLineStrips){let e=tQ.l.create(d,Math.ceil(d/10),i);o=e;let t=(0,G.AO)();for(let r=0,a=c.length;r<a;++r){let a=c[r];if(re(a,u,n)){if(p){let n=!1;for(let i=0,o=a.length;i<o;++i){let o=i%h;(m?o>=f:o<f)?(n||(e.start(r),n=!0),ry(t,a[i],u),e.addVec(t)):n&&(ry(t,a[i],u),e.addVec(t),e.end(),n=!1)}n&&e.end()}else{e.start(r);for(let r=0,n=a.length;r<n;++r)ry(t,a[r],u),e.addVec(t);e.end()}}}}else{let e=tQ.R.create(d,Math.ceil(d/10),i);o=e;let t=(0,G.AO)(),r=(0,G.AO)();for(let a=0,i=c.length;a<i;++a){let i=c[a];if(re(i,u,n)){if(p){G.AO.transformMat4(t,i[0],u);for(let n=1,o=i.length;n<o;++n){G.AO.transformMat4(r,i[n],u);let o=(n-1)%(2*f);(m?o>=f:o<f)&&e.addVec(t,r,a),G.AO.copy(t,r)}}else{G.AO.transformMat4(t,i[0],u);for(let n=1,o=i.length;n<o;++n)G.AO.transformMat4(r,i[n],u),e.addVec(t,r,a),G.AO.copy(t,r)}}}}let g=o.getLines();return g.setBoundingSphere(tp.CP.fromDimensionsAndTransform((0,tp.CP)(),l,u)),g}let rA={...t7,...e7.K.Params,tubeSizeFactor:F.e.Numeric(.2,{min:0,max:10,step:.01}),radialSegments:F.e.Numeric(8,{min:2,max:56,step:2},ri.ev.CustomQualityParamInfo)};function rw(e){return(0,rb.Y)({defaultProps:F.e.getDefaultValues(rA),createGeometry:rD,createLocationIterator:rn,getLoci:rr,eachLocation:ra,setUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash!==n&&(void 0!==e.info.streamlinesHash&&(e.createGeometry=!0,e.updateLocation=!0),e.info.streamlinesHash=n),(r.tubeSizeFactor!==a.tubeSizeFactor||r.radialSegments!==a.radialSegments)&&(e.createGeometry=!0),r.anchorEnabled===a.anchorEnabled&&G.AO.equals(r.anchorCenter,a.anchorCenter)&&r.anchorRadius===a.anchorRadius||(e.createGeometry=!0),(r.dashEnabled!==a.dashEnabled||r.dashPoints!==a.dashPoints||r.dashShift!==a.dashShift)&&(e.createGeometry=!0)},initUpdateState:(e,t,r,a)=>{let n=tW.get(t).version;e.info.streamlinesHash=n},geometryUtils:e7.K.Utils},e)}function rD(e,t,r,a,n,i){let{cells:{space:o}}=t.grid,s=o.dimensions,l=t$.r.getGridToCartesianTransform(t.grid),u=tW.get(t).value,{tubeSizeFactor:c,radialSegments:d,dashEnabled:p,dashPoints:f,dashShift:m}=n,h=rO(u)*d*2,g=tZ.V.createState(h,Math.ceil(h/10),i);for(let e=0,t=u.length;e<t;++e){let t=u[e];re(t,l,n)&&(g.currentGroup=e,p?function(e,t,r,a,n,i,o,s){let l=t.length;if(l<2)return;let u=[],c=[];for(let e=0;e<l;++e){let a=ry((0,G.AO)(),t[e],r);u.push(a),G.AO.copy(rE.position,a),c.push(s.size.size(rE)*n)}let d=2*i,p=o?i:0;for(;p<l-1;){let t=p,r=Math.min(p+i,l-1);r>t&&function(e,t,r,a,n,i){let o=n-a+1;if(o<2)return;let s=new Float32Array(3*o),l=new Float32Array(3*o),u=new Float32Array(3*o),c=new Float32Array(o),d=new Float32Array(o);for(let e=0;e<o;++e)rS(t[a+e],s,3*e),c[e]=r[a+e],d[e]=r[a+e];rv(s,l,u,o),(0,tY.x)(e,s,l,u,o-1,i,c,d,!0,!0,"elliptical")}(e,u,c,t,r,a),p+=d}}(g,t,l,d,c,f,m,a):function(e,t,r,a,n,i){let o=t.length;if(o<2)return;let s=o-1,l=new Float32Array(3*o),u=new Float32Array(3*o),c=new Float32Array(3*o),d=new Float32Array(o),p=new Float32Array(o);for(let e=0;e<o;++e){rx(l,t[e],r,3*e,0,0),G.AO.fromArray(rE.position,l,3*e);let a=i.size.size(rE)*n;d[e]=a,p[e]=a}rv(l,u,c,o),(0,tY.x)(e,l,u,c,s,a,d,p,!0,!0,"elliptical")}(g,t,l,d,c,a))}let b=tZ.V.getMesh(g);return b.setBoundingSphere(tp.CP.fromDimensionsAndTransform((0,tp.CP)(),s,l)),b}let rE=(0,e9.cH)(),rM={lines:(e,t)=>(0,tJ.rR)("Streamlines lines",e,t,rC,rt),"tube-mesh":(e,t)=>
7319(0,tJ.rR)("Streamlines tube-mesh",e,t,rw,rt)},rP={...rT,...rA,visuals:F.e.MultiSelect(["lines"],F.e.objectToOptions(rM)),density:F.e.Numeric(.1,{min:0,max:1,step:.01},ri.ev.ShadingCategory)},rk=(0,tJ.FX)({name:"streamlines",label:"Streamlines",description:"Displays streamlines.",factory:function(e,t){return e8.hX.createMulti("Streamlines",e,t,e8.hX.StateBuilder,rM)},getParams:function(e,t){return F.e.clone(rP)},defaultValues:F.e.getDefaultValues(rP),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!t$.f.isEmpty(e)&&!t$.f.Segmentation.get(e),ensureCustomProperties:{attach:(e,t)=>tW.attach(e,t,void 0,!0),detach:e=>tW.ref(e,!1)}}),rB=m.q.create({name:"streamlines-volume-prop",category:"custom-props",display:{name:"Streamlines"},ctor:class extends m.q.Handler{constructor(){super(...arguments),this.provider=tW}update(e){let t=this.params.autoAttach!==e.autoAttach;return this.params.autoAttach=e.autoAttach,this.ctx.customVolumeProperties.setDefaultAutoAttach(this.provider.descriptor.name,this.params.autoAttach),t}register(){this.ctx.customVolumeProperties.register(this.provider,this.params.autoAttach),this.ctx.representation.volume.registry.add(rk)}unregister(){this.ctx.customVolumeProperties.unregister(this.provider.descriptor.name),this.ctx.representation.volume.registry.remove(rk)}},params:()=>({autoAttach:F.e.Boolean(!1)})}),r_={State:h,Representation:l,Camera:u,Misc:c},rR={Representation:_,Camera:d,State:p,CustomProps:f}},45213:function(e,t,r){r.d(t,{q:function(){return a}});var a,n=r(72762),i=r(67801),o=r(54854),s=r(14086),l=r(85764);!function(e){class t extends n.G.Create({name:"Root",typeClass:"Root"}){}e.Root=t;class r extends n.G.Create({name:"Category",typeClass:"Object"}){}e.Category=r;class a extends n.G.CreateBehavior({name:"Behavior"}){}e.Behavior=a,e.Categories={common:"Common",representation:"Representation",interaction:"Interaction","custom-props":"Custom Properties",misc:"Miscellaneous"},e.CreateCategory=n.E.BuiltIn({name:"create-behavior-category",display:{name:"Behavior Category"},from:t,to:r,params:{label:s.e.Text("",{isHidden:!0})}})({apply:({params:e})=>new r({},{label:e.label})});let u=new Map;e.getCategoryId=function(e){return u.get(e.id)},e.create=function(e){let r=n.E.CreateBuiltIn({name:e.name,display:e.display,from:[t],to:[a],params:e.params,apply({params:t},r){let n=e.label?e.label(t):{label:e.display.name,description:e.display.description};return new a(new e.ctor(r,t),n)},update:({b:e,newParams:t})=>o.iQ.create("Update Behavior",async()=>e.data.update&&await e.data.update(t)?i.td.UpdateResult.Updated:i.td.UpdateResult.Unchanged),canAutoUpdate:e.canAutoUpdate});return u.set(r.id,e.category),r},e.simpleCommandHandler=function(e,t){return class{register(){this.sub=e.subscribe(this.ctx,e=>t(e,this.ctx))}dispose(){this.sub&&this.sub.unsubscribe(),this.sub=void 0}constructor(e){this.ctx=e,this.sub=void 0}}};class c{subscribeCommand(e,t){this.subs.push(e.subscribe(this.ctx,t))}subscribeObservable(e,t){this.subs.push(e.subscribe(t))}track(e){this.subs.push(e)}dispose(){for(let e of this.subs)e.unsubscribe();this.subs=[]}update(e){return!(0,l.VS)(e,this.params)&&(this.params=e,!0)}constructor(e,t){this.ctx=e,this.params=t,this.subs=[]}}e.Handler=c;class d{subscribeCommand(e,t){this.subs.push(e.subscribe(this.plugin,t))}subscribeObservable(e,t){let r=e.subscribe(t);return this.subs.push(r),{unsubscribe:()=>{let e=this.subs.indexOf(r);e>=0&&(this.subs.splice(e,1),r.unsubscribe())}}}dispose(){for(let e of this.subs)e.unsubscribe();this.subs=[]}constructor(e,t){this.plugin=e,this.params=t,this.subs=[]}}e.WithSubscribers=d}(a||(a={}))},51064:function(e,t,r){r.r(t),r.d(t,{DefaultFocusLociBindings:function(){return A},DefaultLociLabelProvider:function(){return I},DefaultSelectLociBindings:function(){return T},FocusLoci:function(){return D},HighlightLoci:function(){return S},SelectLoci:function(){return O}});var a=r(99289),n=r(72762),i=r(58202),o=r(45213),s=r(51493),l=r(67801),u=r(58684),c=r(64770),d=r(14086),p=r(67589),f=r(30502),m=r(36111);let h=u.b4,g=u.N0,b=c.K.Trigger,y={hoverHighlightOnly:(0,c.K)([b(h.Flag.None)],"Highlight","Hover element using ${triggers}"),hoverHighlightOnlyExtend:(0,c.K)([b(h.Flag.None,g.create({shift:!0}))],"Extend highlight","From selected to hovered element along polymer using ${triggers}")},x={bindings:d.e.Value(y,{isHidden:!0}),ignore:d.e.Value([],{isHidden:!0}),preferAtoms:d.e.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:d.e.Boolean(!0)},S=o.q.create({name:"representation-highlight-loci",category:"interaction",ctor:class extends o.q.Handler{constructor(){super(...arguments),this.lociMarkProvider=(e,t)=>{this.ctx.canvas3d&&this.params.mark&&this.ctx.canvas3d.mark(e,t)}}getLoci(e){return this.params.preferAtoms&&f.Bond.isLoci(e)&&2===e.bonds.length?f.Bond.toFirstStructureElementLoci(e):e}
7319register(){this.subscribeObservable(this.ctx.behaviors.interaction.hover,({current:e,buttons:t,modifiers:r})=>{if(!this.ctx.canvas3d||this.ctx.isBusy)return;let a=this.getLoci(e.loci);if(this.params.ignore.includes(a.kind)){this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:e.repr,loci:p.Rh});return}let n=!1;c.K.match(this.params.bindings.hoverHighlightOnly,t,r)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnly({loci:a}),n=!0),c.K.match(this.params.bindings.hoverHighlightOnlyExtend,t,r)&&(this.ctx.managers.interactivity.lociHighlights.highlightOnlyExtend({loci:a}),n=!0),n||this.ctx.managers.interactivity.lociHighlights.highlightOnly({repr:e.repr,loci:p.Rh})}),this.ctx.managers.interactivity.lociHighlights.addProvider(this.lociMarkProvider)}unregister(){this.ctx.managers.interactivity.lociHighlights.removeProvider(this.lociMarkProvider)}},params:()=>x,display:{name:"Highlight Loci on Canvas"}}),T={clickSelect:c.K.Empty,clickSelectOnly:c.K.Empty,clickToggle:(0,c.K)([b(h.Flag.Primary,g.create())],"Toggle selection","Click on element using ${triggers}"),clickToggleExtend:(0,c.K)([b(h.Flag.Primary,g.create({shift:!0}))],"Toggle extended selection","Click on element using ${triggers} to extend selection along polymer"),clickDeselect:c.K.Empty,clickDeselectAllOnEmpty:(0,c.K)([b(h.Flag.Primary,g.create())],"Deselect all","Click on nothing using ${triggers}")},C={bindings:d.e.Value(T,{isHidden:!0}),ignore:d.e.Value([],{isHidden:!0}),preferAtoms:d.e.Boolean(!1,{description:"Always prefer atoms over bonds"}),mark:d.e.Boolean(!0)},O=o.q.create({name:"representation-select-loci",category:"interaction",ctor:class extends o.q.Handler{getLoci(e){return this.params.preferAtoms&&f.Bond.isLoci(e)&&2===e.bonds.length?f.Bond.toFirstStructureElementLoci(e):e}applySelectMark(e,t){let r=this.ctx.state.data.cells.get(e);if(r&&n.G.isRepresentation3D(r.obj)){this.spine.current=r;let e=this.spine.getRootOfType(n.G.Molecule.Structure);if(e){t&&this.lociMarkProvider({loci:f.Structure.Loci(e.data)},a.dd.Deselect);let r=this.ctx.managers.structure.selection.getLoci(e.data);this.lociMarkProvider({loci:r},a.dd.Select)}}}register(){let e=e=>!p.o_.isEmpty(e),t=[["clickSelect",e=>this.ctx.managers.interactivity.lociSelects.select(e),e],["clickToggle",e=>this.ctx.managers.interactivity.lociSelects.toggle(e),e],["clickToggleExtend",e=>this.ctx.managers.interactivity.lociSelects.toggleExtend(e),e],["clickSelectOnly",e=>this.ctx.managers.interactivity.lociSelects.selectOnly(e),e],["clickDeselect",e=>this.ctx.managers.interactivity.lociSelects.deselect(e),e],["clickDeselectAllOnEmpty",()=>this.ctx.managers.interactivity.lociSelects.deselectAll(),e=>p.o_.isEmpty(e)]];t.sort((e,t)=>{let r=this.params.bindings[e[0]],a=this.params.bindings[t[0]],n=0===r.triggers.length?0:(0,m.uH)(r.triggers.map(e=>g.size(e.modifiers)));return(0===a.triggers.length?0:(0,m.uH)(a.triggers.map(e=>g.size(e.modifiers))))-n}),this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:r,modifiers:a})=>{if(!this.ctx.canvas3d||this.ctx.isBusy||!this.ctx.selectionMode)return;let n=this.getLoci(e.loci);if(!this.params.ignore.includes(n.kind)){for(let[i,o,s]of t)if(c.K.match(this.params.bindings[i],r,a)&&(!s||s(n))){o({repr:e.repr,loci:n});break}}}),this.ctx.managers.interactivity.lociSelects.addProvider(this.lociMarkProvider),this.subscribeObservable(this.ctx.state.events.object.created,({ref:e})=>this.applySelectMark(e)),this.subscribeObservable(this.ctx.state.events.object.updated,({ref:e,obj:t,oldObj:r,oldData:a,action:i})=>{let o=this.ctx.state.data.cells.get(e);if(o&&n.G.Molecule.Structure.is(o.obj)){let o=t.data,s="recreate"===i?null==r?void 0:r.data:"in-place"===i?a:void 0;if(s&&f.Structure.areEquivalent(o,s)&&f.Structure.areHierarchiesEqual(o,s))return;for(let t of this.ctx.state.data.select(l.tE.children(e).ofType(n.G.Molecule.Structure.Representation3D)))this.applySelectMark(t.transform.ref,!0)}})}unregister(){this.ctx.managers.interactivity.lociSelects.removeProvider(this.lociMarkProvider)}constructor(e,t){super(e,t),this.lociMarkProvider=(e,t)=>{this.ctx.canvas3d&&this.params.mark&&this.ctx.canvas3d.mark({loci:e.loci},t)},this.spine=new s.W.Impl(e.state.data.cells)}},params:()=>C,display:{name:"Select Loci on Canvas"}}),I=o.q.create({name:"default-loci-label-provider",category:"interaction",ctor:class{register(){this.ctx.managers.lociLabels.addProvider(this.f)}unregister(){this.ctx.managers.lociLabels.removeProvider(this.f)}constructor(e){this.ctx=e,this.f={label:e=>{let t=[];if(f.StructureElement.Loci.is(e)){let r=new Set;for(let{unit:t}of e.elements){let a=f.StructureElement.Location.create(e.structure,t,t.elements[0]),n=f.StructureProperties.entity.pdbx_description(a).join(", ");r.add(n)}
73191===r.size&&r.forEach(e=>t.push(e))}return t.push((0,i.Ve)(e)),t.filter(e=>!!e).join("</br>")},group:e=>e.toString().replace(/Model [0-9]+/g,"Models"),priority:100}}},display:{name:"Provide Default Loci Label"}}),A={clickFocus:(0,c.K)([b(h.Flag.Primary,g.create()),b(h.Flag.Trigger)],"Representation Focus","Click element using ${triggers}"),clickFocusAdd:(0,c.K)([b(h.Flag.Primary,g.create({control:!0})),b(h.Flag.Primary,g.create({meta:!0}))],"Representation Focus Add","Click element using ${triggers}"),clickFocusExtend:(0,c.K)([b(h.Flag.Primary,g.create({shift:!0}))],"Representation Focus Extend","Click on element using ${triggers}"),clickFocusSelectMode:(0,c.K)([],"Representation Focus (Selection Mode)","Click element using ${triggers}"),clickFocusAddSelectMode:(0,c.K)([],"Representation Focus Add (Selection Mode)","Click element using ${triggers}"),clickFocusExtendSelectMode:(0,c.K)([],"Representation Focus Extend (Selection Mode)","Click on element using ${triggers}")},w={bindings:d.e.Value(A,{isHidden:!0})},D=o.q.create({name:"representation-focus-loci",category:"interaction",ctor:class extends o.q.Handler{register(){this.subscribeObservable(this.ctx.behaviors.interaction.click,({current:e,button:t,modifiers:r})=>{var a,n,i,o,s,l,u;let{clickFocus:d,clickFocusAdd:f,clickFocusExtend:m,clickFocusSelectMode:h,click
7319FocusAddSelectMode:g,clickFocusExtendSelectMode:b}=this.params.bindings,y=this.ctx.selectionMode?h:d,x=c.K.match(y,t,r),S=this.ctx.selectionMode?g:f,T=c.K.match(S,t,r),C=this.ctx.selectionMode?b:m,O=c.K.match(C,t,r);if(!x&&!T&&!O)return;let I=null!==(o=null===(i=null===(n=null===(a=e.repr)||void 0===a?void 0:a.props)||void 0===n?void 0:n.snapshotKey)||void 0===i?void 0:i.trim())&&void 0!==o?o:"";if(!this.ctx.selectionMode&&x&&I){this.ctx.managers.snapshot.applyKey(I);return}let A=null===(l=null===(s=e.repr)||void 0===s?void 0:s.props)||void 0===l?void 0:l.markdownCommands;if(!this.ctx.selectionMode&&x&&"object"==typeof A&&Object.keys(A).length>0){this.ctx.managers.markdownExtensions.tryExecute("click",A);return}let{granularity:w}=this.ctx.managers.interactivity.props;if("residue"!==w&&"element"!==w)return;let D=p.o_.normalize(e.loci,"residue"),E=this.ctx.managers.structure.focus.current;if(E&&p.o_.areEqual(E.loci,D))this.ctx.managers.structure.focus.clear();else if(x)this.ctx.managers.structure.focus.setFromLoci(D);else{O?this.ctx.managers.structure.focus.extendFromLoci(D):this.ctx.managers.structure.focus.toggleFromLoci(D);let e=null===(u=this.ctx.managers.structure.focus.current)||void 0===u?void 0:u.loci;e&&this.ctx.managers.camera.focusLoci(e)}})}},params:()=>w,display:{name:"Representation Focus Loci on Canvas"}})},3305:function(e,t,r){r.d(t,{Y:function(){return O}});var a,n,i=r(11056),o=r(85471),s=r(30502),l=r(43015),u=r(45366),c=r(40217),d=r(71649),p=r(67801),f=r(7305),m=r(14086),h=r(16668),g=r(34813),b=r(86276),y=r(64690);let x=e=>{let t=u.L.Representation.StructureRepresentation3D.definition.params(void 0,e);return{expandRadius:m.e.Numeric(5,{min:1,max:10,step:1}),targetParams:m.e.Group(t,{label:"Target",customDefault:(0,l.he)(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.22,sizeAspectRatio:.73,adjustCylinderLength:!0,xrayShaded:!0,aromaticBonds:!1,multipleBonds:"off",excludeTypes:["hydrogen-bond","metal-coordination"]}})}),surroundingsParams:m.e.Group(t,{label:"Surroundings",customDefault:(0,l.he)(e,void 0,{type:"ball-and-stick",size:"physical",typeParams:{sizeFactor:.16,excludeTypes:["hydrogen-bond","metal-coordination"]}})}),nciParams:m.e.Group(t,{label:"Non-covalent Int.",customDefault:(0,l.he)(e,void 0,{type:i.Wt,color:o.qN,size:f.k.BuiltIn.uniform})}),components:m.e.MultiSelect(S,m.e.arrayToOptions(S)),excludeTargetFromSurroundings:m.e.Boolean(!1,{label:"Exclude Target",description:'Exclude the focus "target" from the surroudings component.'}),ignoreHydrogens:m.e.Boolean(!1),ignoreHydrogensVariant:m.e.Select("all",m.e.arrayToOptions(["all","non-polar"])),ignoreLight:m.e.Boolean(!1),material:g.F.getParam(),clip:m.e.Group(b.b.Params),interior:(0,y.xA)()}},S=["target","surroundings","interactions"];(a=n||(n={})).TargetSel="structure-focus-target-sel",a.TargetRepr="structure-focus-target-repr",a.SurrSel="structure-focus-surr-sel",a.SurrRepr="structure-focus-surr-repr",a.SurrNciRepr="structure-focus-surr-nci-repr";let T=new Set([n.TargetSel,n.TargetRepr,n.SurrSel,n.SurrRepr,n.SurrNciRepr]);class C extends c.qZ.WithSubscribers{constructor(){super(...arguments),this.currentSource=void 0}get surrLabel(){return`[Focus] Surroundings (${this.params.expandRadius} \xc5)`}getReprParams(e){return{...e,type:{name:e.type.name,params:{...e.type.params,ignoreHydrogens:this.params.ignoreHydrogens,ignoreHydrogensVariant:this.params.ignoreHydrogensVariant,ignoreLight:this.params.ignoreLight,material:this.params.material,clip:this.params.clip,interior:this.params.interior}}}}ensureShape(e){var t;let r=this.plugin.state.data,a=r.tree,o=r.build(),l=p.tE.findUniqueTagsInSubtree(a,e.transform.ref,T);l[n.TargetSel]||(l[n.TargetSel]=o.to(e).apply(u.L.Model.StructureSelectionFromBundle,{bundle:s.StructureElement.Bundle.Empty,label:"[Focus] Target"},{tags:n.TargetSel}).ref),l[n.SurrSel]||(l[n.SurrSel]=o.to(e).apply(u.L.Model.StructureSelectionFromExpression,{expression:d.MolScriptBuilder.struct.generator.empty(),label:this.surrLabel},{tags:n.SurrSel}).ref);let c=this.params.components;return c.indexOf("target")>=0&&!l[n.TargetRepr]&&(l[n.TargetRepr]=o.to(l[n.TargetSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.targetParams),{tags:n.TargetRepr}).ref),c.indexOf("surroundings")>=0&&!l[n.SurrRepr]&&(l[n.SurrRepr]=o.to(l[n.SurrSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.surroundingsParams),{tags:n.SurrRepr}).ref),c.indexOf("interactions")>=0&&!l[n.SurrNciRepr]&&e.obj&&i.Wt.isApplicable(null===(t=e.obj)||void 0===t?void 0:t.data)&&(l[n.SurrNciRepr]=o.to(l[n.SurrSel]).apply(u.L.Representation.StructureRepresentation3D,this.getReprParams(this.params.nciParams),{tags:n.SurrNciRepr}).ref),{state:r,builder:o,refs:l}}clear(e){let t=this.plugin.state.data;this.currentSource=void 0;let r=t.select(p.tE.Generators.byRef(e).subtree().withTag(n.TargetSel)),a=t.select(p.tE.Generators.byRef(e).subtree().withTag(n.SurrSel));if(0===r.length&&0===a.length)return;let i=t.build(),o=s.StructureElement.Bundle.Empty;for(let e of r)i.to(e).update(u.L.Model.StructureSelectionFromBundle,e=>({...e,bundle:o}));let l=d.MolScriptBuilder.struct.generator.empty();for(let e of a)i.to(e).update(u.L.Model.StructureSelectionFromExpression,e=>({...e,expression:l}));return h.I.State.Update(this.plugin,{state:t,tree:i,options:{doNotLogTiming:!0,doNotUpdate
7319Current:!0}})}async focus(e){let t=this.plugin.helpers.substructureParent.get(e.structure);if(!t||!t.obj)return;this.currentSource=e;let r=s.StructureElement.Loci.remap(e,t.obj.data),a=s.StructureElement.Loci.extendToWholeResidues(r),i=s.StructureElement.Bundle.fromLoci(a),o=s.StructureElement.Bundle.toExpression(i),l=d.MolScriptBuilder.struct.modifier.includeSurroundings({0:o,radius:this.params.expandRadius,"as-whole-residues":!0});this.params.excludeTargetFromSurroundings&&(l=d.MolScriptBuilder.struct.modifier.exceptBy({0:l,by:o}));let{state:c,builder:p,refs:f}=this.ensureShape(t);p.to(f[n.TargetSel]).update(u.L.Model.StructureSelectionFromBundle,e=>({...e,bundle:i})),p.to(f[n.SurrSel]).update(u.L.Model.StructureSelectionFromExpression,e=>({...e,expression:l,label:this.surrLabel})),await h.I.State.Update(this.plugin,{state:c,tree:p,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}})}register(e){this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,e=>{e?this.focus(e.loci):this.clear(p.EW.RootRef)})}async update(e){let t=this.params;if(this.params=e,t.excludeTargetFromSurroundings!==e.excludeTargetFromSurroundings)return this.currentSource&&this.focus(this.currentSource),!0;let r=this.plugin.state.data,a=r.build(),i=p.tE.Generators.root.subtree(),o=this.params.components,s=o.indexOf("target")>=0;for(let e of r.select(i.withTag(n.TargetRepr)))s?a.to(e).update(this.getReprParams(this.params.targetParams)):a.delete(e.transform.ref);for(let e of(s=o.indexOf("surroundings")>=0,r.select(i.withTag(n.SurrRepr))))s?a.to(e).update(this.getReprParams(this.params.surroundingsParams)):a.delete(e.transform.ref);for(let e of(s=o.indexOf("interactions")>=0,r.select(i.withTag(n.SurrNciRepr))))s?a.to(e).update(this.getReprParams(this.params.nciParams)):a.delete(e.transform.ref);return await h.I.State.Update(this.plugin,{state:r,tree:a,options:{doNotLogTiming:!0,doNotUpdateCurrent:!0}}),e.expandRadius!==t.expandRadius&&this.currentSource&&this.focus(this.currentSource),!0}}let O=c.qZ.create({name:"create-structure-focus-representation",display:{name:"Structure Focus Representation"},category:"interaction",ctor:C,params:(e,t)=>x(t)})},83733:function(e,t,r){r.d(t,{a:function(){return P}});var a,n,i=r(14086),o=r(72762),s=r(1573),l=r(48930),u=r(87144),c=r(70371),d=r(45213),p=r(68332);(a=n||(n={})).create=function(e){return{entries:(0,p.S)(),capacity:Math.max(1,e)}},a.get=function(e,t){for(let r=e.entries.first;r;r=r.next)if(r.value.key===t)return e.entries.remove(r),e.entries.addLast(r.value),r.value.data},a.set=function(e,t,r){let a;if(e.entries.count>=e.capacity){let t=e.entries.first;a=t.value.data,e.entries.remove(t)}return e.entries.addLast({key:t,data:r}),a},a.remove=function(e,t){for(let r=e.entries.first;r;r=r.next)if(r.value.key===t){e.entries.remove(r);break}};var f=r(89260),m=r(42639),h=r(23643),g=r(16668),b=r(67801),y=r(30502),x=r(67589),S=r(59725),T=r(1814),C=r(30485),O=r(73824),I=r(93895),A=r(15221),w=r(654);function D(e,t){return e===t}var E=r(73506);class M{constructor(e=!1){this.isRunning=!1,this.queue=[],this.counter=0,this.log=e}enqueue(e){this.log&&console.log("SingleAsyncQueue enqueue",this.counter),this.queue[0]={id:this.counter,func:e},this.counter++,this.run()}async run(){if(this.isRunning)return;let e=this.queue.pop();if(e){this.isRunning=!0;try{this.log&&console.log("SingleAsyncQueue run",e.id),await e.func(),this.log&&console.log("SingleAsyncQueue complete",e.id)}finally{this.isRunning=!1,this.run()}}}}class P extends o.G.CreateBehavior({name:"Volume Streaming"}){}!function(e){function t(e,t,r,a,n={}){var o,l,u,c;return i.e.Group({isoValue:s.f.createIsoValueParam(null!==(o=n.isoValue)&&void 0!==o?o:r,a),color:i.e.Color(null!==(l=n.color)&&void 0!==l?l:t),wireframe:i.e.Boolean(null!==(u=n.wireframe)&&void 0!==u&&u),opacity:i.e.Numeric(null!==(c=n.opacity)&&void 0!==c?c:.3,{min:0,max:1,step:.01})},{label:e,isExpanded:!0})}e.RootTag="volume-streaming-info";let r={byteOffset:0,rate:1,sampleCount:[1,1,1],valuesInfo:[{mean:0,min:-1,max:1,sigma:.1},{mean:0,min:-1,max:1,sigma:.1}]};function a(a){let{entryData:n,defaultView:o,structure:d,channelParam
7319s:f={}}=a,m=n||{kind:"em",header:{sampling:[r],availablePrecisions:[{precision:0,maxVoxels:0}]},emDefaultContourLevel:s.f.IsoValue.relative(0)},h=d&&d.boundary.box||(0,l.XZ)();return{view:i.e.MappedStatic(o||("em"===m.kind?"auto":"selection-box"),{off:i.e.Group({}),box:i.e.Group({bottomLeft:i.e.Vec3(h.min),topRight:i.e.Vec3(h.max)},{description:"Static box defined by cartesian coords.",isFlat:!0}),"selection-box":i.e.Group({radius:i.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in â« within which the volume is shown."}),bottomLeft:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0}),topRight:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0}),"camera-target":i.e.Group({radius:i.e.Numeric(.5,{min:0,max:1,step:.05},{description:"Radius within which the volume is shown (relative to the field of view)."}),dynamicDetailLevel:p(m.header.availablePrecisions,0,{label:"Dynamic Detail"}),bottomLeft:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0}),topRight:i.e.Vec3(u.AO.create(0,0,0),{},{isHidden:!0})},{description:"Box around camera target.",isFlat:!0}),cell:i.e.Group({}),auto:i.e.Group({radius:i.e.Numeric(5,{min:0,max:50,step:.5},{description:"Radius in â« within which the volume is shown."}),selectionDetailLevel:p(m.header.availablePrecisions,6,{label:"Selection Detail"}),isSelection:i.e.Boolean(!1,{isHidden:!0}),bottomLeft:i.e.Vec3(h.min,{},{isHidden:!0}),topRight:i.e.Vec3(h.max,{},{isHidden:!0})},{description:"Box around focused element.",isFlat:!0})},{options:e.ViewTypeOptions,description:'Controls what of the volume is displayed. "Off" hides the volume alltogether. "Bounded box" shows the volume inside the given box. "Around Interaction" shows the volume around the focused element/atom. "Whole Structure" shows the volume for the whole structure.'}),detailLevel:p(m.header.availablePrecisions,3),channels:"em"===m.kind?i.e.Group({em:t("EM",(0,c.Il)(6524815),m.emDefaultContourLevel||s.f.IsoValue.relative(1),m.header.sampling[0].valuesInfo[0],f.em)},{isFlat:!0}):i.e.Group({"2fo-fc":t("2Fo-Fc",(0,c.Il)(3367602),s.f.IsoValue.relative(1.5),m.header.sampling[0].valuesInfo[0],f["2fo-fc"]),"fo-fc(+ve)":t("Fo-Fc(+ve)",(0,c.Il)(3390259),s.f.IsoValue.relative(3),m.header.sampling[0].valuesInfo[1],f["fo-fc(+ve)"]),"fo-fc(-ve)":t("Fo-Fc(-ve)",(0,c.Il)(12268339),s.f.IsoValue.relative(-3),m.header.sampling[0].valuesInfo[1],f["fo-fc(-ve)"])},{isFlat:!0})}}function p(e,t,r){return i.e.Select(Math.min(t,e.length-1),e.map((e,t)=>[t,`${t+1} [ ${0|Math.pow(e.maxVoxels,1/3)}^3 cells ]`]),{description:"Determines the maximum number of voxels. Depending on the size of the volume options are in the range from 1 (0.52M voxels) to 7 (25.17M voxels).",...r})}function P(e){return{entry:{name:e.entry.name,params:{detailLevel:e.entry.params.detailLevel,channels:e.entry.params.channels,view:{name:e.entry.params.view.name,params:{...e.entry.params.view.params}}}}}}e.createParams=function(e={}){let{data:t,defaultView:r,channelParams:n}=e,o=new Map;t&&t.entries.forEach(e=>o.set(e.dataId,e));let s=t?t.entries.map(e=>[e.dataId,e.dataId]):[],l=t?t.entries[0].dataId:"";return{entry:i.e.Mapped(l,s,e=>i.e.Group(a({entryData:o.get(e),defaultView:r,structure:t&&t.structure,channelParams:n})))}},e.createEntryParams=a,e.copyParams=P,e.ViewTypeOptions=[["off","Off"],["box","Bounded Box"],["selection-box","Around Focus"],["camera-target","Around Camera"],["cell","Whole Structure"],["auto","Auto"]],e.ChannelTypeOptions=[["em","em"],["2fo-fc","2fo-fc"],["fo-fc(+ve)","fo-fc(+ve)"],["fo-fc(-ve)","fo-fc(-ve)"]];class k extends d.q.WithSubscribers{get info(){return this.infoMap.get(this.params.entry.name)}async queryData(e){let t=(0,f.T)(this.data.serverUrl,`${this.info.kind}/${this.info.dataId.toLowerCase()}`);if(e){let{min:r,max:a}=e;t+=`/box/${r.map(e=>Math.round(1e3*e)/1e3).join(",")}/${a.map(e=>Math.round(1e3*e)/1e3).join(",")}`}else t+="/cell";let r=this.params.entry.params.detailLevel;"auto"===this.params.entry.params.view.name&&this.params.entry.params.view.params.isSelection&&(r=this.params.entry.params.view.params.selectionDetailLevel),"camera-target"===this.params.entry.params.view.name&&e&&(r=this.decideDetail(e,this.params.entry.params.view.params.dynamicDetailLevel)),t+=`?detail=${r}`;let a=n.get(this.cache,t);if(a)return a.data;let i=S.x.getUrlAsset(this.plugin.managers.asset,t),o=await this.plugin.runTask(this.plugin.managers.asset.resolve(i,"binary")),s=await this.parseCif(o.data);if(!s)return;let l=n.set(this.cache,t,{data:s,asset:o});return l&&l.asset.dispose(),s}async parseCif(e){let t=await this.plugin.runTask(m.pe.parseBinary(e));if(t.isError){this.plugin.log.error("VolumeStreaming, parsing CIF: "+t.toString());return}if(t.result.blocks.length<2){this.plugin.log.error("VolumeStreaming: Invalid data.");return}let r={};for(let e=1;e<t.result.blocks.length;e++){let a=t.result.blocks[e],n=m.pe.schema.densityServer(a),i=await this.plugin.runTask((0,h.N)(n));r[a.header]=i}return r}async updateParams(e,t=!1){let r=P(this.params),a=r.entry.params.view.name;"off"!==a&&"cell"!==a&&(r.entry.params.view.params.bottomLeft=(null==e?void 0:e.min)||u.AO.zero(),r.entry.params.view.params.topRight=(null==e?void 0:e.max)||u.AO.zero()),"auto"===a&&(r.entry.params.view.params.isSelection=t);let n=this.plugin.state.data,i=n.build().to(this.ref).update(r);await g.I.State.Update(this.plugin,{state:n,tree:i,options:{doNotUpdate
7319Current:!0}})}getStructureRoot(){return this.plugin.state.data.select(b.tE.Generators.byRef(this.ref).rootOfType(o.G.Molecule.Structure))[0]}register(e){this.ref=e,this.subscribeObservable(this.plugin.state.events.object.removed,e=>{o.G.Molecule.Structure.is(e.obj)&&y.StructureElement.Loci.is(this.lastLoci)&&this.lastLoci.structure===e.obj.data&&(this.lastLoci=x.Rh)}),this.subscribeObservable(this.plugin.state.events.object.updated,e=>{o.G.Molecule.Structure.is(e.oldObj)&&y.StructureElement.Loci.is(this.lastLoci)&&this.lastLoci.structure===e.oldObj.data&&(this.lastLoci=x.Rh)}),this.subscribeObservable(this.plugin.managers.structure.focus.behaviors.current,e=>{if(!this.plugin.state.data.tree.children.has(this.ref))return;let t=e?e.loci:x.Rh;switch(this.params.entry.params.view.name){case"auto":this.updateAuto(t);break;case"selection-box":this.updateSelectionBox(t);break;default:this.lastLoci=t}})}unregister(){let e=this.cache.entries.first;for(;e;)e.value.data.asset.dispose(),e=e.next}isCameraTargetSame(e,t){if(!e||!t)return!1;let r=u.AO.equals(e.target,t.target),a=u.AO.squaredDistance(e.target,e.position),n=Math.abs(a-u.AO.squaredDistance(t.target,t.position))/a<.001;return r&&n}cameraTargetDistance(e){return u.AO.distance(e.target,e.position)}getBoxFromLoci(e){var t,r,a;if(x.o_.isEmpty(e)||(0,x.jF)(e))return(0,l.XZ)();let n=this.plugin.helpers.substructureParent.get(e.structure,!0);if(!n)return(0,l.XZ)();let i=this.getStructureRoot();if(!i||(null===(t=i.obj)||void 0===t?void 0:t.data)!==(null===(r=n.obj)||void 0===r?void 0:r.data))return(0,l.XZ)();let o=T.N.get(null===(a=i.obj)||void 0===a?void 0:a.data.models[0]);o&&u.yb.invert(this._invTransform,o);let s=y.StructureElement.Loci.extendToWholeResidues(e),c=y.StructureElement.Loci.getBoundary(s,o&&!Number.isNaN(this._invTransform[0])?this._invTransform:void 0).box;return 1===y.StructureElement.Loci.size(s)&&l.XZ.expand(c,c,u.AO.create(1,1,1)),c}updateAuto(e){this.updateQueue.enqueue(async()=>{this.lastLoci=e,(0,x.jF)(e)?await this.updateParams("x-ray"===this.info.kind?this.data.structure.boundary.box:void 0,!1):await this.updateParams(this.getBoxFromLoci(e),!0)})}updateSelectionBox(e){this.updateQueue.enqueue(async()=>{x.o_.areEqual(this.lastLoci,e)?this.lastLoci=x.Rh:this.lastLoci=e;let t=this.getBoxFromLoci(this.lastLoci);await this.updateParams(t)})}updateCameraTarget(e){this.updateQueue.enqueue(async()=>{var t,r,a;let n=null===(t=this.plugin.canvas3d)||void 0===t?void 0:t.props.camera.manualReset;try{n||null===(r=this.plugin.canvas3d)||void 0===r||r.setProps({camera:{manualReset:!0}});let t=this.boxFromCameraTarget(e,!0);await this.updateParams(t)}finally{n||null===(a=this.plugin.canvas3d)||void 0===a||a.setProps({camera:{manualReset:n}})}})}boxFromCameraTarget(e,t){var r;let a,n,i;let o=e.target,s=this.cameraTargetDistance(e),c=Math.tan(.5*e.fov)*s,d=null===(r=this.plugin.canvas3d)||void 0===r?void 0:r.camera.viewport;if(d&&d.width>d.height&&(c*=d.width/d.height),c*="camera-target"===this.params.entry.params.view.name?this.params.entry.params.view.params.radius:.5,t){let e=u.AO.zero();l.XZ.size(e,this.data.structure.boundary.box),a=Math.min(c,.5*e[0]),n=Math.min(c,.5*e[1]),i=Math.min(c,.5*e[2])}else a=n=i=c;return l.XZ.create(u.AO.create(o[0]-a,o[1]-n,o[2]-i),u.AO.create(o[0]+a,o[1]+n,o[2]+i))}decideDetail(e,t){let r="x-ray"===this.info.kind?l.XZ.volume(this.data.structure.boundary.box):this.info.header.spacegroup.size.reduce((e,t)=>e*t,1),a=l.XZ.volume(e)/r,n=this.info.header.availablePrecisions.length-1,i=t;for(;a<=.5&&i<n;)a*=2,i+=1;return i}async update(e){let t="selection-box"===e.entry.params.view.name&&this.params&&this.params.entry&&this.params.entry.params&&this.params.entry.params.view&&"selection-box"!==this.params.entry.params.view.name;this.params=e;let r,a=!1;switch("camera-target"!==e.entry.params.view.name&&this.cameraTargetSubscription&&(this.cameraTargetSubscription.unsubscribe(),this.cameraTargetSubscription=void 0),e.entry.params.view.name){case"off":a=!0;break;case"box":r=l.XZ.create(e.entry.params.view.params.bottomLeft,e.entry.params.view.params.topRight),a=1e-4>l.XZ.volume(r);break;case"selection-box":{r=t?this.getBoxFromLoci(this.lastLoci)||(0,l.XZ)():l.XZ.create(u.AO.clone(e.entry.params.view.params.bottomLeft),u.AO.clone(e.entry.params.view.params.topRight));let n=e.entry.params.view.params.radius;a=1e-4>l.XZ.volume(r),l.XZ.expand(r,r,u.AO.create(n,n,n));break}case"camera-target":this.cameraTargetSubscription||(this.cameraTargetSubscription=this.subscribeOb
7319servable(this.cameraTargetObservable,e=>this.updateCameraTarget(e))),r=this.boxFromCameraTarget(this.plugin.canvas3d.camera.getSnapshot(),!0);break;case"cell":r="x-ray"===this.info.kind?this.data.structure.boundary.box:void 0;break;case"auto":if((r=e.entry.params.view.params.isSelection||"x-ray"===this.info.kind?l.XZ.create(u.AO.clone(e.entry.params.view.params.bottomLeft),u.AO.clone(e.entry.params.view.params.topRight)):void 0)&&(a=1e-4>l.XZ.volume(r),e.entry.params.view.params.isSelection)){let t=e.entry.params.view.params.radius;l.XZ.expand(r,r,u.AO.create(t,t,t))}}let n=a?{}:await this.queryData(r);if(!n)return!1;let i=e.entry.params.channels;return"x-ray"===this.info.kind?(this.channels["2fo-fc"]=this.createChannel(n["2FO-FC"]||s.f.One,i["2fo-fc"],this.info.header.sampling[0].valuesInfo[0]),this.channels["fo-fc(+ve)"]=this.createChannel(n["FO-FC"]||s.f.One,i["fo-fc(+ve)"],this.info.header.sampling[0].valuesInfo[1]),this.channels["fo-fc(-ve)"]=this.createChannel(n["FO-FC"]||s.f.One,i["fo-fc(-ve)"],this.info.header.sampling[0].valuesInfo[1])):this.channels.em=this.createChannel(n.EM||s.f.One,i.em,this.info.header.sampling[0].valuesInfo[0]),!0}createChannel(e,t,r){return{data:e,color:t.color,wireframe:t.wireframe,opacity:t.opacity,isoValue:"relative"===t.isoValue.kind?t.isoValue:s.f.IsoValue.toRelative(t.isoValue,r)}}getDescription(){return"selection-box"===this.params.entry.params.view.name?"Selection":"camera-target"===this.params.entry.params.view.name?"Camera":"box"===this.params.entry.params.view.name?"Static Box":"cell"===this.params.entry.params.view.name?"Cell":""}constructor(e,t){var r,a;super(e,{}),this.plugin=e,this.data=t,this.cache=n.create(25),this.params={},this.lastLoci=x.Rh,this.ref="",this.cameraTargetObservable=this.plugin.canvas3d.didDraw.pipe((0,C.p)(500,void 0,{leading:!0,trailing:!0}),(0,O.U)(()=>{var e;return null===(e=this.plugin.canvas3d)||void 0===e?void 0:e.camera.getSnapshot()}),(r=(e,t)=>this.isCameraTargetSame(e,t),void 0===a&&(a=I.y),r=null!=r?r:D,(0,A.e)(function(e,t){var n,i=!0;e.subscribe((0,w.x)(t,function(e){var o=a(e);(i||!r(n,o))&&(i=!1,n=o,t.next(e))}))})),(0,E.h)(e=>void 0!==e)),this.cameraTargetSubscription=void 0,this.channels={},this._invTransform=(0,u.yb)(),this.infoMap=new Map,this.data.entries.forEach(e=>this.infoMap.set(e.dataId,e)),this.updateQueue=new M}}e.Behavior=k}(P||(P={}))},8777:function(e,t,r){r.d(t,{k6:function(){return A},aU:function(){return E},rJ:function(){return I}});var a,n,i,o=r(72762);class s extends o.G.Create({name:"Volume Streaming",typeClass:"Object"}){}(n=(a=i||(i={})).ValueType||(a.ValueType={})).Float32="float32",n.Int8="int8";var l=r(14086),u=r(54854),c=r(89260),d=r(1573),p=r(67801),f=r(99074),m=r(83733),h=r(10515),g=r(5253),b=r(60843),y=r(48930),x=r(87144),S=r(19892),T=r(30502),C=r(1814);function O(e,t,r,a){e.push({source:"em"===t?{name:"em",params:{isoValue:d.f.IsoValue.absolute(a||0)}}:{name:"x-ray",params:{}},dataId:r})}let I=p.lQ.build({display:{name:"Volume Streaming"},from:o.G.Molecule.Structure,params(e,t){let r=(0,f.Ix)(e&&e.data),a=(0,f.s3)(r,e&&e.data);return{method:l.e.Select(r,[["em","EM"],["x-ray","X-Ray"]]),entries:l.e.ObjectList({id:l.e.Text(a[0]||"")},({id:e})=>e,{defaultValue:a.map(e=>({id:e}))}),defaultView:l.e.Select("em"===r?"auto":"selection-box",m.a.ViewTypeOptions),options:l.e.Group({serverUrl:l.e.Text(t.config.get(S.OW.VolumeStreaming.DefaultServer)||"https://ds.litemol.org"),behaviorRef:l.e.Text("",{isHidden:!0}),emContourProvider:l.e.Select("emdb",[["emdb","EMDB"],["pdbe","PDBe"]],{isHidden:!0}),channelParams:l.e.Value({},{isHidden:!0})})}},isApplicable:(e,t,r)=>{let a=r.config.get(S.OW.VolumeStreaming.CanStream);return a?a(e.data,r):1===e.data.models.length&&T.Model.probablyHasDensityMap(e.data.models[0])}})(({ref:e,state:t,params:r},a)=>u.iQ.create("Volume Streaming",async n=>{let i=[];for(let e=0,t=r.entries.length;e<t;++e){let t;let o=r.entries[e].id.toLowerCase();if("em"===r.method){if(!o.toUpperCase().startsWith("EMD")){await n.update("Getting EMDB info...");let e=await (0,f.GJ)(a,n,o);for(let t=0,o=e.length;t<o;++t){let o;let s=e[t];try{o=await (0,f.TM)(r.options.emContourProvider,a,n,s)}catch(e){console.info(`Could not get map info for ${s}: ${e}`);continue}O(i,r.method,s,o||0)}continue}try{t=await (0,f.TM)(r.options.emContourProvider,a,n,o)}catch(e){console.info(`Could not get map info for ${o}: ${e}`);continue}}O(i,r.method,o,t||0)}let o=t.build().to(e).applyOrUpdateTagged(m.a.RootTag,D,{serverUrl:r.options.serverUrl,entries:i});await o.commit();let s=o.selector;if(!s.isOk)return;let u=t.tree.children.get(s.ref);(null==u?void 0:u.size)>0&&await a.managers.structure.hierarchy.remove(null==u?void 0:u.toArray());
7319let c=s.cell.obj,d=t.build().to(o.ref).apply(E,l.e.getDefaultValues(m.a.createParams({data:c.data,defaultView:r.defaultView,channelParams:r.options.channelParams})),{ref:r.options.behaviorRef?r.options.behaviorRef:void 0});"em"===r.method?d.apply(M,{channel:"em"},{state:{isGhost:!0},tags:"em"}):(d.apply(M,{channel:"2fo-fc"},{state:{isGhost:!0},tags:"2fo-fc"}),d.apply(M,{channel:"fo-fc(+ve)"},{state:{isGhost:!0},tags:"fo-fc(+ve)"}),d.apply(M,{channel:"fo-fc(-ve)"},{state:{isGhost:!0},tags:"fo-fc(-ve)"})),await t.updateTree(d).runInContext(n)})),A=p.lQ.build({display:{name:"Boxify Volume Streaming",description:"Make the current box permanent."},from:m.a,isApplicable:e=>"selection-box"===e.data.params.entry.params.view.name})(({a:e,ref:t,state:r},a)=>{let n=e.data.params;if("selection-box"!==n.entry.params.view.name)return;let i=y.XZ.create(x.AO.clone(n.entry.params.view.params.bottomLeft),x.AO.clone(n.entry.params.view.params.topRight)),o=n.entry.params.view.params.radius;y.XZ.expand(i,i,x.AO.create(o,o,o));let s={...n,entry:{name:n.entry.name,params:{...n.entry.params,view:{name:"box",params:{bottomLeft:i.min,top
7319Right:i.max}}}}};return r.updateTree(r.build().to(t).update(s))}),w={dataId:l.e.Text(""),source:l.e.MappedStatic("x-ray",{em:l.e.Group({isoValue:d.f.createIsoValueParam(d.f.IsoValue.relative(1))}),"x-ray":l.e.Group({})})},D=o.E.BuiltIn({name:"create-volume-streaming-info",display:{name:"Volume Streaming Info"},from:o.G.Molecule.Structure,to:s,params:e=>({serverUrl:l.e.Text("https://ds.litemol.org"),entries:l.e.ObjectList(w,({dataId:e})=>e,{defaultValue:[{dataId:"",source:{name:"x-ray",params:{}}}]})})})({apply:({a:e,params:t},r)=>u.iQ.create("",async a=>{let n=[];for(let e=0,i=t.entries.length;e<i;++e){let i=t.entries[e],o=i.dataId,s="em"===i.source.name?i.source.params.isoValue:d.f.IsoValue.relative(1);await a.update("Getting server header...");let l=await r.fetch({url:(0,c.T)(t.serverUrl,`${i.source.name}/${o.toLocaleLowerCase()}`),type:"json"}).runInContext(a);n.push({dataId:o,kind:i.source.name,header:l,emDefaultContourLevel:s})}return new s({serverUrl:t.serverUrl,entries:n,structure:e.data},{label:"Volume Server",description:`${n.map(e=>e.dataId).join(", ")}`})})}),E=o.E.BuiltIn({name:"create-volume-streaming-behavior",display:{name:"Volume Streaming Behavior"},from:s,to:m.a,params:e=>m.a.createParams({data:e&&e.data})})({canAutoUpdate:({oldParams:e,newParams:t})=>e.entry.params.view===t.entry.params.view||"selection-box"===t.entry.params.view.name||"camera-target"===t.entry.params.view.name||"off"===t.entry.params.view.name,apply:({a:e,params:t},r)=>u.iQ.create("Volume streaming",async a=>{let n=new m.a.Behavior(r,e.data);return await n.update(t),new m.a(n,{label:"Volume Streaming",description:n.getDescription()})}),update:({a:e,b:t,oldParams:r,newParams:a})=>u.iQ.create("Update Volume Streaming",async e=>{if(r.entry.name!==a.entry.name&&"em"in a.entry.params.channels){let{emDefaultContourLevel:e}=t.data.infoMap.get(a.entry.name);e&&(a.entry.params.channels.em.isoValue=e)}let n=await t.data.update(a)?p.td.UpdateResult.Updated:p.td.UpdateResult.Unchanged;return t.description=t.data.getDescription(),n})}),M=o.E.BuiltIn({name:"create-volume-streaming-visual",display:{name:"Volume Streaming Visual"},from:m.a,to:o.G.Volume.Representation3D,params:{channel:l.e.Select("em",m.a.ChannelTypeOptions,{isHidden:!0})}})({apply:({a:e,params:t,spine:r},a)=>u.iQ.create("Volume Representation",async n=>{var i,s;let l=e.data.channels[t.channel];if(!l)return p.lZ.Null;let u=P(e.data,t.channel),c=g.a.BuiltIn.isosurface,d=u.type.params||{},f=c.factory({webgl:null===(i=a.canvas3d)||void 0===i?void 0:i.webgl,...a.representation.volume.themes},c.getParams);f.setTheme(b.Q.create(a.representation.volume.themes,{volume:l.data},u));let m=null===(s=r.getAncestorOfType(o.G.Molecule.Structure))||void 0===s?void 0:s.data,h=(null==m?void 0:m.models.length)===0?void 0:C.N.get(null==m?void 0:m.models[0]);return await f.createOrUpdate(d,l.data).runInContext(n),h&&f.setState({transform:h}),new o.G.Volume.Representation3D({repr:f,sourceData:l.data},{label:`${Math.round(100*l.isoValue.relativeValue)/100} Ï [${t.channel}]`})}),update:({a:e,b:t,newParams:r,spine:a},n)=>u.iQ.create("Volume Representation",async a=>{let i=e.data.channels[r.channel];if(!i)return p.td.UpdateResult.Unchanged;let o=t.data.repr.state.visible,s=P(e.data,r.channel),l={...t.data.repr.props,...s.type.params};return t.data.repr.setTheme(b.Q.create(n.representation.volume.themes,{volume:i.data},s)),await t.data.repr.createOrUpdate(l,i.data).runInContext(a),t.data.repr.setState({visible:o}),t.data.sourceData=i.data,p.td.UpdateResult.Updated})});function P(e,t){let r=e.channels[t];return h.VolumeRepresentation3DHelpers.getDefaultParamsStatic(e.plugin,"isosurface",{isoValue:r.isoValue,alpha:r.opacity,visuals:r.wireframe?["wireframe"]:["solid"]},"uniform",{value:r.color})}},99074:function(e,t,r){r.d(t,{GJ:function(){return p},Ix:function(){return o},TM:function(){return l},s3:function(){return s},tQ:function(){return u}});var a=r(30502),n=r(12618),i=r(19892);function o(e,t="x-ray"){if(!e)return t;let r=e.models[0];return n.rg.is(r.sourceData)?a.Model.hasEmMap(r)?"em":a.Model.hasXrayMap(r)?"x-ray":a.Model.isFromEm(r)?"em":a.Model.isFromXray(r)?"x-ray":t:t}function s(e,t){if(!t||!t.models.length)return[];let r=t.models[0];switch(e){case"em":return function(e){let t=[];if(!n.rg.is(e.sourceData))return[e.entryId];let{db_id:r,db_name:a,content_type:i}=e.sourceData.data.db.pdbx_database_related;if(!a.isDefined)return[e.entryId];for(let e=0,n=a.rowCount;e<n;++e)"EMDB"===a.value(e).toUpperCase()&&"associated EM volume"===i.value(e)&&t.push(r.value(e));return t}(r);case"x-ray":return[r.entryId]}}async function l(e,t,r,a){switch(e){case"emdb":return u(t,r,a);case"pdbe":return c(t,r,a)}}async function u(e,t,r){let a=e.config.get(i.OW.VolumeStreaming.EmdbHeaderServer),n=(await e.fetch({url:`${a}/${r.toUpperCase()}/header/${r.toLowerCase()}.xml`,type:"xml"}).runInContext(t)).getElementsByTagName("map")[0].getElementsByTagName("contour"),o=n[0];for(let e=1;e<n.length;e++)if("true"===n[e].getAttribute("primary")){o=n[e];break}return parseFloat(o.getElementsByTagName("level")[0].textContent)}async function c(e,t,r){var a,n,i,o;r=r.toUpperCase();let s=await e.fetch({url:`https://www.ebi.ac.uk/emdb/api/entry/map/${r}`,type:"json"}).runInContext(t),l=null===(n=null===(a=null==s?void 0:s.map)||void 0===a?void 0:a.contour_list)||void 0===n?void 0:n.contour;return l&&0!==l.length?null!==(o=null===(i=l.find(e=>e.primary))||void 0===i?void 0:i.level)&&void 0!==o?o:l[0].level:d(e,t,r)}async function d(e,t,r){var a,n,i;let o;r=r.toUpperCase();let s=await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/emdb/entry/map/${r}`,type:"json"}).runInContext(t),l=null==s?void 0:s[r];return(null===(i=null===(n=null===(a=null==l?void 0:l[0])||void 0===a?void 0:a.map)||void 0===n?void 0:n.contour_level)||void 0===i?void 0:i.value)!==void 0&&(o=+l[0].map.contour_level.value),o}async function p(e,t,r){var a;let n=await e.fetch({url:`https://www.ebi.ac.uk/pdbe/api/pdb/entry/summary/${r}`,type:"json"}).runInContext(t),i=null==n?void 0:n[r],o=[];if(null===(a=null==i?void 0:i[0])||void 0===a?void 0:a.related_structures){let e=i[0].related_structures.filter(e=>
7319"EMDB"===e.resource&&"associated EM volume"===e.relationship);if(!e.length)throw Error(`No related EMDB entry found for '${r}'.`);o.push(...e.map(e=>e.accession))}else throw Error(`No related EMDB entry found for '${r}'.`);return o}},37156:function(e,t,r){r.r(t),r.d(t,{ApplyAction:function(){return h},ClearHighlights:function(){return C},Highlight:function(){return T},RemoveObject:function(){return g},SetCurrentObject:function(){return f},Snapshots:function(){return O},SyncBehaviors:function(){return p},ToggleExpanded:function(){return b},ToggleVisibility:function(){return y},Update:function(){return m},registerDefault:function(){return d},setSubtreeVisibility:function(){return x}});var a=r(30502),n=r(70899),i=r(72762),o=r(67801),s=r(42071),l=r(89260),u=r(16668),c=r(19892);function d(e){p(e),f(e),m(e),h(e),g(e),b(e),y(e),T(e),C(e),O(e)}function p(e){e.state.events.object.created.subscribe(e=>{i.G.isBehavior(e.obj)&&e.obj.data.register(e.ref)}),e.state.events.object.removed.subscribe(e=>{var t,r,a,n;i.G.isBehavior(e.obj)&&(null===(r=(t=e.obj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.obj.data).dispose)||void 0===n||n.call(a))}),e.state.events.object.updated.subscribe(e=>{var t,r,a,n;"recreate"===e.action&&(e.oldObj&&i.G.isBehavior(e.oldObj)&&(null===(r=(t=e.oldObj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.oldObj.data).dispose)||void 0===n||n.call(a)),e.obj&&i.G.isBehavior(e.obj)&&e.obj.data.register(e.ref))})}function f(e){u.I.State.SetCurrentObject.subscribe(e,({state:e,ref:t})=>e.setCurrent(t))}function m(e){u.I.State.Update.subscribe(e,({state:t,tree:r,options:a})=>e.runTask(t.updateTree(r,a)))}function h(e){u.I.State.ApplyAction.subscribe(e,({state:t,action:r,ref:a})=>e.runTask(t.applyAction(r.action,r.params,a)))}function g(e){function t(t,r){let a=t.build().delete(r);return e.runTask(t.updateTree(a))}u.I.State.RemoveObject.subscribe(e,({state:e,ref:r,removeParentGhosts:a})=>{if(!a)return t(e,r);{let a=e.tree,n=a.transforms.get(r);if(n.parent===r)return t(e,r);for(;;){let r=a.children.get(n.parent);if(n.parent===n.ref||r.size>1)return t(e,n.ref);let i=a.transforms.get(n.parent);if(!i.state.isGhost)return t(e,n.ref);n=i}}})}function b(e){u.I.State.ToggleExpanded.subscribe(e,({state:e,ref:t})=>e.updateCellState(t,({isCollapsed:e})=>({isCollapsed:!e})))}function y(e){u.I.State.ToggleVisibility.subscribe(e,({state:e,ref:t})=>x(e,t,!e.cells.get(t).state.isHidden))}function x(e,t,r){o.K1.doPreOrder(e.tree,e.transforms.get(t),{state:e,value:r},S)}function S(e,t,r){r.state.updateCellState(e.ref,{isHidden:r.value})}function T(e){u.I.Interactivity.Object.Highlight.subscribe(e,({state:t,ref:r})=>{if(e.canvas3d&&!e.isBusy)for(let n of(e.managers.interactivity.lociHighlights.clearHighlights(),"string"==typeof r?[r]:r)){let r=t.cells.get(n);if(r){if(i.G.Molecule.Structure.is(r.obj))e.managers.interactivity.lociHighlights.highlight({loci:a.Structure.Loci(r.obj.data)},!1);else if(r&&i.G.isRepresentation3D(r.obj)){let{repr:t}=r.obj.data;for(let r of t.getAllLoci())e.managers.interactivity.lociHighlights.highlight({loci:r,repr:t},!1)}else if(i.G.Molecule.Structure.Selections.is(r.obj))for(let t of r.obj.data)e.managers.interactivity.lociHighlights.highlight({loci:t.loci},!1)}}})}function C(e){u.I.Interactivity.ClearHighlights.subscribe(e,()=>{e.managers.interactivity.lociHighlights.clearHighlights()})}function O(e){e.config.set(c.OW.State.CurrentServer,e.config.get(c.OW.State.DefaultServer)),u.I.State.Snapshots.Clear.subscribe(e,()=>{e.managers.snapshot.clear()}),u.I.State.Snapshots.Remove.subscribe(e,({id:t})=>{e.managers.snapshot.remove(t)}),u.I.State.Snapshots.Add.subscribe(e,async({key:t,name:r,description:a,descriptionFormat:i,params:o})=>{var s;let l=e.state.getSnapshot(o),u=(null!==(s=null==o?void 0:o.image)&&void 0!==s?s:e.state.snapshotParams.value.image)?await n.z.getCanvasImageAsset(e,`${l.id}-image.png`):void 0,c=n.z.Entry(l,{key:t,name:r,description:a,descriptionFormat:i,image:u});e.managers.snapshot.add(c)}),u.I.State.Snapshots.Replace.subscribe(e,async({id:t,params:r})=>{var a;let i=e.state.getSnapshot(r),o=(null!==(a=null==r?void 0:r.image)&&void 0!==a?a:e.state.snapshotParams.value.image)?await n.z.getCanvasImageAsset(e,`${i.id}-image.png`):void 0;e.managers.snapshot.replace(t,e.state.getSnapshot(r),{image:o})}),u.I.State.Snapshots.Move.subscribe(e,({id:t,dir:r})=>{e.managers.snapshot.move(t,r)}),u.I.State.Snapshots.Apply.subscribe(e,({id:t})=>{let r=e.managers.snapshot.setCurrent(t);if(r)return e.state.setSnapshot(r)}),u.I.State.Snapshots.Upload.subscribe(e,async({name:t,description:r,playOnLoad:a,serverUrl:n,params:i})=>fetch((0,l.T)(n,`set?name=${encodeURIComponent(t||"")}&description=${encodeURIComponent(r||"")}`),{method:"POST",mode:"cors",referrer:"no-referrer",headers:{"Content-Type":"application/json; charset=utf-8"},body:JSON.stringify(await e.managers.snapshot.getStateSnapshot({name:t,description:r,playOnLoad:a}))})),u.I.State.Snapshots.Fetch.subscribe(e,async({url:t})=>{let r=await e.runTask(e.fetch({url:t,type:"json"}));await e.managers.snapshot.setStateSnapshot(r.data)}),u.I.State.Snapshots.DownloadToFile.subscribe(e,async({name:t,type:r,params:a})=>{let n=`mol-star_state_${t||function(){let e=new Date,t=e.getFullYear(),r=e.getMonth()+1,a=e.getDate();return t+"-"+r+"-"+a+"-"+e.getHours()+"-"+e.getMinutes()+"-"+e.getSeconds()}()}.${"json"===r?"molj":"molx"}`,i=await e.managers.snapshot.serialize({type:r,params:a});(0,s.L)(i,`${n}`)}),u.I.State.Snapshots.OpenFile.subscribe(e,({file:t})=>e.managers.snapshot.open(t)),u.I.State.Snapshots.OpenUrl.subscribe(e,async({url:t,type:r})=>{let a=await e.runTask(e.fetch({url:t,type:"binary"}));return e.managers.snapshot.open(new File([a],`state.${r}`))})}},7311:function(e,t,r){r.d(t,{F:function(){return i},G:function(){return n}});var a=r(85764);function n(){let e=(t,r)=>t.commands.dispatch(e,r||{});return e.subscribe=(t,r)=>t.commands.subscribe(e,r),e.id=a.hb.create22(),e}class i{constructor(){this.subs=new Map,this.disposing=!1}
7319subscribe(e,t){let r=this.subs.get(e.id);return r||(r=[],this.subs.set(e.id,r)),r.push(t),{unsubscribe:()=>{let r=this.subs.get(e.id);if(!r)return;let a=r.indexOf(t);if(!(a<0)){for(let e=a+1;e<r.length;e++)r[e-1]=r[e];r.pop()}}}}dispatch(e,t){return new Promise((r,a)=>{if(this.disposing){a("disposed");return}if(!this.subs.get(e.id)){r();return}this.resolve({cmd:e,params:t,resolve:r,reject:a})})}dispose(){this.subs.clear()}async resolve(e){let t=this.subs.get(e.cmd.id);if(!t){e.resolve();return}try{for(let r of t)await r(e.params);e.resolve()}catch(t){e.reject(t)}}}},16668:function(e,t,r){r.d(t,{I:function(){return n}});var a=r(7311);let n={State:{SetCurrentObject:(0,a.G)(),ApplyAction:(0,a.G)(),Update:(0,a.G)(),RemoveObject:(0,a.G)(),ToggleExpanded:(0,a.G)(),ToggleVisibility:(0,a.G)(),Snapshots:{Add:(0,a.G)(),Replace:(0,a.G)(),Move:(0,a.G)(),Remove:(0,a.G)(),Apply:(0,a.G)(),Clear:(0,a.G)(),Upload:(0,a.G)(),Fetch:(0,a.G)(),DownloadToFile:(0,a.G)(),OpenFile:(0,a.G)(),OpenUrl:(0,a.G)()}},Interactivity:{Object:{Highlight:(0,a.G)()},Structure:{Highlight:(0,a.G)(),Select:(0,a.G)()},ClearHighlights:(0,a.G)()},Layout:{Update:(0,a.G)()},Toast:{Show:(0,a.G)(),Hide:(0,a.G)()},Camera:{Reset:(0,a.G)(),SetSnapshot:(0,a.G)(),Focus:(0,a.G)(),FocusObject:(0,a.G)(),OrientAxes:(0,a.G)(),ResetAxes:(0,a.G)()},Canvas3D:{SetSettings:(0,a.G)(),ResetSettings:(0,a.G)()}}},19892:function(e,t,r){r.d(t,{OW:function(){return l},Y5:function(){return u}});var a=r(30502),n=r(34052);let i={get defaultTransparency(){return(0,n.$C)()?"blended":"wboit"},get preferWebGl1(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;if(["Version/15.1 Safari","Version/15.2 Safari","Version/15.3 Safari"].some(e=>navigator.userAgent.indexOf(e)>0))return!0;return(0,n.$C)()}};class o{toString(){return this.key}valueOf(){return this.key}constructor(e,t){this.key=e,this.defaultValue=t}}function s(e,t){return new o(e,t)}let l={item:s,General:{IsBusyTimeoutMs:s("plugin-config.is-busy-timeout",750),DisableAntialiasing:s("plugin-config.disable-antialiasing",!1),DisablePreserveDrawingBuffer:s("plugin-config.disable-preserve-drawing-buffer",!1),PixelScale:s("plugin-config.pixel-scale",1),PickScale:s("plugin-config.pick-scale",.25),Transparency:s("plugin-config.transparency",i.defaultTransparency),PreferWebGl1:s("plugin-config.prefer-webgl1",i.preferWebGl1),AllowMajorPerformanceCaveat:s("plugin-config.allow-major-performance-caveat",!1),PowerPreference:s("plugin-config.power-preference","high-performance"),ResolutionMode:s("plugin-config.resolution-mode","auto")},State:{DefaultServer:s("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),CurrentServer:s("plugin-state.server","https://webchem.ncbr.muni.cz/molstar-state"),HistoryCapacity:s("history-capacity.server",5)},VolumeStreaming:{Enabled:s("volume-streaming.enabled",!0),DefaultServer:s("volume-streaming.server","https://ds.litemol.org"),CanStream:s("volume-streaming.can-stream",(e,t)=>1===e.models.length&&a.Model.probablyHasDensityMap(e.models[0])),EmdbHeaderServer:s("volume-streaming.emdb-header-server","https://files.wwpdb.org/pub/emdb/structures")},Viewport:{ShowReset:s("viewer.show-reset-button",!0),ShowExpand:s("viewer.show-expand-button",!0),ShowToggleFullscreen:s("viewer.show-toggle-fullscreen-button",!0),ShowControls:s("viewer.show-controls-button",!0),ShowSettings:s("viewer.show-settings-button",!0),ShowSelectionMode:s("viewer.show-selection-model-button",!0),ShowAnimation:s("viewer.show-animation-button",!0),ShowTrajectoryControls:s("viewer.show-trajectory-controls",!0),ShowScreenshotControls:s("viewer.show-screenshot-controls",!0),ShowIllumination:s("viewer.show-illumination-button",!0),ShowXR:s("viewer.show-xr","always")},Download:{DefaultPdbProvider:s("download.default-pdb-provider","pdbe"),DefaultEmdbProvider:s("download.default-emdb-provider","pdbe")},Structure:{SizeThresholds:s("structure.size-thresholds",a.Structure.DefaultSizeThresholds),DefaultRepresentationPreset:s("structure.default-representation-preset","auto"),DefaultRepresentationPresetParams:s("structure.default-representation-preset-params",{}),SaccharideCompIdMapType:s("structure.saccharide-comp-id-map-type","default")}
7319,Background:{Styles:s("background.styles",[])}};class u{get(e){return this._config.has(e)?this._config.get(e):e.defaultValue}set(e,t){this._config.set(e,t)}delete(e){this._config.delete(e)}constructor(e){if(this._config=new Map,!e)return;e.forEach(([e,t])=>this._config.set(e,t))}}},24641:function(e,t,r){r.d(t,{B:function(){return y}});var a,n=r(53596),i=r(22569),o=r(2622),s=r(63536),l=r(72762),u=r(67801),c=r(85764),d=r(14086),p=r(40217),f=r(16668),m=r(19892),h=r(5932),g=r(54854),b=r(67738);class y extends s.k{get animation(){return this.plugin.managers.animation}getSnapshot(e){var t,r,a;let n={...this.snapshotParams.value,...e};return{id:c.hb.create22(),data:n.data?this.data.getSnapshot():void 0,behaviour:n.behavior?this.behaviors.getSnapshot():void 0,animation:n.animation?this.animation.getSnapshot():void 0,startAnimation:n.startAnimation?!!n.startAnimation:void 0,camera:n.camera?{current:this.plugin.canvas3d.camera.getSnapshot(),transitionStyle:n.cameraTransition.name,transitionDurationInMs:(null===(t=null==n?void 0:n.cameraTransition)||void 0===t?void 0:t.name)==="animate"?n.cameraTransition.params.durationInMs:void 0}:void 0,canvas3dContext:n.canvas3dContext?{props:null===(r=this.plugin.canvas3dContext)||void 0===r?void 0:r.props}:void 0,canvas3d:n.canvas3d?{props:null===(a=this.plugin.canvas3d)||void 0===a?void 0:a.props}:void 0,interactivity:n.interactivity?{props:this.plugin.managers.interactivity.props}:void 0,structureFocus:this.plugin.managers.structure.focus.getSnapshot(),structureSelection:n.structureSelection?this.plugin.managers.structure.selection.getSnapshot():void 0,structureComponentManager:n.componentManager?{options:this.plugin.managers.structure.component.state.options}:void 0,durationInMs:null==n?void 0:n.durationInMs}}async setSnapshot(e){var t,r,a,n,i,s,l,u,c,p;if(await this.animation.stop(),(null===(t=e.structureComponentManager)||void 0===t?void 0:t.options)&&this.plugin.managers.structure.component._setSnapshotState(null===(r=e.structureComponentManager)||void 0===r?void 0:r.options),e.behaviour&&await this.plugin.runTask(this.behaviors.setSnapshot(e.behaviour)),e.data&&await this.plugin.runTask(this.data.setSnapshot(e.data)),null===(a=e.canvas3d)||void 0===a?void 0:a.props){let t=d.e.normalizeParams(o.h4,e.canvas3d.props,"children");((null===(n=e.camera)||void 0===n?void 0:n.current)||(null===(i=e.camera)||void 0===i?void 0:i.focus))&&(t.camera=void 0,t.cameraClipping=void 0,t.cameraFog=void 0),await f.I.Canvas3D.SetSettings(this.plugin,{settings:t})}if(null===(s=e.canvas3dContext)||void 0===s?void 0:s.props){let t=d.e.normalizeParams(o.QX.Params,e.canvas3dContext.props,"children");null===(l=this.plugin.canvas3dContext)||void 0===l||l.setProps(t)}if(e.interactivity&&e.interactivity.props&&this.plugin.managers.interactivity.setProps(e.interactivity.props),e.structureFocus&&this.plugin.managers.structure.focus.setSnapshot(e.structureFocus),e.structureSelection&&this.plugin.managers.structure.selection.setSnapshot(e.structureSelection),e.animation&&this.animation.setSnapshot(e.animation),(null===(u=e.camera)||void 0===u?void 0:u.current)?f.I.Camera.Reset(this.plugin,{snapshot:e.camera.current,durationMs:"animate"===e.camera.transitionStyle?e.camera.transitionDurationInMs:void 0}):(null===(c=e.camera)||void 0===c?void 0:c.focus)&&f.I.Camera.FocusObject(this.plugin,{...e.camera.focus,durationMs:"animate"===e.camera.transitionStyle?e.camera.transitionDurationInMs:void 0}
7319),"object"==typeof(null==e?void 0:e.onLoadMarkdownCommands)&&Object.keys(e.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",e.onLoadMarkdownCommands),e.startAnimation){this.animation.start();return}(null===(p=e.transition)||void 0===p?void 0:p.autoplay)&&(await g.b2.immediatePromise(),this.animation.play(h.Z,{}))}async setAnimationSnapshot(e,t){var r,a,n,i;await this.animation.stopStateTransitionAnimation();let{transition:s}=e;if(!s)return;let l=Math.min(t,s.frames.length-1),u=null!==(r=s.frames[l])&&void 0!==r?r:e.data;if(u.data&&await this.plugin.runTask(this.data.setSnapshot(u.data)),null===(a=u.canvas3d)||void 0===a?void 0:a.props){let e=d.e.normalizeParams(o.h4,u.canvas3d.props,"children");null===(n=this.plugin.canvas3d)||void 0===n||n.setProps(e)}(null===(i=u.camera)||void 0===i?void 0:i.current)&&f.I.Camera.Reset(this.plugin,{snapshot:u.camera.current,durationMs:"animate"===u.camera.transitionStyle?u.camera.transitionDurationInMs:void 0}),!t&&"object"==typeof(null==e?void 0:e.onLoadMark
7319downCommands)&&Object.keys(e.onLoadMarkdownCommands).length>0&&this.plugin.managers.markdownExtensions.tryExecute("click",e.onLoadMarkdownCommands)}updateTransform(e,t,r,a){let n=e.build().to(t).update(r);return f.I.State.Update(this.plugin,{state:e,tree:n,options:{canUndo:a}})}hasBehavior(e){return this.behaviors.tree.transforms.has(e.id)}updateBehavior(e,t){let r=this.behaviors.build();if(this.behaviors.tree.transforms.has(e.id))r.to(e.id).update(t);else{let a=e.createDefaultParams(void 0,this.plugin);r.to(p.qZ.getCategoryId(e)).apply(e,(0,n.U)(a,t),{ref:e.id})}return this.plugin.runTask(this.behaviors.updateTree(r))}dispose(){this.behaviors.cells.forEach(e=>{var t,r,a,n;p.qZ.Behavior.is(e.obj)&&(null===(r=(t=e.obj.data).unregister)||void 0===r||r.call(t),null===(n=(a=e.obj.data).dispose)||void 0===n||n.call(a))}),super.dispose(),this.data.dispose(),this.behaviors.dispose(),this.animation.dispose()}constructor(e){super(),this.plugin=e,this.data=u.ZM.create(new l.G.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,historyCapacity:this.plugin.config.get(m.OW.State.HistoryCapacity)}),this.behaviors=u.ZM.create(new p.qZ.Root({}),{runTask:this.plugin.runTask,globalContext:this.plugin,rootState:{isLocked:!0}}),this.events={cell:{stateUpdated:(0,i.T)(this.data.events.cell.stateUpdated,this.behaviors.events.cell.stateUpdated),created:(0,i.T)(this.data.events.cell.created,this.behaviors.events.cell.created),removed:(0,i.T)(this.data.events.cell.removed,this.behaviors.events.cell.removed)},object:{created:(0,i.T)(this.data.events.object.created,this.behaviors.events.object.created),removed:(0,i.T)(this.data.events.object.removed,this.behaviors.events.object.removed),updated:(0,i.T)(this.data.events.object.updated,this.behaviors.events.object.updated)}},this.snapshotParams=this.ev.behavior(y.DefaultSnapshotParams),this.setSnapshotParams=e=>{this.snapshotParams.next({...y.DefaultSnapshotParams,...e})}}}(a=y||(y={})).SnapshotParams={durationInMs:d.e.Numeric(1500,{min:100,max:15e3,step:100},{label:"Duration in ms"}),data:d.e.Boolean(!0),behavior:d.e.Boolean(!1),structureSelection:d.e.Boolean(!1),componentManager:d.e.Boolean(!0),animation:d.e.Boolean(!0),startAnimation:d.e.Boolean(!1),canvas3d:d.e.Boolean(!0),canvas3dContext:d.e.Boolean(!0),interactivity:d.e.Boolean(!0),camera:d.e.Boolean(!0),cameraTransition:d.e.MappedStatic("animate",{animate:d.e.Group({durationInMs:d.e.Numeric(250,{min:100,max:5e3,step:500},{label:"Duration in ms"})}),instant:d.e.Group({})},{options:[["animate","Animate"],["instant","Instant"]]}),image:d.e.Boolean(!1)},a.DefaultSnapshotParams=d.e.getDefaultValues(a.SnapshotParams),a.getMinFrameDuration=(0,b.j)(e=>{if(!e)return 1e3/60;let{transition:t}=e;if(!t)return 1e3/60;let r=1/0;for(let e of t.frames)e.durationInMs>0&&e.durationInMs<r&&(r=e.durationInMs);return Number.isFinite(r)?r:1e3/60}),a.getStateTransitionDuration=(0,b.j)(e=>{if(!e)return;let{transition:t}=e;if(!t)return;let r=0;for(let e=0;e<t.frames.length;e++)r+=t.frames[e].durationInMs;return r}),a.getStateTransitionFrameTime=(0,b.j)((e,t)=>{if(!e||void 0===t)return 0;let{transition:r}=e;if(!r)return 0;let a=0;for(let e=0;e<t&&!(r.frames.length<=e);e++)a+=r.frames[e].durationInMs;return a}),a.getStateTransitionFrameIndex=function(e,t){var r;let{transition:n}=e;if(!(null==n?void 0:n.frames.length))return;let i=t;n.loop&&(i%=null!==(r=a.getStateTransitionDuration(e))&&void 0!==r?r:1);let o=0;if(i<=n.frames[0].durationInMs)return 0;for(let e=0;e<n.frames.length;e++){if(o>=i)return e;o+=n.frames[e].durationInMs}return n.frames.length-1}},23465:function(e,t,r){r.d(t,{L:function(){return a},R:function(){return n}});var a="5.7.0",n=new Date(1772314988507)},7791:function(e,t,r){let a;r.d(t,{Qx:function(){return A},hX:function(){return i}});var n,i,o=r(14086),s=r(60843),l=r(89987),u=r(54854),c=r(99289),d=r(67589),p=r(30481),f=r(65109),m=r(87144),h=r(11650),g=r(54185),b=r(30131),y=r(1813),x=r(63964),S=r(69062),T=r(5909),C=r(37792);(n||(n={})).getDefaultParams=function(e,t,r){return o.e.getDefaultValues(e.getParams(t,r))};let O={name:"",label:"",description:"",factory:()=>i.Empty,getParams:()=>({}),defaultValues:{},defaultColorTheme:{name:""},defaultSizeTheme:{name:""},isApplicable:()=>!0};function I(e){return e.map(e=>[e.name,e.provider.label])}class A{get default(){return this._list[0]}get types(){return I(this._list)}constructor(){this._list=[],this._map=new Map,this._name=new Map}add(e){if(this._map.has(e.name))throw Error(`${e.name} already registered.`);this._list.push({name:e.name,provider:e}),this._map.set(e.name,e),this._name.set(e,e.name)}getName(e){if(!this._name.has(e))throw Error(`'${e.label}' is not a registered represenatation provider.`);return this._name.get(e)}remove(e){let t=e.name;this._list.splice(this._list.findIndex(e=>e.name===t),1);let r=this._map.get(t);r&&(this._map.delete(t),this._name.delete(r))}get(e){return this._map.get(e)||O}get list(){return this._list}getApplicableList(e){return this._list.filter(t=>t.provider.isApplicable(e))}getApplicableTypes(e){return I(this.getApplicableList(e))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}}!function(e){var t;function r(){return{visible:!0,alphaFactor:1,pickable:!0,colorOnly:!1,syncManually:!1,transform:m.yb.i
7319dentity(),overpaint:p.k.Empty,transparency:f.i.Empty,emissive:C.i.Empty,substance:T.A.Empty,clipping:y.z.Empty,themeStrength:{overpaint:1,transparency:1,emissive:1,substance:1},markerActions:c.E5.All}}function a(e,t){void 0!==t.visible&&(e.visible=t.visible),void 0!==t.alphaFactor&&(e.alphaFactor=t.alphaFactor),void 0!==t.pickable&&(e.pickable=t.pickable),void 0!==t.colorOnly&&(e.colorOnly=t.colorOnly),void 0!==t.overpaint&&(e.overpaint=t.overpaint),void 0!==t.transparency&&(e.transparency=t.transparency),void 0!==t.emissive&&(e.emissive=t.emissive),void 0!==t.substance&&(e.substance=t.substance),void 0!==t.clipping&&(e.clipping=t.clipping),void 0!==t.themeStrength&&(e.themeStrength=t.themeStrength),void 0!==t.syncManually&&(e.syncManually=t.syncManually),void 0!==t.transform&&m.yb.copy(e.transform,t.transform),void 0!==t.markerActions&&(e.markerActions=t.markerActions)}(t=e.Loci||(e.Loci={})).areEqual=function(e,t){return e.repr===t.repr&&d.o_.areEqual(e.loci,t.loci)},t.isEmpty=function(e){return d.o_.isEmpty(e.loci)},t.Empty={loci:d.Rh},e.createState=r,e.updateState=a,e.StateBuilder={create:r,update:a},e.createEmpty=function(){return{label:"",groupCount:0,renderObjects:[],geometryVersion:-1,props:{},params:{},updated:new l.x,state:r(),theme:s.Q.createEmpty(),createOrUpdate:()=>u.iQ.constant("",void 0),setState:()=>{},setTheme:()=>{},getLoci:()=>d.Rh,getAllLoci:()=>[],eachLocation:()=>{},mark:()=>!1,destroy:()=>{}}};class n{constructor(){this.curr=new Set,this.next=new Set,this._version=-1}get version(){return this._version}add(e,t){this.next.add((0,S.FY)(e,t))}snapshot(){x.F.areEqual(this.curr,this.next)||(this._version+=1),[this.curr,this.next]=[this.next,this.curr],this.next.clear()}}e.GeometryState=n,e.createMulti=function(e,t,r,a,i){let c,p,f,m=0,g=new l.x,b=new n,y=a.create(),x=s.Q.createEmpty(),S={},T=Object.keys(i).map((e,a)=>{S[a]=e;let n=i[e](t,r);return n.setState(y),n});return{label:e,updated:g,get groupCount(){let e=0;if(p){let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&(e+=T[r].groupCount)}return e},get renderObjects(){let e=[];
7319if(p){let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&e.push(...T[r].renderObjects)}return e},get geometryVersion(){return b.version},get props(){return p},get params(){return c},createOrUpdate:(a={},n)=>{n&&n!==f&&(c=r(t,n),f=n,p||(p=o.e.getDefaultValues(c)));let i=(0,h.bw)(Object.assign({},p,a),f);Object.assign(p,a,i);let{visuals:s}=p;return u.iQ.create(`Creating or updating '${e}' representation`,async e=>{for(let t=0,r=T.length;t<r;++t)(!s||s.includes(S[t]))&&await T[t].createOrUpdate(p,f).runInContext(e),b.add(t,T[t].geometryVersion);b.snapshot(),g.next(m++)})},get state(){return y},get theme(){return x},getLoci:e=>{let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)if(!t||t.includes(S[r])){let t=T[r].getLoci(e);if(!(0,d.jF)(t))return t}return d.Rh},getAllLoci:()=>{let e=[],{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&e.push(...T[r].getAllLoci());return e},eachLocation:e=>{let{visuals:t}=p;for(let r=0,a=T.length;r<a;++r)(!t||t.includes(S[r]))&&T[r].eachLocation(e)},mark:(e,t)=>{let r=!1;for(let a=0,n=T.length;a<n;++a)r=T[a].mark(e,t)||r;return r},setState:e=>{a.update(y,e);for(let t=0,r=T.length;t<r;++t)T[t].setState(e)},setTheme:e=>{x=e;for(let t=0,r=T.length;t<r;++t)T[t].setTheme(e)},destroy(){for(let e=0,t=T.length;e<t;++e)T[e].destroy()}}},e.fromRenderObject=function(t,r){let a=0,i=new l.x,c=new n,p=e.createState(),f=s.Q.createEmpty(),m=o.e.clone(g.ev.Params),y=o.e.getDefaultValues(g.ev.Params);return{label:t,updated:i,get groupCount(){return r.values.uGroupCount.ref.value},get renderObjects(){return[r]},get geometryVersion(){return c.version},get props(){return y},get params(){return m},createOrUpdate:(e={})=>{let n=(0,h.bw)(Object.assign({},y,e));return Object.assign(y,e,n),u.iQ.create(`Updating '${t}' representation`,async e=>{c.add(0,r.id),c.snapshot(),i.next(a++)})},get state(){return p},get theme(){return f},getLoci:()=>d.Rh,getAllLoci:()=>[],eachLocation:()=>{},mark:(e,t)=>!1,setState:t=>{void 0!==t.visible&&b.u.setVisibility(r,t.visible),void 0!==t.alphaFactor&&b.u.setAlphaFactor(r,t.alphaFactor),void 0!==t.pickable&&b.u.setPickable(r,t.pickable),void 0!==t.colorOnly&&b.u.setColorOnly(r,t.colorOnly),t.overpaint,t.transparency,t.emissive,t.substance,t.clipping,void 0!==t.themeStrength&&b.u.setThemeStrength(r,t.themeStrength),void 0!==t.transform&&b.u.setTransform(r,t.transform),e.updateState(p,t)},setTheme:()=>{},destroy(){}}}}(i||(i={})),Object.defineProperty(i,"Empty",{get:()=>null!=a?a:a=i.createEmpty()})},59071:function(e,t,r){r.d(t,{i:function(){return s},z:function(){return o}});var a=r(14086),n=r(7922),i=r(21071);let o={customText:a.e.Text("",{label:"Text",description:"Override the label with custom value.",isEssential:!0}),textColor:a.e.Color(n.t.black,{isEssential:!0}),textSize:a.e.Numeric(.5,{min:.1,max:10,step:.1},{isEssential:!0})},s={...i.x.Params,...o,borderWidth:a.e.Numeric(.2,{min:0,max:.5,step:.01})}},23579:function(e,t,r){r.d(t,{s:function(){return y}});var a=r(14086),n=r(84894),i=r(7791),o=r(30502),s=r(89987),l=r(67241),u=r(60843),c=r(54854),d=r(67589),p=r(99289),f=r(30481),m=r(1813),h=r(65109),g=r(5909),b=r(37792);function y(e,t,r,y){let x,S,T,C,O=0,{webgl:I}=t,A=new s.x,w=new i.hX.GeometryState,D=(0,l.xH)(),E=[],M=n.U_.create(),P=u.Q.createEmpty();function k(e){if(n.U_.update(M,e),void 0!==e.visible&&x&&x.setVisibility(e.visible&&(null===M.unitTransforms||M.unitTransforms.isIdentity)),void 0!==e.alphaFactor&&x&&x.setAlphaFactor(e.alphaFactor),void 0!==e.pickable&&x&&x.setPickable(e.pickable),void 0!==e.overpaint&&x){let t=f.k.remap(e.overpaint,S);x.setOverpaint(t,I)}if(void 0!==e.transparency&&x){let t=h.i.remap(e.transparency,S);x.setTransparency(t,I)}if(void 0!==e.emissive&&x){let t=b.i.remap(e.emissive,S);x.setEmissive(t,I)}if(void 0!==e.substance&&x){let t=g.A.remap(e.substance,S);x.setSubstance(t,I)}if(void 0!==e.clipping&&x){let t=m.z.remap(e.clipping,S);x.setClipping(t)}void 0!==e.themeStrength&&x&&x.setThemeStrength(e.themeStrength),void 0!==e.transform&&x&&x.setTransform(e.transform),void 0!==e.unitTransforms&&x&&x.setVisibility(M.visible&&(null===e.unitTransforms||e.unitTransforms.isIdentity))}return{label:e,get groupCount(){return x?x.groupCount:0},get props(){return C},get params(){return T},get state(){return M},get theme(){return P},get geometryVersion(){return w.version},renderObjects:E,updated:A,createOrUpdate:function(e={}
7319,n){return n&&n!==S&&(T=r(t,n),S=n,C||(C=a.e.getDefaultValues(T))),C=Object.assign({},C,e),c.iQ.create("Creating or updating ComplexRepresentation",async e=>{var t;let r=!1;x?(null===(t=x.mustRecreate)||void 0===t?void 0:t.call(x,S,C,I))&&(x.destroy(),x=y(D,S,C,I),r=!0):(x=y(D,S,C,I),r=!0);let a=x.createOrUpdate({webgl:I,runtime:e},P,C,n);a&&await a,r&&k(M),E.length=0,x&&x.renderObject&&(E.push(x.renderObject),w.add(x.renderObject.id,x.geometryVersion)),w.snapshot(),O+=1,A.next(O)})},setState:k,setTheme:function(e){P=e},getLoci:function(e){return x?x.getLoci(e):d.Rh},getAllLoci:function(){var e;return[o.Structure.Loci(null!==(e=S.child)&&void 0!==e?e:S)]},eachLocation:function(e){null==x||x.eachLocation(e)},mark:function(e,t){if(!S||!p.E5.is(M.markerActions,t))return!1;if(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)||o.Bond.isLoci(e)){if(!o.Structure.areRootsEquivalent(e.structure,S))return!1;e=d.o_.remap(e,S),(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)&&o.StructureElement.Loci.isWholeStructure(e))&&(e=d.GK)}else if(!(0,d.h)(e)&&!(0,d.dh)(e))return!1;return!d.o_.isEmpty(e)&&!!x&&x.mark(e,t)},destroy:function(){x&&x.destroy()}}}},43091:function(e,t,r){r.d(t,{$N:function(){return X},Kh:function(){return H},Ly:function(){return W},Sx:function(){return z},Y8:function(){return j},dz:function(){return V},f2:function(){return q},il:function(){return Q},kN:function(){return k},nZ:function(){return N},oI:function(){return U},p2:function(){return R},rH:function(){return K},sB:function(){return _},tc:function(){return G},uS:function(){return B},um:function(){return F},vD:function(){return L}});var a=r(30131),n=r(30502),i=r(11803),o=r(60843),s=r(41306),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85764),m=r(17411),h=r(69587),g=r(99289),b=r(4376),y=r(94900),x=r(96046),S=r(21071),T=r(7305),C=r(74219),O=r(85688),I=r(25945),A=r(39446),w=r(97667),D=r(39857),E=r(99696),M=r(98510);function P(e,t){let r,b,y,x,S,C,I,A;let{defaultProps:D,createGeometry:E,createLocationIterator:M,getLoci:P,eachLocation:k,setUpdateState:B,mustRecreate:_,processValues:R,dispose:F}=e,{updateValues:L,updateBoundingSphere:z,updateRenderableState:N,createPositionIterator:G}=e.geometryUtils,U=d.wV.create(),V={loci:u.Rh,action:g.dd.None,status:-1},j=Object.assign({},D),H=o.Q.createEmpty(),q=-1;function X(e){if(U.createNew){if(I=M(x,b),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=u(t,(0,s.tx)(),r,a,n),p=c(n);return(0,l.Hq)(t.kind,d,p,o)}(0,e,I,y,b,t),A=G(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((U.updateColor||U.updateSize||U.updateTransform)&&(I=M(x,b)),U.updateTransform){let{instanceCount:e,groupCount:t}=I;b.instanceGranularity?(0,O.eL)(e,"instance",r.values):(0,O.eL)(e*t,"groupInstance",r.values)}if(U.createGeometry){if(e)f.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),f.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),f.IO.updateIfChanged(r.values.uGroupCount,I.groupCount);else throw Error("expected geometry to be given")}(U.updateTransform||U.createGeometry)&&(z(r.values,e||C),A=G(C,r.values)),U.updateSize&&"uSize"in r.values&&(0,m.H4)(I,A,y.size,r.values),U.updateColor&&(0,h.is)(I,A,y.color,r.values),L(r.values,b),N(r.state,b)}j=b,H=y,S=x,e&&(C=e,q+=1)}function W(e,t,r){var a;if((0,u.h)(e)||n.Structure.isLoci(e)&&n.Structure.areRootsEquivalent(e.structure,S)||n.StructureElement.Loci.is(e)&&n.Structure.areRootsEquivalent(e.structure,S)&&n.StructureElement.Loci.isWholeStructure(e)?0:1){if(!j.instanceGranularity)return k(e,S,t,r);{let r;return a=S,r=!1,!!((n.StructureElement.Loci.is(e)||n.Bond.isLoci(e))&&n.Structure.areEquivalent(e.structure,a))&&(t(c.Xp.ofSingleton(0))&&(r=!0),r)}}return t(j.instanceGranularity?c.Xp.ofBounds(0,I.instanceCount):c.Xp.ofBounds(0,I.groupCount*I.instanceCount))}function K(e){r&&(null==R||R(r.values,C,j,H,e.webgl))}return{get groupCount(){return I?I.count:0},get renderObject(){return I&&I.count?r:void 0},get geometryVersion(){return q},createOrUpdate(e,t,a={},i){if(!function(e,t,a){if(!a&&!S)throw Error("missing structure");
7319if(b=Object.assign({},j,t),y=e,x=a,d.wV.reset(U),!r||!S){U.createNew=!0,U.createGeometry=!0;return}B(U,b,j,y,H,x,S),n.Structure.areEquivalent(x,S)||(U.createGeometry=!0),n.Structure.areHierarchiesEqual(x,S)||(U.updateTransform=!0,U.createGeometry=!0),p.U.areEqual(e.color,H.color)||(U.updateColor=!0),T.k.areEqual(e.size,H.size)||(U.updateSize=!0),(0,f.vZ)(b.unitKinds,j.unitKinds)||(U.createGeometry=!0),S.child!==x.child&&(U.createGeometry=!0,U.updateTransform=!0),b.instanceGranularity!==j.instanceGranularity&&(U.updateTransform=!0),!U.updateSize||"uSize"in r.values||(U.createGeometry=!0),U.createGeometry&&(U.updateColor=!0,U.updateSize=!0)}(t,a,i||S),U.createGeometry){let t=E(e,x,y,b,C);if((0,w.y8)(t))return t.then(t=>{X(t),K(e)});X(t)}else X();K(e)},getLoci:e=>r?P(e,S,r.id):u.Rh,eachLocation(e){for(I.reset();I.hasNext;){let{location:t,isSecondary:r}=I.move();e(t,r)}},mark:(e,t)=>a.u.mark(r,e,t,W,V),setVisibility(e){a.u.setVisibility(r,e)},setAlphaFactor(e){a.u.setAlphaFactor(r,e)},setPickable(e){a.u.setPickable(r,e)},setColorOnly(e){a.u.setColorOnly(r,e)},setTransform(e,t){a.u.setTransform(r,e,t)},setOverpaint(e,t){let n={geometry:C,props:j,webgl:t};a.u.setOverpaint(r,e,W,!0,n)},setTransparency(e,t){let n={geometry:C,props:j,webgl:t};a.u.setTransparency(r,e,W,!0,n)},setEmissive(e,t){let n={geometry:C,props:j,webgl:t};a.u.setEmissive(r,e,W,!0,n)},setSubstance(e,t){let n={geometry:C,props:j,webgl:t};a.u.setSubstance(r,e,W,!0,n)},setClipping(e){a.u.setClipping(r,e,W,!0)},setThemeStrength(e){a.u.setThemeStrength(r,e)},destroy(){null==F||F(C),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:_}}let k={...I.Vh,...I.QN};function B(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:b.K.Utils},t)}let _={...I.eV,...I.QN};function R(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:D.s.Utils},t)}let F={...I.g,...I.QN};function L(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:y.A.Utils},t)}let z={...I.N5,...I.QN};function N(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:E.w.Utils},t)}let G={...I.W$,...I.QN};function U(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:x.x.Utils},t)}let V={...I.zy,...I.QN};function j(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.updateSize=!0),r.background!==a.background&&(t.createGeometry=!0),r.backgroundMargin!==a.backgroundMargin&&(t.createGeometry=!0),r.tether!==a.tether&&(t.createGeometry=!0),r.tetherLength!==a.tetherLength&&(t.createGeometry=!0),r.tetherBaseWidth!==a.tetherBaseWidth&&(t.createGeometry=!0),r.attachment!==a.attachment&&(t.createGeometry=!0),r.fontFamily!==a.fontFamily&&(t.createGeometry=!0),r.fontQuality!==a.fontQuality&&(t.createGeometry=!0),r.fontStyle!==a.fontStyle&&(t.createGeometry=!0),r.fontVariant!==a.fontVariant&&(t.createGeometry=!0),r.fontWeight!==a.fontWeight&&(t.createGeometry=!0)},geometryUtils:S.x.Utils},t)}let H={...I.cg,...I.QN};function q(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:C.A.Utils},t)}let X={...I.Xj,...I.QN};function W(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:A.q.Utils},t)}let K={...I.pT,...I.QN};function Q(e,t){return P({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),T.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:M.Ee.Utils},t)}},25945:function(e,t,r){r.d(t,{I4:function(){return m},N5:function(){return x},QN:function(){return h},Vh:function(){return g},W$:function(){return S},Xj:function(){return O},cg:function(){return C},eV:function(){return b},g:function(){return y},pT:function(){return I},zy:function(){return T}});var a=r(74219),n=r(96046),i=r(4376),o=r(99696),s=r(39857),l=r(94900),u=r(21071),c=r(39446),d=r(98510),p=r(14086),f=r(42743);function m(e){return p.e.MultiSelect(e,f.g1,{description:"For which kinds of units/chains to show the representation visuals."})}let h={unitKinds:m(["atomic","spheres"]),includeParent:p.e.Boolean(!1,{isHidden:!0})},g={...i.K.Params},b={...s.s.Params},y={...l.A.Params},x={...o.w.Params}
7319,S={...n.x.Params},T={...u.x.Params},C={...a.A.Params},O={...c.q.Params},I={...d.Ee.Params}},84894:function(e,t,r){r.d(t,{U_:function(){return o},Xz:function(){return s},kV:function(){return i.k},sh:function(){return n.s}});var a=r(7791),n=r(23579);r(43091);var i=r(45978);r(31745);let o={create:()=>({...a.hX.createState(),unitTransforms:null,unitTransformsVersion:-1}),update:(e,t)=>{a.hX.updateState(e,t),void 0!==t.unitTransforms&&(e.unitTransforms=t.unitTransforms)}};function s(e){return e}},45978:function(e,t,r){r.d(t,{k:function(){return O}});var a=r(14086),n=r(84894),i=r(7791),o=r(30502),s=r(89987),l=r(67241),u=r(60843),c=r(54854),d=r(67589),p=r(99289),f=r(30481),m=r(65109),h=r(87144),g=r(34526),b=r(1813),y=r(5909),x=r(37792);class S{set(e,t){let r=this.hashCode(e),a=this.buckets.get(r);a||(a=[],this.buckets.set(r,a));for(let r=0;r<a.length;r++)if(this.areEqual(a[r].key,e)){a[r].value=t;return}a.push({key:e,value:t})}get(e){let t=this.hashCode(e),r=this.buckets.get(t);if(r){for(let t of r)if(this.areEqual(t.key,e))return t.value}}delete(e){let t=this.hashCode(e),r=this.buckets.get(t);if(!r)return!1;for(let a=0;a<r.length;a++)if(this.areEqual(r[a].key,e))return r.splice(a,1),0===r.length&&this.buckets.delete(t),!0;return!1}forEach(e){for(let t of this.buckets.values())for(let r of t)e(r.value,r.key)}clear(){this.buckets.clear()}constructor(e,t){this.hashCode=e,this.areEqual=t,this.buckets=new Map}}var T=r(69062);function C(){return new S(e=>(0,T.TO)(e.hashCode,e.transformHash),o.Unit.SymmetryGroup.areInvariantElementsEqual)}function O(e,t,r,S){let T,O,I,A,w=0,{webgl:D}=t,E=new s.x,M=(0,l.xH)(),P=[],k=new i.hX.GeometryState,B=n.U_.create(),_=C(),R=u.Q.createEmpty();function F(e,t,r){let{visible:a,alphaFactor:n,pickable:i,overpaint:o,transparency:s,emissive:l,substance:u,clipping:c,themeStrength:d,transform:p,unitTransforms:f}=r;void 0!==a&&e.setVisibility(a),void 0!==n&&e.setAlphaFactor(n),void 0!==i&&e.setPickable(i),void 0!==o&&e.setOverpaint(o,D),void 0!==s&&e.setTransparency(s,D),void 0!==l&&e.setEmissive(l,D),void 0!==u&&e.setSubstance(u,D),void 0!==c&&e.setClipping(c),void 0!==d&&e.setThemeStrength(d),void 0===p||p===B.transform&&h.yb.areEqual(p,B.transform,h.Ib)||e.setTransform(p),void 0!==f&&(f?e.setTransform(void 0,f.getSymmetryGroupTransforms(t)):f!==B.unitTransforms&&e.setTransform(void 0,null))}return{label:e,get groupCount(){let e=0;return _.forEach(({visual:t})=>{t.renderObject&&(e+=t.groupCount)}),e},get geometryVersion(){return k.version},get props(){return A},get params(){return I},get state(){return B},get theme(){return R},renderObjects:P,updated:E,createOrUpdate:function(e={},n){return n&&n!==T&&(I=r(t,n),A||(A=a.e.getDefaultValues(I))),A=Object.assign({},A,e),c.iQ.create("Creating or updating UnitsRepresentation",async e=>{var r,a,i;if(T||n){if(n&&!T){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);for(let t=0;t<O.length;t++){let r=O[t],a=S(M,n,A,D),i=a.createOrUpdate({webgl:D,runtime:e},R,A,{group:r,structure:n});i&&await i,F(a,r,B),_.set(r,{visual:a,group:r}),e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:t,max:O.length})}}else if(n&&(!o.Structure.areUnitIdsAndIndicesEqual(n,T)||n.child!==T.child)){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);let t=_;_=C();for(let a=0;a<O.length;a++){let i=O[a],o=t.get(i);if(o){let{visual:a}=o;if(null===(r=a.mustRecreate)||void 0===r?void 0:r.call(a,{group:i,structure:n},A,D)){a.destroy();let t=(a=S(M,n,A,D)).createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t,F(a,i,B)}else{let t=a.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t}if(_.set(i,{visual:a,group:i}),t.delete(i),a.renderObject){let e=a.renderObject.values.tMarker.ref.value.array;(0,p.O9)(e,g.Xp.ofBounds(0,e.length),p.dd.RemoveHighlight)}}else{let t=S(M,n,A,D),r=t.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});r&&await r,F(t,i,B),_.set(i,{visual:t,group:i})}e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:a,max:O.length})}t.forEach(({visual:e})=>{e.destroy()})}else if(n&&n!==T&&o.Structure.areUnitIdsAndIndicesEqual(n,T)){O=o.StructureSymmetry.computeChildAwareTransformGroups(n);for(let r=0;r<O.length;r++){let i=O[r],o=_.get(i);if(o){let{visual:r}=o;if(null===(a=r.mustRecreate)||void 0===a?void 0:a.call(r,{group:i,structure:n},A,t.webgl)){r.destroy(),r=S(M,n,A,t.webgl),o.visual=r;let a=r.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});a&&await a,F(r,i,B)}else{let t=r.createOrUpdate({webgl:D,runtime:e},R,A,{group:i,structure:n});t&&await t}o.group=i}else throw Error(`expected to find visual for hashCode ${i.hashCode}`);e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:r,max:O.length})}}else{let r=[];
7319_.forEach(e=>r.push(e));for(let a=0,n=r.length;a<n;++a){let{visual:o,group:s}=r[a];if(null===(i=o.mustRecreate)||void 0===i?void 0:i.call(o,{group:s,structure:T},A,t.webgl)){o.destroy(),o=S(M,T,A,D),r[a].visual=o;let t=o.createOrUpdate({webgl:D,runtime:e},R,A,{group:s,structure:T});t&&await t,F(o,s,B)}else{let t=o.createOrUpdate({webgl:D,runtime:e},R,A);t&&await t}e.shouldUpdate&&await e.update({message:"Creating or updating UnitsVisual",current:a,max:n})}}}else throw Error("missing structure");P.length=0,_.forEach(({visual:e})=>{e.renderObject&&(P.push(e.renderObject),k.add(e.renderObject.id,e.geometryVersion))}),k.snapshot(),n&&(T=n),E.next(w++)})},setState:function(e){let{visible:t,alphaFactor:r,pickable:a,overpaint:i,transparency:o,emissive:s,substance:l,clipping:u,themeStrength:c,transform:d,unitTransforms:p,syncManually:g,markerActions:S}=e,C={};void 0!==t&&(C.visible=t),void 0!==r&&(C.alphaFactor=r),void 0!==a&&(C.pickable=a),void 0!==i&&T&&(C.overpaint=f.k.remap(i,T)),void 0!==o&&T&&(C.transparency=m.i.remap(o,T)),void 0!==s&&T&&(C.emissive=x.i.remap(s,T)),void 0!==l&&T&&(C.substance=y.A.remap(l,T)),void 0!==u&&T&&(C.clipping=b.z.remap(u,T)),void 0!==c&&(C.themeStrength=c),void 0===d||h.yb.areEqual(d,B.transform,h.Ib)||(C.transform=d),(p!==B.unitTransforms||(null==p?void 0:p.version)!==B.unitTransformsVersion)&&(C.unitTransforms=p,B.unitTransformsVersion=p?null==p?void 0:p.version:-1),void 0!==g&&(C.syncManually=g),void 0!==S&&(C.markerActions=S),_.forEach(({visual:e,group:t})=>F(e,t,C)),n.U_.update(B,C)},setTheme:function(e){R=e},getLoci:function(e){let t=d.Rh;return _.forEach(({visual:r})=>{let a=r.getLoci(e);(0,d.jF)(a)||(t=a)}),t},getAllLoci:function(){var e;return[o.Structure.Loci(null!==(e=T.child)&&void 0!==e?e:T)]},eachLocation:function(e){_.forEach(({visual:t})=>{t.eachLocation(e)})},mark:function(e,t){if(!T||!p.E5.is(B.markerActions,t))return!1;if(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)||o.Bond.isLoci(e)){if(!o.Structure.areRootsEquivalent(e.structure,T))return!1;e=d.o_.remap(e,T),(o.Structure.isLoci(e)||o.StructureElement.Loci.is(e)&&o.StructureElement.Loci.isWholeStructure(e))&&(e=d.GK)}else if(!(0,d.h)(e)&&!(0,d.dh)(e))return!1;if(d.o_.isEmpty(e))return!1;let r=!1;return _.forEach(({visual:a})=>{r=a.mark(e,t)||r}),r},destroy:function(){_.forEach(({visual:e})=>e.destroy()),_.clear()}}}},31745:function(e,t,r){r.d(t,{FH:function(){return _},FL:function(){return N},Gk:function(){return G},PO:function(){return M},Pf:function(){return F},UJ:function(){return P},Uo:function(){return V},V5:function(){return B},VX:function(){return L},Vu:function(){return z},ml:function(){return U},nz:function(){return k},qf:function(){return R},v4:function(){return j}});var a=r(30502),n=r(30131),i=r(11803),o=r(60843),s=r(42743),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85688),m=r(99289),h=r(85764),g=r(17411),b=r(69587),y=r(4376),x=r(7305),S=r(39857),T=r(94900),C=r(99696),O=r(96046);r(21071);var I=r(74219),A=r(39446);r(98510);var w=r(25945),D=r(97667);function E(e,t){let r,y,S,T,C,O,I,A;let{defaultProps:w,createGeometry:E,createLocationIterator:M,getLoci:P,eachLocation:k,setUpdateState:B,initUpdateState:_,mustRecreate:R,processValues:F,dispose:L}=e,{createEmpty:z,updateValues:N,updateBoundingSphere:G,updateRenderableState:U,createPositionIterator:V}=e.geometryUtils,j=d.wV.create(),H={loci:u.Rh,action:m.dd.None,status:-1},q=Object.assign({},w),X=o.Q.createEmpty(),W=-1;function K(e){if(j.createNew){if(I=M(y,q),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=(0,s.yT)(e,n.includeParent,t.boundingSphere,n.cellSize,n.batchSize),p=u(t,d,r,a,n),f=c(n);return(0,l.Hq)(t.kind,p,f,o)}(y,e,I,X,q,t),A=V(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((j.updateColor||j.updateSize||j.updateTransform)&&(I=M(y,q)),j.updateTransform){let{instanceCount:e,groupCount:t}=I;q.instanceGranularity?(0,f.eL)(e,"instance",r.values):(0,f.eL)(e*t,"groupInstance",r.values)}if(j.updateMatrix&&((0,s.yT)(y,q.includeParent,(null==e?void 0:e.boundingSphere)||r.values.invariantBoundingSphere.ref.value,q.cellSize,q.batchSize,r.values),"lodLevels"in r.values&&h.IO.update(r.values.lodLevels,r.values.lodLevels.ref.value)),j.createGeometry){if(e)h.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),h.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),h.IO.updateIfChanged(r.values.uGroupCount,I.groupCount);else throw Error("expected geometry to be given")}(j.updateTransform||j.createGeometry)&&(G(r.values,e||O),A=V(e||O,r.values)),j.updateSize&&"uSize"in r.values&&(0,g.H4)(I,A,X.size,r.values),j.updateColor&&(0,b.is)(I,A,X.color,r.values),N(r.values,q),U(r.state,q)}S=q,T=X,C=y,e&&(O=e,W+=1)}function Q(e,t,r){return((0,u.h)(e)||a.Structure.isLoci(e)&&a.Structure.areRootsEquivalent(e.structure,C.structure)||a.StructureElement.Loci.is(e)&&a.Structure.areRootsEquivalent(e.structure,C.structure)&&a.StructureElement.Loci.isWholeStructure(e)?0:1)?S.instanceGranularity?function(e,t,r){let n=!1;if(a.Bond.isLoci(e)){let{structure:i,group:o}=t;if(!a.Structure.areEquivalent(e.structure,i))return!1;for(let t of e.bonds){if(t.aUnit!==t.bUnit)continue;let e=o.unitIndexMap.get(t.aUnit.id);void 0!==e&&r(c.Xp.ofSingleton(e))&&(n=!0)}}else if(a.StructureElement.Loci.is(e)){let{structure:i,group:o}=t;if(!a.Structure.areEquivalent(e.structure,i))return!1;for(let t of e.elements){let e=o.unitIndexMap.get(t.unit.id);void 0!==e&&r(c.Xp.ofSingleton(e))&&(n=!0)}}return n}(e,C,t):k(e,C,t,r):t(S.instanceGranularity?c.Xp.ofBounds(0,I.instanceCount):c.Xp.ofBounds(0,I.groupCount*I.instanceCount))}function Z(e){r&&(null==F||F(r.values,O,S,T,e.webgl))}return{get groupCount(){return I?I.count:0},get renderObject(){return I&&I.count?r:void 0},get geometryVersion(){return W},createOrUpdate(e,t,n,i){if(!function(e,t,n){if(!n&&!C)throw Error("missing structureGroup");if(q=t,X=e,y=n,d.wV.reset(j),!r||!C){null==_||_(j,q,X,y),j.createNew=!0,j.createGeometry=!0;return}B(j,q,S,X,T,y,C),a.Structure.areHierarchiesEqual(C.structure,y.structure)||(j.updateTransform=!0,j.updateColor=!0,j.updateSize=!0),p.U.areEqual(X.color,T.color)||(j.updateColor=!0),x.k.areEqual(X.size,T.size)||(j.updateSize=!0),C.structure.child!==y.structure.child&&(j.createGeometry=!0,j.updateTransform=!0),(q.instanceGranularity!==S.instanceGranularity||q.cellSize!==S.cellSize||q.batchSize!==S.batchSize)&&(j.updateTransform=!0),(0,h.vZ)(q.unitKinds,S.unitKinds)||(j.createGeometry=!0),y.group.transformHash!==C.group.transformHash&&(y.group.units.length!==C.group.units.length||j.updateColor?j.updateTransform=!0:j.updateMatrix=!0);let i=y.group.units[0],o=C.group.units[0];a.Unit.areOperatorsEqual(i,o)||(j.updateTransform=!0),a.Unit.areConformationsEqual(i,o)||(j.createGeometry=!0),j.updateTransform&&(j.updateMatrix=!0),!j.updateSize||"uSize"in r.values||(j.createGeometry=!0),(j.createGeometry||j.updateTransform)&&(C.structure.hashCode!==y.structure.hashCode&&(j.updateColor=!0,j.updateSize=!0),(X.color.granularity.startsWith("vertex")||r.values.dColorType.ref.value.startsWith("vertex")||X.color.granularity.startsWith("volume")||r.values.dColorType.ref.value.startsWith("volume"))&&(j.updateColor=!0))}
7319(t,n,i||C),j.createGeometry){var o,l,u,c,f;let t=(o=y.group.units[0],l=y.structure,u=X,c=q,f=O,(0,s.GC)(c.unitKinds,o)?E(e,o,l,u,c,f):z(f));if((0,D.y8)(t))return t.then(t=>{K(t),Z(e)});K(t)}else K();Z(e)},getLoci:e=>r?P(e,C,r.id):u.Rh,eachLocation(e){for(I.reset();I.hasNext;){let{location:t,isSecondary:r}=I.move();e(t,r)}},mark(e,t){let i=!0;if(a.StructureElement.Loci.is(e)){i=!1;let{invariantId:t}=C.group.units[0];for(let r of e.elements)if(r.unit.invariantId===t){i=!0;break}}return!!i&&n.u.mark(r,e,t,Q,H)},setVisibility(e){n.u.setVisibility(r,e)},setAlphaFactor(e){n.u.setAlphaFactor(r,e)},setPickable(e){n.u.setPickable(r,e)},setColorOnly(e){n.u.setColorOnly(r,e)},setTransform(e,t){n.u.setTransform(r,e,t)},setOverpaint(e,t){let a={geometry:O,props:S,webgl:t};n.u.setOverpaint(r,e,Q,!0,a)},setTransparency(e,t){let a={geometry:O,props:S,webgl:t};n.u.setTransparency(r,e,Q,!0,a)},setEmissive(e,t){let a={geometry:O,props:S,webgl:t};n.u.setEmissive(r,e,Q,!0,a)},setSubstance(e,t){let a={geometry:O,props:S,webgl:t};n.u.setSubstance(r,e,Q,!0,a)},setClipping(e){n.u.setClipping(r,e,Q,!0)},setThemeStrength(e){n.u.setThemeStrength(r,e)},destroy(){null==L||L(O),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:R}}let M={...w.Vh,...w.QN};function P(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:y.K.Utils},t)}let k={...w.eV,...w.QN};function B(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:S.s.Utils},t)}let _={...w.g,...w.QN};function R(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:T.A.Utils},t)}let F={...w.N5,...w.QN};function L(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:C.w.Utils},t)}let z={...w.W$,...w.QN};function N(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.updateSize=!0)},geometryUtils:O.x.Utils},t)}({...w.zy,...w.QN});let G={...w.cg,...w.QN};function U(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:I.A.Utils},t)}let V={...w.Xj,...w.QN};function j(e,t){return E({...e,setUpdateState:(t,r,a,n,i,o,s)=>{e.setUpdateState(t,r,a,n,i,o,s),x.k.areEqual(n.size,i.size)||(t.createGeometry=!0)},geometryUtils:A.q.Utils},t)}({...w.pT,...w.QN})},42743:function(e,t,r){r.d(t,{GC:function(){return A},Gs:function(){return E},Js:function(){return x},MI:function(){return B},Q4:function(){return D},QE:function(){return F},SI:function(){return k},ZL:function(){return S},aL:function(){return b},g1:function(){return I},mK:function(){return w},mV:function(){return C},oy:function(){return R},uo:function(){return T},yT:function(){return O}});var a=r(30502),n=r(87144),i=r(41306),o=r(34526),s=r(67589),l=r(53478),u=r(36111),c=r(14086),d=r(89615),p=r(48930),f=r(24407),m=r(48502);let h=n.yb.toArray,g=!1;function b(e){if(e){if(e.extensions.fragDepth&&e.extensions.textureFloat)return!0;if(m.Au&&!g){let t=[];e.extensions.fragDepth||t.push("fragDepth"),e.extensions.textureFloat||t.push("textureFloat"),console.warn(`Missing "${t.join('", "')}" extensions required for "sphere impostors". Falling back to "sphere mesh".`),g=!0}}else m.Au&&!g&&(console.warn('WebGL required for "sphere impostors". Falling back to "sphere mesh".'),g=!0);return!1}let y=!1;function x(e){if(e){if(e.extensions.fragDepth)return!0;if(m.Au&&!y){let t=[];e.extensions.fragDepth||t.push("fragDepth"),console.warn(`Missing "${t.join('", "')}" extensions required for "cylinder impostors". Falling back to "cylinder mesh".`),y=!0}}else m.Au&&!y&&(console.warn('WebGL required for "cylinder impostors". Falling back to "cylinder mesh".'),y=!0);return!1}function S(e,t,r){let{elements:n,model:i}=t;if(-1!==o.hU.indexOf(n,r)){let{index:s,offsets:l}=i.atomicHierarchy.residueAtomSegments,u=s[r],c=[];for(let e=l[u],t=l[u+1];e<t;++e){let t=o.hU.indexOf(n,e);-1!==t&&c.push(t)}let d=o.hU.ofSortedArray(o.SortedArray.ofSortedArray(c));return a.StructureElement.Loci(e,[{unit:t,indices:d}])}return s.Rh}function T(e,t,r){let{elements:n,model:i}=t,{label_alt_id:s}=i.atomicHierarchy.atoms,l=s.value(r);if(-1!==o.hU.indexOf(n,r)){let{index:a}=i.atomicHierarchy.residueAtomSegments;return C(e,t,a[r],l)}return a.StructureElement.Loci(e,[])}function C(e,t,r,n){let{elements:i,model:s}=t,{label_alt_id:l}=s.atomicHierarchy.atoms,{offsets:u}=s.atomicHierarchy.residueAtomSegments,c=[];for(let e=u[r],t=u[r+1];e<t;++e){let t=o.hU.indexOf(i,e);if(-1!==t){let r=l.value(e);(n===r||""===r)&&c.push(t)}}let d=o.hU.ofSortedArray(o.SortedArray.ofSortedArray(c));return a.StructureElement.Loci(e,[{unit:t,indices:d}])}function O(e,t,r,a,n,o){let{child:s}=e.structure,l=t&&s?e.group.units.filter(e=>s.unitMap.has(e.id)):e.group.units,u=l.length,c=16*u,d=o&&o.aTransform.ref.value.length>=c?o.aTransform.ref.value:new Float32Array(c);for(let e=0;e<u;e++)h(l[e].conformation.operator.matrix,d,16*e);return(0,i.pH)(d,u,r,a,n,o)}let I=c.e.objectToOptions({atomic:{},spheres:{},gaussians:{}});function A(e,t){for(let r=0,n=e.length;r<n;++r)if(a.Unit.isAtomic(t)&&"atomic"===e[r]||a.Unit.isSpheres(t)&&"spheres"===e[r]||a.Unit.isGaussians(t)&&"gaussians"===e[r])return!0;return!1}function w(e,t,r=5e8){let a=p.XZ.size((0,n.AO)(),e);n.AO.ceil(a,a),a.sort((e,t)=>
7319t-e);let i=Math.floor(Math.cbrt(r)*Math.cbrt(r)),o=a[0]*a[1],s=Math.ceil(o/(t*t));return{area:o,areaCells:s,maxAreaCells:i}}function D(e,t,r=5e8){let{area:a,areaCells:n,maxAreaCells:i}=w(e,t.resolution,r),o=n>i?Math.sqrt(a/i):t.resolution;return{...t,resolution:o}}let E={ignoreHydrogens:c.e.Boolean(!1,{description:"Whether or not to include hydrogen atoms in the surface calculation."}),ignoreHydrogensVariant:c.e.Select("all",c.e.arrayToOptions(["all","non-polar"])),traceOnly:c.e.Boolean(!1,{description:"Whether or not to only use trace atoms in the surface calculation."}),includeParent:c.e.Boolean(!1,{description:"Include elements of the parent structure in surface calculation to get a surface patch of the current structure. Note that this disables GPU support."})};c.e.getDefaultValues(E);let M=(0,n.AO)();function P(e,t,r,a){return n.AO.squaredDistance(n.AO.set(M,e,t,r),a)}function k(e,t,r,n){let i,s;let{ignoreHydrogens:l,ignoreHydrogensVariant:c,traceOnly:p,includeParent:f}=n,m=f?e.root.unitMap.get(t.id):t,h=f&&m!==t,{x:g,y:b,z:y}=function(e){switch(e.kind){case a.Unit.Kind.Atomic:return e.model.atomicConformation;case a.Unit.Kind.Spheres:return e.model.coarseConformation.spheres;case a.Unit.Kind.Gaussians:return e.model.coarseConformation.gaussians}}(m),{elements:x}=m,{center:S,radius:T}=t.boundary.sphere,C=(T+11)*(T+11);if(l||p||h){let t=[],r=[];for(let a=0,n=x.length;a<n;++a){let n=x[a];!(l&&R(e,m,n,c))&&(!p||F(m,n))&&(h&&P(g[n],b[n],y[n],S)>C||(t.push(n),r.push(a)))}i=o.SortedArray.ofSortedArray(t),s=r}else i=x,s=(0,u.d_)(new Int32Array(i.length));f&&m!==t&&function(e,t,r){let a=0,n=t.length;for(let i=0,s=r.length;i<s;++i){let s=o.SortedArray.indexOfInRange(t,r[i],a,n);-1===s?e[i]=-2:(e[i]=s,a=s)}}(s,t.elements,i);let O={indices:i,x:g,y:b,z:y,id:s},I=h?(0,d.z)(O):t.boundary,A=a.StructureElement.Location.create(e,m);return{position:O,boundary:I,radius:e=>(A.element=e,r.size(A))}}function B(e,t,r){let n,i,s,l,c,p;let{ignoreHydrogens:f,ignoreHydrogensVariant:m,traceOnly:h,includeParent:g}=r,b=g&&!!e.parent,y=a.StructureElement.Location.create(e.root),{center:x,radius:S}=e.boundary.sphere,T=(S+11)*(S+11);if(f||h||b){let{getSerialIndex:r}=e.serialMapping,a=b?e.root.units:e.units,u=[],d=[],g=[],S=[],C=[];for(let n=0,i=a.length;n<i;++n){let i=a[n],{elements:s,conformation:l}=i,c=e.unitMap.get(i.id);y.unit=i;for(let a=0,n=s.length;a<n;++a){let n=s[a];if(f&&R(e,i,n,m)||h&&!F(i,n))continue;let p=l.x(n),O=l.y(n),I=l.z(n);b&&P(p,O,I,x)>T||(u.push(p),d.push(O),g.push(I),y.element=n,S.push(t.size(y)),b?-1===(c?o.SortedArray.indexOf(c.elements,n):-1)?C.push(-2):C.push(r(c,n)):C.push(r(i,n)))}}n=u,i=d,s=g,l=S,c=C,p=o.hU.ofRange(0,c.length)}else{let{elementCount:r}=e,a=new Float32Array(r),d=new Float32Array(r),f=new Float32Array(r),m=new Float32Array(r);for(let r=0,n=0,i=e.units.length;r<i;++r){let i=e.units[r],{elements:o,conformation:s}=i;y.unit=i;for(let e=0,r=o.length;e<r;++e){let r=o[e],i=n+e;a[i]=s.x(r),d[i]=s.y(r),f[i]=s.z(r),y.element=r,m[i]=t.size(y)}n+=o.length}n=a,i=d,s=f,l=m,c=(0,u.d_)(new Uint32Array(r)),p=o.hU.ofRange(0,c.length)}let C={indices:p,x:n,y:i,z:s,id:c},O=b?(0,d.z)(C):e.boundary;return{position:C,boundary:O,radius:e=>l[e]}}let _=l.dZ.H;function R(e,t,r,n){if(a.Unit.isCoarse(t)||t.model.atomicHierarchy.derived.atom.atomicNumber[r]!==_)return!1;if("all"===n)return!0;let i=(0,f.DN)(e,t,o.SortedArray.indexOf(t.elements,r));return!!i&&"polar"===n||!i&&"non-polar"===n}function F(e,t){if(a.Unit.isCoarse(e))return!0;let r=e.model.atomicHierarchy.atoms.label_atom_id.value(t);return"CA"===r||"BB"===r||"P"===r}},84889:function(e,t,r){r.d(t,{Bj:function(){return b},Mx:function(){return k},V7:function(){return B},Vj:function(){return g},fV:function(){return M},uj:function(){return n},ym:function(){return O}});var a,n,i=r(87144),o=r(14086),s=r(4376),l=r(89623),u=r(84785),c=r(54185),d=r(96046),p=r(13070),f=r(94900),m=r(51858),h=r(30441);let g={linkScale:o.e.Numeric(.45,{min:0,max:1,step:.01}),linkSpacing:o.e.Numeric(1,{min:0,max:2,step:.01}),linkCap:o.e.Boolean(!1),aromaticScale:o.e.Numeric(.3,{min:0,max:1,step:.01}),aromaticSpacing:o.e.Numeric(1.5,{min:0,max:3,step:.01}),aromaticDashCount:o.e.Numeric(2,{min:1,max:6,step:1}),dashCount:o.e.Numeric(4,{min:0,max:10,step:1}),dashScale:o.e.Numeric(.8,{min:0,max:2,step:.1}),dashCap:o.e.Boolean(!0),stubCap:o.e.Boolean(!0),radialSegments:o.e.Numeric(16,{min:2,max:56,step:2},c.ev.CustomQualityParamInfo),colorMode:o.e.Select("default",o.e.arrayToOptions(["default","interpolate"]),c.ev.ShadingCategory)};o.e.getDefaultValues(g);let b={linkScale:o.e.Numeric(.5,{min:0,max:1,step:.1}),linkSpacing:o.e.Numeric(.1,{min:0,max:2,step:.01}),aromaticDashCount:o.e.Numeric(2,{min:1,max:6,step:1}),dashCount:o.e.Numeric(4,{min:0,max:10,step:1})};o.e.getDefaultValues(b);let y=(0,i.AO)(),x=(0,i.AO)(),S=(0,i.AO)(),T=i.AO.create(0,1,0);function C(e,t,r,a){i.AO.normalize(x,i.AO.sub(x,t,r)),null!==a?i.AO.sub(S,t,a):i.AO.copy(S,t),i.AO.normalize(S,S);let n=i.AO.dot(x,S);return 1-Math.abs(n)<1e-5&&(i.AO.set(S,1,0,0),1-Math.abs(n=i.AO.dot(x,S))<1e-5&&(i.AO.set(S,0,1,0),n=i.AO.dot(x,S))),i.AO.setMagnitude(x,x,n),i.AO.sub(S,S,x),i.AO.n
7319ormalize(e,S)}let O={linkCount:0,position:()=>{},radius:()=>0};(a=n||(n={}))[a.Solid=0]="Solid",a[a.Dashed=1]="Dashed",a[a.Double=2]="Double",a[a.OffsetDouble=3]="OffsetDouble",a[a.Triple=4]="Triple",a[a.OffsetTriple=5]="OffsetTriple",a[a.Disk=6]="Disk",a[a.Aromatic=7]="Aromatic",a[a.MirroredAromatic=8]="MirroredAromatic";let I=i.AO.scale,A=i.AO.add,w=i.AO.sub,D=i.AO.setMagnitude,E=i.AO.dot;function M(e,t,r,a){let{linkCount:o,referencePosition:c,position:d,style:p,radius:f,ignore:m,stub:g}=t;if(!o)return{mesh:s.K.createEmpty(a)};let{radialSegments:b,stubCap:x}=r,S=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,O=2*b*o*2,M=l.V.createState(O,O/4,a),k=(0,i.AO)(),B=0,_=0,R={builderState:M,props:r,assignNonAdjustedPosition:(e,t)=>{d(e,t,_,!1)},referencePosition:c?()=>c(_):void 0},F={a:(0,i.AO)(),b:(0,i.AO)(),group:0,linkStub:!1,linkStyle:n.Solid,linkRadius:0};for(;_<o;++_)m&&m(_)||(d(F.a,F.b,_,!0),A(k,k,F.a),A(k,k,F.b),B+=2,F.group=_,F.linkStub=x&&!!g&&g(_),F.linkRadius=f(_),F.linkStyle=p?p(_):n.Solid,function(e,t){let{builderState:r,props:a,assignNonAdjustedPosition:o,referencePosition:s}=e,{linkRadius:l,linkStub:c,linkStyle:d,a:p,b:f}=t,{linkScale:m,linkSpacing:h,radialSegments:g,linkCap:b,aromaticScale:x,aromaticSpacing:S,aromaticDashCount:O,dashCount:M,dashScale:k,dashCap:B}=a,{cylinderProps:_,vShift:R,va:F,vb:L}=P;_.radialSegments=g,i.AO.copy(F,p),i.AO.copy(L,f),w(y,L,F);let z=E(y,T)>0,[N,G]=z?[c,b]:[b,c];if(r.currentGroup=t.group,d===n.Solid)_.radiusTop=_.radiusBottom=l,_.topCap=N,_.bottomCap=G,(0,u.vA)(r,F,L,.5,_);else if(d===n.Dashed)_.radiusTop=_.radiusBottom=l*k,_.topCap=_.bottomCap=B,(0,u.OA)(r,F,L,.5,M,c,_);else if(d===n.Double||d===n.OffsetDouble||d===n.Triple||d===n.OffsetTriple||d===n.Aromatic||d===n.MirroredAromatic){let e=d===n.Double||d===n.OffsetDouble?2:d===n.Triple||d===n.OffsetTriple?3:1.5,t=m/(.5*e)*l,a=(l-t)*h;if(C(R,F,L,s?s():null),_.topCap=N,_.bottomCap=G,d===n.Aromatic||d===n.MirroredAromatic){_.radiusTop=_.radiusBottom=l,(0,u.vA)(r,F,L,.5,_);let e=l+x*l+x*l*S;o&&o(F,L),D(y,w(y,L,F),.5*l),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=l*x,_.topCap=_.bottomCap=B,D(R,R,e),w(F,F,R),w(L,L,R),(0,u.OA)(r,F,L,.5,O,c,_),d===n.MirroredAromatic&&(D(R,R,2*e),A(F,F,R),A(L,L,R),(0,u.OA)(r,F,L,.5,O,c,_))}else if(d===n.OffsetDouble||d===n.OffsetTriple){let a=l+t+m*l*h;D(R,R,a),_.radiusTop=_.radiusBottom=l,(0,u.vA)(r,F,L,.5,_),I(y,y,h*m*.2),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=t,_.topCap=z?c:B,_.bottomCap=z?B:c,D(R,R,a),w(F,F,R),w(L,L,R),(0,u.vA)(r,F,L,.5,_),3===e&&(D(R,R,2*a),A(F,F,R),A(L,L,R),(0,u.vA)(r,F,L,.5,_))}else D(R,R,a),_.radiusTop=_.radiusBottom=t,3===e&&(0,u.vA)(r,F,L,.5,_),(0,u.ZI)(r,F,L,.5,R,_)}else d===n.Disk&&(I(y,y,.475),A(F,F,y),w(L,L,y),_.radiusTop=_.radiusBottom=l,_.topCap=N,_.bottomCap=G,(0,u.vA)(r,F,L,.5,_))}(R,F));let L=l.V.getMesh(M);return 0===B?{mesh:L}:(i.AO.scale(k,k,1/B),S&&i.AO.distance(k,S.center)/S.radius<.1)?{mesh:L,boundingSphere:S}:{mesh:L}}let P={cylinderProps:{radiusTop:1,radiusBottom:1,radialSegments:8,topCap:!1,bottomCap:!1},vShift:(0,i.AO)(),va:(0,i.AO)(),vb:(0,i.AO)()};function k(e,t,r,a){let{linkCount:o,referencePosition:s,position:l,style:u,radius:c,ignore:d,stub:p}=t;if(!o)return{cylinders:f.A.createEmpty(a)};let{linkScale:g,linkSpacing:b,linkCap:x,aromaticScale:S,aromaticSpacing:T,aromaticDashCount:O,dashCount:E,dashScale:M,dashCap:P,stubCap:k,colorMode:B}=r,_="interpolate"===B,R=!0===_?3:2,F=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,L=2*o,z=m.B.create(L,L/4,a),N=(0,i.AO)(),G=(0,i.AO)(),U=(0,i.AO)(),V=(0,i.AO)(),j=(0,i.AO)(),H=0;for(let e=0;e<o;++e){if(d&&d(e))continue;l(N,G,e,!0),A(j,j,N),A(j,j,G),H+=2;let t=c(e),r=u?u(e):n.Solid,a=k&&!!p&&p(e);if(r===n.Solid)I(U,A(U,N,G),.5),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e);else if(r===n.Dashed)I(U,A(U,N,G),.5),z.addFixedCountDashes(N,U,E,M,P,P,a,_,e);else if(r===n.Double||r===n.OffsetDouble||r===n.Triple||r===n.OffsetTriple||r===n.Aromatic||r===n.MirroredAromatic){let i=r===n.Double||r===n.OffsetDouble?2:r===n.Triple||r===n.OffsetTriple?3:1.5,o=g/(.5*i),u=(t-o*t)*b;if(I(U,A(U,N,G),.5),C(V,N,G,s?s(e):null),r===n.Aromatic||r===n.MirroredAromatic){z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e);let i=t+S*t+S*t*T;l(N,G,e,!1),D(y,w(y,G,N),.5*t),A(N,N,y),D(V,V,i),w(N,N,V),w(U,U,V),z.addFixedCountDashes(N,U,O,S,P,P,a,_,e),r===n.MirroredAromatic&&(D(V,V,2*i),A(N,N,V),A(U,U,V),z.addFixedCountDashes(N,U,O,S,P,P,a,_,e))}else r===n.OffsetDouble||r===n.OffsetTriple?(D(V,V,t+o*t+g*t*b),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e),D(y,w(y,N,U),t/1.5),w(N,N,y),3===i&&z.add(N[0]+V[0],N[1]+V[1],N[2]+V[2],U[0]+V[0],U[1]+V[1],U[2]+V[2],o,x,a,R,e),z.add(N[0]-V[0],N[1]-V[1],N[2]-V[2],U[0]-V[0],U[1]-V[1],U[2]-V[2],o,P,a,R,e)):(D(V,V,u),3===i&&z.add(N[0],N[1],N[2],U[0],U[1],U[2],o,x,a,R,e),z.add(N[0]+V[0],N[1]+V[1],N[2]+V[2],U[0]+V[0],U[1]+V[1],U[2]+V[2],o,x,a,R,e),z.add(N[0]-V[0],N[1]-V[1],N[2]-V[2],U[0]-V[0],U[1]-V[1],U[2]-V[2],o,x,a,R,e))}else r===n.Disk&&(I(y,w(y,U,N),.475),A(N,N,y),w(U,U,y),z.add(N[0],N[1],N[2],U[0],U[1],U[2],1,x,a,R,e))}let q=z.getCylinders();return 0===H?{cylinders:q}:(i.AO.scale(j,j,1/H),F&&i.AO.distance(j,F.center)/F.radius<.1)?{cylinders:q,boundingSphere:F}:{cylinders:q}}function B(e,t,r,a){let{linkCount:o,referencePosition:s,position:l,style:u,ignore:c}=t;if(!o)return{lines:d.x.createEmpty(a)};let{linkScale:f,linkSpacing:m,aromaticDashCount:g,dashCount:b}=r,x=(null==a?void 0:a.hasBoundingSphere())?h.C.clone(a.boundingSphere):void 0,S=2*o,T=p.R.create(S,S/4,a),O=(0,i.AO)(),E=(0,i.AO)(),M=(0,i.AO)(),P=(0,i.AO)(),k=(0,i.AO)(),B=0;for(let e=0;e<o;++e){if(c&&c(e))continue;l(O,E,e,!0),A(k,k,O),A(k,k,E),B+=2;let t=u?u(e):n.Solid;if(t===n.Solid)I(M,A(M,O,E),.5),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e);else if(t===n.Dashed)I(M,A(M,O,E),.5),T.addFixedCountDashes(O,M,b,e);else if(t===n.Double||t===n.OffsetDouble||t===n.Triple||t===n.OffsetTriple||t===n.Aromatic||t===n.MirroredAromatic){let r=t===n.Double||t===n.OffsetDouble?2:t===n.Triple||t===n.OffsetTriple?3:1.5,a=(1-f/(.5*r)*1)*m;if(I(M,A(M,O,E),.5),C(P,O,E,s?s(e):null),t===n.Aromatic||t===n.MirroredAromatic){T.add(O[0],O[1],O[2],M[0],M[1],M[2],e);let r=4.5*a;D(y,w(y,E,O),.5*r),A(O,O,y),D(P,P,r),w(O,O,P),w(M,M,P),T.addFixedCountDashes(O,M,g,e),t===n.MirroredAromatic&&(D(P,P,2*r),A(O,O,P),A(M,M,P),T.addFixedCountDashes(O,M,g,e))}else t===n.OffsetDouble||t===n.OffsetTriple?(D(P,P,3*a),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e),I(y,w(y,O,M),m*f),w(O,O,y),3===r&&T.add(O[0]+P[0],O[1]+P[1],O[2]+P[2],M[0]+P[0],M[1]+P[1],M[2]+P[2],e)):(D(P,P,1.5*a),3===r&&T.add(O[0],O[1],O[2],M[0],M[1],M[2],e),T.add(O[0]+P[0],O[1]+P[1],O[2]+P[2],M[0]+P[0],M[1]+P[1],M[2]+P[2],e)),T.add(O[0]-P[0],O[1]-P[1],O[2]-P[2],M[0]-P[0],M[1]-P[1],M[2]-P[2],e)}else t===n.Disk&&(I(y,w(y,M,O),.475),A(O,O,y),w(M,M,y),T.add(O[0],O[1],O[2],M[0],M[1],M[2],e))}let _=T.getLines();return 0===B?{lines:_}:(i.AO.scale(k,k,1/B),x&&i.AO.distance(k,x.center)/x.radius<.1)?{lines:_,boundingSphere:x}:{lines:_}}},11650:function(e,t,r){r.d(t,{Sq:function(){return m},bw:function(){return h},wV:function(){return i}});var a,n,i,o,s=r(85764),l=r(30502),u=r(48930),c=r(5333),d=r(1573),p=r(34052);(a=i||(i={})).create=function(){return{updateTransform:!1,updateMatrix:!1,updateColor:!1,updateSize:!1,updateLocation:!1,createGeometry:!1,createNew:!1,info:{}}},a.reset=function(e){e.updateTransform=!1,e.updateMatrix=!1,e.updateColor=!1,e.updateSize=!1,e.updateLocation=!1,e.createGeometry=!1,e.createNew=!1};let f={lowestElementCount:1e6,lowerElementCount:5e5,lowElementCount:1e5,mediumElementCount:2e4,highElementCount:2e3,coarseGrainedFactor:10,elementCountFactor:1};function m(e,t={}){let r={...f,...t},a=e.elementCount*r.elementCountFactor;
7319return((e.isCoarseGrained||e.isCoarse)&&(a*=r.coarseGrainedFactor),a>r.lowestElementCount)?"lowest":a>r.lowerElementCount?"lower":a>r.lowElementCount?"low":a>r.mediumElementCount?"medium":a>r.highElementCount?"high":"higher"}function h(e,t){let r=(0,s.ce)(e.quality,"auto"),a=(0,s.ce)(e.detail,1),n=(0,s.ce)(e.radialSegments,12),i=(0,s.ce)(e.linearSegments,8),f=(0,s.ce)(e.resolution,2),h=(0,s.ce)(e.imageResolution,1),g=(0,s.ce)(e.probePositions,12),b=(0,s.ce)(e.doubleSided,!0),y=0;if("auto"===r){if(t instanceof l.Structure)r=m(t.root),y=function(e){if(1===e.root.models.length){let t=c.I.Provider.get(e.root.model);if(t&&"P 1"===t.spacegroup.name&&!u.EO.isZero(t.spacegroup.cell))return t.spacegroup.cell.volume}return u.XZ.volume(e.root.boundary.box)}(t);else if(d.f.is(t)){let[e,a,n]=t.grid.cells.space.dimensions;r=(y=e*a*n)<1e7?"medium":"low"}}if("custom"!==r&&"auto"!==r){let e=function(e){switch(e){case"lowest":return o.Lowest;case"lower":return o.Lower;case"low":return o.Low;case"medium":return o.Medium;case"high":return o.High;case"higher":return o.Higher;case"highest":return o.Highest}}(r);switch((0,p.LI)()&&(e=Math.max(e-1,o.Lowest)),e){case o.Highest:a=3,n=36,i=18,f=.1,h=.01,g=72,b=!0;break;case o.Higher:a=3,n=28,i=14,f=.3,h=.05,g=48,b=!0;break;case o.High:a=2,n=20,i=10,f=.5,h=.1,g=36,b=!0;break;case o.Medium:a=1,n=12,i=8,f=.8,h=.2,g=24,b=!0;break;case o.Low:a=0,n=8,i=3,f=1.3,h=.4,g=24,b=!1;break;case o.Lower:a=0,n=4,i=2,f=3,h=.7,g=12,b=!1;break;case o.Lowest:a=0,n=2,i=1,f=8,h=1,g=12,b=!1}}return y>0&&(f=Math.min(f=Math.max(f,y/3e8),20)),"off"===e.transparentBackfaces&&(void 0!==e.alpha&&e.alpha<1||e.xrayShaded)&&(b=!1),{detail:a,radialSegments:n,linearSegments:i,resolution:f,imageResolution:h,probePositions:g,doubleSided:b}}(n=o||(o={}))[n.Lowest=0]="Lowest",n[n.Lower=1]="Lower",n[n.Low=2]="Low",n[n.Medium=3]="Medium",n[n.High=4]="High",n[n.Higher=5]="Higher",n[n.Highe
7319st=6]="Highest"},30131:function(e,t,r){r.d(t,{u:function(){return n}});var a,n,i=r(67589),o=r(99289),s=r(87144),l=r(41306),u=r(62927),c=r(85764),d=r(5514),p=r(97187),f=r(38788),m=r(22444),h=r(85688),g=r(54185),b=r(82471),y=r(94133),x=r(41723),S=r(4249);(a=n||(n={})).setVisibility=function(e,t){e&&(e.state.visible=t)},a.setAlphaFactor=function(e,t){e&&(e.state.alphaFactor=t)},a.setPickable=function(e,t){e&&(e.state.pickable=t)},a.setColorOnly=function(e,t){e&&(e.state.colorOnly=t)},a.mark=function(e,t,r,a,n){if(!e||(0,i.jF)(t))return!1;let{tMarker:s,uMarker:l,markerAverage:u,markerStatus:d,uGroupCount:f,instanceCount:m,instanceGranularity:g}=e.values,b=g.ref.value?m.ref.value:f.ref.value*m.ref.value,{array:y}=s.ref.value,x=d.ref.value;if(!(0,i.h)(t)){let e=0;if(a(t,t=>(e+=p.X.size(t),!0),!0),0===e)return!1;e===b&&(t=i.GK)}let S=!1,T=-1,C=-1;if((0,i.h)(t)){let e=(0,o.Mz)(r,x);-1!==e.status?(S=x!==e.status)&&(0,o.hA)(y,e.status,b):S=(0,o.O9)(y,p.X.ofLength(b),r),T=e.average,C=e.status}else(S=a(t,e=>(0,o.O9)(y,e,r),!0))&&(T=(0,o.sb)(r,x),n&&-1!==n.status&&-1===T&&o.E5.isReverse(n.action,r)&&i.o_.areEqual(t,n.loci)&&(T=0===(C=n.status)?0:.5));return S&&(-1===T&&0===(T=(0,h.pq)(y,b))&&(C=0),n&&(n.action=r,n.loci=t,n.status=x),c.IO.updateIfChanged(l,C),-1===C&&c.IO.update(s,s.ref.value),c.IO.updateIfChanged(u,T),c.IO.updateIfChanged(d,C)),S},a.setOverpaint=function(e,t,r,a,n){if(!e)return;let{tOverpaint:i,dOverpaintType:o,dOverpaint:s,uGroupCount:l,instanceCount:u,instanceGranularity:f}=e.values,m=f.ref.value?u.ref.value:l.ref.value*u.ref.value,h=f.ref.value?"instance":"groupInstance";(0,d.mS)(t.layers.length?m:0,h,e.values);let{array:x}=i.ref.value;a&&(0,d.cr)(x,0,m);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,color:n,clear:i}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return i?(0,d.cr)(x,t,r):(0,d.jp)(x,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(o,h),c.IO.updateIfChanged(s,t.layers.length>0),0!==t.layers.length&&"instance"!==h&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,overpaintTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.hp)(e.values,o,a,i),t.meta.overpaintTexture=e.values.tOverpaintGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,overpaintTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.xp)(e.values,o,a,i),t.meta.overpaintTexture=e.values.tOverpaintGrid.ref.value)}}},a.setTransparency=function(e,t,r,a,n){if(!e)return;let{tTransparency:i,dTransparencyType:o,transparencyAverage:s,transparencyMin:l,dTransparency:u,uGroupCount:d,instanceCount:m,instanceGranularity:h}=e.values,x=h.ref.value?m.ref.value:d.ref.value*m.ref.value,S=h.ref.value?"instance":"groupInstance";(0,f.ei)(t.layers.length?x:0,S,e.values);let{array:T}=i.ref.value;a&&(0,f.gj)(T,0,x);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,value:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,f.r_)(T,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(s,(0,f.iM)(T,x)),c.IO.updateIfChanged(l,(0,f.Bb)(T,x)),c.IO.updateIfChanged(o,S),c.IO.updateIfChanged(u,t.layers.length>0),0!==t.layers.length&&"instance"!==S&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,transparencyTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.FK)(e.values,o,a,i),t.meta.transparencyTexture=e.values.tTransparencyGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,transparencyTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.qZ)(e.values,o,a,i),t.meta.transparencyTexture=e.values.tTransparencyGrid.ref.value)}}},a.setEmissive=function(e,t,r,a,n){if(!e)return;let{tEmissive:i,dEmissiveType:o,emissiveAverage:s,dEmissive:l,uGroupCount:u,instanceCount:d,instanceGranularity:f}=e.values,m=f.ref.value?d.ref.value:u.ref.value*d.ref.value,h=f.ref.value?"instance":"groupInstance";(0,S.BF)(t.layers.length?m:0,h,e.values);let{array:x}=i.ref.value;a&&(0,S.DQ)(x,0,m);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,value:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,S.rF)(x,t,r,n)},!1)}
7319if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(s,(0,S.JQ)(x,m)),c.IO.updateIfChanged(o,h),c.IO.updateIfChanged(l,t.layers.length>0),0!==t.layers.length&&"instance"!==h&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,emissiveTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.EH)(e.values,o,a,i),t.meta.emissiveTexture=e.values.tEmissiveGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,emissiveTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.Pl)(e.values,o,a,i),t.meta.emissiveTexture=e.values.tEmissiveGrid.ref.value)}}},a.setSubstance=function(e,t,r,a,n){if(!e)return;let{tSubstance:i,dSubstanceType:o,dSubstance:s,uGroupCount:l,instanceCount:u,instanceGranularity:d}=e.values,f=d.ref.value?u.ref.value:l.ref.value*u.ref.value,m=d.ref.value?"instance":"groupInstance";(0,x.$l)(t.layers.length?f:0,m,e.values);let{array:h}=i.ref.value;a&&(0,x.fR)(h,0,f);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,material:n,clear:i}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return i?(0,x.fR)(h,t,r):(0,x.wD)(h,t,r,n)},!1)}if(c.IO.update(i,i.ref.value),c.IO.updateIfChanged(o,m),c.IO.updateIfChanged(s,t.layers.length>0),0!==t.layers.length&&"instance"!==m&&n&&(0,g.IH)(n.props)){let{geometry:t,props:r,webgl:a}=n;if("mesh"===t.kind){let{resolution:n,substanceTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,b.Z9)(e.values,o,a,i),t.meta.substanceTexture=e.values.tSubstanceGrid.ref.value)}else if(a&&"texture-mesh"===t.kind){let{resolution:n,substanceTexture:i}=t.meta,o=(0,g.qC)(r.smoothColors,!0,n);o&&((0,y.z6)(e.values,o,a,i),t.meta.substanceTexture=e.values.tSubstanceGrid.ref.value)}}},a.setClipping=function(e,t,r,a){if(!e)return;let{tClipping:n,dClippingType:i,dClipping:o,uGroupCount:s,instanceCount:l,instanceGranularity:u}=e.values,d=u.ref.value?l.ref.value:s.ref.value*l.ref.value,{layers:f}=t,h=u.ref.value?"instance":"groupInstance";(0,m.Q4)(f.length?d:0,h,e.values);let{array:g}=n.ref.value;a&&(0,m.ms)(g,0,d);for(let e=0,a=t.layers.length;e<a;++e){let{loci:a,groups:n}=t.layers[e];r(a,e=>{let t=p.X.start(e),r=p.X.end(e);return(0,m.zr)(g,t,r,n)},!1)}c.IO.update(n,n.ref.value),c.IO.updateIfChanged(i,h),c.IO.updateIfChanged(o,t.layers.length>0)},a.setThemeStrength=function(e,t){e&&(c.IO.updateIfChanged(e.values.uOverpaintStrength,t.overpaint),c.IO.updateIfChanged(e.values.uTransparencyStrength,t.transparency),c.IO.updateIfChanged(e.values.uEmissiveStrength,t.emissive),c.IO.updateIfChanged(e.values.uSubstanceStrength,t.substance))},a.setTransform=function(e,t,r){if(!e||!t&&!r)return;let{values:a}=e;t&&(s.yb.copy(a.matrix.ref.value,t),c.IO.update(a.matrix,a.matrix.ref.value)),r?(a.extraTransform.ref.value.set(r),c.IO.update(a.extraTransform,a.extraTransform.ref.value)):null===r&&((0,l.Sj)(a.extraTransform.ref.value,a.instanceCount.ref.value),c.IO.update(a.extraTransform,a.extraTransform.ref.value)),(0,l.WC)(a,a.invariantBoundingSphere.ref.value,a.instanceGrid.ref.value.cellSize,a.instanceGrid.ref.value.batchSize);let n=(0,u.Lo)(a.invariantBoundingSphere.ref.value,a.transform.ref.value,a.instanceCount.ref.value,0);c.IO.update(a.boundingSphere,n)}},5253:function(e,t,r){r.d(t,{a:function(){return to}});var a,n=r(7791),i=r(14086),o=r(1573),s=r(4376),l=r(91564),u=r(69126),c=r(96046),d=r(80898),p=r(67589),f=r(87144),m=r(36111),h=r(39967),g=r(39446),b=r(6579),y=r(67646),x=r(54185),S=r(68303),T=r(97187),C=r(67330),O=r(94828);let I={isoValue:o.f.IsoValueParam,wrap:i.e.Select("auto",i.e.arrayToOptions(["off","on","auto"])),floodfill:i.e.Select("off",i.e.arrayToOptions(["off","inside","outside"]),{description:"If and how to floodfill the volume. Note that this disables GPU support."})},A={...I,tryUseGpu:i.e.Boolean(!0,{hideIf:e=>"off"!==e.floodfill}),gpuDataType:i.e.Select("byte",i.e.arrayToOptions(["byte","float","halfFloat"]),{hideIf:e=>!e.tryUseGpu||"off"!==e.floodfill})};function w(e,t){return"on"===t||"off"!==t&&"xyz"===e.periodicity}function D(e,t){if(e.grid.cells.data.length<1e3)return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:a}=(0,h.f$)(r,1);return a<=t.maxTextureSize/2}function E(e,t,r,a,n){var l;return"off"===a.floodfill&&a.tryUseGpu&&n&&(l=n).extensions.colorBufferFloat&&l.extensions.textureFloat&&l.extensions.drawBuffers&&D(t,n)?(0,O.Y)({defaultProps:i.e.getDefaultValues(_),createGeometry:R,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.gpuDataType!==a.gpuDataType||r.wrap!==a.wrap},geometryUtils:g.q.Utils,mustRecreate:(e,t,r)=>"off"!==t.floodfill||!t.tryUseGpu||!r||!D(e.volume,r),dispose:e=>{e.vertexTexture.ref.value.destroy(),e.groupTexture.ref.value.destroy(),e.normalTexture.ref.value.destroy(),e.doubleBuffer.destroy()}},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(_),createGeometry:B,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.wrap!==a.wrap||r.floodfill!==a.floodfill},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseGpu&&!!r&&D(e.volume,r)},e)}function M(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Isosurface.Loci(e,t.isoValue,r)}function P(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return o.f.Isosurface.Loci(t,a.isoValue,r);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function k(e,t,r,a,n){return(0,h.uw)(e,t,{isoValue:a.isoValue},n)}async function B(e,t,r,a,n,i){e.runtime.update({message:"Marching cubes..."});let u=o.f.IsoValue.toAbsolute(n.isoValue,t.grid.stats).absoluteValue,c=t.grid.cells;"off"!==n.floodfill&&(c=f.es.createFloodfilled(c,u,n.floodfill)),w(t,n.wrap)&&(c=(0,h.kp)(c));let d=(0,m.d_)(new Int32Array(t.grid.cells.data.length)),p=await (0,l.Y)({isoLevel:u,scalarField:c,idField:f.es.create(c.space,f.es.Data1(d))},i).runAsChild(e.runtime),g=o.r.getGridToCartesianTransform(t.grid);return s.K.transform(p,g),e.webgl&&!e.webgl.isWebGL2?(s.K.uniformTriangleGroup(p,!1),S.IO.updateIfChanged(p.varyingGroup,!1)):S.IO.updateIfChanged(p.varyingGroup,!0),p.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),p}let _={...s.K.Params,...g.q.Params,...I,...A,quality:{...s.K.Params.quality,isEssential:!1}};function R(e,t,r,n,i,s){let{webgl:l}=e;if(!l)throw Error("webgl context required to create volume isosurface texture-mesh");if(t.grid.cells.data.length<=1)return g.q.createEmpty(s);w(t,i.wrap)&&(t=(0,h.c$)(t));let{max:u,min:c}=t.grid.stats,d=o.f.IsoValue.toAbsolute(i.isoValue,t.grid.stats).absoluteValue,p=(d-c)/(u-c),f=t.grid.cells.space.axisOrderSlowToFast,m=t.grid.cells.data.length,y=o.f.getBoundingSphere(t),x=e=>{let{texture:r,gridDimension:n,gridTexDim:o,gridDataDim:s,gridTexScale:u,transform:c}=a.get(t,l,i),h=null==e?void 0:e.doubleBuffer.get(),x=(0,b.a)(l,r,n,o,s,u,c,p,d<0,!1,f,!0,null==h?void 0:h.vertex,null==h?void 0:h.group,null==h?void 0:h.normal);return g.q.create(x.vertexCount,m,x.vertexTexture,x.groupTexture,x.normalTexture,y,e)},S=x(s);return S.meta.webgl=l,S.meta.reset=()=>{a.clear(t),x(S)},S}async function F(e,t,r,a,n,i){e.runtime.update({message:"Marching cubes..."});let s=o.f.IsoValue.toAbsolute(n.isoValue,t.grid.stats).absoluteValue,u=t.grid.cells;"off"!==n.floodfill&&(u=f.es.createFloodfilled(u,s,n.floodfill)),w(t,n.wrap)&&(u=(0,h.kp)(u));let d=(0,m.d_)(new Int32Array(t.grid.cells.data.length)),p=await (0,l.X)({isoLevel:s,scalarField:u,idField:f.es.create(u.space,f.es.Data1(d))},i).runAsChild(e.runtime),g=o.r.getGridToCartesianTransform(t.grid);return c.x.transform(p,g),p.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),p}!function(e){let t="volume-isosurface-texture";e.descriptor=(0,y.d)({name:t}),e.clear=function(e){delete e._propertyData[t]},e.get=function(r,a,n){var i,s;let{gpuDataType:l}=n,u=w(r,n.wrap),c=o.r.getGridToCartesianTransform(r.grid),d=f.AO.clone(r.grid.cells.space.dimensions),{width:p,height:m,powerOfTwoSize:g}=(0,h.f$)(d,1),b=f.AO.create(p,m,0),y=f.AO.subScalar((0,f.AO)(),d,u?1:0),x=f.Sg.create(p/g,m/g);if(g>a.maxTextureSize/2)throw Error("volume too large for gpu isosurface extraction");let S="halfFloat"!==l||a.extensions.textureHalfFloat?l:"float";if((null===(i=r._propertyData[t])||void 0===i?void 0:i.dataType)!==S||(null===(s=r._propertyData[t])||void 0===s?void 0:s.wrap)!==u){let n="byte"===S?a.resources.texture("image-uint8","alpha","ubyte","linear"):"halfFloat"===S?a.resources.texture("image-float16","alpha","fp16","linear"):a.resources.texture("image-float32","alpha","float","linear");r._propertyData[t]={texture:n,dataType:S,wrap:u},n.define(g,g),n.load((0,h.A1)(r,"data",1,S),!0),r.customProperties.add(e.descriptor),r.customProperties.assets(e.descriptor,[{dispose:()=>n.destroy()}])}return d[0]+=1,d[1]+=1,{texture:r._propertyData[t].texture,transform:c,gridDimension:d,gridTexDim:b,gridDataDim:y,gridTexScale:x}}}(a||(a={}));
7319let L={...c.x.Params,...I,quality:{...c.x.Params.quality,isEssential:!1},sizeFactor:i.e.Numeric(3,{min:0,max:10,step:.1})};function z(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(L),createGeometry:F,createLocationIterator:h.$l,getLoci:P,eachLocation:k,setUpdateState:(e,t,r,a)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.wrap!==a.wrap||r.floodfill!==a.floodfill},geometryUtils:c.x.Utils},e)}let N={solid:(e,t)=>(0,u.rR)("Isosurface mesh",e,t,E,M),wireframe:(e,t)=>(0,u.rR)("Isosurface wireframe",e,t,z,M)},G={..._,...L,visuals:i.e.MultiSelect(["solid"],i.e.objectToOptions(N)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},U=(0,u.FX)({name:"isosurface",label:"Isosurface",description:"Displays a triangulated isosurface of volumetric data.",factory:function(e,t){return n.hX.createMulti("Isosurface",e,t,n.hX.StateBuilder,N)},getParams:function(e,t){let r=i.e.clone(G);return r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.relative(2),t.grid.stats),r},defaultValues:i.e.getDefaultValues(G),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var V=r(67546),j=r(98510),H=r(72558),q=r(23789),X=r(70371),W=r(20178),K=r(81421),Q=r(43975),Z=r(38964),Y=r(58463),$=r(38675),J=r(23833),ee=r(97667),et=r(15613);let er={...j.Ee.Params,quality:{...j.Ee.Params.quality,isEssential:!1},dimension:i.e.MappedStatic("x",{x:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),y:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),z:i.e.Numeric(0,{min:0,max:0,step:1},{immediateUpdate:!0}),relativeX:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:e=>"grid"!==e.mode,description:"Slice position in grid coordinates."}),isoValue:o.f.IsoValueParam,mode:i.e.Select("grid",i.e.arrayToOptions(["grid","frame","plane"]),{description:"Grid: slice through the volume along the grid axes in integer steps. Frame: slice through the volume along arbitrary axes in any step size. Plane: an arbitrary plane defined by point and normal."}),offset:i.e.Numeric(0,{min:-1,max:1,step:.01},{isEssential:!0,immediateUpdate:!0,hideIf:e=>"frame"!==e.mode,description:"Relative offset from center."}),axis:i.e.Select("a",i.e.arrayToOptions(["a","b","c"]),{isEssential:!0,hideIf:e=>"frame"!==e.mode,description:"Axis of the frame."}),rotation:i.e.Group({axis:i.e.Vec3(Q.A.create(1,0,0),{},{description:"Axis of rotation"}),angle:i.e.Numeric(0,{min:-180,max:180,step:1},{immediateUpdate:!0,description:"Axis rotation angle in Degrees"})},{isExpanded:!0,hideIf:e=>"frame"!==e.mode}),plane:i.e.Group({point:i.e.Vec3(Q.A.create(0,0,0),{},{description:"Plane point"}),normal:i.e.Vec3(Q.A.create(1,0,0),{},{description:"Plane normal"})},{isExpanded:!0,hideIf:e=>"plane"!==e.mode})};async function ea(e,t,r,a,n,i){switch(n.mode){case"frame":return ei(e,t,r,a,n,i);case"grid":return es(e,t,r,a,n,i);case"plane":return eo(e,t,r,a,n,i);default:(0,ee.UT)(n.mode)}}function en(e,t,r,a,n,i){let{m:s,width:l,height:u}=r,{cells:{space:c},stats:d}=e.grid,{min:p,max:f}=d,m="uniform"===t.color.granularity,h="color"in t.color&&t.color.color?t.color.color:()=>(0,X.Il)(16777215),g=(0,Q.A)(),b=o.r.getGridToCartesianTransform(e.grid),y=$.y.invert((0,$.y)(),b),[x,S,T]=c.dimensions,C=new Uint8Array(l*u*4),O=new Uint8Array(l*u*4),I=new Float32Array(l*u),A=(0,Q.A)(),w=(0,H.cH)((0,Q.A)(),(0,Q.A)()),D=o.r.makeGetTrilinearlyInterpolated(e.grid,"none"),E=0;for(let e=0;e<u;++e)for(let t=0;t<l;++t){let r=(0,J.uZ)(t+.5,0,l-1)/l-.5,a=(0,J.uZ)(e+.5,0,u-1)/u-.5;Q.A.set(g,a,-r,0),Q.A.transformMat4(g,g,s),Q.A.copy(A,g),Q.A.transformMat4(A,A,y);let n=Math.trunc(A[0]),i=Math.trunc(A[1]),o=Math.trunc(A[2]);Q.A.copy(w.position,g);let d=h(w,!1);X.Il.toArray(d,C,E);let b=(0,J.Fv)(D(g),p,f);m&&(C[E]*=b,C[E+1]*=b,C[E+2]*=b),I[E/4]=b,n>=0&&n<x&&i>=0&&i<S&&o>=0&&o<T&&(0,K.lP)(c.dataOffset(n,i,o),O,E),E+=4}let M=new Float32Array([-.5,.5,0,.5,.5,0,-.5,-.5,0,.5,-.5,0]);(0,q.ST)(s,M,0,4);let P=(0,J.uZ)((0,J.Fv)(o.f.IsoValue.toAbsolute(a,d).absoluteValue,p,f),0,1),k=j.Ee.create({width:l,height:u,array:C,flipY:!0},M,{width:l,height:u,array:O,flipY:!0},{width:l,height:u,array:I,flipY:!0},n,P,i);return k.setBoundingSphere(o.f.getBoundingSphere(e)),k}async function ei(e,t,r,a,n,i){let{offset:s,isoValue:l}=n,{size:u,major:c,minor:d,normal:p,center:f,trim:m,resolution:h}=function(e,t){let{axis:r,rotation:a,mode:n}=t,i=o.r.getGridToCartesianTransform(e.grid),s=$.y.invert((0,$.y)(),i),[l,u,c]=e.grid.cells.space.dimensions,d=Q.A.create(l,0,0),p=Q.A.create(0,u,0),f=Q.A.create(0,0,c),m=Math.max(l,u,c)/Math.max(l,u,c),h=Q.A.create(0,0,0),g=Q.A.create(l,u,c);Q.A.transformMat4(h,h,i),Q.A.transformMat4(g,g,i);let b=Q.A.center((0,Q.A)(),g,h),y=(0,Q.A)(),x=(0,Q.A)(),S=(0,Q.A)(),T=(0,Q.A)();if("c"===r?(Q.A.set(y,l,u,c),Q.A.copy(x,d),Q.A.copy(S,p),Q.A.copy(T,f)):("b"===r?(Q.A.set(y,l,c,u),Q.A.copy(x,d),Q.A.copy(T,p)):(Q.A.set(y,u,c,l),Q.A.copy(T,d),Q.A.copy(x,p)),Q.A.copy(S,f)),0!==a.angle){let e=(0,Q.A)();Q.A.scaleAndAdd(e,e,d,a.axis[0]),Q.A.scaleAndAdd(e,e,p,a.axis[1]),Q.A.scaleAndAdd(e,e,f,a.axis[2]),Q.A.normalize(e,e);let t=$.y.fromRotation((0,$.y)(),(0,Y.Id)(a.angle),e);Q.A.transformDirection(x,x,t),Q.A.transformDirection(S,S,t),Q.A.transformDirection(T,T,t)}if("frame"===n){let e=Q.A.distance(h,g),t=Q.A.distance(h,g)*Math.SQRT2;Q.A.set(y,t,t,e)}return Q.A.transformDirection(x,x,i),Q.A.transformDirection(S,S,i),Q.A.transformDirection(T,T,i),{size:y,major:x,minor:S,normal:T,center:b,trim:{type:3,center:Q.A.create(l/2,u/2,c/2),scale:Q.A.create(l,u,c),rotation:Z.D.identity(),transform:s},resolution:m}}(t,n),g=1/h,b=Q.A.create(u[0],u[1],1),y=Q.A.setMagnitude((0,Q.A)(),p,u[2]/2),x=Math.floor(u[1]*g),S=Math.floor(u[0]*g),T=$.y.identity(),C=(0,Q.A)(),O=(0,Q.A)();return Q.A.add(C,f,c),$.y.targetTo(T,f,C,d),Q.A.scaleAndAdd(O,f,y,s),$.y.setTranslation(T,O),$.y.mul(T,T,$.y.rotY90),$.y.scale(T,T,b),en(t,a,{m:T,width:x,height:S},l,m,i)}async function eo(e,t,r,a,n,i){let{plane:{point:s,normal:l},isoValue:u}=n,c=$.y.fromPlane((0,$.y)(),l,s),d=o.r.getGridToCartesianTransform(t.grid),p=$.y.invert((0,$.y)(),d),[f,m,h]=t.grid.cells.space.dimensions,g=1/(Math.max(f,m,h)/Math.max(f,m,h)),b=Q.A.distance(Q.A.create(0,0,0),Q.A.create(f,m,h))*Math.SQRT2,y=Q.A.set((0,Q.A)(),b,b,b);$.y.mul(c,c,$.y.rotY90),$.y.scale(c,c,y);let x=Math.floor(y[1]*g);return en(t,a,{m:c,width:x,height:Math.floor(y[0]*g)},u,{type:3,center:Q.A.create(f/2,m/2,h/2),scale:Q.A.create(f,m,h),rotation:Z.D.identity(),transform:p},i)}async function es(e,t,r,a,n,i){let{dimension:{name:s},isoValue:l}=n,{cells:{space:u,data:c},stats:d}=t.grid,{min:p,max:f}=d,m="uniform"===a.color.granularity,h="color"in a.color&&a.color.color?a.color.color:()=>(0,X.Il)(16777215),{width:g,height:b,x:y,y:x,z:S,x0:T,y0:C,z0:O,nx:I,ny:A,nz:w}=eu(t.grid,n),D=new Float32Array("x"===s||"relativeX"===s?[y,0,0,y,x,0,y,0,S,y,x,S]:"y"===s||"relativeY"===s?[0,x,0,y,x,0,0,x,S,y,x,S]:[0,0,S,0,x,S,y,0,S,y,x,S]),E=new Uint8Array(g*b*4),M=function(e,t){let{space:r}=e.cells,{width:a,height:n,x0:i,y0:o,z0:s,nx:l,ny:u,nz:c}=eu(e,t),d=new Uint8Array(a*n*4),p=0;for(let e=o;e<u;++e)for(let t=i;t<l;++t)for(let a=s;a<c;++a)(0,K.lP)(r.dataOffset(t,e,a),d,p),p+=4;return d}(t.grid,n),P=new Float32Array(g*b),k=o.r.getGridToCartesianTransform(t.grid),B=(0,H.cH)((0,Q.A)(),(0,Q.A)()),_=0;for(let e=C;e<A;++e)for(let t=T;t<I;++t)for(let r=O;r<w;++r){Q.A.set(B.position,t,e,r),Q.A.transformMat4(B.position,B.position,k),X.Il.toArray(h(B,!1),E,_);let a=(0,J.Fv)(u.get(c,t,e,r),p,f);
7319m&&(E[_]*=a,E[_+1]*=a,E[_+2]*=a),P[_/4]=a,_+=4}let R=o.r.getGridToCartesianTransform(t.grid);(0,q.ST)(R,D,0,4);let F=j.Ee.createEmptyTrim(),L=(0,J.uZ)((0,J.Fv)(o.f.IsoValue.toAbsolute(l,d).absoluteValue,p,f),0,1),z=j.Ee.create({width:g,height:b,array:E,flipY:!0},D,{width:g,height:b,array:M,flipY:!0},{width:g,height:b,array:P,flipY:!0},F,L,i);return z.setBoundingSphere(o.f.getBoundingSphere(t)),z}function el(e,t){return(0,J.uZ)(Math.round((e-1)*t),0,e-1)}function eu(e,t){let r,a,n,i,o;let{dimension:{name:s,params:l}}=t,{space:u}=e.cells,c=0,d=0,p=0,[f,m,h]=u.dimensions;return"x"===s?(n=l,i=m,o=h,r=h,a=m,f=(c=n)+1):"y"===s?(n=f,i=l,o=h,r=h,a=f,m=(d=i)+1):"z"===s?(n=f,i=m,o=l,r=f,a=m,h=(p=o)+1):"relativeX"===s?(n=el(f,l),i=m,o=h,r=h,a=m,f=(c=n)+1):"relativeY"===s?(n=f,i=el(m,l),o=h,r=h,a=f,m=(d=i)+1):(n=f,i=m,o=el(h,l),r=f,a=m,h=(p=o)+1),{width:r,height:a,x:n,y:i,z:o,x0:c,y0:d,z0:p,nx:f,ny:m,nz:h}}function ec(e,t,r){if("grid"!==r.mode)return o.f.Loci(e,t);{let a=function(e,t){let{space:r}=e.cells,{width:a,height:n,x0:i,y0:o,z0:s,nx:l,ny:u,nz:c}=eu(e,t),d=new Uint32Array(a*n),p=0;for(let e=o;e<u;++e)for(let t=i;t<l;++t)for(let a=s;a<c;++a)d[p]=r.dataOffset(t,e,a),p+=1;return d}(e.grid,r),n=et.O.ofUnsortedArray(a);return o.f.Cell.Loci(e,[{indices:n,instances:t}])}}function ed(e,t){let r=T.X.ofLength(e.instances.length);return ec(e,r,t)}function ep(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return ec(t,r,a);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function ef(e,t,r,a,n){return(0,h.uw)(e,t,void 0,n)}function em(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(er),createGeometry:ea,createLocationIterator:h.$l,getLoci:ep,eachLocation:ef,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=r.dimension.name!==a.dimension.name||r.dimension.params!==a.dimension.params||r.mode!==a.mode||!Q.A.equals(r.rotation.axis,a.rotation.axis)||r.rotation.angle!==a.rotation.angle||r.offset!==a.offset||r.axis!==a.axis||!Q.A.equals(r.plane.point,a.plane.point)||!Q.A.equals(r.plane.normal,a.plane.normal)||!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||!W.U.areEqual(n.color,i.color)},geometryUtils:j.Ee.Utils},e)}let eh=(0,u.FX)({name:"slice",label:"Slice",description:"Slice of volume rendered as image with interpolation.",factory:function(e,t){return(0,u.rR)("Slice",e,t,em,ed)},getParams:function(e,t){let r=i.e.clone(er),a=t.grid.cells.space.dimensions;return r.dimension=i.e.MappedStatic("x",{x:i.e.Numeric(0,{min:0,max:a[0]-1,step:1},{immediateUpdate:!0}),y:i.e.Numeric(0,{min:0,max:a[1]-1,step:1},{immediateUpdate:!0}),z:i.e.Numeric(0,{min:0,max:a[2]-1,step:1},{immediateUpdate:!0}),relativeX:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeY:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0}),relativeZ:i.e.Numeric(0,{min:0,max:1,step:.01},{immediateUpdate:!0})},{isEssential:!0,hideIf:e=>"grid"!==e.mode}),r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.absolute(t.grid.stats.min),t.grid.stats),r},defaultValues:i.e.getDefaultValues(er),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var eg=r(48930),ev=r(74219);function eb(e,t){let r=(0,eg.XZ)();return eg.XZ.add(r,e),eg.XZ.transform(r,r,t),r}function ey(e){if("matrix"===e.transform.kind)return{unitToCartn:f.yb.mul((0,f.yb)(),e.transform.matrix,f.yb.fromScaling((0,f.yb)(),e.cells.space.dimensions)),cellDim:f.yb.getScaling((0,f.AO)(),e.transform.matrix)};let t=e.transform.fractionalBox,r=eg.XZ.size((0,f.AO)(),t);return{unitToCartn:f.yb.mul3((0,f.yb)(),e.transform.cell.fromFractional,f.yb.fromTranslation((0,f.yb)(),t.min),f.yb.fromScaling((0,f.yb)(),r)),cellDim:f.AO.div((0,f.AO)(),e.transform.cell.size,e.cells.space.dimensions)}}async function ex(e,t,r,a,n,i){let{runtime:s,webgl:l}=e;if(void 0===l)throw Error("DirectVolumeVisual requires `webgl` in VisualContext");return l.isWebGL2?function(e,t,r,a,n){let i;let s=r.grid.cells.space.dimensions;
7319if(Math.max(...s)>t.max3dTextureSize/2)throw Error("volume too large for direct-volume rendering");let l="halfFloat"!==a.dataType||t.extensions.textureHalfFloat?a.dataType:"float",u=(0,h.Zf)(r,l),c=o.r.getGridToCartesianTransform(r.grid),d=eb(s,c);(i=n&&n.dataType.ref.value===l?n.gridTexture.ref.value:"byte"===l?t.resources.texture("volume-uint8","rgba","ubyte","linear"):"halfFloat"===l?t.resources.texture("volume-float16","rgba","fp16","linear"):t.resources.texture("volume-float32","rgba","float","linear")).load(u);let{unitToCartn:p,cellDim:f}=ey(r.grid),m=r.grid.cells.space.axisOrderSlowToFast;return ev.A.create(d,s,c,p,f,i,r.grid.stats,!1,m,l,n)}(0,l,t,n,i):function(e,t,r,a,n){let i;let s=r.grid.cells.space.dimensions,{width:l,height:u}=(0,h.f$)(s);if(Math.max(l,u)>t.maxTextureSize/2)throw Error("volume too large for direct-volume rendering");let c="halfFloat"!==a.dataType||t.extensions.textureHalfFloat?a.dataType:"float",d=(0,h.A1)(r,"normals",0,c),p=o.r.getGridToCartesianTransform(r.grid),f=eb(s,p);(i=n&&n.dataType.ref.value===c?n.gridTexture.ref.value:"byte"===c?t.resources.texture("image-uint8","rgba","ubyte","linear"):"halfFloat"===c?t.resources.texture("image-float16","rgba","fp16","linear"):t.resources.texture("image-float32","rgba","float","linear")).load(d);let{unitToCartn:m,cellDim:g}=ey(r.grid),b=r.grid.cells.space.axisOrderSlowToFast;return ev.A.create(f,s,p,m,g,i,r.grid.stats,!1,b,c,n)}(0,l,t,n,i)}function eS(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Loci(e,r)}function eT(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=C.h.ofSingleton(l),r=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:r,instances:e}])}return p.Rh}function eC(e,t,r,a,n){return(0,h.uw)(e,t,void 0,n)}let eO={...ev.A.Params,quality:{...ev.A.Params.quality,isEssential:!1},dataType:i.e.Select("byte",i.e.arrayToOptions(["byte","float","halfFloat"]))};function eI(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(eO),createGeometry:ex,createLocationIterator:h.$l,getLoci:eT,eachLocation:eC,setUpdateState:(e,t,r,a)=>{e.createGeometry=r.dataType!==a.dataType},geometryUtils:ev.A.Utils,dispose:e=>{e.gridTexture.ref.value.destroy()}},e)}let eA=(0,u.FX)({name:"direct-volume",label:"Direct Volume",description:"Direct rendering of volumetric data.",factory:function(e,t){return(0,u.rR)("Direct Volume",e,t,eI,eS)},getParams:function(e,t){let r=i.e.clone(eO);return r.controlPoints.getVolume=()=>t,r},defaultValues:i.e.getDefaultValues(eO),defaultColorTheme:{name:"volume-value"},defaultSizeTheme:{name:"uniform"},locationKinds:["position-location","direct-location"],isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});var ew=r(88575);let eD={segments:i.e.Converted(e=>e.map(e=>`${e}`),e=>e.map(e=>parseInt(e)),i.e.MultiSelect(["0"],i.e.arrayToOptions(["0"]),{isEssential:!0}))};function eE(e,t){if(e.grid.cells.data.length<1e3)return!1;let r=e.grid.cells.space.dimensions,{powerOfTwoSize:a}=(0,h.f$)(r,1);return a<=t.maxTextureSize/2}let eM=(0,f.yb)();function eP(e,t){let r=o.r.getGridToCartesianTransform(e),a=f.yb.fromTranslation(eM,t.min);return f.yb.mul((0,f.yb)(),r,a)}function ek(e,t,r,a,n){var l;return a.tryUseGpu&&n&&(l=n).extensions.colorBufferFloat&&l.extensions.textureFloat&&l.extensions.drawBuffers&&eE(t,n)?(0,O.Y)({defaultProps:i.e.getDefaultValues(eL),createGeometry:eN,createLocationIterator:(e,t)=>{let r=o.f.Segment.Location(e,t);return(0,H.OF)(e.grid.cells.data.length,e.instances?e.instances.length:1,1,()=>r)},getLoci:e_,eachLocation:eR,setUpdateState:(e,t,r,a)=>{},geometryUtils:g.q.Utils,mustRecreate:(e,t,r)=>!t.tryUseGpu||!r||!eE(e.volume,r),dispose:e=>{e.vertexTexture.ref.value.destroy(),e.groupTexture.ref.value.destroy(),e.normalTexture.ref.value.destroy(),e.doubleBuffer.destroy()}},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(eL),createGeometry:eF,createLocationIterator:(e,t)=>{let r=o.f.Segment.Location(e,t);return(0,H.OF)(e.grid.cells.data.length,e.instances?e.instances.length:1,1,()=>r)},getLoci:e_,eachLocation:eR,setUpdateState:(e,t,r,a)=>{},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseGpu&&!!r&&eE(e.volume,r)},e)}function eB(e,t){let r=et.O.ofUnsortedArray(t.segments),a=T.X.ofLength(e.instances.length);return o.f.Segment.Loci(e,[{segments:r,instances:a}])}function e_(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),a=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,a);if("object"===e||s===d.i.Null){let e=C.h.ofSingleton(r);return o.f.Segment.Loci(t,[{segments:e,instances:a}])}{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:a}])}}return p.Rh}function eR(e,t,r,a,n){let i=et.O.ofSingleton(r);return(0,h.uw)(e,t,{segments:i},n)}async function eF(e,t,r,a,n,i){let u=o.f.Segmentation.get(t);if(!u)throw Error("missing volume segmentation");e.runtime.update({message:"Marching cubes..."});let c=ew.X.clone(u.bounds[r]);ew.X.expand(c,c,f.AO.create(2,2,2));let d=function(e,t,r){let a=r.data,n=r.space.dataOffset,i=ew.X.size((0,f.AO)(),t),[o,s,l]=i,u=o-1,c=s-1,d=l-1,[p,m,h]=t.min,[g,b,y]=t.max,x=[...r.space.axisOrderSlowToFast],S=f.es.Space(i,x,Uint8Array),T=f.es.create(S,S.create()),C=T.data,O=S.set;for(let t=0;t<l;++t)for(let r=0;r<s;++r)for(let i=0;i<o;++i){let o=e.includes(a[n(i+p,r+m,t+h)])?255:0,s=e.includes(a[n(Math.min(u+g,i+1+p),r+m,t+h)])?255:0,l=e.includes(a[n(Math.max(0,i-1+p),r+m,t+h)])?255:0,f=e.includes(a[n(i+p,Math.min(c+b,r+1+m),t+h)])?255:0,x=e.includes(a[n(i+p,Math.max(0,r-1+m),t+h)])?255:0,S=e.includes(a[n(i+p,r+m,Math.min(d+y,t+1+h))])?255:0,T=e.includes(a[n(i+p,r+m,Math.max(0,t-1+h))])?255:0;O(C,i,r,t,Math.round((o+o+s+l+f+x+S+T)/8))}return T}(Array.from(u.segments.get(r).values()),c,t.grid.cells),p=(0,m.d_)(new Int32Array(d.data.length)),h=await (0,l.Y)({isoLevel:128,
7319scalarField:d,idField:f.es.create(d.space,f.es.Data1(p))},i).runAsChild(e.runtime),g=eP(t.grid,c);s.K.transform(h,g),e.webgl&&!e.webgl.isWebGL2?(s.K.uniformTriangleGroup(h,!1),S.IO.updateIfChanged(h.varyingGroup,!1)):S.IO.updateIfChanged(h.varyingGroup,!0);let b=T.X.ofLength(t.instances.length),y=C.h.ofSingleton(r);return h.setBoundingSphere(o.f.Segment.getBoundingSphere(t,[{segments:y,instances:b}])),h}let eL={...s.K.Params,...g.q.Params,...eD,quality:{...s.K.Params.quality,isEssential:!1},tryUseGpu:i.e.Boolean(!0)},ez="segment-texture";async function eN(e,t,r,a,n,i){if(!e.webgl)throw Error("webgl context required to create volume segment texture-mesh");if(t.grid.cells.data.length<=1)return g.q.createEmpty(i);let{texture:s,gridDimension:l,gridTexDim:u,gridDataDim:c,gridTexScale:d,transform:p}=function(e,t,r){let a=o.f.Segmentation.get(e);if(!a)throw Error("missing volume segmentation");let{resources:n}=r,i=ew.X.clone(a.bounds[t]);ew.X.expand(i,i,f.AO.create(2,2,2));let s=eP(e.grid,i),l=ew.X.size((0,f.AO)(),i),{width:u,height:c,powerOfTwoSize:d}=(0,h.f$)(l,1),p=f.AO.create(u,c,0),m=f.AO.clone(l),g=f.Sg.create(u/d,c/d);if(d>r.maxTextureSize/2)throw Error("volume too large for gpu segment extraction");r.namedTextures[ez]||(r.namedTextures[ez]=n.texture("image-uint8","alpha","ubyte","linear"));let b=r.namedTextures[ez];b.define(d,d);let y=Array.from(a.segments.get(t).values());return b.load((0,h.qd)(e,y,i,1),!0),l[0]+=1,l[1]+=1,{texture:b,transform:s,gridDimension:l,gridTexDim:p,gridDataDim:m,gridTexScale:g}}(t,r,e.webgl),m=t.grid.cells.space.axisOrderSlowToFast,y=null==i?void 0:i.doubleBuffer.get(),x=(0,b.a)(e.webgl,s,l,u,c,d,p,.5,!1,!1,m,!0,null==y?void 0:y.vertex,null==y?void 0:y.group,null==y?void 0:y.normal),S=t.grid.cells.data.length,O=T.X.ofLength(t.instances.length),I=C.h.ofSingleton(r),A=o.f.Segment.getBoundingSphere(t,[{segments:I,instances:O}]);return g.q.create(x.vertexCount,S,x.vertexTexture,x.groupTexture,x.normalTexture,A,i)}function eG(e,t){return et.O.ofUnsortedArray(e.segments)}let eU={segment:(e,t)=>(0,u.rR)("Segment mesh",e,t,ek,eB,eG)},eV={...eL,visuals:i.e.MultiSelect(["segment"],i.e.objectToOptions(eU)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},ej=(0,u.FX)({name:"segment",label:"Segment",description:"Displays a triangulated segment of volumetric data.",factory:function(e,t){return n.hX.createMulti("Segment",e,t,n.hX.StateBuilder,eU)},getParams:function(e,t){let r=i.e.clone(eV),a=o.f.Segmentation.get(t);if(a){let e=Array.from(a.segments.keys());r.segments=i.e.Converted(e=>e.map(e=>`${e}`),e=>e.map(e=>parseInt(e)),i.e.MultiSelect(e.map(e=>`${e}`),i.e.arrayToOptions(e.map(e=>`${e}`)),{isEssential:!0}))}return r},defaultValues:i.e.getDefaultValues(eV),defaultColorTheme:{name:"volume-segment"},defaultSizeTheme:{name:"uniform"},isApplicable:e=>!o.f.isEmpty(e)&&!!o.f.Segmentation.get(e)});var eH=r(39857),eq=r(89623),eX=r(2544),eW=r(34748),eK=r(93964),eQ=r(99696),eZ=r(89017),eY=r(1571);let e$={isoValue:o.f.IsoValueParam,perturbPositions:i.e.Boolean(!1)},eJ={...eH.s.Params,...s.K.Params,...e$,tryUseImpostor:i.e.Boolean(!0),detail:i.e.Numeric(0,{min:0,max:3,step:1},x.ev.CustomQualityParamInfo)};function e0(e,t,r,a,n){return a.tryUseImpostor&&n&&n.extensions.fragDepth&&n.extensions.textureFloat?(0,O.Y)({defaultProps:i.e.getDefaultValues(eJ),createGeometry:e5,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions},geometryUtils:eH.s.Utils,mustRecreate:(e,t,r)=>!t.tryUseImpostor||!r},e):(0,O.Y)({defaultProps:i.e.getDefaultValues(eJ),createGeometry:e6,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions||r.sizeFactor!==a.sizeFactor||r.detail!==a.detail},geometryUtils:s.K.Utils,mustRecreate:(e,t,r)=>t.tryUseImpostor&&!!r},e)}function e1(e){return{...f.yb.extractBasis(e),maxScale:f.yb.getMaxScaleOnAxis(e)}}let e2=new eY._Q,e3=(0,Q.A)();function e4({x:e,y:t,z:r,maxScale:a}){let n=(e2.float()-.5)*a,i=(e2.float()-.5)*a,o=(e2.float()-.5)*a;return Q.A.scale(e3,e,n),Q.A.scaleAndAdd(e3,e3,t,i),Q.A.scaleAndAdd(e3,e3,r,o),e3}function e5(e,t,r,a,n,i){let{cells:{space:s,data:l},stats:u}=t.grid,c=o.r.getGridToCartesianTransform(t.grid),d=o.f.IsoValue.toAbsolute(n.isoValue,u).absoluteValue,p=(0,Q.A)(),[f,m,h]=s.dimensions,g=Math.ceil(f*m*h/10),b=eX.L.create(g,Math.ceil(g/2),i),y=d<0,x=n.perturbPositions?e1(c):void 0;for(let e=0;e<h;++e)for(let t=0;t<m;++t)for(let r=0;r<f;++r){let a=s.get(l,r,t,e);if(!y&&a<d||y&&a>d)continue;let n=s.dataOffset(r,t,e);if(x){Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);let a=e4(x);Q.A.add(p,p,a)}else Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);b.add(p[0],p[1],p[2],n)}let S=b.getSpheres();return S.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),S}function e6(e,t,r,a,n,i){let{detail:s,sizeFactor:l}=n,{cells:{space:u,data:c},stats:d}=t.grid,p=o.r.getGridToCartesianTransform(t.grid),f=o.f.IsoValue.toAbsolute(n.isoValue,d).absoluteValue,m=(0,Q.A)(),[h,g,b]=u.dimensions,y=Math.ceil(h*g*b/10)*(0,eK.U)(s),x=eq.V.createState(y,Math.ceil(y/2),i),S=o.f.Cell.Location(t),T=a.size.size,C=f<0,O=n.perturbPositions?e1(p):void 0;for(let e=0;e<b;++e)for(let t=0;t<g;++t)for(let r=0;r<h;++r){let a=u.get(c,r,t,e);if(!C&&a<f||C&&a>f)continue;let n=u.dataOffset(r,t,e);S.cell=n;let i=T(S)*l;if(O){Q.A.set(m,r,t,e),Q.A.transformMat4(m,m,p);let a=e4(O);Q.A.add(m,m,a)}else Q.A.set(m,r,t,e),Q.A.transformMat4(m,m,p);x.currentGroup=n,(0,eW.H)(x,m,i,s)}let I=eq.V.getMesh(x);return I.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),I}let e8={...eQ.w.Params,...e$};function e7(e){return(0,O.Y)({defaultProps:i.e.getDefaultValues(e8),createGeometry:e9,createLocationIterator:h.$l,getLoci:tt,eachLocation:tr,setUpdateState:(e,t,r,a,n,i)=>{e.createGeometry=!o.f.IsoValue.areSame(r.isoValue,a.isoValue,t.grid.stats)||r.perturbPositions!==a.perturbPositions},geometryUtils:eQ.w.Utils},e)}function e9(e,t,r,a,n,i){let{cells:{space:s,data:l},stats:u}=t.grid,c=o.r.getGridToCartesianTransform(t.grid),d=o.f.IsoValue.toAbsolute(n.isoValue,u).absoluteValue,p=(0,Q.A)(),[f,m,h]=s.dimensions,g=Math.ceil(f*m*h/10),b=eZ.U.create(g,Math.ceil(g/2),i),y=d<0,x=n.perturbPositions?e1(c):void 0;for(let e=0;e<h;++e)for(let t=0;t<m;++t)for(let r=0;r<f;++r){let a=s.get(l,r,t,e);if(!y&&a<d||y&&a>d)continue;let n=s.dataOffset(r,t,e);if(x){Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);let a=e4(x);Q.A.add(p,p,a)}else Q.A.set(p,r,t,e),Q.A.transformMat4(p,p,c);b.add(p[0],p[1],p[2],n)}let S=b.getPoints();return S.setBoundingSphere(o.f.Isosurface.getBoundingSphere(t,n.isoValue)),S}function te(e,t){let r=T.X.ofLength(e.instances.length);return o.f.Isosurface.Loci(e,t.isoValue,r)}function tt(e,t,r,a,n){let{objectId:i,groupId:s,instanceId:l}=e;if(n===i){let e=o.f.PickingGranularity.get(t),r=C.h.ofSingleton(l);if("volume"===e)return o.f.Loci(t,r);if("object"===e||s===d.i.Null)return o.f.Isosurface.Loci(t,a.isoValue,r);{let e=T.X.ofSingleton(s);return o.f.Cell.Loci(t,[{indices:e,instances:r}])}}return p.Rh}function tr(e,t,r,a,n){return(0,h.uw)(e,t,{isoValue:a.isoValue},n)}let ta={sphere:(e,t)=>
7319(0,u.rR)("Dot sphere",e,t,e0,te),point:(e,t)=>(0,u.rR)("Dot point",e,t,e7,te)},tn={...eJ,...e8,visuals:i.e.MultiSelect(["sphere"],i.e.objectToOptions(ta)),bumpFrequency:i.e.Numeric(1,{min:0,max:10,step:.1},x.ev.ShadingCategory)},ti=(0,u.FX)({name:"dot",label:"Dot",description:"Displays dots of volumetric data.",factory:function(e,t){return n.hX.createMulti("Dot",e,t,n.hX.StateBuilder,ta)},getParams:function(e,t){let r=i.e.clone(tn);return r.isoValue=o.f.createIsoValueParam(o.f.IsoValue.relative(2),t.grid.stats),r},defaultValues:i.e.getDefaultValues(tn),defaultColorTheme:{name:"uniform"},defaultSizeTheme:{name:"uniform"},locationKinds:["cell-location","position-location"],isApplicable:e=>!o.f.isEmpty(e)&&!o.f.Segmentation.get(e)});class to extends n.Qx{constructor(){super(),(0,V.mt)(to.BuiltIn,(e,t)=>{if(e.name!==t)throw Error(`Fix BuiltInVolumeRepresentations to have matching names. ${e.name} ${t}`);this.add(e)})}}(to||(to={})).BuiltIn={"direct-volume":eA,dot:ti,isosurface:U,segment:ej,slice:eh}},69126:function(e,t,r){r.d(t,{FX:function(){return f},rR:function(){return m}});var a=r(14086),n=r(60843),i=r(67241),o=r(67589),s=r(11650),l=r(87144),u=r(7791),c=r(54185),d=r(89987),p=r(54854);function f(e){return e}function m(e,t,r,c,f,m=()=>[-1]){let h,g,b,y,x=0,{webgl:S}=t,T=new d.x,C=new u.hX.GeometryState,O=(0,i.xH)(),I=[],A=u.hX.createState(),w=new Map,D=n.Q.createEmpty();async function E(e,t){var r;let a=w.get(t);return a?(null===(r=a.mustRecreate)||void 0===r?void 0:r.call(a,{volume:h,key:t},y,S))&&(a.destroy(),a=c(O,h,t,y,S),w.set(t,a)):(a=c(O,h,t,y,S),w.set(t,a)),a.createOrUpdate({webgl:S,runtime:e},D,y,{volume:h,key:t})}return{label:e,get groupCount(){let e=0;return w.forEach(t=>{t.renderObject&&(e+=t.groupCount)}),e},get props(){return y},get params(){return b},get state(){return A},get theme(){return D},get geometryVersion(){return C.version},renderObjects:I,updated:T,createOrUpdate:function(e={},n){n&&n!==h&&(b=r(t,n),h=n,y||(y=a.e.getDefaultValues(b)));let i=(0,s.bw)(Object.assign({},y,e),h);return Object.assign(y,e,i),g=m(y,h),p.iQ.create("Creating or updating VolumeRepresentation",async e=>{let t=new Set(w.keys());for(let r=0,a=g.length;r<a;++r){let a=g[r];t.delete(a);let n=E(e,a);n&&await n}t.forEach(e=>{var t;null===(t=w.get(e))||void 0===t||t.destroy(),w.delete(e)}),I.length=0,w.forEach(e=>{e.renderObject&&(I.push(e.renderObject),C.add(e.renderObject.id,e.geometryVersion))}),C.snapshot(),T.next(x++)})},setState:function(e){let{visible:t,alphaFactor:r,pickable:a,overpaint:n,transparency:i,emissive:o,substance:s,clipping:c,transform:d,themeStrength:p,syncManually:f,markerActions:m}=e,h={};void 0!==t&&(h.visible=t),void 0!==r&&(h.alphaFactor=r),void 0!==a&&(h.pickable=a),void 0!==n&&(h.overpaint=n),void 0!==i&&(h.transparency=i),void 0!==o&&(h.emissive=o),void 0!==s&&(h.substance=s),void 0!==c&&(h.clipping=c),void 0!==p&&(h.themeStrength=p),void 0===d||l.yb.areEqual(d,A.transform,l.Ib)||(h.transform=d),void 0!==f&&(h.syncManually=f),void 0!==m&&(h.markerActions=m),w.forEach(e=>{void 0!==h.visible&&e&&e.setVisibility(h.visible),void 0!==h.alphaFactor&&e&&e.setAlphaFactor(h.alphaFactor),void 0!==h.pickable&&e&&e.setPickable(h.pickable),void 0!==h.overpaint&&e&&e.setOverpaint(h.overpaint),void 0!==h.transparency&&e&&e.setTransparency(h.transparency),void 0!==h.emissive&&e&&e.setEmissive(h.emissive),void 0!==h.substance&&e&&e.setSubstance(h.substance),void 0!==h.clipping&&e&&e.setClipping(h.clipping),void 0!==h.transform&&e&&e.setTransform(h.transform),void 0!==h.themeStrength&&e&&e.setThemeStrength(h.themeStrength)}),u.hX.updateState(A,e)},setTheme:function(e){D=e},getLoci:e=>{let t=o.Rh;for(let r of w.values()){let a=r.getLoci(e);if(!(0,o.jF)(a)){t=a;break}}return t},getAllLoci:()=>[f(h,y)],eachLocation:e=>{w.forEach(t=>{t.eachLocation(e)})},mark:function(e,t){let r=!1;return w.forEach(a=>{r=a.mark(e,t)||r}),r},destroy:function(){w.forEach(e=>e.destroy()),w.clear()}}}({...c.ev.Params})},39967:function(e,t,r){r.d(t,{qd:function(){return w},$l:function(){return C},A1:function(){return I},Zf:function(){return A},kp:function(){return D},c$:function(){return E},uw:function(){return T},f$:function(){return O}});var a=r(1573),n=r(22177),i=r(43975),o=r(81421),s=r(63964),l=r(48930),u=r(23833);let c=function(){let e=new ArrayBuffer(4),t=new Float32Array(e),r=new Uint32Array(e),a=new Uint32Array(512),n=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(a[e]=0,a[256|e]=32768,n[e]=24,n[256|e]=24):t<-14?(a[e]=1024>>-t-14,a[256|e]=1024>>-t-14|32768,n[e]=-t-1,n[256|e]=-t-1):t<=15?(a[e]=t+15<<10,a[256|e]=t+15<<10|32768,n[e]=13,n[256|e]=13):t<128?(a[e]=31744,a[256|e]=64512,n[e]=24,n[256|e]=24):(a[e]=31744,a[256|e]=64512,n[e]=13,n[256|e]=13)}let i=new Uint32Array(2048),o=new Uint32Array(64),s=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,r=0;for(;(8388608&t)==0;)t<<=1,r-=8388608;t&=-8388609,r+=947912704,i[e]=t|r}for(let e=1024;e<2048;++e)i[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)32!==e&&(s[e]=1024);return{floatView:t,uint32View:r,baseTable:a,shiftTable:n,mantissaTable:i,exponentTable:o,offsetTable:s}}();function d(e){e=(0,u.uZ)(e,-65504,65504),c.floatView[0]=e;let t=c.uint32View[0],r=t>>23&511;return c.baseTable[r]+((8388607&t)>>c.shiftTable[r])}var p=r(72558),f=r(97187),m=r(67330);let h=i.A.set,g=i.A.normalize,b=i.A.sub,y=i.A.addScalar,x=i.A.scale,S=i.A.toArray;
7319function T(e,t,r,i){let o=!1,l=t.grid.cells.data.length;if(a.f.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(f.X.is(e.instances)){let t=f.X.start(e.instances)*l,r=f.X.end(e.instances)*l;i(f.X.ofBounds(t,r))&&(o=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*l;i(f.X.ofBounds(r,r+l))&&(o=!0)}}else if(a.f.Isosurface.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(null==r?void 0:r.isoValue){if(!a.f.IsoValue.areSame(e.isoValue,r.isoValue,t.grid.stats))return!1;if(f.X.is(e.instances)){let t=f.X.start(e.instances)*l,r=f.X.end(e.instances)*l;i(f.X.ofBounds(t,r))&&(o=!0)}else for(let t=0,r=e.instances.length;t<r;++t){let r=e.instances[t]*l;i(f.X.ofBounds(r,r+l))&&(o=!0)}}else{let{stats:r,cells:{data:s}}=t.grid,u=r.sigma,c=a.f.IsoValue.toAbsolute(e.isoValue,r).absoluteValue;for(let t=0,r=s.length;t<r;++t)(0,n.q)(c,s[t],u)&&m.h.forEach(e.instances,e=>{let r=e*l;i(f.X.ofSingleton(r+t))&&(o=!0)})}}else if(a.f.Cell.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;for(let{indices:t,instances:r}of e.elements)f.X.is(t)?m.h.forEach(r,e=>{let r=e*l;i(f.X.offset(t,r))&&(o=!0)}):m.h.forEach(t,e=>{m.h.forEach(r,t=>{let r=t*l;i(f.X.ofSingleton(r+e))&&(o=!0)})})}else if(a.f.Segment.isLoci(e)){if(!a.f.areEquivalent(e.volume,t))return!1;if(null==r?void 0:r.segments)for(let{segments:t,instances:a}of e.elements)m.h.areIntersecting(t,r.segments)&&m.h.forEach(a,e=>{let t=e*l;i(f.X.ofBounds(t,t+l))&&(o=!0)});else{let r=a.f.Segmentation.get(t);if(r){let a=new Set;for(let{segments:n,instances:u}of e.elements){for(let e=0,t=m.h.size(n);e<t;e++){let t=m.h.getAt(n,e);s.F.add(a,r.segments.get(t))}let e=Array.from(a.values()),c=t.grid.cells.data;for(let t=0,r=c.length;t<r;++t)if(e.includes(c[t]))for(let e=0,r=m.h.size(u);e<r;e++){let r=e*l;i(f.X.ofSingleton(t+r))&&(o=!0)}}}}}return o}function C(e){let[t,r,n]=e.grid.cells.space.dimensions,i=e.instances.length,o=a.f.Cell.Location(e);return(0,p.OF)(t*r*n,i,1,(e,t)=>(o.cell=e,o.instance=t,o))}function O(e,t=0){let r=Math.pow(2,Math.ceil(Math.log(Math.sqrt(e[0]*e[1]*e[2]))/Math.log(2))),a=e[0]+t,n=e[1]+t,i=1,o=a;return r<a*e[2]?(o=Math.floor(r/a),i=Math.ceil(e[2]/o),a*=o,n*=i):a*=e[2],{width:a,height:n,columns:o,rows:i,powerOfTwoSize:n<r?r:2*r}}function I(e,t,r=0,a="byte"){let{cells:{space:n,data:s},stats:{max:l,min:c}}=e.grid,p=n.dimensions,{dataOffset:f}=n,{width:m,height:T}=O(p,r),C="data"===t?1:4,I="byte"===a?new Uint8Array(m*T*C):"halfFloat"===a?new Uint16Array(m*T*C):new Float32Array(m*T*C),A=l-c,[w,D,E]=p,M=w+r,P=D+r,k=(0,i.A)(),B=(0,i.A)(),_=w-1,R=D-1,F=E-1;for(let e=0;e<E;++e)for(let r=0;r<D;++r)for(let n=0;n<w;++n){let i;let l=Math.floor(e*M%m/M),p=C*(Math.floor(e*M/m)*P*m+r*m+(l*M+n)),T=f(n,r,e);if(i="byte"===a?Math.round((s[T]-c)/A*255):"halfFloat"===a?d((s[T]-c)/A):(s[T]-c)/A,"data"===t)I[p]=i;else{if("groups"===t){if("halfFloat"===a){let e=(0,u.uZ)(Math.round(T),0,16777215)+1;I[p+2]=d(e%256),e=Math.floor(e/256),I[p+1]=d(e%256),e=Math.floor(e/256),I[p]=d(e%256)}else(0,o.lP)(T,I,p)}else h(k,s[f(Math.max(0,n-1),r,e)],s[f(n,Math.max(0,r-1),e)],s[f(n,r,Math.max(0,e-1))]),h(B,s[f(Math.min(_,n+1),r,e)],s[f(n,Math.min(R,r+1),e)],s[f(n,r,Math.min(F,e+1))]),g(k,b(k,k,B)),y(k,x(k,k,.5),.5),"byte"===a?S(x(k,k,255),I,p):"halfFloat"===a?(I[p]=d(k[0]),I[p+1]=d(k[1]),I[p+2]=d(k[2])):S(k,I,p);I[p+3]=i}}return{array:I,width:m,height:T}}function A(e,t="byte"){let{cells:{space:r,data:a},stats:{max:n,min:o}}=e.grid,[s,l,u]=r.dimensions,{dataOffset:c}=r,p="byte"===t?new Uint8Array(s*l*u*4):"halfFloat"===t?new Uint16Array(s*l*u*4):new Float32Array(s*l*u*4),f=n-o,m=(0,i.A)(),T=(0,i.A)(),C=s-1,O=l-1,I=u-1,A=0;for(let e=0;e<u;++e)for(let r=0;r<l;++r)for(let n=0;n<s;++n){let i=c(n,r,e);h(m,a[c(Math.max(0,n-1),r,e)],a[c(n,Math.max(0,r-1),e)],a[c(n,r,Math.max(0,e-1))]),h(T,a[c(Math.min(C,n+1),r,e)],a[c(n,Math.min(O,r+1),e)],a[c(n,r,Math.min(I,e+1))]),g(m,b(m,m,T)),y(m,x(m,m,.5),.5),"byte"===t?(S(x(m,m,255),p,A),p[A+3]=Math.round((a[i]-o)/f*255)):"halfFloat"===t?(p[A]=d(m[0]),p[A+1]=d(m[1]),p[A+2]=d(m[2]),p[A+3]=d((a[i]-o)/f)):(S(m,p,A),p[A+3]=(a[i]-o)/f),A+=4}return{array:p,width:s,height:l,depth:u}}function w(e,t,r,a=0){let n=e.grid.cells.data,o=l.XZ.size((0,i.A)(),r),s=e.grid.cells.space.dataOffset,{width:u,height:c}=O(o,a),d=new Uint8Array(u*c*1),[p,f,m]=o,h=p-1,g=f-1,b=m-1,y=p+a,x=f+a,[S,T,C]=r.min,[I,A,w]=r.max;for(let e=0;e<m;++e)for(let r=0;r<f;++r)for(let a=0;a<p;++a){let i=Math.floor(e*y%u/y),o=1*(Math.floor(e*y/u)*x*u+r*u+(i*y+a)),l=t.includes(n[s(a+S,r+T,e+C)])?255:0,c=t.
7319includes(n[s(Math.min(h+I,a+1+S),r+T,e+C)])?255:0,p=t.includes(n[s(Math.max(0,a-1+S),r+T,e+C)])?255:0,f=t.includes(n[s(a+S,Math.min(g+A,r+1+T),e+C)])?255:0,m=t.includes(n[s(a+S,Math.max(0,r-1+T),e+C)])?255:0,O=t.includes(n[s(a+S,r+T,Math.min(b+w,e+1+C))])?255:0,D=t.includes(n[s(a+S,r+T,Math.max(0,e-1+C))])?255:0;d[o]=Math.round((l+l+c+p+f+m+O+D)/8)}return{array:d,width:u,height:c}}function D(e){let{space:t,data:r}=e,{get:a,set:n,add:o,dataOffset:s}=t,[l,u,c]=t.dimensions,d=i.A.create(l+1,u+1,c+1);return{data:r,space:{...t,dimensions:d,get:(e,t,r,n)=>a(e,t%l,r%u,n%c),set:(e,t,r,a,i)=>n(e,t%l,r%u,a%c,i),add:(e,t,r,a,n)=>o(e,t%l,r%u,a%c,n),dataOffset:(e,t,r)=>s(e%l,t%u,r%c)}}}function E(e){let{grid:t}=e,r=a.r.getGridToCartesianTransform(t),n={...t,transform:{kind:"matrix",matrix:r},cells:D(t.cells)};return{...e,grid:n}}},94828:function(e,t,r){r.d(t,{Y:function(){return T}});var a=r(30131),n=r(1573),i=r(11803),o=r(60843),s=r(41306),l=r(67241),u=r(67589),c=r(34526),d=r(11650),p=r(20178),f=r(85764),m=r(17411),h=r(69587),g=r(87144),b=r(97667),y=r(85688),x=r(7305);function S(e,t,r,a,n){let i=e.instances.length,o=new Float32Array(16*i);for(let t=0;t<i;++t)g.yb.toArray(e.instances[t].transform,o,16*t);return(0,s.pH)(o,i,t,r,a,n)}function T(e,t){let r,g,T,C,O,I,A,w,D,E;let{defaultProps:M,createGeometry:P,createLocationIterator:k,getLoci:B,eachLocation:_,setUpdateState:R,initUpdateState:F,mustRecreate:L,dispose:z}=e,{updateValues:N,updateBoundingSphere:G,updateRenderableState:U,createPositionIterator:V}=e.geometryUtils,j=d.wV.create(),H=Object.assign({},M),q=o.Q.createEmpty(),X=-1;function W(e){if(j.createNew){if(D=k(C,O),e)r=function(e,t,r,a,n,o){let{createValues:u,createRenderableState:c}=i.Z.getUtils(t),d=r.nonInstanceable?(0,s.tx)():S(e,t.boundingSphere,n.cellSize,n.batchSize),p=u(t,d,r,a,n),f=c(n);return(0,l.Hq)(t.kind,p,f,o)}(C,e,D,T,g,t),E=V(e,r.values);else throw Error("expected geometry to be given")}else{if(!r)throw Error("expected renderObject to be available");if((j.updateColor||j.updateSize||j.updateTransform||j.updateLocation)&&(D=k(C,O)),j.updateTransform||j.updateLocation){let{instanceCount:e,groupCount:t}=D;g.instanceGranularity?(0,y.eL)(e,"instance",r.values):(0,y.eL)(e*t,"groupInstance",r.values)}if(j.updateMatrix&&S(C,w.boundingSphere,g.cellSize,g.batchSize,r.values),j.createGeometry){if(e)f.IO.updateIfChanged(r.values.drawCount,i.Z.getDrawCount(e)),f.IO.updateIfChanged(r.values.uVertexCount,i.Z.getVertexCount(e)),f.IO.updateIfChanged(r.values.uGroupCount,D.groupCount);else throw Error("expected geometry to be given")}(j.updateTransform||j.createGeometry)&&(G(r.values,e||w),E=V(e||w,r.values)),j.updateSize&&"uSize"in r.values&&(0,m.H4)(D,E,T.size,r.values),j.updateColor&&(0,h.is)(D,E,T.color,r.values),N(r.values,g),U(r.state,g)}H=g,q=T,I=C,A=O,e&&(w=e,X+=1)}function K(e,t){return(0,u.h)(e)?t(H.instanceGranularity?c.Xp.ofBounds(0,D.instanceCount):c.Xp.ofBounds(0,D.groupCount*D.instanceCount)):H.instanceGranularity?function(e,t,r,a){let i=!1;if(n.f.Cell.isLoci(e)){if(n.f.Cell.isLociEmpty(e)||!n.f.areEquivalent(e.volume,t))return!1;for(let{instances:t}of e.elements)c.hU.forEach(t,e=>{a(c.Xp.ofSingleton(e))&&(i=!0)})}else if(n.f.Segment.isLoci(e)){if(n.f.Segment.isLociEmpty(e)||!n.f.areEquivalent(e.volume,t))return!1;for(let{segments:t,instances:n}of e.elements)c.hU.has(t,r)&&c.hU.forEach(n,e=>{a(c.Xp.ofSingleton(e))&&(i=!0)})}else if(n.f.Isosurface.isLoci(e)){if(n.f.Isosurface.isLociEmpty(e))return!1;if(c.Xp.is(e.instances))a(e.instances)&&(i=!0);else for(let t=0,r=e.instances.length;t<r;++t)a(c.Xp.ofSingleton(t))&&(i=!0)}else if(n.f.isLoci(e)){if(n.f.isLociEmpty(e))return!1;if(c.Xp.is(e.instances))a(e.instances)&&(i=!0);else for(let t=0,r=e.instances.length;t<r;++t)a(c.Xp.ofSingleton(t))&&(i=!0)}return i}(e,I,A,t):_(e,I,A,H,t)}return{get groupCount(){return D?D.count:0},get renderObject(){return r},get geometryVersion(){return X},async createOrUpdate(e,t,a={},i){if(!function(e,t,a,i){if(!a&&!I)throw Error("missing volume");if(g=Object.assign({},H,t),T=e,C=a,O=i,d.wV.reset(j),r?n.r.areEquivalent(C.grid,I.grid)&&!n.f.areInstanceTransformsEqual(C,I)?j.updateTransform=!0:n.f.areEquivalent(C,I)&&O===A||(j.createNew=!0):j.createNew=!0,j.createNew){null==F||F(j,C,g,T),j.createGeometry=!0;return}R(j,a,g,H,T,q),p.U.areEqual(e.color,q.color)||(j.updateColor=!0),x.k.areEqual(e.size,q.size)||(j.updateSize=!0),D.nonInstanceable?g.instanceGranularity!==H.instanceGranularity&&(j.updateTransform=!0):((g.instanceGranularity!==H.instanceGranularity||g.cellSize!==H.cellSize||g.batchSize!==H.batchSize)&&(j.updateTransform=!0),j.updateTransform&&(j.updateMatrix=!0)),!j.updateSize||"uSize"in r.values||(j.createGeometry=!0),j.createGeometry&&(j.updateColor=!0,j.updateSize=!0)}(t,a,(null==i?void 0:i.volume)||I,(null==i?void 0:i.key)||A),j.createGeometry){let t=P(e,C,O,T,g,w);return(0,b.y8)(t)?t.then(W):W(t)}
7319W()},getLoci:e=>r?B(e,I,A,H,r.id):u.Rh,eachLocation(e){for(D.reset();D.hasNext;){let{location:t,isSecondary:r}=D.move();e(t,r)}},mark:(e,t)=>a.u.mark(r,e,t,K),setVisibility(e){a.u.setVisibility(r,e)},setAlphaFactor(e){a.u.setAlphaFactor(r,e)},setPickable(e){a.u.setPickable(r,e)},setColorOnly(e){a.u.setColorOnly(r,e)},setTransform(e,t){a.u.setTransform(r,e,t)},setOverpaint:e=>a.u.setOverpaint(r,e,K,!0),setTransparency:e=>a.u.setTransparency(r,e,K,!0),setEmissive:e=>a.u.setEmissive(r,e,K,!0),setSubstance:e=>a.u.setSubstance(r,e,K,!0),setClipping:e=>a.u.setClipping(r,e,K,!0),setThemeStrength(e){a.u.setThemeStrength(r,e)},destroy(){null==z||z(w),r&&(r.state.disposed=!0,r=void 0)},mustRecreate:L}}({...r(54185).ev.Params})},4176:function(e,t,r){r.d(t,{l:function(){return a}});var a,n=r(85764),i=r(14086);!function(e){let t;function r(e){let t={create:e=>({action:t,params:e}),id:n.hb.create22(),definition:e,createDefaultParams:(t,r)=>e.params?i.e.getDefaultValues(e.params(t,r)):{}};return t}e.create=r,e.fromTransformer=function(e){let t=e.definition;return r({from:t.from,display:t.display,params:t.params,isApplicable:e.definition.isApplicable?(t,r,a)=>e.definition.isApplicable(t,a):void 0,run({cell:t,state:r,params:a}){let n=r.build().to(t.transform.ref).apply(e,a);return r.updateTree(n)}})},(t=e.Builder||(e.Builder={})).build=e=>t=>r({from:e.from instanceof Array?e.from:e.from?[e.from]:[],display:"string"==typeof e.display?{name:e.display}:e.display?e.display:{name:"Unnamed State Action"},params:"object"==typeof e.params?()=>e.params:e.params?e.params:void 0,isApplicable:e.isApplicable,..."function"==typeof t?{run:t}:t}),e.build=t.build}(a||(a={}))},67801:function(e,t,r){r.d(t,{ZM:function(){return P},lQ:function(){return Y.l},lZ:function(){return i},ze:function(){return s},tE:function(){return h.t},EW:function(){return p.E},td:function(){return f.t},K1:function(){return d.K}});var a,n,i,o,s,l,u=r(85764);!function(e){function t(e){var t;return(t=class{static is(t){return!!t&&e===t.type}constructor(t,r){this.data=t,this.id=u.hb.create22(),this.type=e,this.label=r&&r.label||e.name,this.description=r&&r.description}}).type=e,t}e.factory=function(){return e=>t(e)},e.create=t,e.hasTag=function(e,t){if(!e.tags)return!1;for(let r of e.tags)if(r===t)return!0;return!1},e.Null={id:u.hb.create22(),type:{name:"Null",typeClass:"Null"},data:void 0,label:"Null"}}(i||(i={})),(a=o||(o={})).is=function(e){return!!e&&!!e.transform&&!!e.parent&&!!e.status},a.resolve=function(e,t){let r="string"==typeof t?t:a.is(t)?t.transform.ref:t.ref;return e.cells.get(r)};class c{get cell(){var e;return null===(e=this.state)||void 0===e?void 0:e.cells.get(this.ref)}get obj(){var e,t;return null===(t=null===(e=this.state)||void 0===e?void 0:e.cells.get(this.ref))||void 0===t?void 0:t.obj}get data(){var e;return null===(e=this.obj)||void 0===e?void 0:e.data}update(e,t){if(!this.state)throw Error("To use update() from StateObjectSelector, 'state' must be defined.");return t||(t=this.state.build()),(t||this.state.build()).to(this).update(e),t}checkValid(){if(!this.state)throw Error("Unassigned State.");let e=this.cell;if(!e)throw Error("Not created at all. Did you await/then the corresponding state update?");if("ok"===e.status)return!0;if("error"===e.status)throw Error(e.errorText);if(e.obj===i.Null)throw Error("The object is Null.");throw Error("Unresolved. Did you await/then the corresponding state update?")}get isOk(){let e=this.cell;return e&&"ok"===e.status&&e.obj!==i.Null}constructor(e,t){this.ref=e,this.state=t}}!function(e){function t(e,t){if(t)return o.is(t)?t:"string"==typeof t?e.cells.get(t):t.cell}e.resolveRef=function(e){var t;if(e)return"string"==typeof e?e:o.is(e)?e.transform.ref:null===(t=e.cell)||void 0===t?void 0:t.transform.ref},e.resolve=t,e.resolveAndCheck=function(e,r){let a=t(e,r);if(a&&a.obj&&"ok"===a.status)return a}}(s||(s={}));var d=r(67604),p=r(81752),f=r(23492),m=r(54854),h=r(30123),g=r(2078),b=r(45173),y=r(53596);function x(...e){let t;let r=[];for(let a of e)if(a){if(t||(t=new Set),"string"==typeof a){if(t.has(a))continue;t.add(a),r.push(a)}else for(let e of a)t.has(e)||(t.add(e),r.push(e))}return r}!function(e){function t(e){let t=new Set;for(let r of e.actions)switch(r.kind){case"add":t.add(r.transform.ref);break;case"update":case"delete":t.add(r.ref);break;case"insert":for(let a of(t.add(r.ref),t.add(r.transform.ref),e.tree.children.get(r.ref).toArray()))t.add(a)}return Array.from(t)}function r(e,r){if(!e.state||e.state.tree===e.editInfo.sourceTree){let a=e.tree.asImmutable();return(null==r?void 0:r.useHashVersion)&&b.K.setParamHashVersion(a,t(e)),a}let a=e.state.tree.asTransient();for(let t of e.actions)switch(t.kind){case"add":a.add(t.transform);break;case"update":a.setParams(t.ref,t.params);break;
7319case"delete":a.remove(t.ref);break;case"insert":{let e=a.children.get(t.ref).toArray();for(let r of(a.add(t.transform),e))a.changeParent(r,t.transform.ref)}}e.editInfo.sourceTree=e.tree;let n=a.asImmutable();return(null==r?void 0:r.useHashVersion)&&b.K.setParamHashVersion(n,t(e)),n}e.is=function(e){return!!e&&"function"==typeof e.getTree},e.isTo=function(e){return!!e&&"function"==typeof e.getTree&&"string"==typeof e.ref};class a{get editInfo(){return this.state.editInfo}get currentTree(){return this.state.tree}to(e){let t="string"==typeof e?e:o.is(e)?e.transform.ref:e.ref;return new n(this.state,t,this)}toRoot(){return new n(this.state,this.state.tree.root.ref,this)}delete(e){let t=s.resolveRef(e);return t&&this.state.tree.transforms.has(t)&&(this.editInfo.count++,this.state.tree.remove(t),this.state.actions.push({kind:"delete",ref:t})),this}getTree(e){return r(this.state,e)}commit(e){if(!this.state.state)throw Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,e))}constructor(e,t){this.state={state:t,tree:e.asTransient(),actions:[],editInfo:{applied:!1,sourceTree:e,count:0,lastUpdate:void 0}}}}e.Root=a;class n{get editInfo(){return this.state.editInfo}get selector(){return new c(this.ref,this.state.state)}getApplyRoot(){return b.K.getDecoratorRoot(this.state.tree,this.ref)}apply(e,t,r){if(e.definition.isDecorator)return this.insert(e,t,r);let a=this.getApplyRoot(),i=e.apply(a,t,r);return this.state.tree.add(i),this.editInfo.count++,this.editInfo.lastUpdate=i.ref,this.state.actions.push({kind:"add",transform:i}),new n(this.state,i.ref,this.root)}applyOrUpdate(e,t,r,a){if(!this.state.tree.transforms.has(e))return this.apply(t,r,{...a,ref:e});{let t=this.to(e);return r&&t.update(r),t}}applyOrUpdateTagged(e,t,r,a){if(t.definition.isDecorator)throw Error("Can't use applyOrUpdateTagged on decorator transformers.");let i=this.getApplyRoot(),o=this.state.tree.children.get(i).values();for(;;){let t=o.next();if(t.done)break;let n=this.state.tree.transforms.get(t.value);if(n&&p.E.hasTags(n,e)){let i=this.to(t.value);return i.updateTagged(r,x(n.tags,e,a&&a.tags)),i}}let s=t.apply(i,r,{...a,tags:x(e,a&&a.tags)});return this.state.tree.add(s),this.editInfo.count++,this.editInfo.lastUpdate=s.ref,this.state.actions.push({kind:"add",transform:s}),new n(this.state,s.ref,this.root)}group(e,t,r){return this.apply(e,t,r)}insert(e,t,r){let a=this.state.tree.children.get(this.ref).toArray(),i=e.apply(this.ref,t,r);for(let e of(this.state.tree.add(i),a))this.state.tree.changeParent(e,i.ref);return this.editInfo.count++,this.editInfo.lastUpdate=i.ref,this.state.actions.push({kind:"insert",ref:this.ref,transform:i}),new n(this.state,i.ref,this.root)}updateTagged(e,t){(this.state.tree.setParams(this.ref,e)||this.state.tree.setTags(this.ref,t))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:e}))}update(e,t){let r;if(t){let e=this.state.tree.transforms.get(this.ref);r=(0,y.U)(e.params,t)}else r="function"==typeof e?(0,y.U)(this.state.tree.transforms.get(this.ref).params,e):e;return this.state.tree.setParams(this.ref,r)&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:r})),this.root}updateState(e){let t=this.state.tree.transforms.get(this.ref);p.E.isStateChange(t.state,e)&&(this.state.tree.assignState(this.ref,e),this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.find(e=>"update"===e.kind&&e.ref===this.ref)||this.state.actions.push({kind:"update",ref:this.ref,params:t.params}))}tag(e){let t=this.state.tree.transforms.get(this.ref);return this.updateTagged(t.params,x(t.tags,e)),this}dependsOn(e){let t=this.state.tree.transforms.get(this.ref);this.state.tree.setDependsOn(this.ref,x(t.dependsOn,e))&&(this.editInfo.count++,this.editInfo.lastUpdate=this.ref,this.state.actions.push({kind:"update",ref:this.ref,params:t.params}))}to(e){return this.root.to(e)}toRoot(){return this.root.toRoot()}delete(e){return this.root.delete(e)}getTree(e){return r(this.state,e)}commit(e){if(!this.state.state)throw Error("Cannot commit template tree");return this.state.state.runTask(this.state.state.updateTree(this,e))}constructor(e,t,r){if(this.state=e,this.root=r,this.ref=t,!this.state.tree.transforms.has(t))throw Error(`Could not find node '${t}'.`)}}e.To=n}(l||(l={}));var S=r(36111);class T{constructor(){this.ev=g.d.create(),this.actions=new Map,this.fromTypeIndex=new Map,this.events={added:this.ev(),removed:this.ev()}}add(e){let t=f.t.is(e)?e.toAction():e;if(this.actions.has(t.id))return this;for(let e of(this.actions.set(t.id,t),t.definition.from))this.fromTypeIndex.has(e.type)?this.fromTypeIndex.get(e.type).push(t):this.fromTypeIndex.set(e.type,[t]);return this.events.added.next(void 0),this}remove(e){let t=f.t.is(e)?e.toAction().id:u.hb.is(e)?e:e.id,r=this.actions.get(t);if(!r)return this;for(let e of(this.actions.delete(t),r.definition.from)){let t=this.fromTypeIndex.get(e.type);t&&((0,S.iV)(t,r),0===t.length&&this.fromTypeIndex.delete(e.type))}return this.events.removed.next(void 0),this}fromCell(e,t){let r=e.obj;if(!r)return[];let a=this.fromTypeIndex.get(r.type);if(!a)return[];let n=!1;for(let e of a)if(e.definition.isApplicable){n=!0;break}if(!n)return a;let i=[];for(let n of a)n.definition.isApplicable?n.definition.isApplicable(r,e.transform,t)&&i.push(n):i.push(n);return i}dispose(){this.ev.dispose()}}var C=r(73969),O=r(58400),I=r(14086),A=r(51493),w=r(89987);class D{constructor(){this.queue=[],this.signal=new w.x}
7319get length(){return this.queue.length}enqueue(e){return this.queue.push(e),1===this.queue.length||this.waitFor(e)}handled(e){(0,S.KQ)(this.queue,e),this.queue.length>0&&this.signal.next({v:this.queue[0],stillPresent:!0})}remove(e){let t=(0,S.KQ)(this.queue,e);return t&&this.signal.next({v:e,stillPresent:!1}),t}waitFor(e){return new Promise(t=>{let r=this.signal.subscribe(({v:a,stillPresent:n})=>{a===e&&(r.unsubscribe(),t(n))})})}}var E=r(79137),M=r(67546);class P{get tree(){return this._tree}get transforms(){return this._tree.transforms}get current(){return this.behaviors.currentObject.value.ref}get root(){return this.cells.get(this._tree.root.ref)}build(){return new l.Root(this.tree,this)}registerRefResolver(e,t){this.refResolvers.push([e,t])}removeRefResolver(e){this.refResolvers=this.refResolvers.filter(t=>t[0]!==e)}addHistory(e,t){0!==this.historyCapacity&&(this.history.unshift([e,t||"Update"]),this.history.length>this.historyCapacity&&this.history.pop(),this.events.historyUpdated.next({state:this}))}clearHistory(){0!==this.history.length&&(this.history=[],this.events.historyUpdated.next({state:this}))}get latestUndoLabel(){return this.history.length>0?this.history[0][1]:void 0}get canUndo(){return this.history.length>0}undo(){return m.iQ.create("Undo",async e=>{let t=this.history.shift();if(t){this.events.historyUpdated.next({state:this}),this.undoingHistory=!0;try{await this.updateTree(t[0],{canUndo:!1}).runInContext(e)}finally{this.undoingHistory=!1}}})}getSnapshot(){return{tree:d.K.toJSON(this._tree)}}setSnapshot(e){let t=d.K.fromJSON(e.tree);return this.updateTree(t)}setCurrent(e){this.behaviors.currentObject.next({state:this,ref:e})}updateCellState(e,t){let r=this.cells.get(e);if(!r)return;let a="function"==typeof t?t(r.state):t;p.E.assignState(r.state,a)&&(r.transform=this._tree.assignState(r.transform.ref,a),this.events.cell.stateUpdated.next({state:this,ref:e,cell:r}))}dispose(){this.ev.dispose(),this.actions.dispose()}select(e){return h.t.select(e,this)}selectQ(e){return"string"==typeof e?h.t.select(e,this):h.t.select(e(h.t.Generators),this)}applyAction(e,t,r=p.E.RootRef){return m.iQ.create("Apply Action",a=>{let n=this.cells.get(r);if(!n)throw Error(`'${r}' does not exist.`);if("ok"!==n.status)throw Error(`Action cannot be applied to a cell with status '${n.status}'`);return W(e.definition.run({ref:r,cell:n,a:n.obj,params:t,state:this},this.globalContext),a)})}transaction(e,t){return m.iQ.create("State Transaction",async r=>{let a=this.inTransaction,n=this._tree.asImmutable(),i=!1;try{a||this.behaviors.isUpdating.next(!0),this.inTransaction=!0,this.inTransactionError=!1,await e(r),this.inTransactionError&&(i=!0,await this.updateTree(n).runInContext(r))}catch(e){if(i||(i=!0,await this.updateTree(n).runInContext(r),this.events.log.next(C.B.error("Error during state transaction, reverting"))),a)throw this.inTransactionError=!0,e;if(null==t?void 0:t.rethrowErrors)throw e;console.error(e)}finally{a||(this.inTransaction=!1,this.events.changed.next({state:this,inTransaction:!1}),this.behaviors.isUpdating.next(!1),i||((null==t?void 0:t.canUndo)?this.addHistory(n,"string"==typeof t.canUndo?t.canUndo:void 0):this.clearHistory()))}})}get inUpdate(){return this._inUpdate}updateTree(e,t){let r={tree:e,options:t};return m.iQ.create("Update Tree",async a=>{if(!await this.updateQueue.enqueue(r))return;this._inUpdate=!0;let n=(null==t?void 0:t.canUndo)?this._tree.asImmutable():void 0,i=!1;this.inTransaction||this.behaviors.isUpdating.next(!0);try{if(l.is(e)){if(e.editInfo.applied)throw Error("This builder has already been applied. Create a new builder for further state updates");e.editInfo.applied=!0}this.reverted=!1;let n=t&&(t.revertIfAborted||t.revertOnError)?await this._revertibleTreeUpdate(a,r,t):await this._updateTree(a,r);if(i=this.reverted,n.ctx.hadError&&(this.inTransactionError=!0),!n.cell)return;return new c(n.cell.transform.ref,this)}finally{this._inUpdate=!1,this.updateQueue.handled(r),this.inTransaction||(this.behaviors.isUpdating.next(!1),(null==t?void 0:t.canUndo)?i||this.addHistory(n,"string"==typeof t.canUndo?t.canUndo:void 0):this.undoingHistory||this.clearHistory())}},()=>{this.updateQueue.remove(r)})}
7319async _revertibleTreeUpdate(e,t,r){let a=this.tree,n=await this._updateTree(e,t);return(n.ctx.hadError||n.ctx.wasAborted)&&r.revertOnError||n.ctx.wasAborted&&r.revertIfAborted?(this.reverted=!0,await this._updateTree(e,{tree:a,options:t.options})):n}async _updateTree(e,t){let r=!1,a=this.updateTreeAndCreateCtx(t.tree,e,t.options);try{if(r=await B(a),l.isTo(t.tree)){let e=this.select(t.tree.ref)[0];return{ctx:a,cell:e}}return{ctx:a}}finally{this.spine.current=void 0,r&&this.events.changed.next({state:this,inTransaction:this.inTransaction})}}updateTreeAndCreateCtx(e,t,r){let a=(l.is(e)?e.getTree():e).asTransient(),n=this._tree;this._tree=a;let i={parent:this,editInfo:l.is(e)?e.editInfo:void 0,errorFree:this.errorFree,taskCtx:t,oldTree:n,tree:a,cells:this.cells,spine:this.spine,results:[],options:{...k,...r},changed:!1,hadError:!1,wasAborted:!1,newCurrent:void 0,getCellData:this.tryGetCellData};return this.errorFree=!0,i}constructor(e,t){this.errorFree=!0,this.ev=g.d.create(),this.globalContext=void 0,this.events={cell:{stateUpdated:this.ev(),created:this.ev(),removed:this.ev()},object:{updated:this.ev(),created:this.ev(),removed:this.ev()},log:this.ev(),changed:this.ev(),historyUpdated:this.ev()},this.behaviors={currentObject:this.ev.behavior({state:this,ref:p.E.RootRef}),isUpdating:this.ev.behavior(!1)},this.actions=new T,this.cells=new Map,this.spine=new A.W.Impl(this.cells),this.refResolvers=[],this.tryGetCellData=e=>{var t,r;let a=null===(r=null===(t=this.cells.get(e))||void 0===t?void 0:t.obj)||void 0===r?void 0:r.data;if(void 0===a){for(let[,t]of this.refResolvers)if(void 0!==(a=t(this,e)))break;if(void 0===a)throw Error(`Cell '${e}' data undefined.`)}return a},this.historyCapacity=5,this.history=[],this.undoingHistory=!1,this.inTransaction=!1,this.inTransactionError=!1,this._inUpdate=!1,this.reverted=!1,this.updateQueue=new D,this._tree=d.K.createEmpty(p.E.createRoot(t&&t.rootState)).asTransient();let r=this._tree.root;this.runTask=t.runTask,(null==t?void 0:t.historyCapacity)!==void 0&&(this.historyCapacity=t.historyCapacity),this.cells.set(r.ref,{parent:this,transform:r,sourceRef:void 0,obj:e,status:"ok",state:{...r.state},errorText:void 0,params:{definition:{},values:{}},dependencies:{dependentBy:[],dependsOn:[]},cache:{}}),this.globalContext=t&&t.globalContext}}(n=P||(P={})).create=function(e,t){return new n(e,t)},(n.ObjectEvent||(n.ObjectEvent={})).isCell=function(e,t){return!!t&&e.ref===t.transform.ref&&e.state===t.parent};let k={doNotLogTiming:!1,doNotUpdateCurrent:!0,revertIfAborted:!1,revertOnError:!1,canUndo:!1};async function B(e){let t=!!(e.editInfo&&1===e.editInfo.count&&e.editInfo.lastUpdate&&e.editInfo.sourceTree===e.oldTree),r,a=[],n;if(t)r=[],n=[e.editInfo.lastUpdate];else{r=function(e){let t={newTree:e.tree,cells:e.cells,deletes:[]};return d.K.doPostOrder(e.oldTree,e.oldTree.root,t,R),t.deletes}(e);let t=e.parent.current,i=!1;for(let e of r)if(e===t){i=!0;break}if(i){let a=G(e.oldTree,t,r,e.cells);e.parent.setCurrent(a)}for(let t=r.length-1;t>=0;t--){let a=e.cells.get(r[t]);a&&q(a.transform,a.obj,null==a?void 0:a.transform.params,a.cache,e.parent.globalContext)}for(let t of r){let r=e.cells.get(t);r&&(r.parent=void 0,function(e){for(let t of e.dependencies.dependsOn)(0,S.iV)(t.dependencies.dependentBy,e)}(r));let n=r&&r.obj;e.cells.delete(t),a.push(n)}n=function(e,t){let r={roots:[],cells:e};return d.K.doPreOrder(t,t.root,r,_),r.roots}(e.cells,e.tree)}let o=function(e,t){let r;let a={ctx:e,visited:new Set,added:[]};for(let r of t)d.K.doPreOrder(e.tree,e.tree.transforms.get(r),a,N);for(let t of a.added)!function(e,t){if(e.transform.dependsOn)for(let r of e.transform.dependsOn){if(!t.tree.transforms.get(r))throw Error("Cannot depend on a non-existent transform.");let a=t.cells.get(r);(0,S.S8)(e.dependencies.dependsOn,a),(0,S.S8)(a.dependencies.dependentBy,e)}}(t,e);return a.visited.forEach(t=>{for(let n of e.cells.get(t).dependencies.dependentBy)a.visited.has(n.transform.ref)||(r||(r=E.l.create()),E.l.add(r,n.transform.ref,n))}),{added:a.added,dependent:r?r.array:void 0}}(e,n);for(let t of o.added)e.parent.events.cell.created.next({state:e.parent,ref:t.transform.ref,cell:t});for(let t=0;t<r.length;t++){let n=r[t],i=e.oldTree.transforms.get(n).parent;e.parent.events.object.removed.next({state:e.parent,ref:n,obj:a[t]}),e.parent.events.cell.removed.next({state:e.parent,ref:n,parent:i})}if(a.length&&(a=[]),o.dependent)for(let e of o.dependent)n.push(e.transform.ref);for(let t of(function(e,t){for(let r of t)d.K.doPreOrder(e.tree,e.tree.transforms.get(r),e,z)}(e,n),n))await j(e,t);e.editInfo||d.K.doPreOrder(e.tree,e.tree.root,e,F);let s=e.newCurrent;for(let t of e.results)"created"===t.action?(e.parent.events.object.created.next({state:e.parent,ref:t.ref,obj:t.obj}),e.newCurrent||e.tree.transforms.get(t.ref).state.isGhost||t.obj===i.Null||(s=t.ref)):"updated"===t.action?e.parent.events.object.updated.next({state:e.parent,ref:t.ref,action:"in-place",obj:t.obj,oldData:t.oldData}):"replaced"===t.action&&e.parent.events.object.updated.next({state:e.parent,ref:t.ref,action:"recreate",obj:t.obj,oldObj:t.oldObj});
7319if(s)e.options.doNotUpdateCurrent||e.parent.setCurrent(s);else{let t=e.parent.current,r=e.cells.get(t);r&&(r.obj===i.Null||"error"===r.status&&r.errorText===V)&&(s=G(e.oldTree,t,[],e.cells),e.parent.setCurrent(s))}return r.length>0||n.length>0||e.changed}function _(e,t,r){let a=r.cells.get(e.ref);return a&&a.transform.version===e.version?"error"!==a.status&&(!a||a.obj!==i.Null):(r.roots.push(e.ref),!1)}function R(e,t,r){!r.newTree.transforms.has(e.ref)&&r.cells.has(e.ref)&&r.deletes.push(e.ref)}function F(e,t,r){let a=r.cells.get(e.ref);a&&p.E.syncState(a.state,e.state)&&r.parent.events.cell.stateUpdated.next({state:r.parent,ref:e.ref,cell:a})}function L(e,t,r,a){let n=e.cells.get(t),i=n.status!==r;n.status=r,n.errorText=a,i&&e.parent.events.cell.stateUpdated.next({state:e.parent,ref:t,cell:n})}function z(e,t,r){r.cells.get(e.ref).transform=e,L(r,e.ref,"pending")}function N(e,t,{ctx:r,added:a,visited:n}){if(n.add(e.ref),r.cells.has(e.ref))return;let i={parent:r.parent,transform:e,sourceRef:void 0,status:"pending",state:{...e.state},errorText:void 0,params:void 0,dependencies:{dependentBy:[],dependsOn:[]},cache:void 0};r.cells.set(e.ref,i),a.push(i)}function G(e,t,r,a){return function e(t,r,a,n){if(r===p.E.RootRef)return r;let o=t.transforms.get(r),s=t.children.get(o.parent).values(),l,u=!1;for(;;){let e=s.next();if(e.done)break;if(a.has(e.value))continue;let o=n.get(e.value);if(!o||"error"===o.status||o.obj===i.Null)continue;let c=t.transforms.get(e.value);if(!c.state.isGhost){if(e.value===r){u=!0,a.has(r)||(l=r);continue}if(u)return c.ref;l=c.ref}}return l||e(t,o.parent,a,n)}(e,t,new Set(r),a)}function U(e,t,r,a){a||(e.hadError=!0,e.parent.errorFree=!1);let n=e.cells.get(t);if(r){e.wasAborted=e.wasAborted||m.iQ.isAbort(r);let n=""+r;L(e,t,"error",n),a||e.parent.events.log.next({type:"error",timestamp:new Date,message:n})}else n.params=void 0;if(n.obj){let r=n.obj;n.obj=void 0,n.cache=void 0,e.parent.events.object.removed.next({state:e.parent,ref:t,obj:r})}let i=e.tree.children.get(t).values();for(;;){let t=i.next();if(t.done)return;U(e,t.value,void 0,a)}}let V="Parent is null";async function j(e,t){L(e,t,"processing");let r=!1;try{let a=(0,O.z)(),n=await H(e,t),o=(0,O.z)()-a;"none"!==n.action&&(e.changed=!0),L(e,t,"ok"),e.results.push(n),"created"===n.action?(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Created ${n.obj.label} in ${(0,O.i)(o)}.`)):"updated"===n.action?(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Updated ${n.obj.label} in ${(0,O.i)(o)}.`)):"replaced"!==n.action||(r=n.obj===i.Null)||e.options.doNotLogTiming||e.parent.events.log.next(C.B.info(`Updated ${n.obj.label} in ${(0,O.i)(o)}.`))}catch(r){e.changed=!0,e.hadError||(e.newCurrent=t),U(e,t,r,!1),console.error(r);return}let a=e.tree.children.get(t).values();for(;;){let t=a.next();if(t.done)return;r?U(e,t.value,void 0,!0):await j(e,t.value)}}async function H(e,t){var r;let{oldTree:a,tree:n}=e,o=e.cells.get(t),s=o.transform;if(o.transform.ref===p.E.RootRef)return{action:"none"};let l=e.cells.get(o.transform.parent);if((null==l?void 0:l.obj)===i.Null){if(o.sourceRef=l.transform.ref,!a.transforms.has(t)||!o.params)return o.params=void 0,{ref:t,action:"created",obj:i.Null};{let r=o.params.values,a=o.cache;return q(s,o.obj,r,a,e.parent.globalContext),o.params=void 0,o.obj=i.Null,{ref:t,action:"updated",obj:o.obj}}}let u=0===s.transformer.definition.from.length?l:h.t.findAncestorOfType(n,e.cells,t,s.transformer.definition.from);if(!u)throw Error(`No suitable parent found for '${t}'`);e.spine.current=o;let c=u.obj;o.sourceRef=u.transform.ref;let d=function(e,t,r,a){let n=t.transformer.definition.params,i=n?n(r,e.parent.globalContext):{};if(t.version!==t._normalized_param_version)t.params=I.e.normalizeParams(i,t.params,"all"),t._normalized_param_version=t.version;else{let e=I.e.getDefaultValues(i);t.params=t.params?(0,M.iU)(t.params,e):e}return I.e.resolveRefs(i,t.params,e.getCellData),{definition:i,values:t.params}}(e,s,c,0);if(a.transforms.has(t)&&o.params){let a=o.params.values,n=o.cache,l=null===(r=o.obj)||void 0===r?void 0:r.data,u=d.values;switch(o.params=d,o.obj&&o.obj!==i.Null?await Z(e,o,s.transformer,c,o.obj,a,u):f.t.UpdateResult.Recreate){case f.t.Upd
7319ateResult.Recreate:{let r=o.obj;q(s,r,a,n,e.parent.globalContext);let i=await Q(e,o,s.transformer,c,u);return X(i,s),o.obj=i,{ref:t,action:"replaced",oldObj:r,obj:i}}case f.t.UpdateResult.Updated:return X(o.obj,s),{ref:t,action:"updated",oldData:l,obj:o.obj};case f.t.UpdateResult.Null:return q(s,o.obj,a,n,e.parent.globalContext),o.obj=i.Null,{ref:t,action:"updated",obj:o.obj};default:return{action:"none"}}}else{o.params=d;let r=await Q(e,o,s.transformer,c,d.values);return X(r,s),o.obj=r,{ref:t,action:"created",obj:r}}}function q(e,t,r,a,n){var o,s;null===(s=(o=e.transformer.definition).dispose)||void 0===s||s.call(o,{b:t!==i.Null?t:void 0,params:r,cache:a},n)}function X(e,t){e&&e!==i.Null&&(e.tags=t.tags)}function W(e,t){return"function"==typeof e.runInContext?e.runInContext(t):e}function K(e){if(0===e.dependencies.dependsOn.length)return;let t=Object.create(null);for(let r of e.dependencies.dependsOn){if(!r.obj)throw Error("Unresolved dependency.");t[r.transform.ref]=r.obj}return t}function Q(e,t,r,a,n){return t.cache||(t.cache=Object.create(null)),W(r.definition.apply({a,params:n,cache:t.cache,spine:e.spine,dependencies:K(t)},e.parent.globalContext),e.taskCtx)}async function Z(e,t,r,a,n,i,o){return r.definition.update?(t.cache||(t.cache=Object.create(null)),W(r.definition.update({a,oldParams:i,b:n,newParams:o,cache:t.cache,spine:e.spine,dependencies:K(t)},e.parent.globalContext),e.taskCtx)):f.t.UpdateResult.Recreate}var Y=r(4176)},30123:function(e,t,r){r.d(t,{t:function(){return a}});var a,n=r(67604),i=r(81752);!function(e){let t;function r(e,t){return a(e)(t)}function a(e){let r=e||t.root;return void 0!==r.compile?r.compile():void 0!==r.transform&&void 0!==r.status?t.byValue(r).compile():"function"==typeof r?r:t.byRef(r).compile()}e.select=r,e.compile=a;let o={select(e){return r(this,e||this.state)}};function s(e,t){o[e]=function(...e){return t.call(void 0,this,...e)}}function l(e){return Object.create(o,{compile:{writable:!1,configurable:!1,value:e}})}function u(e,t){let r=a(e);return l(()=>e=>{let a=[];for(let n of r(e))for(let r of t(n,e))a.push(r);return a})}function c(e,t){let r=a(e);return l(()=>e=>{let a=[];for(let n of r(e)){let r=t(n,e);r&&a.push(r)}return a})}function d(e){let t=a(e);return l(()=>e=>{let r=new Set,a=[];for(let n of t(e))n&&!r.has(n.transform.ref)&&(r.add(n.transform.ref),a.push(n));return a})}function p(e){let t=a(e);return l(()=>e=>{let r=t(e);return r.length?[r[0]]:[]})}function f(e,t){return u(e,e=>t(e)?[e]:[])}function m(e,t){return f(e,e=>e.status===t)}function h(e,t){return f(e,e=>!!e.transform.tags&&e.transform.tags.indexOf(t)>=0)}function g(e){return u(e,(e,t)=>{let r=[];return n.K.doPreOrder(t.tree,t.tree.transforms.get(e.transform.ref),r,(e,t,r)=>{r.push(e.ref)}),r.map(e=>t.cells.get(e))})}function b(e){return u(e,(e,t)=>{let r=[];return t.tree.children.get(e.transform.ref).forEach(e=>r.push(t.cells.get(e))),r})}function y(e,t){return f(e,e=>!!e.obj&&e.obj.type===t.type)}function x(e,t){return d(c(e,(e,r)=>D(r.tree,r.cells,e.transform.ref,t)))}function S(e,t){return d(c(e,(e,r)=>P(r.tree,r.cells,e.transform.ref,t)))}function T(e,t){return d(c(e,(e,r)=>M(r.tree,r.cells,e.transform.ref,t)))}function C(e,t){return f(e,e=>e.transform.transformer===t)}function O(e,t){return d(c(e,(e,r)=>E(r.tree,r.cells,e.transform.ref,t)))}function I(e,t){return d(c(e,(e,r)=>k(r.tree,r.cells,e.transform.ref,t)))}function A(e){return d(c(e,(e,t)=>t.cells.get(t.tree.transforms.get(e.transform.ref).parent)))}function w(e,t,r,a,n){let o,s=e.transforms.get(r);for(;;){s=e.transforms.get(s.parent);let r=t.get(s.ref);
7319if(r.obj&&a(r)&&(o=r,n)||s.ref===i.E.RootRef)return o}}function D(e,t,r,a){return w(e,t,r,a,!0)}function E(e,t,r,a){return w(e,t,r,a,!1)}function M(e,t,r,a){return D(e,t,r,Array.isArray(a)?e=>a.indexOf(e.transform.transformer)>=0:e=>e.transform.transformer===a)}function P(e,t,r,a){return D(e,t,r,B(a))}function k(e,t,r,a){return E(e,t,r,B(a))}function B(e){return Array.isArray(e)?t=>{for(let r of e)if(r.type===t.obj.type)return!0}:t=>t.obj.type===e.type}function _(e,t,r){if(e.tags){for(let t of e.tags)if(r.tags.has(t)){r.refs[t]=e.ref;break}}return!0}function R(e,t,r){return!(e.tags&&e.tags.indexOf(r.tag)>=0)||(r.ref=e.ref,!1)}function F(e,t,r){if(e.tags){let t=r.tags.size,a=0;for(let n of e.tags)if(r.tags.has(n)&&++a===t){r.refs.push(e);break}}else 0===r.tags.size&&r.refs.push(e)}!function(e){function t(e,t,r){let a=r.cells.get(e.ref);return!a||!a.obj||a.obj.type!==r.type||(r.roots.push(a),!1)}function r(e,t,r){let a=r.cells.get(e.ref);return a&&a.obj&&a.obj.type===r.type&&r.ret.push(a),!0}function a(e,t,r){let a=r.cells.get(e.ref);return a&&a.obj&&a.transform.transformer===r.t&&r.ret.push(a),!0}function o(e,t,r){let a=r.cells.get(e.ref);return a&&"error"===a.status&&a.transform.transformer===r.t&&r.ret.push(a),!0}e.root=l(()=>e=>[e.cells.get(e.tree.root.ref)]),e.byRef=function(...e){return l(()=>t=>{let r=[];for(let a of e){let e=t.cells.get(a);e&&r.push(e)}return r})},e.byValue=function(...e){return l(()=>t=>e)},e.rootsOfType=function(e,r=i.E.RootRef){return l(()=>a=>{let i={roots:[],cells:a.cells,type:e.type};return n.K.doPreOrder(a.tree,a.tree.transforms.get(r),i,t),i.roots})},e.ofType=function(e,t=i.E.RootRef){return l(()=>a=>{let i={ret:[],cells:a.cells,type:e.type};return n.K.doPreOrder(a.tree,a.tree.transforms.get(t),i,r),i.ret})},e.ofTransformer=function(e,t=i.E.RootRef){return l(()=>r=>{let i={ret:[],cells:r.cells,t:e};return n.K.doPreOrder(r.tree,r.tree.transforms.get(t),i,a),i.ret})},e.ofTransformerWithError=function(e,t=i.E.RootRef){return l(()=>r=>{let a={ret:[],cells:r.cells,t:e};return n.K.doPreOrder(r.tree,r.tree.transforms.get(t),a,o),a.ret})}}(t=e.Generators||(e.Generators={})),s("flatMap",u),e.flatMap=u,s("mapObject",c),e.mapObject=c,s("unique",d),e.unique=d,s("first",p),e.first=p,s("filter",f),e.filter=f,s("withStatus",m),e.withStatus=m,s("withTag",h),e.withTag=h,s("subtree",g),e.subtree=g,s("children",b),e.children=b,s("ofType",y),e.ofType=y,s("ancestor",x),e.ancestor=x,s("ancestorOfType",S),e.ancestorOfType=S,s("ancestorWithTransformer",T),e.ancestorWithTransformer=T,s("withTransformer",C),e.withTransformer=C,s("root",O),e.root=O,s("rootOfType",I),e.rootOfType=I,s("parent",A),e.parent=A,e.findAncestor=D,e.findRoot=E,e.findAncestorWithTransformer=M,e.findAncestorOfType=P,e.findRootOfType=k,e.findUniqueTagsInSubtree=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{refs:{},tags:r},_).refs},e.findTagInSubtree=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{ref:void 0,tag:r},R).ref},e.findWithAllTags=function(e,t,r){return n.K.doPreOrder(e,e.transforms.get(t),{refs:[],tags:r},F).refs},e.tryFindDecorator=function e(t,r,a){if(t.transforms.get(r).transformer===a)return t.cells.get(r);let n=t.tree.children.get(r);if(1!==n.size)return;let i=n.first();if(i&&t.transforms.get(i).transformer.definition.isDecorator)return e(t,i,a)},e.getDecorated=function e(t,r){let a=t.tree.children.get(r);if(1!==a.size)return t.cells.get(r);let n=a.first();return n&&t.transforms.get(n).transformer.definition.isDecorator?e(t,n):t.cells.get(r)}}(a||(a={}))},81752:function(e,t,r){r.d(t,{E:function(){return a}});var a,n=r(23492),i=r(85764),o=r(1571);!function(e){function t(e,t,r,a){let n;let o=a&&a.ref?a.ref:i.hb.create22();return a&&a.tags&&(0===(n="string"==typeof a.tags?[a.tags]:a.tags).length?n=void 0:n.sort()),{parent:e,transformer:t,state:(null==a?void 0:a.state)||{},tags:n,ref:o,dependsOn:a&&a.dependsOn,params:r,version:i.hb.create22()}}function r(e,t){return!!e.tags&&e.tags.indexOf(t)>=0}e.RootRef="-=root=-",e.isStateChange=function(e,t){return!!t&&(void 0!==t.isCollapsed&&e.isCollapsed!==t.isCollapsed||void 0!==t.isHidden&&e.isHidden!==t.isHidden||void 0!==t.isGhost&&e.isGhost!==t.isGhost||void 0!==t.isLocked&&e.isLocked!==t.isLocked)},e.assignState=function(e,t){if(!t)return!1;let r=!1;for(let a of Object.keys(t)){let n=t[a];!!n!=!!e[a]&&(r=!0,e[a]=n)}return r},e.syncState=function(e,t){if(!t)return!1;let r=!1;for(let a of Object.keys(t)){let n=t[a];!!n!=!!e[a]&&(r=!0,void 0!==n?e[a]=n:delete e[a])}for(let a of Object.keys(e)){let n=t[a];!!n!=!!e[a]&&(r=!0,void 0!==n?e[a]=n:delete e[a])}return r},e.create=t,e.withParams=function(e,t){return{...e,params:t,version:i.hb.create22()}},e.withState=function(e,t){return t?{...e,state:{...e.state,...t}}:e},e.withTags=function(e,t){let r;return t&&(0===(r="string"==typeof t?[t]:t).length?r=void 0:r.sort()),{...e,tags:r,version:i.hb.create22()}},e.withDependsOn=function(e,t){let r;return t&&(0===(r="string"==typeof t?[t]:t).length?r=void 0:r.sort()),{...e,dependsOn:r,version:i.hb.create22()}}
7319,e.withParent=function(e,t){return{...e,parent:t,version:i.hb.create22()}},e.createRoot=function(r){return t(e.RootRef,n.t.ROOT,{},{ref:e.RootRef,state:r})},e.hasTag=r,e.hasTags=function(e,t){if(!e.tags)return"string"!=typeof t&&0===t.length;if("string"==typeof t)return r(e,t);for(let r of t)if(0>e.tags.indexOf(r))return!1;return!0};let a={};function s(e){return e}e.setParamsHashVersion=function(e){var t,r;let n;try{n=(0,o.H8)(null!==(t=e.params)&&void 0!==t?t:a)}catch(i){let t=e.transformer.definition.customSerialization?e.transformer.definition.customSerialization.toJSON:s;n=(0,o.H8)(t(null!==(r=e.params)&&void 0!==r?r:a))}e.version=n},e.toJSON=function(e){let t;let r=e.transformer.definition.customSerialization?e.transformer.definition.customSerialization.toJSON:s;for(let r of Object.keys(e.state))e.state[r]&&(t||(t={}),t[r]=!0);return{parent:e.parent,transformer:e.transformer.id,params:e.params?r(e.params):void 0,state:t,tags:e.tags,ref:e.ref,dependsOn:e.dependsOn,version:e.version}},e.fromJSON=function(e){let t=n.t.get(e.transformer),r=t.definition.customSerialization?t.definition.customSerialization.fromJSON:s;return{parent:e.parent,transformer:t,params:e.params?r(e.params):void 0,state:e.state||{},tags:e.tags,ref:e.ref,dependsOn:e.dependsOn,version:e.version}}}(a||(a={}))},23492:function(e,t,r){r.d(t,{t:function(){return a}});var a,n=r(81752),i=r(14086),o=r(4176),s=r(75042),l=r(48502);!function(e){var t;let r,a;e.getParamDefinition=function(e,t,r){return e.definition.params?e.definition.params(t,r):{}},e.is=function(e){return!!e&&"function"==typeof e.toAction&&"function"==typeof e.apply},(t=r=e.UpdateResult||(e.UpdateResult={}))[t.Unchanged=0]="Unchanged",t[t.Updated=1]="Updated",t[t.Recreate=2]="Recreate",t[t.Null=3]="Null";let u=new Map,c=new Map;function d(e,t){let{name:r}=t,a=`${e}.${r}`;if(u.has(a)){if(u.get(a).definition===t)return u.get(a);l.Z3||console.warn(`A transform with id '${r}' is already registered. Please pick a unique identifier for your transforms and/or register them only once. This is to ensure that transforms can be serialized and replayed.`)}let s={apply:(e,t,r)=>n.E.create(e,s,t,r),toAction:()=>o.l.fromTransformer(s),namespace:e,id:a,definition:t,createDefaultParams:(e,r)=>t.params?i.e.getDefaultValues(t.params(e,r)):{}};return u.set(a,s),!function(e){for(let t of e.definition.from)if(c.has(t.type)){let r=c.get(t.type);for(let t=0;t<r.length;t++)if(r[t].id===e.id){r[t]=e;return}r.push(e)}else c.set(t.type,[e])}(s),s}e.getAll=function(){return Array.from(u.values())},e.get=function(e){let t=u.get(e);if(!t)throw Error(`A transformer with signature '${e}' is not registered.`);return t},e.fromType=function(e){return c.get(e)||[]},e.create=d,e.factory=function(e){return t=>d(e,t)},e.builderFactory=function(e){return a.build(e)},(a=e.Builder||(e.Builder={})).build=function(e){return t=>r=>d(e,{name:t.name,from:t.from instanceof Array?t.from:[t.from],to:t.to instanceof Array?t.to:[t.to],display:"string"==typeof t.display?{name:t.display}:t.display?t.display:{name:(0,s.kC)(t.name.replace(/[-]/g," "))},params:"object"==typeof t.params?()=>t.params:t.params?t.params:void 0,isDecorator:t.isDecorator,...r})},e.build=function(e){return a.build(e)},e.ROOT=d("build-in",{name:"root",from:[],to:[],display:{name:"Root",description:"For internal use."},apply(){throw Error("should never be applied")},update:()=>r.Unchanged})}(a||(a={}))},67604:function(e,t,r){r.d(t,{K:function(){return a.K}});var a=r(45173);r(41171)},45173:function(e,t,r){r.d(t,{K:function(){return a}});var a,n=r(19394),i=r(81752),o=r(41171);!function(e){class t{get root(){return this.transforms.get(i.E.RootRef)}asTransient(){return new o.t(this)}constructor(e,t,r){this.transforms=e,this.children=t,this.dependencies=r}}function r(e,r,a){return new t(e,r,a)}function a(e){s(this,this.tree.transforms.get(e))}function s(e,t){let r=e.tree.children.get(t.ref);r&&r.size&&r.forEach(a,e),e.f(t,e.tree,e.state)}function l(e,t,r,a){let n={tree:e,state:r,f:a};return s(n,t),n.state}function u(e){c(this,this.tree.transforms.get(e))}function c(e,t){let r=e.f(t,e.tree,e.state);if("boolean"==typeof r&&!r)return;let a=e.tree.children.get(t.ref);a&&a.size&&a.forEach(u,e)}function d(e,t,r,a){let n={tree:e,state:r,f:a};return c(n,t),n.state}
7319function p(e,t,r){r.push(e)}function f(e,t,r){r.push(i.E.toJSON(e))}e.createEmpty=function(e){let t=e||i.E.createRoot();return r((0,n.D5)([[t.ref,t]]),(0,n.D5)([[t.ref,(0,n.hU)()]]),(0,n.D5)())},e.create=r,e.doPostOrder=l,e.doPreOrder=d,e.subtreePostOrder=function(e,t){return l(e,t,[],p)},e.toJSON=function(e){let t=[];return d(e,e.root,t,f),{transforms:t}},e.fromJSON=function(e){let t=(0,n.D5)().asMutable(),a=(0,n.D5)().asMutable(),o=(0,n.D5)().asMutable();for(let r of e.transforms){let e=i.E.fromJSON(r);t.set(e.ref,e),a.has(e.ref)||a.set(e.ref,(0,n.hU)().asMutable()),e.ref!==e.parent&&a.get(e.parent).add(e.ref)}let s=new Set;for(let t of e.transforms){let e=t.ref;if(a.set(e,a.get(e).asImmutable()),t.dependsOn)for(let r of t.dependsOn)s.add(r),o.has(r)?o.get(r).add(e):o.set(r,(0,n.hU)([e]).asMutable())}return s.forEach(e=>{o.set(e,o.get(e).asImmutable())}),r(t.asImmutable(),a.asImmutable(),o.asImmutable())},e.dump=function(e){console.log({tr:e.transforms.keySeq().toArray(),tr1:e.transforms.valueSeq().toArray().map(e=>e.ref),ch:e.children.keySeq().toArray()})},e.subtreeHasRef=function(e,t,r){return!!(e.transforms.has(t)&&e.transforms.has(r))&&function e(t,r,a){if(r===a)return!0;let n=t.children.get(r).values();for(;;){let r=n.next();if(r.done)return!1;if(e(t,r.value,a))return!0}}(e,t,r)},e.getDecoratorRoot=function e(t,r){let a=t.children.get(r);if(1!==a.size)return r;let n=t.transforms.get(a.first());return(null==n?void 0:n.transformer.definition.isDecorator)?e(t,n.ref):r},e.setParamHashVersion=function(e,t){for(let r of t){let t=e.transforms.get(r);t&&i.E.setParamsHashVersion(t)}},e.reuseTransformParams=function(e,t){let r=new Map(t.transforms.map(e=>[e.ref,e]));for(let t of e.transforms){let e=r.get(t.ref);e&&t.transformer===e.transformer&&t.version===e.version&&(t.params=e.params)}}}(a||(a={}))},51493:function(e,t,r){r.d(t,{W:function(){return a}});var a,n=r(81752);!function(e){class t{get current(){return this._current}set current(e){this._current=e}getAncestorOfType(e){if(!this._current)return;let t=this._current;for(;;){if(!(t=this.cells.get(t.transform.parent)).obj)return;if(t.obj.type===e.type)return t.obj;if(t.transform.ref===n.E.RootRef)return}}getRootOfType(e){let t;if(!this._current)return;let r=this._current;for(;;){if(!r.obj)return;if(r.obj.type===e.type&&(t=r),r.transform.ref===n.E.RootRef)return t?t.obj:void 0;r=this.cells.get(r.transform.parent)}}constructor(e){this.cells=e,this._current=void 0}}e.Impl=t,e.getDecoratorChain=function(e,t){let r=e.cells,a=r.get(t),n=[a];for(;null==a?void 0:a.transform.transformer.definition.isDecorator;)n.push(a=r.get(a.transform.parent));return n},e.getRootOfType=function(e,t,r){let a;let i=e.cells.get(r);if(i)for(;;){if(!i.obj)return;if(i.obj.type===t.type&&(a=i),i.transform.ref===n.E.RootRef)return a?a.obj:void 0;i=e.cells.get(i.transform.parent)}}}(a||(a={}))},41171:function(e,t,r){r.d(t,{t:function(){return l}});var a=r(19394),n=r(81752),i=r(45173),o=r(67546),s=r(36111);class l{get childMutations(){return this._childMutations||(this._childMutations=new Map),this._childMutations}get dependencyMutations(){return this._dependencyMutations||(this._dependencyMutations=new Map),this._dependencyMutations}changeNodes(){this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable())}changeChildren(){this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable())}changeDependencies(){this.changedDependencies||(this.changedDependencies=!0,this.dependencies=this.dependencies.asMutable())}get root(){return this.transforms.get(n.E.RootRef)}asTransient(){return this.asImmutable().asTransient()}addChild(e,t){if(this.changeChildren(),this.childMutations.has(e))this.childMutations.get(e).add(t);else{let r=this.children.get(e).asMutable();r.add(t),this.children.set(e,r),this.childMutations.set(e,r)}}removeChild(e,t){if(this.changeChildren(),this.childMutations.has(e))this.childMutations.get(e).remove(t);else{let r=this.children.get(e).asMutable();r.remove(t),this.children.set(e,r),this.childMutations.set(e,r)}}clearRoot(){let e=n.E.RootRef;if(0===this.children.get(e).size)return;this.changeChildren();let t=(0,a.hU)();this.children.set(e,t),this.childMutations.set(e,t)}mutateDependency(e,t,r){let n=this.dependencyMutations.get(e);if(!n){let t=this.dependencies.get(e);if(!t&&"remove"===r)return;this.changeDependencies(),n=t?t.asMutable():(0,a.hU)().asMutable(),this.dependencyMutations.set(e,n),this.dependencies.set(e,n)}"add"===r?n.add(t):n.remove(t)}changeParent(e,t){d(this.transforms,e);let r=this.transforms.get(e);this.removeChild(r.parent,e),this.addChild(t,e),this.changeNodes(),this.transforms.set(e,n.E.withParent(r,t))}add(e){let t=e.ref;this.transforms.has(e.ref)&&this.transforms.get(e.ref).parent!==e.parent&&function(e){throw Error(`Transform '${e}' is already present in the tree.`)}(e.ref);let r=this.children.get(e.parent);if(r||function(e){throw Error(`Parent '${e}' must be present in the tree.`)}(e.parent),r.has(e.ref)||this.addChild(e.parent,e.ref),this.children.has(e.ref)||(this.changedChildren||(this.changedChildren=!0,this.children=this.children.asMutable()),this.children.set(e.ref,(0,a.hU)())),this.changeNodes(),this.transforms.set(t,e),e.dependsOn)for(let r of e.dependsOn)this.mutateDependency(r,t,"add");return this}setParams(e,t){d(this.transforms,e);let r=this.transforms.get(e);return!(0,o.wU)(r.params,t)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,n.E.withParams(r,t)),!0)}setTags(e,t){d(this.transforms,e);let r=this.transforms.get(e),a=n.E.withTags(r,t);return!(0,s.h6)(r.tags,a.tags)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,a),!0)}
7319setDependsOn(e,t){d(this.transforms,e);let r=this.transforms.get(e),a=n.E.withDependsOn(r,t);return!(0,s.h6)(r.dependsOn,a.dependsOn)&&(this.changedNodes||(this.changedNodes=!0,this.transforms=this.transforms.asMutable()),this.transforms.set(r.ref,a),!0)}assignState(e,t){d(this.transforms,e);let r=this.transforms.get(e);if(this._stateUpdates&&this._stateUpdates.has(e))return n.E.assignState(r.state,t),r;{this._stateUpdates||(this._stateUpdates=new Set),this._stateUpdates.add(r.ref),this.changeNodes();let a=n.E.withState(r,t);return this.transforms.set(e,a),a}}remove(e){let t=this.transforms.get(e);if(!t)return[];let r=i.K.subtreePostOrder(this,t);if(e===n.E.RootRef){if(r.pop(),0===r.length)return r;this.clearRoot()}else{if(0===r.length)return r;this.removeChild(t.parent,t.ref)}for(let e of(this.changeNodes(),this.changeChildren(),r))this.transforms.delete(e.ref),this.children.delete(e.ref),this._childMutations&&this._childMutations.delete(e.ref);let a=[];for(let e of r){if(e.dependsOn)for(let t of e.dependsOn)this.transforms.has(t)&&this.mutateDependency(t,e.ref,"remove");if(this.dependencies.has(e.ref)){let t=this.dependencies.get(e.ref).toArray();for(let r of(this.changeDependencies(),this.dependencies.delete(e.ref),this._dependencyMutations&&this._dependencyMutations.delete(e.ref),t))if(this.transforms.has(r))for(let e of this.remove(r))a[a.length]=e}}for(let e of a)r[r.length]=e;return r}asImmutable(){return this.changedNodes||this.changedChildren||this._childMutations?(this._childMutations&&this._childMutations.forEach(u,this.children),this._dependencyMutations&&this._dependencyMutations.forEach(c,this.dependencies),i.K.create(this.changedNodes?this.transforms.asImmutable():this.transforms,this.changedChildren?this.children.asImmutable():this.children,this.changedDependencies?this.dependencies.asImmutable():this.dependencies)):this.tree}constructor(e){this.tree=e,this.transforms=this.tree.transforms,this.children=this.tree.children,this.dependencies=this.tree.dependencies,this.changedNodes=!1,this.changedChildren=!1,this.changedDependencies=!1,this._childMutations=void 0,this._dependencyMutations=void 0,this._stateUpdates=void 0}}function u(e,t){this.set(t,e.asImmutable())}function c(e,t){0===e.size?this.delete(t):this.set(t,e.asImmutable())}function d(e,t){if(!e.has(t))throw Error(`Node '${t}' is not present in the tree.`)}},1813:function(e,t,r){r.d(t,{z:function(){return s}});var a=r(67589),n=r(30502),i=r(20694),o=r(37893);function s(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},function(e){var t;let r;function a(e){switch(e){case"one":return r.One;case"two":return r.Two;case"three":return r.Three;case"four":return r.Four;case"five":return r.Five;case"six":return r.Six}}e.is=o.c.has,(t=r=e.Flag||(e.Flag={}))[t.None=0]="None",t[t.One=1]="One",t[t.Two=2]="Two",t[t.Three=4]="Three",t[t.Four=8]="Four",t[t.Five=16]="Five",t[t.Six=32]="Six",e.create=function(e){return o.c.create(e)},e.Names={one:r.One,two:r.Two,three:r.Three,four:r.Four,five:r.Five,six:r.Six},e.isName=function(t){return t in e.Names},e.fromName=a,e.fromNames=function(e){let t=r.None;for(let r=0,n=e.length;r<n;++r)t|=a(e[r]);return t},e.toNames=function(t){let a=[];return e.is(t,r.One)&&a.push("one"),e.is(t,r.Two)&&a.push("two"),e.is(t,r.Three)&&a.push("three"),e.is(t,r.Four)&&a.push("four"),e.is(t,r.Five)&&a.push("five"),e.is(t,r.Six)&&a.push("six"),a}}(e.Groups||(e.Groups={})),e.areEqual=function(e,t){if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].groups!==t.layers[r].groups||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,groups:i}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,groups:i})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,groups:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,groups:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,groups:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,groups:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,groups:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,groups:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,groups:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,groups:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,groups:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,groups:i})}return{kind:"element-loci",layers:t}}}(s||(s={}))},20178:function(e,t,r){r.d(t,{U:function(){return a}});var a,n=r(70371),i=r(30502),o=r(96985),s=r(14086),l=r(79455),u=r(28253);let c=(0,n.Il)(13421772),d={},p={name:"carbohydrate-symbol",label:"Carbohydrate Symbol",category:u.J.Residue,factory:function e(t,r){let a;if(t.structure){let{elements:e,getElementIndices:r}=t.structure.carbohydrates,n=(t,a)=>{if(!i.Unit.isAtomic(t))return c;let n=r(t,a);return n.length>0?e[n[0]].component.color:c};a=(e,t)=>t?o.Xp.Secondary:i.StructureElement.Location.is(e)?n(e.unit,e.element):i.Bond.isLocation(e)?n(e.aUnit,e.aUnit.elements[e.aIndex]):c}else a=()=>c;return{factory:e,granularity:"group",color:a,props:r,description:"Assigns colors according to the Symbol Nomenclature for Glycans (SNFG).",legend:(0,l.Z)(o.i$)}},getParams:function(e){return d},defaultValues:s.e.getDefaultValues(d),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>i.Model.hasCarbohydrate(e))};var f=r(11204),m=r(85764),h=r(60843),g=r(16454),b=r(67330),y=r(62713);let x=(0,n.Il)(13421772),S={...(0,y.r)({type:"colors",colorList:"red-yellow-blue"})},T={name:"element-index",label:"Element Index",category:u.J.Atom,factory:function e(t,r){let a,n;if(t.structure){let{units:e}=t.structure.root,o=e.length,s=new Map,l=new Map,u=0;for(let t=0;t<o;++t)s.set(t,u),u+=e[t].elements.length,l.set(e[t].id,t);let c=(0,y.X)(u,r);n=c.legend,a=t=>{if(i.StructureElement.Location.is(t)){let r=l.get(t.unit.id),a=b.h.findPredecessorIndex(e[r].elements,t.element);return c.color(s.get(r)+a)}if(i.Bond.isLocation(t)){let r=l.get(t.aUnit.id),a=b.h.findPredecessorIndex(e[r].elements,t.aUnit.elements[t.aIndex]);return c.color(s.get(r)+a)}return x}}else a=()=>x;return{factory:e,granularity:"groupInstance",preferSmoothing:!0,color:a,props:r,description:"Gives every element (atom or coarse sphere/gaussian) a unique color based on the position (index) of the element in the list of elements in the structure.",legend:n}},getParams:function(e){return S},defaultValues:s.e.getDefaultValues(S),isApplicable:e=>!!e.structure};var C=r(34602),O=r(67546);function I(e){let t={};return(0,O.mt)(e,(r,a)=>{t[a]=s.e.Color(e[a])}),t}var A=r(54521);let w=(0,n.Il)(16448250),D=(0,n.Il)(16715021),E={...(0,y.r)({type:"colors",colorList:"many-distinct"}),overrideWater:s.e.Boolean(!1,{description:"Override the color for water molecules."}),waterColor:s.e.Color(D,{hideIf:e=>!e.overrideWater,description:"Color for water molecules (if overrideWater is true)."})};function M(e,t){return`${e}|${t}`}function P(e,t){let r,a;
7319if(e.structure){let n=i.StructureElement.Location.create(e.structure.root),o=function(e){let t=new WeakMap,r=0;for(let a=0,n=e.models.length;a<n;++a){let n=e.models[a].sourceData;t.has(n)||t.set(n,r++)}return t}(e.structure),s=function(e,t){var r;let a=new Map;for(let n=0,i=e.models.length;n<i;++n){let i=null!==(r=t.get(e.models[n].sourceData))&&void 0!==r?r:-1,{label_entity_id:o}=e.models[n].atomicHierarchy.chains;for(let e=0,t=o.rowCount;e<t;++e){let t=M(o.value(e),i);a.has(t)||a.set(t,a.size)}let{coarseHierarchy:s}=e.models[n];if(s.isDefined){let{entity_id:e}=s.spheres;for(let t=0,r=e.rowCount;t<r;++t){let r=M(e.value(t),i);a.has(r)||a.set(r,a.size)}let{entity_id:t}=s.gaussians;for(let e=0,r=t.rowCount;e<r;++e){let r=M(t.value(e),i);a.has(r)||a.set(r,a.size)}}}return a}(e.structure.root,o),l=Array.from(s.keys()),u=(0,y.X)(s.size,t,{valueLabel:e=>l[e]});a=u.legend,r=e=>{var r;let a;if(i.StructureElement.Location.is(e))a=e;else{if(!i.Bond.isLocation(e))return w;n.unit=e.aUnit,n.element=e.aUnit.elements[e.aIndex],a=n}let l=function(e){switch(e.unit.kind){case i.Unit.Kind.Atomic:return i.StructureProperties.chain.label_entity_id(e);case i.Unit.Kind.Spheres:case i.Unit.Kind.Gaussians:return i.StructureProperties.coarse.entity_id(e)}}(a),c=null!==(r=o.get(a.unit.model.sourceData))&&void 0!==r?r:-1;if(t.overrideWater){let e=a.unit.model.entities;if("water"===e.data.type.value(e.getEntityIndex(l)))return t.waterColor}let d=M(l,c),p=s.get(d);return void 0===p?w:u.color(p)}}else r=()=>w;return{factory:P,granularity:"group",color:r,props:t,description:"Gives every chain a color based on its `label_entity_id` value.",legend:a}}let k={name:"entity-id",label:"Entity Id",category:u.J.Chain,factory:P,getParams:function(e){return s.e.clone(E)},defaultValues:s.e.getDefaultValues(E),isApplicable:e=>!!e.structure};var B=r(97667),_=r(24343),R=r(61445),F=r(66939),L=r(12618);let z="dark-2",N=(0,n.Il)(16448250),G={...(0,y.r)({type:"colors",colorList:z})};function U(e,t,r,a,n,i,o,s){let{entity_id:l,pdbx_src_id:u,pdbx_beg_seq_num:c,pdbx_end_seq_num:d}=n;for(let m=0,h=n._rowCount;m<h;++m){var p,f;let n,h;let g=l.value(m),b=`${r}|${g}`;if(e.has(b))n=e.get(b);else{let t=a.entities.getEntityIndex(g);n=new Int16Array(a.sequence.sequences[t].sequence.length),e.set(b,n)}let y=o?o.value(m):"",x=s?s.value(m)[0]:"",S=(p=i.value(m),f=u.value(m),`${r}|${g}|${p}|${x||y||f}`),T=c.valueKind(m)===_.s.ValueKinds.Present?c.value(m):1,C=d.valueKind(m)===_.s.ValueKinds.Present?d.value(m):n.length;t.has(S)?h=t.get(S):(h=t.size+1,t.set(S,h));for(let e=T;e<=C;++e)n[e-1]=h}}function V(e){let t=new Map,r=new Map;for(let a=0,n=e.length;a<n;++a){let n=e[a];if(!L.rg.is(n.sourceData))continue;let{entity_src_gen:i,entity_src_nat:o,pdbx_entity_src_syn:s}=n.sourceData.data.db;U(t,r,a,n,i,i.pdbx_gene_src_scientific_name,i.plasmid_name,i.pdbx_gene_src_gene),U(t,r,a,n,o,o.pdbx_organism_scientific,o.pdbx_plasmid_name),U(t,r,a,n,s,s.organism_scientific)}return{seqToSrcByModelEntity:t,srcKeySerialMap:r}}function j(e,t){let r,a;if(e.structure){let n;let o=i.StructureElement.Location.create(e.structure),{models:s}=e.structure.root,{seqToSrcByModelEntity:l,srcKeySerialMap:u}=V(s),c=(n=0,Array.from(u.keys()).map(e=>{let t=e.split("|"),r=t[2],a=(0,R.U)(t[3])?`Unnamed ${++n}`:t[3];return`${a}${r?` (${r})`:""}`})),d=(0,y.X)(u.size,t,{valueLabel:e=>c[e]});a=d.legend;let p=e=>{let t=s.indexOf(e.unit.model),r=i.StructureProperties.entity.id(e),a=`${t}|${r}`,n=l.get(a);if(!n)return N;{let t=n[i.StructureProperties.residue.label_seq_id(e)-1]-1;return -1===t?N:d.color(t)}};r=e=>i.StructureElement.Location.is(e)?p(e):i.Bond.isLocation(e)?(o.unit=e.aUnit,o.element=e.aUnit.elements[e.aIndex],p(o)):N}else r=()=>N;return{factory:j,granularity:"group",color:r,props:t,description:"Gives ranges of a polymer chain a color based on the entity source it originates from (e.g. gene, plasmid, organism).",legend:a}}let H={name:"entity-source",label:"Entity Source",category:u.J.Chain,factory:j,getParams:function(e){let t=s.e.clone(G);return e.structure&&V(e.structure.root.models).srcKeySerialMap.size>F.wT[z].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(z).list}}),t},defaultValues:s.e.getDefaultValues(G),isApplicable:e=>!!e.structure},q=(0,n.Il)(13421772),X={...(0,y.r)({type:"colors",colorList:"many-distinct"})};function W(e,t){var r;let a,n;let o=-1;if(e.structure){let s=(null!==(r=i.Model.MaxIndex.get(e.structure.models[0]).value)&&void 0!==r?r:-1)+1;o=s;let l=(0,y.X)(s,t);n=l.legend,a=e=>i.StructureElement.Location.is(e)?l.color(i.Model.Index.get(e.unit.model).value||0):i.Bond.isLocation(e)?l.color(i.Model.Index.get(e.aUnit.model).value||0):q}else a=()=>q;return{factory:W,granularity:"instance",color:a,props:t,contextHash:o,description:"Gives every model a unique color based on its index.",legend:n}}let K={name:"model-index",label:"Model Index",category:u.J.Chain,factory:W,getParams:function(e){return s.e.clone(X)},defaultValues:s.e.getDefaultValues(X),isApplicable:e=>!!e.structure&&e.structure.elementCount>0},Q=(0,n.Il)(13421772),Z={...(0,y.r)({type:"colors",colorList:"many-distinct"})};function Y(e,t){var r;let a,n;let o=-1;if(e.structure){let s=(null!==(r=i.Structure.MaxIndex.get(e.structure).value)&&void 0!==r?r:-1)+1;o=s;let l=(0,y.X)(s,t);n=l.legend,a=e=>i.StructureElement.Location.is(e)?l.color(i.Structure.Index.get(e.structure).value||0):i.Bond.isLocation(e)?l.color(i.Structure.Index.get(e.aStructure).value||0):Q}else a=()=>Q;return{factory:Y,granularity:"instance",color:a,props:t,contextHash:o,description:"Gives every structure a unique color based on its index.",legend:n}}let $={name:"structure-index",label:"Structure Index",category:u.J.Chain,factory:Y,getParams:function(e){return s.e.clone(Z)},defaultValues:s.e.getDefaultValues(Z),isApplicable:e=>!!e.structure&&e.structure.elementCount>0},J="dark-2",ee=(0,n.Il)(13421772),et={...(0,y.r)({type:"colors",colorList:J})};function er(e,t){let r,a;
7319if(e.structure){let{units:n}=e.structure.root,o=(0,y.X)(n.length,t);a=o.legend;let s=new Map;for(let e=0,t=n.length;e<t;++e)s.set(n[e].id,o.color(e));r=e=>i.StructureElement.Location.is(e)?s.get(e.unit.id):i.Bond.isLocation(e)?s.get(e.aUnit.id):ee}else r=()=>ee;return{factory:er,granularity:"instance",color:r,props:t,description:"Gives every chain instance (single chain or collection of single elements) a unique color based on the position (index) of the chain in the list of chains in the structure.",legend:a}}let ea={name:"unit-index",label:"Chain Instance",category:u.J.Chain,factory:er,getParams:function(e){let t=s.e.clone(et);return e.structure&&e.structure.root.units.length>F.wT[J].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(J).list}}),t},defaultValues:s.e.getDefaultValues(et),isApplicable:e=>!!e.structure};var en=r(1571);let ei=(0,n.Il)(13421772),eo={...(0,y.r)({type:"colors",colorList:"purples"})};function es(e,t){var r,a;let n,o;let s=-1;if(e.structure){let{models:l}=e.structure.root,u=0;for(let e of l)u=Math.max(u,(null===(r=i.Model.TrajectoryInfo.get(e))||void 0===r?void 0:r.size)||0);let c=[u],d=(0,y.X)(u,t);o=d.legend;let p=new Map;for(let e=0,t=l.length;e<t;++e){let t=(null===(a=i.Model.TrajectoryInfo.get(l[e]))||void 0===a?void 0:a.index)||0;p.set(t,d.color(t)),c.push(t)}s=(0,en.nF)(c),n=e=>i.StructureElement.Location.is(e)?p.get(i.Model.TrajectoryInfo.get(e.unit.model).index):i.Bond.isLocation(e)?p.get(i.Model.TrajectoryInfo.get(e.aUnit.model).index):ei}else n=()=>ei;return{factory:es,granularity:"instance",color:n,props:t,contextHash:s,description:"Gives every model (frame) a unique color based on the index in its trajectory.",legend:o}}let el={name:"trajectory-index",label:"Trajectory Index",category:u.J.Chain,factory:es,getParams:function(e){return s.e.clone(eo)},defaultValues:s.e.getDefaultValues(eo),isApplicable:e=>!!e.structure&&e.structure.elementCount>0&&i.Model.TrajectoryInfo.get(e.structure.models[0]).size>1},eu=(0,n.E)({H:16777215,D:16777152,T:16777120,HE:14286847,LI:13402367,BE:12779264,B:16758197,C:9474192,N:3166456,O:16715021,F:9494608,NE:11789301,NA:11230450,MG:9109248,AL:12560038,SI:1578e4,P:16744448,S:16777008,CL:2093087,AR:8442339,K:9388244,CA:4062976,SC:15132390,TI:12567239,V:10921643,CR:9083335,MN:10255047,FE:14706227,CO:15765664,NI:5296208,CU:13140019,ZN:8224944,GA:12750735,GE:6721423,AS:12419299,SE:16752896,BR:10889513,KR:6076625,RB:7351984,SR:65280,Y:9764863,ZR:9756896,NB:7586505,MO:5551541,TC:3907230,RU:2396047,RH:687500,PD:27013,AG:12632256,CD:16767375,IN:10909043,SN:6717568,SB:10380213,TE:13924864,I:9699476,XE:9699476,CS:5707663,BA:51456,LA:7394559,CE:16777159,PR:14286791,ND:13107143,PM:10747847,SM:9437127,EU:6422471,GD:4587463,TB:3211207,DY:2097095,HO:65436,ER:58997,TM:54354,YB:48952,LU:43812,HF:5096191,TA:5089023,W:2200790,RE:2522539,OS:2516630,IR:1528967,PT:13684960,AU:16765219,HG:12105936,TL:10900557,PB:5724513,BI:10375093,PO:11230208,AT:7688005,RN:4358806,FR:4325478,RA:32e3,AC:7384058,TH:47871,PA:41471,U:36863,NP:33023,PU:27647,AM:5528818,CM:7888099,BK:9064419,CF:10565332,ES:11739092,FM:11739066,MD:11734438,NO:12389767,LR:13041766,RF:13369433,DB:13697103,SG:14221381,BH:14680120,HS:15073326,MT:15400998,DS:16777215,RG:16777215,CN:16777215,UUT:16777215,FL:16777215,UUP:16777215,LV:16777215,UUH:16777215}),ec=(0,n.Il)(16777215),ed={carbonColor:s.e.MappedStatic("chain-id",{"chain-id":s.e.Group(g.NT),"unit-index":s.e.Group(et,{label:"Chain Instance"}),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"operator-name":s.e.Group(A.A4),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"trajectory-index":s.e.Group(eo),uniform:s.e.Group(f.QG),"element-symbol":s.e.EmptyGroup()},{description:"Use chain-id coloring for carbon atoms."}),saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(.2,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eu))})};function ep(e,t){var r;let a=(0,C.JM)("default"===t.colors.name?eu:t.colors.params,t.saturation,t.lightness),n=function(e,t){switch(t.name){case"chain-id":return(0,g.Lf)(e,t.params);case"unit-index":return er(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"operator-name":return(0,A.DL)(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"trajectory-index":return es(e,t.params);case"uniform":return(0,f.qY)(e,t.params);case"element-symbol":return;default:(0,B.UT)(t)}}(e,t.carbonColor),o=null==n?void 0:n.color,s=null!==(r=null==n?void 0:n.contextHash)&&void 0!==r?r:-1;function u(e,t){return o&&"C"===e?o(t,!1):function(e,t){let r=e[t];return void 0===r?ec:r}(a,e)}return{factory:ep,granularity:"operator-name"===t.carbonColor.name||"unit-index"===t.carbonColor.name?"groupInstance":"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){
7319if(i.Unit.isAtomic(e.unit)){let{type_symbol:t}=e.unit.model.atomicHierarchy.atoms;return u(t.value(e.element),e)}}else if(i.Bond.isLocation(e)&&i.Unit.isAtomic(e.aUnit)){let{type_symbol:t}=e.aUnit.model.atomicHierarchy.atoms;return u(t.value(e.aUnit.elements[e.aIndex]),e)}return ec},props:t,contextHash:s,description:"Assigns a color to every atom according to its chemical element.",legend:(0,l.Z)(Object.keys(a).map(e=>[e,a[e]]))}}let ef={name:"element-symbol",label:"Element Symbol",category:u.J.Atom,factory:ep,getParams:function(e){return s.e.clone(ed)},defaultValues:s.e.getDefaultValues(ed),isApplicable:e=>!!e.structure};var em=r(91044),eh=r(57871);let eg=(0,n.E)({water:3697840,ion:15729279,protein:12496596,RNA:16629894,DNA:12540695,PNA:4367514,saccharide:8374655}),ev=(0,n.Il)(16777113),eb={saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eg))})};function ey(e,t,r){switch((0,eh.Ut)(t,r)){case em.MoleculeType.Water:return e.water;case em.MoleculeType.Ion:return e.ion;case em.MoleculeType.Protein:return e.protein;case em.MoleculeType.RNA:return e.RNA;case em.MoleculeType.DNA:return e.DNA;case em.MoleculeType.PNA:return e.PNA;case em.MoleculeType.Saccharide:return e.saccharide}return ev}function ex(e,t){let r=(0,C.JM)("default"===t.colors.name?eg:t.colors.params,t.saturation,t.lightness);return{factory:ex,granularity:"group",color:function(e){return i.StructureElement.Location.is(e)?ey(r,e.unit,e.element):i.Bond.isLocation(e)?ey(r,e.aUnit,e.aUnit.elements[e.aIndex]):ev},props:t,description:"Assigns a color based on the molecule type of a residue.",legend:(0,l.Z)(Object.keys(r).map(e=>[e,r[e]]).concat([["Other/unknown",ev]]))}}let eS={name:"molecule-type",label:"Molecule Type",category:u.J.Residue,factory:ex,getParams:function(e){return eb},defaultValues:s.e.getDefaultValues(eb),isApplicable:e=>!!e.structure};var eT=r(29156);let eC="dark-2",eO=(0,n.Il)(16448250),eI={...(0,y.r)({type:"colors",colorList:eC})};function eA(e){switch(e.kind){case i.Unit.Kind.Atomic:return i.StructureProperties.chain.label_asym_id;case i.Unit.Kind.Spheres:case i.Unit.Kind.Gaussians:return i.StructureProperties.coarse.asym_id}}function ew(e){let t=new Map;for(let r=0,a=e.unitSymmetryGroups.length;r<a;++r){let a=e.unitSymmetryGroups[r].units[0],{model:n}=a;if(i.Unit.isAtomic(a)){let{chainAtomSegments:e,chains:r}=n.atomicHierarchy,i=eT.v.transientSegments(e,a.elements);for(;i.hasNext;){let{index:e}=i.move(),a=r.label_entity_id.value(e),o=n.entities.getEntityIndex(a);if("polymer"===n.entities.data.type.value(o)){let a=r.label_asym_id.value(e);t.has(a)||t.set(a,t.size)}}}else if(i.Unit.isCoarse(a)){let{chainElementSegments:e,asym_id:r,entity_id:o}=i.Unit.isSpheres(a)?n.coarseHierarchy.spheres:n.coarseHierarchy.gaussians,s=eT.v.transientSegments(e,a.elements);for(;s.hasNext;){let{index:a}=s.move(),i=e.offsets[a],l=o.value(i),u=n.entities.getEntityIndex(l);if("polymer"===n.entities.data.type.value(u)){let e=r.value(i);t.has(e)||t.set(e,t.size)}}}}return t}let eD={name:"polymer-id",label:"Polymer Chain Id",category:u.J.Chain,factory:function e(t,r){let a,n;if(t.structure){let e=i.StructureElement.Location.create(t.structure),o=ew(t.structure.root),s=Array.from(o.keys()),l=(0,y.X)(o.size,r,{valueLabel:e=>s[e]});n=l.legend,a=t=>{let r;if(i.StructureElement.Location.is(t)){let e=eA(t.unit);r=o.get(e(t))}else if(i.Bond.isLocation(t)){let a=eA(t.aUnit);e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex],r=o.get(a(e))}return void 0===r?eO:l.color(r)}}else a=()=>eO;return{factory:e,granularity:"group",color:a,props:r,description:"Gives every polymer chain a color based on its `asym_id` value.",legend:n}},getParams:function(e){let t=s.e.clone(eI);return e.structure&&ew(e.structure.root).size>F.wT[eC].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(eC).list}}),t},defaultValues:s.e.getDefaultValues(eI),isApplicable:e=>!!e.structure},eE="dark-2",eM=(0,n.Il)(13421772),eP={...(0,y.r)({type:"colors",colorList:eE})};function ek(e){let t=0,{units:r}=e;for(let e=0,a=r.length;e<a;++e)r[e].polymerElements.length>0&&++t;return t}let eB={name:"polymer-index",label:"Polymer Chain Instance",category:u.J.Chain,factory:function e(t,r){let a,n;if(t.structure){let e=(0,y.X)(ek(t.structure.root),r);n=e.legend;let{units:o}=t.structure.root,s=new Map;for(let t=0,r=0,a=o.length;t<a;++t)o[t].polymerElements.length>0&&(s.set(o[t].id,e.color(r)),++r);
7319a=e=>{let t;return i.StructureElement.Location.is(e)?t=s.get(e.unit.id):i.Bond.isLocation(e)&&(t=s.get(e.aUnit.id)),void 0!==t?t:eM}}else a=()=>eM;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every polymer chain instance a unique color based on the position (index) of the polymer in the list of polymers in the structure.",legend:n}},getParams:function(e){let t=s.e.clone(eP);return e.structure&&ek(e.structure.root)>F.wT[eE].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(eE).list}}),t},defaultValues:s.e.getDefaultValues(eP),isApplicable:e=>!!e.structure},e_=(0,n.E)({ALA:9240460,ARG:124,ASN:16743536,ASP:10485826,CYS:16777072,GLN:16731212,GLU:6684672,GLY:15658734,HIS:7368959,ILE:19456,LEU:4546117,LYS:4671416,MET:12099650,PHE:5459026,PRO:5395026,SER:16740418,THR:12078080,TRP:5195264,TYR:9203788,VAL:16747775,A:14423100,G:3329330,I:10145074,C:16766720,T:4286945,U:4251856,DA:14423100,DG:3329330,DI:10145074,DC:16766720,DT:4286945,DU:4251856,APN:14423100,GPN:3329330,CPN:16766720,TPN:4286945}),eR=(0,n.Il)(16711935),eF={saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(1,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(e_))})};function eL(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function ez(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function eN(e,t){let r=e[t];return void 0===r?eR:r}function eG(e,t){let r=(0,C.JM)("default"===t.colors.name?e_:t.colors.params,t.saturation,t.lightness);return{factory:eG,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){if(i.Unit.isAtomic(e.unit))return eN(r,eL(e.unit,e.element));{let t=ez(e.unit,e.element);if(t)return eN(r,t)}}else if(i.Bond.isLocation(e)){if(i.Unit.isAtomic(e.aUnit))return eN(r,eL(e.aUnit,e.aUnit.elements[e.aIndex]));{let t=ez(e.aUnit,e.aUnit.elements[e.aIndex]);if(t)return eN(r,t)}}return eR},props:t,description:"Assigns a color to every residue according to its name.",legend:(0,l.Z)(Object.keys(r).map(e=>[e,r[e]]).concat([["Unknown",eR]]))}}let eU={name:"residue-name",label:"Residue Name",category:u.J.Residue,factory:eG,getParams:function(e){return eF},defaultValues:s.e.getDefaultValues(eF),isApplicable:e=>!!e.structure},eV=(0,n.E)({ARG:255,ASP:16711680,GLU:16711680,HIS:3392505,LYS:255,ALA:16777215,ASN:16777215,CYS:16777215,GLN:16777215,GLY:16777215,ILE:16777215,LEU:16777215,MET:16777215,PHE:16777215,PRO:16777215,SER:16777215,THR:16777215,TRP:16777215,TYR:16777215,VAL:16777215,MSE:16777215,SEP:16777215,TPO:16777215,PTR:16777215,PCA:16777215,HYP:16777215,HSD:16777215,HSE:16777215,HSP:255,LSN:16777215,ASPP:16777215,GLUP:16777215,HID:16777215,HIE:16777215,HIP:255,LYN:16777215,ASH:16777215,GLH:16777215,A:16777215,G:16777215,I:16777215,C:16777215,T:16777215,U:16777215,DA:16777215,DG:16777215,DI:16777215,DC:16777215,DT:16777215,DU:16777215,APN:16777215,GPN:16777215,CPN:16777215,TPN:16777215}),ej=(0,n.Il)(16711935),eH={method:s.e.MappedStatic("by-name",{"by-name":s.e.Group({saturation:s.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eV))})},{isFlat:!0})})};function eq(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function eX(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function eW(e,t){let r=e[t];return void 0===r?ej:r}let eK={name:"residue-charge",label:"Residue Charge",category:u.J.Residue,factory:function e(t,r){let{saturation:a,lightness:n,colors:o}=r.method.params,s=(0,C.JM)("default"===r.method.params.colors.name?eV:o.params,a,n);return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){
7319if(i.Unit.isAtomic(e.unit))return eW(s,eq(e.unit,e.element));{let t=eX(e.unit,e.element);if(t)return eW(s,t)}}else if(i.Bond.isLocation(e)){if(i.Unit.isAtomic(e.aUnit))return eW(s,eq(e.aUnit,e.aUnit.elements[e.aIndex]));{let t=eX(e.aUnit,e.aUnit.elements[e.aIndex]);if(t)return eW(s,t)}}return ej},props:r,description:"Assigns a color to every residue based on its charge state.",legend:(0,l.Z)(Object.keys(s).map(e=>[e,s[e]]).concat([["Unknown",ej]]))}},getParams:function(e){return s.e.clone(eH)},defaultValues:s.e.getDefaultValues(eH),isApplicable:e=>!!e.structure};var eQ=r(29724);let eZ=(0,n.E)({alphaHelix:16711808,threeTenHelix:10485888,piHelix:6291584,betaTurn:6324479,betaStrand:16762880,coil:16777215,bend:6740169,turn:45670,dna:11403518,rna:16580962,carbohydrate:10921722}),eY=(0,n.Il)(8421504),e$={saturation:s.e.Numeric(-1,{min:-6,max:6,step:.1}),lightness:s.e.Numeric(0,{min:-6,max:6,step:.1}),colors:s.e.MappedStatic("default",{default:s.e.EmptyGroup(),custom:s.e.Group(I(eZ))})};function eJ(e,t,r,a){let n=em.SecondaryStructureType.create(em.SecondaryStructureType.Flag.None);if(a&&i.Unit.isAtomic(t)){let e=a.get(t.invariantId);e&&(n=e.type[e.getIndex(t.residueIndex[r])])}if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Helix))return em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Helix3Ten)?e.threeTenHelix:em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.HelixPi)?e.piHelix:e.alphaHelix;if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Beta))return e.betaStrand;if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Bend))return e.bend;{if(em.SecondaryStructureType.is(n,em.SecondaryStructureType.Flag.Turn))return e.turn;let a=(0,eh.Ut)(t,r);if(a===em.MoleculeType.DNA)return e.dna;if(a===em.MoleculeType.RNA)return e.rna;if(a===em.MoleculeType.Saccharide)return e.carbohydrate;if(a===em.MoleculeType.Protein)return e.coil}return eY}function e0(e,t){let r=e.structure&&eQ.N.get(e.structure),a=r?(0,en.TO)(r.id,r.version):-1,n=(0,C.JM)("default"===t.colors.name?eZ:t.colors.params,t.saturation,t.lightness);return{factory:e0,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?eJ(n,e.unit,e.element,null==r?void 0:r.value):i.Bond.isLocation(e)?eJ(n,e.aUnit,e.aUnit.elements[e.aIndex],null==r?void 0:r.value):eY},props:t,contextHash:a,description:"Assigns a color based on the type of secondary structure and basic molecule type.",legend:(0,l.Z)(Object.keys(n).map(e=>[e,n[e]]).concat([["Other",eY]]))}}let e1={name:"secondary-structure",label:"Secondary Structure",category:u.J.Residue,factory:e0,getParams:function(e){return e$},defaultValues:s.e.getDefaultValues(e$),isApplicable:e=>!!e.structure,ensureCustomProperties:{attach:(e,t)=>t.structure?eQ.N.attach(e,t.structure,void 0,!0):Promise.resolve(),detach:e=>e.structure&&eQ.N.ref(e.structure,!1)}},e2=(0,n.Il)(13421772),e3={list:s.e.ColorList("turbo-no-black",{presetKind:"scale"})};function e4(e,t){let{model:r}=e;switch(e.kind){case i.Unit.Kind.Atomic:let a=r.atomicHierarchy.residueAtomSegments.index[t];return r.atomicHierarchy.residues.label_seq_id.value(a);case i.Unit.Kind.Spheres:return Math.round((r.coarseHierarchy.spheres.seq_id_begin.value(t)+r.coarseHierarchy.spheres.seq_id_end.value(t))/2);case i.Unit.Kind.Gaussians:return Math.round((r.coarseHierarchy.gaussians.seq_id_begin.value(t)+r.coarseHierarchy.gaussians.seq_id_end.value(t))/2)}}function e5(e,t){let{model:r}=e,a="";switch(e.kind){case i.Unit.Kind.Atomic:let n=r.atomicHierarchy.chainAtomSegments.index[t];a=r.atomicHierarchy.chains.label_entity_id.value(n);break;case i.Unit.Kind.Spheres:a=r.coarseHierarchy.spheres.entity_id.value(t);break;case i.Unit.Kind.Gaussians:a=r.coarseHierarchy.gaussians.entity_id.value(t)}if(""===a)return 0;let o=r.entities.getEntityIndex(a);if(-1===o)return 0;let s=r.sequence.byEntityKey[o];return void 0===s?0:s.sequence.length}function e6(e,t){let r=n.qe.create({listOrName:t.list.colors,minLabel:"Start",maxLabel:"End"});return{factory:e6,granularity:"group",preferSmoothing:!0,color:e=>{if(i.StructureElement.Location.is(e)){let{unit:t,element:a}=e,n=e4(t,a);if(n>0){let e=e5(t,a);if(e)return r.setDomain(0,e-1),r.color(n)}}else if(i.Bond.isLocation(e)){let{aUnit:t,aIndex:a}=e,n=e4(t,t.elements[a]);if(n>0){let e=e5(t,t.elements[a]);if(e)return r.setDomain(0,e-1),r.color(n)}}return e2},props:t,description:"Gives every polymer residue a color based on its `seq_id` value.",legend:r?r.legend:void 0}}let e8={name:"sequence-id",label:"Sequence Id",category:u.J.Residue,factory:e6,getParams:function(e){return e3},defaultValues:s.e.getDefaultValues(e3),isApplicable:e=>!!e.structure};var e7=r(62590);let e9=(0,n.Il)(16777113),te={domain:s.e.Interval([0,100]),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})};function tt(e,t){return i.Unit.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t):i.Unit.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]:0}function tr(e,t){let r;return r="set"===t.list.kind?n.qe.createDiscrete({reverse:!0,domain:t.domain,listOrName:t.list.colors}):n.qe.create({reverse:!0,domain:t.domain,listOrName:t.list.colors}),{factory:tr,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?r.color(tt(e.unit,e.element)):i.Bond.isLocation(e)?r.color(tt(e.aUnit,e.aUnit.elements[e.aIndex])):e9},props:t,description:"Assigns a color based on the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique.",legend:r?r.legend:void 0}}let ta={name:"uncertainty",label:"Uncertainty/Disorder",category:u.J.Atom,factory:tr,getParams:function(e){return te},defaultValues:s.e.getDefaultValues(te),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.B_iso_or_equiv.isDefined||e.coarseHierarchy.isDefined)},tn=(0,n.Il)(15658734),ti={style:s.e.MappedStatic("entity-id",{uniform:s.e.Group(f.QG),"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"trajectory-index":s.e.Group(eo)}),carbonLightness:s.e.Numeric(.8,{min:-6,max:6,step:.1})},to={name:"illustrative",label:"Illustrative",category:u.J.Misc,factory:function e(t,r){let{c
7319olor:a,legend:o,contextHash:s}=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"trajectory-index":return es(e,t.params);default:(0,B.UT)(t)}}(t,r.style);function l(e,t){let i=a(e,!1);return"C"===t?n.Il.lighten(i,r.carbonLightness):i}return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)&&i.Unit.isAtomic(e.unit)){let t=e.unit.model.atomicHierarchy.atoms.type_symbol.value(e.element);return l(e,t)}if(i.Bond.isLocation(e)&&i.Unit.isAtomic(e.aUnit)){let t=e.aUnit.elements[e.aIndex],r=e.aUnit.model.atomicHierarchy.atoms.type_symbol.value(t);return l(e,r)}return tn},props:r,contextHash:s,description:"Assigns an illustrative color that gives every chain a color based on the chosen style but with lighter carbons (inspired by David Goodsell's Molecule of the Month style).",legend:o}},getParams:function(e){return s.e.clone(ti)},defaultValues:s.e.getDefaultValues(ti),isApplicable:e=>!!e.structure},ts={list:s.e.ColorList("red-yellow-green",{presetKind:"scale"}),scale:s.e.Select("DGwif",[["DGwif","DG water-membrane"],["DGwoct","DG water-octanol"],["Oct-IF","DG difference"]])},tl={DGwif:0,DGwoct:1,"Oct-IF":2};function tu(e,t){return e.model.atomicHierarchy.atoms.label_comp_id.value(t)}function tc(e,t){let r=e.coarseElements.seq_id_begin.value(t);if(r===e.coarseElements.seq_id_end.value(t)){let a=e.coarseElements.entityKey[t];return e.model.sequence.byEntityKey[a].sequence.compId.value(r-1)}}function td(e,t){let r=tl[t.scale],a=1/0,o=-1/0;for(let e in em.ResidueHydrophobicity){let t=em.ResidueHydrophobicity[e][r];a=Math.min(a,t),o=Math.max(o,t)}let s=n.qe.create({listOrName:t.list.colors,domain:[o,a],minLabel:"Hydrophilic",maxLabel:"Hydrophobic"});return{factory:td,granularity:"group",preferSmoothing:!0,color:function(e){let t;return i.StructureElement.Location.is(e)?t=i.Unit.isAtomic(e.unit)?tu(e.unit,e.element):tc(e.unit,e.element):i.Bond.isLocation(e)&&(t=i.Unit.isAtomic(e.aUnit)?tu(e.aUnit,e.aUnit.elements[e.aIndex]):tc(e.aUnit,e.aUnit.elements[e.aIndex])),s.color(t?function(e,t){let r=em.ResidueHydrophobicity[e];return void 0===r?0:r[t]}(t,r):0)},props:t,description:'Assigns a color to every amino acid according to the "Experimentally determined hydrophobicity scale for proteins at membrane interfaces" by Wimely and White (doi:10.1038/nsb1096-842).',legend:s?s.legend:void 0}}let tp={name:"hydrophobicity",label:"Hydrophobicity",category:u.J.Residue,factory:td,getParams:function(e){return ts},defaultValues:s.e.getDefaultValues(ts),isApplicable:e=>!!e.structure},tf=(0,n.Il)(13421772),tm={domain:s.e.Interval([0,1]),list:s.e.ColorList("purples",{presetKind:"scale"})};function th(e,t){return i.Unit.isAtomic(e)?e.model.atomicConformation.occupancy.value(t):0}function tg(e,t){let r=n.qe.create({reverse:!1,domain:t.domain,listOrName:t.list.colors});return{factory:tg,granularity:"group",preferSmoothing:!0,color:function(e){return i.StructureElement.Location.is(e)?r.color(th(e.unit,e.element)):i.Bond.isLocation(e)?r.color(th(e.aUnit,e.aUnit.elements[e.aIndex])):tf},props:t,description:"Assigns a color based on the occupancy of an atom.",legend:r?r.legend:void 0}}let tv={name:"occupancy",label:"Occupancy",category:u.J.Atom,factory:tg,getParams:function(e){return tm},defaultValues:s.e.getDefaultValues(tm),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.occupancy.isDefined)};var tb=r(87144);let ty="dark-2",tx=(0,n.Il)(13421772),tS={...(0,y.r)({type:"colors",colorList:ty})};function tT(e){return e.map(e=>`${e+1e4}`.padStart(5,"0")).join("")}function tC(e){let t=(0,R.Ip)(1e4,0),r=parseInt(e.substr(0,t)),a=parseInt(e.substr(t,t)),n=parseInt(e.substr(t+t,t));return tb.AO.create(r-1e4,a-1e4,n-1e4)}function tO(e){return e.map(e=>e+5).join("")}function tI(e){let t=new Map,r=new Set;for(let t=0,a=e.units.length;t<a;++t){let a=tT(e.units[t].conformation.operator.hkl);r.add(a)}let a=Array.from(r.values()).sort();
7319return a.forEach(e=>t.set(e,t.size)),{min:tC(a[0]),max:tC(a[a.length-1]),map:t}}let tA={name:"operator-hkl",label:"Operator HKL",category:u.J.Symmetry,factory:function e(t,r){let a,n;if(t.structure){let{min:e,max:o,map:s}=tI(t.structure.root),l=[];s.forEach((e,t)=>{let r=e%s.size,a=tO(tC(t));void 0===l[r]?l[r]=a:l[r]+=`, ${a}`});let u={minLabel:tO(e),maxLabel:tO(o),valueLabel:e=>l[e]},c=(0,y.X)(s.size,r,u);n=c.legend,a=e=>{let t;if(i.StructureElement.Location.is(e)){let r=tT(e.unit.conformation.operator.hkl);t=s.get(r)}else if(i.Bond.isLocation(e)){let r=tT(e.aUnit.conformation.operator.hkl);t=s.get(r)}return void 0===t?tx:c.color(t)}}else a=()=>tx;return{factory:e,granularity:"instance",color:a,props:r,description:"Assigns a color based on the operator HKL value of a transformed chain.",legend:n}},getParams:function(e){let t=s.e.clone(tS);return e.structure&&tI(e.structure.root).map.size>F.wT[ty].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(ty).list}}),t},defaultValues:s.e.getDefaultValues(tS),isApplicable:e=>!!e.structure};var tw=r(27994);let tD=(0,n.Il)(16777113),tE={domain:s.e.Interval([-1,1]),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})};function tM(e,t){var r;return null===(r=tw.o.Provider.get(e.model))||void 0===r?void 0:r.data.value(t)}function tP(e,t){let r=n.qe.create({domain:t.domain,listOrName:t.list.colors});return{factory:tP,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){let t=tM(e.unit,e.element);return void 0!==t?r.color(t):tD}if(i.Bond.isLocation(e)){let t=tM(e.aUnit,e.aUnit.elements[e.aIndex]);return void 0!==t?r.color(t):tD}return tD},props:t,description:"Assigns a color based on the partial charge of an atom.",legend:r?r.legend:void 0}}let tk={name:"partial-charge",label:"Partial Charge",category:u.J.Atom,factory:tP,getParams:function(e){return tE},defaultValues:s.e.getDefaultValues(tE),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>void 0!==tw.o.Provider.get(e))},tB=(0,n.Il)(16448250),t_={...(0,y.r)({type:"colors",colorList:"many-distinct"})},tR={name:"atom-id",label:"Atom Id",category:u.J.Atom,factory:function e(t,r){let a,n;if(t.structure){let e=i.StructureElement.Location.create(t.structure.root),o=function(e){let t=new Map;for(let r of e.models){let{label_atom_id:e}=r.atomicHierarchy.atoms;for(let r=0,a=e.rowCount;r<a;++r){let a=e.value(r);t.has(a)||t.set(a,t.size)}}return t}(t.structure.root),s=Array.from(o.keys()),l=(0,y.X)(o.size,r,{valueLabel:e=>s[e]});n=l.legend,a=t=>{let r;if(i.StructureElement.Location.is(t)){let e=i.StructureProperties.atom.label_atom_id(t);r=o.get(e)}else if(i.Bond.isLocation(t)){e.unit=t.aUnit,e.element=t.aUnit.elements[t.aIndex];let a=i.StructureProperties.atom.label_atom_id(e);r=o.get(a)}return void 0===r?tB:l.color(r)}}else a=()=>tB;return{factory:e,granularity:"group",preferSmoothing:!0,color:a,props:r,description:"Gives every atom a color based on its `label_atom_id` value.",legend:n}},getParams:function(e){return s.e.clone(t_)},defaultValues:s.e.getDefaultValues(t_),isApplicable:e=>!!e.structure};
7319var tF=r(7922),tL=r(40424),tz=r(23833),tN=r(27203),tG=r(72558);let tU="Assign color based on the given value of a volume cell.",tV={colorList:s.e.ColorList({kind:"interpolate",colors:[[tF.t.white,0],[tF.t.red,.25],[tF.t.white,.5],[tF.t.blue,.75],[tF.t.white,1]]},{offsets:!0,isEssential:!0}),domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),isRelative:s.e.Boolean(!1,{description:"If true the value is treated as relative to the volume mean and sigma."}),defaultColor:s.e.Color((0,C.Il)(13421772))},tj={name:"volume-value",label:"Volume Value",category:u.J.Misc,factory:function e(t,r){var n;if(!t.volume)return{factory:e,granularity:"uniform",color:()=>r.defaultColor,props:r,description:tU};{let{min:i,max:o,mean:s,sigma:l}=t.volume.grid.stats,u="custom"===r.domain.name?r.domain.params:[i,o],{colorList:c,defaultColor:d}=r;if("auto"===r.domain.name&&r.isRelative&&(u[0]=(u[0]-s)/l,u[1]=(u[1]-s)/l),"auto"===r.domain.name&&r.domain.params.symmetric){let e=Math.max(Math.abs(u[0]),Math.abs(u[1]));u[0]=-e,u[1]=e}if(null===(n=t.locationKinds)||void 0===n?void 0:n.includes("direct-location")){let t=[(0,tz.Fv)(u[0],i,o),(0,tz.Fv)(u[1],i,o)];return{factory:e,granularity:"direct",props:r,description:tU,palette:a.Palette(c.colors,c.kind,t,d)}}{let n=tN.r.makeGetTrilinearlyInterpolated(t.volume.grid,"none");return{factory:e,granularity:"vertex",preferSmoothing:!0,color:e=>{if(!(0,tG.TO)(e))return r.defaultColor;let t=n(e.position);return Number.isNaN(t)?r.defaultColor:(0,tz.uZ)((t-u[0])/(u[1]-u[0]),0,1)*a.PaletteScale},palette:a.Palette(c.colors,c.kind,void 0,d),props:r,description:tU}}}},getParams:function(e){return tV},defaultValues:s.e.getDefaultValues(tV),isApplicable:e=>!!e.volume&&!tL.f.Segmentation.get(e.volume)},tH=(0,n.Il)(13421772),tq={...(0,y.r)({type:"colors",colorList:"many-distinct"})},tX={name:"volume-segment",label:"Volume Segment",category:u.J.Misc,factory:function e(t,r){let a,n;let i=t.volume&&tL.f.Segmentation.get(t.volume);if(i){let e=i.segments.size,t=Array.from(i.segments.keys()),o=(0,y.X)(e,r);n=o.legend,a=e=>tL.f.Segment.isLocation(e)?o.color(t.indexOf(e.segment)):tH}else a=()=>tH;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every volume segment a unique color.",legend:n}},getParams:function(e){return s.e.clone(tq)},defaultValues:s.e.getDefaultValues(tq),isApplicable:e=>!!e.volume&&!!tL.f.Segmentation.get(e.volume)};var tW=r(1573),tK=r(30123),tQ=r(72762);let tZ={volume:s.e.ValueRef(e=>e.state.data.select(tK.t.Generators.rootsOfType(tQ.G.Volume.Data)).filter(e=>{var t;return null===(t=e.obj)||void 0===t?void 0:t.data}).map(e=>{var t,r;return[e.transform.ref,null!==(r=null===(t=e.obj)||void 0===t?void 0:t.label)&&void 0!==r?r:"<unknown>"]}),(e,t)=>t(e)),coloring:s.e.MappedStatic("absolute-value",{"absolute-value":s.e.Group({domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})}),"relative-value":s.e.Group({domain:s.e.MappedStatic("auto",{custom:s.e.Interval([-1,1],{step:.001}),auto:s.e.Group({symmetric:s.e.Boolean(!1,{description:"If true the automatic range is determined as [-|max|, |max|]."})})}),list:s.e.ColorList("red-white-blue",{presetKind:"scale"})})}),defaultColor:s.e.Color((0,n.Il)(13421772)),normalOffset:s.e.Numeric(0,{min:0,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),usePalette:s.e.Boolean(!1,{description:"Use a palette to color at the pixel level."})},tY={name:"external-volume",label:"External Volume",category:u.J.Misc,factory:function e(t,r){let i,o,s;try{i=r.volume.getValue()}catch(e){}let{normalOffset:l,defaultColor:u,usePalette:c}=r;if(i){let e=r.coloring.params,{stats:t}=i.grid,d="custom"===e.domain.name?e.domain.params:[t.min,t.max],p="relative-value"===r.coloring.name;if("auto"===e.domain.name&&p&&(d[0]=(d[0]-t.mean)/t.sigma,d[1]=(d[1]-t.mean)/t.sigma),"auto"===e.domain.name&&e.domain.params.symmetric){let e=Math.max(Math.abs(d[0]),Math.abs(d[1]));d[0]=-e,d[1]=e}let f=n.qe.create({domain:d,listOrName:e.list.colors}
7319),m=(0,tb.AO)(),h=tW.r.makeGetTrilinearlyInterpolated(i.grid,p?"relative":"none");o=e=>{if(!(0,tG.TO)(e))return u;l>0?tb.AO.scaleAndAdd(m,e.position,e.normal,l):tb.AO.copy(m,e.position);let t=h(m);return Number.isNaN(t)?u:c?(0,tz.uZ)((t-d[0])/(d[1]-d[0]),0,1)*a.PaletteScale:f.color(t)},s=c?{colors:e.list.colors.map(e=>Array.isArray(e)?e[0]:e),filter:"set"===e.list.kind?"nearest":"linear"}:void 0}else o=()=>u;return{factory:e,granularity:"vertex",preferSmoothing:!0,color:o,palette:s,props:r,description:"Assigns a color based on volume value at a given vertex."}},getParams:()=>tZ,defaultValues:s.e.getDefaultValues(tZ),isApplicable:e=>!0},t$={mainchain:s.e.MappedStatic("molecule-type",{uniform:s.e.Group(f.QG),"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z),"secondary-structure":s.e.Group(e$),"trajectory-index":s.e.Group(eo)}),sidechain:s.e.MappedStatic("residue-name",{uniform:s.e.Group(f.QG),"residue-name":s.e.Group(eF),"element-symbol":s.e.Group(ed),hydrophobicity:s.e.Group(ts),uncertainty:s.e.Group(te),occupancy:s.e.Group(tm),"sequence-id":s.e.Group(e3),"partial-charge":s.e.Group(tE)})},tJ={name:"cartoon",label:"Cartoon",category:u.J.Misc,factory:function e(t,r){var a,n,i,o;let s=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);case"secondary-structure":return e0(e,t.params);case"trajectory-index":return es(e,t.params);default:(0,B.UT)(t)}}(t,r.mainchain),l=function(e,t){switch(t.name){case"uniform":return(0,f.qY)(e,t.params);case"residue-name":return eG(e,t.params);case"element-symbol":return ep(e,t.params);case"hydrophobicity":return td(e,t.params);case"uncertainty":return tr(e,t.params);case"occupancy":return tg(e,t.params);case"sequence-id":return e6(e,t.params);case"partial-charge":return tP(e,t.params);default:(0,B.UT)(t)}}(t,r.sidechain),u=(0,en.TO)(null!==(a=s.contextHash)&&void 0!==a?a:0,null!==(n=l.contextHash)&&void 0!==n?n:0),c=s.legend;return(null===(i=s.legend)||void 0===i?void 0:i.kind)==="table-legend"&&(null===(o=l.legend)||void 0===o?void 0:o.kind)==="table-legend"&&(c={kind:"table-legend",table:[...s.legend.table,...l.legend.table]}),{factory:e,granularity:"group",preferSmoothing:!1,color:function(e,t){return t?s.color(e,!1):l.color(e,!1)},props:r,contextHash:u,description:"Uses separate themes for coloring mainchain and sidechain visuals.",legend:c}},getParams:function(e){return s.e.clone(t$)},defaultValues:s.e.getDefaultValues(t$),isApplicable:e=>!!e.structure},t0=(0,n.Il)(16777113),t1={domain:s.e.Interval([-3,3]),list:s.e.ColorList({kind:"set",colors:F.wT["red-white-blue"].list})};function t2(e,t){return i.Unit.isAtomic(e)?e.model.atomicHierarchy.atoms.pdbx_formal_charge.value(t):0}let t3={name:"formal-charge",label:"Formal Charge",category:u.J.Atom,factory:function e(t,r){let a=n.qe.create({domain:r.domain,listOrName:r.list.colors});return{factory:e,granularity:"group",preferSmoothing:!0,color:function(e){if(i.StructureElement.Location.is(e)){let t=t2(e.unit,e.element);return void 0!==t?a.color(t):t0}if(i.Bond.isLocation(e)){let t=t2(e.aUnit,e.aUnit.elements[e.aIndex]);return void 0!==t?a.color(t):t0}return t0},props:r,description:"Assigns a color based on the formal charge of an atom.",legend:a?a.legend:void 0}},getParams:function(e){return t1},defaultValues:s.e.getDefaultValues(t1),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicHierarchy.atoms.pdbx_formal_charge.isDefined)};var t4=r(125),t5=r(80541),t6=r(43975);let t8={structure:s.e.ValueRef(e=>e.state.data.select(tK.t.Generators.rootsOfType(tQ.G.Molecule.Structure)).filter(e=>{var t;return null===(t=e.obj)||void 0===t?void 0:t.data}).map(e=>{var t,r;return[e.transform.ref,null!==(r=null===(t=e.obj)||void 0===t?void 0:t.label)&&void 0!==r?r:"<unknown>"]}),(e,t)=>t(e)),style:s.e.MappedStatic("chain-id",{"chain-id":s.e.Group(g.NT),"entity-id":s.e.Group(E),"entity-source":s.e.Group(G),"molecule-type":s.e.Group(eb),"model-index":s.e.Group(X),"structure-index":s.e.Group(Z)}),defaultColor:s.e.Color((0,n.Il)(13421772)),maxDistance:s.e.Numeric(8,{min:.
73191,max:24,step:.1},{description:"Maximum distance to search for the nearest structure element. This is done only if the approximate search fails."}),approxMaxDistance:s.e.Numeric(4,{min:0,max:12,step:.1},{description:"Maximum distance to search for an approximately nearest structure element. This is done before the extact search."}),normalOffset:s.e.Numeric(0,{min:-10,max:20,step:.1},{description:"Offset vertex position along its normal by given amount."}),backboneOnly:s.e.Boolean(!1)},t7={name:"external-structure",label:"External Structure",category:u.J.Misc,factory:function e(t,r){let a,n,o,s;try{a=r.structure.getValue()}catch(e){}let{maxDistance:l,approxMaxDistance:u,normalOffset:c,defaultColor:d,backboneOnly:p}=r;if(a){let e=function(e,t){switch(t.name){case"chain-id":return(0,g.Lf)(e,t.params);case"entity-id":return P(e,t.params);case"entity-source":return j(e,t.params);case"molecule-type":return ex(e,t.params);case"model-index":return W(e,t.params);case"structure-index":return Y(e,t.params);default:(0,B.UT)(t)}}({...t,structure:a},r.style),f=(0,t4.ws)(),m=(0,t4.ws)(),h=a;p&&(h=i.StructureSelection.unionStructure(t5.fS.backbone.query(new i.QueryContext(a))));let b=(0,t6.A)(),y=i.StructureElement.Location.create(h);n=(t,r)=>{if(!(0,tG.TO)(t))return d;0!==c?t6.A.scaleAndAdd(b,t.position,t.normal,c):t6.A.copy(b,t.position);let[a,n,i]=b;if(u>0){let t=h.lookup3d.approxNearest(a,n,i,u,f);if(t.count>0)return y.unit=t.units[0],y.element=y.unit.elements[t.indices[0]],e.color(y,r)}let o=h.lookup3d.find(a,n,i,l,m);if(o.count>0){let t=0,a=o.squaredDistances[0];for(let e=1;e<o.count;++e)o.squaredDistances[e]<a&&(a=o.squaredDistances[e],t=e);return y.unit=o.units[t],y.element=y.unit.elements[o.indices[t]],e.color(y,r)}return d},o=e.contextHash,s=e.legend}else n=()=>d;return{factory:e,granularity:"vertex",preferSmoothing:!0,color:n,props:r,contextHash:o,description:"Assigns a color based on structure property at a given vertex.",legend:s}},getParams:()=>t8,defaultValues:s.e.getDefaultValues(t8),isApplicable:e=>!0};var t9=r(15613);let re="dark-2",rt=(0,n.Il)(13421772),rr={...(0,y.r)({type:"colors",colorList:re})},ra={name:"volume-instance",label:"Volume Instance",category:u.J.Misc,factory:function e(t,r){let a,n;if(t.volume){let e=(0,y.X)(t.volume.instances.length,r);n=e.legend;let i=tL.f.Cell.isLocation;a=t=>i(t)?e.color(t.instance):rt}else a=()=>rt;return{factory:e,granularity:"instance",color:a,props:r,description:"Gives every volume instance a unique color based on the position (index) of the instance in the list of instances of the volume.",legend:n}},getParams:function(e){let t=s.e.clone(rr);return e.volume&&e.volume.instances.length>F.wT[re].list.length&&(t.palette.defaultValue.name="colors",t.palette.defaultValue.params={...t.palette.defaultValue.params,list:{kind:"interpolate",colors:(0,F.jy)(re).list}}),t},defaultValues:s.e.getDefaultValues(rr),isApplicable:e=>!!e.volume};!function(e){e.Category=u.J,e.Palette=function(e,t,r,a){let n=[];if(e.every(e=>Array.isArray(e))){let t=0;for(let r of e)if(Array.isArray(r)){let e=(0,R.p8)(r[1]);e>t&&(t=e)}let r=Math.pow(10,t),a=[...e];a.sort((e,t)=>e[1]-t[1]);let i=a.map(e=>e[0]),o=t9.O.ofSortedArray(a.map(e=>e[1])),s=[];for(let e=0,t=o.length-1;e<t;++e)s.push(o[e]+(o[e+1]-o[e])/2);s.push(o[o.length-1]);let l=t9.O.ofSortedArray(s);for(let t=0,a=Math.max(r,e.length);t<a;++t){let e=(0,tz.Fv)(t,0,r-1),a=t9.O.findPredecessorIndex(l,e);n[t]=i[a]}}else for(let t of e)Array.isArray(t)?n.push(t[0]):n.push(t);return{colors:n,filter:"set"===t?"nearest":"linear",domain:r,defaultColor:a}},e.PaletteScale=16777214,e.EmptyFactory=()=>e.Empty;let t=(0,n.Il)(13421772);e.Empty={factory:e.EmptyFactory,granularity:"uniform",color:()=>t,props:{}},e.areEqual=function(e,t){return e.contextHash===t.contextHash&&e.factory===t.factory&&(0,m.vZ)(e.props,t.props)},e.EmptyProvider={name:"",label:"",category:"",factory:e.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0},e.createRegistry=function(){return new h.R(e.BuiltIn,e.EmptyProvider)},e.BuiltIn={"atom-id":tR,"carbohydrate-symbol":p,cartoon:tJ,"chain-id":g.WT,"element-index":T,"element-symbol":ef,"entity-id":k,"entity-source":H,"external-structure":t7,"external-volume":tY,"formal-charge":t3,hydrophobicity:tp,illustrative:to,"model-index":K,"molecule-type":eS,occupancy:tv,"operator-hkl":tA,"operator-name":A.Zs,"partial-charge":tk,"polymer-id":eD,"polymer-index":eB,"residue-charge":eK,"residue-name":eU,"secondary-structure":e1,"sequence-id":e8,"shape-group":e7.mR,"structure-index":$,"trajectory-index":el,uncertainty:ta,"unit-index":ea,uniform:f.bL,"volume-instance":ra,"volume-segment":t
7319X,"volume-value":tj}}(a||(a={}))},28253:function(e,t,r){r.d(t,{J:function(){return a}});let a={Atom:"Atom Property",Chain:"Chain Property",Residue:"Residue Property",Symmetry:"Symmetry",Validation:"Validation",Misc:"Miscellaneous"}},16454:function(e,t,r){r.d(t,{Lf:function(){return p},NT:function(){return u},WT:function(){return f}});var a=r(30502),n=r(70371),i=r(14086),o=r(62713),s=r(28253);let l=(0,n.Il)(16448250),u={asymId:i.e.Select("auth",i.e.arrayToOptions(["auth","label"])),...(0,o.r)({type:"colors",colorList:"many-distinct"})};function c(e,t){let r=(function(e,t){switch(e.kind){case a.Unit.Kind.Atomic:return"auth"===t?a.StructureProperties.chain.auth_asym_id:a.StructureProperties.chain.label_asym_id;case a.Unit.Kind.Spheres:case a.Unit.Kind.Gaussians:return a.StructureProperties.coarse.asym_id}})(e.unit,t)(e);return e.structure.root.models.length>1?d(e.unit.model,r):r}function d(e,t){return`${t}|${(a.Model.Index.get(e).value||0)+1}`}function p(e,t){let r,n;if(e.structure){let i=a.StructureElement.Location.create(e.structure.root),s=function(e,t){let r=new Map;for(let n of e.models){let i=a.Model.AsymIdOffset.get(n).value,o=("auth"===t?null==i?void 0:i.auth:null==i?void 0:i.label)||0,s=0;n.properties.structAsymMap.forEach(({auth_id:a},i)=>{let l="auth"===t?a:i,u=e.models.length>1?d(n,l):l;!r.has(u)&&(r.set(u,s+o),++s)})}return r}(e.structure.root,t.asymId),u=Array.from(s.keys()),p=(0,o.X)(s.size,t,{valueLabel:e=>u[e]});n=p.legend,r=e=>{let r;if(a.StructureElement.Location.is(e)){let a=c(e,t.asymId);r=s.get(a)}else if(a.Bond.isLocation(e)){i.unit=e.aUnit,i.element=e.aUnit.elements[e.aIndex];let a=c(i,t.asymId);r=s.get(a)}return void 0===r?l:p.color(r)}}else r=()=>l;return{factory:p,granularity:"group",color:r,props:t,description:"Gives every chain a color based on its `asym_id` value.",legend:n}}let f={name:"chain-id",label:"Chain Id",category:s.J.Chain,factory:p,getParams:function(e){var t;let r=i.e.clone(u);return(null===(t=e.structure)||void 0===t?void 0:t.models.some(e=>e.coarseHierarchy.isDefined))&&(r.asymId.defaultValue="label"),r},defaultValues:i.e.getDefaultValues(u),isApplicable:e=>!!e.structure}},54521:function(e,t,r){r.d(t,{A4:function(){return u},DL:function(){return c},Zs:function(){return d}});var a=r(70371),n=r(30502),i=r(14086),o=r(62713),s=r(28253);let l=(0,a.Il)(13421772),u={...(0,o.r)({type:"colors",colorList:"many-distinct"})};function c(e,t){let r,a;if(e.structure){let i=function(e){let t=new Map;for(let r=0,a=e.units.length;r<a;++r){let a=e.units[r].conformation.operator.name;t.has(a)||t.set(a,t.size)}return t}(e.structure.root),s=Array.from(i.keys()),u=(0,o.X)(i.size,t,{valueLabel:e=>s[e]});a=u.legend,r=e=>{let t;if(n.StructureElement.Location.is(e)){let r=e.unit.conformation.operator.name;t=i.get(r)}else if(n.Bond.isLocation(e)){let r=e.aUnit.conformation.operator.name;t=i.get(r)}return void 0===t?l:u.color(t)}}else r=()=>l;return{factory:c,granularity:"instance",color:r,props:t,description:"Assigns a color based on the operator name of a transformed chain.",legend:a}}let d={name:"operator-name",label:"Operator Name",category:s.J.Symmetry,factory:c,getParams:function(e){return i.e.clone(u)},defaultValues:i.e.getDefaultValues(u),isApplicable:e=>!!e.structure}},62590:function(e,t,r){r.d(t,{lS:function(){return u},mR:function(){return c}});var a=r(70371),n=r(93898),i=r(14086),o=r(28253);let s=(0,a.Il)(13421772),l={};function u(e,t){return{factory:u,granularity:"groupInstance",color:e=>n.F.isLocation(e)?e.shape.getColor(e.group,e.instance):s,props:t,description:"Assigns colors as defined by the shape object."}}let c={name:"shape-group",label:"Shape Group",category:o.J.Misc,factory:u,getParams:function(e){return l},defaultValues:i.e.getDefaultValues(l),isApplicable:e=>!!e.shape}},11204:function(e,t,r){r.d(t,{QG:function(){return u},bL:function(){return d},qY:function(){return c}});var a=r(70371),n=r(14086),i=r(79455),o=r(85764),s=r(28253);let l=(0,a.Il)(13421772),u={value:n.e.Color(l),saturation:n.e.Numeric(0,{min:-6,max:6,step:.1}),lightness:n.e.Numeric(0,{min:-6,max:6,step:.1})};function c(e,t){let r=(0,o.ce)(t.value,l);return r=a.Il.saturate(r,t.saturation),r=a.Il.lighten(r,t.lightness),{factory:c,granularity:"uniform",color:()=>r,props:t,description:"Gives everything the same, uniform color.",legend:(0,i.Z)([["uniform",r]]
7319)}}let d={name:"uniform",label:"Uniform",category:s.J.Misc,factory:c,getParams:function(e){return u},defaultValues:n.e.getDefaultValues(u),isApplicable:e=>!0}},37792:function(e,t,r){r.d(t,{i:function(){return o}});var a=r(67589),n=r(30502),i=r(20694);function o(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].value!==t.layers[r].value||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,value:i}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,value:i})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,value:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,value:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,value:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,value:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,value:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,value:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,value:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,value:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,value:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,value:i})}return{kind:"element-loci",layers:t}}}(o||(o={}))},58202:function(e,t,r){r.d(t,{Ak:function(){return x},Cj:function(){return g},Gg:function(){return b},U7:function(){return O},Ve:function(){return p},Wf:function(){return C},xf:function(){return T},xw:function(){return h}});var a=r(30502),n=r(67589),i=r(67330),o=r(75042),s=r(24343),l=r(87144),u=r(58463),c=r(1573);let d={granularity:"element",condensed:!1,reverse:!1,countsOnly:!1,hidePrefix:!1,htmlStyling:!0};function p(e,t={}){var r;switch(e.kind){case"structure-loci":return e.structure.models.map(e=>e.entry).filter(e=>!!e).join(", ");case"element-loci":return h(a.StructureElement.Stats.ofLoci(e),t);case"bond-loci":let n=e.bonds[0];return n?b(n,t):"";case"shape-loci":return e.shape.name;case"group-loci":let o=e.groups[0];return o?e.shape.getLabel(i.h.start(o.ids),o.instance):"";case"every-loci":return"Everything";case"empty-loci":return"Nothing";case"data-loci":return e.getLabel();case"volume-loci":return e.volume.label||"Volume";case"isosurface-loci":return`${e.volume.label||"Volume"} | Isosurface at ${c.f.IsoValue.toString(e.isoValue)}`;case"cell-loci":let s=c.f.Cell.getLociSize(e),l=i.h.start(e.elements[0].indices),u=c.f.IsoValue.absolute(e.volume.grid.cells.data[l]),d=c.f.IsoValue.toRelative(u,e.volume.grid.stats),p=[`${e.volume.label||"Volume"}`,`${1===s?`Cell #${l}`:`${s} Cells`}`];return 1===s&&(e.volume.instances.length>1&&p.push(`Instance #${i.h.start(e.elements[0].instances)+1}`),p.push(`${c.f.IsoValue.toString(u)} (${c.f.IsoValue.toString(d)})`)),p.join(" | ");case"segment-loci":let f=c.f.Segment.getLociSize(e),m=null===(r=c.f.Segmentation.get(e.volume))||void 0===r?void 0:r.labels,g=i.h.start(e.elements[0].segments);if(m&&1===f){let e=m[g];if(e)return e}return`${e.volume.label||"Volume"} | ${1===f?`Segment ${g}`:`${f} Segments`}`}}function f(e,t){return 1===e?`1 ${t}`:`${e} ${t}s`}function m(e,t,r,a,n,i){return`${x(t,{granularity:r,hidePrefix:a,reverse:n,condensed:i})} <small>[+ ${f(e-1,`other ${(0,o.kC)(r)}`)}]</small>`}function h(e,t={}){let r={...d,...t},n=function(e,t=!1,r=!1,n=!1,i=!1){let{structureCount:o,chainCount:s,residueCount:l,conformationCount:u,elementCount:c}=e;if(!t&&1===c&&0===l&&0===s)return x(e.firstElementLoc,{hidePrefix:r,condensed:n,granularity:"element",reverse:i}
7319);if(!t&&0===c&&1===l&&0===s)return x(e.firstResidueLoc,{hidePrefix:r,condensed:n,granularity:"residue",reverse:i});if(t||0!==c||0!==l||1!==s){if(t){let e=[];return o>0&&e.push(f(o,"Structure")),s>0&&e.push(f(s,"Chain")),l>0&&e.push(f(l,"Residue")),u>0&&e.push(f(u,"Conformation")),c>0&&e.push(f(c,"Element")),e.join("<small> + </small>")}{let t=[];return o>0&&t.push(1===o?x(e.firstStructureLoc,{hidePrefix:r,condensed:n,granularity:"structure",reverse:i}):m(o,e.firstStructureLoc,"structure",r,i,n)),s>0&&(t.push(1===s?x(e.firstChainLoc,{condensed:n,granularity:"chain",hidePrefix:r,reverse:i}):m(s,e.firstChainLoc,"chain",r,i,n)),r=!0),l>0&&(t.push(1===l?x(e.firstResidueLoc,{condensed:n,granularity:"residue",hidePrefix:r,reverse:i}):m(l,e.firstResidueLoc,"residue",r,i,n)),r=!0),u>0&&(t.push(1===u?x(e.firstConformationLoc,{condensed:n,granularity:"conformation",hidePrefix:r,reverse:i}):m(u,e.firstConformationLoc,"conformation",r,i,n)),r=!0),c>0&&t.push(1===c?x(e.firstElementLoc,{condensed:n,granularity:"element",hidePrefix:r,reverse:i}):m(c,e.firstElementLoc,"element",r,i,n)),t.join("<small> + </small>")}}{let{unit:t}=e.firstChainLoc,o=a.Unit.isAtomic(t)&&1===function(e){let{elements:t,model:r}=e,{chainAtomSegments:a,residueAtomSegments:n}=r.atomicHierarchy,i=a.offsets[a.index[t[0]]],o=a.offsets[a.index[t[t.length-1]]+1]-1;return n.index[o]-n.index[i]+1}(t)?"residue":a.Unit.Traits.is(t.traits,a.Unit.Trait.MultiChain)?"residue":"chain";return x(e.firstChainLoc,{hidePrefix:r,condensed:n,granularity:o,reverse:i})}}(e,r.countsOnly,r.hidePrefix,r.condensed,r.reverse);return r.htmlStyling?n:(0,o.oN)(n)}function g(e,t={}){let r=a.StructureElement.Stats.create();for(let t of e)a.StructureElement.Stats.add(r,r,a.StructureElement.Stats.ofLoci(t));return h(r,t)}function b(e,t={}){return y({loci:[a.StructureElement.Loci(e.aStructure,[{unit:e.aUnit,indices:i.h.ofSingleton(e.aIndex)}]),a.StructureElement.Loci(e.bStructure,[{unit:e.bUnit,indices:i.h.ofSingleton(e.bIndex)}])]},t)}function y(e,t={}){let r={...d,...t},n=function(e,t){let{granularity:r,hidePrefix:n,reverse:o,condensed:s}=t,l=!0;for(let t of e.loci)if(!a.StructureElement.Loci.is(t)||1!==a.StructureElement.Loci.size(t)){l=!1;break}if(!l)return e.loci.map(e=>p(e,t)).filter(e=>!!e).join(s?" â ":"</br>");{let t=e.loci.map(e=>{let{unit:t,indices:r}=e.elements[0];return a.StructureElement.Location.create(e.structure,t,t.elements[i.h.start(r)])}).map(e=>S(e,r,n,o||s));if(s)return t.map(e=>e[0].replace(/\[.*\]/g,"").trim()).filter(e=>!!e).join(" â ");let l=0;for(let e=0,r=Math.min(...t.map(e=>e.length))-1;e<r;++e){let r=!0;for(let a=1,n=t.length;a<n;++a)if(t[0][e]!==t[a][e]){r=!1;break}if(r)l+=1;else break}if(!(l>0))return t.map(e=>e.filter(e=>!!e).join(" | ")).filter(e=>!!e).join("</br>");{let e=[t[0].join(" | ")];for(let r=1,a=t.length;r<a;++r)e.push(t[r].slice(l).filter(e=>!!e).join(" | "));return e.join(" â ")}}}(e,r);return r.htmlStyling?n:(0,o.oN)(n)}function x(e,t={}){var r,a;let n={...d,...t},i=S(e,n.granularity,n.hidePrefix,n.reverse||n.condensed),s=n.condensed?null!==(a=null===(r=i[0])||void 0===r?void 0:r.replace(/\[.*\]/g,"").trim())&&void 0!==a?a:"":i.filter(e=>!!e).join(" | ");return n.htmlStyling?s:(0,o.oN)(s)}function S(e,t="element",r=!1,n=!1){let i=[];if(!r){let r=e.unit.model.entry;r.length>30&&(r=r.substr(0,27)+"â¦"),i.push(`<small>${r}</small>`),"structure"!==t&&(i.push(`<small>Model ${e.unit.model.modelNum}</small>`),i.push(`<small>Instance ${e.unit.conformation.operator.instanceId}</small>`))}return a.Unit.isAtomic(e.unit)?i.push(...function(e,t,r=!1){let n=a.StructureElement.Location.residueIndex(e),i=a.StructureProperties.chain.label_asym_id(e),o=a.StructureProperties.chain.auth_asym_id(e),l=e.unit.model.atomicHierarchy.residues.label_seq_id.valueKind(n)===s.s.ValueKinds.Present,u=a.StructureProperties.residue.label_seq_id(e),c=a.StructureProperties.residue.auth_seq_id(e),d=a.StructureProperties.residue.pdbx_PDB_ins_code(e),p=a.StructureProperties.atom.label_comp_id(e),f=a.StructureProperties.atom.label_atom_id(e),m=a.StructureProperties.atom.label_alt_id(e),h=a.StructureProperties.atom.occupancy(e),g=a.StructureProperties.atom.sourceIndex(e),b=a.StructureProperties.residue.microheterogeneityCompIds(e),y="residue"===t&&b.length>1?`(${b.join("|")})`:p,x=[];switch(t){case"element":{let e=`<b>${f}</b>${m?`%${m}`:""}`,t=`<small style='margin-left: 4px'>[idx <b>${g+1}</b>]</small>`;x.push(`${e}${t}`)}case"conformation":"conformation"===t&&m&&x.push(`<small>Conformation</small> <b>${m}</b>`);case"residue":let S=u!==c&&l?u:c;x.push(`<b>${y} ${S}</b>${S!==c?` <small>[auth</small> <b>${c}</b><small>]</small>`:""}<b>${d||""}</b>`);case"chain":i===o?x.push(`<b>${i}</b>`):"chain"===t&&a.Unit.Traits.is(e.unit.traits,a.Unit.Trait.MultiChain)?x.push(`<small>[auth</small> <b>${o}</b><small>]</small>`):x.push(`<b>${i}</b> <small>[auth</small> <b>${o}</b><small>]</small>`)}return x.length>0&&1!==h&&!r&&(x[0]=`${x[0]} <small>[occupancy</small> <b>${Math.round(100*h)/100}</b><small>]</small>`),x.reverse()}
7319(e,t,n)):a.Unit.isCoarse(e.unit)?i.push(...function(e,t){let r=a.StructureProperties.coarse.asym_id(e),n=a.StructureProperties.coarse.seq_id_begin(e),i=a.StructureProperties.coarse.seq_id_end(e),o=[];switch(t){case"element":case"conformation":case"residue":if(n===i){let t=a.StructureProperties.coarse.entityKey(e),r=e.unit.model.sequence.byEntityKey[t].sequence.compId.value(n-1);o.push(`<b>${r} ${n}</b>`)}else o.push(`<b>${n}-${i}</b>`);case"chain":o.push(`<b>${r}</b>`)}return o.reverse()}(e,t)):i.push("Unknown"),n?i.reverse():i}function T(e,t={}){let r={...d,measureOnly:!1,unitLabel:"â«",...t},[a,i]=e.loci.map(e=>n.o_.getCenter(e)),o=`${l.AO.distance(a,i).toFixed(2)} ${r.unitLabel}`;if(r.measureOnly)return o;let s=y(e,r);return r.condensed?`${o} | ${s}`:`Distance ${o}</br>${s}`}function C(e,t={}){let r={...d,measureOnly:!1,...t},[a,i,o]=e.loci.map(e=>n.o_.getCenter(e)),s=l.AO.sub((0,l.AO)(),a,i),c=l.AO.sub((0,l.AO)(),o,i),p=`${(0,u.ZY)(l.AO.angle(s,c)).toFixed(2)}\u00B0`;if(r.measureOnly)return p;let f=y(e,r);return r.condensed?`${p} | ${f}`:`Angle ${p}</br>${f}`}function O(e,t={}){let r={...d,measureOnly:!1,...t},[a,i,o,s]=e.loci.map(e=>n.o_.getCenter(e)),c=`${(0,u.ZY)(l.AO.dihedralAngle(a,i,o,s)).toFixed(2)}\u00B0`;if(r.measureOnly)return c;let p=y(e,r);return r.condensed?`${c} | ${p}`:`Dihedral ${c}</br>${p}`}},30481:function(e,t,r){r.d(t,{k:function(){return s}});var a=r(67589),n=r(70371),i=r(30502),o=r(20694);function s(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].clear!==t.layers[r].clear||e.layers[r].color!==t.layers[r].color||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,color:n,clear:o}=a;e=i.StructureElement.Loci.remap(e,t),i.StructureElement.Loci.isEmpty(e)||r.push({loci:e,color:n,clear:o})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=i.StructureElement.Loci.none(t);for(let t=0,n=e.layers.length;t<n;++t){let{loci:o,color:s,clear:l}=e.layers[n-t-1];if(o=i.StructureElement.Loci.subtract(o,a),a=i.StructureElement.Loci.union(o,a),!i.StructureElement.Loci.isEmpty(o)){let e=l?-1:s;r.has(e)&&(o=i.StructureElement.Loci.union(o,r.get(e))),r.set(e,o)}}let o=[];return r.forEach((e,t)=>{let r=-1===t,a=r?(0,n.Il)(0):t;o.push({loci:e,color:a,clear:r})}),{kind:"element-loci",layers:o}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let n of e.layers){let{loci:e,color:o,clear:s}=n,l=i.StructureElement.Loci.remap(e,r);e=i.StructureElement.Loci.remap(l,t),i.StructureElement.Loci.isEmpty(e)||a.push({loci:e,color:o,clear:s})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,n=e.length;a<n;++a){let{script:n,color:s,clear:l}=e[a],u=o.Script.toLoci(n,t);i.StructureElement.Loci.isEmpty(u)||r.push({loci:u,color:s,clear:l})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,n=e.length;a<n;++a){let{bundle:n,color:o,clear:s}=e[a],l=i.StructureElement.Bundle.toLoci(n,t.root);r.push({loci:l,color:o,clear:s})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,color:n,clear:o}=e.layers[r],s=i.StructureElement.Bundle.fromLoci(a);t.push({bundle:s,color:n,clear:o})}return{kind:"element-loci",layers:t}}}(s||(s={}))},7305:function(e,t,r){r.d(t,{k:function(){return n}});var a,n,i=r(98224),o=r(60843),s=r(30502),l=r(53478),u=r(14086);let c={scale:u.e.Numeric(1,{min:.1,max:5,step:.1})};function d(e,t){return s.Unit.isAtomic(e)?(0,l.lT)(e.model.atomicHierarchy.atoms.type_symbol.value(t)):s.Unit.isSpheres(e)?e.model.coarseConformation.spheres.radius[t]:0}let p={name:"physical",label:"Physical",category:"",factory:function e(t,r){let a=void 0===r.scale?1:r.scale;return{factory:e,granularity:"group",size:function(e){return s.StructureElement.Location.is(e)?a*d(e.unit,e.element):s.Bond.isLocation(e)?a*Math.min(d(e.aUnit,e.aUnit.elements[e.aIndex]),d(e.bUnit,e.bUnit.elements[e.bIndex])):1*a},props:r,description:"Assigns a physical size, i.e. vdW radius for atoms or given radius for coarse spheres."}},getParams:function(e){return c},defaultValues:u.e.getDefaultValues(c),isApplicable:e=>!!e.structure};var f=r(85764),m=r(87909);
7319let h={bfactorFactor:u.e.Numeric(.1,{min:0,max:1,step:.01}),rmsfFactor:u.e.Numeric(.05,{min:0,max:1,step:.01}),baseSize:u.e.Numeric(.2,{min:0,max:2,step:.1})};function g(e,t,r){return s.Unit.isAtomic(e)?e.model.atomicConformation.B_iso_or_equiv.value(t)*r.bfactorFactor:s.Unit.isSpheres(e)?e.model.coarseConformation.spheres.rmsf[t]*r.rmsfFactor:0}let b={name:"uncertainty",label:"Uncertainty/Disorder",category:"",factory:function e(t,r){return{factory:e,granularity:"group",size:function(e){let t=r.baseSize;return s.StructureElement.Location.is(e)?t+=g(e.unit,e.element,r):s.Bond.isLocation(e)&&(t+=g(e.aUnit,e.aUnit.elements[e.aIndex],r)),t},props:r,description:"Assigns a size reflecting the uncertainty or disorder of an element's position, e.g. B-factor or RMSF, depending on the data availability and experimental technique."}},getParams:function(e){return h},defaultValues:u.e.getDefaultValues(h),isApplicable:e=>!!e.structure&&e.structure.models.some(e=>e.atomicConformation.B_iso_or_equiv.isDefined||e.coarseHierarchy.isDefined)};var y=r(40424),x=r(72558),S=r(27203),T=r(23833);let C="Assign size based on the given value of a volume cell.",O={scale:u.e.Numeric(1,{min:.01,max:10,step:.01}),transform:u.e.Select("linear",[["linear","Linear"],["quadratic","Quadratic"],["cubic","Cubic"]],{description:"Linear: value * scale, Quadratic: value * scale^2, Cubic: value * scale^3"}),domain:u.e.MappedStatic("auto",{custom:u.e.Interval([0,1],{step:.001,min:0}),auto:u.e.Group({})})},I={name:"volume-value",label:"Volume Value",category:"",factory:function e(t,r){var a;if(!t.volume)return{factory:e,granularity:"uniform",size:()=>r.scale,props:r,description:C};{let{min:n,max:i}=t.volume.grid.stats,o="custom"===r.domain.name?r.domain.params:[n,i],s="cubic"===r.transform?r.scale**3:"quadratic"===r.transform?r.scale**2:r.scale;if(null===(a=t.locationKinds)||void 0===a?void 0:a.includes("cell-location")){let{data:a}=t.volume.grid.cells,n=y.f.Cell.isLocation;return{factory:e,granularity:"group",size:e=>n(e)?(0,T.uZ)(Math.abs(a[e.cell]),o[0],o[1])*s:0,props:r,description:C}}{let a=S.r.makeGetTrilinearlyInterpolated(t.volume.grid,"none");return{factory:e,granularity:"vertex",size:e=>{if(!(0,x.TO)(e))return 0;{let t=a(e.position);return Number.isNaN(t)?0:(0,T.uZ)(Math.abs(t),o[0],o[1])*s}},props:r,description:C}}}},getParams:function(e){return O},defaultValues:u.e.getDefaultValues(O),isApplicable:e=>!!e.volume&&!y.f.Segmentation.get(e.volume)};(a=n||(n={})).EmptyFactory=()=>a.Empty,a.Empty={factory:a.EmptyFactory,granularity:"uniform",size:()=>1,props:{}},a.areEqual=function(e,t){return e.contextHash===t.contextHash&&e.factory===t.factory&&(0,f.vZ)(e.props,t.props)},a.EmptyProvider={name:"",label:"",category:"",factory:a.EmptyFactory,getParams:()=>({}),defaultValues:{},isApplicable:()=>!0},a.createRegistry=function(){return new o.R(a.BuiltIn,a.EmptyProvider)},a.BuiltIn={physical:p,"shape-group":m.gb,uncertainty:b,uniform:i.Le,"volume-value":I}},87909:function(e,t,r){r.d(t,{gb:function(){return s},wo:function(){return o}});var a=r(93898),n=r(14086);let i={};function o(e,t){return{factory:o,granularity:"groupInstance",size:e=>a.F.isLocation(e)?e.shape.getSize(e.group,e.instance):1,props:t,description:"Assigns sizes as defined by the shape object."}}let s={name:"shape-group",label:"Shape Group",category:"",factory:o,getParams:function(e){return i},defaultValues:n.e.getDefaultValues(i),isApplicable:e=>!!e.shape}},98224:function(e,t,r){r.d(t,{Le:function(){return o},_k:function(){return i}});var a=r(14086);let n={value:a.e.Numeric(1,{min:0,max:20,step:.1})};function i(e,t){let r=t.value;return{factory:i,granularity:"uniform",size:()=>r,props:t,description:"Gives everything the same, uniform size."}}let o={name:"uniform",label:"Uniform",category:"",factory:i,getParams:function(e){return n},defaultValues:a.e.getDefaultValues(n),isApplicable:e=>!0}},5909:function(e,t,r){r.d(t,{A:function(){return l}});var a=r(67589),n=r(30502),i=r(20694),o=r(34813),s=r(67546);function l(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;
7319if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].clear!==t.layers[r].clear||!(0,s.wU)(e.layers[r].material,t.layers[r].material)||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let{loci:e,material:i,clear:o}=a;e=n.StructureElement.Loci.remap(e,t),n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,material:i,clear:o})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let t;let{structure:r}=e.layers[0].loci,a=new Map,i=n.StructureElement.Loci.none(r);for(let r=0,o=e.layers.length;r<o;++r){let{loci:s,material:l,clear:u}=e.layers[o-r-1];s=n.StructureElement.Loci.subtract(s,i),i=n.StructureElement.Loci.union(s,i),n.StructureElement.Loci.isEmpty(s)||(u?t=t?n.StructureElement.Loci.union(s,t):s:(a.has(l)&&(s=n.StructureElement.Loci.union(s,a.get(l))),a.set(l,s)))}let s=[];return t&&s.push({loci:t,material:(0,o.F)(),clear:!0}),a.forEach((e,t)=>{s.push({loci:e,material:t,clear:!1})}),{kind:"element-loci",layers:s}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,material:o,clear:s}=i,l=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(l,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,material:o,clear:s})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,material:s,clear:l}=e[a],u=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(u)||r.push({loci:u,material:s,clear:l})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,material:o,clear:s}=e[a],l=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:l,material:o,clear:s})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,material:i,clear:o}=e.layers[r],s=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:s,material:i,clear:o})}return{kind:"element-loci",layers:t}}}(l||(l={}))},60843:function(e,t,r){r.d(t,{Q:function(){return a},R:function(){return u}});var a,n=r(20178),i=r(7305),o=r(14086),s=r(67546);function l(e){return e.map(e=>[e.name,e.provider.label,e.provider.category])}!function(e){function t(){return{color:n.U.Empty,size:i.k.Empty}}async function r(e,t,r,a){var n,i;await (null===(n=t.colorThemeRegistry.get(a.colorTheme.name).ensureCustomProperties)||void 0===n?void 0:n.attach(e,r)),await (null===(i=t.sizeThemeRegistry.get(a.sizeTheme.name).ensureCustomProperties)||void 0===i?void 0:i.attach(e,r))}e.create=function(e,r,a,n){n=n||t();let i=a.colorTheme,o=a.sizeTheme;return n.color=e.colorThemeRegistry.create(i.name,r,i.params),n.size=e.sizeThemeRegistry.create(o.name,r,o.params),n},e.createEmpty=t,e.ensureDependencies=r,e.releaseDependencies=function(e,t,r){var a,n;null===(a=e.colorThemeRegistry.get(r.colorTheme.name).ensureCustomProperties)||void 0===a||a.detach(t),null===(n=e.sizeThemeRegistry.get(r.sizeTheme.name).ensureCustomProperties)||void 0===n||n.detach(t)}}(a||(a={}));class u{get default(){return this._list[0]}get list(){return this._list}get types(){return l(this._list)}constructor(e,t){this.emptyProvider=t,this._list=[],this._map=new Map,this._name=new Map,(0,s.mt)(e,(e,t)=>{if(e.name!==t)throw Error(`Fix build in themes to have matching names. ${e.name} ${t}`);this.add(e)})}sort(){this._list.sort((e,t)=>e.provider.category===t.provider.category?e.provider.label<t.provider.label?-1:e.provider.label>t.provider.label?1:0:e.provider.category<t.provider.category?-1:1)}add(e){if(this._map.has(e.name))throw Error(`${e.name} already registered.`);let t=e.name;this._list.push({name:t,provider:e}),this._map.set(t,e),this._name.set(e,t),this.sort()}remove(e){this._list.splice(this._list.findIndex(t=>t.name===e.name),1);let t=this._map.get(e.name);t&&(this._map.delete(e.name),this._name.delete(t))}has(e){return this._map.has(e.name)}get(e){return this._map.get(e)||this.emptyProvider}getName(e){if(!this._name.has(e))throw Error(`'${e.label}' is not a registered theme provider.`);return this._name.get(e)}create(e,t,r={}){let a=this.get(e);return a.factory(t,{...o.e.getDefaultValues(a.getParams(t)),...r})}getApplicableList(e){return this._list.filter(t=>t.provider.isApplicable(e))}getApplicableTypes(e){return l(this.getApplicableList(e))}clear(){this._list.length=0,this._map.clear(),this._name.clear()}}},65109:function(e,t,r){r.d(t,{i:function(){return o}});var a=r(67589),n=r(30502),i=r(20694);function o(e,t){return{kind:e,layers:t}}!function(e){function t(e){return 0===e.layers.length}e.Empty={kind:"empty-loci",layers:[]},e.areEqual=function(e,t){if(0===e.layers.length&&0===t.layers.length)return!0;
7319if(e.layers.length!==t.layers.length)return!1;for(let r=0,n=e.layers.length;r<n;++r)if(e.layers[r].value!==t.layers[r].value||!a.o_.areEqual(e.layers[r].loci,t.layers[r].loci))return!1;return!0},e.isEmpty=t,e.remap=function(e,t){if("element-loci"!==e.kind)return e;{let r=[];for(let a of e.layers){let e=n.StructureElement.Loci.remap(a.loci,t);n.StructureElement.Loci.isEmpty(e)||r.push({loci:e,value:a.value})}return{kind:"element-loci",layers:r}}},e.merge=function(e){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,r=new Map,a=n.StructureElement.Loci.none(t);for(let t=0,i=e.layers.length;t<i;++t){let{loci:o,value:s}=e.layers[i-t-1];o=n.StructureElement.Loci.subtract(o,a),a=n.StructureElement.Loci.union(o,a),n.StructureElement.Loci.isEmpty(o)||(r.has(s)&&(o=n.StructureElement.Loci.union(o,r.get(s))),r.set(s,o))}let i=[];return r.forEach((e,t)=>{i.push({loci:e,value:t})}),{kind:"element-loci",layers:i}}},e.filter=function(e,r){if(t(e)||"element-loci"!==e.kind)return e;{let{structure:t}=e.layers[0].loci,a=[];for(let i of e.layers){let{loci:e,value:o}=i,s=n.StructureElement.Loci.remap(e,r);e=n.StructureElement.Loci.remap(s,t),n.StructureElement.Loci.isEmpty(e)||a.push({loci:e,value:o})}return{kind:"element-loci",layers:a}}},e.ofScript=function(e,t){let r=[];for(let a=0,o=e.length;a<o;++a){let{script:o,value:s}=e[a],l=i.Script.toLoci(o,t);n.StructureElement.Loci.isEmpty(l)||r.push({loci:l,value:s})}return{kind:"element-loci",layers:r}},e.ofBundle=function(e,t){let r=[];for(let a=0,i=e.length;a<i;++a){let{bundle:i,value:o}=e[a],s=n.StructureElement.Bundle.toLoci(i,t.root);r.push({loci:s,value:o})}return{kind:"element-loci",layers:r}},e.toBundle=function(e){let t=[];for(let r=0,a=e.layers.length;r<a;++r){let{loci:a,value:i}=e.layers[r],o=n.StructureElement.Bundle.fromLoci(a);t.push({bundle:o,value:i})}return{kind:"element-loci",layers:t}}}(o||(o={}))},64770:function(e,t,r){r.d(t,{K:function(){return i}});var a=r(58684),n=r(75042);function i(e,t="",r=""){return i.create(e,t,r)}!function(e){var t;function r(e){return e.triggers.map(i.format).join(" or ")}function i(e,t){return i.create(e,t)}e.create=function(e,t="",r=""){return{triggers:e,action:t,description:r}},e.isBinding=function(e){return!!e&&Array.isArray(e.triggers)&&"string"==typeof e.action},e.Empty={triggers:[],action:"",description:""},e.isEmpty=function(e){return 0===e.triggers.length||e.triggers.every(e=>void 0===e.buttons&&void 0===e.modifiers&&!e.code)},e.match=function(e,t,r){return e.triggers.some(e=>i.match(e,t,r))},e.matchKey=function(e,t,r,a){return e.triggers.some(e=>i.matchKey(e,t,r,a))},e.formatTriggers=r,e.format=function(e,t=""){let a=e.description||(0,n.ce)(t);return(0,n.sX)(a,{triggers:"<i>"+r(e)+"</i>"})},e.Trigger=i,e.TriggerKey=function(e,t){return i.create(void 0,t,e)},(t=i=e.Trigger||(e.Trigger={})).create=function(e,t,r){return{buttons:e,modifiers:t,code:r}},t.Empty={},t.match=function(e,t,r){let{buttons:n,modifiers:i}=e;return void 0!==n&&(n===t||a.b4.has(n,t))&&(!i||a.N0.areEqual(i,r))},t.matchKey=function(e,t,r,n){let{modifiers:i,code:o}=e;return void 0!==o&&(o===t||1===o.length&&4===t.length&&t.startsWith("Key")&&!!n&&1===n.length&&n.toUpperCase()===o.toUpperCase())&&(!i||a.N0.areEqual(i,r))},t.format=function(e){var t;let r=[],a=function(e,t){let r=[];return void 0!==e||t?0===e?r.push("mouse hover"):void 0!==e&&(o.has(e,o.Flag.Primary)&&r.push("left mouse button"),o.has(e,o.Flag.Secondary)&&r.push("right mouse button"),o.has(e,o.Flag.Auxilary)&&r.push("wheel/middle mouse button"),o.has(e,o.Flag.Forth)&&r.push("three fingers")):r.push("any mouse button"),r.join(" + ")}(e.buttons,e.code);a&&r.push(a);let i=((null==(t=e.code)?void 0:t.startsWith("Key"))&&(t=t.substring(3)),t&&(0,n.l9)(t).toLowerCase());i&&r.push(i);let s=function(e,t){let r=[];return e&&(e.alt&&r.push("alt key"),e.control&&r.push("control key"),e.meta&&r.push("meta/command key"),e.shift&&r.push("shift key")),r.join(" + ")}(e.modifiers);return s&&r.push(s),r.join(" + ")}}(i||(i={}));let o=a.b4},34052:function(e,t,r){function a(){var e;if("undefined"==typeof navigator||"undefined"==typeof window)return!1;let t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|
7319sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(e.substr(0,4)))&&(t=!0),t}function n(){if("undefined"==typeof navigator||"undefined"==typeof window)return!1;let e=/iPad|iPhone|iPod/.test(navigator.userAgent),t=navigator.userAgent.includes("Macintosh"),r=navigator.maxTouchPoints>=4;return!window.MSStream&&(e||t&&r)}function i(){if("undefined"==typeof navigator||!("xr"in navigator))return!1;let e=navigator.userAgent||"";return/OculusBrowser\//.test(e)||/PicoBrowser\//.test(e)}r.d(t,{$C:function(){return n},K1:function(){return a},LI:function(){return i}})},86276:function(e,t,r){r.d(t,{b:function(){return c}});var a=r(22177),n=r(38675),i=r(38964),o=r(43975),s=r(58463),l=r(14086),u=r(75042);function c(){}!function(e){e.Type={none:0,plane:1,sphere:2,cube:3,cylinder:4,infiniteCone:5},e.Params={variant:l.e.Select("pixel",l.e.arrayToOptions(["instance","pixel"])),objects:l.e.ObjectList({type:l.e.Select("plane",l.e.objectToOptions(e.Type,e=>(0,u.ce)(e))),invert:l.e.Boolean(!1),position:l.e.Vec3((0,o.A)()),rotation:l.e.Group({axis:l.e.Vec3(o.A.create(1,0,0)),angle:l.e.Numeric(0,{min:-180,max:180,step:1},{description:"Angle in Degrees"})},{isExpanded:!0}),scale:l.e.Vec3(o.A.create(1,1,1)),transform:l.e.Mat4(n.y.identity())},e=>(0,u.ce)(e.type))};let t=(0,i.D)(),r=(0,i.D)(),c=(0,o.A)(),d=(0,o.A)(),p=(0,n.y)(),f=(0,n.y)();e.getClip=function(r,a){let l=r.objects.length,{type:u,invert:c,position:d,rotation:p,scale:f,transform:m}=(null==a?void 0:a.objects)||{count:0,type:Array(l).fill(1),invert:Array(l).fill(!1),position:Array(3*l).fill(0),rotation:Array(4*l).fill(0),scale:Array(3*l).fill(1),transform:Array(16*l).fill(0)};for(let a=0;a<l;++a){let l=r.objects[a];u[a]=e.Type[l.type],c[a]=l.invert,o.A.toArray(l.position,d,3*a),i.D.toArray(i.D.setAxisAngle(t,l.rotation.axis,(0,s.Id)(l.rotation.angle)),p,4*a),o.A.toArray(l.scale,f,3*a),n.y.toArray(l.transform,m,16*a)}return{variant:r.variant,objects:{count:l,type:u,invert:c,position:d,rotation:p,scale:f,transform:m}}},e.areEqual=function(e,s){if(e.variant!==s.variant||e.objects.count!==s.objects.count)return!1;let l=e.objects,u=s.objects;for(let e=0,s=l.count;e<s;++e)if(l.invert[e]!==u.invert[e]||l.type[e]!==u.type[e]||(o.A.fromArray(c,l.position,3*e),o.A.fromArray(d,u.position,3*e),!o.A.equals(c,d))||(o.A.fromArray(c,l.scale,3*e),o.A.fromArray(d,u.scale,3*e),!o.A.equals(c,d))||(i.D.fromArray(t,l.rotation,4*e),i.D.fromArray(r,u.rotation,4*e),!i.D.equals(t,r))||(n.y.fromArray(p,l.transform,16*e),n.y.fromArray(f,u.transform,16*e),!n.y.areEqual(p,f,a.I)))return!1;return!0}}(c||(c={}))},7922:function(e,t,r){r.d(t,{t:function(){return a}});let a=(0,r(34602).E)({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflower:6591981,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,laserlemon:16777044,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrod:16448210,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,maroon2:8323
7319072,maroon3:11546720,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,purple2:8323199,purple3:10494192,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});!function(){let e=new Map;Object.keys(a).forEach(t=>{e.set(a[t],t)})}()},62713:function(e,t,r){r.d(t,{X:function(){return x},r:function(){return b}});var a=r(79455),n=r(14086),i=r(58240),o=r(65740),s=r(67546),l=r(85764),u=r(7922);let c={hue:n.e.Interval([1,360],{min:0,max:360,step:1}),chroma:n.e.Interval([40,70],{min:0,max:100,step:1}),luminance:n.e.Interval([15,85],{min:0,max:100,step:1}),sort:n.e.Select("contrast",n.e.arrayToOptions(["none","contrast"]),{description:"no sorting leaves colors approximately ordered by hue"}),clusteringStepCount:n.e.Numeric(50,{min:10,max:200,step:1},{isHidden:!0}),minSampleCount:n.e.Numeric(800,{min:100,max:5e3,step:100},{isHidden:!0}),sampleCountFactor:n.e.Numeric(5,{min:1,max:100,step:1},{isHidden:!0})},d=[0,0,0],p=[0,0,0];function f(e,t){let r=1/0,a=0;for(let n=0;n<e.length;n++){let o=i.D.distance(t,e[n]);o<r&&(r=o,a=n)}return a}var m=r(66939),h=r(64726);let g={type:"generate",colorList:"red-yellow-blue"};function b(e={}){let t={...g,...e};return{palette:n.e.MappedStatic(t.type,{colors:n.e.Group({list:n.e.ColorList(t.colorList)},{isFlat:!0}),generate:n.e.Group({...c,maxCount:n.e.Numeric(75,{min:1,max:250,step:1})},{isFlat:!0})},{options:[["colors","Color List"],["generate","Generate Distinct"]]})}}n.e.getDefaultValues(b());let y={valueLabel:e=>`${e+1}`,minLabel:"Start",maxLabel:"End"};function x(e,t,r={}){var b;let x,S;if("colors"===t.palette.name&&"interpolate"===t.palette.params.list.kind){let{list:a}=t.palette.params,n=[0,e-1],{minLabel:i,maxLabel:o}={...y,...r},s=a.colors;0===s.length&&(s=(0,m.jy)(g.colorList).list);let l=h.q.create({listOrName:s,domain:n,minLabel:i,maxLabel:o});S=l.legend,x=l.color}else{let h;"colors"===t.palette.name?0===(h=t.palette.params.list.colors.map(e=>Array.isArray(e)?e[0]:e)).length&&(h=(0,m.jy)("dark-2").list.map(e=>Array.isArray(e)?e[0]:e)):h=function(e,t={}){let r={...n.e.getDefaultValues(c),...t};if(e<=0)return[];let a=function(e,t){let r=new Map,a=Math.ceil(Math.cbrt(e)),n=(0,o.F)(),s=Math.max((t.hue[1]-t.hue[0])/a,1),l=Math.max((t.chroma[1]-t.chroma[0])/a,1),u=Math.max((t.luminance[1]-t.luminance[0])/a,1);for(let e=t.hue[0]+s/2;e<=t.hue[1];e+=s)for(let a=t.chroma[0]+l/2;a<=t.chroma[1];a+=l)for(let s=t.luminance[0]+u/2;s<=t.luminance[1];s+=u){let l=i.D.fromHcl((0,i.D)(),o.F.set(n,e,a,s));i.D.toHcl(d,l),i.D.fromColor(p,i.D.toColor(l)),d[0]>=t.hue[0]&&d[0]<=t.hue[1]&&d[1]>=t.chroma[0]&&d[1]<=t.chroma[1]&&d[2]>=t.luminance[0]&&d[2]<=t.luminance[1]&&p[0]>=l[0]-2&&p[0]<=l[0]+2&&p[1]>=l[1]-2&&p[1]<=l[1]+2&&p[2]>=l[2]-2&&p[2]<=l[2]+2&&r.set(i.D.toColor(l),l)}return Array.from(r.values())}(Math.max(r.minSampleCount,e*r.sampleCountFactor),r);if(a.length<e)return console.warn("Not enough samples to generate distinct colors, increase sample count."),Array(e).fill(u.t.lightgrey);let m=[],h=[],g=Math.floor(a.length/e);for(let t=0;t<a.length&&(m.push(a[t]),h.push([]),!(m.length>=e));t+=g);for(let e=1;e<=r.clusteringStepCount;++e){let e=(0,s.I8)(h),t=(0,s.I8)(a);for(let r=0;r<m.length;++r){let n=f(t,m[r]);e[r].push(a[n]),t.splice(n,1)}for(let r=0;r<t.length;++r)e[f(m,a[r])].push(a[r]);let r=(0,s.I8)(m);for(let t=0;t<e.length;++t){let r=e[t],a=r.length;if(0===a)continue;let n=0,i=0,o=0;for(let e of r)n+=e[0],i+=e[1],o+=e[2];let s=n/a,l=i/a,u=o/a;m[t]=[s,l,u]}if((0,l.vZ)(r,m))break}return("contrast"===r.sort?function(e){let t=e.slice(0),r=[t.shift()];for(;t.length>0;){let e=r[r.length-1],a=0,n=Number.NEGATIVE_INFINITY;for(let r=0;r<t.length;++r){let o=i.D.distance(e,t[r]);o>n&&(n=o,a=r)}r.push(t.splice(a,1)[0])}return r}(m):m).map(e=>i.D.toColor(e))}(e=Math.min(e,t.palette.params.maxCount),t.palette.params);let g=null!==(b=r.valueLabel)&&void 0!==b?b:y.valueLabel,T=h.length,C=[];for(let t=0;t<e;++t){let e=t%T;void 0===C[e]?C[e]=[g(t),h[e]]:C[e][0]+=`, ${g(t)}`}S=(0,a.Z)(C),x=e=>h[e%T]}return{color:x,legend:S}}},55368:function(e,t,r){r.d(t,{Os:function(){return u},mw:function(){return d},uf:function(){return l}});var a=r(34602),n=r(7922);let i=/^#([0-9A-F]{3}|[0-9A-F]{4}|[0-9A-F]{6}|[0-9A-F]{8})$/i,o=/^rgb\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*\)$/i;function s(e){let t;if(null==e)return;if(i.test(e)&&(4===e.length?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:5===e.length?e=`#${e[1]}${e[1]}${e[2]}${e[2]}${e[3]}${e[3]}`:9===e.length&&(e=e.substring(0,7)),void 0!==(t=a.Il.fromHexStyle(e))&&!isNaN(t))||void 0!==(t=n.t[e.toLowerCase()]))return t;let r=o.exec(e);if(r){let e=parseInt(r[1],10),t=parseInt(r[2],10),n=parseInt(r[3],10);if(e>=0&&e<=255&&t>=0&&t<=255&&n>=0&&n<=255)return a.Il.fromRgb(e,t,n)}}function l(e){let t=e.length,r=[];if(e.every(e=>Array.isArray(e))){let t=[...e];if(!t[0])return"linear-gradient(to right, #000 0%, #000 100%)";t.sort((e,t)=>
7319e[1]-t[1]),r.push(`${a.Il.toStyle(t[0][0])} ${(100*t[0][1]).toFixed(2)}%`);for(let e=0,n=t.length-1;e<n;++e){let[n,i]=t[e],[o,s]=t[e+1],l=i+(s-i)/2;r.push(`${a.Il.toStyle(n)} ${(100*l).toFixed(2)}%`,`${a.Il.toStyle(o)} ${(100*l).toFixed(2)}%`)}r.push(`${a.Il.toStyle(t[t.length-1][0])} ${(100*t[t.length-1][1]).toFixed(2)}%`)}else{r.push(`${c(e[0])} ${1/t*100}%`);for(let a=1,n=t-1;a<n;++a)r.push(`${c(e[a])} ${a/t*100}%`,`${c(e[a])} ${(a+1)/t*100}%`);r.push(`${c(e[t-1])} ${(t-1)/t*100}%`)}return`linear-gradient(to right, ${r.join(", ")})`}function u(e){let t;if(0===e.length)return"linear-gradient(to right, #000 0%, #000 100%)";if(e.every(e=>Array.isArray(e))){let r=[...e];r.sort((e,t)=>e[1]-t[1]),t=r.map(e=>c(e,!0))}else t=e.map(e=>c(e));return`linear-gradient(to right, ${t.join(", ")})`}function c(e,t=!1){return Array.isArray(e)?t?`${a.Il.toStyle(e[0])} ${(100*e[1]).toFixed(2)}%`:a.Il.toStyle(e[0]):a.Il.toStyle(e)}function d(e,t=/,/){let r=[],a=e.replace(/\s+/g,""),n=0,i=0;for(let e=0,o=a.length;e<o;++e){let o=a[e];if("("===o){i++;continue}if(")"===o){i>0&&i--;continue}if(i>0||!t.test(o))continue;let l=a.substring(n,e);n=e+1;let u=s(l);void 0!==u&&r.push(u)}if(n<a.length){let e=a.substring(n),t=s(e);console.log(e,t),void 0!==t&&r.push(t)}return r}},42071:function(e,t,r){function a(e){try{e.dispatchEvent(new MouseEvent("click"))}catch(r){let t=document.createEvent("MouseEvents");
7319t.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}function n(e,t="download"){if(e){if("download"in HTMLAnchorElement.prototype){let r=document.createElement("a");r.download=t,r.rel="noopener","string"==typeof e?(r.href=e,a(r)):(r.href=URL.createObjectURL(e),setTimeout(()=>URL.revokeObjectURL(r.href),4e4),setTimeout(()=>a(r)))}else if("undefined"!=typeof navigator&&navigator.msSaveOrOpenBlob)navigator.msSaveOrOpenBlob(e,t);else{let t=window.navigator.userAgent,r=/Safari/i.test(t),a=/CriOS\/[\d]+/.test(t),n=e=>{var t;t=a?e:e.replace(/^data:[^;]*;/,"data:attachment/file;"),window.open(t,"_blank")||(window.location.href=t)};if((r||a)&&FileReader){if(e instanceof Blob){let t=new FileReader;t.onloadend=()=>n(t.result),t.readAsDataURL(e)}else n(e)}else{let t=URL.createObjectURL("string"==typeof e?new Blob([e]):e);location.href=t,setTimeout(()=>URL.revokeObjectURL(t),4e4)}}}}r.d(t,{L:function(){return n}})},12845:function(e,t,r){r.d(t,{W:function(){return n}});let a=["gz","zip"];function n(e){let t=e,r="",n=t.lastIndexOf("?"),i=-1!==n?t.substring(n):"",o=(t=t.substring(0,-1===n?t.length:n)).replace(/^.*[\\/]/,""),s=o.substring(0,o.lastIndexOf(".")),l=o.split("."),u=l.length>1?(l.pop()||"").toLowerCase():"",c=t.match(/^(.+):\/\/(.+)$/);c&&(r=c[1].toLowerCase(),t=c[2]||"");let d=t.substring(0,t.lastIndexOf("/")+1);if(a.includes(u)){let e=t.length-u.length-1;u=(t.substring(0,e).split(".").pop()||"").toLowerCase();let r=s.length-u.length-1;s=s.substring(0,r)}return{path:t,name:o,ext:u,base:s,dir:d,protocol:r,query:i}}},58684:function(e,t,r){r.d(t,{N0:function(){return s},b4:function(){return l},fN:function(){return A},h9:function(){return S},hS:function(){return y},ij:function(){return x},nZ:function(){return c},rR:function(){return C}});var a,n,i,o,s,l,u,c,d=r(89987),p=r(85409),f=r(81458),m=r(43975),h=r(22177),g=r(37893),b=r(85764);function y(e){if("object"==typeof e){if("buttons"in e)return e.buttons;if("which"in e){let t=e.which;if(2===t)return 4;if(3===t)return 2;if(t>0)return 1<<t-1}}return 0}function x(e){if("object"==typeof e&&"button"in e){let t=e.button;if(1===t)return 4;if(2===t)return 2;if(t>=0)return 1<<t}return 0}function S(e){return{alt:"altKey"in e&&e.altKey,shift:"shiftKey"in e&&e.shiftKey,control:"ctrlKey"in e&&e.ctrlKey,meta:"metaKey"in e&&e.metaKey}}let T={noScroll:!0,noMiddleClickScroll:!0,noContextMenu:!0,noPinchZoom:!0,noTextSelect:!0,preventGestures:!1,mask:(e,t)=>!0,pixelScale:1};!function(e){function t(e,t){return e.shift===t.shift&&e.alt===t.alt&&e.control===t.control&&e.meta===t.meta}function r(e={}){return{shift:!!e.shift,alt:!!e.alt,control:!!e.control,meta:!!e.meta}}e.None=r(),e.areEqual=t,e.areNone=function(r){return t(r,e.None)},e.size=function(e){if(!e)return 0;let t=0;return e.shift&&t++,e.alt&&t++,e.control&&t++,e.meta&&t++,t},e.create=r}(s||(s={})),(a=l||(l={})).has=g.c.has,a.create=g.c.create,(n=a.Flag||(a.Flag={}))[n.None=0]="None",n[n.Primary=1]="Primary",n[n.Secondary=2]="Secondary",n[n.Auxilary=4]="Auxilary",n[n.Forth=8]="Forth",n[n.Five=16]="Five",n[n.Trigger=32]="Trigger",n[n.Squeeze=48]="Squeeze";let C={key:"",code:"",modifiers:s.None,x:-1,y:-1,pageX:-1,pageY:-1,preventDefault:b.ZT};function O(){return{drag:new d.x,interactionEnd:new d.x,click:new d.x,move:new d.x,wheel:new d.x,pinch:new d.x,gesture:new d.x,resize:new d.x,leave:new d.x,enter:new d.x,modifiers:new d.x,key:new d.x,keyUp:new d.x,keyDown:new d.x,lock:new d.x,trackedPointers:new d.x}}(i=u||(u={}))[i.Stopped=0]="Stopped",i[i.Started=1]="Started",i[i.Moving=2]="Moving";let I=["Backspace","Delete"];function A(e){let t=0,r=0,a=0,n=0,i=0;return"detail"in e&&(r=e.detail),"wheelDelta"in e&&(r=-e.wheelDelta/120),"wheelDeltaY"in e&&(r=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=r,r=0),a=10*t,n=10*r,"deltaY"in e&&(n=e.deltaY),"deltaX"in e&&(a=e.deltaX),"deltaZ"in e&&(i=e.deltaZ),(a||n||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,n*=40,i*=40):(a*=800,n*=800,i*=800)),a&&!t&&(t=a<0?-1:1),n&&!r&&(r=n<0?-1:1),{spinX:t,spinY:r,dx:a,dy:n,dz:i}}(o=c||(c={})).create=function(e={}){let{noScroll:t,noContextMenu:r}={...T,...e};return{noScroll:t,noContextMenu:r,pointerLock:!1,width:0,height:0,pixelRatio:1,...O(),setPixelScale:b.ZT,updateTrackedPointers:b.ZT,updateScreenTouches:b.ZT,requestPointerLock:b.ZT,exitPointerLock:b.ZT,dispose:b.ZT}},o.fromElement=function(e,t={}){let r,a,n,i,{noScroll:o,noMiddleClickScroll:c,noContextMenu:d,noPinchZo
7319om:g,noTextSelect:b,mask:S,pixelScale:C,preventGestures:w}={...T,...t},D=e.clientWidth*N(),E=e.clientHeight*N(),M=!1,P=(0,p.l_)(),k=(0,f.S)(),B=(0,f.S)(),_=(0,f.S)(),R=(0,f.S)(),F=(0,f.S)(),L={shift:!1,alt:!1,control:!1,meta:!1},z={x:-1,y:-1,pageX:-1,pageY:-1};function N(){return window.devicePixelRatio*C}function G(){return{...L}}function U(t){return t.target===document.body||t.target===e}let V=u.Stopped,j=!1,H=l.create(l.Flag.None),q=l.Flag.None,X=!1,W=!1;void 0!==window.ResizeObserver&&(i=new window.ResizeObserver(eZ));let K=O(),{drag:Q,interactionEnd:Z,wheel:Y,pinch:$,gesture:J,click:ee,move:et,leave:er,enter:ea,resize:en,modifiers:ei,key:eo,keyUp:es,keyDown:el,lock:eu,trackedPointers:ec}=K;function ed(){e1(M=e.ownerDocument.pointerLockElement===e),eu.next(M)}function ep(){console.error("Unable to use Pointer Lock API"),e1(M=!1),eu.next(M)}function ef(e){S(e.clientX,e.clientY)&&d&&e.preventDefault()}function em(e){L.alt=e.altKey,L.shift=e.shiftKey,L.control=e.ctrlKey,L.meta=e.metaKey}function eh(){(H||L.shift||L.alt||L.meta||L.control)&&(H=0,L.shift=L.alt=L.control=L.meta=!1)}function eg(e){let t=!1;!L.alt&&e.altKey&&(t=!0,L.alt=!0),!L.shift&&e.shiftKey&&(t=!0,L.shift=!0),!L.control&&e.ctrlKey&&(t=!0,L.control=!0),!L.meta&&e.metaKey&&(t=!0,L.meta=!0),t&&X&&ei.next(G()),U(e)&&X&&el.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}function ev(e){let t=!1;L.alt&&!e.altKey&&(t=!0,L.alt=!1),L.shift&&!e.shiftKey&&(t=!0,L.shift=!1),L.control&&!e.ctrlKey&&(t=!0,L.control=!1),L.meta&&!e.metaKey&&(t=!0,L.meta=!1),t&&X&&ei.next(G()),I.includes(e.key)&&eb(e),U(e)&&X&&es.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}function eb(e){U(e)&&X&&eo.next({key:e.key,code:e.code,modifiers:G(),...z,preventDefault:()=>e.preventDefault()})}e.addEventListener("contextmenu",ef,!1),e.addEventListener("wheel",eV,!1),e.addEventListener("mousedown",eF,!1),window.addEventListener("mousemove",eL,!1),window.addEventListener("mouseup",ez,!1),e.addEventListener("touchstart",eB,!1),e.addEventListener("touchmove",eR,!1),e.addEventListener("touchend",e_,!1),e.addEventListener("gesturechange",eK,!1),e.addEventListener("gesturestart",eX,!1),e.addEventListener("gestureend",eQ,!1),window.addEventListener("blur",eh),window.addEventListener("keyup",ev,!1),window.addEventListener("keydown",eg,!1),window.addEventListener("keypress",eb,!1),document.addEventListener("pointerlockchange",ed,!1),document.addEventListener("pointerlockerror",ep,!1),null!=i?i.observe(e.parentElement):window.addEventListener("resize",eZ,!1);let ey={primary:{prev:void 0,down:(0,f.S)(),end:(0,f.S)(),axes:[]},secondary:{prev:void 0,down:(0,f.S)(),end:(0,f.S)(),axes:[]},distance:-1};function ex(e,t,r){let a=l.has(t,e);return!!r&&l.has(r,e)&&!a}function eS(e,t){let{x:r,y:a,dx:n,dy:i,ray:o,buttons:u,axes:c}=e,[d,p]=[r,a],m=s.create(),h=t?ey.secondary:ey.primary,{prev:g}=h;u===l.Flag.Secondary?et.next({x:r,y:a,pageX:d,pageY:p,buttons:l.Flag.None,button:l.Flag.None,modifiers:m,inside:!0,onElement:!0,ray:o}):(null==g?void 0:g.buttons)===l.Flag.Secondary&&er.next(void 0);let b=l.has(u,l.Flag.Primary),y=!!g&&l.has(g.buttons,l.Flag.Primary);if(y&&!b&&(f.S.set(h.end,r,a),20>f.S.distance(h.end,h.down)&&ee.next({x:r,y:a,pageX:d,pageY:p,buttons:l.Flag.Trigger,button:l.Flag.Trigger,modifiers:m,ray:o}),Z.next(void 0)),b){let e=!y;Q.next({x:r,y:a,dx:n,dy:i,pageX:d,pageY:p,buttons:l.Flag.Trigger,button:l.Flag.Trigger,modifiers:m,isStart:e,useDelta:!0}),e&&f.S.set(h.down,r,a)}let x={x:0,y:0,pageX:0,pageY:0,modifiers:m,preventDefault:()=>{}};if(ex(l.Flag.Forth,u,null==g?void 0:g.buttons)){let e=t?"GamepadX":"GamepadA";es.next({...x,code:e,key:e})}if(ex(l.Flag.Five,u,null==g?void 0:g.buttons)){let e=t?"GamepadY":"GamepadB";es.next({...x,code:e,key:e})}c&&(c[2]<0?(el.next({...x,code:"GamepadLeft",key:"GamepadLeft"}),es.next({...x,code:"GamepadRight",key:"GamepadRight"})):c[2]>0?(el.next({...x,code:"GamepadRight",key:"GamepadRight"}),es.next({...x,code:"GamepadLeft",key:"GamepadLeft"})):c[2]!==h.axes[2]&&(es.next({...x,code:"GamepadLeft",key:"GamepadLeft"}),es.next({...x,code:"GamepadRight",key:"GamepadRight"})),c[3]<0?(el.next({...x,code:"GamepadUp",key:"GamepadUp"}),es.next({...x,code:"GamepadDown",key:"GamepadDown"})):c[3]>0?(el.next({...x,code:"GamepadDown",key:"GamepadDown"}),es.next({...x,code:"GamepadUp",key:"GamepadUp"})):c[3]!==h.axes[3]&&(es.next({...x,code:"GamepadUp",key:"GamepadUp"}),es.next({...x,code:"GamepadDown",key:"GamepadDown"}
7319))),h.axes=c||[],h.prev=e}function eT(e,t,r){let a=m.A.distance(e.ray.origin,t.ray.origin);if(ey.distance>0){let e=a/ey.distance;J.next({scale:e,rotation:0,deltaScale:0,deltaRotation:0,buttons:r,button:r,modifiers:G()})}ey.distance=a}let eC=-1;function eO(e){let t=e.touches[0],r=e.touches[1];return{clientX:(t.clientX+r.clientX)/2,clientY:(t.clientY+r.clientY)/2,pageX:(t.pageX+r.pageX)/2,pageY:(t.pageY+r.pageY)/2,target:e.target}}function eI(e){let t=e.touches[0].pageX-e.touches[1].pageX,r=e.touches[0].pageY-e.touches[1].pageY;return Math.sqrt(t*t+r*r)}let eA=-1,ew=(0,f.S)(),eD=(0,f.S)(),eE=(0,f.S)(),eM=!1,eP=0,ek=1;function eB(e){if(e.preventDefault(),n=void 0,eA=-1,1===e.touches.length)H=q=l.Flag.Primary,eA=0,f.S.set(ew,e.touches[0].pageX,e.touches[0].pageY),n=e.touches[0],eG(e.touches[0]),f.S.copy(eE,B),eM=!0;else if(2===e.touches.length){H=l.Flag.Secondary|l.Flag.Auxilary,q=l.Flag.Secondary,em(e),ek=1,eP=eI(e);let{pageX:t,pageY:r}=eJ(eO(e));eM||(e$(eE,eO(e)),eM=!0),$.next({isStart:!0,distance:eP,delta:0,fraction:ek,fractionDelta:0,startX:eE[0],startY:eE[1],centerPageX:t,centerPageY:r,buttons:H,button:q,modifiers:G()})}else 3===e.touches.length&&(H=q=l.Flag.Forth,eG(eO(e)))}function e_(e){if(eN(),n&&eA<=4){let e=n;if(!S(e.clientX,e.clientY))return;e$(eD,e);let{pageX:t,pageY:r}=eJ(e),[a,i]=eD;ee.next({x:a,y:i,pageX:t,pageY:r,buttons:H,button:q,modifiers:G()})}n=void 0,eM=!1}function eR(e){if(q=l.Flag.None,g&&(e.preventDefault(),e.stopPropagation(),e.originalEvent&&(e.originalEvent.preventDefault(),e.originalEvent.stopPropagation())),n=void 0,1===e.touches.length)H=l.Flag.Primary,n=e.touches[0],eA<0||(f.S.set(eD,e.touches[0].pageX,e.touches[0].pageY),eA+=f.S.distance(ew,eD),f.S.copy(ew,eD)),eU(e.touches[0]);else if(2===e.touches.length){H=l.Flag.Secondary|l.Flag.Auxilary,q=l.Flag.Secondary,em(e);let{pageX:t,pageY:r}=eJ(eO(e)),a=eI(e),n=eP-a,i=eP/a,o=i-ek;ek=i,$.next({isStart:!1,distance:a,delta:n,fraction:i,fractionDelta:o,startX:eE[0],startY:eE[1],centerPageX:t,centerPageY:r,buttons:H,button:q,modifiers:G()})}else 3===e.touches.length&&(H=l.Flag.Forth,eU(eO(e)))}function eF(e){em(e),H=y(e),q=x(e),c&&H===l.Flag.Auxilary&&e.preventDefault,eG(e)}function eL(e){em(e),H=y(e),q=l.Flag.None,eU(e)}function ez(e){em(e),H=y(e),q=x(e),function(e){if(V=u.Stopped,S(e.clientX,e.clientY)){if(e$(_,e),!W&&4>f.S.distance(_,k)){let{pageX:t,pageY:r}=eJ(e),[a,n]=_;ee.next({x:a,y:n,pageX:t,pageY:r,buttons:H,button:q,modifiers:G()})}W=!1}}(e),eN()}function eN(){Z.next(void 0)}function eG(e){S(e.clientX,e.clientY)&&(e$(B,e),f.S.copy(k,B),eY(B)&&(V=u.Started))}function eU(t){var r;e$(_,t);let{pageX:a,pageY:n}=eJ(t),[i,o]=_,{movementX:s,movementY:l}=t,c=eY(_)&&S(t.clientX,t.clientY);if(X&&!c?er.next(void 0):!X&&c&&ea.next(void 0),X=c,z.x=i,z.y=o,z.pageX=a,z.pageY=n,et.next({x:i,y:o,pageX:a,pageY:n,movementX:s,movementY:l,buttons:H,button:q,modifiers:G(),inside:c,onElement:t.target===e}),V===u.Stopped||(b&&(null===(r=t.preventDefault)||void 0===r||r.call(t)),f.S.div(R,f.S.sub(R,_,B),(F[0]=e.clientWidth,F[1]=e.clientHeight,F)),f.S.magnitude(R)<h.I))return;let d=V===u.Started;if(d&&!S(t.clientX,t.clientY))return;f.S.distance(_,k)>=4&&(W=!0);let[p,m]=R;Q.next({x:i,y:o,dx:p,dy:m,pageX:a,pageY:n,buttons:H,button:q,modifiers:G(),isStart:d}),f.S.copy(B,_),V=u.Moving}function eV(e){if(!S(e.clientX,e.clientY))return;e$(_,e);let{pageX:t,pageY:r}=eJ(e),[a,n]=_;o&&e.preventDefault();let i=A(e);H=q=l.Flag.Auxilary,(i.dx||i.dy||i.dz)&&Y.next({x:a,y:n,pageX:t,pageY:r,...i,buttons:H,button:q,modifiers:G()})}function ej(e){var t,r;w&&(e.preventDefault(),null===(t=e.stopImmediatePropagation)||void 0===t||t.call(e),null===(r=e.stopPropagation)||void 0===r||r.call(e))}let eH=0,eq=0;function eX(e){ej(e),eH=e.scale,eq=e.rotation,J.next({scale:e.scale,rotation:e.rotation,deltaRotation:0,deltaScale:0,isStart:!0,buttons:H,button:q,modifiers:G()})}function eW(e,t){J.next({scale:e.scale,rotation:e.rotation,deltaRotation:eq-e.rotation,deltaScale:eH-e.scale,isEnd:t,buttons:H,button:q,modifiers:G()}),eq=e.rotation,eH=e.scale}function eK(e){ej(e),eW(e)}function eQ(e){ej(e),eW(e,!0)}function eZ(){D=e.clientWidth*N(),E=e.clientHeight*N(),en.next({})}function eY(t){if(e instanceof Window||e instanceof Document||e===document.body)return!0;{let r=e.getBoundingClientRect();return t[0]>=0&&t[1]>=0&&t[0]<r.width&&t[1]<r.height}}function e$(t,r){if(D=e.clientWidth*N(),E=e.clientHeight*N(),M){let e=N();t[0]=(P.x+P.width/2)/e,t[1]=(E-(P.y+P.height/2))/e}else{let a=e.getBoundingClientRect();t[0]=(r.clientX||0)-a.left,t[1]=(r.clientY||0)-a.top}return t}function eJ(e){return M?{pageX:Math.round(window.innerWidth/2)+P.x,pageY:Math.round(window.innerHeight/2)+P.y}:{pageX:e.pageX,pageY:e.pageY}}let e0=function(){var t;let r=document.createElement("div"),a="#000 30%, #0000 0 calc(100% - 30%), #000 0",n=`linear-gradient(0deg, ${a}) 50%/10% 100% no-repeat`,i=`linear-gradient(90deg, ${a}) 50%/100% 10% no-repeat`;return Object.assign(r.style,{width:"30px",aspectRatio:1,background:`${n}, ${i}, radial-gradient(circle at 50%, #000 5%, #0000 5%)`,display:"none",zIndex:1e3,position:"absolute",mixBlendMode:"difference",filter:"invert(1)"}),null===(t=e.parentElement)||void 0===t||t.appendChild(r),r}();function e1(e){if(e0.style.display=e?"block":"none",e){let e=N(),t=(P.x+P.width/2)/e,r=(P.y+P.height/2)/e;e0.style.width="30px",e0.style.left=`calc(${t}px - 15px)`,e0.style.bottom=`calc(${r}px - 15px)`}}return{get noScroll(){return o},set noScroll(value){o=value},get noContextMenu(){return d},set noContextMenu(value){d=value},get width(){return D},get height(){return E},get pixelRatio(){return N()},get pointerLock(){return M},...K,setPixelScale:t=>{C=t,D=e.clientWidth*N(),E=e.clientHeight*N()},updateTrackedPointers:e=>{(function(e){let t,r;for(let a of e)"right"===a.handedness?t=a:"left"===a.handedness&&(r=a);!t&&r&&(t=r,r=void 0),(null==t?void 0:t.buttons)===l.Flag.Primary&&(null==r?void 0:r.buttons)===l.Flag.Primary?eT(t,r,l.Flag.Trigger):(null==t?void 0:t.buttons)===l.Flag.Secondary&&(null==r?void 0:r.buttons)===l.Flag.Secondary?eT(t,r,l.Flag.Squeeze):(-1===ey.distance&&(t&&eS(t,!1),r&&eS(r,!0)),(null==t?void 0:t.buttons)||(null==r?void 0:r.buttons)||(ey.distance=-1))})(e),ec.next(e)},updateScreenTouches:e=>{!function(e){if(2===e.length){let t=f.S.fromObj(e[0]),a=f.S.fromObj(e[1]),n=f.S.distance(t,a),i=l.Flag.Trigger;if(eC>0){let e=n/eC;J.next({scale:e,rotation:0,deltaScale:0,deltaRotation:0,buttons:i,button:i,modifiers:G()})}eC=n,r=void 0;return}eC=-1;let t=e[0];if(!t){if(a&&r){let e=f.S.fromObj(a),t=f.S.fromObj(r);if(10>f.S.distance(e,t)){let[t,r]=e,[n,i]=[t,r],o=s.create(),u=l.Flag.Trigger,{ray:c}=a;ee.next({x:t,y:r,pageX:n,pageY:i,buttons:u,button:u,modifiers:o,ray:c})}Z.next(void 0)}r=void 0,a=void 0;return}let[n,i]=f.S.fromObj(t),[o,u]=[n,i],c=s.create(),d=l.Flag.Trigger,p=void 0===r,m=r?n-r.x:0,h=r?i-r.y:0;r=t,p&&(a=t),Q.next({x:n,y:i,dx:m,dy:h,pageX:o,pageY:u,buttons:d,button:d,modifiers:c,isStart:p,useDelta:!0})}(e)},requestPointerLock:t=>{P=t,M||e.requestPointerLock()},exitPointerLock:()=>{M&&e.ownerDocument.exitPointerLock()},dispose:function(){j||(j=!0,e.removeEventListener("contextmenu",ef,!1),e.removeEventListener("wheel",eV,!1),e.removeEventListener("mousedown",eF,!1),window.removeEventListener("mousemove",eL,!1),window.removeEventListener("mouseup",ez,!1),e.removeEventListener("touchstart",eB,!1),e.removeEventListener("touchmove",eR,!1),e.removeEventListener("touchend",e_,!1),e.removeEventListener("gesturechange",eK,!1),e.removeEventListener("gesturestart",eX,!1),e.removeEventListener("gestureend",eQ,!1),window.removeEventListener("blur",eh),window.removeEventListener("keyup",ev,!1),window.removeEventListener("keydown",eg,!1),window.removeEventListener("keypress",eb,!1),document.removeEventListener("pointerlockchange",ed,!1),document.removeEventListener("pointerlockerror",ep,!1),e0.remove(),null!=i?(i.unobserve(e.parentElement),i.disconnect()):window.removeEventListener("resize",eZ,!1))}}}},73969:function(e,t,r){var a,n;r.d(t,{B:function(){return a}}),(n=a||(a={})).message=function(e){return{type:"message",timestamp:new Date,message:e}},n.error=function(e){return{type:"error",timestamp:new Date,message:e}},n.warning=function(e){return{type:"warning",timestamp:new Date,message:e}},n.info=function(e){return{type:"info",timestamp:new Date,message:e}}},99289:function(e,t,r){r.d(t,{E5:function(){return o},Mz:function(){return f},O9:function(){return p},dd:function(){return i},hA:function(){return c},sb:function(){return m}});var a,n,i,o,s=r(97187),l=r(37893),u=r(97667);function c(e,t,r){e.fill(t,0,r)}function d(e,t,r){switch(r){case i.Highlight:e[t]|=1;break;case i.RemoveHighlight:e[t]&=-2;break;case i.Select:e[t]|=2;break;case i.Deselect:e[t]&=-3;break;case i.Toggle:e[t]^=2;break;case i.Clear:e[t]=0}}function p(e,t,r){if(r===i.None)return!1;if(s.X.is(t)){let a=s.X.start(t),n=s.X.end(t),o=a+3>>2,l=o+(n-4*o>>2);if(l<=o){for(let t=a;t<n;++t)d(e,t,r);return!0}let c=new Uint32Array(e.buffer,0,e.buffer.byteLength>>2),p=Math.min(4*o,n),f=Math.max(a,4*l);switch(r){case i.Highlight:for(let e=o;e<l;++e)c[e]|=16843009;break;case i.RemoveHighlight:for(let e=o;e<l;++e)c[e]&=-16843010;break;case i.Select:for(let e=o;e<l;++e)c[e]|=33686018;break;case i.Deselect:for(let e=o;e<l;++e)c[e]&=-33686019;break;case i.Toggle:for(let e=o;e<l;++e)c[e]^=33686018;break;case i.Clear:for(let e=o;e<l;++e)c[e]=0;break;default:(0,u.UT)(r)}for(let t=a;t<p;++t)d(e,t,r);for(let t=f;t<n;++t)d(e,t,r)}else switch(r){case i.Highlight:for(let r=0,a=t.length;r<a;++r)e[t[r]]|=1;break;case i.RemoveHighlight:for(let r=0,a=t.length;r<a;++r)e[t[r]]&=-2;break;case i.Select:for(let r=0,a=t.length;r<a;++r)e[t[r]]|=2;break;case i.Deselect:for(let r=0,a=t.length;r<a;++r)e[t[r]]&=-3;break;case i.Toggle:for(let r=0,a=t.length;r<a;++r)e[t[r]]^=2;break;case i.Clear:for(let r=0,a=t.length;r<a;++r)e[t[r]]=0;break;default:(0,u.UT)(r)}return!0}function f(e,t){let r=-1,a=-1;switch(e){case i.Highlight:0===t||1===t?(r=1,a=1):2===t||3===t?(r=1,a=3):r=1;break;case i.RemoveHighlight:0===t||1===t?(r=0,a=0):(2===t||3===t)&&(r=1,a=2);break;case i.Select:1===t||3===t?(r=1,a=3):0===t||2===t?(r=1,a=2):r=1;break;case i.Deselect:1===t||3===t?(r=1,a=1):(0===t||2===t)&&(r=0,a=0);break;case i.Toggle:1===t?(r=1,a=3):2===t?(r=0,a=0):3===t?(r=1,a=1):0===t&&(r=1,a=2);break;case i.Clear:r=0,a=0}return{average:r,status:a}}function m(e,t){switch(e){case i.Highlight:return .5;case i.RemoveHighlight:if(0===t)return 0;if(2===t||3===t)return .5;return -1;case i.Select:return .5;case i.Deselect:if(1===t||3===t)return .5;if(0===t)return 0;return -1;case i.Toggle:if(-1===t)return -1;return .5;case i.Clear:if(-1===t)return -1;if(0===t)return 0;return .5;case i.None:return -1;default:(0,u.UT)(e)}}(a=i||(i={}))[a.None=0]="None",a[a.Highlight=1]="Highlight",a[a.RemoveHighlight=2]="RemoveHighlight",a[a.Select=4]="Select",a[a.Deselect=8]="Deselect",a[a.Toggle=16]="Toggle",a[a.Clear=32]="Clear",(n=o||(o={})).is=l.c.has,n.All=i.Highlight|i.RemoveHighlight|i.Select|i.Deselect|i.Toggle|i.Clear,n.Highlighting=i.Highlight|i.RemoveHighlight|i.
7319Clear,n.Selecting=i.Select|i.Deselect|i.Toggle|i.Clear,n.isReverse=function(e,t){return e===i.Highlight&&t===i.RemoveHighlight||e===i.RemoveHighlight&&t===i.Highlight||e===i.Select&&t===i.Deselect||e===i.Deselect&&t===i.Select||e===i.Toggle&&t===i.Toggle}},34813:function(e,t,r){r.d(t,{F:function(){return i}});var a,n=r(14086);function i(e){return{...i.Zero,...e}}(a=i||(i={})).Zero={metalness:0,roughness:0,bumpiness:0},a.toArray=function(e,t,r){return t[r]=255*e.metalness,t[r+1]=255*e.roughness,t[r+2]=255*e.bumpiness,t},a.toArrayNormalized=function(e,t,r){return t[r]=e.metalness,t[r+1]=e.roughness,t[r+2]=e.bumpiness,t},a.areEqual=function(e,t){return e.metalness===t.metalness&&e.roughness===t.roughness&&e.bumpiness===t.bumpiness},a.toString=function({metalness:e,roughness:t,bumpiness:r}){return`M ${e.toFixed(2)} | R ${t.toFixed(2)} | B ${r.toFixed(2)}`},a.getParam=function(e){return n.e.Group({metalness:n.e.Numeric(0,{min:0,max:1,step:.01}),roughness:n.e.Numeric(1,{min:0,max:1,step:.01}),bumpiness:n.e.Numeric(0,{min:0,max:1,step:.01})},{...e,presets:[[{metalness:0,roughness:1,bumpiness:0},"Matte"],[{metalness:0,roughness:.2,bumpiness:0},"Plastic"],[{metalness:0,roughness:.6,bumpiness:0},"Glossy"],[{metalness:1,roughness:.6,bumpiness:0},"Metallic"]]})}},81421:function(e,t,r){r.d(t,{UF:function(){return s},ZU:function(){return p},bC:function(){return f},lP:function(){return o}});var a=r(23833),n=r(43975),i=r(22934);function o(e,t,r){return e=(0,a.uZ)(Math.round(e),0,16777215)+1,t[r+2]=e%256,e=Math.floor(e/256),t[r+1]=e%256,e=Math.floor(e/256),t[r]=e%256,t}function s(e,t,r){return 65536*Math.floor(e)+256*Math.floor(t)+Math.floor(r)-1}let l=255/256,u=n.A.create(16777216,65536,256),c=i.T.create(l/u[0],l/u[1],l/u[2],l/1),d=(0,i.T)();function p(e,t,r,a){return i.T.set(d,e/255,t/255,r/255,a/255),i.T.dot(d,c)}function f(e,t){let r=-1/0;for(let a=0,n=e.length;a<n;a+=t){let t=s(e[a],e[a+1],e[a+2]);t>r&&(r=t)}return r}},53596:function(e,t,r){r.d(t,{U:function(){return n}});var a=r(25374);function n(e,t){return"object"!=typeof e||"prototype"in e?(0,a.create)(e,t):(0,a.create)({...e},t)}},2078:function(e,t,r){r.d(t,{d:function(){return a}});var a,n=r(89987),i=r(86439);(a||(a={})).create=function(){let e=new o,t=()=>e.create();return t.dispose=()=>e.dispose(),t.behavior=t=>e.behavior(t),t};class o{constructor(){this._eventList=[],this._disposed=!1}create(){let e=new n.x;return this._eventList.push(e),e}behavior(e){let t=new i.X(e);return this._eventList.push(t),t}dispose(){if(!this._disposed){for(let e of this._eventList)e.complete();this._disposed=!0}}}},89260:function(e,t,r){r.d(t,{T:function(){return a}});function a(e,t){return`${e}${"/"===e[e.length-1]||"/"===t[0]?"":"/"}${t}`}},25374:function(e,t,r){e.exports=r(99313)},99313:function(e,t){let r;let a={Remove:"remove",Replace:"replace",Add:"add"},n=Symbol.for("__MUTATIVE_PROXY_DRAFT__"),i=Symbol("__MUTATIVE_RAW_RETURN_SYMBOL__"),o=Symbol.iterator,s={mutable:"mutable",immutable:"immutable"},l={};function u(e,t){return e instanceof Map?e.has(t):Object.prototype.hasOwnProperty.call(e,t)}function c(e,t){if(t in e){let r=Reflect.getPrototypeOf(e);for(;r;){let e=Reflect.getOwnPropertyDescriptor(r,t);if(e)return e;r=Reflect.getPrototypeOf(r)}}}function d(e){return Object.getPrototypeOf(e)===Set.prototype}function p(e){return Object.getPrototypeOf(e)===Map.prototype}function f(e){var t;return null!==(t=e.copy)&&void 0!==t?t:e.original}function m(e){return!!h(e)}function h(e){return"object"!=typeof e?null:null==e?void 0:e[n]}function g(e){var t;let r=h(e);return r?null!==(t=r.copy)&&void 0!==t?t:r.original:e}function b(e,t){let r;return!!e&&"object"==typeof e&&(Object.getPrototypeOf(e)===Object.prototype||Array.isArray(e)||e instanceof Map||e instanceof Set||!!(null==t?void 0:t.mark)&&((r=t.mark(e,s))===s.immutable||"function"==typeof r))}function y(e){return Array.isArray(e)?1:e instanceof Map?2:e instanceof Set?3:0}function x(e,t){return 2===y(e)?e.get(t):e[t]}function S(e,t,r){2===y(e)?e.set(t,r):e[t]=r}function T(e,t){let r=h(e);return(r?f(r):e)[t]}function C(e,t){return e===t?0!==e||1/e==1/t:e!=e&&t!=t}function O(e){if(e)for(;e.finalities.revoke.length>0;)e.finalities.revoke.pop()()}function I(e,t){return t?e:[""].concat(e).map(e=>{let t=`${e}`;return -1===t.indexOf("/")&&-1===t.indexOf("~")?t:t.replace(/~/g,"~0").replace(/\//g,"~1")}).join("/")}let A=Object.prototype.propertyIsEnumerable;function w(e,t){let r;if(Array.isArray(e))return Array.prototype.concat.call(e);
7319if(e instanceof Set)return d(e)?Set.prototype.difference?Set.prototype.difference.call(e,new Set):new Set(e.values()):new(Object.getPrototypeOf(e)).constructor(e.values());if(e instanceof Map)return p(e)?new Map(e):new(Object.getPrototypeOf(e)).constructor(e);if((null==t?void 0:t.mark)&&void 0!==(r=t.mark(e,s))&&r!==s.mutable){if(r===s.immutable)return function(e){let t=Object.create(Object.getPrototypeOf(e));return Reflect.ownKeys(e).forEach(r=>{let a=Reflect.getOwnPropertyDescriptor(e,r);a.enumerable&&a.configurable&&a.writable?t[r]=e[r]:(a.writable||(a.writable=!0,a.configurable=!0),(a.get||a.set)&&(a={configurable:!0,writable:!0,enumerable:a.enumerable,value:e[r]}),Reflect.defineProperty(t,r,a))}),t}(e);if("function"==typeof r)return r();throw Error(`Unsupported mark result: ${r}`)}if("object"==typeof e&&Object.getPrototypeOf(e)===Object.prototype){let t={};return Object.keys(e).forEach(r=>{t[r]=e[r]}),Object.getOwnPropertySymbols(e).forEach(r=>{A.call(e,r)&&(t[r]=e[r])}),t}throw Error("Please check mark() to ensure that it is a stable marker draftable function.")}function D(e){e.copy||(e.copy=w(e.original,e.options))}function E(e){return m(e)?function e(t){if(!b(t))return g(t);if(Array.isArray(t))return t.map(e);if(t instanceof Map){let r=Array.from(t.entries()).map(([t,r])=>[t,e(r)]);return p(t)?new Map(r):new(Object.getPrototypeOf(t)).constructor(r)}if(t instanceof Set){let r=Array.from(t).map(e);return d(t)?new Set(r):new(Object.getPrototypeOf(t)).constructor(r)}let r=Object.create(Object.getPrototypeOf(t));for(let a in t)r[a]=e(t[a]);return r}(e):e}function M(e){var t;e.assignedMap=null!==(t=e.assignedMap)&&void 0!==t?t:new Map,e.operated||(e.operated=!0,e.parent&&M(e.parent))}function P(){throw Error("Cannot modify frozen object")}function k(e){return e&&"object"==typeof e&&!Object.isFrozen(e)}function B(e,t){let r=y(e);if(0===r)Reflect.ownKeys(e).forEach(r=>{t(r,e[r],e)});else if(1===r){let r=0;for(let a of e)t(r,a,e),r+=1}else e.forEach((r,a)=>t(a,r,e))}function _(e){3===e.type&&e.copy&&(e.copy.clear(),e.setMap.forEach(t=>{e.copy.add(g(t))}))}function R(e,t,r,a){if(e.operated&&e.assignedMap&&e.assignedMap.size>0&&!e.finalized){if(r&&a){let n=function e(t,r=[]){if(Object.hasOwnProperty.call(t,"key")){let e=t.parent.copy,a=h(x(e,t.key));if(null!==a&&(null==a?void 0:a.original)!==t.original)return null;let n=3===t.parent.type,i=n?Array.from(t.parent.setMap.keys()).indexOf(t.key):t.key;if(!(n&&e.size>i||u(e,i)))return null;r.push(i)}if(t.parent)return e(t.parent,r);r.reverse();try{!function(e,t){for(let r=0;r<t.length-1;r+=1){let a=t[r];if("object"!=typeof(e=x(3===y(e)?Array.from(e):e,a)))throw Error(`Cannot resolve patch at '${t.join("/")}'.`)}}(t.copy,r)}catch(e){return null}return r}(e);n&&t(e,n,r,a)}e.finalized=!0}}function F(e,t,r,a){let n=h(r);n&&(n.callbacks||(n.callbacks=[]),n.callbacks.push((i,o)=>{let s=3===e.type?e.setMap:e.copy;if(C(x(s,t),r)){let r=n.original;n.copy&&(r=n.copy),_(e),R(e,a,i,o),S(s,t,r)}}),e.options.enableAutoFreeze&&n.finalities!==e.finalities&&(e.options.enableAutoFreeze=!1)),b(r,e.options)&&e.finalities.draft.push(()=>{C(x(3===e.type?e.setMap:e.copy,t),r)&&function(e,t){let r=3===e.type?e.setMap:e.copy;e.finalities.revoke.length>1&&e.assignedMap.get(t)&&r&&function e(t,r,a){if(m(t)||!b(t,a)||r.has(t)||Object.isFrozen(t))return;let n=t instanceof Set,i=n?new Map:void 0;if(r.add(t),B(t,(o,s)=>{var l;if(m(s)){let e=h(s);D(e),S(n?i:t,o,(null===(l=e.assignedMap)||void 0===l?void 0:l.size)||e.operated?e.copy:e.original)}else e(s,r,a)}),i){let e=Array.from(t);t.clear(),e.forEach(e=>{t.add(i.has(e)?i.get(e):e)})}}(x(r,t),e.finalities.handledSet,e.options)}(e,t)})}function L(e,t,r,n){let{pathAsArray:i=!0}=e.options.enablePatches;switch(e.type){case 0:case 2:return function({original:e,copy:t,assignedMap:r},n,i,o,s){r.forEach((r,l)=>{let c=x(e,l),d=E(x(t,l)),p=r?u(e,l)?a.Replace:a.Add:a.Remove;if(C(c,d)&&p===a.Replace)return;let f=I(n.concat(l),s);i.push(p===a.Remove?{op:p,path:f}:{op:p,path:f,value:d}),o.push(p===a.Add?{op:a.Remove,path:f}:p===a.Remove?{op:a.Add,path:f,value:c}:{op:a.Replace,path:f,value:c})})}(e,t,r,n,i);case 1:return function(e,t,r,n,i){let{original:o,assignedMap:s,options:l}=e,u=e.copy;u.length<o.length&&([o,u]=[u,o],[r,n]=[n,r]);for(let e=0;e<o.length;e+=1)if(s.get(e.toString())&&u[e]!==o[e]){let s=I(t.concat([e]),i);r.push({op:a.Replace,path:s,value:E(u[e])}),n.push({op:a.Replace,path:s,value:E(o[e])})}for(let e=o.length;e<u.length;e+=1){let n=I(t.concat([e]),i);r.push({op:a.Add,path:n,value:E(u[e])})}if(o.length<u.length){let{arrayLengthAssignment:e=!0}=l.enablePatches;if(e){let e=I(t.concat(["length"]),i);n.push({op:a.Replace,path:e,value:o.length})}else for(let e=u.length;o.length<e;e-=1){let r=I(t.concat([e-1]),i);n.push({op:a.Remove,path:r})}}}(e,t,r,n,i);case 3:return function({original:e,copy:t},r,n,i,o){let s=0;
7319e.forEach(e=>{if(!t.has(e)){let t=I(r.concat([s]),o);n.push({op:a.Remove,path:t,value:e}),i.unshift({op:a.Add,path:t,value:e})}s+=1}),s=0,t.forEach(t=>{if(!e.has(t)){let e=I(r.concat([s]),o);n.push({op:a.Add,path:e,value:t}),i.unshift({op:a.Remove,path:e,value:t})}s+=1})}(e,t,r,n,i)}}let z=(e,t,r=!1)=>{if("object"==typeof e&&null!==e&&(!b(e,t)||r))throw Error("Strict mode: Mutable data cannot be accessed directly, please use 'unsafe(callback)' wrap.")},N={get size(){return f(h(this)).size},has(e){return f(h(this)).has(e)},set(e,t){let r=h(this),a=f(r);return a.has(e)&&C(a.get(e),t)||(D(r),M(r),r.assignedMap.set(e,!0),r.copy.set(e,t),F(r,e,t,L)),this},delete(e){if(!this.has(e))return!1;let t=h(this);return D(t),M(t),t.original.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.copy.delete(e),!0},clear(){let e=h(this);if(this.size){for(let[t]of(D(e),M(e),e.assignedMap=new Map,e.original))e.assignedMap.set(t,!1);e.copy.clear()}},forEach(e,t){f(h(this)).forEach((r,a)=>{e.call(t,this.get(a),a,this)})},get(e){var t,r;
7319let a=h(this),n=f(a).get(e),i=(null===(r=(t=a.options).mark)||void 0===r?void 0:r.call(t,n,s))===s.mutable;if(a.options.strict&&z(n,a.options,i),i||a.finalized||!b(n,a.options)||n!==a.original.get(e))return n;let o=l.createDraft({original:n,parentDraft:a,key:e,finalities:a.finalities,options:a.options});return D(a),a.copy.set(e,o),o},keys(){return f(h(this)).keys()},values(){let e=this.keys();return{[o]:()=>this.values(),next:()=>{let t=e.next();return t.done?t:{done:!1,value:this.get(t.value)}}}},entries(){let e=this.keys();return{[o]:()=>this.entries(),next:()=>{let t=e.next();if(t.done)return t;let r=this.get(t.value);return{done:!1,value:[t.value,r]}}}},[o](){return this.entries()}},G=Reflect.ownKeys(N),U=(e,t,{isValuesIterator:r})=>()=>{var a,n;let i=t.next();if(i.done)return i;let o=i.value,u=e.setMap.get(o),c=h(u),d=(null===(n=(a=e.options).mark)||void 0===n?void 0:n.call(a,u,s))===s.mutable;if(e.options.strict&&z(o,e.options,d),d||c||!b(o,e.options)||e.finalized||!e.original.has(o))c&&(u=c.proxy);else{let t=l.createDraft({original:o,parentDraft:e,key:o,finalities:e.finalities,options:e.options});e.setMap.set(o,t),u=t}return{done:!1,value:r?u:[u,u]}},V={get size(){return h(this).setMap.size},has(e){let t=h(this);if(t.setMap.has(e))return!0;D(t);let r=h(e);return!(!r||!t.setMap.has(r.original))},add(e){let t=h(this);return this.has(e)||(D(t),M(t),t.assignedMap.set(e,!0),t.setMap.set(e,e),F(t,e,e,L)),this},delete(e){if(!this.has(e))return!1;let t=h(this);D(t),M(t);let r=h(e);return r&&t.setMap.has(r.original)?(t.assignedMap.set(r.original,!1),t.setMap.delete(r.original)):(!r&&t.setMap.has(e)?t.assignedMap.set(e,!1):t.assignedMap.delete(e),t.setMap.delete(e))},clear(){if(!this.size)return;let e=h(this);for(let t of(D(e),M(e),e.original))e.assignedMap.set(t,!1);e.setMap.clear()},values(){let e=h(this);D(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.values(),next:U(e,t,{isValuesIterator:!0})}},entries(){let e=h(this);D(e);let t=e.setMap.keys();return{[Symbol.iterator]:()=>this.entries(),next:U(e,t,{isValuesIterator:!1})}},keys(){return this.values()},[o](){return this.values()},forEach(e,t){let r=this.values(),a=r.next();for(;!a.done;)e.call(t,a.value,a.value,this),a=r.next()}};Set.prototype.difference&&Object.assign(V,{intersection(e){return Set.prototype.intersection.call(new Set(this.values()),e)},union(e){return Set.prototype.union.call(new Set(this.values()),e)},difference(e){return Set.prototype.difference.call(new Set(this.values()),e)},symmetricDifference(e){return Set.prototype.symmetricDifference.call(new Set(this.values()),e)},isSubsetOf(e){return Set.prototype.isSubsetOf.call(new Set(this.values()),e)},isSupersetOf(e){return Set.prototype.isSupersetOf.call(new Set(this.values()),e)},isDisjointFrom(e){return Set.prototype.isDisjointFrom.call(new Set(this.values()),e)}});let j=Reflect.ownKeys(V),H={get(e,t,r){var a,i;let o;let l=null===(a=e.copy)||void 0===a?void 0:a[t];if(l&&e.finalities.draftsCache.has(l))return l;if(t===n)return e;if(e.options.mark){let a="size"===t&&(e.original instanceof Map||e.original instanceof Set)?Reflect.get(e.original,t):Reflect.get(e.original,t,r);if((o=e.options.mark(a,s))===s.mutable)return e.options.strict&&z(a,e.options,!0),a}let d=f(e);if(d instanceof Map&&G.includes(t))return"size"===t?Object.getOwnPropertyDescriptor(N,"size").get.call(e.proxy):N[t].bind(e.proxy);if(d instanceof Set&&j.includes(t))return"size"===t?Object.getOwnPropertyDescriptor(V,"size").get.call(e.proxy):V[t].bind(e.proxy);if(!u(d,t)){let r=c(d,t);return r?"value"in r?r.value:null===(i=r.get)||void 0===i?void 0:i.call(e.proxy):void 0}let p=d[t];if(e.options.strict&&z(p,e.options),e.finalized||!b(p,e.options))return p;if(p===T(e.original,t)){if(D(e),e.copy[t]=q({original:e.original[t],parentDraft:e,key:1===e.type?Number(t):t,finalities:e.finalities,options:e.options}),"function"==typeof o){let r=h(e.copy[t]);return D(r),M(r),r.copy}return e.copy[t]}return m(p)&&e.finalities.draftsCache.add(p),p},set(e,t,r){var a;let n;if(3===e.type||2===e.type)throw Error("Map/Set draft does not support any property assignment.");if(1===e.type&&"length"!==t&&(!(Number.isInteger(n=Number(t))&&n>
7319=0)||0!==t&&0!==n&&String(n)!==String(t)))throw Error("Only supports setting array indices and the 'length' property.");let i=c(f(e),t);if(null==i?void 0:i.set)return i.set.call(e.proxy,r),!0;let o=T(f(e),t),s=h(o);return s&&C(s.original,r)?(e.copy[t]=r,e.assignedMap=null!==(a=e.assignedMap)&&void 0!==a?a:new Map,e.assignedMap.set(t,!1)):C(r,o)&&(void 0!==r||u(e.original,t))||(D(e),M(e),u(e.original,t)&&C(r,e.original[t])?e.assignedMap.delete(t):e.assignedMap.set(t,!0),e.copy[t]=r,F(e,t,r,L)),!0},has:(e,t)=>t in f(e),ownKeys:e=>Reflect.ownKeys(f(e)),getOwnPropertyDescriptor(e,t){let r=f(e),a=Reflect.getOwnPropertyDescriptor(r,t);return a?{writable:!0,configurable:1!==e.type||"length"!==t,enumerable:a.enumerable,value:r[t]}:a},getPrototypeOf:e=>Reflect.getPrototypeOf(e.original),setPrototypeOf(){throw Error("Cannot call 'setPrototypeOf()' on drafts")},defineProperty(){throw Error("Cannot call 'defineProperty()' on drafts")},deleteProperty(e,t){var r;return 1===e.type?H.set.call(this,e,t,void 0,e.proxy):(void 0!==T(e.original,t)||t in e.original?(D(e),M(e),e.assignedMap.set(t,!1)):(e.assignedMap=null!==(r=e.assignedMap)&&void 0!==r?r:new Map,e.assignedMap.delete(t)),e.copy&&delete e.copy[t],!0)}};function q(e){let{original:t,parentDraft:r,key:a,finalities:n,options:i}=e,o=y(t),s={type:o,finalized:!1,parent:r,original:t,copy:null,proxy:null,finalities:n,options:i,setMap:3===o?new Map(t.entries()):void 0};(a||"key"in e)&&(s.key=a);let{proxy:l,revoke:u}=Proxy.revocable(1===o?Object.assign([],s):s,H);if(n.revoke.push(u),s.proxy=l,r)r.finalities.draft.push((e,t)=>{var n;let i=h(l),o=3===r.type?r.setMap:r.copy,s=x(o,a),u=h(s);if(u){let r=u.original;u.operated&&(r=g(s)),_(u),R(u,L,e,t),S(o,a,r)}null===(n=i.callbacks)||void 0===n||n.forEach(r=>{r(e,t)})});else{let e=h(l);e.finalities.draft.push((t,r)=>{_(e),R(e,L,t,r)})}return l}function X(e){let{rootDraft:t,value:r,useRawReturn:a=!1,isRoot:n=!0}=e;B(r,(r,a,n)=>{let i=h(a);if(i&&t&&i.finalities===t.finalities){e.isContainDraft=!0;let t=i.original;if(n instanceof Set){let e=Array.from(n);n.clear(),e.forEach(e=>n.add(r===e?t:e))}else S(n,r,t)}else"object"==typeof a&&null!==a&&(e.value=a,e.isRoot=!1,X(e))})}function W(e){if(!m(e))throw Error(`current() is only used for Draft, parameter: ${e}`);return function e(t){var r;let a;let n=h(t);if(!b(t,null==n?void 0:n.options))return t;let i=y(t);if(n&&!n.operated)return n.original;function o(){a=2===i?p(t)?new Map(t):new(Object.getPrototypeOf(t)).constructor(t):3===i?Array.from(n.setMap.values()):w(t,null==n?void 0:n.options)}if(n){n.finalized=!0;try{o()}finally{n.finalized=!1}}else a=t;if(B(a,(r,i)=>{if(n&&C(x(n.original,r),i))return;let s=e(i);s!==i&&(a===t&&o(),S(a,r,s))}),3===i){let e=null!==(r=null==n?void 0:n.original)&&void 0!==r?r:a;return d(e)?new Set(a):new(Object.getPrototypeOf(e)).constructor(a)}return a}(e)}l.createDraft=q;let K=Object.prototype.constructor.toString();t.create=function e(t,n,o){var l,u,c;let d;if("function"==typeof t&&"function"!=typeof n)return function(r,...a){return e(r,e=>t.call(this,e,...a),n)};let p=o;"function"!=typeof n&&(p=n),p=Object.assign(Object.assign({},r),p);let f=m(t)?W(t):t,g=Array.isArray(p.mark)?(e,t)=>{for(let r of p.mark){let a=r(e,t);if(a)return a}}:p.mark,x=null!==(l=p.enablePatches)&&void 0!==l&&l,S=null!==(u=p.strict)&&void 0!==u&&u,T={enableAutoFreeze:null!==(c=p.enableAutoFreeze)&&void 0!==c&&c,mark:g,strict:S,enablePatches:x};if(!b(f,T)&&"object"==typeof f&&null!==f)throw Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");let[I,A]=function(e,t){var r;let n,i;let o={draft:[],revoke:[],handledSet:new WeakSet,draftsCache:new WeakSet};t.enablePatches&&(n=[],i=[]);let l=(null===(r=t.mark)||void 0===r?void 0:r.call(t,e,s))!==s.mutable&&b(e,t)?q({original:e,parentDraft:null,finalities:o,options:t}):e;return[l,(e=[])=>{let[r,o,s]=function(e,t,r,n,i){var o;let s=h(e),l=null!==(o=null==s?void 0:s.original)&&void 0!==o?o:e,u=!!t.length;if(null==s?void 0:s.operated)for(;s.finalities.draft.length>0;)s.finalities.draft.pop()(r,n);let c=u?t[0]:s?s.operated?s.copy:s.original:e;return s&&O(s),i&&function e(t,r,a,n,i){if(!(Object.isFrozen(t)||m(t)))switch(y(t)){case 2:for(let[r,a]of t)k(r)&&e(r),k(a)&&e(a);t.set=t.clear=t.delete=P;break;case 3:for(let r of t)k(r)&&e(r);t.add=t.clear=t.delete=P;break;case 1:for(let r of(Object.freeze(t),t))k(r)&&e(r);break;default:Object.freeze(t),Object.keys(t).forEach(r=>{let a=t[r];k(a)&&e(a)})}}(c,0,null==s||s.options.updatedValues),[c,r&&u?[{op:a.Replace,path:[],value:t[0]}]:r,n&&u?[{op:a.Replace,path:[],value:l}]:n]}(l,e,n,i,t.enableAutoFreeze);return t.enablePatches?[r,o,s]:r}]}(f,T);if("function"!=typeof n){if(!b(f,T))throw Error("Invalid base state: create() only supports plain objects, arrays, Set, Map or using mark() to mark the state as immutable.");return[I,A]}try{d=n(I)}catch(e){throw O(h(I)),e}let w=e=>{let t=h(I);if(!m(e)){if(void 0!==e&&!C(e,I)&&(null==t?void 0:t.operated))throw Error("Either the value is returned as a new non-draft value, or only the draft is modified without returning any value.");let r=null==e?void 0:e[i];if(r){let a=r[0];
7319return T.strict&&"object"==typeof e&&null!==e&&X({rootDraft:t,value:e,useRawReturn:!0}),A([a])}if(void 0!==e)return"object"==typeof e&&null!==e&&X({rootDraft:t,value:e}),A([e])}if(e===I||void 0===e)return A([]);let r=h(e);if(T===r.options){if(r.operated)throw Error("Cannot return a modified child draft.");return A([W(e)])}return A([e])};return d instanceof Promise?d.then(w,e=>{throw O(h(I)),e}):w(d)},e=>{if((e=>{if(!e||"object"!=typeof e)return!1;let t=Object.getPrototypeOf(e);if(null===t)return!0;let r=Object.hasOwnProperty.call(t,"constructor")&&t.constructor;return r===Object||"function"==typeof r&&Function.toString.call(r)===K})(e))return s.immutable}},86439:function(e,t,r){r.d(t,{X:function(){return n}});var a=r(66469),n=function(e){function t(t){var r=e.call(this)||this;return r._value=t,r}return(0,a.ZT)(t,e),Object.defineProperty(t.prototype,"value",{get:function(){return this.getValue()},enumerable:!1,configurable:!0}),t.prototype._subscribe=function(t){var r=e.prototype._subscribe.call(this,t);return r.closed||t.next(this._value),r},t.prototype.getValue=function(){var e=this.hasError,t=this.thrownError,r=this._value;if(e)throw t;return this._throwIfClosed(),r},t.prototype.next=function(t){e.prototype.next.call(this,this._value=t)},t}(r(89987).x)},38119:function(e,t,r){r.d(t,{y:function(){return c}});var a=r(13703),n=r(56355),i=r(21436),o=r(93895),s=r(44619),l=r(10234),u=r(86478),c=function(){function e(e){e&&(this._subscribe=e)}return e.prototype.lift=function(t){var r=new e;return r.source=this,r.operator=t,r},e.prototype.subscribe=function(e,t,r){var i,o=this,s=(i=e)&&i instanceof a.Lv||i&&(0,l.m)(i.next)&&(0,l.m)(i.error)&&(0,l.m)(i.complete)&&(0,n.Nn)(i)?e:new a.Hp(e,t,r);return(0,u.x)(function(){var e=o.operator,t=o.source;s.add(e?e.call(s,t):t?o._subscribe(s):o._trySubscribe(s))}),s},e.prototype._trySubscribe=function(e){try{return this._subscribe(e)}catch(t){e.error(t)}},e.prototype.forEach=function(e,t){var r=this;return new(t=d(t))(function(t,n){var i=new a.Hp({next:function(t){try{e(t)}catch(e){n(e),i.unsubscribe()}},error:n,complete:t});r.subscribe(i)})},e.prototype._subscribe=function(e){var t;return null===(t=this.source)||void 0===t?void 0:t.subscribe(e)},e.prototype[i.L]=function(){return this},e.prototype.pipe=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return(0===e.length?o.y:1===e.length?e[0]:function(t){return e.reduce(function(e,t){return t(e)},t)})(this)},e.prototype.toPromise=function(e){var t=this;return new(e=d(e))(function(e,r){var a;t.subscribe(function(e){return a=e},function(e){return r(e)},function(){return e(a)})})},e.create=function(t){return new e(t)},e}();function d(e){var t;return null!==(t=null!=e?e:s.v.Promise)&&void 0!==t?t:Promise}},89987:function(e,t,r){r.d(t,{x:function(){return u}});var a=r(66469),n=r(38119),i=r(56355),o=(0,r(83117).d)(function(e){return function(){e(this),this.name="ObjectUnsubscribedError",this.message="object unsubscribed"}}),s=r(99437),l=r(86478),u=function(e){function t(){var t=e.call(this)||this;return t.closed=!1,t.currentObservers=null,t.observers=[],t.isStopped=!1,t.hasError=!1,t.thrownError=null,t}return(0,a.ZT)(t,e),t.prototype.lift=function(e){var t=new c(this,this);return t.operator=e,t},t.prototype._throwIfClosed=function(){if(this.closed)throw new o},t.prototype.next=function(e){var t=this;(0,l.x)(function(){var r,n;if(t._throwIfClosed(),!t.isStopped){t.currentObservers||(t.currentObservers=Array.from(t.observers));try{for(var i=(0,a.XA)(t.currentObservers),o=i.next();!o.done;o=i.next())o.value.next(e)}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}})},t.prototype.error=function(e){var t=this;(0,l.x)(function(){if(t._throwIfClosed(),!t.isStopped){t.hasError=t.isStopped=!0,t.thrownError=e;for(var r=t.observers;r.length;)r.shift().error(e)}})},t.prototype.complete=function(){var e=this;(0,l.x)(function(){if(e._throwIfClosed(),!e.isStopped){e.isStopped=!0;for(var t=e.observers;t.length;)t.shift().complete()}})},t.prototype.unsubscribe=function(){this.isStopped=this.closed=!0,this.observers=this.currentObservers=null},Object.defineProperty(t.prototype,"observed",{get:function(){var e;return(null===(e=this.observers)||void 0===e?void 0:e.length)>0}
7319,enumerable:!1,configurable:!0}),t.prototype._trySubscribe=function(t){return this._throwIfClosed(),e.prototype._trySubscribe.call(this,t)},t.prototype._subscribe=function(e){return this._throwIfClosed(),this._checkFinalizedStatuses(e),this._innerSubscribe(e)},t.prototype._innerSubscribe=function(e){var t=this,r=this.hasError,a=this.isStopped,n=this.observers;return r||a?i.Lc:(this.currentObservers=null,n.push(e),new i.w0(function(){t.currentObservers=null,(0,s.P)(n,e)}))},t.prototype._checkFinalizedStatuses=function(e){var t=this.hasError,r=this.thrownError,a=this.isStopped;t?e.error(r):a&&e.complete()},t.prototype.asObservable=function(){var e=new n.y;return e.source=this,e},t.create=function(e,t){return new c(e,t)},t}(n.y),c=function(e){function t(t,r){var a=e.call(this)||this;return a.destination=t,a.source=r,a}return(0,a.ZT)(t,e),t.prototype.next=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.next)||void 0===r||r.call(t,e)},t.prototype.error=function(e){var t,r;null===(r=null===(t=this.destination)||void 0===t?void 0:t.error)||void 0===r||r.call(t,e)},t.prototype.complete=function(){var e,t;null===(t=null===(e=this.destination)||void 0===e?void 0:e.complete)||void 0===t||t.call(e)},t.prototype._subscribe=function(e){var t,r;return null!==(r=null===(t=this.source)||void 0===t?void 0:t.subscribe(e))&&void 0!==r?r:i.Lc},t}(u)},13703:function(e,t,r){r.d(t,{Hp:function(){return b},Lv:function(){return f}});var a=r(66469),n=r(10234),i=r(56355),o=r(44619),s=r(6342);function l(){}var u=c("C",void 0,void 0);function c(e,t,r){return{kind:e,value:t,error:r}}var d=r(87828),p=r(86478),f=function(e){function t(t){var r=e.call(this)||this;return r.isStopped=!1,t?(r.destination=t,(0,i.Nn)(t)&&t.add(r)):r.destination=S,r}return(0,a.ZT)(t,e),t.create=function(e,t,r){return new b(e,t,r)},t.prototype.next=function(e){this.isStopped?x(c("N",e,void 0),this):this._next(e)},t.prototype.error=function(e){this.isStopped?x(c("E",void 0,e),this):(this.isStopped=!0,this._error(e))},t.prototype.complete=function(){this.isStopped?x(u,this):(this.isStopped=!0,this._complete())},t.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,e.prototype.unsubscribe.call(this),this.destination=null)},t.prototype._next=function(e){this.destination.next(e)},t.prototype._error=function(e){try{this.destination.error(e)}finally{this.unsubscribe()}},t.prototype._complete=function(){try{this.destination.complete()}finally{this.unsubscribe()}},t}(i.w0),m=Function.prototype.bind;function h(e,t){return m.call(e,t)}var g=function(){function e(e){this.partialObserver=e}return e.prototype.next=function(e){var t=this.partialObserver;if(t.next)try{t.next(e)}catch(e){y(e)}},e.prototype.error=function(e){var t=this.partialObserver;if(t.error)try{t.error(e)}catch(e){y(e)}else y(e)},e.prototype.complete=function(){var e=this.partialObserver;if(e.complete)try{e.complete()}catch(e){y(e)}},e}(),b=function(e){function t(t,r,a){var i,s,l=e.call(this)||this;return(0,n.m)(t)||!t?i={next:null!=t?t:void 0,error:null!=r?r:void 0,complete:null!=a?a:void 0}:l&&o.v.useDeprecatedNextContext?((s=Object.create(t)).unsubscribe=function(){return l.unsubscribe()},i={next:t.next&&h(t.next,s),error:t.error&&h(t.error,s),complete:t.complete&&h(t.complete,s)}):i=t,l.destination=new g(i),l}return(0,a.ZT)(t,e),t}(f);function y(e){o.v.useDeprecatedSynchronousErrorHandling?(0,p.O)(e):(0,s.h)(e)}function x(e,t){var r=o.v.onStoppedNotification;r&&d.z.setTimeout(function(){return r(e,t)})}var S={closed:!0,next:l,error:function(e){throw e},complete:l}},56355:function(e,t,r){r.d(t,{Lc:function(){return l},w0:function(){return s},Nn:function(){return u}});var a=r(66469),n=r(10234),i=(0,r(83117).d)(function(e){return function(t){e(this),this.message=t?t.length+" errors occurred during unsubscription:\n"+t.map(function(e,t){return t+1+") "+e.toString()}).join("\n "):"",this.name="UnsubscriptionError",this.errors=t}}),o=r(99437),s=function(){var e;function t(e){this.initialTeardown=e,this.closed=!1,this._parentage=null,this._finalizers=null}return t.prototype.unsubscribe=function(){if(!this.closed){this.closed=!0;var e,t,r,o,s,l=this._parentage;if(l){if(this._parentage=null,Array.isArray(l))try{for(var u=(0,a.XA)(l),d=u.next();!d.done;d=u.next())d.value.remove(this)}catch(t){e={error:t}}finally{try{d&&!d.done&&(t=u.return)&&t.call(u)}finally{if(e)throw e.error}}else l.remove(this)}var p=this.initialTeardown;
7319if((0,n.m)(p))try{p()}catch(e){s=e instanceof i?e.errors:[e]}var f=this._finalizers;if(f){this._finalizers=null;try{for(var m=(0,a.XA)(f),h=m.next();!h.done;h=m.next()){var g=h.value;try{c(g)}catch(e){s=null!=s?s:[],e instanceof i?s=(0,a.ev)((0,a.ev)([],(0,a.CR)(s)),(0,a.CR)(e.errors)):s.push(e)}}}catch(e){r={error:e}}finally{try{h&&!h.done&&(o=m.return)&&o.call(m)}finally{if(r)throw r.error}}}if(s)throw new i(s)}},t.prototype.add=function(e){var r;if(e&&e!==this){if(this.closed)c(e);else{if(e instanceof t){if(e.closed||e._hasParent(this))return;e._addParent(this)}(this._finalizers=null!==(r=this._finalizers)&&void 0!==r?r:[]).push(e)}}},t.prototype._hasParent=function(e){var t=this._parentage;return t===e||Array.isArray(t)&&t.includes(e)},t.prototype._addParent=function(e){var t=this._parentage;this._parentage=Array.isArray(t)?(t.push(e),t):t?[t,e]:e},t.prototype._removeParent=function(e){var t=this._parentage;t===e?this._parentage=null:Array.isArray(t)&&(0,o.P)(t,e)},t.prototype.remove=function(e){var r=this._finalizers;r&&(0,o.P)(r,e),e instanceof t&&e._removeParent(this)},t.EMPTY=((e=new t).closed=!0,e),t}(),l=s.EMPTY;function u(e){return e instanceof s||e&&"closed"in e&&(0,n.m)(e.remove)&&(0,n.m)(e.add)&&(0,n.m)(e.unsubscribe)}function c(e){(0,n.m)(e)?e():e.unsubscribe()}},44619:function(e,t,r){r.d(t,{v:function(){return a}});var a={onUnhandledError:null,onStoppedNotification:null,Promise:void 0,useDeprecatedSynchronousErrorHandling:!1,useDeprecatedNextContext:!1}},3906:function(e,t,r){r.d(t,{E:function(){return a}});var a=new(r(38119)).y(function(e){return e.complete()})},3799:function(e,t,r){r.d(t,{Xf:function(){return h}});var a=r(66469),n=r(89622),i=r(64882),o=r(38119),s=r(40117),l=r(62528),u=r(73822),c=r(54919),d=r(19625),p=r(10234),f=r(6342),m=r(21436);function h(e){if(e instanceof o.y)return e;if(null!=e){if((0,s.c)(e))return new o.y(function(t){var r=e[m.L]();if((0,p.m)(r.subscribe))return r.subscribe(t);throw TypeError("Provided object does not correctly implement Symbol.observable")});if((0,n.z)(e))return new o.y(function(t){for(var r=0;r<e.length&&!t.closed;r++)t.next(e[r]);t.complete()});if((0,i.t)(e))return new o.y(function(t){e.then(function(e){t.closed||(t.next(e),t.complete())},function(e){return t.error(e)}).then(null,f.h)});if((0,l.D)(e))return g(e);if((0,c.T)(e))return new o.y(function(t){var r,n;try{for(var i=(0,a.XA)(e),o=i.next();!o.done;o=i.next()){var s=o.value;if(t.next(s),t.closed)return}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}t.complete()});if((0,d.L)(e))return g((0,d.Q)(e))}throw(0,u.z)(e)}function g(e){return new o.y(function(t){(function(e,t){var r,n,i,o;return(0,a.mG)(this,void 0,void 0,function(){var s;return(0,a.Jh)(this,function(l){switch(l.label){case 0:l.trys.push([0,5,6,11]),r=(0,a.KL)(e),l.label=1;case 1:return[4,r.next()];case 2:if((n=l.sent()).done)return[3,4];if(s=n.value,t.next(s),t.closed)return[2];l.label=3;case 3:return[3,1];case 4:return[3,11];case 5:return i={error:l.sent()},[3,11];case 6:if(l.trys.push([6,,9,10]),!(n&&!n.done&&(o=r.return)))return[3,8];return[4,o.call(r)];case 7:l.sent(),l.label=8;case 8:return[3,10];case 9:if(i)throw i.error;return[7];case 10:return[7];case 11:return t.complete(),[2]}})})})(e,t).catch(function(e){return t.error(e)})})}},22569:function(e,t,r){r.d(t,{T:function(){return A}});var a=r(73824),n=r(3799),i=r(15221);function o(e,t,r,a,n){void 0===a&&(a=0),void 0===n&&(n=!1);var i=t.schedule(function(){r(),n?e.add(this.schedule(null,a)):this.unsubscribe()},a);if(e.add(i),!n)return i}var s=r(654),l=r(10234),u=r(93895),c=r(3906),d=r(50431);function p(e){return e[e.length-1]}function f(e,t){return void 0===t&&(t=0),(0,i.e)(function(r,a){r.subscribe((0,s.x)(a,function(r){return o(a,e,function(){return a.next(r)},t)},function(){return o(a,e,function(){return a.complete()},t)},function(r){return o(a,e,function(){return a.error(r)},t)}))})}function m(e,t){return void 0===t&&(t=0),(0,i.e)(function(r,a){a.add(e.schedule(function(){return r.subscribe(a)},t))})}var h=r(38119),g=r(93692);function b(e,t){if(!e)throw Error("Iterable cannot be null");return new h.y(function(r){o(r,t,function(){var a=e[Symbol.asyncIterator]();o(r,t,function(){a.next().then(function(e){e.done?r.complete():r.next(e.value)})},0,!0)})})}var y=r(40117),x=r(64882),S=r(89622),T=r(54919),C=r(62528),O=r(73822),I=r(19625);function A(){for(var e,t,r=[],A=0;A<arguments.length;A++)r[A]=arguments[A];var w=(0,d.K)(p(r))?r.pop():void 0,D=(e=1/0,"number"==typeof p(r)?r.pop():e);return r.length?1===r.length?(0,n.Xf)(r[0]):(void 0===(t=D)&&(t=1/0),function e(t,r,u){return(void 0===u&&(u=1/0),(0,l.m)(r))?e(function(e,i){return(0,a.U)(function(t,a){return r(e,t,i,a)})((0,n.Xf)(t(e,i)))},u):("number"==typeof r&&(u=r),(0,i.e)(function(e,r){var a,i,l,c,d,p,f,m,h,g,b,y;return a=u,p=[],f=0,m=0,h=!1,g=function(){!h||p.length||f||r.complete()},b=function(e){return f<a?y(e):p.push(e)},y=function(e){f++;var u=!1;(0,n.Xf)(t(e,m++)).subscribe((0,s.x)(r,function(e){null==void 0||i(e),l?b(e):r.next(e)},function(){u=!0},void 0,function(){if(u)try{for(f--;p.length&&f<a;)!function(){var e=p.shift();1?y(e):o(r,c,function(){return y(e)})}();g()}catch(e){r.error(e)}}))},e.subscribe((0,s.x)(r,b,function(){h=!0,g()})),function(){null==void 0||d()}}))}(u.y,t))(w?function(e,t){if(null!=e){if((0,y.c)(e))return(0,n.Xf)(e).pipe(m(t),f(t));if((0,S.z)(e))return new h.y(function(r){var a=0;return t.schedule(function(){a===e.length?r.complete():(r.next(e[a++]),r.closed||this.schedule())})});if((0,x.t)(e))return(0,n.Xf)(e).pipe(m(t),f(t));if((0,C.D)(e))return b(e,t);if((0,T.T)(e))return new h.y(function(r){var a;return o(r,t,function(){a=e[g.h](),o(r,t,function(){var e,t,n;try{t=(e=a.next()).value,n=e.done}catch(e){r.error(e);return}n?r.complete():r.next(t)},0,!0)}),function(){return(0,l.m)(null==a?void 0:a.return)&&a.return()}});if((0,I.L)(e))return b((0,I.Q)(e),t)}throw(0,O.z)(e)}(r,w):(0,n.Xf)(r)):c.E}},654:function(e,t,r){r.d(t,{x:function(){return n}});var a=r(66469);function n(e,t,r,a,n){return new i(e,t,r,a,n)}var i=function(e){function t(t,r,a,n,i,o){var s=e.call(this,t)||this;return s.onFinalize=i,s.shouldUnsubscribe=o,s._next=r?function(e){try{r(e)}catch(e){t.error(e)}}:e.prototype._next,s._error=n?function(e){try{n(e)}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._error,s._complete=a?function(){try{a()}catch(e){t.error(e)}finally{this.unsubscribe()}}:e.prototype._complete,s}return(0,a.ZT)(t,e),t.prototype.unsubscribe=function(){var t;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var r=this.closed;e.prototype.unsubscribe.call(this),r||null===(t=this.onFinalize)||void 0===t||t.call(this)}},t}(r(13703).Lv)},82820:function(e,t,r){r.d(t,{b:function(){return o}});var a=r(73106),n=r(15221),i=r(654);function o(e,t){return void 0===t&&(t=a.z),(0,n.e)(function(r,a){var n=null,o=null,s=null,l=function(){if(n){n.unsubscribe(),n=null;var e=o;o=null,a.next(e)}};function u(){var r=s+e,i=t.now();if(i<r){n=this.schedule(void 0,r-i),a.add(n);return}l()}r.subscribe((0,i.x)(a,function(r){o=r,s=t.now(),n||(n=t.schedule(u,e),a.add(n))},function(){l(),a.complete()},void 0,function(){o=n=null}))})}},73506:function(e,t,r){r.d(t,{h:function(){return i}});var a=r(15221),n=r(654);function i(e,t){return(0,a.e)(function(r,a){var i=0;r.subscribe((0,n.x)(a,function(r){return e.call(t,r,i++)&&a.next(r)}))})}},73824:function(e,t,r){r.d(t,{U:function(){return i}});var a=r(15221),n=r(654);function i(e,t){return(0,a.e)(function(r,a){var i=0;r.subscribe((0,n.x)(a,function(r){a.next(e.call(t,r,i++))}))})}},30485:function(e,t,r){r.d(t,{p:function(){return u}});
7319var a=r(73106),n=r(15221),i=r(654),o=r(3799),s=r(38119),l=r(50431);function u(e,t,r){void 0===t&&(t=a.z);var u,c,d,p,f,m=(u=e,c=t,void 0===u&&(u=0),void 0===d&&(d=a.P),p=-1,null!=c&&((0,l.K)(c)?d=c:p=c),new s.y(function(e){var t,r=(t=u)instanceof Date&&!isNaN(t)?+u-d.now():u;r<0&&(r=0);var a=0;return d.schedule(function(){e.closed||(e.next(a++),0<=p?this.schedule(void 0,p):e.complete())},r)}));return f=function(){return m},(0,n.e)(function(e,t){var a=null!=r?r:{},n=a.leading,s=void 0===n||n,l=a.trailing,u=void 0!==l&&l,c=!1,d=null,p=null,m=!1,h=function(){null==p||p.unsubscribe(),p=null,u&&(y(),m&&t.complete())},g=function(){p=null,m&&t.complete()},b=function(e){return p=(0,o.Xf)(f(e)).subscribe((0,i.x)(t,h,g))},y=function(){if(c){c=!1;var e=d;d=null,t.next(e),m||b(e)}};e.subscribe((0,i.x)(t,function(e){c=!0,d=e,p&&!p.closed||(s?y():b(e))},function(){m=!0,u&&c&&p&&!p.closed||t.complete()}))})}},73106:function(e,t,r){r.d(t,{P:function(){return d},z:function(){return c}});var a=r(66469),n=function(e){function t(t,r){return e.call(this)||this}return(0,a.ZT)(t,e),t.prototype.schedule=function(e,t){return void 0===t&&(t=0),this},t}(r(56355).w0),i={setInterval:function(e,t){for(var r=[],n=2;n<arguments.length;n++)r[n-2]=arguments[n];var o=i.delegate;return(null==o?void 0:o.setInterval)?o.setInterval.apply(o,(0,a.ev)([e,t],(0,a.CR)(r))):setInterval.apply(void 0,(0,a.ev)([e,t],(0,a.CR)(r)))},clearInterval:function(e){var t=i.delegate;return((null==t?void 0:t.clearInterval)||clearInterval)(e)},delegate:void 0},o=r(99437),s=function(e){function t(t,r){var a=e.call(this,t,r)||this;return a.scheduler=t,a.work=r,a.pending=!1,a}return(0,a.ZT)(t,e),t.prototype.schedule=function(e,t){if(void 0===t&&(t=0),this.closed)return this;this.state=e;var r,a=this.id,n=this.scheduler;return null!=a&&(this.id=this.recycleAsyncId(n,a,t)),this.pending=!0,this.delay=t,this.id=null!==(r=this.id)&&void 0!==r?r:this.requestAsyncId(n,this.id,t),this},t.prototype.requestAsyncId=function(e,t,r){return void 0===r&&(r=0),i.setInterval(e.flush.bind(e,this),r)},t.prototype.recycleAsyncId=function(e,t,r){if(void 0===r&&(r=0),null!=r&&this.delay===r&&!1===this.pending)return t;null!=t&&i.clearInterval(t)},t.prototype.execute=function(e,t){if(this.closed)return Error("executing a cancelled action");this.pending=!1;var r=this._execute(e,t);if(r)return r;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},t.prototype._execute=function(e,t){var r,a=!1;try{this.work(e)}catch(e){a=!0,r=e||Error("Scheduled action threw falsy error")}if(a)return this.unsubscribe(),r},t.prototype.unsubscribe=function(){if(!this.closed){var t=this.id,r=this.scheduler,a=r.actions;this.work=this.state=this.scheduler=null,this.pending=!1,(0,o.P)(a,this),null!=t&&(this.id=this.recycleAsyncId(r,t,null)),this.delay=null,e.prototype.unsubscribe.call(this)}},t}(n),l={now:function(){return(l.delegate||Date).now()},delegate:void 0},u=function(){function e(t,r){void 0===r&&(r=e.now),this.schedulerActionCtor=t,this.now=r}return e.prototype.schedule=function(e,t,r){return void 0===t&&(t=0),new this.schedulerActionCtor(this,e).schedule(r,t)},e.now=l.now,e}(),c=new(function(e){function t(t,r){void 0===r&&(r=u.now);var a=e.call(this,t,r)||this;return a.actions=[],a._active=!1,a}return(0,a.ZT)(t,e),t.prototype.flush=function(e){var t,r=this.actions;if(this._active){r.push(e);return}this._active=!0;do if(t=e.execute(e.state,e.delay))break;while(e=r.shift());if(this._active=!1,t){for(;e=r.shift();)e.unsubscribe();throw t}},t}(u))(s),d=c},87828:function(e,t,r){r.d(t,{z:function(){return n}});var a=r(66469),n={setTimeout:function(e,t){for(var r=[],i=2;i<arguments.length;i++)r[i-2]=arguments[i];var o=n.delegate;return(null==o?void 0:o.setTimeout)?o.setTimeout.apply(o,(0,a.ev)([e,t],(0,a.CR)(r))):setTimeout.apply(void 0,(0,a.ev)([e,t],(0,a.CR)(r)))},clearTimeout:function(e){var t=n.delegate;return((null==t?void 0:t.clearTimeout)||clearTimeout)(e)},delegate:void 0}},93692:function(e,t,r){r.d(t,{h:function(){return a}});var a="function"==typeof Symbol&&Symbol.iterator?Symbol.iterator:"@@iterator"},21436:function(e,t,r){r.d(t,{L:function(){return a}});var a="function"==typeof Symbol&&Symbol.observable||"@@observable"},99437:function(e,t,r){r.d(t,{P:function(){return a}});function a(e,t){if(e){var r=e.indexOf(t);0<=r&&e.splice(r,1)}}},83117:function(e,t,r){r.d(t,{d:function(){return a}});function a(e){var t=e(function(e){Error.call(e),e.stack=Error().stack});return t.prototype=Object.create(Error.prototype),t.prototype.constructor=t,t}},86478:function(e,t,r){r.d(t,{O:function(){return o},x:function(){return i}});var a=r(44619),n=null;function i(e){if(a.v.useDeprecatedSynchronousErrorHandling){var t=!n;if(t&&(n={errorThrown:!1,error:null}),e(),t){var r=n,i=r.errorThrown,o=r.error;if(n=null,i)throw o}}else e()}function o(e){a.v.useDeprecatedSynchronousErrorHandling&&n&&(n.errorThrown=!0,n.error=e)}},93895:function(e,t,r){r.d(t,{y:function(){return a}});function a(e){return e}},89622:function(e,t,r){r.d(t,{z:function(){return a}});var a=function(e){return e&&"number"==typeof e.length&&"function"!=typeof e}},62528:function(e,t,r){r.d(t,{D:function(){return n}});var a=r(10234);function n(e){return Symbol.asyncIterator&&(0,a.m)(null==e?void 0:e[Symbol.asyncIterator])}},10234:function(e,t,r){r.d(t,{m:function(){return a}});function a(e){return"function"==typeof e}},40117:function(e,t,r){r.d(t,{c:function(){return i}});var a=r(21436),n=r(10234);function i(e){return(0,n.m)(e[a.L])}},54919:function(e,t,r){r.d(t,{T:function(){return i}});var a=r(93692),n=r(10234);function i(e){return(0,n.m)(null==e?void 0:e[a.h])}},64882:function(e,t,r){r.d(t,{t:function(){return n}});var a=r(10234);function n(e){return(0,a.m)(null==e?void 0:e.then)}},19625:function(e,t,r){r.d(t,{L:function(){return o},Q:function(){return i}});var a=r(66469),n=r(10234);function i(e){return(0,a.FC)(this,arguments,function(){var t,r,n;return(0,a.Jh)(this,function(i){switch(i.label){case 0:t=e.getReader(),i.label=1;case 1:i.trys.push([1,,9,10]),i.label=2;case 2:return[4,(0,a.qq)(t.read())];case 3:if(n=(r=i.sent()).value,!r.done)return[3,5];return[4,(0,a.qq)(void 0)];case 4:return[2,i.sent()];case 5:return[4,(0,a.qq)(n)];case 6:return[4,i.sent()];case 7:return i.sent(),[3,2];case 8:return[3,10];case 9:return t.releaseLock(),[7];case 10:return[2]}})})}function o(e){return(0,n.m)(null==e?void 0:e.getReader)}},50431:function(e,t,r){r.d(t,{K:function(){return n}});var a=r(10234);function n(e){return e&&(0,a.m)(e.schedule)}},15221:function(e,t,r){r.d(t,{e:function(){return n}});var a=r(10234);function n(e){return function(t){if((0,a.m)(null==t?void 0:t.lift))return t.lift(function(t){try{return e(t,this)}catch(e){this.error(e)}});throw TypeError("Unable to lift unknown Observable type")}}},6342:function(e,t,r){r.d(t,{h:function(){return i}});var a=r(44619),n=r(87828);function i(e){n.z.setTimeout(function(){var t=a.v.onUnhandledError;if(t)t(e);else throw e})}},73822:function(e,t,r){r.d(t,{z:function(){return a}});function a(e){return TypeError("You provided "+(null!==e&&"object"==typeof e?"an invali
7319d object":"'"+e+"'")+" where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.")}},66469:function(e,t,r){r.d(t,{CR:function(){return l},FC:function(){return d},Jh:function(){return o},KL:function(){return p},XA:function(){return s},ZT:function(){return n},ev:function(){return u},mG:function(){return i},qq:function(){return c}});var a=function(e,t){return(a=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])})(e,t)};function n(e,t){if("function"!=typeof t&&null!==t)throw TypeError("Class extends value "+String(t)+" is not a constructor or null");function r(){this.constructor=e}a(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}function i(e,t,r,a){return new(r||(r=Promise))(function(n,i){function o(e){try{l(a.next(e))}catch(e){i(e)}}function s(e){try{l(a.throw(e))}catch(e){i(e)}}function l(e){var t;e.done?n(e.value):((t=e.value)instanceof r?t:new r(function(e){e(t)})).then(o,s)}l((a=a.apply(e,t||[])).next())})}function o(e,t){var r,a,n,i={label:0,sent:function(){if(1&n[0])throw n[1];return n[1]},trys:[],ops:[]},o=Object.create(("function"==typeof Iterator?Iterator:Object).prototype);return o.next=s(0),o.throw=s(1),o.return=s(2),"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(l){return function(s){if(r)throw TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(i=0)),i;)try{if(r=1,a&&(n=2&s[0]?a.return:s[0]?a.throw||((n=a.return)&&n.call(a),0):a.next)&&!(n=n.call(a,s[1])).done)return n;switch(a=0,n&&(s=[2&s[0],n.value]),s[0]){case 0:case 1:n=s;break;case 4:return i.label++,{value:s[1],done:!1};case 5:i.label++,a=s[1],s=[0];continue;case 7:s=i.ops.pop(),i.trys.pop();continue;default:if(!(n=(n=i.trys).length>0&&n[n.length-1])&&(6===s[0]||2===s[0])){i=0;continue}if(3===s[0]&&(!n||s[1]>n[0]&&s[1]<n[3])){i.label=s[1];break}if(6===s[0]&&i.label<n[1]){i.label=n[1],n=s;break}if(n&&i.label<n[2]){i.label=n[2],i.ops.push(s);break}n[2]&&i.ops.pop(),i.trys.pop();continue}s=t.call(e,i)}catch(e){s=[6,e],a=0}finally{r=n=0}if(5&s[0])throw s[1];return{value:s[0]?s[1]:void 0,done:!0}}([s,l])}}}function s(e){var t="function"==typeof Symbol&&Symbol.iterator,r=t&&e[t],a=0;if(r)return r.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&a>=e.length&&(e=void 0),{value:e&&e[a++],done:!e}}};throw TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function l(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var a,n,i=r.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(a=i.next()).done;)o.push(a.value)}catch(e){n={error:e}}finally{try{a&&!a.done&&(r=i.return)&&r.call(i)}finally{if(n)throw n.error}}return o}function u(e,t,r){if(r||2==arguments.length)for(var a,n=0,i=t.length;n<i;n++)!a&&n in t||(a||(a=Array.prototype.slice.call(t,0,n)),a[n]=t[n]);return e.concat(a||Array.prototype.slice.call(t))}function c(e){return this instanceof c?(this.v=e,this):new c(e)}function d(e,t,r){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var a,n=r.apply(e,t||[]),i=[];return a=Object.create(("function"==typeof AsyncIterator?AsyncIterator:Object).prototype),o("next"),o("throw"),o("return",function(e){return function(t){return Promise.resolve(t).then(e,u)}}),a[Symbol.asyncIterator]=function(){return this},a;function o(e,t){n[e]&&(a[e]=function(t){return new Promise(function(r,a){i.push([e,t,r,a])>1||s(e,t)})},t&&(a[e]=t(a[e])))}function s(e,t){try{var r;(r=n[e](t)).value instanceof c?Promise.resolve(r.value.v).then(l,u):d(i[0][2],r)}catch(e){d(i[0][3],e)}}function l(e){s("next",e)}function u(e){s("throw",e)}function d(e,t){e(t),i.shift(),i.length&&s(i[0][0],i[0][1])}}function p(e){if(!Symbol.asyncIterator)throw TypeError("Symbol.asyncIterator is not defined.");var t,r=e[Symbol.asyncIterator];return r?r.call(e):(e=s(e),t={},a("next"),a("throw"),a("return"),t[Symbol.asyncIterator]=function(){return this},t);function a(r){t[r]=e[r]&&function(t){return new Promise(function(a,n){!function(e,t,r,a){Promise.resolve(a).then(function(t){e({value:t,done:r})},t)}(a,n,(t=e[r](t)).done,t.value)})}}}"function"==typeof SuppressedError&&SuppressedError}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.