0x85582125…5972sent to0x96a83b48…d253·#22,583,590·view on Etherscan
});for(let i=e.x;i<t.x;i+=ze.scale/2)J.gaussianBool(He.VVariance.threshold,He.VVariance.mean,He.VVariance.stdDev)||l.push({id:Nn(),meta:{lineCategory:be.vertical},line:[[i+J.num(-ze.scale*s,ze.scale*s),e.y-ze.scale*n],[i+J.num(-ze.scale*s,ze.scale*s),t.y+ze.scale*n]]});vl.push(...i,...l)})(i,l),yl=function(e,t){let n;if(!He.perspectiveBox.enabled)return;let i=[e,new zt(t.x,e.y),t,new zt(e.x,t.y)].map((e=>e.toArray())),l=new Ln(i,[[0,1],[1,2],[2,3],[3,0]]);for(let e=0;e<He.perspectiveBox.count;e++){let e,t=l.internalFaces(),n=J.choice(t),i=n.aabb,a=J.bool(50),s=o(i.height,i.width)/4;if(a){let t=J.num(i.minX+s,i.maxX-s);e=[[t,i.minY],[t,i.maxY]]}else{let t=J.num(i.minY+s,i.maxY-s);e=[[i.minX,t],[i.maxX,t]]}l.splitFaceByPolyLine(n,e)}let a=l.internalFaces(),s=!1,r=!1,c=!1,d=He.perspectiveBox.firstFull;for(let e of a){if(-1==He.perspectiveBox.count)break;let t=e.aabb,i=t.width*J.num(.75,1.25),l=t.height*J.num(.75,1.25),a=!(!d||c)||J.bool(s?0:50),o=!(!d||c)||J.bool(r?0:50);a&&(r=!0),o&&(s=!0);let u=[a?Y/2:t.center.x,o?P/2:t.center.y];c||(n=u),c=!0,Fe[be.perspective]>1&&vl.push(...Un({gStdDev:He.perspectiveBox.threshold,gMean:He.perspectiveBox.mean,gThreshold:He.perspectiveBox.stdDev,boxCenter:u,perspectiveCenter:[t.center.x+J.int(-i/4,i/4),t.center.y+J.int(-l/4,l/4)],width:a?4*Y:i*J.num(.75,1.25),height:o?P:l*J.num(.75,1.25),centerBoxMaskDimensions:[J.int(1,i/ze.scale*.5),J.int(1,l/ze.scale*.5)]}).map((e=>({id:Nn(),line:e,meta:{lineCategory:be.perspective}}))))}return n}(i,l),function(){for(let e=0;e<He.circles.count;e++){let e=Rt(J.num(ze.scale*He.circles.minRadius,ze.scale*He.circles.maxRadius),ze.scale),t=e/2,n=[Y/2+J.num(-Y/2+t,Y/2-t),P/2+J.num(-P/2+t,P/2-t)],i=J.num(0,360),l=On({center:n,radius:e,startAngle:i,endAngle:i+J.int(25,360)});l.length>3&&vl.push({id:Nn(),line:l,meta:{lineCategory:be.circle}})}}(),function(){if(!He.rects.spiralRectsEnabled)return;let e=Pt(new zt(J.num(.4*Y,.6*Y),J.num(.4*P,.6*P))).toArray(),t=J.num(0,22.5)*J.choice([-1,1]),n=ze.scale*J.int(5,10),i=J.num(0,360),l=ze.scale*(2*J.int(1,8));for(;n<P;){let a=Dn({width:n,height:n,center:e,angle:i});vl.push({id:Nn(),line:a,meta:{lineCategory:be.rects,isClosed:!0}}),n+=l,i+=t}}(),function(){if(!He.rects.insetRectEnabled)return;let e=2*He.margin+ze.scale*(2*J.int(1,4)),t=Pt(new zt(J.num(Y/2,Y/2),J.num(P/2,P/2))).toArray(),n=Dn({width:Y-e,height:P-e,center:t,angle:J.num(-1,1)});vl.push({id:Nn(),line:n,meta:{lineCategory:be.borderRect,isClosed:!0}})}();let a=function(){let e=J.num(He.wobble.warpFreq.min,He.wobble.warpFreq.max),t=[];for(let n=0;n<He.wobble.layers;n++){let i=me(180/He.wobble.layers*n);for(let n=0;n<He.wobble.multiLayers;n++){let l=n*He.wobble.offsetMultiplier,a={warpStrength:e,rotationAngleAddition:i,wobbleOffset:l};ki.push(a);let s=new nn;s.expands([new zt(-Y/4,-P/4),new zt(Y+Y/4,P+P/4)]);let o=s.vertexList.map((e=>e.toArray())),r=Rt(ze.scale/He.wobble.gridDivisions,.1),c=Ri({streamlineWorkerProps:{vectorFieldType:"bnnoise",addOutline:!1,vectorFieldNoiseProps:{warpStrength:Rt(e,.01),rotationAngleAddition:Rt(i+J.num(-.1,.1),.01),wobbleOffset:l,wobbleDetail:J.int(0,1)},postProcessingArgs:{directional:!1,wobbleFreq:.5,wobbleAmplitude:.5},maxStreamlines:He.wobble.count,minLength:Rt(ze.scale*He.wobble.minLength,.1),maxLength:Rt(3*P,.1),stepSize:r/4,minDistance:r,bounds:{topLeft:o[0],bottomRight:o[2]},boundingGeometry:o},noiseSeed:un,randomSeed:E(J)});t.push(c)}}return t}(),s=new Map,r=0,c="◴ ◷ ◶ ◵".split(" "),d=Array(a.length);for(let e=0;e<a.length;e++){let t=a[e];s.set(r,!1);let n=r;t.then((t=>{d[e]=t,s.set(n,!0)})),r++}for(;;){let e=[...s.values()].reduce(((e,t)=>e+(t?0:1)),0);if(yield{showUpdate:e>0,message:""+c[t(ll/4)%4],isPercent:!1,value:`${e>0?"Pausing for":"Waiting for"} ${e} tasks`},0==e)break}for(let e=0;e<d.length;e++){let t=d[e];if(Fe[be.wobbles]>0)for(let n of t)vl.push({line:n,id:Nn(),meta:{lineCategory:be.wobbles,lineSubCategory:e}})}}],[function*(){let e=He.margin+ze.marginX,t=He.margin+ze.marginY,n=new le(e,t),i=new le(Y-e,P-t);Zl=new Jn(ze.scale/2,vl),Gl=[n,new zt(i.x,n.y),i,new zt(n.x,i.y)].map((e=>e.toArray())),fl=new Ln(Gl,[[0,1],[1,2],[2,3],[3,0]])}],[function*(){let{maxWidth:e,widthRange:t,spread:n,maxDivergence:i,tension:l,maxPointUse:a,layers:s,maxLinePoints:o,pointsToConsider:r,insetMult:c}=Ue,d=Zl.getAllLines().filter((e=>e.meta.lineCategory==be.objects&&e.meta.isClosed&&J.bool(50))).map((e=>Yn(e.line.map((e=>new zt(...e))))));for(let u=0;u<s;u++){let s=function(t,i){return mn(t,i,0,400,e,e*n)},u=He.margin+e*c,h=He.margin+e*c,m=new ul({maxDist:e*n,bounds:{topLeft:It(new zt(u,h)).toArray(),bottomRight:It(new zt(Y-u,P-h)).toArray()},noiseField:s,seedPoints:d}),p=m.generate();for(let e of p)yield;let g,b=m.kTree,f=[],x=new Set,Z=new Map,y=e=>{x.add(g);let t=Z.get(e)||0;Z.set(e,t+1),Z.get(e)>=a&&b.remove(e)};for(;!(b.count<=0);){if(!g){let e={point:new zt(J.num(0,Y),J.num(0,P)),minDist:1/0};g=b.findNearest(e),y(g)}let e=J.choice(b.findKNearest(g,r).filter((e=>!x.has(e)&&e.point.distanceTo(g.point)<g.minDist*i)));!e||x.size>=o||b.count<=0?(f.push([...x].map((e=>e.point))),x=new Set,g=null):(g=e,y(g))}let G=[];for(let e of f){if(e.length<3)continue;let t=bl(gl(e,{tension:J.num(l.min,l.max),cyclic:!1}),6,!1).map((e=>new zt(e.x,e.y)));G.push(t)}for(let n of G){if(n.length<3)continue;let i=cl(n.map((e=>e.toArray())),J.int(e*(1-t),e*(1+t)),120);vl.push({line:i,id:Nn(),meta:{lineCategory:be.curves,isClosed:!0}}),Zl.addLine(i,{lineCategory:be.curves,isClosed:!0})}}}],[function*(){for(let e=0;e<ke.layers;e++){let{maxDist:t,minDist:n,bnFreq:i,minSizeMult:l,maxSizeMult:a,fieldFreq:s,maxSides:o,minSides:r,clampVertsToGrid:c,clampRotationTo:d,layerScaleMult:u,perspective:h}=ke,m=0==e?1:e*u,p=ke.cropTo==xe.border?Gl:ke.cropTo==xe.scene?[[0,0],[Y,P]]:null,g=null;null!==p&&(g=new nn,g.expandsByPoint(p));let b=function(e,l){return mn(e,l,0,i,n*m,t*m)},f=new ul({maxDist:t*m,bounds:{topLeft:Gl[0],bottomRight:Gl[2]},noiseField:b}).generate(),x=J.num(150,300)*J.choice([-1,1]),Z=40;for(let t of f){let n=ke.forceYUp?0:mn(t.point.x,t.point.y,1e3,s,-40,Z),i=mn(t.point.x+1e3,t.point.y+1e3,2e3,s,-(Z+x),Z+x),c=ke.forceYUp?0:mn(t.point.x-1e3,t.point.y-1e3,-1e3,s,-40,Z),u={w:l,h:l,d:l},m={w:a,h:a,d:a},p=J.weightedChoice([1,"w"],[3,"h"],[0,"d"]),b=J.weightedChoice([1,1],[3,2],[1,3]);u[p]*=b,m[p]*=b;let f=Rl({sides:J.easedInt(ei,r,o),perspectiveCenter:yl,perspectiveStrength:h,width:J.num(t.minDist*u.w,t.minDist*m.w),height:J.num(t.minDist*u.h,t.minDist*m.h),depth:J.num(t.minDist*u.d,t.minDist*m.d*(0==e?ke.zDepthMaxMult:1)),center:[t.point.x,t.point.y],rotationProps:{x:Rt(n,d),y:Rt(i,d),z:Rt(c,d)}}),y=J.int(0,1e10),G=f.faces.reduce(((e,t)=>e+zn(t.vertices.map((e=>new zt(...e))))),0);f.faces=f.faces.filter((e=>null===g||!e.vertices.some((e=>!g.containsPoint(new zt(...e))))));for(let e of f.faces)e.vertices=e.vertices.map((t=>{if(!(t[0]>=Gl[0][0]&&t[1]>=Gl[0][1]&&t[0]<=Gl[2][0]&&t[1]<=Gl[2][1]))return t;let n=new nn;n.expandsByPoint(e.vertices),n.expandByValue(20);let i=Zl.getLinesIntersectingOrContainedWithinAABB(n).filter((e=>{let t=e.meta.lineCategory;return t==be.horizontal||t==be.vertical||t==be.perspective}));if(!i.length)return t;let l=i.reduce(((e,n)=>fn(t,e.line)<fn(t,n.line)?e:n),i[0]);return bn(t,l.line)}));for(let e of f.faces)Xl.addPolygon(e.vertices,{category:"face",meta:{id:y,lightingIntensity:e.lighting,normal:e.normal,area:zn(e.vertices.map((e=>new zt(...e)))),totalArea:G}});Cl.push(f),yield{showUpdate:!0,message:"Generating Scene",isPercent:!1,value:""}}}let e=Xl.getAllPolygons(),t=.8*Math.min(...e.map((e=>e.meta.meta.lightingIntensity))),n=.95*Math.max(...e.map((e=>e.meta.meta.lightingIntensity)));e.forEach((e=>{const i=e.meta.meta.lightingIntensity;let l=Tt(i,t,n,0,1),a=Tt($n(l),-0,1,Ke.min,Ke.max);e.meta.meta.lightingIntensity=a}));for(let t of e){let e={line:t.verts,id:Nn(),meta:{lineCategory:be.objects,id:t.meta.meta.id,isClosed:!0}};vl.push(e),Zl.addLine(t.verts,e.meta)}}],[function*(){let e=fl.internalFaces().sort(((e,t)=>t.area-e.area))[0],n=e.area,i=n,l=e,s=new Set,r=Ne;for(Fe[be.objects]>0&&r.push(be.objects);i/n>.95+b;){let e=Zl.getAllLines().filter((e=>e.meta.lineCategory==be.vertical||e.meta.lineCategory==be.horizontal)),t=J.choice(e);fl.splitFaceByPolyLine(l,t.line,t.meta.isClosed,!1),s.add(t),l=fl.internalFaces().sort(((e,t)=>t.area-e.area))[0],i=l.area,yield{showUpdate:!0,message:"Searching for initial structure",isPercent:!0,value:o(.95*n/i*100,100)}}fl.cleanupTrailingEdges();let c=!0,d=new Map;for(let e=0;e<je;e++){if(e%t(je/5)==0&&e>0&&e<t(je-je/5)){let e=new Di(fl,.75).findDominantPaths(),t=[];for(let n of e)t.push(n);[...t.filter((e=>e.curviness>.02)).sort(((e,t)=>t.length-e.length)).slice(0,2),...t.filter((e=>e.curviness<.02)).sort(((e,t)=>t.length-e.length)).slice(0,2)].forEach((e=>{let t=e.vertices;if(c){for(let e=1;e<t.length-2;e++){let n=[t[e],t[e+1]],i=fl.findHedge(n[0].x,n[0].y,n[1].x,n[1].y);i?.face?.area>0&&fl.removeEdge(n[0].x,n[0].y,n[1].x,n[1].y)}c=!1}else{let e=[t[0],t[1]],n=e[0].distanceTo(e[1]);for(let i=1;i<t.length-2;i++){let l=t[i].distanceTo(t[i+1]);l>n&&(e=[t[i],t[i+1]],n=l);let a=fl.findHedge(e[0].x,e[0].y,e[1].x,e[1].y);a?.face?.area>0&&a.twin.face?.area>0&&fl.removeEdge(e[0].x,e[0].y,e[1].x,e[1].y)}}})),fl.cleanupDegenerateHoles(),fl.cleanupTrailingEdges()}fl.cleanupTrailingEdges(),fl.insertPolygon(Gl,!0);let i,l=fl.internalFaces();wl.update(l);let s=wl.topN(1e3).filter((e=>!Kl.has(e.id))),o=[];for(let e of s){let t=new Ln([],[]);t.insertPolygon(e.vertexlist.map((e=>e.toArray())),!0);let l=t.faces[0],a=new Set,s=()=>{const n=[];for(let i=0;i<o.length;i++){const s=o[i];if(a.has(s.constructionLine.id))continue;const r=s.constructionLine.meta.lineCategory,c=s.constructionLine.meta.lineSubCategory;if(Ml(r,e.aabb.center,Fe[r],c)<=0)continue;const d=s.constructionLine.line;let u=s?.constructionLine?.meta?.aabb;if(u||(u=new nn,u.expandsByPoint(d),s.constructionLine.meta.aabb=u),!e.aabb.intersects(u))continue;const h=s?.constructionLine?.meta?.isClosed,m=t.splitFaceByPolyLine(l,d,h,!0);m?.lines?.length>0&&m?.intersectionCount>=2&&n.push(s)}o=n},r=e,c=n/10;if(e.area>c){let t=100,n=new nn;for(n.expand(e.center);!o.length&&n.area<c&&n.area<e.area;){n.expandByValue(t),o=Zl.linesIntersectingAABB(n),t+=50,s();for(let e of o)a.add(e.constructionLine.id)}}if(o.length||(o=Zl.getLinesIntersectingFace(r,!1),s()),o.length>0){i={face:e,intersecting:o},t.dispose();break}}if(!i)break;let{face:r,intersecting:h}=i,m=new Map;Object.values(be).forEach((e=>{"string"!=typeof e&&0!=Fe[e]&&m.set(e,h.filter((t=>{let n=t.constructionLine.meta;return n.lineCategory===e&&!(n.unableToSplitFaces&&n.unableToSplitFaces.has(r.id))})))}));let p=[];if(m.forEach(((e,t)=>{if(!e.length)return;let n=Ml(t,r.aabb.center,Fe[t]);if(n>0)if(e.some((e=>e.constructionLine.meta?.lineSubCategory))){let n=new Map;e.map((e=>{let t=e.constructionLine.meta.lineSubCategory;n.has(t)?n.get(t).push(e):n.set(t,[e])}));for(let[e,i]of n){let n=Ml(t,r.aabb.center,Fe[t],e);p.push([n,i.reduce(((e,t)=>{let n=fn(r.aabb.center.toArray(),t.constructionLine.line);return n<e.distance-b?{distance:n,line:t}:e}),{distance:1/0,line:null}).line])}}else p.push([n,e.reduce(((e,t)=>{let n=fn(r.aabb.center.toArray(),t.constructionLine.line);return n<e.distance-b?{distance:n,line:t}:e}),{distance:1/0,line:null}).line])})),Ee>0){let e=h.filter((e=>e.constructionLine?.meta?.used&&!e.constructionLine?.meta?.unableToSplitFaces?.has(r.id)&&e.constructionLine.meta.lineCategory==be.objects)).reduce(((e,t)=>{let n=fn(r.aabb.center.toArray(),t.constructionLine.line);return n<e.distance?{distance:n,line:t}:e}),{distance:1/0,line:null}).line;e&&p.push([Ml(be.used,r.aabb.center,Ee),e])}if(p=p.filter((e=>e[1])),0==p.length){Kl.add(r.id);continue}let g=J.weightedChoice(...p),f=fl.splitFaceByPolyLine(r,g.constructionLine.line,g.constructionLine.meta.isClosed,!1,J.bool(Qe.longestSplitOnlyChance));if(f&&(g.constructionLine.meta.used=!0),!f&&(d.set(r.id,(d.get(r.id)||0)+1),e--,!g.constructionLine.meta.unableToSplitFaces&&(g.constructionLine.meta.unableToSplitFaces=new Set),g.constructionLine.meta.unableToSplitFaces.add(r.id),d.get(r.id)>5)){let e=fl.faces.find((e=>e.id==r.id));for(let t of e.hedges.filter((t=>t.face==e)))fl.removeEdge(t.origin.x,t.origin.y,t.twin.origin.x,t.twin.origin.y);fl.cleanupTrailingEdges()}yield{showUpdate:!0,message:"Composing",isPercent:!0,value:t(100*(u=e/je,1-a(1-u,3)))}}var u}],[function*(){Cl.sort(((e,t)=>e.faces.reduce(((e,t)=>e+zn(t.vertices.map((e=>new zt(...e))))),0)-t.faces.reduce(((e,t)=>e+zn(t.vertices.map((e=>new zt(...e))))),0))),Cl=En(Cl.slice(t(Cl.length/4),n(Cl.length/4*2)));for(let e=0;e<Cl.length;e++){if(J.bool(100-Te.forceInsertObjectsChance))continue;let t=Cl[e];for(let e of t.faces)J.bool(50)||(fl.insertPolygon(e.vertices,!0),J.bool(50)&&fl.removeEdgesInsidePolygon(e.vertices))}let e=vl.filter((e=>e.meta.lineCategory==be.curves)).sort(((e,t)=>{let n=zn(e.line.map((e=>new zt(...e))));return zn(t.line.map((e=>new zt(...e))))-n}));for(let n=0;n<e.length;n++){if(J.bool(100-Te.forceInsertCurvesChance))continue;let i=e[n];n<t(e.length/10)&&(fl.insertPolygon(i.line,!0),fl.removeEdgesInsidePolygon(i.line,10))}}],[function*(){let e=fl.internalFaces().filter((e=>e.area>1)),n=e.length*Ae;for(let i=0;i<n&&!(e.length<10);i++){let l=J.choice(e.sort(((e,t)=>{const n=e.area-t.area;return Math.abs(n)<b?e.id-t.id:n})).slice(0,100));if(!l)continue;let a=l.hedges.filter((e=>e.twin&&e.face!==e.twin.face&&e.twin.face.area>0&&e.face.area>0)),s=J.choice(a);s&&fl.removeEdge(s.origin.x,s.origin.y,s.twin.origin.x,s.twin.origin.y),fl.cleanupTrailingEdges(),e=fl.internalFaces().filter((e=>e.area>1)),yield{showUpdate:!0,message:"Deconstructing",isPercent:!0,value:t(i/n*100)}}}],[function*(){fl.insertPolygon(Gl,!0)}],[function*(){let e=new Di(fl,.4).findDominantPaths();for(let t of e)Ll.push(t),yield{showUpdate:!0,message:"Walking Paths",isPercent:!1,value:Ll.length}}],[function*(){xl=new Ln(Gl,[[0,1],[1,2],[2,3],[3,0]]);let e=Me.meshDensity,t=xl.internalFaces()[0].area;xl.dispose();let n=P/15,i=[J.num(Y/2,Y/2),J.num(P/2-n,P/2+n)],l=Ll.sort(((e,t)=>fn(i,e.vertices.map((e=>e.toArray())))-fn(i,t.vertices.map((e=>e.toArray()))))).slice(0,Ll.length),a=[],s=0;for(;s<e&&l.length>0;){let n=l.shift();xl.insertPolygon(n.vertices.map((e=>[e.x,e.y])),!1),a.push(n),s=xl.internalFaces().reduce(((e,t)=>e+t.area),0)/t*100,yield{showUpdate:!0,message:"Defining subject",isPercent:!0,value:s/e*100}}xl.cleanupTrailingEdges();let o=xl.vertices.filter((e=>e.y<.75*P&&Cn(e.toArray(),Gl)));for(let e of o)for(let t of e.hedgelist){let e=[t.origin.x,t.origin.y],n=[t.twin.origin.x,t.twin.origin.y];if(Cn(e,Gl)&&Cn(n,Gl)){if(t.origin.distanceTo(t.twin.origin)<10)continue;xl.removeEdge(e[0],e[1],n[0],n[1])}}xl.cleanupTrailingEdges(),Sl.push(...a.sort(((e,t)=>t.length-e.length)))}],[function*(){let e=Ll.filter((e=>{let t=(Be.cropToMargin?Be.margin:He.margin)*Me.dominantLineInsetMultiplier;return!e.vertices.some((e=>e.x<=t||e.x>=Y-t||e.y<=t||e.y>=P-t))}));"none"!==Me.lineFilter&&(e=e.filter((e=>{let t=e.curviness>.01;return"curves"==Me.lineFilter?t:!t})));let n=[];for(let i of e){let e=t(i.vertices.length/2),l=!1;for(let t of n){let n=0;for(let a of i.vertices){for(let i of t.vertices)if(a.isEqualTo(i)&&(n++,n>=e)){l=!0;break}if(l)break}if(l)break}l||n.push(i)}e=n,Me.cropToDominantShape&&(e=e.filter((e=>xl.getFacesAtPoint(e.vertices[0].toArray()).length>0&&xl.getFacesAtPoint(e.vertices[e.vertices.length-1].toArray()).length>0)));let a=t(e.length/100*Me.skipLongest),s=e.sort(((e,t)=>t.length-e.length)).slice(a,e.length/100*Me.percentage+a),o=ve.bg[0][0]>.5?ve.line[0]:[...ve.line,...ve.base,...ve.accent].filter((e=>e[1]<.05)).reduce(((e,t)=>t[0]>e[0]?t:e),ve.line[0]),r=[...ve.line,...ve.base,...ve.accent].filter((e=>e[1]<.05)).reduce(((e,t)=>t[0]>e[0]?t:e),ve.line[0]);for(let e of s){if(J.bool(50)){let t=e.vertices.reduce(((t,n,i)=>0===i?0:t+n.distanceTo(e.vertices[i-1])),0)/J.num(10,15),n=e.vertices[1].angleTo(e.vertices[0]),a=new zt(e.vertices[0].x+l(n)*t,e.vertices[0].y+i(n)*t),s=e.vertices[e.vertices.length-2].angleTo(e.vertices[e.vertices.length-1]),o=new zt(e.vertices[e.vertices.length-1].x+l(s)*t,e.vertices[e.vertices.length-1].y+i(s)*t);e.vertices=[a,...e.vertices,o]}let t=new nn;t.expands(e.vertices),t.expandByValue(Me.thickness.max+3);let n={polygon:t.vertexList,faceRef:null,category:sn.walker,readyForRender:!0,detailObject:[{lines:[e.vertices.map((e=>e.toArray()))],noiseOffset:[J.num(-1,1),J.num(-1,1)],closedPolyOrLine:!1,materialHardness:J.num(Me.materialHardness.min,Me.materialHardness.max),linePressure:J.num(Me.linePressure.min,Me.linePressure.max),canWarp:!0,lineTapering:Pi(Me.lineTapering,J),lineWeight:J.num(Me.thickness.min,Me.thickness.max),lineColor:Me.backgroundColor?r:Me.colors?J.choice([...ve.accent,...ve.base,...ve.line]):o}]};Wl.push(n)}}],[function*(){let e=Re.count;for(let t=0;t<e;t++){let e=new Di(fl),t=Ui(fl);if(!t)break;e.walk(t,J.int(Re.length.min,Re.length.max),!0),e.AABB.expandByValue(10);let n=Re.isLineColor?ve.line[0]:Re.colors?J.weightedChoice([1,J.choice(ve.accent)],[0,J.choice(ve.line)],[1,J.choice(ve.base)]):J.choice(ve.bg),{fade:i,scale:l}=Re.lineTapering,a={polygon:e.AABB.vertexList,faceRef:null,category:sn.walker,readyForRender:!0,detailObject:[{lines:[e.pathVerts.map((e=>e.toArray()))],closedPolyOrLine:!1,noiseOffset:[J.num(-1,1),J.num(-1,1)],lineTapering:{fade:{in:{enabled:J.bool(i.in.enabledChance),length:J.num(i.in.min,i.in.max)},out:{enabled:J.bool(i.out.enabledChance),length:J.num(i.out.min,i.out.max)}},scale:{in:{enabled:J.bool(l.in.enabledChance),length:J.num(l.in.min,l.in.max)},out:{enabled:J.bool(l.out.enabledChance),length:J.num(l.out.min,l.out.max)}}},linePressure:J.num(Re.hardness.min,Re.hardness.max),canWarp:J.bool(Re.warpChance),lineWeight:J.num(Re.thickness.min,Re.thickness.max),lineColor:n}]};Wl.push(a)}}],[function*(){let e=fl.internalFaces().filter((e=>e.area>1)),n=new nn;n.expandsByPoint(Gl),e=e.filter((e=>n.containsPoint(e.center))),Be.cropToMargin&&(e=e.filter((e=>e.center.x>Be.margin&&e.center.x<Y-Be.margin&&e.center.y>Be.margin&&e.center.y<P-Be.margin)));let i=Zl.getAllLines().filter((e=>e.meta.lineCategory==be.curves&&e.meta.used)),l=e=>{let n=e.aabb;for(let l of i){let i=l.line.map((e=>new zt(...e)));if(l.meta?.aabb||(l.meta.aabb=new nn,l.meta.aabb.expands(i)),l.meta.aabb.intersects(n)){let n=t(.9*e.vertexlist.length),a=0;for(let t=0;t<e.vertexlist.length;t++){if(a>=n)return l;let s=e.vertexlist[t],o=!1;for(let e of i)if(s.isEqualTo(e)){a++,o=!0;break}!o&&Tn(i,s)&&a++}}}},a=e=>Xl.getPolygonsAtPoint(e.center.toArray()).sort(((e,t)=>e.meta.meta.totalArea-t.meta.meta.totalArea)),s=e=>{const t=xl.getFacesIntersectingPoly(e.vertexlist.map((e=>[e.x,e.y])));return e.vertexlist.every((e=>t.some((t=>Cn(e.toArray(),t.face.vertexlist.map((e=>e.toArray())))||Tn(t.face.vertexlist,e)))))?t:[]};for(let n=0;n<e.length;n++){let i=e[n],o=n,r=a(i),c=l(i),d=s(i),u=r.length?r[0].meta.meta.lightingIntensity:Ke.default,h={polygon:i.vertexlist,faceRef:i,lightingIntensity:u,category:sn.foreground,isInCurve:c,detailObjectProps:{inObject:r,inDominantShapes:d}};Wl.push(h),yield{showUpdate:!0,message:"Determining Layout",isPercent:!0,value:t(o/e.length*100)}}const o=[...Wl.filter((e=>e.category==sn.foreground&&e.lightingIntensity)).map((e=>e.lightingIntensity))].sort(((e,t)=>e-t));for(let e of Wl){const t=(r=e.lightingIntensity,(o.indexOf(r)+o.lastIndexOf(r))/2/(o.length-1));e.lightingIntensity=wt(Kt(ti(t),0,1,Ke.min,Ke.max),e.lightingIntensity,.9)}var r}],[function*(){let{freqMultiplier:e}=Oe,t=e,n=500*e;Zl.getAllLines().filter((e=>e.meta.lineCategory==be.objects&&e.meta.used)).forEach((e=>{yi.add(e.meta.id)}));let i=Wl.filter((e=>e.category==sn.foreground)),{base:l,accent:a,line:s,bg:o}=ve,r=En([...l,...a,...s,...o]),c=J.int(0,r.length-1);li=function(e,t,n="right"){let i=e.slice();for(let e=0;e<t;e++)i=_n(i,n);return i}(r,c),li.length>Oe.maxAccents&&(li=li.slice(0,Oe.maxAccents));let d=Oe.mutation;if("none"!==d){let e=e=>{let t,n=ci;switch(d){case"offsetUp":t=n;break;case"offsetDown":t=-30}return J.choice(gi(e,si,t,Oe.samplesForPaletteOffset))},t=[];for(let n=1;n<li.length;n++){let i=li[n],l=li[n-1],a=J.bool(50);if(l&&a){let n=e(l);t.push(n)}else t.push(i)}li=t}ai=ai.map((e=>[e[0],e[1],e[2]])),fi=ii(t,li.length,0,di,i.filter((e=>e.detailObjectProps?.inDominantShapes?.length>0)).map((e=>e.faceRef.center))),xi=ii(n,ai.length,0,di,i.filter((e=>!e.detailObjectProps?.inDominantShapes?.length)).map((e=>e.faceRef.center))),ai=pi(xi,ai),li=pi(fi,li)}],[function*(){let e=Wl.filter((e=>e.category==sn.foreground&&e.detailObjectProps?.inDominantShapes?.length>0)),t=new zt(Y/2,P/2),n=e.map((e=>e.faceRef.hedges.reduce(((e,n)=>e.origin?n.origin?t.distanceTo(e.origin)<t.distanceTo(n.origin)?e:n:e:n),e.faceRef.hedges[0])));for(let e=0;e<Je.count;e++){let e=Rt(J.num(ze.scale*Je.size.min,ze.scale*Je.size.max),ze.scale),t=n.map((e=>{let t=e.origin.lerp(e.twin.origin,.5);return{distance:fn(t.toArray(),Gl,!0),edge:e,point:t}})).filter((t=>t.distance>1.25*e)),i=2.5*e;t.sort(((e,t)=>Math.abs(e.distance-i)-Math.abs(t.distance-i)));let l=t[0];n.splice(n.indexOf(l.edge),1);let a=l.point,s=J.num(0,360),o=On({center:a.toArray(),radius:e,startAngle:s,endAngle:s+359.5}),r=new Qi([o],{x:J.num(-15,15),y:J.num(-15,15),z:J.num(-15,15)},1200,0,{x:yl[0],y:yl[1]}).getLineSegments(),c={polygon:r[0].map((e=>new zt(...e))),faceRef:null,category:sn.overlay,readyForRender:!1,detailObjectProps:{}};if(Wl.push(c),Je.outline){let e=r[0],t=new nn;t.expandsByPoint(e),t.expandByValue(2*Me.thickness.max);let n={polygon:t.vertexList,faceRef:null,category:sn.overlayOutline,readyForRender:!0,detailObject:[{lines:[e],noiseOffset:[J.num(-1,1),J.num(-1,1)],closedPolyOrLine:!1,materialHardness:J.num(Me.materialHardness.min,Me.materialHardness.max),linePressure:J.num(Me.linePressure.min,Me.linePressure.max),canWarp:!1,lineTapering:Pi(Me.lineTapering,J),lineWeight:J.num(Me.thickness.min,Me.thickness.max),lineColor:Me.backgroundColor?ve.bg[0]:Me.colors?J.choice([...ve.accent,...ve.base,...ve.line]):ve.line[0]}]};Wl.push(n)}}}],[function*(){let{enabled:e,linePressure:t,materialHardness:n,lineWeight:i,percentage:l,lineTapering:a}=Ie;if(!e)return;let s=vl.filter((e=>e.meta.used)).filter((()=>J.bool(l))),o=new nn;o.expands([new zt(0,0),new zt(Y,P)]);let r={polygon:o.vertexList,faceRef:null,category:sn.constructionLine,readyForRender:!0,detailObject:[{lines:s.map((e=>e.line)),closedPolyOrLine:!1,noiseOffset:[J.num(-1,1),J.num(-1,1)],linePressure:J.num(t.min,t.max),materialHardness:J.num(n.min,n.max),ca