topojson=function(){function merge(topology,arcs){var arcsByEnd={},fragmentByStart={},fragmentByEnd={};arcs.forEach(function(i){var e=ends(i);(arcsByEnd[e[0]]||(arcsByEnd[e[0]]=[])).push(i);(arcsByEnd[e[1]]||(arcsByEnd[e[1]]=[])).push(~i)});arcs.forEach(function(i){var e=ends(i),start=e[0],end=e[1],f,g;if(f=fragmentByEnd[start]){delete fragmentByEnd[f.end];f.push(i);f.end=end;if(g=fragmentByStart[end]){delete fragmentByStart[g.start];var fg=g===f?f:f.concat(g);fragmentByStart[fg.start=f.start]=fragmentByEnd[fg.end=g.end]=fg}else if(g=fragmentByEnd[end]){delete fragmentByStart[g.start];delete fragmentByEnd[g.end];var fg=f.concat(g.map(function(i){return~i}).reverse());fragmentByStart[fg.start=f.start]=fragmentByEnd[fg.end=g.start]=fg}else{fragmentByStart[f.start]=fragmentByEnd[f.end]=f}}else if(f=fragmentByStart[end]){delete fragmentByStart[f.start];f.unshift(i);f.start=start;if(g=fragmentByEnd[start]){delete fragmentByEnd[g.end];var gf=g===f?f:g.concat(f);fragmentByStart[gf.start=g.start]=fragmentByEnd[gf.end=f.end]=gf}else if(g=fragmentByStart[start]){delete fragmentByStart[g.start];delete fragmentByEnd[g.end];var gf=g.map(function(i){return~i}).reverse().concat(f);fragmentByStart[gf.start=g.end]=fragmentByEnd[gf.end=f.end]=gf}else{fragmentByStart[f.start]=fragmentByEnd[f.end]=f}}else if(f=fragmentByStart[start]){delete fragmentByStart[f.start];f.unshift(~i);f.start=end;if(g=fragmentByEnd[end]){delete fragmentByEnd[g.end];var gf=g===f?f:g.concat(f);fragmentByStart[gf.start=g.start]=fragmentByEnd[gf.end=f.end]=gf}else if(g=fragmentByStart[end]){delete fragmentByStart[g.start];delete fragmentByEnd[g.end];var gf=g.map(function(i){return~i}).reverse().concat(f);fragmentByStart[gf.start=g.end]=fragmentByEnd[gf.end=f.end]=gf}else{fragmentByStart[f.start]=fragmentByEnd[f.end]=f}}else if(f=fragmentByEnd[end]){delete fragmentByEnd[f.end];f.push(~i);f.end=start;if(g=fragmentByEnd[start]){delete fragmentByStart[g.start];var fg=g===f?f:f.concat(g);fragmentByStart[fg.start=f.start]=fragmentByEnd[fg.end=g.end]=fg}else if(g=fragmentByStart[start]){delete fragmentByStart[g.start];delete fragmentByEnd[g.end];var fg=f.concat(g.map(function(i){return~i}).reverse());fragmentByStart[fg.start=f.start]=fragmentByEnd[fg.end=g.start]=fg}else{fragmentByStart[f.start]=fragmentByEnd[f.end]=f}}else{f=[i];fragmentByStart[f.start=start]=fragmentByEnd[f.end=end]=f}});function ends(i){var arc=topology.arcs[i],p0=arc[0],p1=[0,0];arc.forEach(function(dp){p1[0]+=dp[0],p1[1]+=dp[1]});return[p0,p1]}var fragments=[];for(var k in fragmentByEnd)fragments.push(fragmentByEnd[k]);return fragments}function mesh(topology,o,filter){var arcs=[];if(arguments.length>1){var geomsByArc=[],geom;function arc(i){if(i<0)i=~i;(geomsByArc[i]||(geomsByArc[i]=[])).push(geom)}function line(arcs){arcs.forEach(arc)}function polygon(arcs){arcs.forEach(line)}function geometry(o){if(o.type==="GeometryCollection")o.geometries.forEach(geometry);else if(o.type in geometryType){geom=o;geometryType[o.type](o.arcs)}}var geometryType={LineString:line,MultiLineString:polygon,Polygon:polygon,MultiPolygon:function(arcs){arcs.forEach(polygon)}};geometry(o);geomsByArc.forEach(arguments.length<3?function(geoms,i){arcs.push(i)}:function(geoms,i){if(filter(geoms[0],geoms[geoms.length-1]))arcs.push(i)})}else{for(var i=0,n=topology.arcs.length;i>>1;if(a[mid]