diff --git a/art/3D-Raycasting-Jaiden/index.js b/art/3D-Raycasting-Jaiden/index.js new file mode 100644 index 000000000..da523d619 --- /dev/null +++ b/art/3D-Raycasting-Jaiden/index.js @@ -0,0 +1,1060 @@ +/* +@title: 3D Raycasting +@author: Jaiden Grimminck +@snapshot: snapshot1.png +*/ + +/* +A simple raycasting 3d engine using a field enviornment and raycasting to create a 3d effect. +Can be randomized and configured! See the *parameters start* below. + +Program made by Jaiden G, find me at https://github.com/JaidenAGrimminck. + +It's a little buggy, but it was a fun afternoon project to make. +*/ + +/* parameters start */ + +// 1 for wall, 0 for empty space +// 2 for the starting location. +// the tile size is "how big" each tile is in the 3d space (width and length) +const tileSize = 10; +const enviornment = [ + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 0, 1, 0, 0, 0, 0, 0, 0, 1], + [1, 0, 1, 1, 1, 0, 1, 1, 0, 1], + [1, 0, 0, 0, 0, 0, 0, 1, 0, 1], + [1, 1, 0, 1, 1, 1, 0, 0, 1, 1], + [1, 0, 0, 0, 0, 0, 0, 0, 0, 1], + [1, 2, 1, 0, 1, 0, 1, 0, 1, 1], + [1, 0, 1, 0, 0, 1, 0, 0, 0, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], +]; + +//if you want to randomize the maze, set this to true +const randomizeMaze = true; + +//adjust the player pos x and y for adjustments in the enviornment +//it'll base the position where the "2" is above in the enviornment and adjust it accordingly +//rot is the rotation of the player +let playerPos = { + x: 0, + y: -2, + rot: (2 * Math.PI) - (Math.PI / 4) +} + +//if you want to randomly generate the player position, set this to true +//this will IGNORE the playerPos.x and playerPos.y values above and randomly generate the player position +const randomlyGeneratePlayerPos = true; + +//This is the maximum "jump" in height of the boxes in the 3d space before it's considered a new wall +//it may require adjusting based on the enviornment +const maxJumpForShift = 20; + +//if you want to display the shading +const displayShading = true; + +//if you want to display the map +const displayMap = true; + +//if you want to display the massive chunk of lines that is the raycasting in the map +const displayRaycasting = true; + +//if you want to display ONLY the outer lines of the raycasting, set this to true +//stops the filled in shading, good for drawing. displayRaycasting must be set equal to true though +//if false, you'll see the full extent of the raycasting (it's filled in black) +const displayOuterRaycasting = true; + +//how much the shading is scaled by. increasing will decrease the amount of shading, vice versa +//1 is good for picturing what it'll look like, but for drawing, 3/4 looks better honestly +const shadingScale = 2; + +//how much the slope threshold must be to think it's actually changed perspective +const slopeThreshold = 0; + +// if there's a dramatic shift, if you want the tops to go from bottom to top, set this to true +// or it'll just go from the higher level to the lower level on top +const topsToBottom = false; + +//contains the lines within the slopes. if true, it'll just cut off the line if it goes out of bounds +const containLinesWithinShading = true; + +//fov for display. 60 is a good value +const fov = 60; + +//enables a sky. +const enableSky = true; + +//runs this through a spacing function, floor(e^{(-1/x) * y + 3}). this is the x in the function. (increase = increase in distance between lines) +const skyLineSpacing = 150; + +//if you want to make sure it doesn't make too thin spacing (make it too thick) +//acts as a minimum spacing for the sky +//set this to 0 to disable. +const minSkySpacing = 1; + +/* end parameters */ + +//if in local enviornment, set to true. If in the blot editor, set to false. +//just flips it around and edits the values accordingly +//ignore this one if you're in the blot editor +const inLocalEnviornment = false; + +const blotwidth = 125; +const blotheight = 125; + +const scale = 4; + +//for local enviornment +const width = 125 * scale; +const height = 125 * scale; + +const walls = []; + +class Wall { + constructor(x, y, w, h) { + this.x = x; + this.y = y; + this.w = w; + this.h = h; + } + signedDistance(x, y) { + let adjX = this.x + this.w / 2; + let adjY = this.y + this.h / 2; + + let dx = Math.max(Math.abs(x - adjX) - this.w / 2, 0); + let dy = Math.max(Math.abs(y - adjY) - this.h / 2, 0); + return Math.sqrt(dx * dx + dy * dy); + } +} + +function translateEnviornment() { + if (randomizeMaze) { + for (let y = 1; y < enviornment.length - 1; y++) { + for (let x = 1; x < enviornment[y].length - 1; x++) { + enviornment[y][x] = bt.randIntInRange(0, 1); + } + } + } + + let possiblePositions = []; + + for (let y = 0; y < enviornment.length; y++) { + for (let x = 0; x < enviornment[y].length; x++) { + if (enviornment[y][x] === 2) { + playerPos.x += x * tileSize + tileSize / 2; + playerPos.y += y * tileSize + tileSize / 2; + } + if (enviornment[y][x] === 1) { + walls.push(new Wall(x * tileSize, y * tileSize, tileSize, tileSize)); + } + if (enviornment[y][x] === 0) { + possiblePositions.push([x * tileSize, y * tileSize]); + } + } + } + + if (randomlyGeneratePlayerPos) { + let randomPos = possiblePositions[bt.randIntInRange(0, possiblePositions.length - 1)]; + playerPos.x = randomPos[0] + tileSize / 2; + playerPos.y = randomPos[1] + tileSize / 2; + + playerPos.rot = bt.randIntInRange(0, 360) * Math.PI / 180; + } +} + +function raycastFromPosition(x, y, angle) { + const maxDistance = 1000; + + let d = 0; + while (d < maxDistance) { + let dx = d * Math.cos(angle); + let dy = d * Math.sin(angle); + + let closestSignedDist = 1000; + + for (let wall of walls) { + if (wall.signedDistance(x + dx, y + dy) < 0.1) { + return d; + } + + if (wall.signedDistance(x + dx, y + dy) < closestSignedDist) { + closestSignedDist = wall.signedDistance(x + dx, y + dy); + } + } + d += closestSignedDist * 0.1; + } + + return 100; +} + +if (inLocalEnviornment) { + setDocDimensions(width, height); +} else { + setDocDimensions(blotwidth, blotheight); +} + +function circle(x, y, r, sides=360) { + let a = []; + for (let t = 0; t < 2 * Math.PI; t += (Math.PI / sides) * 2) { + a.push([ + x + r * Math.cos(t), + y + r * Math.sin(t) + ]) + } + return a; +} + +const shaded = { + THICK: 2, + MEDIUM: 4, + LIGHT: 8 +} + +function rect(x,y,w,h) { + return [ + [x, y], + [x + w, y], + [x + w, y + h], + [x, y + h], + [x,y] + ]; +} + +function vertShadedRectange(x,y,w,h,level) { + let paths = []; + for (let t = 0; t <= 100; t += level) { + let p = t / 100; + paths.push([ + [x, y + (h * p)], + [x + w, y + (h * p)], + ]); + } + + paths.push([ + [x, y], + [x, y + h] + ]) + paths.push([ + [x + w, y], + [x + w, y + h] + ]) + paths.push([ + [x, y + h], + [x + w, y + h] + ]) + + return paths; +} + +function vertShadedRectangleWithSlant(x,y,w,h,slope,level, max=10000) { + let paths = []; + for (let t = 0; t <= 100; t += level) { + let p = t / 100; + + let yDown = y + (h * p); + + let xw = x + w; + let yh = yDown + (slope * w); + let flag = false; + + if (yh < y && containLinesWithinShading) { + xw = x + (y - yDown) / slope; + + yh = y; + + flag = true; + } + + if (yh > max) { + xw = x + (max - yDown) / slope; + + yh = max; + + flag = true; + } + + paths.push([ + [x, yDown], + [xw, yh], + ]); + + } + return paths; +} + +function shadedRectangle(x,y,w,h,level) { + let paths = []; + + for (let t = 0; t <= 100; t += level) { + let p = t / 100; + paths.push([ + [x + (w * p), y], + [x, y + (h * p)], + ]); + } + + for (let t = 0; t < 100; t += level) { + let p = t / 100; + paths.push([ + [x + w - (w * p), y + h], + [x + w, y + h - (h * p)], + ]); + } + + return paths; +} + +// store final lines here +const finalLines = [ + // circle(width / 2, height / 2, width / 4), + // ...shadedRectangle(100, 100, 110, 110, shaded.LIGHT) +]; + +translateEnviornment(); + +let farthestDistance = 0; +let closestDistance = 1000; + +let topLinesHeight = {}; + +function fillFinalLines() { + const offset = displayMap ? 100 : 0; + + let heights = []; + let lastChange = 0; + + let heightList2 = []; + + for (let i = 0; i < fov; i++) { + let m = (i - (fov / 2)); + let wallHeight = raycastFromPosition(playerPos.x, playerPos.y, playerPos.rot + (m * Math.PI / 180)); + + let lineHeight = 10 * height / wallHeight; + + if (lineHeight > height - offset) { + lineHeight = height - offset; + } + + heights.push(lineHeight); + + heightList2.push([ + m, lineHeight + ]) + + if (wallHeight > farthestDistance) { + farthestDistance = wallHeight; + } + + if (wallHeight < closestDistance) { + closestDistance = wallHeight; + } + + lineHeight = 400 - Math.floor(lineHeight); + + if (!(lineHeight in topLinesHeight)) { + topLinesHeight[lineHeight] = []; + } + + for (let x = width * (i / fov); x < width * ((i + 1) / fov); x++) { + topLinesHeight[lineHeight].push(Math.floor(x)); + } + } + + let signChanges = []; + let tops = [[ + width * (0 / fov), + height - offset - heights[0] + ]]; + + for (let i = 1; i < heights.length; i++) { + if (Math.abs(heights[i] - heights[i - 1]) > maxJumpForShift) { + let lowerHeight = Math.min(heights[i], heights[i - 1]); + let higherHeight = Math.max(heights[i], heights[i - 1]); + + tops[tops.length - 1].push([ + width * (i / fov), + height - offset - lowerHeight + ]); + + tops[tops.length - 1].push([ + width * (i / fov), + height - offset + (topsToBottom ? 0 : -higherHeight) + ]); + + tops.push([ + [ + width * (i / fov), + height - offset - heights[i] + ] + ]); + } else { + tops[tops.length - 1].push([ + width * (i / fov), + height - offset - heights[i] + ]) + + if (i == heights.length - 1) { + tops[tops.length - 1].push([ + width * (i / fov), + height - offset + ]) + } + } + + let thisChange = heights[i] - heights[i - 1]; + let slope = -(thisChange) / (width / fov); + + if (Math.sign(lastChange) != Math.sign(slope) && Math.abs(slope) > slopeThreshold && i != 0) { + signChanges.push([ + [ + width * ((i + 0.5) / fov), + height - offset - heights[i] + ], + [ + width * ((i + 0.5) / fov), + height - offset + ] + ]); + } + + lastChange = slope; + } + + if (displayShading) { + let lastHeight = heightList2[0][1]; + for (let i = 1; i < fov; i++) { + let h = heightList2[i][1]; + + if (Math.abs(lastHeight - h) > maxJumpForShift) { + lastHeight = h; + } + + let slope = -(heightList2[i][1] - lastHeight) / (width / fov); + + let x = width * (i / fov); + let y = height - offset - h; + + let w = width / fov; + + let lines = vertShadedRectangleWithSlant(x, y, w, h, slope, 1.5 * shadingScale, height - offset); + + finalLines.push(...lines); + + lastHeight = h; + } + } + + + finalLines.push(...tops); + finalLines.push(...signChanges); + finalLines.push([[ + 0, + height - offset + ], [ + width, + height - offset + ]]); +} + +function drawSky() { + //sort top line heights + for (let key of Object.keys(topLinesHeight)) { + topLinesHeight[key].sort((a, b) => a - b); + } + + let dAdd = (y) => { + let n = Math.exp((-1/skyLineSpacing) * y + 3); + + return n < minSkySpacing ? minSkySpacing : n; + } + + let findFirstRecordingOfX = (x) => { + for (let key of Object.keys(topLinesHeight)) { + if (topLinesHeight[key].includes(x)) { + return key; + } + } + + return -1; + } + + for (let y = 0; y < 400; y += dAdd(y)) { + let frx = findFirstRecordingOfX(1); + + let inWall = frx != -1 && frx < y; + let x = 0; + let lastX = 0; + + for (; x <= width; x++) { + frx = findFirstRecordingOfX(x); + + if (frx != -1 && frx <= y) { + if (!inWall) { + inWall = true; + + if (lastX != x) { + finalLines.push([ + [lastX, y], + [x, y] + ]) + } + } + } else { + if (inWall) { + inWall = false; + lastX = x; + } + } + } + + if (!inWall) { + finalLines.push([ + [lastX, y], + [width, y] + ]) + } + } +} + +const font = { + "A": [ + [ + [0.9, 1], + [0.5, 0], + [0.1, 1] + ], + [ + [0.3, 0.7], + [0.7, 0.7] + ] + ], + "B": [ + [ + [0.1, 0], + [0.1, 1], + [0.7, 1], + [0.9, 0.8], + [0.7, 0.5], + [0.1, 0.5], + ], + [ + [0.7, 0.5], + [0.9, 0.2], + [0.7, 0], + [0.1, 0] + ] + ], + "C": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1], + [0.9, 1] + ] + ], + "D": [ + [ + [0.1, 0], + [0.1, 1], + [0.7, 1], + [0.9, 0.5], + [0.7, 0], + [0.1, 0] + ] + ], + "E": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1], + [0.9, 1] + ], + [ + [0.1, 0.5], + [0.7, 0.5] + ] + ], + "F": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1] + ], + [ + [0.1, 0.5], + [0.7, 0.5] + ] + ], + "G": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0.5], + [0.5, 0.5] + ] + ], + "H": [ + [ + [0.1, 0], + [0.1, 1] + ], + [ + [0.9, 0], + [0.9, 1] + ], + [ + [0.1, 0.5], + [0.9, 0.5] + ] + ], + "I": [ + [ + [0.5, 0], + [0.5, 1] + ], + [ + [0.3, 0], + [0.7, 0] + ], + [ + [0.3, 1], + [0.7, 1] + ] + ], + "J": [ + [ + [0.9, 0], + [0.9, 1], + [0.1, 1], + [0.1, 0.5] + ] + ], + "K": [ + [ + [0.1, 0], + [0.1, 1] + ], + [ + [0.1, 0.5], + [0.9, 1] + ], + [ + [0.1, 0.5], + [0.9, 0] + ] + ], + "L": [ + [ + [0.1, 0], + [0.1, 1], + [0.9, 1] + ] + ], + "M": [ + [ + [0.1, 1], + [0.1, 0], + [0.5, 0.5], + [0.9, 0], + [0.9, 1] + ] + ], + "N": [ + [ + [0.1, 1], + [0.1, 0], + [0.9, 1], + [0.9, 0] + ] + ], + "O": [ + [ + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0], + [0.1, 0] + ] + ], + "P": [ + [ + [0.1, 1], + [0.1, 0], + [0.9, 0], + [0.9, 0.5], + [0.1, 0.5] + ] + ], + "Q": [ + [ + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0], + [0.1, 0] + ], + [ + [0.5, 0.5], + [1.2, 1.2] + ] + ], + "R": [ + [ + [0.1, 1], + [0.1, 0], + [0.9, 0], + [0.9, 0.5], + [0.1, 0.5] + ], + [ + [0.1, 0.5], + [0.9, 1] + ] + ], + "S": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 0.5], + [0.9, 0.5], + [0.9, 1], + [0.1, 1] + ] + ], + "T": [ + [ + [0.5, 0], + [0.5, 1] + ], + [ + [0, 0], + [1, 0] + ] + ], + "U": [ + [ + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0] + ] + ], + "V": [ + [ + [0.1, 0], + [0.5, 1], + [0.9, 0] + ] + ], + "W": [ + [ + [0.1, 0], + [0.1, 1], + [0.5, 0.5], + [0.9, 1], + [0.9, 0] + ] + ], + "X": [ + [ + [0.1, 0], + [0.9, 1] + ], + [ + [0.1, 1], + [0.9, 0] + ] + ], + "Y": [ + [ + [0.1, 0], + [0.5, 0.5], + [0.9, 0] + ], + [ + [0.5, 0.5], + [0.5, 1] + ] + ], + "Z": [ + [ + [0.1, 0], + [0.9, 0], + [0.1, 1], + [0.9, 1] + ] + ], + "1": [ + [ + [0.5, 0], + [0.5, 1] + ], + [ + [0.5, 0], + [0.2, 0.3] + ], + [ + [0.2, 1], + [0.8, 1] + ] + ], + "2": [ + [ + [0.9, 1], + [0.1, 1], + [0.1, 0.5], + [0.9, 0.5], + [0.9, 0], + [0.1, 0] + ] + ], + "3": [ + [ + [0.1, 0], + [0.9, 0], + [0.9, 0.5], + [0.1, 0.5], + ], + [ + [0.9, 0.5], + [0.9, 1], + [0.1, 1] + ] + ], + "4": [ + [ + [0.9, 1], + [0.9, 0], + [0.1, 0.5], + [0.9, 0.5] + ] + ], + "5": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 0.5], + [0.9, 0.5], + [0.9, 1], + [0.1, 1] + ] + ], + "6": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0.5], + [0.1, 0.5] + ] + ], + "7": [ + [ + [0.1, 0], + [0.9, 0], + [0.5, 1] + ] + ], + "8": [ + [ + [0.9, 0], + [0.9, 1], + [0.1, 1], + [0.1, 0], + [0.9, 0] + ], + [ + [0.9, 0.5], + [0.1, 0.5] + ] + ], + "9": [ + [ + [0.1, 0], + [0.9, 0], + [0.9, 1], + [0.1, 1] + ], + [ + [0.1, 0], + [0.1, 0.5], + [0.9, 0.5] + ], + ], + "0": [ + [ + [0.9, 0], + [0.1, 0], + [0.1, 1], + [0.9, 1], + [0.9, 0] + ], + [ + [0.9, 0], + [0.1, 1] + ] + ], + "(": [ + [ + [0.9, 0], + [0.5, 0.5], + [0.9, 1] + ] + ], + ")": [ + [ + [0.1, 0], + [0.5, 0.5], + [0.1, 1] + ] + ], + ".": [ + [ + [0.5, 0], + [0.5, 0.1] + ] + ], + ",": [ + [ + [0.5, 1], + [0.5, 0.8], + [0.4, 0.7] + ] + ], +}; + +function drawText(text, x, y, size, spacing) { + let paths = []; + + let currentX = x; + let currentY = y; + + for (let i = 0; i < text.length; i++) { + if (text[i] == " ") { + currentX += size * 1.5; + continue; + } + + let letter = font[text[i].toUpperCase()]; + + for (let path of letter) { + let newPath = []; + + for (let point of path) { + newPath.push([ + currentX + point[0] * size, + currentY + point[1] * size + ]); + } + + paths.push(newPath); + } + + currentX += size * 1.5; + } + + return paths; +} + +function drawMap() { + const offset = 95; + + for (let wall of walls) { + finalLines.push(rect(wall.x, height - offset + wall.y, wall.w, wall.h)); + } + + finalLines.push(circle(playerPos.x, height - offset + playerPos.y, 4)); + + finalLines.push([ + [playerPos.x, height - offset + playerPos.y], + [playerPos.x + Math.cos(playerPos.rot) * 10, height - offset + playerPos.y + Math.sin(playerPos.rot) * 10] + ]) + + if (displayRaycasting) { + let p1 = [] + + for (let i = 0; i < fov; i++) { + + + let m = i - (fov / 2); + let wallHeight = raycastFromPosition(playerPos.x, playerPos.y, playerPos.rot + (m * Math.PI / 180)); + + let xn = playerPos.x + Math.cos(playerPos.rot + (m * Math.PI / 180)) * wallHeight; + let yn = height - offset + playerPos.y + Math.sin(playerPos.rot + (m * Math.PI / 180)) * wallHeight + + if (displayOuterRaycasting && (i == 0 || i == fov - 1)) { + finalLines.push([[ + playerPos.x, + height - offset + playerPos.y, + ], [ + xn, + yn + ]]); + } + + p1.push([xn, yn]); + } + + if (displayOuterRaycasting) finalLines.push(p1); + } + + finalLines.push( + ...drawText("A 3D SPACE", 120, 410, 10), + ) + finalLines.push( + ...drawText("CURRENT POSITION IS (" + playerPos.x + ", " + playerPos.y + ")", 120, 430, 8), + ) + + let degrees = playerPos.rot * 180 / Math.PI; + + finalLines.push( + ...drawText("AND ROTATION IS " + Math.round(degrees) + " DEGREES", 120, 450, 8), + ) + + finalLines.push( + ...drawText("DISTANCES FROM " + Math.round(closestDistance) + " TO " + Math.round(farthestDistance), 120, 470, 8), + ) +} + +fillFinalLines(); + +if (enableSky) { + drawSky(); +} + +if (displayMap) { + drawMap(); +} + +if (!inLocalEnviornment) { + for (let path of finalLines) { + let toRemove = [] + for (let i = 0; i < path.length; i++) { + //for some reason, direct modification doesn't work in blot... so we have to do this + + let x = path[i][0]; + let y = path[i][1]; + + if (isNaN(x) || isNaN(y)) { + toRemove.push(i); + } + + path[i] = [ + x / scale, + blotheight - (y / scale) + ]; + } + + for (let i = toRemove.length - 1; i >= 0; i--) { + path.splice(toRemove[i], 1); + } + } +} + + +// draw it +drawLines(finalLines); diff --git a/art/3D-Raycasting-Jaiden/snapshots/snapshot1.png b/art/3D-Raycasting-Jaiden/snapshots/snapshot1.png new file mode 100644 index 000000000..cdbe45b4c Binary files /dev/null and b/art/3D-Raycasting-Jaiden/snapshots/snapshot1.png differ diff --git a/art/3D-Raycasting-Jaiden/snapshots/snapshot2.png b/art/3D-Raycasting-Jaiden/snapshots/snapshot2.png new file mode 100644 index 000000000..6ffc3c1b2 Binary files /dev/null and b/art/3D-Raycasting-Jaiden/snapshots/snapshot2.png differ diff --git a/art/3D-Raycasting-Jaiden/snapshots/snapshot3.png b/art/3D-Raycasting-Jaiden/snapshots/snapshot3.png new file mode 100644 index 000000000..f7df0106f Binary files /dev/null and b/art/3D-Raycasting-Jaiden/snapshots/snapshot3.png differ diff --git a/art/3D-Raycasting-Jaiden/snapshots/snapshot4.png b/art/3D-Raycasting-Jaiden/snapshots/snapshot4.png new file mode 100644 index 000000000..bcd31b313 Binary files /dev/null and b/art/3D-Raycasting-Jaiden/snapshots/snapshot4.png differ diff --git a/art/BitMap-AdityaPV/Image_to_array_coverter.html b/art/BitMap-AdityaPV/Image_to_array_coverter.html index 1030aee7e..2ad0e58c8 100644 --- a/art/BitMap-AdityaPV/Image_to_array_coverter.html +++ b/art/BitMap-AdityaPV/Image_to_array_coverter.html @@ -18,8 +18,8 @@ const outputInfo = document.getElementById('outputInfo'); outputInfo.innerHTML = ''; - const maxWidth = 200; - const maxHeight = 200; + const maxWidth = 125; + const maxHeight = 125; const img = new Image(); img.onload = function() { diff --git a/art/FlowingCurrents-KfirElyahu/index.js b/art/FlowingCurrents-KfirElyahu/index.js new file mode 100644 index 000000000..80c933de6 --- /dev/null +++ b/art/FlowingCurrents-KfirElyahu/index.js @@ -0,0 +1,94 @@ +/* +@title: Flowing Currents +@author: Kfir Elyahu +@snapshot: 1.png +*/ + +// Set the dimensions of the drawing document +setDocDimensions(125, 125); + +const { Turtle, noise, rand, randInRange, randIntInRange, setRandSeed, nurbs } = bt; + +// Set a random seed +setRandSeed(randIntInRange(0, 1000000)); + +// Parameters +const GRID_SIZE = 30; +const CELL_SIZE = 125 / GRID_SIZE; +const NUM_LINES = 60; +const LINE_SEGMENTS = 20; +const NOISE_SCALE = 0.02; +const MARGIN = 2; +const MAX_OVERLAP = 2; + +// Generate flow field using Perlin noise with random offset +const noiseOffset = randInRange(0, 1000); +const flowField = []; +for (let y = 0; y < GRID_SIZE; y++) { + for (let x = 0; x < GRID_SIZE; x++) { + const angle = noise([x * NOISE_SCALE + noiseOffset, y * NOISE_SCALE + noiseOffset]) * Math.PI * 2; + flowField.push([Math.cos(angle), Math.sin(angle)]); + } +} + +// Function to get flow direction at a given point +function getFlowDirection(x, y) { + const gridX = Math.floor(x / CELL_SIZE); + const gridY = Math.floor(y / CELL_SIZE); + const index = gridY * GRID_SIZE + gridX; + return flowField[index] || [0, 0]; +} + +// Create a grid to track line density +const densityGrid = Array(GRID_SIZE).fill().map(() => Array(GRID_SIZE).fill(0)); + +// Function to update and check density +function updateDensity(x, y) { + const gridX = Math.floor(x / CELL_SIZE); + const gridY = Math.floor(y / CELL_SIZE); + if (gridX >= 0 && gridX < GRID_SIZE && gridY >= 0 && gridY < GRID_SIZE) { + densityGrid[gridY][gridX]++; + return densityGrid[gridY][gridX] <= MAX_OVERLAP; + } + return false; +} + +// Generate flowing lines +const allLines = []; + +for (let i = 0; i < NUM_LINES; i++) { + const turtle = new Turtle(); + turtle.jump([randInRange(MARGIN, 125 - MARGIN), randInRange(MARGIN, 125 - MARGIN)]); + turtle.down(); + + const points = [turtle.pos]; + let canContinue = true; + + for (let j = 0; j < LINE_SEGMENTS && canContinue; j++) { + const [x, y] = turtle.pos; + const [dx, dy] = getFlowDirection(x, y); + + turtle.setAngle(Math.atan2(dy, dx) * 180 / Math.PI); + turtle.forward(CELL_SIZE * 0.8); // Move 80% of a cell size to create some overlap between cells + + // Keep the turtle within bounds and check density + let [newX, newY] = turtle.pos; + newX = Math.max(MARGIN, Math.min(125 - MARGIN, newX)); + newY = Math.max(MARGIN, Math.min(125 - MARGIN, newY)); + + canContinue = updateDensity(newX, newY); + if (canContinue) { + turtle.jump([newX, newY]); + points.push(turtle.pos); + } + } + + if (points.length > 2) { + // Generate a smooth curve through the points + const smoothLine = nurbs(points, { steps: 100 }); // Reduced steps for smaller drawing + allLines.push(smoothLine); + } +} + +// Draw all lines +drawLines(allLines); diff --git a/art/FlowingCurrents-KfirElyahu/snapshots/1.png b/art/FlowingCurrents-KfirElyahu/snapshots/1.png new file mode 100644 index 000000000..f0b463cc4 Binary files /dev/null and b/art/FlowingCurrents-KfirElyahu/snapshots/1.png differ diff --git a/art/FlowingCurrents-KfirElyahu/snapshots/2.png b/art/FlowingCurrents-KfirElyahu/snapshots/2.png new file mode 100644 index 000000000..46c7c034e Binary files /dev/null and b/art/FlowingCurrents-KfirElyahu/snapshots/2.png differ diff --git a/art/FlowingCurrents-KfirElyahu/snapshots/3.png b/art/FlowingCurrents-KfirElyahu/snapshots/3.png new file mode 100644 index 000000000..a7c330313 Binary files /dev/null and b/art/FlowingCurrents-KfirElyahu/snapshots/3.png differ diff --git a/art/LineyPeaks-Jannik/index.js b/art/LineyPeaks-Jannik/index.js new file mode 100644 index 000000000..9fbd0a6b4 --- /dev/null +++ b/art/LineyPeaks-Jannik/index.js @@ -0,0 +1,194 @@ +/* +@title: LineyPeaks +@author: Jannik +@snapshot: 1.png +*/ + +// SETTINGS +const GRID_SIZE = 125; +const INFLUENCE_SCALE = 20; // How much the points influence each other | Recommended: 20 +const LINE_SCALE = 20; // Length of the lines | Recommended: 20 + +// Debugging +const DEBUGGING = false; // Legacy, was used to debug point placement +const VSCodeMode = false; // Toggle VSCode mode. I've create a small html page and imitated a few blot functions to get autocomplete and live reload + +// Randomization +const HIDDEN_FUNCTION_ANGLE = bt.randIntInRange(0, 360); +const HIDDEN_FUNCTION_OFFSET = bt.randIntInRange(0, 10); +const HIDDEN_FUNCTION_SCALE = bt.randIntInRange(50, 150) / 100; +const HIDDEN_FUNCTION_COUNT = bt.randIntInRange(1, 3); + +// Auto-calculated settings +const PADDING = GRID_SIZE / 5; +const RENDER_SIZE = GRID_SIZE + PADDING * 2; +const POINT_SPACING = RENDER_SIZE / 2; +const POINT_RESOLUTION = RENDER_SIZE / POINT_SPACING; + +// The hidden function, must return a value between 0 and 1 +function hiddenFunction(x, y) { + x = x * HIDDEN_FUNCTION_SCALE; + y = y * HIDDEN_FUNCTION_SCALE; + let sum = 0; + + function theFunction(angle, offset) { + function rotatedX(x, y) { + return x * Math.cos(angle) + y * Math.sin(angle) + } + + function rotatedY(x, y) { + return y * Math.cos(angle) - x * Math.sin(angle) + } + + return ((Math.cos(0.1 * rotatedX(x, y) - offset + Math.sin(0.1 * rotatedY(x, y)))) / 2) + 0.5 + } + + for (let i = 0; i < HIDDEN_FUNCTION_COUNT; i++) { + sum += theFunction(HIDDEN_FUNCTION_ANGLE, HIDDEN_FUNCTION_OFFSET); + } + + return sum / HIDDEN_FUNCTION_COUNT +} + +// Drawing wrapper +if (!VSCodeMode) { + const turtle = new bt.Turtle(); + turtle.down(); + + function drawLine(x1, y1, x2, y2) { + x1 = x1 - PADDING; + y1 = y1 - PADDING; + x2 = x2 - PADDING; + y2 = y2 - PADDING; + + // Ignore if completely out of bounds + if ((x1 < 0 && x2 < 0) || (y1 < 0 && y2 < 0)) return + if ((x1 > GRID_SIZE && x2 > GRID_SIZE) || (y1 > GRID_SIZE && y2 > GRID_SIZE)) return + + // Stay inside area + x2 = Math.min(GRID_SIZE - 1, Math.max(0, x2)); + y2 = Math.min(GRID_SIZE - 1, Math.max(0, y2)); + turtle.jump([x1, y1]); + turtle.goTo([x2, y2]); + } + + globalThis.drawLine = drawLine; + globalThis.turtle = turtle; +} + +// Estimate the influence (value in our case since mass = 0) at [x, y] "emitted" from [pointX, pointY] +function influence(x, y, pointX, pointY) { + const distance = Math.sqrt((x - pointX) ** 2 + (y - pointY) ** 2); + + if (distance > INFLUENCE_SCALE) { + return 0 + } + + const value = Math.abs((distance / INFLUENCE_SCALE) ** 2 - 1); + return value * value * value / (Math.PI * Math.pow(INFLUENCE_SCALE, 8) / 4) +} + +// Step 1: Place points on a grid, carrying a value from the hidden function for their location +const points = []; +const point_values = []; + + +for (let x = 2; x < RENDER_SIZE - 2; x += POINT_RESOLUTION) { + for (let y = 2; y < RENDER_SIZE - 2; y += POINT_RESOLUTION) { + const value = hiddenFunction(x, y); + + points.push([x, y]); + point_values.push(value); + + if (DEBUGGING) { + debugPoint(x, y, value); + } + } +} + + +// Step 2: Calculate a density map for every point for normalizing in step 3 +const density_map = {}; + +for (const point of points) { + const x = point[0]; + const y = point[1]; + + + if (density_map[x] === undefined) { + density_map[x] = {}; + } + + let sum = 0; + + for (const otherPoint of points) { + sum += influence(x, y, otherPoint[0], otherPoint[1]); + } + + density_map[x][y] = sum; +} + + +// Step 3: Calculate what every point "experiences" from all other points combined (really slow, but works :) ) +const restored_values = {}; + +for (const point of points) { + const x = point[0]; + const y = point[1]; + + + if (restored_values[x] === undefined) { + restored_values[x] = {}; + } + + let sum = 0; + + for (let i = 0; i < points.length; i++) { + const point = points[i]; + sum += influence(x, y, point[0], point[1]) * point_values[i] / density_map[point[0]][point[1]]; + } + + restored_values[x][y] = sum; +} + + +// Step 4: Now for every point, check where it wants to go (wants to go to lower density) +function calcDeltaAtPoint(x, y) { + const step = POINT_RESOLUTION + + // Make sure we don't go out of boundaries + let dX; + let dY; + + if (x === 2) { + dX = (restored_values[x + step][y] - restored_values[x][y]) / (step * 2); + } else if (x === RENDER_SIZE - 3) { + dX = (restored_values[x][y] - restored_values[x - step][y]) / (step * 2); + } else { + dX = (restored_values[x + step][y] - restored_values[x - step][y]) / step; + } + + if (y === 2) { + dY = (restored_values[x][y + step] - restored_values[x][y]) / (step * 2); + } else if (y === RENDER_SIZE - 3) { + dY = (restored_values[x][y] - restored_values[x][y - step]) / (step * 2); + } else { + dY = (restored_values[x][y + step] - restored_values[x][y - step]) / step; + } + + return [dX, dY] +} + +for (let i = 0; i < points.length; i++) { + const point_loc = points[i]; + + const delta_change = calcDeltaAtPoint(point_loc[0], point_loc[1]); + + drawLine(point_loc[0] - PADDING, point_loc[1] - PADDING, point_loc[0] - (delta_change[0] * LINE_SCALE) - PADDING, point_loc[1] - (delta_change[1] * LINE_SCALE) - PADDING); +} + +if (!VSCodeMode) { + drawLines(turtle.path); +} + +console.log("Done !"); \ No newline at end of file diff --git a/art/LineyPeaks-Jannik/snapshots/1.png b/art/LineyPeaks-Jannik/snapshots/1.png new file mode 100644 index 000000000..624aa39f5 Binary files /dev/null and b/art/LineyPeaks-Jannik/snapshots/1.png differ diff --git a/art/LineyPeaks-Jannik/snapshots/2.png b/art/LineyPeaks-Jannik/snapshots/2.png new file mode 100644 index 000000000..3d67f5b0d Binary files /dev/null and b/art/LineyPeaks-Jannik/snapshots/2.png differ diff --git a/art/LineyPeaks-Jannik/snapshots/3.png b/art/LineyPeaks-Jannik/snapshots/3.png new file mode 100644 index 000000000..27d667cb4 Binary files /dev/null and b/art/LineyPeaks-Jannik/snapshots/3.png differ diff --git a/art/Map-Dimitris/index.js b/art/Map-Dimitris/index.js new file mode 100644 index 000000000..39f07f988 --- /dev/null +++ b/art/Map-Dimitris/index.js @@ -0,0 +1,529 @@ +/* +@title: Map +@author: Dimitris Toulis +@snapshot: 0.png +*/ + +/* +# Blot Map + +A blot program that generates a map with a river, trees and a city with houses, trees and roads + +## Configuration + +You can set a seed by setting the `seed` constant + +### River Options + +- maxAngleTan: Tangent of maximum angle the river can make from the vertical axis +- paddingX: Padding from the sides +- maxWidth: Maximum width of the river +- minWidth: Minimum width of the river + +### Tree Options + +- N: Number of trees +- paddingX: Padding from the sides +- paddingY: Padding from the top and bottom +- riverDistance: Minimum distance from the river + +### Fish Options + +- N: Number of fish +- padding: Minimum distance between fish (as fraction of the length of the river) +- maxSize: Maximum size multiplier +- minSize: Minimum size multiplier +- angleVariation: Maximum variation from river angle + +### House Options + +- chimneyChance: Chance of having a chimney +- windowChance: Chance of having a window + +### City Options + +- criticalSize: Number of houses after which the probability of generating another one drops +- firstRiverDistance: Minimum distance from the river for the first house +- padding: Padding for the city +- riverDistance: Minimum distance from the river for all houses +- skipChance: Chance to skip drawing a house +- treeReplaceChance: Chance to draw a tree insted of skipping a house + +### Road Option + +- dashSize: Size of dashes in the center of the road +*/ + +const width = 125; +const height = 125; + +setDocDimensions(width, height); + +const seed = null +if (seed != null) bt.setRandSeed(seed) + +const options = { + river: { + maxAngleTan: 0.2, + paddingX: 10, + maxWidth: 7, + minWidth: 2 + }, + tree: { + N: 50, + bushReplaceChance: 0.2, + paddingX: 5, + paddingY: 15, + riverDistance: 5 + }, + fish: { + N: 12, + padding: 0.025, + maxSize: 1.5, + minSize: 0.75, + angleVariation: 20 + }, + house: { + chimneyChance: 0.5, + windowChance: 0.2 + }, + city: { + criticalSize: 35, + firstRiverDistance: 10, + padding: 8, + riverDistance: 6, + skipChance: 0.5, + treeReplaceChance: 0.4, + }, + road: { + dashSize: 0.25 + } +} + +// Object drawing functions + +function drawRiver() { + const river = [[], []]; + const { maxAngleTan, paddingX, maxWidth, minWidth } = options.river; + let rw = bt.randInRange(minWidth, maxWidth) + let x = bt.randInRange(paddingX + rw, width - paddingX - rw) + river[0].push([x - rw, 0]) + river[1].push([x + rw, 0]) + for (let y = 0; y < height;) { + y += bt.randInRange(10, 22) + if (y > height - 5) y = height + + rw += bt.randInRange(Math.max(-1, minWidth - rw), Math.min(1, maxWidth - rw)) + + x += bt.randInRange(Math.max(-y * maxAngleTan, paddingX + rw - x), Math.min(y * maxAngleTan, width - paddingX - rw - x)) + + river[0].push([x - rw, y]) + river[1].push([x + rw, y]) + } + return [bt.catmullRom(river[0]), bt.catmullRom(river[1])] +} + +function drawBush(pos, base) { + const turtle = new bt.Turtle() + turtle.up() + turtle.forward(base) + turtle.down() + turtle.left(45) + turtle.arc(270, base / (Math.sqrt(2))) + turtle.apply(turtle => { + const pls = turtle.path; + bt.resample(pls, .2); + bt.iteratePoints(pls, (pt, t) => { + const [x, y] = pt; + const mag = Math.sin(t * 7 * Math.PI * 2) * (bt.rand() / 8); + const norm = bt.getNormal(pls, t); + + return [ + x + norm[0] * mag, + y + norm[1] * mag + ] + }) + }) + turtle.right(135) + turtle.forward(-base) + return bt.translate([bt.catmullRom(turtle.lines()[0])], pos) +} + +const chord = 2 * 2 * Math.sin(45 / 2 * Math.PI / 180) +const arcX = chord * Math.sin(22.5 * Math.PI / 180) // Length of arc projected to X axis +const arcY = chord * Math.cos(22.5 * Math.PI / 180) // Length of arc projected to Y axis +console.log(arcX,arcY) +function drawTree(pos,width) { + const height = bt.randInRange(2, 5) + const topSize = bt.randInRange(width - 1, width + 1) + const turtle = new bt.Turtle() + .jump([arcX, height]) + .setAngle(-90) + .forward(height - arcY) + .arc(-45, 2) + .setAngle(0) + .forward(width) + .setAngle(180 - 45) + .arc(-45, 2) + .forward(height - arcY) + if (height > 4 && width < 2.25 && bt.rand() < 0.75) { + turtle + .up() + .step([0, -2]) + .setAngle(45) + .down() + .forward(1) + .up() + .forward(-0.5) + .right(bt.randInRange(20, 50)) + .down() + .forward(0.5) + } + const top = drawBush([(width - topSize) / 2, height], topSize) + const trunk = turtle.lines() + return bt.translate([...trunk, ...top], pos) +} + +function drawCenteredBush(pos,base){ + return drawBush([pos[0]+(3-base)/2,pos[1]],base) +} +function drawCenteredTree(pos,width){ + return drawTree([pos[0]+(3-width)/2,pos[1]],width) +} + +function drawCenteredTreeOrBush(pos) { + return bt.rand() <= options.tree.bushReplaceChance ? drawCenteredBush(pos, bt.randInRange(1, 3)) : drawCenteredTree(pos, bt.randInRange(1.5, 3)) +} + +function drawTreeOrBush(pos) { + return bt.rand() <= options.tree.bushReplaceChance ? drawBush(pos, bt.randInRange(1, 3)) : drawTree(pos,bt.randInRange(1.5, 3)) +} + +function drawFish(pos, angle) { + const turtle = new bt.Turtle() + .setAngle(angle - 270) + .forward(1) + .right(120) + .forward(1) + .right(120) + .forward(1) + .up() + .right(180) + .forward(1) + .down() + .arc(-60, 2) + .up() + .arc(60, -2) + .down() + .right(60) + .arc(60, 2) + .up() + .setAngle(angle) + .forward(-0.6) + .right(90) + .down() + .arc(-360, -0.1) + return bt.scale(bt.translate(turtle.lines(), pos), bt.randInRange(options.fish.minSize, options.fish.maxSize)) +} + +function drawHouse(pos) { + const turtle = new bt.Turtle().left(90) + for (let i = 0; i < 4; i++) { + turtle.forward(3) + turtle.right(90) + } + turtle + .forward(3) + .right(30) + .forward(3) + .right(120) + .forward(3) + if (bt.rand() <= options.house.chimneyChance) { + turtle + .forward(-1.5) + .setAngle(90) + .forward(1) + .right(90) + .forward(0.5) + .right(90) + .forward(1 + 0.5 * Math.sqrt(3)) + } + if (bt.rand() <= options.house.windowChance) { + turtle + .jump([1, 4]) + .setAngle(90) + .arc(360, -0.5) + .right(90) + .forward(1) + .jump([1.5, 4.5]) + .setAngle(270) + .forward(1) + } + turtle + .jump([1.25, 0]) + .setAngle(90) + .forward(1) + .right(90) + .forward(0.5) + .right(90) + .forward(1) + return bt.translate(turtle.lines(), pos) +} + +const allRoadPoints = [] +function createRoad([x, y]) { + const points = [[x, y]] + const sides = [[], []] + const offsets = [[5, 0], [-5, 0], [0, 8], [0, -8]] + while (true) { + shuffle(offsets) + for (let i = 0; i < 4; i++) { + if (points.findIndex((a) => (a[0] == x + offsets[i][0] && a[1] == y + offsets[i][1])) != -1 || + allRoadPoints.findIndex((a) => (a[0] == x + offsets[i][0] && a[1] == y + offsets[i][1])) != -1 || + !bt.pointInside([cityHull], [x + offsets[i][0], y + offsets[i][1]]) || + nearRiver([x + offsets[i][0], y + offsets[i][1]], 5)) continue + x += offsets[i][0] + y += offsets[i][1] + break + } + const last = (points.at(-1)[0] == x && points.at(-1)[1] == y) + + if (points.length == 1) { + if (points[0][0] == x) { + sides[0].push([points.at(-1)[0] + Math.sign(points.at(-1)[1] - y) * 0.5, points.at(-1)[1]]) + sides[1].push([points.at(-1)[0] - Math.sign(points.at(-1)[1] - y) * 0.5, points.at(-1)[1]]) + } + if (points[0][1] == y) { + sides[0].push([points.at(-1)[0], points.at(-1)[1] - Math.sign(points.at(-1)[0] - x) * 0.5]) + sides[1].push([points.at(-1)[0], points.at(-1)[1] + Math.sign(points.at(-1)[0] - x) * 0.5]) + } + points.push([x, y]) + continue + } + + if (y == points.at(-1)[1] && y == points.at(-2)[1]) { + sides[0].push([points.at(-1)[0], points.at(-1)[1] - Math.sign(points.at(-2)[0] - x) * 0.5]) + sides[1].push([points.at(-1)[0], points.at(-1)[1] + Math.sign(points.at(-2)[0] - x) * 0.5]) + } + else if (x == points.at(-1)[0] && x == points.at(-2)[0]) { + sides[0].push([points.at(-1)[0] + Math.sign(points.at(-2)[1] - y) * 0.5, points.at(-1)[1]]) + sides[1].push([points.at(-1)[0] - Math.sign(points.at(-2)[1] - y) * 0.5, points.at(-1)[1]]) + } else if (x == points.at(-1)[0] && points.at(-1)[1] == points.at(-2)[1]) { + sides[0].push([points.at(-1)[0] + Math.sign(points.at(-1)[1] - y) * 0.5, points.at(-1)[1] - Math.sign(points.at(-2)[0] - x) * 0.5]) + sides[1].push([points.at(-1)[0] - Math.sign(points.at(-1)[1] - y) * 0.5, points.at(-1)[1] + Math.sign(points.at(-2)[0] - x) * 0.5]) + } else if (y == points.at(-1)[1] && points.at(-1)[0] == points.at(-2)[0]) { + sides[0].push([points.at(-1)[0] + Math.sign(points.at(-2)[1] - y) * 0.5, points.at(-1)[1] - Math.sign(points.at(-1)[0] - x) * 0.5]) + sides[1].push([points.at(-1)[0] - Math.sign(points.at(-2)[1] - y) * 0.5, points.at(-1)[1] + Math.sign(points.at(-1)[0] - x) * 0.5]) + } + + if (last) break; + points.push([x, y]) + } + allRoadPoints.push(...points) + const road = [...sides, [sides[0][0], sides[1][0]], [sides[0].at(-1), sides[1].at(-1)]] + const center = [points] + bt.resample(center, options.road.dashSize) + let i = 0; + bt.iteratePoints(center, (pt, _) => (i++) % 3 == 0 ? "BREAK" : pt) + return [...road, ...center] +} + +// Helpers + +class Queue { + constructor() { + this._elements = []; + this._offset = 0; + } + enqueue(element) { + this._elements.push(element); + return this; + } + dequeue() { + if (this.isEmpty()) return null; + + const first = this.front(); + this._offset += 1; + + if (this._offset * 2 < this._elements.length) return first; + + this._elements = this._elements.slice(this._offset); + this._offset = 0; + return first; + } + front() { + return this.size() > 0 ? this._elements[this._offset] : null; + } + back() { + return this.size() > 0 ? this._elements[this._elements.length - 1] : null; + } + size() { + return this._elements.length - this._offset; + } + isEmpty() { + return this.size() === 0; + } +} + +function randWithCond(min, max, cond) { + let x = bt.randIntInRange(min, max) + let y = bt.randIntInRange(min, max) + while (!cond(x, y)) { + x = bt.randIntInRange(min, max) + y = bt.randIntInRange(min, max) + } + return [x, y] +} + +function shuffle(array) { + let currentIndex = array.length; + while (currentIndex != 0) { + const randomIndex = Math.floor(bt.rand() * currentIndex); + currentIndex--; + [array[currentIndex], array[randomIndex]] = [ + array[randomIndex], array[currentIndex]]; + } +} + +// Modified from https://github.com/indy256/convexhull-js +function convexHull(points) { + points.sort((a, b) => a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]); + + const n = points.length; + const hull = []; + + for (let i = 0; i < 2 * n; i++) { + let j = i < n ? i : 2 * n - 1 - i; + while (hull.length >= 2 && removeMiddle(hull[hull.length - 2], hull[hull.length - 1], points[j])) + hull.pop(); + hull.push(points[j]); + } + + return hull; +} +function removeMiddle(a, b, c) { + var cross = (a[0] - b[0]) * (c[1] - b[1]) - (a[1] - b[1]) * (c[0] - b[0]); + var dot = (a[0] - b[0]) * (c[0] - b[0]) + (a[1] - b[1]) * (c[1] - b[1]); + return cross < 0 || cross == 0 && dot <= 0; +} + +// Drawing code + +// River +const river = drawRiver() + +const riverCenter = river[0].map((p, i) => ([(p[0] + river[1][i][0]) / 2, (p[1] + river[1][i][1]) / 2])) +const closedRiver = [...river[0], ...river[1].reverse(), river[0][0]] + +drawLines(river) + +// Fish +let t = 0 +for (let i = 0; i < options.fish.N; i++) { + t += bt.randInRange(options.fish.padding, Math.min((1 - t) / (options.fish.N - i), 1 - t - options.fish.padding)) + drawLines(drawFish(bt.getPoint([riverCenter], t), bt.getAngle([riverCenter], t) + bt.randInRange(-options.fish.angleVariation, options.fish.angleVariation))) +} + + +// City + +function nearRiver([x, y], dist) { + for (let ox = -dist; ox <= dist; ox++) { + for (let oy = -dist; oy <= dist; oy++) { + if (bt.pointInside([closedRiver], [x + ox, y + oy])) return true + } + } + return false +} + +let size = 0 +const queue = new Queue() +const visited = [] +const setVisited = ([x, y]) => visited[x + width * y] = true +const getVisited = ([x, y]) => visited[x + width * y] + +const firstHouse = randWithCond(options.city.padding, width - options.city.padding, (x, y) => !nearRiver([x, y], options.city.firstRiverDistance)) +queue.enqueue(firstHouse) +setVisited(firstHouse) + +const cityPoints = [] +const roadStarts = [] +const cityLines = [] +const treeLines = [] + +while (!queue.isEmpty()) { + const [x, y] = queue.dequeue() + if (bt.rand() < (1 - options.city.skipChance)) { + cityLines.push(...drawHouse([x, y])) + size++ + cityPoints.push([x, y], [x + 3, y], [x, y + 6], [x + 3, y + 6]) + roadStarts.push([x - 1, y - 1]) + } else if (bt.rand() < options.city.treeReplaceChance) { + treeLines.push(...drawCenteredTreeOrBush([x, y])) + cityPoints.push([x, y], [x, y + 6]) + } + for (let ox = -5; ox <= 5; ox += 5) { + if (x + ox < options.city.padding || x + ox > width - options.city.padding) continue + for (let oy = -8; oy <= 8; oy += 8) { + if (y + oy < options.city.padding || y + oy > height - options.city.padding) continue + if (bt.rand() <= (size <= options.city.criticalSize ? 1 : 1 / (size - options.city.criticalSize)) && !getVisited([x + ox, y + oy]) && !nearRiver([x + ox, y + oy], options.city.riverDistance)) { + queue.enqueue([x + ox, y + oy]) + setVisited([x + ox, y + oy]) + } + } + } +} + +const cityHull = convexHull(cityPoints) + +// Road +cityLines.push(...createRoad([firstHouse[0] - 1, firstHouse[1] - 1])) +let roadStart = roadStarts[bt.randIntInRange(1, roadStarts.length - 1)] +while (allRoadPoints.findIndex((a) => (a[0] == roadStart[0] && a[1] == roadStart[1])) != -1) { + roadStart = roadStarts[bt.randIntInRange(1, roadStarts.length - 1)] +} +cityLines.push(...createRoad(roadStart)) + +bt.cover(cityLines,treeLines) +drawLines([...cityLines,...treeLines]) + +// Trees + +function nearCity([x, y]) { + for (let ox = -6; ox <= 6; ox++) { + for (let oy = -6; oy <= 6; oy++) { + if (bt.pointInside([cityHull], [x + ox, y + oy])) return true + } + } + return false +} + +const trees = [] +function nearTree([x, y],dx,dy) { + return trees.some(([tx, ty]) => { + if (Math.abs(y - ty) <= dy && Math.abs(x - tx) <= dx) return true + return false + }) +} + +for (let i = 0; i < options.tree.N; i++) { + let x = bt.randInRange(options.tree.paddingX, width - options.tree.paddingX) + let y = bt.randInRange(options.tree.paddingY, height - options.tree.paddingY) + while ( + nearCity([x, y]) || nearRiver([x, y], options.tree.riverDistance) || nearTree([x,y],2,6) + ) { + x = bt.randInRange(options.tree.paddingX, width - options.tree.paddingX) + y = bt.randInRange(options.tree.paddingY, height - options.tree.paddingY) + } + const tree = drawTreeOrBush([x, y]) + if(nearTree([x,y],6,9)){ + if(tree.length == 1) bt.cover(treeLines,tree) + else { + bt.cover(treeLines,[tree[1]]) + bt.cover(tree,treeLines) + } + } + trees.push([x, y]) + treeLines.push(...tree) +} +drawLines(treeLines) \ No newline at end of file diff --git a/art/Map-Dimitris/snapshots/0.png b/art/Map-Dimitris/snapshots/0.png new file mode 100644 index 000000000..7360749c2 Binary files /dev/null and b/art/Map-Dimitris/snapshots/0.png differ diff --git a/art/Map-Dimitris/snapshots/1.png b/art/Map-Dimitris/snapshots/1.png new file mode 100644 index 000000000..9976063d6 Binary files /dev/null and b/art/Map-Dimitris/snapshots/1.png differ diff --git a/art/Map-Dimitris/snapshots/2.png b/art/Map-Dimitris/snapshots/2.png new file mode 100644 index 000000000..acfe37347 Binary files /dev/null and b/art/Map-Dimitris/snapshots/2.png differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/index.js b/art/Metal_Gear_Solid_Codec-Avyan/index.js new file mode 100644 index 000000000..f0390e9ca --- /dev/null +++ b/art/Metal_Gear_Solid_Codec-Avyan/index.js @@ -0,0 +1,3318 @@ +/* +@title: DefinitelyInconspicous +@author: Avyan Mehra +@snapshot: HeroesFixed.jpg +*/ +setDocDimensions(125, 125); + +// Outlines + +const outline = new bt.Turtle() + .jump([25,25]) + .down() + .setAngle(90) + .forward(50) + .right(90) + .forward(100) + .right(90) + .forward(50) + .right(90) + .forward(101) + +const pttOut = new bt.Turtle() +.jump([100,25]) +.down() +.setAngle(90) +.forward(10) +.left(90) +.forward(50) +.left(90) +.forward(10) + +const freqChange = new bt.Turtle() +.jump([35, 46]) +.down() +.setAngle(120) +.forward(10) +.right(120) +.forward(10) +.right(120) +.forward(10) + +const freqFrame = new bt.Turtle() +.jump([106,36]) +.setAngle(90) +.down() +.forward(28) +.left(90) +.forward(62) +.left(90) +.forward(28) +.left(90) +.forward(62) + +// Digits + +const dig0 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) + + +const dig1 = new bt.Turtle() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.right(45) +.forward(0.7071) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(0) +.forward(2.5 + 0.7071 + 0.7071) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(90) +.forward(0.7071*0.75) +.left(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) + + +const dig2 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(90) +.forward(2.5 + 0.7071 + 0.7071 + 0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(90) +.forward(0.7071*0.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig3 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5 ) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(90) +.forward(0.7071*0.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig4 = new bt.Turtle() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.right(45) +.forward(0.7071) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(0) +.forward(2.5 + 0.7071 + 0.7071) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig5 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.right(135) +.forward(0.7071 + 2.5 + 0.7071 + 0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig6 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.right(135) +.forward(0.7071 + 2.5 + 0.7071 + 0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig7 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(0) +.forward(2.5 + 0.7071 + 0.7071) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(90) +.forward(0.7071*0.75) +.left(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) + + +const dig8 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const dig9 = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7072*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(180) +.forward(2.5 + 0.7071*1.55) +.right(45) +//fill end +.up() +.right(45) +.forward(0.7071*0.5) // The 1 time you use trigo (1(cosine(45)) = x) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071*1.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.left(90) +.forward(0.7071) +.right(90) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +// fill end +.up() +.setAngle(0) +.forward(2.5) +.right(90) +.forward(0.7071) +.down() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.up() +.setAngle(270) +.forward(2.5 + 0.7071*3.5) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.right(90) +//fill end +.up() +.setAngle(90) +.forward(2.5 + 0.7071*2.75) +.left(90) +.down() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + + +const Seg = new bt.Turtle() +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) + + +const filledSeg = new bt.Turtle() +//fill start +.left(45) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(90) +.forward(1) +.right(45) +.forward(2.5) +.right(45) +.forward(1) +.right(135) +.forward(2.5 + 2*0.7071) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.left(90) +.forward(0.7071*(1/3)) +.down() +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward((0.7071*2)-(0.7071*(2/3))) +.down() +.left(90) +.forward(2.5 + 2*(0.7071*(1/3))) +.up() +.left(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(0.7071*(1/3)) +.left(180) +.down() +.forward(2.5 + 2*(0.7071*(2/3))) +.up() +.right(90) +.forward(0.7071*(1/3)) +.right(90) +.forward(2.5 - (0.7071*(1/3))) +.right(90) +//fill end + +const dec = new bt.Turtle() +.down() +.setAngle(90) +.forward(2) +.right(90) +.forward(2) +.right(90) +.forward(2) +.right(90) +.forward(2) +.right(135) +.forward(2.8284271247) // sqrt 8 (Pythagoras Theorem) + + +//Text +drawLines(bt.rotate(bt.offset(bt.text("PTT", [53,115], 1.5, [5, 4.5]),0.5),0)) +drawLines(bt.rotate(bt.offset(bt.text("PTT", [53,115], 1.5, [5, 4.5]),0.8),0)) +drawLines(bt.rotate(bt.offset(bt.text("PTT", [53,115], 1.5, [5, 4.5]),1),0)) + +drawLines(bt.rotate(bt.offset(bt.text("MEMORY", [42,75], 1.5, [5, 4.5]),0.5),0)) +drawLines(bt.rotate(bt.offset(bt.text("MEMORY", [42,75], 1.5, [5, 4.5]),0.8),0)) +drawLines(bt.rotate(bt.offset(bt.text("MEMORY", [42,75], 1.5, [5, 4.5]),1),0)) +drawLines(bt.rotate(bt.translate(pttOut.lines(), [-13,88]),180)) +//drawLines(bt.translate(bt.offset(bt.rotate(bt.text("180.15", [69,67], 1.5, [5, 4.5]), 180),0.5), [-23,-12])) + +// Outlines + +drawLines(bt.translate(outline.lines(), [-13,48])); +drawLines(bt.translate(pttOut.lines(), [-13,48])); +drawLines(bt.translate(bt.rotate(freqChange.lines(), -90), [-14,46])) +drawLines(bt.translate(bt.rotate(freqChange.lines(), 90), [68,46])) +drawLines(bt.translate(freqFrame.lines(), [-13,48])) +// drawLines(bt.translate(dig0.lines(), [10,10])) +// drawLines(bt.translate(dig1.lines(), [20,10])) +// drawLines(bt.translate(dig2.lines(), [30,10])) +// drawLines(bt.translate(dig3.lines(), [40,10])) +// drawLines(bt.translate(dig4.lines(), [50,10])) +// drawLines(bt.translate(dig5.lines(), [60,10])) +// drawLines(bt.translate(dig6.lines(), [70,10])) +// drawLines(bt.translate(dig7.lines(), [80,10])) +// drawLines(bt.translate(dig8.lines(), [90,10])) +// drawLines(bt.translate(dig9.lines(), [100,10])) + +// Frequency Setter +drawLines(bt.rotate(bt.translate(dig1.lines(), [52,88]), 180)); +bar(2, 74, 86) + +var freqCount = 0; +var freq = 0.0; + + +while (freqCount != 4) { + if (freqCount == 3) { + freq += bt.randIntInRange(0, 9) / 100; + } else if (freqCount == 2) { + freq += bt.randIntInRange(0, 9) / 10; + } else if (freqCount == 1) { + freq += bt.randIntInRange(0, 9); + } else if (freqCount == 0) { + freq += bt.randIntInRange(1, 9) * 10; + } + freqCount += 1; +} + + +var digits = freq.toString().split(''); +var numbers = digits.map(Number); + +var xCord = 59; +var loop = 0; + +for (var i = 0; i < 5; i++) { + var no = numbers[i]; + + if (loop != 0) { + xCord = 59 + (7 * loop); + } + + if (no == 0 || no == null) { + drawLines(bt.rotate(bt.translate(dig0.lines(), [xCord, 88]), 180)); + } else if (no == 1) { + drawLines(bt.rotate(bt.translate(dig1.lines(), [xCord, 88]), 180)); + } else if (no == 2) { + drawLines(bt.rotate(bt.translate(dig2.lines(), [xCord, 88]), 180)); + } else if (no == 3) { + drawLines(bt.rotate(bt.translate(dig3.lines(), [xCord, 88]), 180)); + } else if (no == 4) { + drawLines(bt.rotate(bt.translate(dig4.lines(), [xCord, 88]), 180)); + } else if (no == 5) { + drawLines(bt.rotate(bt.translate(dig5.lines(), [xCord, 88]), 180)); + } else if (no == 6) { + drawLines(bt.rotate(bt.translate(dig6.lines(), [xCord, 88]), 180)); + } else if (no == 7) { + drawLines(bt.rotate(bt.translate(dig7.lines(), [xCord, 88]), 180)); + } else if (no == 8) { + drawLines(bt.rotate(bt.translate(dig8.lines(), [xCord, 88]), 180)); + } else if (no == 9) { + drawLines(bt.rotate(bt.translate(dig9.lines(), [xCord, 88]), 180)); + } + + loop += 1; +} + +// Bars + +function bar(length, xCor, yCor) { +const bar1 = new bt.Turtle() +.setAngle(90) +.forward(2) +.right(90) +.forward(length) +.right(90) +.forward(2) +.right(90) +.forward(length) +.up() +.right(90) +.forward(0.2) +.right(90) +.down() +.forward(length) +.up() +.left(90) +.forward(0.2) +.left(90) +.down() +.forward(length) +.up() +.right(90) +.forward(0.2) +.right(90) +.down() +.forward(length) + .up() +.left(90) +.forward(0.2) +.left(90) +.down() +.forward(length) +.up() +.right(90) +.forward(0.2) +.right(90) +.down() +.forward(length).up() +.left(90) +.forward(0.2) +.left(90) +.down() +.forward(length) +.up() +.right(90) +.forward(0.2) +.right(90) +.down() +.forward(length).up() +.left(90) +.forward(0.2) +.left(90) +.down() +.forward(length) +.up() +.right(90) +.forward(0.2) +.right(90) +.down() +.forward(length) + + +drawLines(bt.translate(bt.rotate(bar1.lines(), 180), [xCor, yCor])) + +} + +function barWO(length, xCor, yCor, th) { + const bar2 = new bt.Turtle() + .setAngle(90) + .forward(th) + .right(90) + .forward(length) + .right(90) + .forward(th) + .right(90) + .forward(length) + drawLines(bt.translate(bar2.lines(), [xCor, yCor])) +} + +const barWLines = bt.randIntInRange(4,13) + +for (var i = 0; i < 12; i++) { + if (i+1 <= barWLines) { + bar(10 + (Math.pow(1.4, i)) , (31), (88 + (2 * i))) + } else if (i+1 > barWLines) { + barWO(10 + (Math.pow(1.4, i)) , (31), (88 + (2 * i)), 2) + } +} + +// Dialogue + +const textList = ["What's the situation Snake?", "Where - I - Can - See - Ya", "A Hind D? Colonel What's a\nRussian Gunship doing here", "Snake? Snake? Snake!", "You Idiot!", "Nice to meet you, Snake", "It's easy to forget what\na sin is in the middle of\na battlefield.", "I’m just a man who’s\ngood at what he does:\nKilling.", "There are no heroes in war.\nThe only heroes I know are\neither dead or in prison.\nOne or the other.", "SNAAAAAAAAAAKE!!!"] +var chosen = textList[bt.randIntInRange(0,9)] +drawLines(bt.offset(bt.text(chosen, [7,46], 1.2, [3.6,9]), 0.5)) + +// Select +drawLines(bt.offset(bt.rotate(bt.text("PRESS SELECT TO EXIT", [10,60], 1.5, [3.6,9]), 0), 0.3)) +drawLines(bt.offset(bt.rotate(bt.text("PRESS SELECT TO EXIT", [10,60], 1.5, [3.6,9]), 0), 0.5)) +drawLines(bt.offset(bt.rotate(bt.text("PRESS SELECT TO EXIT", [10,60], 1.5, [3.6,9]), 0), 0.8)) + diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Forget.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Forget.jpg new file mode 100644 index 000000000..bc1c85068 Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Forget.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/ForgetFixed.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/ForgetFixed.jpg new file mode 100644 index 000000000..4fa05ba03 Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/ForgetFixed.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Heroes.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Heroes.jpg new file mode 100644 index 000000000..1fe888e2c Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Heroes.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/HeroesFixed.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/HeroesFixed.jpg new file mode 100644 index 000000000..a0df82ec1 Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/HeroesFixed.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake.jpg new file mode 100644 index 000000000..21aab29ca Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake?.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake?.jpg new file mode 100644 index 000000000..3ce362e1a Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Snake?.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/SnakeFixed.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/SnakeFixed.jpg new file mode 100644 index 000000000..e9c0607ec Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/SnakeFixed.jpg differ diff --git a/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Where.jpg b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Where.jpg new file mode 100644 index 000000000..76e0d2244 Binary files /dev/null and b/art/Metal_Gear_Solid_Codec-Avyan/snapshots/Where.jpg differ diff --git a/art/PasswordGen/Snapshots/Screenshot 2024-09-16 202743.png b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 202743.png new file mode 100644 index 000000000..f9028d6dd Binary files /dev/null and b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 202743.png differ diff --git a/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203100.png b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203100.png new file mode 100644 index 000000000..d148ad8e1 Binary files /dev/null and b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203100.png differ diff --git a/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203122.png b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203122.png new file mode 100644 index 000000000..9acfe75ae Binary files /dev/null and b/art/PasswordGen/Snapshots/Screenshot 2024-09-16 203122.png differ diff --git a/art/PasswordGen/index.js b/art/PasswordGen/index.js new file mode 100644 index 000000000..b9aab617b --- /dev/null +++ b/art/PasswordGen/index.js @@ -0,0 +1,576 @@ +/* +@title: Password/BackupCode gen (do not use) +@author: Carter Tollman +@snapshot: 0.png + +Made using BlotFont Library: + @title: Blot Font + @author: geschmit + @Source: https://github.com/geschmit/blotfont + + ChatGPT, Gemini, Claude, and Llama3.1 helped troubleshoot the SHA-256 algorithm (it was mostly me being dumb) + + The code generates a secure, random password of a specified length using cryptographic techniques. + It combines multiple sources of entropy, such as the current time and system information, to create + a string of random data. This entropy is hashed using the SHA-256 algorithm to produce a + cryptographically secure hash. The code then selects characters from a predefined character set + based on the hash to construct the password. This process ensures that the generated password is + both unpredictable and meets the required length. + + PLEASE DO NOT USE THE PASSWORDS, IF YOU GET HACKED I DO NOT WANT TO BE AT FAULT (SORRY <3) + + ** WARNING - DO NOT USE PASSWORDS GENERATED! ** + THIS IS NOT SECURE BECAUSE THE RANDOMNESS IS LIMITED + BY THE HASHING PROCESS AND INSUFFICIENT ENTROPY SOURCES. + USE A REAL PASSWORD GENERATOR IF YOU WANT SECURE PASSWORDS. + ** WARNING - DO NOT USE PASSWORDS GENERATED! ** +*/ + + + +//edit to change the number of passwords and their length +const numPassword = 15 //number of passwords to generate +const length = 37; //password length + +//Change to limit what chars can be used (do not add any that are not listed, they do not have code to work) +const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%()_+[]|;:,.<>?'; + +/** + * Generates a secure password of a given length. + * @param {number} length - The desired length of the password. + * @returns {string} - A secure password of the specified length. + */ +function passwordGen(length) { + // Define the character set to use for the password + + /** + * Gathers entropy from various sources to help generate a random value. + * @returns {string} - A string combining multiple entropy sources. + */ + function gatherEntropy() { + // Get various sources of entropy + const now = Date.now(); // Current timestamp + const random = bt.rand(); // Basic random value + const performanceNow = performance.now(); // High-resolution time + const navigatorInfo = navigator.userAgent; // User agent string + const language = navigator.language; // Browser language + const cookieEnabled = navigator.cookieEnabled; // Cookie enabled status + const onlineStatus = navigator.onLine; // Online status + const deviceMemory = navigator.deviceMemory || ''; // Device memory (if available) + const hardwareConcurrency = navigator.hardwareConcurrency || ''; // Number of CPU threads (if available) + const timezoneOffset = new Date().getTimezoneOffset(); // Timezone offset in minutes + const platform = navigator.platform; // Platform + const randomBytes = Array.from({ length: 16 }, () => bt.rand()).join('-'); // Additional random bytes + + // Combine all sources of entropy into a single string + const entropySources = [ + now, random, performanceNow, navigatorInfo, language, cookieEnabled, + onlineStatus, deviceMemory, hardwareConcurrency, timezoneOffset, platform, + randomBytes + ]; + return entropySources.join('-'); // Join sources with a hyphen + } + + /** + * Generates a cryptographically secure random integer between min and max (inclusive). + * @param {number} min - The minimum value. + * @param {number} max - The maximum value. + * @returns {number} - A secure random integer between min and max. + */ + function getSecureRandomInt(min, max) { + const range = max - min + 1; // Calculate the range of values + const byteRange = Math.ceil(Math.log2(range) / 8); // Determine the number of bytes needed + const randomBytes = new Uint8Array(byteRange); // Create an array for random bytes + crypto.getRandomValues(randomBytes); // Fill the array with cryptographically secure random values + let randomValue = 0; + for (let i = 0; i < byteRange; i++) { + randomValue = (randomValue << 8) | randomBytes[i]; // Build the random integer from the bytes + } + return min + (randomValue % range); // Scale and return the random integer within the specified range + } + + /** + * Creates a SHA-256 hash from a given string. + * @param {string} str - The input string to hash. + * @returns {string} - The SHA-256 hash of the input string. + */ + function sha256Hash(str) { + return sha256(str); // Use the SHA-256 function defined below + } + + // Generate the password + let password = ''; + while (password.length < length) { + // Gather entropy and hash it + const entropy = gatherEntropy(); + let hashed = sha256Hash(entropy); + const charsetLength = charset.length; + while (hashed.length > 0 && password.length < length) { + // Choose a character from the charset based on the hash + const index = getSecureRandomInt(0, charsetLength - 1); + password += charset[index]; // Add character to the password + hashed = hashed.slice(1); // Remove one character from the hash + } + } + + return password.slice(0, length); // Ensure the password is exactly the requested length +} + +/** + * Computes the SHA-256 hash of a given message. + * @param {string} message - The input message to hash. + * @returns {string} - The SHA-256 hash of the input message. + */ +function sha256(message) { + // SHA-256 constants + const K = [ + 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, + 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, + 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, + 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, + 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, + 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, + 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, + 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 + ]; + + /** + * Preprocesses the input message for SHA-256 hashing. + * @param {string} message - The input message to preprocess. + * @returns {Uint8Array} - The preprocessed message as an array of bytes. + */ + function preprocess(message) { + const bytes = new TextEncoder().encode(message); // Convert message to byte array + const bitLength = bytes.length * 8; // Calculate the bit length of the message + const paddingLength = (448 - (bitLength + 1) % 512 + 512) % 512; // Calculate the padding length + const paddedLength = bitLength + 1 + paddingLength + 64; // Calculate total length after padding and length encoding + const blocks = new Uint8Array((paddedLength + 7) >> 3); // Create an array to hold the padded message + blocks.set(bytes); // Set the original message bytes + blocks[bytes.length] = 0x80; // Append the '1' bit (0x80) + const view = new DataView(blocks.buffer); + view.setUint32(blocks.length - 8, Math.floor(bitLength / 0x100000000), false); // Append the high 32 bits of the length + view.setUint32(blocks.length - 4, bitLength, false); // Append the low 32 bits of the length + return blocks; // Return the preprocessed message + } + + /** + * Computes the SHA-256 hash of the preprocessed message blocks. + * @param {Uint8Array} blocks - The preprocessed message blocks. + * @returns {Uint8Array} - The hash value as an array of bytes. + */ + function hashBlocks(blocks) { + // Initialize hash values + const H = [ + 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 + ]; + const W = new Uint32Array(64); // Array to hold message schedule + + for (let i = 0; i < blocks.length; i += 64) { + // Process each 512-bit chunk + const chunk = blocks.slice(i, i + 64); // Extract chunk + const view = new DataView(chunk.buffer); + // Load the first 16 words from the chunk + for (let j = 0; j < 16; j++) { + if (j * 4 + 4 <= chunk.length) { + W[j] = view.getUint32(j * 4); // Get 32-bit words + } + } + // Extend the message schedule + for (let j = 16; j < 64; j++) { + const s0 = ((W[j - 15] >>> 7) | (W[j - 15] << 25)) ^ ((W[j - 15] >>> 18) | (W[j - 15] << 14)) ^ (W[j - 15] >>> 3); + const s1 = ((W[j - 2] >>> 17) | (W[j - 2] << 15)) ^ ((W[j - 2] >>> 19) | (W[j - 2] << 13)) ^ (W[j - 2] >>> 10); + W[j] = (W[j - 16] + s0 + W[j - 7] + s1) >>> 0; // Calculate word values + } + + // Initialize working variables + let [a, b, c, d, e, f, g, h] = H; + for (let j = 0; j < 64; j++) { + // Compute SHA-256 operations + const S1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7)); + const ch = (e & f) ^ (~e & g); + const temp1 = (h + S1 + ch + K[j] + W[j]) >>> 0; + const S0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10)); + const maj = (a & b) ^ (a & c) ^ (b & c); + const temp2 = (S0 + maj) >>> 0; + + // Update hash values + h = g; + g = f; + f = e; + e = (d + temp1) >>> 0; + d = c; + c = b; + b = a; + a = (temp1 + temp2) >>> 0; + } + + // Add the compressed chunk's hash to the current hash values + H[0] = (H[0] + a) >>> 0; + H[1] = (H[1] + b) >>> 0; + H[2] = (H[2] + c) >>> 0; + H[3] = (H[3] + d) >>> 0; + H[4] = (H[4] + e) >>> 0; + H[5] = (H[5] + f) >>> 0; + H[6] = (H[6] + g) >>> 0; + H[7] = (H[7] + h) >>> 0; + } + + // Convert hash values to byte array + return new Uint8Array(H.flatMap(h => [ + (h >>> 24) & 0xff, (h >>> 16) & 0xff, (h >>> 8) & 0xff, h & 0xff + ])); + } + + // Convert hash to hexadecimal string + return Array.from(hashBlocks(preprocess(message))) + .map(b => b.toString(16).padStart(2, '0')) + .join(''); +} + + +var ParseCoords = (cstr, multScale = 1) => { + const coordArray = []; + for (const x of cstr.split(":")) { + if (parseFloat(x)) { + coordArray.push(parseFloat(x)); + } + } + return coordArray; +}; +var RunInstructions = (inst, org, scale = 1) => { + const turtle = new bt.Turtle(); + turtle.jump(org) + for (const x of inst.split(",")) { + const cmd = x.split("$")[0]; + const args = x.split("$")[1]; + let data; + switch (cmd) { + case "u": + turtle.up(); + break; + case "d": + turtle.down(); + break; + case "f": + turtle.forward(parseFloat(args) * scale); + break; + case "arc": + data = ParseCoords(args); + turtle.arc(-data[0], data[1] * scale); + break; + case "jmp": + data = ParseCoords(args); + turtle.jump(data); + break; + case "sa": + turtle.setAngle(parseFloat(args)); + break; + case "l": + turtle.left(parseFloat(args)); + break; + case "r": + turtle.right(parseFloat(args)); + break; + default: + break; + } + } + drawLines(turtle.lines()); + return turtle.position; +}; + +// letters.ts +var letters = { + // some of these instructions could definitely be minified. I will most + // likely submit a second pr to fix some of these later + // todo unterrible letter instructions + a: `sa$90,f$2,r$90,f$2,r$90,f$2,u,sa$90,f$2,d,l$30,f$2,l$120,f$2`, + b: `sa$90,f$4,r$90,f$1,arc$180:1,f$1,r$180,f$1,arc$180:1,f$1`, + c: `sa$90,u,r$90,f$2,r$180,d,arc$180:2`, + d: `sa$90,f$4,r$90,arc$180:2`, + e: `sa$90,f$4,r$90,f$2,u,f$-2,r$90,f$2,l$90,d,f$2,u,f$-2,r$90,f$2,l$90,d,f$2`, + f: `sa$90,f$4,r$90,f$2,u,f$-2,r$90,f$2,l$90,d,f$2`, + g: `u,f$1,sa$90,f$2,r$90,d,arc$270:1,f$2,arc$90:1`, + h: `sa$90,f$4,u,f$-2,r$90,d,f$2,u,l$90,f$-2,d,f$4`, + i: `f$2,u,f$-1,l$90,d,f$4,r$90,u,f$-1,d,f$2`, + j: `sa$90,u,f$4,r$90,d,f$2,u,f$-1,r$90,d,f$3,arc$90:1`, + k: `sa$90,f$4,u,f$-2,r$45,d,f$2.75,u,f$-2.75,r$90,d,f$2.75`, + l: `sa$90,u,f$4,r$180,d,f$4,l$90,f$2`, + m: `sa$90,f$4,sa$0,r$71.57,f$3.162,sa$0,l$71.57,f$3.162,sa$0,r$90,f$4`, + n: `sa$90,f$4,r$153.43,f$4.47,l$153.43,f$4`, + o: `sa$90,u,f$1,d,f$2,arc$180:1,f$2,arc$180:1`, + p: `sa$90,f$4,r$90,f$1,arc$180:1,f$1`, + q: `sa$90,u,f$1,d,f$2,arc$180:1,f$2,arc$180:1,u,r$90,f$1,r$45,d,f$1.414`, + r: `sa$90,f$4,r$90,f$1,arc$180:1,f$1,sa$-45,f$2.8284`, + s: `f$1,arc$-180:1,arc$180:1,f$1`, + t: `u,f$1,sa$90,d,f$4,u,r$90,f$-1,d,f$2`, + u: `sa$90,u,f$4,sa$-90,d,f$3,arc$-180:1,f$3`, + v: `sa$90,u,f$4,r$165.96,d,f$4.12,l$151.93,f$4.12`, + w: `sa$90,u,f$4,sa$0,r$82.87,d,f$4.03,sa$0,l$63.43,f$1.12,sa$0,r$63.43,f$1.12,sa$0,l$82.87,f$4.03`, + x: `sa$90,u,f$4,r$153.44,d,f$4.47,u,l$153.44,f$4,l$153.44,d,f$4.47`, + y: `u,f$1,sa$90,d,f$2.5,r$33.69,f$1.8,u,f$-1.8,l$67.38,d,f$1.8`, + z: `u,f$2,d,f$-2,l$63.44,f$4.47,r$63.44,f$-2`, + ["0"]: `sa$90,u,f$1,d,f$2,arc$180:1,f$2,arc$180:1,u,f$2,arc$45:1,sa$-66.80,d,f$3.675`, + ["1"]: (origin, scale) => DrawBezier( + origin, + -106, + scale, + bezierEasing(0.026, [0.984, -1], [1, 1], 0.9561), + [2, -0.47], + `f$2,u,f$-1,sa$90,d,f$4,l$90` + ), + ["2"]: `u,f$2,r$180,d,f$2,sa$90,arc$90:1,arc$-90:1,f$1,arc$-180:1`, + ["3"]: `sa$90,u,f$4,r$90,d,f$1,arc$180:1,f$1,r$180,f$1,arc$180:1,f$1`, + ["4"]: `u,f$2,sa$90,f$1,l$90,d,f$2,r$116.57,f$3.35,sa$-90,f$4`, + ["5"]: `u,sa$90,f$1,r$180,d,arc$-180:1,f$1,arc$-90:1,arc$90:1,sa$0,f$2`, + ["6"]: (origin, scale) => DrawBezier( + origin, + 74, + scale, + bezierEasing(-0.018, [0.054, -0.373], [1, -0.758], 0.9181), + [3.2, -0.36], + `u,sa$90,f$1,d,arc$360:1` + ), + ["7"]: (origin, scale) => DrawBezier( + origin, + 245, + scale, + bezierEasing(-5e-3, [0, -0.149], [0, 1], 0.206), + [4.5, -0.59], + `u,sa$90,f$4,r$90,d,f$2` + ), + ["8"]: `u,f$1,d,arc$-180:1,arc$360:1,arc$-180:1`, + ["9"]: (origin, scale) => DrawBezier( + origin, + -107, + scale, + bezierEasing(-0.018, [0.054, -0.373], [1, -0.758], 0.9181), + [3.2, -0.36], + `u,sa$90,f$4,r$90,f$1,d,arc$360:1,u,arc$90:1,d` + ), + ["."]: `sa$90,u,f$.75,r$90,f$1,d,arc$360:.25`, + [","]: `sa$90,u,f$.5,r$90,f$1,r$90,d,arc$90:.25`, + ["?"]: `sa$90,u,f$.75,r$90,f$1,d,arc$360:.25,l$90,u,f$.25,d,f$1,r$90,arc$-270:1`, + ["!"]: `sa$90,u,f$.75,r$90,f$1,d,arc$360:.25,l$90,u,f$.25,d,f$3`, + ["+"]: `sa$90,u,f$2,r$90,d,f$2,u,f$-1,l$90,f$-1,d,f$2`, + ["-"]: `sa$90,u,f$2,r$90,d,f$2`, + ["*"]: `sa$90,u,f$2,r$90,f$1,l$90,f$-1,d,f$2,u,f$-1,r$60,f$-1,d,f$2,u,f$-1,r$60,f$-1,d,f$2`, + ["/"]: `l$63.43,f$4.47`, + ["="]: `sa$90,u,f$1.5,r$90,d,f$2,u,l$90,f$1,l$90,d,f$2`, + ["$"]: `f$1,arc$-180:1,arc$180:1,f$1,u,f$-1,r$90,d,f$4`, + [":"]: `sa$90,u,f$.75,r$90,f$1,d,arc$360:.25,l$90,u,f$2.5,d,r$90,arc$360:.25`, + [";"]: `sa$90,u,f$.25,r$90,f$1,r$90,d,arc$90:.25,u,arc$270:.25,r$180,f$3,d,r$90,arc$-360:.25`, + ["("]: `u,f$1.25,r$180,d,arc$90:.5,f$3,arc$90:.5`, + [")"]: `u,f$.75,d,arc$-90:.5,f$3,arc$-90:.5`, + ["["]: `u,f$1.5,r$180,d,f$1,r$90,f$4,r$90,f$1`, + ["]"]: `u,f$.5,d,f$1,l$90,f$4,l$90,f$1`, + ["#"]: `sa$90,u,f$1.5,r$90,d,f$2,u,l$90,f$1,l$90,d,f$2,u,r$90,f$.5,r$90,f$.5,r$90,d,f$2,u,l$90,f$1,l$90,d,f$2`, + ["%"]: `sa$90,u,f$2,r$45,d,f$2.83,u,l$45,f$-1.5,d,arc$-360:.5,u,f$1.5,l$90,f$1.5,d,arc$-360:.5`, + ["_"]: `f$2`, + ["|"]: `u,f$1,sa$90,d,f$4`, + ["\\"]: `u,f$4,r$153.43,d,f$4.47`, + ['"']: `u,f$.5,sa$90,f$3,d,f$1,u,r$90,f$1,r$90,f$1`, + ["'"]: `u,f$1,sa$90,f$3,d,f$1`, + [">"]: `sa$90,u,f$1,r$63.43,d,f$2.24,l$127,f$2.24`, + // redo + ["<"]: `u,f$2,sa$90,f$1,l$63.43,d,f$2.24,r$127,f$2.24`, + // specials + [" "]: ``, + ["\r"]: ``, + ["\n"]: `` +}; +var allLetters = Object.keys(letters).join(""); + +// funcs.ts +var DrawBezier = (org, ang, scale, bezfunc, curveSizes, instructions) => { + const turtle = new bt.Turtle(); + turtle.jump(org); + if (instructions) { + turtle.jump(RunInstructions(instructions, org, scale)); + } + turtle.setAngle(ang); + turtle.forward(curveSizes[0] * scale); + bt.resample(turtle.path, 0.1); + warp(turtle, (x) => bezfunc(x) * curveSizes[1] * scale); + drawLines(turtle.lines()); + return; +}; + +var DrawText = (text, org, scale = 10, spacing = [2.5, 4.5]) => { + let xInd = 0; + let yInd = 0; + for (const x of text.toLowerCase()) { + if (allLetters.indexOf(x, 0) == -1) { + RunInstructions( + letters["?"], + [ + org[0] + xInd * spacing[0] * scale, + org[1] - yInd * spacing[1] * scale + ], + scale + ); + } else { + switch (x) { + case "\r": + xInd = 0; + continue; + case "\n": + xInd = 0; + yInd += 1; + continue; + default: + if (typeof letters[x] == "string") { + RunInstructions( + letters[x], + [ + org[0] + xInd * spacing[0] * scale, + org[1] - yInd * spacing[1] * scale + ], + scale + ); + } else if (typeof letters[x] == "function") { + letters[x]([ + org[0] + xInd * spacing[0] * scale, + org[1] - yInd * spacing[1] * scale + ], scale); + } + break; + } + xInd += 1; + continue; + } + } + return; +}; + +// main.ts +setDocDimensions(125, 125); + +DrawText("", [48, 125], 14); +DrawText( + `Passwords: (DO NOT USE)`, + [5, 115], + 1.25 +); +for (let t = 0; t < numPassword; t++){ +DrawText(passwordGen(length), + [15, 107 - t*7.5], + 1, + [2.75, 5] +); +} + + +// helper functions - added by Leo when porting piece from old library + +function calculateBezierPoint(t, p0, p1, p2, p3) { + let u = 1 - t + let tt = t * t + let uu = u * u + let uuu = uu * u + let ttt = tt * t + + let p = [uuu * p0[0], uuu * p0[1]] // u^3 * p0 + p[0] += 3 * uu * t * p1[0] // 3u^2t * p1 + p[1] += 3 * uu * t * p1[1] + p[0] += 3 * u * tt * p2[0] // 3ut^2 * p2 + p[1] += 3 * u * tt * p2[1] + p[0] += ttt * p3[0] // t^3 * p3 + p[1] += ttt * p3[1] + + return p +} + +function findTForGivenX(xTarget, p0, p1, p2, p3) { + let tolerance = 0.00001 + let t = 0.5 // Start with approximate solution + let iterations = 0 + + while (iterations < 1000) { + // Max iterations to prevent infinite loop + let p = calculateBezierPoint(t, p0, p1, p2, p3) + let difference = p[0] - xTarget + if (Math.abs(difference) < tolerance) { + return t + } else { + t = t - difference / 2 // Approximate a new t value + } + iterations++ + } + return t // Return the approximate t value +} + +function getYForX(x, p0, p1, p2, p3) { + let t = findTForGivenX(x, p0, p1, p2, p3) + let p = calculateBezierPoint(t, p0, p1, p2, p3) + return p[1] +} + +function bezierEasing(initial, p0, p1, final) { + return (x) => + getYForX( + x, + [0, initial], + [Math.min(Math.max(0, p0[0]), 1), p0[1]], + [Math.min(Math.max(0, p1[0]), 1), p1[1]], + [1, final] + ) +} + +function warp(turtle, fn, baseAngle = null) { + const tValues = tValuesForPoints(turtle.path); + const newPts = []; + tValues.forEach((t, i) => { + const pt = turtle.path.flat()[i]; + let angle = baseAngle ?? bt.getAngle(turtle.path, t); + if (typeof angle === "function") { + angle = angle(bt.getAngle(turtle.path, t)); + } else if (typeof angle === "number") { + angle = angle; + } + const y = fn(t); + const newPoint = rotate([0, y], angle); + newPts.push([pt[0] + newPoint[0], pt[1] + newPoint[1]]); + }); + turtle.path.flat().forEach((pt, i, arr) => { + pt[0] = newPts[i][0]; + pt[1] = newPts[i][1]; + }); + return turtle + + function rotate(pt, angle, origin = [0, 0]) { + let delta = angle / 180 * Math.PI; + let hereX = pt[0] - origin[0]; + let hereY = pt[1] - origin[1]; + let newPoint = [ + hereX * Math.cos(delta) - hereY * Math.sin(delta) + origin[0], + hereY * Math.cos(delta) + hereX * Math.sin(delta) + origin[1] + ]; + return newPoint; + } +} + +function tValuesForPoints(polylines) { + let totalLength = 0; + let lengths = []; + let tValues = []; + let segmentLength = 0; + for (let i = 0; i < polylines.length; i++) { + let polyline2 = polylines[i]; + for (let j = 0; j < polyline2.length; j++) { + if (j > 0) { + let dx = polyline2[j][0] - polyline2[j - 1][0]; + let dy = polyline2[j][1] - polyline2[j - 1][1]; + segmentLength = Math.sqrt(dx * dx + dy * dy); + totalLength += segmentLength; + } + lengths.push(segmentLength); + } + } + let accumulatedLength = 0; + for (let i = 0; i < lengths.length; i++) { + accumulatedLength += lengths[i]; + tValues.push(accumulatedLength / totalLength); + } + return tValues; +}; diff --git a/art/PenguinsOnIce-saumil/index.js b/art/PenguinsOnIce-saumil/index.js new file mode 100644 index 000000000..81f1891ce --- /dev/null +++ b/art/PenguinsOnIce-saumil/index.js @@ -0,0 +1,463 @@ +/* +@title: Penguins On Ice (not the musical) +@author: Saumil +@snapshot: snapshot.png +*/ + +// VARIABLE TO DISABLE COLORS AND VARYING LINE THICKNESS +const disableColorsAndThickness = false; + +// DOC DIMENSIONS +const width = 125; +const height = 125; + +// BACKGROUND +const numberOfIceCracks = 15; +const iceCrackWidth = 2; + +const maxCrackOffset = 8; +const minCrackOffset = -8; +const crackSegments = 19; + +// NUMBER OF PENGUINS +const maxNumPenguins = 8; +const minNumPenguins = 3; + +// POSITION +const maxPenguinXValue = width; +const minPenguinXValue = 0; + +const maxPenguinYValue = height; +const minPenguinYValue = 0; + +// CONSTANTS FOR FROST AND TEXTURE +const numberOfFrostPatches = 30; +const frostPatchRadius = 2; + +// POSITION & SCALE FOR ICEBERGS +const icebergMinScale = 5; +const icebergMaxScale = 15; +const icebergDistanceY = height - 30; + + +// SCALE +const maxPenguinScale = 15; +const minPenguinScale = 5; + +const iceColor = "#B0E0E6"; // Base ice color +const iceHighlightColor = "#E0FFFF"; // Ice highlights for depth +const iceShadowColor = "#A9CCE3"; // Add shadows to give more depth +const scarfColor = "#FF6347"; +setDocDimensions(width, height); + +const MAX_ROTATION_ANGLE = Math.PI / 6; // 30 degrees + + +// Store penguins' positions and sizes +let penguins = []; +const numPenguins = randInt(3, 6); // Adjust number for balance on the paper + +// Helper function to generate a random integer between min (inclusive) and max (inclusive) +function randInt(min, max) { + return Math.floor(bt.rand() * (max - min + 1)) + min; +} + +// Helper function to generate a random float between min (inclusive) and max (inclusive) +function randInRange(min, max) { + return bt.rand() * (max - min) + min; +} + +function lerpColor(color1, color2, ratio) { + const hex = (x) => parseInt(x, 16); + const r = Math.round(lerp(hex(color1.slice(1, 3)), hex(color2.slice(1, 3)), ratio)); + const g = Math.round(lerp(hex(color1.slice(3, 5)), hex(color2.slice(3, 5)), ratio)); + const b = Math.round(lerp(hex(color1.slice(5, 7)), hex(color2.slice(5, 7)), ratio)); + return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`; +} + +function lerp(start, end, t) { + return start + (end - start) * t; +} + +function drawPolygon(points, options) { + for (let i = 0; i < points.length - 1; i++) { + drawLines([[points[i], points[i + 1]]], options); + } + drawLines([[points[points.length - 1], points[0]]], options); +} + +function drawCircle(center, radius, options) { + const points = []; + const numSegments = 100; + for (let i = 0; i < numSegments; i++) { + const angle = (2 * Math.PI * i) / numSegments; + const x = center[0] + radius * Math.cos(angle); + const y = center[1] + radius * Math.sin(angle); + points.push([x, y]); + } + drawPolygon(points, options); +} + +function fillPolygon(points, color) { + const minX = Math.min(...points.map(p => p[0])); + const maxX = Math.max(...points.map(p => p[0])); + const numLines = Math.ceil((maxX - minX) / 2); + + for (let i = 0; i <= numLines; i++) { + const x = minX + (i / numLines) * (maxX - minX); + const intersections = []; + + for (let j = 0; j < points.length - 1; j++) { + const [x1, y1] = points[j]; + const [x2, y2] = points[j + 1]; + + if ((x1 <= x && x2 >= x) || (x2 <= x && x1 >= x)) { + const y = y1 + ((x - x1) * (y2 - y1)) / (x2 - x1); + intersections.push([x, y]); + } + } + + intersections.sort((a, b) => a[1] - b[1]); + + for (let k = 0; k < intersections.length; k += 2) { + if (k + 1 < intersections.length) { + const [x1, y1] = intersections[k]; + let [x2, y2] = intersections[k + 1]; + if (isNaN(y2)) { + y2 = y1; + } + drawLines([[[x1, y1], [x2, y2]]], { stroke: color }); + } + } + } +} + +function rotatePoint(point, center, angle) { + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const [x, y] = point; + const [cx, cy] = center; + const nx = (cos * (x - cx)) - (sin * (y - cy)) + cx; + const ny = (sin * (x - cx)) + (cos * (y - cy)) + cy; + return [nx, ny]; +} + +// DRAW TEXTURE (FROST PATCHES) +function drawFrostTexture() { + for (let i = 0; i < numberOfFrostPatches; i++) { + const x = randInt(0, width); + const y = randInt(0, height); + const radius = randInRange(0.5, frostPatchRadius); + drawCircle([x, y], radius, { stroke: 'rgba(255, 255, 255, 0.1 + bt.rand() * 0.3)', width: 1 }); // Variation in opacity + } +} + +// DRAW ICEBERGS IN THE BACKGROUND +function drawIcebergs() { + const numberOfIcebergs = randInt(2, 5); + for (let i = 0; i < numberOfIcebergs; i++) { + const scale = randInRange(icebergMinScale, icebergMaxScale); + const x = randInt(10, width - 10); + const icebergPoints = [ + [x, icebergDistanceY], + [x - scale / 2, icebergDistanceY + scale / 3], + [x + scale / 2, icebergDistanceY + scale / 3], + [x, icebergDistanceY] + ]; + drawPolygon(icebergPoints, { stroke: 'rgba(255, 255, 255, 0.3)', width: 1 }); + fillPolygon(icebergPoints, 'rgba(255, 255, 255, 0.3)'); + } +} + + +// Function to rotate a list of points by a given angle around a center point +function rotatePoints(points, center, angle) { + return points.map(point => rotatePoint(point, center, angle)); +} + +function DrawPenguin(center, scale, rotation, addScarf = false) { + const centerX = center[0]; + const centerY = center[1]; + + penguins.push({ center, scale, rotation }); // Store rotation + + // Penguin Body Shape + const bodyWidth = scale * 0.8; + const bodyHeight = scale * 1.5; + let bodyPoints = [ + [centerX, centerY - bodyHeight / 2], // top of the body + [centerX - bodyWidth / 2, centerY + bodyHeight / 2], // bottom left + [centerX + bodyWidth / 2, centerY + bodyHeight / 2], // bottom right + [centerX, centerY - bodyHeight / 2] // close the shape + ]; + bodyPoints = rotatePoints(bodyPoints, center, rotation); // Rotate body points + + // Belly + const bellyWidth = bodyWidth * 0.7; + const bellyHeight = bodyHeight * 0.7; + let bellyPoints = [ + [centerX, centerY - bellyHeight / 2], + [centerX - bellyWidth / 2, centerY + bellyHeight / 2], + [centerX + bellyWidth / 2, centerY + bellyHeight / 2], + [centerX, centerY - bellyHeight / 2] + ]; + bellyPoints = rotatePoints(bellyPoints, center, rotation); // Rotate belly points + + // Flippers + const flipperLength = scale * 0.6; + const flipperWidth = scale * 0.15; + let leftFlipperPoints = [ + [centerX - bodyWidth / 2, centerY - bodyHeight / 4], + [centerX - bodyWidth / 2 - flipperWidth, centerY - bodyHeight / 4 + flipperLength], + [centerX - bodyWidth / 2, centerY - bodyHeight / 4 + flipperLength] + ]; + let rightFlipperPoints = [ + [centerX + bodyWidth / 2, centerY - bodyHeight / 4], + [centerX + bodyWidth / 2 + flipperWidth, centerY - bodyHeight / 4 + flipperLength], + [centerX + bodyWidth / 2, centerY - bodyHeight / 4 + flipperLength] + ]; + leftFlipperPoints = rotatePoints(leftFlipperPoints, center, rotation); // Rotate left flipper points + rightFlipperPoints = rotatePoints(rightFlipperPoints, center, rotation); // Rotate right flipper points + + // Head + const headRadius = scale * 0.4; + let headCenter = [centerX, centerY - bodyHeight / 2 - headRadius * 0.6]; + headCenter = rotatePoint(headCenter, center, rotation); // Rotate head center + + // Beak + const beakLength = headRadius * 0.6; + let beakPoints = [ + [centerX, headCenter[1] - headRadius / 2], + [centerX - beakLength / 2, headCenter[1] - headRadius / 2 + beakLength], + [centerX + beakLength / 2, headCenter[1] - headRadius / 2 + beakLength] + ]; + beakPoints = rotatePoints(beakPoints, headCenter, rotation); // Rotate beak points + + // Eyes + const eyeRadius = scale * 0.1; + let leftEyeCenter = [centerX - headRadius / 3, headCenter[1] - headRadius / 3]; + let rightEyeCenter = [centerX + headRadius / 3, headCenter[1] - headRadius / 3]; + leftEyeCenter = rotatePoint(leftEyeCenter, headCenter, rotation); // Rotate left eye center + rightEyeCenter = rotatePoint(rightEyeCenter, headCenter, rotation); // Rotate right eye center + + // Draw Penguin parts with rotation applied + drawPolygon(bodyPoints, { stroke: 'black', width: 1 }); + fillPolygon(bodyPoints, 'black'); + drawPolygon(bellyPoints, { stroke: 'white', width: 1 }); + fillPolygon(bellyPoints, 'white'); + drawPolygon(leftFlipperPoints, { stroke: 'black', width: 1 }); + fillPolygon(leftFlipperPoints, 'black'); + drawPolygon(rightFlipperPoints, { stroke: 'black', width: 1 }); + fillPolygon(rightFlipperPoints, 'black'); + drawPolygon(beakPoints, { stroke: 'orange', width: 1 }); + fillPolygon(beakPoints, 'orange'); + drawCircle(headCenter, headRadius, { stroke: 'black', width: 1 }); + fillPolygon([[centerX, headCenter[1]], [centerX - headRadius / 2, headCenter[1]], [centerX + headRadius / 2, headCenter[1]]], 'black'); // Filling head + + // Eyes + drawCircle(leftEyeCenter, eyeRadius, { stroke: 'black', width: 1 }); + drawCircle(leftEyeCenter, eyeRadius / 2, { stroke: 'black', width: 1, fill: 'black' }); + drawCircle(rightEyeCenter, eyeRadius, { stroke: 'black', width: 1 }); + drawCircle(rightEyeCenter, eyeRadius / 2, { stroke: 'black', width: 1, fill: 'black' }); + + // Draw a white dot on the circle the penguin is on + const dotRadius = scale * 0.1; // Adjust the dot size as needed + drawCircle(center, dotRadius, { stroke: 'white', fill: 'white' }); // Draw white dot at center + + // Add snow dots to the body + const numSnowDots = randInt(5, 15); // Random number of snow dots + for (let i = 0; i < numSnowDots; i++) { + const dotX = randInt(centerX - bodyWidth / 2, centerX + bodyWidth / 2); + const dotY = randInt(centerY - bodyHeight / 2, centerY + bodyHeight / 2); + drawCircle([dotX, dotY], 1, { stroke: 'white', fill: 'white' }); // Small white circle for snow + } + + // Add scarf if true + if (addScarf) { + let scarfPoints = [ + [centerX - bodyWidth / 2, centerY - bodyHeight / 4], + [centerX + bodyWidth / 2, centerY - bodyHeight / 4], + [centerX + bodyWidth / 2, centerY - bodyHeight / 5], + [centerX - bodyWidth / 2, centerY - bodyHeight / 5] + ]; + scarfPoints = rotatePoints(scarfPoints, center, rotation); // Rotate scarf + drawPolygon(scarfPoints, { stroke: scarfColor, width: 1 }); + fillPolygon(scarfPoints, scarfColor); + } +} + + +function drawPenguinShadow(penguin) { + const { center, scale } = penguin; + const shadowScale = scale * 1.2; + const shadowCenter = [center[0], center[1] + scale / 2]; + drawCircle(shadowCenter, shadowScale, { stroke: 'rgba(0, 0, 0, 0.2)', width: 1, fill: 'rgba(0, 0, 0, 0.2)' }); +} + +// DRAW A FISH UNDER THE ICE +function drawFishUnderIce() { + const fishX = randInt(10, width - 10); + const fishY = randInt(height / 2, height - 10); + const fishBody = [ + [fishX, fishY], + [fishX - 5, fishY + 2], + [fishX - 5, fishY - 2], + [fishX, fishY] + ]; + drawPolygon(fishBody, { stroke: 'blue', width: 1 }); + fillPolygon(fishBody, 'blue'); + drawLines([[[fishX, fishY], [fishX + 5, fishY]]], { stroke: 'blue', width: 1 }); +} + + +// Helper function to check for penguin overlap +function isPenguinOverlapping(newPenguin) { + for (const penguin of penguins) { + const dx = penguin.center[0] - newPenguin.center[0]; + const dy = penguin.center[1] - newPenguin.center[1]; + const distance = Math.sqrt(dx * dx + dy * dy); + if (distance < penguin.scale + newPenguin.scale) { + return true; + } + } + return false; +} + +// Initialize penguins before drawing cracks +for (let i = 0; i < numPenguins; i++) { + let newPenguin; + let attempts = 0; + let rotation = randInRange(-MAX_ROTATION_ANGLE, MAX_ROTATION_ANGLE); // Random rotation within the constraint + do { + const x = randInRange(minPenguinXValue + 20, maxPenguinXValue - 20); + const y = randInRange(minPenguinYValue + 20, maxPenguinYValue - 20); + const scale = randInRange(10, 18); + newPenguin = { center: [x, y], scale: scale, rotation: rotation }; // Add constrained rotation to penguin + attempts++; + } while (isPenguinOverlapping(newPenguin) && attempts < 100); + + if (attempts < 100) { + const addScarf = (i === 0); // Add scarf to the first penguin + DrawPenguin(newPenguin.center, newPenguin.scale, newPenguin.rotation, addScarf); // Pass the rotation + drawPenguinShadow(newPenguin); + } +} + + +drawFishUnderIce(); // Add playful fish under the ice + +// Now that penguins are initialized, draw the ice cracks +function drawIceCracks() { + for (let i = 0; i < numberOfIceCracks; i++) { + const startX = randInt(0, width); + const startY = randInt(0, height); + let points = [[startX, startY]]; + + for (let j = 0; j < crackSegments; j++) { + const lastPoint = points[points.length - 1]; + const nextX = lastPoint[0] + randInRange(minCrackOffset, maxCrackOffset); + const nextY = lastPoint[1] + randInRange(minCrackOffset, maxCrackOffset); + + if (nextX < 0 || nextX > width || nextY < 0 || nextY > height) { + break; + } + + if (!isPointNearPenguin([nextX, nextY])) { + points.push([nextX, nextY]); + } + } + + // Varying crack color and width for depth + drawLines([points], { stroke: lerpColor(iceHighlightColor, iceShadowColor, bt.rand()), width: randInRange(1, 2) }); + } +} + + + +function drawIceShadowCracks() { + for (let i = 0; i < numberOfIceCracks; i++) { + const startX = randInt(0, width); + const startY = randInt(0, height); + let points = [[startX, startY]]; + + for (let j = 0; j < crackSegments; j++) { + const lastPoint = points[points.length - 1]; + const nextX = lastPoint[0] + randInRange(minCrackOffset, maxCrackOffset); + const nextY = lastPoint[1] + randInRange(minCrackOffset, maxCrackOffset); + + if (nextX < 0 || nextX > width || nextY < 0 || nextY > height) { + break; + } + + if (!isPointNearPenguin([nextX, nextY])) { + points.push([nextX, nextY]); + } + } + + drawLines([points], { stroke: iceShadowColor, width: iceCrackWidth }); + } +} + +// Drawing the background gradient, controlled by the disableColorsAndThickness flag +function drawIceGradient() { + if (disableColorsAndThickness) { + for (let y = 0; y < height; y++) { + drawLines([[[0, y], [width, y]]], { stroke: iceColor, width: 1 }); + } + } else { + const gradientSteps = 150; + for (let i = 0; i < gradientSteps; i++) { + const colorRatio = i / gradientSteps; + drawLines([[[0, i * (height / gradientSteps)], [width, i * (height / gradientSteps)]]], { + stroke: lerpColor(iceColor, iceHighlightColor, colorRatio + bt.rand() * 0.1), // Adding noise to the gradient + width: 1 + }); + } + } +} + +function drawIceShadows() { + for (let i = 0; i < numberOfIceCracks; i++) { + const startX = randInt(0, width); + const startY = randInt(0, height); + let points = [[startX, startY]]; + + for (let j = 0; j < crackSegments; j++) { + const lastPoint = points[points.length - 1]; + const nextX = lastPoint[0] + randInRange(minCrackOffset, maxCrackOffset); + const nextY = lastPoint[1] + randInRange(minCrackOffset, maxCrackOffset); + + if (nextX < 0 || nextX > width || nextY < 0 || nextY > height) { + break; + } + + if (!isPointNearPenguin([nextX, nextY])) { + points.push([nextX, nextY]); + } + } + + // Draw shadow cracks with a darker shade + drawLines([points], { stroke: iceShadowColor, width: iceCrackWidth }); + } +} + + +drawFrostTexture(); // Frosty texture for the ice +drawIcebergs(); // Distant icebergs +drawIceCracks(); // Draw ice cracks +drawIceShadowCracks(); // Shadow cracks +// drawIceGradient(); + + +// Check if the crack point is near any penguin +function isPointNearPenguin(point) { + for (const penguin of penguins) { + const dx = penguin.center[0] - point[0]; + const dy = penguin.center[1] - point[1]; + const distance = Math.sqrt(dx * dx + dy * dy); + if (distance < penguin.scale * 1.5) { + return true; + } + } + return false; +} diff --git a/art/PenguinsOnIce-saumil/snapshots/snapshot.png b/art/PenguinsOnIce-saumil/snapshots/snapshot.png new file mode 100644 index 000000000..1317058d6 Binary files /dev/null and b/art/PenguinsOnIce-saumil/snapshots/snapshot.png differ diff --git a/art/PenguinsOnIce-saumil/snapshots/snapshot1.png b/art/PenguinsOnIce-saumil/snapshots/snapshot1.png new file mode 100644 index 000000000..e24394eb1 Binary files /dev/null and b/art/PenguinsOnIce-saumil/snapshots/snapshot1.png differ diff --git a/art/PenguinsOnIce-saumil/snapshots/snapshot2.png b/art/PenguinsOnIce-saumil/snapshots/snapshot2.png new file mode 100644 index 000000000..42c0fe1c8 Binary files /dev/null and b/art/PenguinsOnIce-saumil/snapshots/snapshot2.png differ diff --git a/art/TuxedoCupcake-Olive/index.js b/art/TuxedoCupcake-Olive/index.js new file mode 100644 index 000000000..8f1c7a6f0 --- /dev/null +++ b/art/TuxedoCupcake-Olive/index.js @@ -0,0 +1,394 @@ +/* +@title: Tuxedo Cupcake +@author: Olive +@snapshot: gallery.png +*/ + +// Version: 3.1 + +// Dev Mode toggle (enables/disables console) +const devMode = false + +let line = 0 +function print(text) { + if (!devMode) return + if (typeof text !== "string") text = text.toString() + drawLines(bt.text(text.toString(),[0,-5- (line * 5)],1)) + line++ +} + +print("Console:") + + +// These are the things that customize the cupcake! + +// Because I want to allow you to see your seed, I need to randomly generate a seed to be the seed... kinda weird but it works +const seed = bt.randIntInRange(100000, 999999) +print("Seed: " + seed) + +// Set to a specific if you want a seeded cupcake, otherwise just 'seed' +bt.setRandSeed(seed) + +// Sets whether the cupcake is in black & white (what the blot will actually draw) vs. color (what looks better) +const color = false; + +// Enables / Disables decoration around the box +const outsideDecor = true; + +// Toppings +const toppingDensity = bt.randInRange(3,4) +const sprinkColors = ["#f75c5c", "#f7975c", "#f7e55c", "#97f75c", "#5c9cf7", "#5c5cf7", "#9a5cf7", "#dc6ef0"] + +// Cake colors -> Vanilla, Chocolate, Cinnamon, Lemon +const cakeColors = ["#F8ECD4", "#512D1E", "#E3BB8B", "#FFDFA1"] + +// Frosting colors -> Vanilla, Chocolate, Strawberry, Passion Fruit, Caramel, Raspberry, Cherry, Pistachio, Peanut Butter, Black Sesame, Red Bean +const frostingColors = [["#F0ECE3", "#EEE9DF"], ["#7E5E50", "#6F5144"], ["#ECBDC2", "#E9B7BD"], ["#FEE9C0", "#F8DEAC"], ["#E9C9A4", "#D8BC9B"], ["#DF779C", "#D36A8F"], ["#E0A5DE", "#CC96CA"], ["#D5F5BB", "#C9ECAD"], ["#F5DCBE", "#EED3B3"], ["#5A5550", "#393632"], ["#DBBBB1", "#C1A096"]] + +const width = 100; +const height = 100; + +setDocDimensions(width, height); + +let boxHitbox = [[[12.5, 15], [10, 10], [10, 0], [90, 0], [90, 40], [85, 40], [72.5, 15], [12.5, 15]]] +let box = [[[10, 10], [75, 10], [90, 40], [25, 40], [10,10]], [[17.5, 15], [72.5, 15], [82.5, 35], [27.5, 35], [17.5, 15]], [[10, 10], [75, 10], [90, 40], [90, 30], [75, 0], [10, 0], [10, 10]], [[75, 10], [75, 0]]] +let boxStart = bt.bounds(box).cc +bt.originate(box) +bt.translate(box, [width / 2, height / 2]) +let boxFinal = bt.bounds(box).cc +bt.translate(boxHitbox, [boxFinal[0] - boxStart[0], boxFinal[1] - boxStart[1]]) + +let overlapBounds = bt.copy(boxHitbox) + + +bt.join(overlapBounds, drawCupcake(-22, 0, 17, color, overlapBounds, true)) +bt.join(overlapBounds, drawCupcake(-4, 0, 17, color, overlapBounds, true)) +bt.join(overlapBounds, drawCupcake(14, 0, 17, color, overlapBounds, true)) +bt.join(overlapBounds, drawCupcake(-14, 8, 17, color, overlapBounds, true)) +bt.join(overlapBounds, drawCupcake(4, 8, 17, color, overlapBounds, true)) +bt.join(overlapBounds, drawCupcake(22, 8, 17, color, overlapBounds, true)) + + +bt.cover(overlapBounds, boxHitbox) +// idk why these two lines are necessary, but if you +// remove them a line disappears, so I'll just leave this here +bt.translate(overlapBounds, [0, -150]) +bt.translate(overlapBounds, [0, 150]) +bt.cover(box, overlapBounds) +drawLines(box) + + +const logoTurt = new bt.Turtle().jump([50, 0]).arc(360, 50) +const logo = [[[3.552713678800501e-15,15.136700439453124],[28.450000000000003,0],[62.5,0],[62.5,56.9],[13.900100708007814,82.6],[10.662300109863285,19.602197265624998],[3.552713678800501e-15,15.136700439453124]]] +bt.translate(logo, [37.5, 0]) + +const penguinFeet = [[[3.0582196049561277,0.037880078911868904],[2.998880310423665,0.03960414215792283],[2.938963375446493,0.04164354516323441],[2.87855876237859,0.0439895582463574],[2.817756433573934,0.04663345172584552],[2.7566463513865034,0.04956649592025253],[2.6953184781702775,0.05277996114813216],[2.6338627762792344,0.05626511772803816],[2.5723692080673524,0.06001323597852427],[2.5109277358886106,0.06401558621814422],[2.449628322096987,0.06826343876545177],[2.3885609290464607,0.07274806393900064],[2.3278155190910095,0.07746073205734458],[2.267482054584612,0.08239271343903734],[2.207650497881248,0.08753527840263266],[2.148410811334894,0.09287969726668427],[2.08985295729953,0.09841724034974592],[2.032066898129134,0.10413917797037134],[1.975142596177685,0.11003678044711428],[1.9191700137991607,0.11610131809852849],[1.86423911334754,0.12232406124316769],[1.8104398571768017,0.12869628019958565],[1.757862207640924,0.13520924528633607],[1.7065961270938856,0.14185422682197274],[1.656731577889665,0.14862249512504935],[1.6083585223822405,0.1555053205141197],[1.561566922925591,0.1624939733077375],[1.5164467418736947,0.16957972382445646],[1.4730879415805302,0.17675384238283037],[1.4315804844000763,0.18400759930141294],[1.392014332686311,0.19133226489875793],[1.3544794487932135,0.1987191094934191],[1.3190657950747617,0.20615940340395014],[1.2266518812373297,0.2268869573419342],[1.1383348444036372,0.24797730643159918],[1.0540435496587124,0.2694385114281976],[0.9737068620875844,0.2912786330869818],[0.8972536467752814,0.3135057321632043],[0.8246127688068323,0.33612786941211753],[0.7557130932672657,0.3591531055889739],[0.6904834852416101,0.38258950144902587],[0.6288528098148942,0.4064451177475259],[0.5707499320721465,0.43072801523972637],[0.516103717098396,0.4554462546808798],[0.46484302997867083,0.48060789682623856],[0.4168967357979999,0.5062210024310551],[0.3721936996414118,0.5322936322505819],[0.33066278659393517,0.5588338470400713],[0.2922328617405986,0.585849707554776],[0.2568327901664307,0.6133492745499481],[0.2243914369564601,0.6413406087808403],[0.19483766719571546,0.6698317710027049],[0.16810034596922538,0.6988308219707944],[0.14410833836201847,0.7283458224403612],[0.1227905094591234,0.7583848331666577],[0.10407572434556875,0.7889559149049366],[0.08789284810638318,0.8200671284104499],[0.0741707458265953,0.8517265344384505],[0.06283828259123372,0.8839421937441905],[0.05382432348532709,0.9167221670829225],[0.04705773359390402,0.9500745152098989],[0.04246737800199314,0.9840072988803721],[0.03998212179462308,1.0185285788495946],[0.03953083005682245,1.053646415872819],[0.041042367873619895,1.0893688707052973],[0.045926292398830094,1.126106608737974],[0.0554790971524456,1.1642023241475785],[0.0694600509346893,1.20356212086804],[0.08762842254578401,1.2440921028332885],[0.10974348078595263,1.2856983739772536],[0.135564494455418,1.3282870382338654],[0.16485073235440295,1.3717641995370533],[0.1973614632831304,1.4160359618207474],[0.23285595604182316,1.4610084290188772],[0.2710934794307041,1.5065877050653724],[0.3118333022499961,1.552679893894163],[0.354834693299922,1.5991910994391787],[0.39985692138070467,1.646027425634349],[0.44665925529256695,1.693094976413604],[0.49500096383573167,1.7402998557108733],[0.5446413158104217,1.7875481674600868],[0.59533958001686,1.834746015595174],[0.6468550252552694,1.8817995040500648],[0.6989469203258727,1.928614736758689],[0.7513745340288926,1.9750978176549763],[0.8038971351645523,2.0211548506728563],[0.8562739925330745,2.066691939746259],[0.9082643749346819,2.111615188809114],[0.9596275511695976,2.1558307017953515],[1.0101227900380443,2.1992445826389004],[1.059509360340245,2.2417629352736914],[1.1075465308764225,2.2832918636336537],[1.1539935704467996,2.323737471652717],[1.1986097478515993,2.3630058632648114],[1.2411543318910443,2.4010031424038663],[1.2813865913653575,2.437635413003812],[1.3190657950747617,2.4728087789985773],[1.4159020536511389,2.5585291820680354],[1.5345651302957344,2.653351673422548],[1.6735394833838064,2.7565567966413127],[1.8313095712906136,2.867425095303528],[2.0063598523914137,2.9852371129883917],[2.197174785061465,3.109273393275102],[2.4022388276760265,3.238814479742857],[2.6200364386103554,3.3731409159708545],[2.8490520762397105,3.511533245538293],[3.08777019893935,3.65327201202437],[3.3346752650845315,3.797637759008284],[3.588251733050514,3.943911030069233],[3.846984061212556,4.0913723687864145],[4.109356707945915,4.2393023187390275],[4.3738541316258495,4.38698142350627],[4.638960790627618,4.533690226667339],[4.903161143326478,4.678709271801433],[5.164939648097687,4.821319102487751],[5.422780763316506,4.96080026230549],[5.675168947358191,5.096433294833848],[5.920588658598001,5.227498743652024],[6.157524355411194,5.353277152339215],[6.38446049617303,5.473049064474621],[6.599881539258764,5.586095023637437],[6.802271943043655,5.6916955734068635],[6.990116165902963,5.789131257362098],[7.161898666211946,5.8776826190823375],[7.31610390234586,5.956630202146782],[7.451216332679966,6.025254550134628],[7.565720415589521,6.082836206625074],[7.658100609449782,6.1286557151973176],[7.72684137263601,6.161993619430558],[7.765752901147904,6.180169001376275],[7.807870961983877,6.199188270616689],[7.852949267278901,6.218958246921988],[7.900741529167949,6.239385750062361],[7.951001459785991,6.260377599807998],[8.003482771268,6.281840615929086],[8.057939175748952,6.3036816181958155],[8.114124385363814,6.3258074263783755],[8.17179211224756,6.348124860246953],[8.230696068535162,6.370540739571739],[8.290589966361594,6.392961884122922],[8.351227517861824,6.41529511367069],[8.412362435170829,6.437447247985233],[8.473748430423578,6.459325106836739],[8.535139215755045,6.480835509995399],[8.5962885033002,6.501885277231398],[8.656950005194016,6.522381228314929],[8.716877433571467,6.542230183016179],[8.775824500567524,6.561338961105338],[8.833544918317157,6.5796143823525925],[8.889792398955342,6.5969632665281335],[8.944320654617048,6.61329243340215],[8.996883397437248,6.6285087027448295],[9.047234339550915,6.642518894326363],[9.095127193093022,6.655229827916937],[9.14031567019854,6.666548323286743],[9.182553483002438,6.6763812002059675],[9.221594343639694,6.6846352784448015],[9.257191964245276,6.691217377773433],[9.289100056954158,6.6960343179620505],[9.317072333901312,6.698992918780843],[9.34086250722171,6.7],[9.35793187367848,6.696883842675716],[9.380121304369709,6.68775344580866],[9.40713407158731,6.672935922057537],[9.438673447623195,6.6527583840810465],[9.474442704769283,6.62754794453789],[9.514145115317483,6.59763171608677],[9.557483951559712,6.563336811386387],[9.604162485787882,6.524990343095442],[9.653883990293908,6.482919423872636],[9.706351737369705,6.437451166376672],[9.761268999307186,6.388912683266249],[9.818339048398263,6.33763108720007],[9.877265156934854,6.283933490836837],[9.937750597208868,6.22814700683525],[9.999498641512226,6.170598747854009],[10.062212562136834,6.111615826551818],[10.125595631374612,6.051525355587377],[10.18935112151747,5.990654447619388],[10.253182304857326,5.9293302153065515],[10.31679245368609,5.867879771307568],[10.379884840295679,5.806630228281142],[10.442162736978004,5.745908698885971],[10.503329416024982,5.6860422957807595],[10.563088149728525,5.627358131624208],[10.62114221038055,5.570183319075015],[10.677194870272965,5.514844970791886],[10.73094940169769,5.46167019943352],[10.782109076946636,5.410986117658619],[10.830377168311717,5.3631198381258836],[10.875456948084848,5.318398473494016],[10.917051688557942,5.277149136421716],[10.954864662022914,5.239698939567687],[10.993351232696563,5.217870155031499],[11.03473815933421,5.1956240583627515],[11.078828003476527,5.172972760798949],[11.125423326664182,5.149928373577593],[11.17432669043784,5.126503007936187],[11.225340656338174,5.102708775112234],[11.278267785905852,5.078557786343235],[11.332910640681542,5.0540621528666945],[11.389071782205912,5.029233985920114],[11.446553772019634,5.004085396740997],[11.505159171663372,4.978628496566846],[11.5646905426778,4.9528753966351635],[11.624950446603584,4.926838208183452],[11.685741444981394,4.900529042449214],[11.7468660993519,4.873960010669953],[11.808126971255767,4.847143224083171],[11.869326622233666,4.820090793926371],[11.930267613826267,4.792814831437055],[11.990752507574237,4.765327447852727],[12.050583865018247,4.737640754410889],[12.109564247698962,4.709766862349043],[12.167496217157055,4.681717882904693],[12.224182334933193,4.653505927315341],[12.279425162568046,4.625143106818489],[12.33302726160228,4.596641532651641],[12.384791193576568,4.568013316052299],[12.434519520031577,4.539270568257964],[12.482014802507974,4.510425400506143],[12.52707960254643,4.481489924034334],[12.569516481687613,4.452476250080043],[12.609128001472191,4.423396489880771],[12.645716723440836,4.3942627546740205],[12.796158773574662,4.269140131447093],[12.93277769995577,4.155909426829508],[13.056574067983217,4.053847788013552],[13.168548443056068,3.962232362191516],[13.269701390573381,3.880340296555688],[13.361033475934216,3.807448738298357],[13.443545264537635,3.7428348346118123],[13.518237321782697,3.685775732688343],[13.586110213068462,3.6355485797202367],[13.648164503793993,3.591430522899784],[13.70540075935835,3.5526987094192726],[13.75881954516059,3.5186302864709917],[13.809421426599776,3.488502401247231],[13.858206969074969,3.461592200940278],[13.906176737985227,3.437176832742423],[13.954331298729613,3.4145334438459543],[14.003671216707186,3.3929391814431606],[14.055197057317008,3.371671192726331],[14.109909385958137,3.350006624887755],[14.168808768029635,3.3272226251197203],[14.232895768930561,3.302596340614517],[14.303170954059977,3.2754049185644334],[14.380634888816944,3.2449255061617586],[14.46628813860052,3.210435250598781],[14.561131268809767,3.1712112990677905],[14.666164844843745,3.1265307987610753],[14.782389432101516,3.0756708968709248],[14.910805595982138,3.017908740589627],[15.052413901884673,2.952521477109472],[15.20821491520818,2.878786253622748],[15.37920920135172,2.7959802173217443],[15.566397325714354,2.703380515398749],[15.747312591543517,2.613249934417753],[15.922111458989262,2.526737092082589],[16.091333731194236,2.4436290297202308],[16.255519211301085,2.363712788657653],[16.415207702452452,2.2867754102218303],[16.570939007790987,2.212603935739737],[16.72325293045933,2.1409854065383467],[16.87268927360013,2.0717068639446348],[17.019787840356035,2.0045553492855746],[17.165088433869688,1.939317903888141],[17.309130857283733,1.875781569079308],[17.45245491374082,1.8137333861860505],[17.59560040638359,1.7529603965353422],[17.73910713835469,1.6932496414541576],[17.883514912796766,1.6343881622694711],[18.029363532852464,1.5761630003082572],[18.177192801664432,1.5183611968974897],[18.327542522375314,1.4607697933641435],[18.480952498127753,1.4031758310351923],[18.637962532064396,1.345366351237611],[18.79911242732789,1.2871283952983736],[18.964941987060882,1.2282490045444545],[19.135991014406013,1.1685152203028282],[19.312799312505934,1.1077140839004687],[19.495906684503286,1.0456326366643505],[19.68585293354072,0.9820579199214478],[19.883177862760874,0.916776974998735],[20.0884212753064,0.8495768432231864],[20.302122974319943,0.7802445659217764],[20.524822762944144,0.7085671844214793],[20.757060444321652,0.6343317400492693],[20.999375821595116,0.5573252741321209],[21.058214876495732,0.5385482256028077],[21.11848547543277,0.5190756272140273],[21.179979593758947,0.49898850404112677],[21.242489206826978,0.47836788115945333],[21.305806289989572,0.4572947836443541],[21.369722818599445,0.43585023657117633],[21.434030768009315,0.4141152650152671],[21.49852211357189,0.3921708940519736],[21.562988830639892,0.37009814875664304],[21.627222894566028,0.3479780542046225],[21.691016280703018,0.32589163547125927],[21.754160964403567,0.3039199176319004],[21.8164489210204,0.2821439257618931],[21.877672125906226,0.2606446849365846],[21.93762255441376,0.23950322023132203],[21.996092181895715,0.21880055672145252],[22.052872983704805,0.19861771948232324],[22.10775693519375,0.17903573358928138],[22.160536011715255,0.1601356241176741],[22.21100218862204,0.14199841614284858],[22.25894744126682,0.12470513474015199],[22.304163745002306,0.10833680498493148],[22.346443075181213,0.09297445195253422],[22.385577407156255,0.07869910071830738],[22.421358716280146,0.06559177635759814],[22.453578977905604,0.05373350394575365],[22.482030167385336,0.04320530855812109],[22.506504260072063,0.03408821527004762],[22.526793231318496,0.02646324915688041],[22.54268905647735,0.020411435293966627],[22.55398371090134,0.01601379875665344],[22.56046916994318,0.013351364620288016],[22.513569094360033,0.010722241731780347],[22.364603738794,0.008405572711469725],[22.120150307221927,0.006392019560988831],[21.786786003620673,0.004672244281970342],[21.371088031967084,0.0032369088760469396],[20.879633596238016,0.002076675344851302],[20.31899990041032,0.0011822056900161098],[19.695764148460846,0.0005441619131740423],[19.01650354436645,0.00015320601595777912],[18.287795292103983,0],[17.516216595650295,0.00007520586693338455],[16.708344658982238,0.0003694856183906124],[15.870756686076666,0.0008735012560043632],[15.010029880910432,0.0015779147814073166],[14.132741447460385,0.002473388196232152],[13.24546858970338,0.0035505835021115493],[12.354788511616267,0.004800162700678188],[11.467278417175898,0.006212787793564749],[10.589515510359128,0.0077791207824039095],[9.728076995142805,0.00948982366882835],[8.889540075503785,0.011335558454470752],[8.080481955418916,0.013306987140963792],[7.307479838865054,0.015394771729940152],[6.577110929819049,0.017589574223032513],[5.8959524322577535,0.019882056621873548],[5.2705815501580195,0.022262880928095946],[4.707575487496699,0.02472270914333238],[4.213511448250645,0.02725220326921553],[3.7949666363967087,0.02984202530737808],[3.4585182559117422,0.0324828372594527],[3.210743510772598,0.035165301127072085],[3.0582196049561277,0.037880078911868904]]] +bt.translate(penguinFeet, [36.5, 14.9]) +bt.cover(logo, penguinFeet) +bt.join(logo, penguinFeet) +const penguinBelly = [[[22.57834454572855,0.36417903680731323],[22.30919236304867,0.4515027566215223],[22.04772478421112,0.5369961363788164],[21.793630899254833,0.620781296506202],[21.54659979821874,0.7029803574306853],[21.30632057114177,0.7837154395792728],[21.072482308062863,0.8631086633789706],[20.84477409902094,0.9412821492567851],[20.62288503405494,1.0183580176397227],[20.406504203203784,1.0944583889547899],[20.195320696506418,1.1697053836289926],[19.989023604001762,1.244221122089337],[19.787302015728756,1.3181277247628302],[19.589845021726322,1.391547312076478],[19.3963417120334,1.4646020044572867],[19.206481176688918,1.5374139223322627],[19.019952505731805,1.6101051861284126],[18.836444789200996,1.6827979162727422],[18.655647117135423,1.7556142331922582],[18.477248579574017,1.8286762573139668],[18.300938266555704,1.902106109064874],[18.126405268119424,1.976025908871987],[17.953338674304103,2.0505577771623114],[17.781427575148673,2.1258238343628535],[17.610361060692068,2.20194620090062],[17.43982822097322,2.279046997202617],[17.269518146031054,2.357248343695851],[17.099119925904507,2.436672360807328],[16.92832265063251,2.517441168964055],[16.756815410253992,2.5996768885930375],[16.584287294807886,2.6835016401212823],[16.410427394333126,2.7690375439757955],[16.23492479886864,2.8564067205835832],[16.083674793848783,2.9324422767757707],[15.935693587810771,3.007456841106632],[15.790864262259243,3.0815204920545054],[15.64906989869883,3.15470330809773],[15.510193578634164,3.227075367714644],[15.37411838356988,3.298706749383587],[15.240727395010605,3.3696675315828966],[15.109903694460977,3.440027792790912],[14.981530363425625,3.509857611485972],[14.855490483409183,3.5792270661464145],[14.731667135916284,3.6482062352505786],[14.60994340245156,3.7168651972768028],[14.490202364519643,3.7852740307034263],[14.372327103625166,3.8535028140087872],[14.25620070127276,3.921621625671224],[14.14170623896706,3.989700544169076],[14.028726798212697,4.057809647980681],[13.917145460514304,4.126019015584379],[13.806845307376513,4.194398725458507],[13.697709420303957,4.263018856081405],[13.589620880801268,4.3319494859314105],[13.482462770373079,4.401260693486863],[13.376118170524023,4.4710225572261],[13.27047016275873,4.541305155627462],[13.165401828581837,4.612178567169287],[13.06079624949797,4.683712870329912],[12.95653650701177,4.755978143587678],[12.85250568262786,4.829044465420922],[12.748586857850881,4.902981914307984],[12.64466311418546,4.977860568727201],[12.540617533136231,5.053750507156913],[12.436333196207828,5.1307218080754575],[12.315053768057805,5.220630558255918],[12.199470765757164,5.306124914740432],[12.089376408914392,5.387424322904701],[11.98456291713797,5.464748228124424],[11.884822510036381,5.538316075775301],[11.789947407218108,5.60834731123303],[11.699729828291634,5.675061379873312],[11.613961992865445,5.738677727071846],[11.53243612054802,5.799415798204333],[11.454944430947846,5.857495038646471],[11.381279143673403,5.91313489377396],[11.311232478333178,5.9665548089625],[11.244596654535648,6.017974229587791],[11.181163891889303,6.067612601025532],[11.120726410002622,6.115689368651423],[11.06307642848409,6.162423977841163],[11.008006166942188,6.208035873970452],[10.9553078449854,6.25274450241499],[10.904773682222212,6.296769308550477],[10.856195898261102,6.3403297377526115],[10.809366712710558,6.383645235397094],[10.76407834517906,6.426935246859624],[10.720123015275094,6.470419217515901],[10.67729294260714,6.514316592741624],[10.635380346783684,6.558846817912494],[10.594177447413207,6.60422933840421],[10.553476464104191,6.650683599592471],[10.513069616465124,6.698429046852977],[10.472749124104485,6.747685125561428],[10.43230720663076,6.798671281093523],[10.39153608365243,6.851606958824963],[10.350227974777978,6.906711604131447],[10.328431211300497,6.936195614794391],[10.306178136503181,6.966351670598745],[10.283483726947697,6.997152762014561],[10.260362959195708,7.02857187951189],[10.23683080980888,7.060582013560787],[10.21290225534888,7.093156154631304],[10.18859227237737,7.126267293193492],[10.16391583745602,7.159888419717404],[10.138887927146493,7.193992524673093],[10.113523518010455,7.228552598530611],[10.08783758660957,7.263541631760011],[10.061845109505505,7.298932614831345],[10.035561063259925,7.334698538214665],[10.009000424434495,7.370812392380024],[9.982178169590883,7.407247167797475],[9.95510927529075,7.4439758549370705],[9.927808718095765,7.480971444268861],[9.900291474567593,7.518206926262901],[9.872572521267898,7.555655291389242],[9.844666834758346,7.593289530117937],[9.816589391600605,7.631082632919038],[9.788355168356336,7.669007590262598],[9.731476287854884,7.745145030457302],[9.674150005747313,7.821485774462471],[9.61649613452695,7.897813746038524],[9.558634486687115,7.97391286894588],[9.500684874721134,8.049567066944958],[9.471488707698322,8.087830207263973],[9.441883820009972,8.127189678670277],[9.411912571878833,8.16756930594062],[9.381617323527662,8.208892913851757],[9.351040435179206,8.251084327180436],[9.320224267056217,8.294067370703411],[9.289211179381445,8.337765869197433],[9.258043532377643,8.382103647439253],[9.226763686267562,8.427004530205624],[9.195414001273953,8.472392342273295],[9.164036837619566,8.518190908419019],[9.132674555527153,8.564324053419547],[9.101369515219465,8.61071560205163],[9.070164076919253,8.657289379092022],[9.039100600849268,8.703969209317473],[9.008221447232263,8.750678917504732],[8.977568976290987,8.797342328430554],[8.947185548248191,8.84388326687169],[8.917113523326629,8.89022555760489],[8.887395261749047,8.936293025406906],[8.858073123738201,8.98200949505449],[8.829189469516841,9.027298791324393],[8.800786659307716,9.072084738993366],[8.772907053333581,9.116291162838163],[8.745593011817183,9.159841887635533],[8.718886894981274,9.202660738162228],[8.692831063048608,9.244671539195002],[8.667467876241934,9.285798115510602],[8.642839694784003,9.325964291885782],[8.618988878897568,9.365093893097294],[8.595957788805377,9.40311074392189],[8.573788784730183,9.439938669136318],[8.551838571766883,9.47659940010931],[8.529435757920227,9.514165439025135],[8.50658034319022,9.552636766883854],[8.48327232757686,9.59201336468553],[8.459511711080145,9.63229521343022],[8.435298493700078,9.673482294117992],[8.410632675436657,9.715574587748904],[8.385514256289882,9.75857207532302],[8.359943236259754,9.802474737840399],[8.333919615346275,9.847282556301103],[8.307443393549441,9.892995511705196],[8.280514570869252,9.939613585052738],[8.253133147305713,9.98713675734379],[8.225299122858818,10.035565009578418],[8.197012497528572,10.084898322756677],[8.168273271314971,10.135136677878634],[8.139081444218018,10.186280055944348],[8.10943701623771,10.238328437953882],[8.07933998737405,10.291281804907298],[8.048790357627036,10.345140137804655],[8.01778812699667,10.399903417646017],[7.986333295482949,10.455571625431446],[7.954425863085876,10.512144742161002],[7.922065829805449,10.569622748834748],[7.889253195641669,10.628005626452746],[7.855987960594536,10.687293356015056],[7.822270124664049,10.747485918521742],[7.78809968785021,10.808583294972864],[7.753476650153016,10.870585466368484],[7.718401011572469,10.933492413708663],[7.68287277210857,10.997304117993465],[7.646891931761316,11.06202056022295],[7.607167856288877,11.135135139571071],[7.560670942660676,11.223581302814253],[7.507792737693603,11.326519102356263],[7.448924788204548,11.44310859060087],[7.384458641010399,11.572509819951838],[7.314785842928045,11.713882842812936],[7.240297940774375,11.86638771158793],[7.161386481366278,12.029184478680587],[7.078443011520643,12.201433196494676],[6.99185907805436,12.382293917433962],[6.902026227784316,12.570926693902214],[6.809336007527402,12.766491578303198],[6.714179964100506,12.96814862304068],[6.616949644320517,13.175057880518429],[6.5180365950043235,13.38637940314021],[6.417832362968816,13.601273243309793],[6.3167284950308815,13.818899453430943],[6.215116538007411,14.038418085907429],[6.113388038715292,14.258989193143014],[6.011934543971415,14.47977282754147],[5.911147600592667,14.69992904150656],[5.811418755395938,14.918617887442055],[5.713139555198118,15.13499941775172],[5.616701546816095,15.348233684839322],[5.522496277066757,15.557480741108629],[5.430915292766995,15.761900638963406],[5.342350140733696,15.960653430807422],[5.257192367783751,16.152899169044442],[5.175833520734048,16.33779790607824],[5.098665146401475,16.514509694312572],[5.026078791602924,16.682194586151216],[4.95846600315528,16.84001263399793],[4.793175935174875,17.234629359678785],[4.631079461835948,17.634797429775688],[4.4721785938488825,18.040508511698047],[4.316475341924061,18.451754272855275],[4.163971716771867,18.86852638065678],[4.014669729102684,19.290816502511966],[3.868571389626893,19.718616305830245],[3.7256787090548795,20.15191745802103],[3.5859936980970253,20.590711626493718],[3.4495183674637135,21.03499047865773],[3.316254727865327,21.48474568192247],[3.186204790012249,21.939968903697345],[3.059370564614863,22.400651811391764],[2.935754062383551,22.86678607241514],[2.815357294028697,23.338363354176877],[2.6981822702606832,23.81537532408639],[2.584231001789893,24.297813649553078],[2.4735054993267096,24.785669997986357],[2.366007773581516,25.27893603679563],[2.2617398352646947,25.777603433390315],[2.1607036950866294,26.28166385517981],[2.0629013637577027,26.791108969573532],[1.9683348519882977,27.305930443980888],[1.8770061704887975,27.826119945811282],[1.788917329969585,28.35166914247413],[1.7040703411410434,28.882569701378834],[1.6224672147135555,29.418813289934807],[1.5441099613975044,29.960391575551455],[1.4690005919032731,30.507296225638186],[1.3971411169412447,31.059518907604414],[1.3285335472218023,31.617051288859543],[1.2631798934553287,32.17988503681298],[1.2323911084782613,32.4531272756733],[1.200345375719432,32.73763413369287],[1.167159072437914,33.032459841442595],[1.132948575892781,33.33665862949337],[1.0978302633431063,33.6492847284161],[1.0619205120479631,33.96939236878167],[1.025335699266425,34.29603578116099],[0.9881922022575658,34.628269196124954],[0.9506063982804582,34.96514684424446],[0.912694664594176,35.305722956090406],[0.8745733784577927,35.64905176223369],[0.8363589171303815,35.99418749324522],[0.7981676578710158,36.34018437969588],[0.7601159779387693,36.68609665215657],[0.7223202545927152,37.0309785411982],[0.6848968650919269,37.37388427739166],[0.647962186695478,37.713868091307845],[0.6116325966624416,38.04998421351766],[0.5760244722518915,38.38128687459201],[0.5412541907229008,38.70683030510177],[0.507438129334543,39.02566873561786],[0.47469266534589166,39.33685639671117],[0.44313417601602,39.6394475189526],[0.4128790386040016,39.93249633291305],[0.38404363036890976,40.21505706916341],[0.35674432856981797,40.48618395827459],[0.3310975104657996,40.74493123081748],[0.3072195533159281,40.99035311736298],[0.2852268343792768,41.22150384848199],[0.26523573091491925,41.4374376547454],[0.2473626201819288,41.63720876672413],[0.2317238794393789,41.81987141498905],[0.2178586411280925,42.01860095655501],[0.20517796717275033,42.2649201630944],[0.19360613576407285,42.55540417257697],[0.18306742509278048,42.886628122972446],[0.1734861133495937,43.25516715225057],[0.16478647872523297,43.65759639838109],[0.15689279941041873,44.090490999333724],[0.14972935359587142,44.55042609307822],[0.1432204194723115,45.03397681758432],[0.13729027523045947,45.537718310821745],[0.13186319906103572,46.05822571076025],[0.12686346915476074,46.592074155369566],[0.12221536370235497,47.13583878261942],[0.11784316089453888,47.686094730479574],[0.1136711389220329,48.23941713691974],[0.1096235759755575,48.79238113990967],[0.10562475024583313,49.341561877419096],[0.10159893992358025,49.88353448741776],[0.0974704231995193,50.41487410787539],[0.09316347826437076,50.93215587676173],[0.08860238330885505,51.43195493204652],[0.08371141652369264,51.910846411699495],[0.07841485609960398,52.365405453690386],[0.07263698022730955,52.79220719598894],[0.06630206709752977,53.18782677656488],[0.059334394900985105,53.54883933338797],[0.05165824182839601,53.87182000442792],[0.043197886070482944,54.153343927654475],[0.03387760581796636,54.389986241037384],[0.023621679261566702,54.57832208254637],[0.01235438459200443,54.71492659015118],[0,54.796374901821544],[0.004122944733115121,55.05467665316719],[0.01622222525929012,55.27998172058361],[0.03589407436105809,55.47392330955183],[0.06273472482095215,55.638134625552844],[0.09634040942150536,55.77424887406769],[0.13630736094525087,55.88389926057736],[0.18223181217472173,55.968718990562884],[0.2337099958924511,56.03034126950527],[0.290338144880972,56.07039930288555],[0.35171249192281756,56.09052629618471],[0.4174292698005209,56.092355454883794],[0.4870847112966151,56.0775199844638],[0.5602750491936334,56.04765309040574],[0.6365965162741085,56.00438797819064],[0.715645345320574,55.94935785329951],[0.7970177691155627,55.88419592121337],[0.8803100204416077,55.81053538741323],[0.9651183320812422,55.730009457380106],[1.0510389368169992,55.64425133659501],[1.137668067431412,55.55489423053897],[1.2246019567070134,55.46357134469299],[1.3114368374263368,55.371915884538076],[1.397768942371915,55.281561055555265],[1.4831945043262815,55.194140063225554],[1.5673097560719689,55.11128611302997],[1.6497109303915107,55.03463241044952],[1.7299942600674398,54.96581216096522],[1.8077559778822894,54.90645857005809],[1.8825923166185925,54.858204843209144],[1.9540995090588822,54.82268418589939],[2.0218737879856916,54.80152980360985],[2.085511386181554,54.796374901821544],[2.1740210595592067,54.80093788326894],[2.263245276749099,54.804921589236024],[2.3531488942918135,54.80835450868084],[2.44369676872793,54.811265130561445],[2.5348537565980296,54.81368194383587],[2.626584714442693,54.815633437462175],[2.718854498802501,54.81714810039841],[2.8116279662180346,54.81825442160262],[2.9048699732298746,54.81898089003285],[2.998545376378602,54.819355994647154],[3.0926190322047975,54.819408224403574],[3.1870557972490423,54.81916606826017],[3.2818205280519166,54.81865801517497],[3.3768780811540013,54.81791255410604],[3.472193313095878,54.816958174011425],[3.5677310804181266,54.81582336384916],[3.6634562396613286,54.81453661257732],[3.759333647366064,54.81312640915393],[3.9514046343224614,54.81004960168472],[4.143662893611965,54.80682085310591],[4.335827277559221,54.8036680750819],[4.527616638488877,54.80081917927707],[4.623282826673558,54.799579909601974],[4.71874982872558,54.79850207735581],[4.813982501185525,54.79761417149664],[4.908945700593975,54.796944680982506],[5.00360428349151,54.79652209477146],[5.097923106418711,54.796374901821544],[5.195507804502697,54.79794905040669],[5.299618664683101,54.80250731236313],[5.409705418151052,54.80980341199236],[5.525217796097675,54.819591073595866],[5.6456055297140955,54.831624021475136],[5.770318350191439,54.845655979931664],[5.898805988720832,54.86144067326694],[6.0305181764934,54.87873182578247],[6.164904644700269,54.897283161779725],[6.301415124532564,54.9168484055602],[6.439499347181413,54.9371812814254],[6.578607043837939,54.958035513676805],[6.718187945693271,54.979164826615914],[6.857691783938532,55.00032294454421],[6.996568289764849,55.02126359176319],[7.134267194363349,55.04174049257434],[7.270238228925156,55.06150737127916],[7.403931124641397,55.08031795217914],[7.534795612703197,55.09792595957577],[7.662281424301683,55.114085117770536],[7.7858382906279795,55.12854915106493],[7.904915942873213,55.14107178376045],[8.01896411222851,55.15140674015859],[8.127432529884995,55.159307744560834],[8.229770927033794,55.16452852126867],[8.325429034866035,55.1668227945836],[8.41385658457284,55.16594428880712],[8.49450330734534,55.1616467282407],[8.566818934374657,55.153683837185845],[8.630253196851918,55.141809339944054],[8.684255825968247,55.1257769608168],[8.728276552914773,55.10534042410559],[8.812949454983205,55.102949851111006],[8.921056105315568,55.09586273359029],[9.050968260610508,55.08420597373801],[9.201057677566672,55.068106473748735],[9.369696112882702,55.04769113581704],[9.555255323257244,55.02308686213748],[9.756107065388944,54.99442055490464],[9.970623095976444,54.96181911631308],[10.197175171718392,54.92540944855736],[10.434135049313431,54.88531845383206],[10.679874485460205,54.84167303433175],[10.932765236857362,54.79460009225099],[11.191179060203543,54.74422652978435],[11.453487712197397,54.6906792491264],[11.718062949537565,54.6340851524717],[11.983276528922694,54.57457114201483],[12.247500207051429,54.51226411995035],[12.509105740622415,54.447290988472844],[12.766464886334294,54.37977864977686],[13.017949400885716,54.30985400605697],[13.26193104097532,54.23764395950776],[13.496781563301754,54.16327541232377],[13.720872724563664,54.08687526669959],[13.932576281459692,54.008570424829784],[14.130263990688485,53.92848778890891],[14.312307608948688,53.84675426113155],[14.477078892938945,53.763496743692265],[14.622949599357899,53.678842138785626],[14.748291484904199,53.5929173486062],[14.851476306276487,53.50584927534855],[14.930875820173407,53.41776482120725],[14.984861783293606,53.32879088837687],[15.01993361918552,53.222165890348805],[15.04284286753975,53.085173095615666],[15.054392632836866,52.919419290122015],[15.055386019557433,52.726511259812405],[15.04662613218202,52.508055790631396],[15.028916075191196,52.26565966852354],[15.003058953065528,52.0009296794334],[14.969857870285583,51.71547260930552],[14.930115931331931,51.41089524408447],[14.884636240685136,51.0888043697148],[14.83422190282577,50.75080677214106],[14.779676022234398,50.39850923730782],[14.72180170339159,50.03351855115963],[14.66140205077791,49.657441499641045],[14.599280168873928,49.27188486869662],[14.536239162160214,48.87845544427091],[14.473082135117334,48.47876001230848],[14.410612192225855,48.07440535875387],[14.349632437966346,47.666998269551655],[14.290945976819373,47.25814553064638],[14.235355913265504,46.84945392798261],[14.18366535178531,46.442530247504884],[14.136677396859355,46.03898127515778],[14.09519515296821,45.64041379688584],[14.06002172459244,45.24843459863362],[14.031960216212614,44.86465046634569],[14.0118137323093,44.490668185966584],[14.000385377363067,44.12809454344088],[13.99847825585448,43.77853632471312],[14.006895472264107,43.44360031572787],[14.026440131072517,43.12489330242968],[14.05791533676028,42.82402207076311],[14.098977566827703,42.45502530336525],[14.126709136319276,42.09055688905801],[14.142131477587542,41.73011524008769],[14.146266022985042,41.3731987687006],[14.14013420486432,41.019305887143005],[14.124757455577921,40.66793500766123],[14.101157207478385,40.31858454250154],[14.070354892918257,39.97075290391025],[14.03337194425008,39.623938504133655],[13.991229793826394,39.277639755418036],[13.944949873999747,38.9313550700097],[13.895553617122676,38.58458286015493],[13.844062455547729,38.23682153810003],[13.791497821627448,37.8875695160913],[13.738881147714373,37.53632520637501],[13.687233866161051,37.18258702119748],[13.637577409320023,36.82585337280499],[13.590933209543834,36.465622673443846],[13.548322699185023,36.101393335360335],[13.510767310596137,35.73266377080075],[13.479288476129717,35.35893239201139],[13.454907628138306,34.97969761123854],[13.438646198974448,34.594457840728516],[13.431525620990685,34.20271149272759],[13.434567326539561,33.80395697948207],[13.448792747973616,33.39769271323824],[13.4752233176454,32.983417106242406],[13.514880467907448,32.56062857074085],[13.568785631112307,32.12882551897988],[13.63796023961252,31.68750636320578],[13.72342572576063,31.23616951566485],[13.826203521909179,30.77431338860338],[13.940879887645075,30.292843029569703],[14.054289086024854,29.813172858529075],[14.166596634452262,29.335535009742472],[14.277968050331042,28.860161617470858],[14.388568851064939,28.38728481597521],[14.498564554057696,27.917136739516494],[14.608120676713058,27.449949522355677],[14.717402736434769,26.985955298753733],[14.826576250626571,26.525386202971628],[14.93580673669221,26.068474369270337],[15.045259712035431,25.615451931910822],[15.155100694059977,25.16655102515406],[15.265495200169592,24.722003783261016],[15.37660874776802,24.28204234049266],[15.488606854259004,23.846898831109964],[15.60165503704629,23.416805389373895],[15.715918813533621,22.991994149545423],[15.831563701124743,22.57269724588552],[15.948755217223397,22.159146812655152],[16.067658879233328,21.751574984115294],[16.188440204558283,21.35021389452691],[16.311264710602003,20.95529567815097],[16.436297914768232,20.567052469248452],[16.563705334460717,20.185716402080313],[16.6936524870832,19.81151961090753],[16.82630489003942,19.44469422999107],[16.961828060733133,19.08547239359191],[17.100387516568073,18.73408623597101],[17.242148774947985,18.39076789138934],[17.38727735327662,18.05574949410788],[17.535938768957717,17.729263178387587],[17.688298539395017,17.411541078489435],[17.785404126163346,17.210311654652692],[17.876167194878672,17.014418264019344],[17.96104712493175,16.823691195787497],[18.040503295713332,16.637960739155265],[18.11499508661418,16.45705718332075],[18.184981877025045,16.280810817482056],[18.250923046336684,16.1090519308373],[18.31327797393985,15.94161081258458],[18.372506039225303,15.778317751922007],[18.429066621583793,15.619003038047687],[18.48341910040608,15.463496960159729],[18.536022855082916,15.311629807456237],[18.587337265005058,15.16323186913532],[18.63782170956326,15.018133434395086],[18.687935568148276,14.87616479243364],[18.738138220150866,14.73715623244909],[18.788889044961785,14.600938043639545],[18.84064742197178,14.467340515203109],[18.89387273057162,14.33619393633789],[18.949024350152047,14.207328596241997],[19.006561660103827,14.080574784113534],[19.066944039817706,13.95576278915061],[19.13063086868445,13.832722900551332],[19.198081526094803,13.711285407513808],[19.269755391439528,13.591280599236143],[19.346111844109377,13.472538764916445],[19.427610263495104,13.354890193752821],[19.51471002898747,13.23816517494338],[19.60787051997723,13.122193997686225],[19.707551115855132,13.006806951179467],[19.814211196011936,12.891834324621211],[19.9283101398384,12.777106407209565],[20.06117811213634,12.64809163483417],[20.190479263736275,12.522909291956113],[20.316295593621966,12.401595343223324],[20.438709100777153,12.284185753283731],[20.55780178418559,12.170716486785267],[20.673655642831026,12.061223508375857],[20.786352675697216,11.955742782703432],[20.89597488176791,11.854310274415921],[21.002604260026853,11.756961948161255],[21.1063228094578,11.66373376858736],[21.207212529044504,11.574661700342167],[21.30535541777071,11.489781708073606],[21.40083347462017,11.409129756429605],[21.493728698576636,11.332741810058094],[21.58412308862386,11.260653833607002],[21.67209864374559,11.192901791724257],[21.757737362925578,11.12952164905779],[21.841121245147573,11.070549370255529],[21.922332289395325,11.016020919965404],[22.00145249465259,10.965972262835344],[22.078563859903113,10.92043936351328],[22.153748384130644,10.879458186647136],[22.227088066318938,10.843064696884849],[22.298664905451744,10.81129485887434],[22.368560900512815,10.784184637263547],[22.436858050485895,10.76176999670039],[22.50363835435474,10.744086901832805],[22.5689838111031,10.73117131730872],[22.632976419714723,10.72305920777606],[22.695698179173363,10.71978653788276],[22.757231088462767,10.721389272276745],[22.817657146566688,10.727903375605948],[22.876133865112827,10.736990584697963],[22.931821082289964,10.746345951095748],[22.984832183303467,10.756055411520263],[23.035280553358703,10.766204902692477],[23.083279577661045,10.776880361333355],[23.12894264141586,10.78816772416386],[23.17238312982852,10.800152927904955],[23.213714428104392,10.812921909277609],[23.253049921448845,10.826560605002784],[23.29050299506725,10.841154951801446],[23.326187034164978,10.85679088639456],[23.360215423947395,10.87355434550309],[23.392701549619872,10.891531265848002],[23.42375879638778,10.910807584150259],[23.453500549456486,10.931469237130827],[23.48204019403136,10.953602161510672],[23.509491115317772,10.977292294010756],[23.53596669852109,11.002625571352045],[23.561580328846688,11.029687930255506],[23.58644539149993,11.0585653074421],[23.610675271686187,11.089343639632796],[23.63438335461083,11.122108863548554],[23.657683025479226,11.156946915910344],[23.68068766949675,11.193943733439127],[23.703510671868763,11.23318525285587],[23.72626541780064,11.274757410881536],[23.74906529249775,11.318746144237092],[23.77202368116546,11.365237389643502],[23.795253969009146,11.414317083821729],[23.818869541234168,11.46607116349274],[23.842983783045902,11.5205855653775],[23.867710079649715,11.577946226196971],[23.892420297276324,11.635288869952396],[23.916443909941155,11.689922068299465],[23.93983028535155,11.74219102944082],[23.962628791214872,11.792440961579109],[23.98488879523846,11.841017072916971],[24.006659665129675,11.888264571657054],[24.027990768595863,11.934528666001999],[24.048931473344375,11.980154564154452],[24.06953114708256,12.025487474317055],[24.089839157517773,12.070872604692452],[24.10990487235736,12.116655163483289],[24.12977765930868,12.163180358892209],[24.149506886079077,12.210793399121854],[24.169141920375903,12.25983949237487],[24.18873212990651,12.3106638468539],[24.208326882378245,12.363611670761587],[24.227975545498467,12.419028172300576],[24.24772748697452,12.477258559673512],[24.26763207451376,12.538648041083036],[24.28773867582353,12.603541824731794],[24.30809665861119,12.672285118822428],[24.328755390584085,12.745223131557584],[24.34976423944957,12.822701071139905],[24.371172572914993,12.905064145772036],[24.393029758687703,12.992657563656618],[24.415385164475055,13.085826532996295],[24.4382881579844,13.184916261993715],[24.461788106923084,13.290271958851518],[24.485934378998465,13.40223883177235],[24.510776341917886,13.521162088958851],[24.536363363388705,13.64738693861367],[24.562744811118268,13.781258588939448],[24.62233664726668,14.08858236464736],[24.68160039974508,14.39619839125928],[24.740433578974486,14.703994583109735],[24.798733695375912,15.011858854533253],[24.85639825937038,15.319679119864364],[24.913324781378904,15.627343293437598],[24.969410771822506,15.934739289587482],[25.0245537411222,16.241755022648544],[25.078651199699003,16.548278406955315],[25.131600657973934,16.85419735684232],[25.183299626368008,17.15939978664409],[25.233645615302244,17.463773610695156],[25.282536135197656,17.76720674333004],[25.32986869647527,18.06958709888328],[25.375540809556092,18.370802591689394],[25.41944998486115,18.670741136082917],[25.46149373281145,18.969290646398374],[25.501569563828024,19.266339036970297],[25.539574988331875,19.561774222133216],[25.57540751674403,19.855484116221657],[25.608964659485498,20.147356633570148],[25.640143926977306,20.437279688513218],[25.66884282964046,20.725141195385394],[25.69495887789599,21.01082906852121],[25.718389582164903,21.29423122225519],[25.739032452868223,21.575235570921862],[25.756785000426962,21.85373002885576],[25.771544735262143,22.129602510391408],[25.783209167794777,22.402740929863334],[25.791675808445888,22.673033201606067],[25.796842167636488,22.94036723995414],[25.798605755787595,23.204630959242078],[25.79931071506233,23.243804883118496],[25.80136559368919,23.284796918356246],[25.804708718427253,23.327343838133544],[25.809278416035596,23.371182415628613],[25.815013013273294,23.41604942401968],[25.821850836899422,23.46168163648496],[25.829730213673052,23.507815826202684],[25.838589470353266,23.554188766351075],[25.848366933699133,23.600537230108348],[25.859000930469733,23.64659799065273],[25.870429787424143,23.692107821162445],[25.882591831321434,23.736803494815714],[25.895425388920685,23.78042178479076],[25.908868786980968,23.822699464265806],[25.922860352261363,23.863373306419074],[25.93733841152094,23.90218008442879],[25.95224129151878,23.93885657147317],[25.967507319013958,23.97313954073044],[25.983074820765548,24.004765765378828],[25.998882123532624,24.033472018596548],[26.01486755407426,24.05899507356183],[26.03096943914954,24.081071703452892],[26.04712610551753,24.09943868144796],[26.063275879937315,24.113832780725254],[26.079357089167964,24.123990774462996],[26.09530805996855,24.129649435839415],[26.111067119098156,24.130545538032724],[26.126572593315853,24.126415854221154],[26.141762809380715,24.116997157582926],[26.156576094051825,24.10202622129626],[26.17095077408825,24.08123981853938],[26.18482517624907,24.054374722490508],[26.206304448638566,24.038261911985018],[26.225621296137657,24.016940748979202],[26.242907359818908,23.990547469736583],[26.25829428075488,23.95921831052069],[26.271913700018136,23.923089507595044],[26.28389725868124,23.882297297223175],[26.294376597816758,23.836977915668605],[26.30348335849725,23.787267599194863],[26.31134918179528,23.733302584065466],[26.318105708783413,23.67521910654395],[26.323884580534216,23.613153402893836],[26.328817438120247,23.547241709378646],[26.333035922614073,23.477620262261908],[26.33667167508825,23.404425297807148],[26.339856336615355,23.327793052277894],[26.34272154826794,23.247859761937665],[26.34539895111857,23.16476166304999],[26.34802018623982,23.078634991878396],[26.350716894704235,22.989615984686406],[26.35362071758439,22.897840877737544],[26.356863295952852,22.803445907295337],[26.360576270882174,22.706567309623313],[26.364891283444926,22.607341320984993],[26.36993997471367,22.505904177643906],[26.37585398576097,22.402392115863574],[26.38276495765939,22.296941371907526],[26.390804531481493,22.189688182039284],[26.40010434829984,22.080768782522373],[26.410796049187,21.970319409620323],[26.42301127521553,21.858476299596653],[26.436881667458,21.745375688714894],[26.452538866986966,21.63115381323857],[26.53545118289454,21.060813057312227],[26.616176068875255,20.5113707682936],[26.694876990898337,19.982005345262174],[26.771717414933015,19.47189518729745],[26.846860806948513,18.980218693478903],[26.920470632914068,18.50615426288604],[26.992710358798902,18.048880294598334],[27.063743450572247,17.607575187695286],[27.13373337420333,17.18141734125638],[27.202843595661385,16.769585154361113],[27.27123758091563,16.37125702608897],[27.3390787959353,15.985611355519437],[27.406530706689626,15.61182654173201],[27.47375677914783,15.249080983806177],[27.540920479279148,14.896553080821427],[27.608185273052804,14.55342123185725],[27.675714626438026,14.218863835993139],[27.743672005404044,13.892059292308579],[27.812220875920087,13.572185999883061],[27.88152470395538,13.258422357796078],[27.95174695547916,12.949946765127118],[28.023051096460648,12.645937620955669],[28.095600592869076,12.345573324361224],[28.16955891067367,12.04803227442327],[28.24508951584366,11.7524928702213],[28.322355874348276,11.4581335108348],[28.401521452156743,11.164132595343263],[28.482749715238292,10.869668522826178],[28.566204129562156,10.573919692363033],[28.652048161097554,10.276064503033322],[28.740445275813723,9.97528135391653],[28.831558939679887,9.67074864409215],[28.910959995831604,9.408577897282873],[28.989405928996355,9.151626055204368],[29.06689851566837,8.899888157196267],[29.143439532341887,8.65335924259821],[29.219030755511127,8.412034350749833],[29.293673961670333,8.175908520990772],[29.36737092731373,7.944976792660664],[29.44012342893555,7.719234205099145],[29.51193324303003,7.498675797645852],[29.582802146091396,7.283296609640421],[29.65273191461388,7.07309168042249],[29.721724325091717,6.8680560493316944],[29.789781154019135,6.668184755707671],[29.85690417789037,6.473472838890056],[29.923095173199652,6.283915338218487],[29.98835591644121,6.099507293032601],[30.05268818410928,5.9202437426720325],[30.11609375269809,5.74611972647642],[30.178574398701876,5.577130283785399],[30.240131898614866,5.4132704539386065],[30.300768028931294,5.254535276275679],[30.36048456614539,5.100919790136254],[30.419283286751387,4.952419034859967],[30.47716596724352,4.809028049786455],[30.53413438411601,4.670741874255354],[30.5901903138631,4.537555547606302],[30.64533553297902,4.409464109178933],[30.699571817957995,4.286462598312887],[30.752900945294265,4.168546054347798],[30.805324691482056,4.055709516623304],[30.8568448330156,3.947948024479041],[30.907463146389134,3.845256617254645],[30.97121873454242,3.7206409831149254],[31.03699232290799,3.5972253157848146],[31.104682484226956,3.4749995229441417],[31.174187791240406,3.3539535122727346],[31.24540681668944,3.234077191450422],[31.318238133315152,3.115360468157032],[31.392580313858645,2.9977932500723936],[31.468331931061012,2.881365444876335],[31.545391557663354,2.7660669602486845],[31.623657766406765,2.6518877038692708],[31.703029130032345,2.5388175834179214],[31.78340422128119,2.426846506574466],[31.864681612894397,2.3159643810187323],[31.946759877613065,2.206161114430549],[32.02953758817829,2.0974266144897444],[32.11291331733117,1.989750788876147],[32.1967856378128,1.883123545269585],[32.281053122364284,1.7775347913498871],[32.36561434372671,1.6729744347968816],[32.45036787464119,1.569432383290397],[32.5352122878488,1.4668985445102616],[32.62004615609066,1.365362826136304],[32.70476805210785,1.2648151358483524],[32.789276548641475,1.1652453813262353],[32.87347021843263,1.0666434702497813],[32.95724763422242,0.9689993102988189],[33.04050736875193,0.8723028091531762],[33.12314799476227,0.7765438744926817],[33.20506808499452,0.681712413997164],[33.2861662121898,0.5877983353464514],[33.36634094908919,0.4947915462203723],[33.4454908684338,0.4026819542987552],[33.45884182993148,0.38658173702688553],[33.47140288519985,0.3703692882370769],[33.48319804066097,0.3540818366319776],[33.49425130273689,0.3377566109142362],[33.504586677849666,0.321430839786501],[33.51422817242133,0.30514175195142046],[33.52319979287396,0.2889265761116429],[33.531525545629584,0.27282254096981684],[33.53922943711027,0.25686687522859064],[33.54633547373806,0.2410968075906127],[33.55286766193502,0.2255495667585314],[33.55885000812318,0.21026238143499518],[33.5643065187246,0.19527248032265243],[33.569261200161336,0.18061709212415156],[33.57373805885544,0.16633344554214097],[33.57776110122896,0.15245876927926907],[33.58135433370395,0.13903029203818426],[33.58454176270246,0.12608524252153497],[33.587347394646535,0.11366084943196957],[33.58979523595824,0.10179434147213648],[33.591909293059615,0.09052294734468411],[33.59371357237272,0.07988389575226085],[33.5952320803196,0.06991441539751511],[33.596488823322304,0.06065173498309531],[33.5975078078029,0.052133083211649854],[33.59831304018341,0.04439568878582713],[33.59892852688592,0.03747678040827555],[33.59937827433246,0.03141358678164352],[33.59968628894509,0.026243336608579453],[33.59987657714585,0.022003258591731745],[33.599973145356806,0.018730581433748804],[33.6,0.016462533837279036],[33.59369742866533,0.014819402407794825],[33.575009232870116,0.013371266227517074],[33.54426468992755,0.012109226619457295],[33.50179307715083,0.011024384906627],[33.447923671853154,0.010107842412037696],[33.382985751347704,0.009350700458700895],[33.30730859294769,0.008744060369628106],[33.221221473966295,0.008279023467830838],[33.12505367171672,0.007946691076320603],[33.01913446351216,0.00773816451810891],[32.9037931266658,0.007644545116207269],[32.77935893849086,0.00765693419362719],[32.6461611763005,0.007766433073380183],[32.50452911740794,0.007964143078477759],[32.354792039126366,0.008241165531931426],[32.197279218768976,0.008588601756752695],[32.032319933648964,0.008997553075953076],[31.860243461079516,0.00945912081254408],[31.681379078373837,0.009964406289537216],[31.49605606284512,0.010504510829943994],[31.304603691806555,0.011070535756775923],[31.107351242571344,0.011653582393044513],[30.904627992452674,0.012244752061761278],[30.69676321876375,0.012835146085937723],[30.484086198817753,0.01341586578858536],[30.266926209927888,0.0139780124927157],[30.045612529407347,0.01451268752134025],[29.820474434569324,0.015010992197470523],[29.591841202727014,0.015464027844118029],[29.360042111193614,0.015862895784294277],[29.125406437282315,0.016198697341010773],[28.888263458306312,0.016462533837279036],[26.57764588162922,0.018965101397756402],[24.266929117823206,0.02146156513491553],[22.57834454572855,0.3644781241499069],[22.57834454572855,0.36417903680731323]]] +bt.translate(penguinBelly, [34.72, 14.89]) +bt.cover(logo, penguinBelly) +bt.join(logo, penguinBelly) +const penguinBack = [[[49.96035936066899,0.33053877036049095],[49.829624841662174,0.4851275690659201],[49.69912683612014,0.6410856956614729],[49.56896590484564,0.7984301039966438],[49.4392426086414,0.9571777479209276],[49.31005750831015,1.1173455812838184],[49.181511164654644,1.2789505579348113],[49.053704138477606,1.4420096317234004],[48.92673699058178,1.6065397564990802],[48.800710281769895,1.7725578861113456],[48.67572457284469,1.9400809744096907],[48.55188042460891,2.1091259752436105],[48.42927839786529,2.2797098424625992],[48.30801905341656,2.4518495299161516],[48.18820295206545,2.6255619914537616],[48.069930654614716,2.8008641809249246],[47.95330272186709,2.9777730521791343],[47.838419714625296,3.156305559065886],[47.725382193692084,3.3364786554346737],[47.61429071987018,3.5183092951349924],[47.505245853962336,3.701814432016336],[47.39834815677127,3.8870110199281993],[47.293698189099736,4.073916012720077],[47.19139651175046,4.262546364241464],[47.09154368552618,4.452919028341854],[46.99424027122964,4.645050958870742],[46.899586829663576,4.8389591096776225],[46.80768392163071,5.03466043461199],[46.7186321079338,5.2321718875233385],[46.63253194937557,5.431510422261163],[46.54948400675875,5.632692992674959],[46.4695888408861,5.83573655261422],[46.392947012560334,6.04065805592844],[46.32311291523391,6.2362611347764805],[46.25289674553058,6.440438718560378],[46.18239924809675,6.65254434928753],[46.111721167578814,6.871931568965336],[46.04096324862316,7.097953919601193],[45.970226235876176,7.3299649432025005],[45.89961087398425,7.567318181776655],[45.829217907593794,7.8093671773310565],[45.75914808135118,8.055465471873102],[45.6895021399028,8.304966607410192],[45.620380827895055,8.557224125949721],[45.55188488997433,8.811591569499091],[45.48411507078703,9.0674224800657],[45.41717211497952,9.324070399656945],[45.35115676719821,9.580888870280223],[45.286169772089494,9.837231433942934],[45.222311874299756,10.092451632652477],[45.15968381847539,10.345903008416247],[45.09838634926279,10.596939103241647],[45.03852021130834,10.844913459136071],[44.98018614925844,11.089179618106922],[44.92348490775947,11.329091122161593],[44.868517231457844,11.564001513307485],[44.81538386499993,11.793264333551997],[44.76418555303213,12.016233124902525],[44.715023040200826,12.23226142936647],[44.66799707115243,12.44070278895123],[44.623208390533314,12.6409107456642],[44.58075774298988,12.832238841512781],[44.54074587316851,13.014040618504373],[44.50327352571561,13.18566961864637],[44.46844144527756,13.346479383946173],[44.420277469198474,13.573154429940937],[44.37186845020309,13.807792458202508],[44.323225997822625,14.050172075708202],[44.2743617215883,14.300071889435337],[44.22528723103134,14.557270506361233],[44.17601413568294,14.821546533463204],[44.12655404507433,15.09267857771857],[44.07691856873672,15.370445246104646],[44.027119316201336,15.654625145598752],[43.97716789699939,15.944996883178204],[43.92707592066209,16.24133906582032],[43.87685499672066,16.543430300502422],[43.82651673470632,16.851049194201817],[43.77607274415027,17.163974353895835],[43.725534634583745,17.481984386561784],[43.67491401553795,17.804857899176987],[43.62422249654411,18.132373498718756],[43.57347168713343,18.464309792164418],[43.522673196837125,18.80044538649128],[43.47183863518642,19.140558888676665],[43.42097961171253,19.484428905697893],[43.370107735946675,19.831834044532275],[43.319234617420065,20.182552912157135],[43.268371865663916,20.536364115549787],[43.21753109020944,20.893046261687548],[43.16672390058787,21.252377957547736],[43.1159619063304,21.61413781010767],[43.06525671696826,21.978104426344668],[43.01461994203266,22.344056413236043],[42.96406319105483,22.711772377759118],[42.913598073565964,23.08103092689121],[42.863236199097294,23.451610667609632],[42.85155512615667,23.550567098623223],[42.8415384345257,23.661400779682662],[42.833095047834334,23.782681103169722],[42.8261338897125,23.912977461466163],[42.82056388379015,24.050859246953745],[42.81629395369722,24.194895852014234],[42.81323302306365,24.34365666902939],[42.81129001551939,24.495711090380976],[42.81037385469437,24.649628508450757],[42.81039346421854,24.803978315620494],[42.81125776772185,24.95732990427195],[42.81287568883422,25.10825266678689],[42.81515615118561,25.255315995547072],[42.81800807840595,25.397089282934264],[42.821340394125194,25.532141921330222],[42.82506202197328,25.659043303116714],[42.829081885580145,25.7763628206755],[42.83330890857573,25.882669866388344],[42.837652014589985,25.97653383263701],[42.84202012725284,26.05652411180326],[42.84632217019425,26.121210096268854],[42.85046706704414,26.169161178415557],[42.85436374143247,26.19894675062513],[42.857921116989175,26.209136205279336],[42.8610481173442,26.19829893475994],[42.863653666127476,26.165004331448706],[42.86564668696895,26.10782178772739],[42.86693610349857,26.02532069597776],[42.86743083934627,25.91607044858158],[42.867039818142,25.778640437920604],[42.86567196351569,25.611600056376606],[42.863236199097294,25.41351869633134],[42.85701953252591,25.069105447946374],[42.84806892473025,24.719510591858178],[42.836449489333,24.365154081177238],[42.82222633995685,24.006455869014037],[42.805464590224496,23.64383590847907],[42.78622935375861,23.277714152682815],[42.76458574418189,22.908510554735766],[42.74059887511702,22.53664506774841],[42.7143338601867,22.162537644831225],[42.685855813013596,21.78660823909471],[42.65522984722041,21.409276803649345],[42.622521076429834,21.030963291605616],[42.58779461426454,20.652087656074013],[42.55111557434723,20.273069850165022],[42.51254907030059,19.894329826989132],[42.472160215747294,19.516287539656826],[42.43001412431005,19.139362941278595],[42.38617590961154,18.763975984964922],[42.34071068527444,18.390546623826296],[42.293683564921444,18.019494810973207],[42.245159662175254,17.651240499516135],[42.195204090658535,17.286203642565575],[42.14388196399399,16.924804193232006],[42.09125839580431,16.56746210462592],[42.03739849971217,16.214597329857803],[41.98236738934026,15.86662982203814],[41.92623017831128,15.523979534277423],[41.8690519802479,15.187066419686133],[41.81089790877282,14.85631043137476],[41.75183307750873,14.532131522453792],[41.69192260007831,14.214949646033713],[41.63123159010425,13.905184755225012],[41.60075839177571,13.754659192420881],[41.570546505129926,13.609673540779864],[41.54057952505437,13.470099899880228],[41.51084104643655,13.335810369300237],[41.48131466416396,13.20667704861816],[41.451983973124086,13.08257203741226],[41.42283256820442,12.963367435260805],[41.393844044292464,12.848935341742063],[41.36500199627571,12.739147856434295],[41.336290019041634,12.633877078915772],[41.30769170747775,12.532995108764759],[41.27919065647154,12.43637404555952],[41.2507704609105,12.343885988878323],[41.22241471568213,12.255403038299432],[41.194107015673914,12.170797293401117],[41.165830955773345,12.089940853761641],[41.137570130867914,12.012705818959272],[41.109308135845126,11.938964288572276],[41.08102856559246,11.868588362178915],[41.05271501499742,11.801450139357462],[41.02435107894749,11.737421719686179],[40.995920352330174,11.67637520274333],[40.96740643003295,11.618182688107186],[40.93879290694333,11.562716275356012],[40.91006337794879,11.509848064068072],[40.88120143793683,11.459450153821631],[40.85219068179495,11.41139464419496],[40.82301470441063,11.365553634766323],[40.79365710067137,11.321799225113985],[40.76410146546466,11.280003514816212],[40.734331393678,11.240038603451271],[40.70433048019888,11.20177659059743],[40.67626896575021,11.167073567380523],[40.64748085368056,11.131901447800203],[40.617978997958275,11.096361231872315],[40.58777625255171,11.060553919612703],[40.55688547142923,11.024580511037213],[40.525319508559186,10.988542006161689],[40.493091217909935,10.952539405001977],[40.46021345344983,10.91667370757392],[40.426699069147226,10.881045913893367],[40.39256091897048,10.84575702397616],[40.357811856887956,10.810908037838145],[40.32246473686801,10.776599955495165],[40.28653241287898,10.742933776963069],[40.25002773888924,10.710010502257699],[40.21296356886713,10.677931131394901],[40.175352756781024,10.64679666439052],[40.13720815659927,10.6167081012604],[40.098542622290225,10.587766442020389],[40.05936900782225,10.560072686686329],[40.019700167163684,10.533727835274066],[39.9795489542829,10.508832887799446],[39.938928223148245,10.485488844278313],[39.897850827728085,10.463796704726512],[39.85632962199077,10.443857469159889],[39.81437745990465,10.425772137594288],[39.772007195438086,10.409641710045554],[39.72923168255944,10.395567186529533],[39.68606377523706,10.38364956706207],[39.6425163274393,10.37398985165901],[39.59860219313453,10.366689040336196],[39.55433422629109,10.361848133109476],[39.50972528087735,10.359568129994694],[39.45512171075229,10.3604660894597],[39.39933685350333,10.36539739318886],[39.34238123851037,10.374231725647139],[39.2842653951533,10.386838771299502],[39.22499985281201,10.403088214610916],[39.16459514086641,10.422849740046347],[39.10306178869639,10.445993032070762],[39.04041032568184,10.472387775149128],[38.976651281202656,10.501903653746409],[38.911795184638734,10.534410352327575],[38.84585256536998,10.569777555357588],[38.778833952776274,10.607874947301417],[38.71074987623752,10.648572212624027],[38.641610865133615,10.691739035790386],[38.571427448844446,10.73724510126546],[38.50021015674991,10.784960093514215],[38.42796951822991,10.834753697001617],[38.35471606266434,10.886495596192633],[38.28046031943309,10.940055475552228],[38.20521281791605,10.99530301954537],[38.12898408749313,11.052107912637025],[38.05178465754422,11.110339839292157],[37.97362505744921,11.169868483975737],[37.894515816588,11.230563531152727],[37.81446746434048,11.292294665288097],[37.733490530086556,11.354931570846809],[37.65159554320612,11.418343932293833],[37.56879303307906,11.482401434094134],[37.485093529085276,11.546973760712678],[37.40050756060466,11.611930596614432],[37.315045657017116,11.677141626264362],[37.22871834770253,11.742476534127436],[37.02323684432259,11.906226867322049],[36.82203003783891,12.084207639284404],[36.624983945185576,12.275808007399336],[36.431984583296675,12.480417129051679],[36.242917969106294,12.697424161626264],[36.05767011954851,12.926218262507927],[35.87612705155741,13.1661885890815],[35.69817478206708,13.416724298731816],[35.523699328011595,13.677214548843711],[35.35258670632505,13.947048496802015],[35.18472293394152,14.225615299991563],[35.01999402779509,14.51230411579719],[34.85828600481986,14.80650410160373],[34.69948488194989,15.107604414796013],[34.543476676119276,15.414994212758874],[34.39014740426211,15.728062652877146],[34.239383083312454,16.046198892535664],[34.09106973020441,16.36879208911926],[33.945093361872054,16.69523140001277],[33.80133999524948,17.024905982601023],[33.65969564727075,17.35720499426886],[33.520046334869974,17.6915175924011],[33.382278074981215,18.027232934382596],[33.246276884538574,18.363740177598167],[33.11192878047612,18.700428479432652],[32.979119779727945,19.03668699727088],[32.847735899228134,19.371904888497692],[32.71766315591077,19.705471310497916],[32.58878756670993,20.03677542065639],[32.460995148559704,20.36520637635794],[32.334171918394176,20.690153334987407],[32.20820389314743,21.01100545392962],[32.084799766876046,21.327239770071543],[31.96562196873829,21.63917479003037],[31.8505145842275,21.94748934169302],[31.739321698837017,22.25286225294641],[31.631887398060172,22.555972351677454],[31.52805576739031,22.85749846577307],[31.427670892320766,23.158119423120176],[31.33057685834488,23.458514051605686],[31.23661775095599,23.75936117911652],[31.145637655647434,24.061339633539593],[31.05748065791255,24.36512824276182],[30.971990843244676,24.67140583467012],[30.889012297137153,24.980851237151413],[30.808389105083318,25.294143278092612],[30.729965352576507,25.61196078538063],[30.65358512511006,25.934982586902393],[30.579092508177315,26.26388751054481],[30.50633158727161,26.5993543841948],[30.435146447886286,26.942062035739283],[30.365381175514678,27.29268929306517],[30.29687985565013,27.65191498405938],[30.22948657378597,28.020417936608837],[30.163045415415546,28.398876978600445],[30.09740046603219,28.78797093792113],[30.032395811129245,29.188378642457806],[29.967875536200047,29.600778920097387],[29.903683726737935,30.025850598726795],[29.839664468236247,30.464272506232945],[29.77566184618832,30.91672347050275],[29.711519946087495,31.383882319423133],[29.64708285342711,31.866427880881005],[29.5821946537005,32.36503898276329],[29.51976659620992,32.86166549658401],[29.462741093526596,33.338464156525625],[29.41098065183104,33.79642494278726],[29.364347777303752,34.23653783556804],[29.322704976125237,34.6597928150671],[29.285914754475996,35.06717986148357],[29.253839618536535,35.45968895501657],[29.226342074487356,35.83831007586522],[29.20328462850896,36.204033204228665],[29.18452978678186,36.55784832030603],[29.169940055486546,36.90074540429644],[29.15937794080353,37.23371443639902],[29.15270594891331,37.557745396812905],[29.1497865859964,37.87382826573722],[29.150482358233287,38.182953023371084],[29.15465577180449,38.48610964991364],[29.162169332890503,38.784288125564004],[29.172885547671832,39.078478430521315],[29.18666692232898,39.3696705449847],[29.20337596304245,39.658854449153274],[29.222875175992748,39.94702012322618],[29.245027067360375,40.23515754740254],[29.269694143325832,40.524256701881484],[29.296738910069628,40.81530756686213],[29.326023873772264,41.10930012254362],[29.357411540614244,41.40722434912508],[29.390764416776065,41.710070226805634],[29.42594500843824,42.018827735784406],[29.46281582178127,42.33448685626053],[29.50123936298565,42.658037568433144],[29.541078138231896,42.990469852501356],[29.5821946537005,43.332773688664304],[29.628381414090732,43.68227866145698],[29.682950110173458,44.0352483872497],[29.74501370302028,44.39107475230416],[29.8136851537028,44.749149642882045],[29.888077423292614,45.10886494524507],[29.96730347286132,45.46961254565491],[30.050476263480526,45.83078433037328],[30.13670875622182,46.19177218566187],[30.225113912156814,46.55196799778236],[30.3148046923571,46.91076365299647],[30.40489405789428,47.26755103756589],[30.494494969839952,47.6217220377523],[30.582720389265717,47.97266853981741],[30.668683277243176,48.31978243002292],[30.75149659484393,48.662455594630515],[30.83027330313957,49.00007991990189],[30.904126363201705,49.33204729209875],[30.972168736101935,49.65774959748279],[31.033513382911853,49.9765787223157],[31.08727326470306,50.287926552859176],[31.132561342547163,50.59118497537492],[31.168490577515755,50.88574587612462],[31.194173930680435,51.171001141369985],[31.208724363112808,51.446342657372696],[31.211254835884468,51.71116231039446],[31.20087831006702,51.96485198669696],[31.17670774673206,52.2068035725419],[31.13785610695119,52.43640895419099],[31.083436351796006,52.6530600179059],[31.012561442338114,52.85614864994834],[30.92434433964911,53.045066736580004],[30.81789800480059,53.219206164062584],[30.697142805381137,53.379707890145376],[30.566854472595974,53.52842942585308],[30.42745733715799,53.66580916314419],[30.27937572978007,53.79228549397721],[30.12303398117512,53.908296810310645],[29.958856422056016,54.01428150410298],[29.78726738313566,54.110677967312725],[29.608691195126937,54.19792459189838],[29.423552188742736,54.27645976981844],[29.232274694695956,54.3467218930314],[29.035283043699483,54.40914935349577],[28.83300156646621,54.464180543170045],[28.625854593709022,54.51225385401272],[28.41426645614082,54.5538076779823],[28.198661484474485,54.589280407037286],[27.979464009422916,54.619110433136164],[27.757098361699,54.64373614823745],[27.53198887201563,54.66359594429964],[27.304559871085697,54.679128213281224],[27.07523568962209,54.6907713471407],[26.8444406583377,54.698963737836586],[26.61259910794542,54.70414377732737],[26.38013536915814,54.706749857571545],[26.147473772688755,54.707220370527615],[25.91503864925015,54.70599370815409],[25.683254329555215,54.70350826240945],[25.45254514431685,54.70020242525221],[25.22333542424794,54.69651458864086],[24.996049500061375,54.69288314453391],[24.771111702470048,54.689746484889845],[24.548946362186847,54.68754300166717],[24.32997780992467,54.686711086824396],[24.11907566143802,54.686844761417696],[23.92027307942915,54.687228536862975],[23.732739715032544,54.6878365406583],[23.5556452193827,54.68864290030175],[23.388159243614105,54.68962174329139],[23.229451438861254,54.6907471971253],[23.078691456258635,54.69199338930154],[22.935048946940746,54.693334447318186],[22.797693562042074,54.69474449867331],[22.665794952697112,54.696197670864976],[22.53852277004035,54.69766809139127],[22.415046665206283,54.699129887750246],[22.2945362893294,54.70055718743999],[22.176161293544194,54.70192411795856],[22.059091328985158,54.703204806804045],[21.942496046786783,54.7043733814745],[21.82554509808356,54.705403969467994],[21.70740813400998,54.706270698282616],[21.58725480570054,54.70694769541642],[21.464254764289723,54.707409088367484],[21.337577660912025,54.70762900463388],[21.20639314670194,54.707581571713675],[21.06987087279396,54.70724091710495],[20.927180490322574,54.70658116830576],[20.777491650422274,54.70557645281419],[20.619974004227554,54.704200898128306],[20.453797202872902,54.70242863174618],[20.27813089749281,54.70023378116588],[20.092144739221776,54.697590473885484],[19.895008379194287,54.694472837403055],[19.685891468544835,54.69085499921667],[19.463963658407913,54.686711086824396],[19.356217692996697,54.68469446461137],[19.25611052308084,54.68297717786628],[19.16319967330516,54.68158901708432],[19.077042668314483,54.680559772760695],[18.997197032753636,54.67991923539059],[18.923220291267437,54.67969719546921],[18.854669968500712,54.67992344349175],[18.791103589098284,54.68062776995341],[18.73207867770498,54.681839965349376],[18.67715275896562,54.68358982017485],[18.625883357525026,54.68590712492502],[18.577827998028027,54.6888216700951],[18.532544205119443,54.69236324618028],[18.489589503444098,54.69656164367574],[18.448521417646816,54.701446653076694],[18.40889747237242,54.70704806487833],[18.370275192265733,54.713395669575846],[18.33221210197158,54.72051925766444],[18.29426572613479,54.72844861963931],[18.255993589400177,54.73721354599565],[18.216953216412566,54.74684382722865],[18.176702131816786,54.75736925383352],[18.13479786025766,54.768819616305436],[18.090797926380006,54.781224705139614],[18.044259854828653,54.79461431083124],[17.99474117024842,54.80901822387551],[17.941799397284136,54.82446623476763],[17.884992060580622,54.840988134002785],[17.8238766847827,54.85861371207617],[17.758010794535195,54.877372759482995],[17.686951914482933,54.89729506671844],[17.610257569270736,54.91841042427771],[17.532848979632178,54.94056851692278],[17.459838889665665,54.96353287938496],[17.39110000412477,54.98720450626822],[17.326505027763073,55.01148439217657],[17.265926665334156,55.03627353171399],[17.209237621591598,55.06147291948447],[17.156310601288975,55.08698355009201],[17.10701830917987,55.11270641814058],[17.061233450017863,55.13854251823418],[17.01882872855653,55.1643928449768],[16.979676849549453,55.19015839297243],[16.943650517750207,55.21574015682505],[16.910622437912377,55.24103913113866],[16.88046531478954,55.26595631051725],[16.85305185313527,55.29039268956479],[16.828254757703156,55.31424926288529],[16.80594673324677,55.33742702508273],[16.786000484519697,55.35982697076111],[16.768288716275514,55.38135009452441],[16.752684133267795,55.40189739097661],[16.739059440250127,55.42136985472171],[16.727287341976087,55.43966848036371],[16.717240543199253,55.45669426250657],[16.708791748673207,55.472348195754314],[16.701813663151523,55.486531274710906],[16.696178991387786,55.49914449398034],[16.69176043813557,55.51008884816661],[16.688430708148463,55.51926533187371],[16.686062506180033,55.52657493970562],[16.68452853698387,55.53191866626632],[16.683701505313543,55.535197506159825],[16.68345411592264,55.53631245399011],[16.683006193291153,55.53899970353615],[16.681681285296957,55.54694829221384],[16.679507681790465,55.55998848008253],[16.67651367262209,55.57795052720156],[16.67272754764224,55.600664693630286],[16.66817759670132,55.62796123942806],[16.662892109649746,55.659670424654216],[16.656899376337925,55.69562250936811],[16.65022768661627,55.73564775362909],[16.642905330335182,55.7795764174965],[16.634960597345085,55.8272387610297],[16.626421777496375,55.87846504428801],[16.617317160639473,55.93308552733082],[16.60767503662478,55.990930470217435],[16.597523695302712,56.051830133007236],[16.586891426523675,56.115614775759546],[16.57580652013808,56.182114658533735],[16.564297265996338,56.251160041389134],[16.55239195394886,56.3225811843851],[16.54011887384605,56.39620834758097],[16.527506315538325,56.47187179103611],[16.51458256887609,56.54940177480986],[16.501375923709755,56.62862855896156],[16.487914669889733,56.70938240355056],[16.474227097266432,56.79149356863622],[16.460341495690265,56.874792314277876],[16.446286155011634,56.95910890053488],[16.43208936508096,57.04427358746658],[16.41777941574864,57.13011663513232],[16.40338459686509,57.21646830359145],[16.388933198280725,57.30315885290332],[16.37445350984595,57.39001854312728],[16.357494746771184,57.48000894198831],[16.335700397691106,57.57600072515064],[16.30921183837618,57.67771635337623],[16.27817044459687,57.784878287427034],[16.24271759212365,57.897208988065],[16.202994656726982,58.0144309160521],[16.159143014177335,58.136266532150266],[16.111304040245173,58.26243829712146],[16.059619110700968,58.39266867172764],[16.00422960131518,58.526680116730766],[15.945276887858283,58.664195092892776],[15.882902346100739,58.804936060975635],[15.817247351813016,58.948625481741296],[15.748453280765583,59.09498581595171],[15.676661508728905,59.243739524368834],[15.60201341147345,59.39460906775462],[15.524650364769684,59.54731690687103],[15.444713744388073,59.70158550248001],[15.362344926099086,59.85713731534351],[15.277685285673188,60.01369480622349],[15.190876198880849,60.170980435881916],[15.102059041492533,60.32871666508072],[15.011375189278708,60.48662595458187],[14.918966018009838,60.64443076514731],[14.824972903456395,60.80185355753901],[14.729537221388844,60.95861679251892],[14.63280034757765,61.11444293084898],[14.534903657793283,61.26905443329115],[14.435988527806206,61.4221737606074],[14.33619633338689,61.57352337355967],[14.2356684503058,61.72282573290991],[14.134546254333403,61.869803299420084],[14.029859825640871,62.01432732362555],[13.918865563575192,62.15639548424407],[13.802044322670545,62.29592825282961],[13.679876957461108,62.432846100936146],[13.552844322481064,62.567069500117654],[13.421427272264593,62.69851892192811],[13.286106661345874,62.827114837921485],[13.147363344259091,62.95277771965177],[13.005678175538419,63.075428038672925],[12.861532009718044,63.194986266538926],[12.715405701332143,63.31137287480376],[12.567780104914897,63.4245083350214],[12.419136075000488,63.534313118745814],[12.269954466123094,63.64070769753098],[12.120716132816897,63.74361254293088],[11.971901929616077,63.842948126499486],[11.823992711054816,63.93863491979077],[11.677469331667293,64.03059339435872],[11.532812645987688,64.1187440217573],[11.390503508550182,64.20300727354049],[11.251022773888955,64.28330362126226],[11.11485129653819,64.3595535364766],[10.982469931032064,64.43167749073747],[10.854359531904759,64.49959595559886],[10.731000953690456,64.56322940261474],[10.612875050923334,64.62249830333907],[10.500462678137575,64.67732312932584],[10.394244689867358,64.72762435212904],[10.294701940646865,64.77332244330263],[10.202315285010275,64.81433787440058],[10.11756557749177,64.85059111697689],[10.04093367262553,64.8820026425855],[9.95431974693797,64.9142808875325],[9.840410385534433,64.95286674093754],[9.700874424335959,64.99727935357498],[9.537380699263583,65.04703787621922],[9.35159804623834,65.10166145964463],[9.145195301181266,65.16066925462557],[8.919841300013397,65.22358041193642],[8.67720487865577,65.28991408235157],[8.41895487302942,65.35918941664539],[8.146760119055385,65.43092556559223],[7.8622894526546965,65.50464167996651],[7.567211709748394,65.57985691054256],[7.263195726257512,65.65609040809477],[6.951910338103088,65.73286132339753],[6.635024381206155,65.8096888072252],[6.314206691487752,65.88609201035216],[5.991126104868913,65.96159008355278],[5.667451457270675,66.03570217760144],[5.344851584614073,66.10794744327252],[5.024995322820144,66.17784503134038],[4.709551507809923,66.2449140925794],[4.400188975504446,66.30867377776397],[4.09857656182475,66.36864323766844],[3.806383102691869,66.4243416230672],[3.5252774340268407,66.47528808473463],[3.2569283917507006,66.5210017734451],[3.003004811784484,66.56100183997297],[2.7651755300492273,66.59480743509265],[2.5451093824659665,66.62193770957848],[2.3444752049557374,66.64191181420483],[2.164941833439576,66.65424889974611],[2.008178103838518,66.65846811697668],[1.8664729651149032,66.65767406057388],[1.7309304366154374,66.6553943502562],[1.6014436094014388,66.65178267435964],[1.4779055745342256,66.64699272122024],[1.3602094230751163,66.641178179174],[1.2482482460854294,66.63449273655698],[1.1419151346264833,66.62709008170516],[1.0411031797595964,66.6191239029546],[0.9457054725460873,66.61074788864131],[0.8556151040472743,66.6021157271013],[0.7707251653244758,66.59338110667062],[0.6909287474390101,66.58469771568528],[0.616118941452196,66.57621924248132],[0.5461888384253516,66.56809937539472],[0.4810315294197955,66.56049180276155],[0.420540105496846,66.55355021291781],[0.36460765771782166,66.54742829419953],[0.3131272771440408,66.54227973494274],[0.265992054836822,66.53825822348345],[0.22309508185748347,66.53551744815769],[0.1843294492673438,66.5342110973015],[0.1495882481277214,66.53449285925086],[0.11876456949993464,66.53651642234185],[0.09175150444530199,66.54043547491045],[0.06844214402514188,66.5464037052927],[0.04872957930077273,66.55457480182463],[0.032506901333512965,66.56510245284225],[0.01966720118468102,66.57814034668161],[0.010103569915595322,66.5938421716787],[0.0037090985875743,66.61236161616955],[0.00037687826193638315,66.63385236849021],[0,66.65846811697668],[0.006065728582667461,66.69888672725762],[0.02091367765701849,66.74257322035257],[0.044233804181203554,66.78925148526935],[0.07571606511337312,66.83864541101578],[0.11505041741167765,66.8904788865997],[0.16192681803426762,66.94447580102891],[0.21603522393929345,67.00036004331126],[0.27706559208490567,67.05785550245457],[0.34470787942925474,67.11668606746665],[0.418652042930491,67.17657562735533],[0.4985880395467651,67.23724807112843],[0.5842058262362274,67.29842728779379],[0.6751953599570284,67.35983716635921],[0.7712465976673186,67.42120159583253],[0.8720494963252484,67.48224446522158],[0.9772940128889682,67.54268966353416],[1.0866701043166287,67.60226107977813],[1.19986772756638,67.66068260296127],[1.316576839596373,67.71767812209144],[1.4364873973647578,67.77297152617646],[1.5592893578296851,67.82628670422413],[1.6846726779493053,67.8773475452423],[1.8123273146817687,67.92587793823878],[1.941943224985226,67.9716017722214],[2.0732103658178276,68.01424293619797],[2.205818694137724,68.05352531917634],[2.3394581669030656,68.08917281016431],[2.4738187410720025,68.12090929816974],[2.608590373602686,68.1484586722004],[2.743463021453266,68.17154482126415],[2.878126641581893,68.1898916343688],[3.0122711909467172,68.2032230005222],[3.2442600948338596,68.21920823000089],[3.4905757559873907,68.23125846905612],[3.7501574591745945,68.2395381926592],[4.021944489162757,68.24421187578142],[4.304876130719162,68.24544399339409],[4.597891668611093,68.24339902046853],[4.8999303876058375,68.23824143197604],[5.209931572470679,68.23013570288792],[5.526834507972902,68.21924630817549],[5.849578478879791,68.20573772281004],[6.177102769958631,68.1897744217629],[6.508346665976707,68.17152088000536],[6.842249451701303,68.15114157250872],[7.177750411899705,68.1288009742443],[7.5137888313391965,68.10466356018341],[7.849303994787062,68.07889380529734],[8.183235187010588,68.05165618455742],[8.514521692777059,68.02311517293492],[8.842102796853757,67.99343524540119],[9.16491778400797,67.96278087692751],[9.48190593900698,67.93131654248519],[9.792006546618074,67.89920671704554],[10.094158891608537,67.86661587557988],[10.38730225874565,67.83370849305949],[10.670375932796702,67.8006490444557],[10.942319198528976,67.7676020047398],[11.202071340709756,67.7347318488831],[11.448571644106327,67.70220305185693],[11.680759393485975,67.67018008863256],[11.897573873615984,67.63882743418132],[12.097954369263638,67.6083095634745],[12.280840165196224,67.57879095148344],[12.46054155991163,67.55768806279234],[12.651534527962992,67.55173211820876],[12.85297875856154,67.56005978068335],[13.064033940918494,67.58180771316673],[13.283859764245086,67.61611257860955],[13.511615917752541,67.66211103996244],[13.746462090652088,67.71893976017604],[13.98755797215495,67.78573540220098],[14.234063251472355,67.8616346289879],[14.485137617815528,67.94577410348744],[14.739940760395701,68.03729048865023],[14.997632368424094,68.1353204474269],[15.25737213111194,68.23900064276812],[15.51831973767046,68.34746773762448],[15.779634877310883,68.45985839494664],[16.04047723924444,68.57530927768524],[16.300006512682348,68.6929570487909],[16.55738238683584,68.81193837121427],[16.811764550916145,68.93138990790598],[17.062312694134484,69.05044832181667],[17.30818650570209,69.16825027589698],[17.54854567483018,69.28393243309753],[17.78254989072999,69.39663145636898],[18.00935884261274,69.50548400866195],[18.228132219689662,69.60962675292707],[18.438029711171982,69.708196352115],[18.638211006270925,69.80032946917635],[18.827835794197714,69.88516276706177],[19.006063764163585,69.9618329087219],[19.172054605379756,70.02947655710737],[19.324968007057457,70.08723037516882],[19.463963658407913,70.13423102585686],[19.596313413608804,70.17435355714989],[19.729808044272854,70.21209695848393],[19.864413510825383,70.24753372117691],[20.000095773691704,70.28073633654678],[20.13682079329714,70.31177729591148],[20.27455453006701,70.34072909058892],[20.413262944426638,70.36766421189705],[20.55291199680134,70.3926551511538],[20.69346764761643,70.41577439967709],[20.834895857297234,70.43709444878488],[20.97716258626907,70.45668778979507],[21.120233794957258,70.47462691402559],[21.264075443787117,70.49098431279441],[21.408653493183966,70.50583247741943],[21.55393390357312,70.5192438992186],[21.699882635379907,70.53129106950982],[21.846465649029643,70.54204647961107],[21.993648904947644,70.55158262084025],[22.141398363559237,70.55997198451529],[22.28967998528973,70.56728706195415],[22.438459730564453,70.57360034447474],[22.58770355980872,70.57898432339499],[22.73737743344785,70.58351149003285],[22.887447311907167,70.58725433570623],[23.03787915561199,70.59028535173307],[23.18863892498763,70.59267702943133],[23.339692580459417,70.5945018601189],[23.491006082452664,70.59583233511373],[23.64254539139269,70.59674094573376],[23.79427646770482,70.59730018329691],[23.94616527181437,70.59758253912112],[24.098177764146655,70.59766050452431],[24.252428642289075,70.59671281132469],[24.410928709998558,70.59385588180348],[24.573488086954747,70.58906874297321],[24.739916892837275,70.58233042184642],[24.910025247325784,70.57361994543565],[25.083623270099906,70.56291634075342],[25.260521080839286,70.55019863481226],[25.440528799223557,70.53544585462473],[25.62345654493236,70.51863702720331],[25.809114437645327,70.49975117956059],[25.997312597042104,70.47876733870906],[26.18786114280232,70.45566453166128],[26.380570194605617,70.43042178542976],[26.575249872131636,70.40301812702704],[26.77171029506001,70.37343258346566],[26.96976158307038,70.34164418175813],[27.16921385584238,70.30763194891702],[27.36987723305565,70.27137491195482],[27.57156183438983,70.23285209788409],[27.774077779524553,70.19204253371737],[27.97723518813946,70.14892524646714],[28.180844179914185,70.103479263146],[28.38471487452837,70.05568361076645],[28.588657391661652,70.00551731634101],[28.79248185099367,69.95295940688223],[28.995998372204056,69.89798890940264],[29.199017074972453,69.84058485091477],[29.4013480789785,69.78072625843116],[29.60280150390183,69.71839215896432],[29.80318746942208,69.65356157952681],[30.002316095218895,69.58621354713114],[30.199997500971907,69.51632708878984],[30.393585325817217,69.446377259569],[30.58075397229609,69.37874009029285],[30.761793846886313,69.31324497190191],[30.936995356065676,69.24972129533677],[31.10664890631197,69.187998451538],[31.271044904102986,69.12790583144614],[31.430473755916516,69.0692728260018],[31.585225868230346,69.0119288261455],[31.73559164752227,68.95570322281783],[31.881861500270077,68.90042540695936],[32.024325832951554,68.84592476951063],[32.1632750520445,68.79203070141224],[32.298999564026694,68.73857259360473],[32.43178977537594,68.68537983702868],[32.561936092570015,68.63228182262465],[32.689728922086715,68.57910794133319],[32.81545867040383,68.5256875840949],[32.93941574399915,68.47185014185033],[33.061890549350466,68.41742500554003],[33.18317349293557,68.36224156610459],[33.30355498123225,68.30612921448456],[33.4233254207183,68.2489173416205],[33.5427752178715,68.190435338453],[33.66219477916965,68.13051259592261],[33.781874511090535,68.06897850496989],[33.90210482011195,68.00566245653543],[34.02317611271169,67.94039384155977],[34.14537879536753,67.87300205098349],[34.26900327455727,67.80331647574715],[34.3943399567587,67.73116650679131],[34.52167924844961,67.65638153505655],[34.65131155610779,67.57879095148344],[34.760469508960156,67.51133407764858],[34.869123666495966,67.44112149335636],[34.97732042772442,67.3681027693214],[35.08510619165471,67.29222747625826],[35.19252735729603,67.21344518488158],[35.29963032365757,67.13170546590597],[35.40646148974852,67.04695789004602],[35.51306725457808,66.95915202801636],[35.619494017155446,66.86823745053158],[35.72578817648981,66.77416372830629],[35.83199613159036,66.67688043205511],[35.93816428146629,66.57633713249264],[36.0443390251268,66.47248340033349],[36.15056676158108,66.36526880629226],[36.25689388983832,66.25464292108359],[36.36336680890772,66.14055531542203],[36.470031917798465,66.02295556002224],[36.57693561551975,65.9017932255988],[36.68412430108078,65.77701788286633],[36.79164437349074,65.64857910253944],[36.89954223175882,65.51642645533272],[37.00786427489422,65.38050951196081],[37.116656901906126,65.24077784313829],[37.22596651180373,65.09718101957976],[37.33583950359625,64.94966861199987],[37.44632227629285,64.79819019111319],[37.55746122890273,64.64269532763434],[37.66930276043509,64.48313359227794],[37.78189326989912,64.31945455575858],[37.89527915630402,64.15160778879088],[38.00950681865898,63.97954286208944],[38.124622655973184,63.80320934636887],[38.232318858706876,63.634763405764886],[38.33954423225292,63.46273966870925],[38.44639219656888,63.286929780550075],[38.55295617161231,63.107125386635495],[38.65932957734076,62.923118132313625],[38.76560583371181,62.7346996629326],[38.871878360683,62.54166162384054],[38.978240578211896,62.34379566038556],[39.08478590625606,62.140893417915784],[39.19160776477305,61.93274654177935],[39.29879957372042,61.71914667732437],[39.40645475305574,61.49988546989897],[39.51466672273656,61.27475456485127],[39.62352890272044,61.0435456075294],[39.73313471296494,60.80605024328148],[39.84357757342762,60.56206011745564],[39.954950904066045,60.31136687539999],[40.067348124837764,60.05376216246267],[40.18086265570034,59.78903762399179],[40.29558791661133,59.516984905335484],[40.411617327528305,59.237395651841865],[40.52904430840881,58.950061508859065],[40.64796227921041,58.6547741217352],[40.76846465989066,58.351325135818406],[40.89064487040712,58.0395061964568],[41.01459633071736,57.719108948998496],[41.14041246077893,57.38992503879163],[41.26818668054939,57.05174611118433],[41.39801240998629,56.7043638115247],[41.52998306904721,56.347569785160886],[41.6641920776897,55.981155677440995],[41.8007328558713,55.604913133713154],[41.97477973171767,55.114993062258144],[42.15469141628621,54.59244549688251],[42.34049147453368,54.03718192496905],[42.532203471416786,53.449113833900554],[42.729850971892255,52.828152711059815],[42.93345754091681,52.174210043829625],[43.14304674344718,51.487197319592774],[43.3586421444401,50.76702602573206],[43.58026730885227,50.013607649630266],[43.807945801640436,49.226853678670196],[44.04170118776132,48.40667560023463],[44.281557032171634,47.55298490170637],[44.527536899828114,46.6656930704682],[44.77966435568749,45.74471159390292],[45.03796296470647,44.78995195939331],[45.3024562918418,43.801325654322184],[45.57316790205019,42.778744166072315],[45.85012136028836,41.7221189820265],[46.13334023151305,40.63136158956754],[46.42284808068098,39.50638347607821],[46.71866847274887,38.34709612894132],[47.020824972673445,37.15341103553965],[47.32934114541144,35.925239683255995],[47.64424055591957,34.66249355947315],[47.965546769154564,33.3650841515739],[48.293283350073146,32.03292294694105],[48.62747386363204,30.665921432957383],[48.96814187478797,29.263991097005697],[49.31531094849766,27.827043426468776],[49.66900464971784,26.35498990872942],[50.029246543405236,24.847742031170412],[50.39606019451657,23.305211281174554],[50.55651989001902,22.62983088830609],[50.71377369193098,21.969977680732374],[50.86777507272034,21.325834288963506],[51.018477504855,20.697583343509585],[51.165834460802834,20.085407474880718],[51.30979941303173,19.489489313587],[51.45032583400958,18.910011490138537],[51.587367196204276,18.347156635045422],[51.72087697208369,17.80110737881776],[51.850808634115715,17.27204635196565],[51.977115654768234,16.760156184999193],[52.09975150650914,16.265619508428493],[52.218669661806324,15.788618952763644],[52.33382359312767,15.32933714851475],[52.44516677294106,14.88795672619191],[52.55265267371438,14.464660316305226],[52.656234767915514,14.0596305493648],[52.75586652801236,13.673050055880728],[52.8515014264728,13.305101466363114],[52.94309293576472,12.955967411322057],[53.030594528356005,12.625830521267659],[53.11395967671455,12.314873426710019],[53.193141853308234,12.023278758159236],[53.26809453060494,11.751229146125414],[53.338771181072566,11.498907221118653],[53.40512527717899,11.26649561364905],[53.4671102913921,11.05417695422671],[53.524679696179795,10.86213387336173],[53.577786964009945,10.69054900156421],[53.62638556735045,10.539604969344255],[53.670428978669186,10.409484407211963],[53.70987067043404,10.300369945677431],[53.729710183949685,10.248819050357868],[53.749952443592036,10.19847551610984],[53.770660912861274,10.149259418441149],[53.791899055257545,10.101090832859603],[53.81373033428101,10.053889834873006],[53.83621821343183,10.007576499989163],[53.859426156210155,9.96207090371588],[53.88341762611615,9.91729312156096],[53.90825608664997,9.873163229032206],[53.934005001311775,9.829601301637426],[53.96072783360172,9.786527414884423],[53.98848804701997,9.743861644281004],[54.01734910506667,9.701524065334972],[54.047374471241994,9.65943475355413],[54.07862760904609,9.617513784446286],[54.11117198197911,9.575681233519244],[54.14507105354123,9.53385717628081],[54.180388287232596,9.491961688238785],[54.217187146553364,9.449914844900976],[54.2555310950037,9.407636721775187],[54.29548359608375,9.365047394369224],[54.33710811329369,9.322066938190893],[54.380468110133656,9.278615428747996],[54.42562705010383,9.234612941548338],[54.47264839670435,9.189979552099725],[54.52159561343538,9.144635335909962],[54.572532163797085,9.098500368486851],[54.62552151128961,9.051494725338202],[54.68062711941313,9.003538481971814],[54.73791245166779,8.954551713895496],[54.797440971553755,8.904454496617051],[54.859276142571176,8.853166905644285],[54.924609115139845,8.799856948415304],[54.999447560147935,8.739698949159495],[55.083485398585786,8.672922450929033],[55.176416551443744,8.599756996776097],[55.277934939712146,8.520432129752864],[55.38773448438135,8.435177392911513],[55.50550910644169,8.34422232930422],[55.63095272688352,8.247796481983162],[55.76375926669718,8.146129394000518],[55.90362264687301,8.039450608408464],[56.05023678840137,7.927989668259176],[56.20329561227259,7.811976116604836],[56.36249303947702,7.691639496497617],[56.527522991005014,7.567209350989699],[56.6980793878469,7.438915223133257],[56.87385615099304,7.306986655980472],[57.05454720143377,7.171653192583518],[57.239846460159434,7.033144375994575],[57.42944784816038,6.891689749265819],[57.62304528642695,6.747518855449426],[57.820332695949496,6.600861237597577],[58.02100399771836,6.451946438762447],[58.22475311272388,6.301004001996214],[58.43127396195641,6.148263470351055],[58.64026046640629,5.993954386879148],[58.85140654706387,5.8383062946326705],[59.064406124919486,5.6815487366638],[59.27895312096349,5.523911256024713],[59.49474145618623,5.365623395767587],[59.711465051578045,5.2069146989446],[59.92881782812928,5.04801470860793],[60.146493706830285,4.889152967809753],[60.37042975888051,4.725449532256009],[60.582650848451976,4.569393972621296],[60.78345902675779,4.420664223879928],[60.97315634501106,4.278938221006222],[61.1520448544249,4.143893898974493],[61.32042660621242,4.015209192759056],[61.47860365158674,3.8925620373342267],[61.62687804176095,3.7756303676743204],[61.76555182794818,3.6640921187536524],[61.89492706136153,3.5576252255465377],[62.015305793214104,3.4559076230272927],[62.12699007471903,3.358617246170232],[62.23028195708941,3.2654320299496713],[62.32548349153836,3.1760299093399262],[62.41289672927898,3.0900888193153118],[62.49282372152438,3.0072866948501433],[62.56556651948769,2.927301470918737],[62.631427174382,2.849811082495407],[62.690707737420425,2.7744934645544697],[62.743710259816076,2.70102655207024],[62.79073679278207,2.6290882800170334],[62.83208938753152,2.5583565833691657],[62.868070095277524,2.4885093971009518],[62.89898096723319,2.4192246561867075],[62.92512405461165,2.3501802956007474],[62.946801408626,2.281054250317388],[62.96431508048935,2.211524455310944],[62.97796712141481,2.141268845555731],[62.9880595826155,2.0699653560260645],[62.994894515304516,1.9972919216962595],[62.99877397069498,1.9229264775406318],[63,1.8465469585334966],[62.99994280655567,1.8016169638907968],[62.999719407271584,1.7573050046764043],[62.99925207372109,1.7135675742056142],[62.998463077477524,1.6703611657937218],[62.99727469011424,1.6276422727560222],[62.99560918320458,1.5853673884078108],[62.99338882832189,1.5434930060643821],[62.99053589703952,1.501975619041032],[62.98697266093081,1.460771720653055],[62.982621391569104,1.419837804215747],[62.97740436052776,1.379130363044402],[62.971243839380115,1.3386058904543163],[62.96406209969951,1.2982208797607846],[62.9557814130593,1.2579318242791018],[62.946324051032825,1.2176952173245634],[62.935612285193436,1.1774675522124642],[62.92356838711447,1.1372053222580998],[62.910114628369286,1.096865020776765],[62.89517328053121,1.0564031410837549],[62.878666615173614,1.015776176494365],[62.86051690386982,0.9749406203238901],[62.84064641819319,0.9338529658876255],[62.81897742971706,0.8924697065008663],[62.79543221001477,0.8507473354789077],[62.769933030659686,0.8086423461370448],[62.742402163225144,0.7661112317905727],[62.712761879284486,0.7231104857547866],[62.68093445041105,0.6795966013449817],[62.6468421481782,0.635526071876453],[62.610407244159276,0.5908553906644959],[62.57155200992762,0.5455410510244052],[62.53019871705658,0.4995395462714763],[62.49950990811915,0.46691321017472415],[62.46935054879064,0.4363152149735663],[62.43968467724053,0.407669791377681],[62.41047633163828,0.3809011700967465],[62.381689550153375,0.3559335818404411],[62.3532883709553,0.332691257318443],[62.32523683221352,0.3110984272404305],[62.297498972097515,0.29107932231608186],[62.27003882877676,0.2725581732550753],[62.24282044042074,0.2554592107670891],[62.21580784519893,0.2397066655618015],[62.1889650812808,0.22522476834889077],[62.16225618683583,0.2119377498380352],[62.1356452000335,0.19976984073891302],[62.10909615904329,0.18864527176120247],[62.082573102034665,0.17848827361458186],[62.05604006717711,0.16922307700872938],[62.0294610926401,0.16077391265332336],[62.002800216593116,0.153065011258042],[61.97602147720563,0.1460206035325636],[61.94908891264711,0.1395649201865664],[61.92196656108706,0.13362219192972866],[61.894618460694936,0.12811664947172863],[61.86700864964021,0.12297252352224458],[61.83910116609238,0.11811404479095476],[61.8108600482209,0.11346544398753745],[61.782249334195264,0.10895095182167087],[61.75323306218495,0.10449479900303332],[61.72377527035942,0.10002121624130303],[61.69383999688816,0.09545443424615828],[61.66339127994064,0.0907186837272773],[61.632393157686344,0.08573819539433837],[61.60550632866074,0.08247367318692442],[61.56512117994477,0.0792449775815702],[61.511605097098375,0.07605632077727012],[61.445325465681506,0.07291191497301855],[61.366649671254095,0.0698159723678099],[61.275945099376095,0.06677270516063853],[61.17357913560745,0.06378632555049886],[61.05991916550809,0.06086104573638526],[60.935332574637975,0.05800107791729213],[60.80018674855704,0.05521063429221385],[60.65484907282522,0.05249392706014482],[60.49968693300247,0.04985516842007943],[60.33506771464874,0.04729857057101206],[60.16135880332395,0.04482834571193711],[59.978927584588064,0.042448706041848965],[59.78814144400101,0.04016386375974201],[59.589367767122745,0.037978031064610646],[59.38297393951321,0.035895420155449255],[59.16932734673233,0.03392024323125223],[58.94879537434007,0.03205671249101395],[58.721745407896364,0.030309040133728826],[58.48854483296115,0.02868143835839123],[58.24956103509439,0.02717811936399556],[58.00516139985601,0.025803295349536202],[57.75571331280595,0.024561178514007544],[57.50158415950417,0.023455981056403983],[57.2431413255106,0.022491915175719905],[56.98075219638519,0.021673193070949698],[56.71478415768787,0.02100402694108775],[56.445604594978604,0.02048862898512846],[56.173580893817324,0.020131211402066206],[55.89908043976397,0.019935986390895388],[50.281759297753055,0.0023394954756810193],[49.96035936066899,0.33053877036049095]]] +bt.translate(penguinBack, [17.99, 14.90]) +bt.cover(logo, penguinBack) +bt.join(logo, penguinBack) +const penguinBowtie = [[[0.22710299491882321,4.370603662717713],[0.2419553392785019,4.377198689097622],[0.25809677521465346,4.382928418809115],[0.2754857185602304,4.387806586813076],[0.29408058514818547,4.3918469280703905],[0.3138397908114712,4.395063177541942],[0.33472175138304006,4.397469070188618],[0.3566848826958448,4.3990783409713],[0.379687600582838,4.399904724850876],[0.40368832087697226,4.399961956788229],[0.4286454594112001,4.399263771744245],[0.45451743201847417,4.397823904679808],[0.48126265453174705,4.3956560905558035],[0.5088395427839714,4.392774064333116],[0.5372065126080997,4.389191560972631],[0.5663219798370847,4.384922315435233],[0.5961443603038787,4.379980062681807],[0.6266320698414347,4.374378537673238],[0.657743524282705,4.36813147537041],[0.6894371394606423,4.361252610734209],[0.7216713312081992,4.35375567872552],[0.7544045153583283,4.345654414305227],[0.7875951077439821,4.3369625524342155],[0.8212015241981134,4.32769382807337],[0.8551821805536747,4.317861976183576],[0.8894954926436184,4.307480731725718],[0.9240998763008974,4.296563829660681],[0.9589537473584641,4.28512500494935],[0.9940155216492712,4.273177992552609],[1.0292436150062712,4.260736527431345],[1.0645964432624169,4.247814344546441],[1.1000324222506606,4.234425178858783],[1.135509967803955,4.2205827653292545],[1.17207644462178,4.20587266765624],[1.2106943604769185,4.1899264377397225],[1.2511973804997978,4.172826484388952],[1.293419169820845,4.154655216413175],[1.3371933935704872,4.135495042621642],[1.3823537168791515,4.1154283718236],[1.4287338048772653,4.094537612828298],[1.4761673226952552,4.072905174444986],[1.5244879354635485,4.050613465482911],[1.5735293083125723,4.027744894751322],[1.6231251063727539,4.004381871059468],[1.6731089947745204,3.9806068032165967],[1.7233146386482985,3.9565021000319573],[1.7735757031245156,3.9321501703147987],[1.8237258533335987,3.907633422874369],[1.8735987544059751,3.8830342665199167],[1.9230280714720718,3.858435110060691],[1.971847469662316,3.8339183623059396],[2.0198906141071347,3.809566432064912],[2.066991169936955,3.7854617281468563],[2.112982802282204,3.761686659361021],[2.1576991762733084,3.738323634516655],[2.2009739570406963,3.7154550624230067],[2.242640809714794,3.693163351889325],[2.282533399426029,3.671530911724858],[2.3204853913048282,3.6506401507388544],[2.3563304504816185,3.630573477740563],[2.3899022420868277,3.6114133015392325],[2.4210344312508822,3.5932420309441113],[2.4495606831042096,3.576142074764448],[2.4753146627772367,3.560195841809491],[2.4981300354003904,3.545485740888489],[2.5204995423206125,3.5301344256907212],[2.544906682986766,3.512338355311749],[2.57117125968216,3.49228981518545],[2.5991130746901034,3.4701810907457],[2.628551930293906,3.446204467426378],[2.6593076287768778,3.42055223066136],[2.6911999724223277,3.393416665884524],[2.7240487635135646,3.3649900585297474],[2.757673804333899,3.3354646940309065],[2.7918948971666393,3.3050328578218795],[2.8265318442950953,3.273886835336543],[2.8614044480025767,3.242218912008775],[2.896332510572392,3.2102213732724523],[2.931135834287852,3.1780865045614517],[2.9656342214322646,3.1460065913096513],[2.99964747428894,3.114173918950928],[3.032995395141188,3.082780772919159],[3.0654977862723167,3.052019438648222],[3.096974449965637,3.022082201571993],[3.127245188504457,2.993161347124351],[3.156129804172087,2.9654491607391718],[3.1834480992518364,2.9391379278503336],[3.2090198760270137,2.9144199338917134],[3.2326649367809295,2.891487464297188],[3.254203083796892,2.8705328045006353],[3.2734541193582114,2.851748239935932],[3.290237845748197,2.835326056036956],[3.304374065250158,2.8214585382375845],[3.315682580147404,2.810337971971694],[3.323983192723244,2.8021566426731623],[3.329095705260988,2.7971068357758666],[3.330839920043945,2.7953808367136843],[3.331720099144149,2.7951656303369417],[3.33433291548863,2.7945383266430324],[3.3386367876431904,2.7935263987864345],[3.3445901341736315,2.792157319921625],[3.352151373645756,2.790458563203083],[3.3612789246253665,2.788457601785285],[3.371931205678265,2.786181908822709],[3.3840666353702544,2.7836589574698336],[3.397643632267136,2.7809162208811355],[3.4126206149347125,2.7779811722110934],[3.428956001938786,2.7748812846141844],[3.446608211845159,2.7716440312448865],[3.4655356632196344,2.7682968852576777],[3.485696774628013,2.7648673198070353],[3.5070499646360984,2.7613828080474376],[3.529553651809692,2.757870823133362],[3.5531662547145966,2.7543588382192863],[3.5778461919166147,2.7508743264596887],[3.6035518819815477,2.747444761009046],[3.6302417434751986,2.7440976150218375],[3.657874194963369,2.7408603616525395],[3.686407655011862,2.7377604740556305],[3.71580054218648,2.7348254253855884],[3.746011275053024,2.7320826887968903],[3.7769982721772974,2.729559737444015],[3.808719952125102,2.727284044481439],[3.84113473346224,2.725283083063641],[3.874201034754514,2.7235843263450987],[3.907877274567727,2.7222152474802894],[3.9421218714676796,2.7212033196236916],[3.9768932440201747,2.7205760159297823],[4.012149810791016,2.7203608095530396],[4.047405539592727,2.7205760159297823],[4.08217618279159,2.7212033196236916],[4.116420153575017,2.7222152474802894],[4.1500958651304245,2.7235843263450987],[4.1831617306452245,2.725283083063641],[4.215576163306832,2.727284044481439],[4.247297576302662,2.729559737444015],[4.278284382820129,2.7320826887968903],[4.308494996046647,2.7348254253855884],[4.337887829169631,2.7377604740556305],[4.366421295376494,2.7408603616525395],[4.394053807854652,2.7440976150218375],[4.420743779791518,2.747444761009046],[4.446449624374509,2.7508743264596887],[4.471129754791036,2.7543588382192863],[4.494742584228515,2.757870823133362],[4.517246525874361,2.7613828080474376],[4.538599992915987,2.7648673198070353],[4.55876139854081,2.7682968852576777],[4.577689155936241,2.7716440312448865],[4.595341678289696,2.7748812846141844],[4.61167737878859,2.7779811722110934],[4.626654670620336,2.7809162208811355],[4.640231966972351,2.7836589574698336],[4.652367681032047,2.786181908822709],[4.663020225986838,2.788457601785285],[4.67214801502414,2.790458563203083],[4.679709461331367,2.792157319921625],[4.685662978095934,2.7935263987864345],[4.689966978505254,2.7945383266430324],[4.692579875746741,2.7951656303369417],[4.693460083007812,2.7953808367136843],[4.695204297790769,2.7971068357758666],[4.700316810328513,2.8021566426731623],[4.708617422904354,2.810337971971694],[4.719925937801599,2.8214585382375845],[4.73406215730356,2.835326056036956],[4.750845883693546,2.851748239935932],[4.770096919254865,2.8705328045006353],[4.791635066270828,2.891487464297188],[4.815280127024743,2.9144199338917134],[4.840851903799921,2.9391379278503336],[4.86817019887967,2.9654491607391718],[4.8970548145473,2.993161347124351],[4.927325553086121,3.022082201571993],[4.95880221677944,3.052019438648222],[4.991304607910569,3.082780772919159],[5.024652528762817,3.114173918950928],[5.058665781619492,3.1460065913096513],[5.093164168763906,3.1780865045614517],[5.127967492479365,3.2102213732724523],[5.162895555049181,3.242218912008775],[5.197768158756662,3.273886835336543],[5.2324051058851175,3.3050328578218795],[5.266626198717859,3.3354646940309065],[5.300251239538192,3.3649900585297474],[5.33310003062943,3.393416665884524],[5.3649923742748795,3.42055223066136],[5.395748072757851,3.446204467426378],[5.425186928361653,3.4701810907457],[5.453128743369597,3.49228981518545],[5.479393320064991,3.512338355311749],[5.503800460731145,3.5301344256907212],[5.5261699676513665,3.545485740888489],[5.54898533943342,3.560195841809491],[5.574739315453916,3.576142074764448],[5.60326555914944,3.5932420309441113],[5.6343977339565745,3.6114133015392325],[5.667969503311905,3.630573477740563],[5.703814530652016,3.6506401507388544],[5.74176647941349,3.671530911724858],[5.781659013032913,3.693163351889325],[5.823325794946867,3.7154550624230067],[5.8666004885919385,3.738323634516655],[5.911316757404711,3.761686659361021],[5.9573082648217675,3.7854617281468563],[6.004408674279693,3.809566432064912],[6.0524516492150715,3.8339183623059396],[6.101270853064488,3.858435110060691],[6.150699949264526,3.8830342665199167],[6.2005726012517695,3.907633422874369],[6.250722472462803,3.9321501703147987],[6.30098322633421,3.9565021000319573],[6.351188526302575,3.9806068032165967],[6.401172035804484,4.004381871059468],[6.450767418276518,4.027744894751322],[6.4998083371552635,4.050613465482911],[6.548128455877303,4.072905174444986],[6.595561437879223,4.094537612828298],[6.641940946597606,4.1154283718236],[6.687100645469036,4.135495042621642],[6.730874197930097,4.154655216413175],[6.773095267417374,4.172826484388952],[6.813597517367452,4.1899264377397225],[6.8522146112169136,4.20587266765624],[6.888780212402343,4.2205827653292545],[6.924043675372377,4.234210005477416],[6.958863531425595,4.246971963350461],[6.993239784194156,4.25888237248173],[7.0271724373102185,4.269954966404566],[7.06066149440594,4.280203478652311],[7.0937069591134785,4.289641642758306],[7.126308835064992,4.298283192255894],[7.1584671258926384,4.306141860678417],[7.190181835228577,4.313231381559217],[7.221452966704964,4.3195654884316355],[7.252280523953959,4.325157914829014],[7.282664510607719,4.330022394284697],[7.312604930298402,4.334172660332023],[7.3421017866581675,4.337622446504338],[7.371155083319172,4.340385486334981],[7.399764823913574,4.342475513357294],[7.427931012073532,4.343906261104621],[7.455653651431202,4.344691463110302],[7.482932745618745,4.3448448529076815],[7.509768298268318,4.344380164030099],[7.536160313012077,4.343311130010897],[7.562108793482183,4.341651484383419],[7.5876137433107935,4.3394149606810055],[7.612675166130066,4.336615292437],[7.637293065572157,4.333266213184743],[7.661467445269226,4.329381456457576],[7.6851983088534315,4.324974755788844],[7.708485659956931,4.320059844711886],[7.731329502211883,4.314650456760046],[7.753729839250445,4.308760325466665],[7.775686674704774,4.302403184365084],[7.79720001220703,4.295592766988648],[7.818049358297139,4.285522613460216],[7.838025460392236,4.2695327524533235],[7.857142179366201,4.247856675473031],[7.87541337609291,4.220727874024396],[7.8928529114462425,4.18837983961248],[7.909474646300077,4.151046063742342],[7.92529244152829,4.108960037919041],[7.94032015800476,4.062355253647638],[7.954571656603365,4.011465202433191],[7.968060798197984,3.956523375780762],[7.980801443662494,3.897763265195408],[7.992807453870773,3.8354183621821902],[8.004092689696698,3.769722158246168],[8.01467101201415,3.700908144892401],[8.024556281697004,3.6292098136259483],[8.03376235961914,3.5548606559518703],[8.042303106654435,3.4780941633752263],[8.050192383676766,3.399143827401076],[8.057444051560013,3.3182431395344794],[8.064071971178054,3.2356255912804954],[8.070090003404765,3.1515246741441842],[8.075512009114027,3.0661738796306053],[8.080351849179713,2.9798066992448184],[8.084623384475707,2.892656624491883],[8.088340475875883,2.804957146876859],[8.09151698425412,2.716941757904806],[8.094166770484298,2.628843949080783],[8.096303695440291,2.5408972119098507],[8.09794161999598,2.453335037897068],[8.099094405025243,2.366390918547495],[8.099775911401956,2.280298345366191],[8.1,2.1952908098582156],[8.099995379638857,2.1100680853590346],[8.099963037110864,2.023348276678098],[8.09987525024917,1.9353923457093516],[8.09970429688692,1.8464612543467411],[8.099422454857267,1.7568159644842127],[8.099002001993357,1.6667174380157121],[8.098415216128341,1.5764266368351856],[8.097634375095367,1.4862045228365788],[8.096631756727582,1.3963120579138377],[8.09537963885814,1.3070102039609084],[8.093850299320183,1.2185599228717365],[8.092016015946864,1.1312221765402684],[8.089849066571333,1.0452579268604496],[8.087321729026733,0.9609281357262263],[8.08440628114622,0.8784937650315443],[8.081075000762938,0.7982157766703496],[8.077300165710039,0.720355132536588],[8.07305405382067,0.6451727945242056],[8.068308942927978,0.5729297245271483],[8.063037110865116,0.503886884439362],[8.057210835465229,0.43830523615479267],[8.050802394561469,0.37644574156738614],[8.043784065986983,0.3185693625710884],[8.03612812757492,0.26493706105984544],[8.02780685715843,0.21580979892760313],[8.018792532570659,0.1714485380683074],[8.00905743164476,0.13211424037590422],[7.998573832213878,0.09806786774433948],[7.987314012111164,0.06957038206755914],[7.9752502491697665,0.046882745239509124],[7.962354821222833,0.030265919154135366],[7.948600006103515,0.019980865705383797],[7.933313511428422,0.01360108536910065],[7.91590621266514,0.00849863457269766],[7.896475139423273,0.004632309137469015],[7.875117321312427,0.001960904884708903],[7.851929787942208,0.0004432176357115125],[7.827009568922221,0.00003804321177103276],[7.800453693862073,0.000704177434181652],[7.7723591923713675,0.0024004161242375584],[7.7428230940597125,0.005085555103232942],[7.711942428536712,0.008718390192461989],[7.679814225411973,0.013257717213218887],[7.646535514295101,0.018662331986797828],[7.6122033247957,0.024891030334493],[7.576914686523377,0.03190260807759859],[7.540766629087738,0.039655861037408785],[7.503856182098388,0.048109585035217776],[7.466280375164933,0.05722257589231976],[7.428136237896978,0.0669536294300089],[7.38952079990413,0.07726154146957942],[7.350531090795993,0.08810510783232547],[7.311264140182174,0.09944312433954126],[7.2718169776722785,0.111234386812521],[7.232286632875911,0.12343769107255884],[7.192770135402679,0.13601183294094898],[7.1533645148621865,0.14891560823898561],[7.11416680086404,0.16210781278796293],[7.075274023017846,0.1755472424091751],[7.036783210933208,0.18919269292391636],[6.998791394219733,0.20300296015348082],[6.961395602487027,0.21693683991916277],[6.924692865344695,0.2309531280422563],[6.888780212402343,0.24501062034405566],[6.852644304803106,0.25972373810373045],[6.8152608473785214,0.2756866596523652],[6.776713010191451,0.29283071317486264],[6.737083963304758,0.31108722685612533],[6.696456876781303,0.33038752888105605],[6.654914920683949,0.35066294743455745],[6.61254126507556,0.37184481070153214],[6.569419080018997,0.39386444686688277],[6.525631535577122,0.4166531841155121],[6.481261801812797,0.44014235063232277],[6.436393048788886,0.46426327460221745],[6.39110844656825,0.4889472842100987],[6.345491165213752,0.5141257076408694],[6.299624374788254,0.539729873079432],[6.2535912453546185,0.5656911087106893],[6.207474946975707,0.5919407427195439],[6.1613586497143835,0.6184101032908985],[6.115325523633509,0.6450305186096559],[6.069458738795947,0.6717333168607185],[6.023841465264558,0.6984498262289891],[5.978556873102206,0.7251113748993704],[5.933688132371753,0.751649291056765],[5.889318413136061,0.7779949028860756],[5.845530885457992,0.804079538572205],[5.802408719400409,0.8298345263000557],[5.760035085026174,0.8551911942545304],[5.71849315239815,0.8800808706205318],[5.677866091579198,0.9044348835829624],[5.638237072632182,0.9281845613267252],[5.599689265619963,0.9512612320367226],[5.562305840605403,0.9735962238978574],[5.5261699676513665,0.9951208650950322],[5.490479086933191,1.0164257324825485],[5.454441735427826,1.0381014374434927],[5.418154938903171,1.0600793063117635],[5.381715723127126,1.0822906654212603],[5.308768136892468,1.1271391596995273],[5.272453817969653,1.1496389475360957],[5.23637518286705,1.172097530949486],[5.200629257352556,1.1944462362735977],[5.165313067194074,1.2166163898423292],[5.130523638159502,1.23853931798958],[5.09635799601674,1.260146347049249],[5.06291316653369,1.2813688033552353],[5.030286175478249,1.302138013241438],[4.99857404861832,1.3223853030417558],[4.967873811721802,1.3420419990900883],[4.938282490556594,1.3610394277203341],[4.909897110890597,1.3793089152663924],[4.8828146984917105,1.3967817880621625],[4.8571322791278355,1.413389372441543],[4.832946878566872,1.4290629947384332],[4.810355522576719,1.4437339812867322],[4.789455236925278,1.457333658420339],[4.770343047380447,1.4697933524731526],[4.7531159797101274,1.481044389779072],[4.73787105968222,1.4910180966719964],[4.724705313064623,1.4996457994858248],[4.713715765625238,1.506858824554456],[4.704999443131964,1.5125884982117896],[4.698653371352702,1.5167661467917242],[4.694774576055352,1.519323096628159],[4.693460083007812,1.520190674054993],[4.692794750689063,1.520405851979831],[4.69079875247553,1.521033072739465],[4.687472086481284,1.5220448668115751],[4.682814750820398,1.523413764673842],[4.676826743606943,1.5251122968039454],[4.669508062954992,1.527112993679566],[4.660858706978615,1.529388385778384],[4.650878673791885,1.5319110035780796],[4.639567961508874,1.5346533775563331],[4.626926568243652,1.5375880381908247],[4.612954492110293,1.5406875159592346],[4.597651731222868,1.5439243413392434],[4.581018283695448,1.547271044808531],[4.563054147642106,1.5507001568447778],[4.543759321176912,1.554184207925664],[4.52313380241394,1.55769572852887],[4.501177589467261,1.561207249132076],[4.477890680450946,1.5646913002129623],[4.4532730734790675,1.5681204122492092],[4.427324766665697,1.5714671157184967],[4.400045758124906,1.5747039410985053],[4.371436045970768,1.5778034188669154],[4.341495628317352,1.580738079501407],[4.310224503278732,1.5834804534796605],[4.277622668968979,1.586003071279356],[4.243690123502165,1.588278463378174],[4.2084268649923615,1.5902791602537947],[4.17183289155364,1.5919776923838982],[4.133908201300073,1.593346590246165],[4.094652792345732,1.5943583843182751],[4.054066662804689,1.594985605077909],[4.012149810791016,1.595200783002747],[3.970232993434183,1.594985605077909],[3.9296468963846563,1.5943583843182751],[3.8903915178263557,1.593346590246165],[3.8524668559432027,1.5919776923838982],[3.815872908919118,1.5902791602537947],[3.780609674938023,1.588278463378174],[3.746677152183838,1.586003071279356],[3.7140753388404844,1.5834804534796605],[3.682804233091883,1.580738079501407],[3.652863833121955,1.5778034188669154],[3.6242541371146215,1.5747039410985053],[3.596975143253803,1.5714671157184967],[3.5710268497234208,1.5681204122492092],[3.5464092547073958,1.5646913002129623],[3.5231223563896488,1.561207249132076],[3.5011661529541014,1.55769572852887],[3.480540642584674,1.554184207925664],[3.4612458234652874,1.5507001568447778],[3.443281693779863,1.547271044808531],[3.426648251712322,1.5439243413392434],[3.411345495446585,1.5406875159592346],[3.397373423166573,1.5375880381908247],[3.3847320330562067,1.5346533775563331],[3.3734213232994077,1.5319110035780796],[3.3634412920800965,1.529388385778384],[3.3547919375821946,1.527112993679566],[3.3474732579896225,1.5251122968039454],[3.341485251486301,1.523413764673842],[3.336827916256152,1.5220448668115751],[3.333501250483095,1.521033072739465],[3.331505252351053,1.520405851979831],[3.330839920043945,1.520190674054993],[3.3293105520540847,1.519323096628159],[3.324814857728779,1.5167661467917242],[3.3174914515344422,1.5125884982117896],[3.307478947937488,1.506858824554456],[3.294915961404331,1.4996457994858248],[3.2799411064013837,1.4910180966719964],[3.2626929973950607,1.481044389779072],[3.2433102488517758,1.4697933524731526],[3.221931475237943,1.457333658420339],[3.198695291019976,1.4437339812867322],[3.1737403106642885,1.4290629947384332],[3.1472051486372945,1.413389372441543],[3.119228419405408,1.3967817880621625],[3.0899487374350425,1.3793089152663924],[3.0595047171926124,1.3610394277203341],[3.028034973144531,1.3420419990900883],[2.9956781197572124,1.3223853030417558],[2.9625727714970704,1.302138013241438],[2.928857542830519,1.2813688033552353],[2.894671048223972,1.260146347049249],[2.8601519021438433,1.23853931798958],[2.8254387190565464,1.2166163898423292],[2.7906701134284955,1.1944462362735977],[2.7559846997261044,1.172097530949486],[2.721521092415787,1.1496389475360957],[2.687417905963957,1.1271391596995273],[2.6538137548370284,1.1046668411058818],[2.620847253501415,1.0822906654212603],[2.5886570164235305,1.0600793063117635],[2.5573816580697892,1.0381014374434927],[2.5271597929066045,1.0164257324825485],[2.4981300354003904,0.9951208650950322],[2.468873879651073,0.9735962238978574],[2.4379543383605777,0.9512612320367226],[2.4054823038983155,0.9281845613267252],[2.3715686686336994,0.9044348835829624],[2.33632432493614,0.8800808706205318],[2.2998601651750503,0.8551911942545304],[2.2622870817198417,0.8298345263000557],[2.223715966939926,0.804079538572205],[2.1842577132047154,0.7779949028860756],[2.144023212883621,0.751649291056765],[2.103123358346056,0.7251113748993704],[2.0616690419614314,0.6984498262289891],[2.019771156099159,0.6717333168607185],[1.9775405931286512,0.6450305186096559],[1.9350882454193195,0.6184101032908985],[1.892525005340576,0.5919407427195439],[1.8499617652618325,0.5656911087106893],[1.8075094175525008,0.539729873079432],[1.7652788545819929,0.5141257076408694],[1.7233809687197208,0.4889472842100987],[1.681926652335096,0.46426327460221745],[1.6410267977975308,0.44014235063232277],[1.6007922974764368,0.4166531841155121],[1.561334043741226,0.39386444686688277],[1.5227629289613105,0.37184481070153214],[1.4851898455061017,0.35066294743455745],[1.448725685745012,0.33038752888105605],[1.4134813420474528,0.31108722685612533],[1.3795677067828362,0.29283071317486264],[1.3470956723205745,0.2756866596523652],[1.3161761310300788,0.25972373810373045],[1.2869199752807616,0.24501062034405566],[1.2578848807752365,0.2309531280422563],[1.2276300230296329,0.21693683991916277],[1.1962662910780635,0.20300296015348082],[1.1639045739546416,0.18919269292391636],[1.1306557606934802,0.1755472424091751],[1.096630740328692,0.16210781278796293],[1.0619404018943897,0.14891560823898561],[1.0266956344246863,0.13601183294094898],[0.9910073269536951,0.12343769107255884],[0.9549863685155286,0.111234386812521],[0.9187436481443,0.09944312433954126],[0.882390054874122,0.08810510783232547],[0.8460364777391077,0.07726154146957942],[0.8097938057733699,0.0669536294300089],[0.7737729280110215,0.05722257589231976],[0.7380847334861754,0.048109585035217776],[0.7028401112329447,0.039655861037408785],[0.6681499502854421,0.03190260807759859],[0.6341251396777806,0.024891030334493],[0.6008765684440731,0.018662331986797828],[0.5685151256184326,0.013257717213218887],[0.5371517002349719,0.008718390192461989],[0.5068971813278039,0.005085555103232942],[0.47786245793104165,0.0024004161242375584],[0.450158419078798,0.000704177434181652],[0.4238959538051858,0.00003804321177103276],[0.39918595114431804,0.0004432176357115125],[0.37613930013030766,0.001960904884708903],[0.3548668897972675,0.004632309137469015],[0.33547960917931047,0.00849863457269766],[0.3180883473105496,0.01360108536910065],[0.30280399322509766,0.019980865705383797],[0.2886146764649311,0.029835563851611544],[0.274453082238324,0.04519795001260735],[0.2603469330788357,0.06586200126921557],[0.2463239515200257,0.09162169470228053],[0.23241186009545342,0.1222710073926466],[0.21863838133867827,0.1576039164211581],[0.20503123778325968,0.19741439886865936],[0.19161815196275708,0.24149643181599473],[0.1784268464107299,0.2896439923440086],[0.16548504366073757,0.34165105753354524],[0.1528204662463395,0.39731160446544905],[0.1404608367010951,0.4564196102205644],[0.12843387755856384,0.5187690518797354],[0.1167673113523051,0.5841539065238068],[0.10548886061587835,0.6523681512336226],[0.094626247882843,0.7232057630900273],[0.08420719568675848,0.7964607191738652],[0.07425942656118423,0.8719269965659806],[0.06481066303967964,0.9493985723472179],[0.05588862765580415,1.0286694235984215],[0.0475210429431172,1.1095335274004356],[0.03973563143517822,1.1917848608341046],[0.03256011566554662,1.275217400980273],[0.026022218167781826,1.3596251249197848],[0.02014966147544328,1.4448020097334848],[0.014970168122090398,1.530542032502217],[0.010511460641282609,1.6166391703068257],[0.006801261566579341,1.7028874002281555],[0.0038672934315400194,1.7890806993470505],[0.0017372787697240708,1.8750130447443554],[0.00043894011469092215,1.9604784135009141],[0,2.045270782697571],[0.00022177999780979005,2.1309238596783873],[0.0008871200261637567,2.218898117315348],[0.001996020137448795,2.308877654159096],[0.0035484803840517996,2.400546568760274],[0.005544500818359665,2.4935889596695233],[0.007984081492759287,2.5876889254374875],[0.010867222459637558,2.682530564614808],[0.014193923771381378,2.777797975752128],[0.017964185480377634,2.873175257400089],[0.022178007639013227,2.9683465081093345],[0.026835390299675053,3.0629958264305057],[0.031936333514750004,3.156807310914246],[0.03748083733662497,3.249465060111197],[0.04346890181768685,3.3406531725720012],[0.04990052701032254,3.4300557468473016],[0.05677571296691894,3.5173568814877396],[0.06409445973986294,3.6022406750439586],[0.07185676738154143,3.6843912260666003],[0.0800626359443413,3.7634926331063068],[0.08871206548064946,3.8392289947137215],[0.0978050560428528,3.9112844094394856],[0.10734160768333821,3.9793429758342427],[0.1173217204544926,4.043088792448634],[0.12774539440870283,4.102205957833303],[0.13861262959835585,4.156378570538891],[0.1499234260758385,4.205290729116041],[0.1616777838935377,4.248626532115395],[0.17387570310384035,4.2860700780875955],[0.18651718375913331,4.317305465583286],[0.19960222591180352,4.342016793153107],[0.21313082961423788,4.359888159347702],[0.22710299491882321,4.370603662717713]]] +bt.translate(penguinBowtie, [37, 63]) +bt.join(logo, penguinBowtie) +const penguinNeck = [[[3.7099400033440837,8.083930734075265],[3.4448280041258883,8.14470232955047],[3.198835066337984,8.183034102412583],[2.9711839927425525,8.2],[2.7610975861017772,8.196673969651115],[2.5677986491778397,8.174129958704327],[2.3905099847329225,8.133441914498032],[2.2284543955292078,8.075683784370627],[2.080854684328878,8.001929515660507],[1.946933653894115,7.913253055706069],[1.8259141069871017,7.810728351845709],[1.7170188463700198,7.6954293514178245],[1.6194706748050518,7.568430001760811],[1.53249239505438,7.430804250213065],[1.455306809880187,7.283626044112983],[1.3871367220446544,7.127969330798962],[1.327204934309965,6.964908057609397],[1.274734249438301,6.795516171882686],[1.2289474701918446,6.620867620957225],[1.189067399332778,6.442036352171409],[1.154316839623284,6.260096312863636],[1.1239185938255443,6.076121450372303],[1.0970954647017412,5.891185712035805],[1.0730702550140574,5.706363045192538],[1.0510657675246748,5.5227273971809],[1.030304804995776,5.341352715339287],[1.010010170189543,5.163312947006094],[0.9894046658681582,4.989682039519719],[0.967711094793804,4.821533940218559],[0.9441522597286625,4.659942596441008],[0.9179509634349161,4.505981955525464],[0.8883300086747471,4.360725964810324],[0.8545121982103376,4.2252485716339825],[0.8161750152135254,4.0948158735862155],[0.7739095560617855,3.9640722817009655],[0.7283093113250505,3.8331591062831616],[0.6799677715732533,3.7022176576377346],[0.6294784273763268,3.5713892460696144],[0.5774347693042036,3.440815181883731],[0.5244302879268165,3.310636775385015],[0.47105847381409816,3.180995336878396],[0.4179128175359816,3.052032176668805],[0.3655868096623995,2.923888605061171],[0.31467394076328453,2.796705932360425],[0.2657677014085696,2.6706254688714965],[0.21946158216818742,2.5457885248993164],[0.17634907361207078,2.422336410748814],[0.1370236663101524,2.30041043672492],[0.10207885083236512,2.1801519131325646],[0.07210811774864168,2.0617021502766777],[0.04770495762891484,1.9452024584621892],[0.029462861043117405,1.8307941479940297],[0.017975318561182133,1.7186185291771292],[0.013835820753041794,1.6088169123164178],[0.017637858188629164,1.5015306077168256],[0.029974921437877017,1.3969009256832827],[0.05144050107071812,1.2950691765207194],[0.08262808765708525,1.1961766705340657],[0.12413117176691119,1.1003647180282519],[0.1765432439701287,1.007774629308208],[0.24045779483667054,0.9185477146788641],[0.3164683149364695,0.8328252844451505],[0.4051682948394584,0.7507486489119972],[0.5071512251155699,0.6724591183843345],[0.6230105963347369,0.5980980031670924],[0.7530923248986314,0.5277915078268584],[0.8967539176975798,0.4616113099613215],[1.0531051254374608,0.3996139278299692],[1.2212556988241523,0.34185587969228903],[1.4003153885635333,0.2883936838077685],[1.5893939453614816,0.23928385843589503],[1.7876011199238762,0.19458292183615616],[1.9940466629565952,0.1543473922680394],[2.207840325165517,0.1186337879910322],[2.42809185725652,0.0874986272646221],[2.6539110099354835,0.06099842834829658],[2.884407533908284,0.03918970950154313],[3.118691179880802,0.022128988983849254],[3.3558716985589148,0.009872785054702444],[3.595058840648501,0.0024776159735901936],[3.835362356855439,0],[4.075891997885607,0.0024964553934193586],[4.315757514444884,0.010023500413335764],[4.5540686572391476,0.022637653319236714],[4.789935176974278,0.040395432370609705],[5.022466824356151,0.06335335582694222],[5.250773350090647,0.09156794194772178],[5.473964504883644,0.12509570899243586],[5.69115003944102,0.16399317522057194],[5.901439704468653,0.20831685889161755],[6.1039432506724225,0.2581232782650602],[6.297770428758207,0.31346895160038735],[6.482030989431884,0.37441039715708646],[6.655834683399332,0.4410041331946451],[6.81829126136643,0.5133066779725507],[6.968510474039056,0.5913745497502908],[7.105602072123089,0.675264266787353],[7.239308285679277,0.7654077494948475],[7.379401415981621,0.8619243235349088],[7.525033640562937,0.964404187836784],[7.67535713695604,1.0724375413297207],[7.829524082693746,1.1856145829429663],[7.98668665530887,1.303525511605768],[8.145997032334229,1.4257605262473734],[8.306607391302634,1.5519098257970299],[8.467669909746906,1.6815636091839845],[8.628336765199858,1.8143120753374848],[8.787760135194304,1.9497454231867786],[8.945092197263062,2.0874538516611127],[9.099485128938948,2.2270275596897346],[9.250091107754777,2.368056746201892],[9.396062311243359,2.5101316101268316],[9.536550916937518,2.6528423503938017],[9.670709102370065,2.795779165932049],[9.797689045073817,2.9385322556708213],[9.916642922581588,3.080691818539366],[10.026722912426191,3.2218480534669296],[10.127081192140448,3.3615911593827605],[10.216869939257169,3.499511335216106],[10.295241331309175,3.635198779896213],[10.361347545829275,3.7682436923523293],[10.414340760350289,3.898236271513702],[10.453373152405028,4.024766716309578],[10.477596899526315,4.147425225669206],[10.486164179246959,4.265801998521833],[10.478227169099778,4.379487233796706],[10.452938046617586,4.488071130423071],[10.4094489893332,4.591143887330178],[10.346912174779433,4.688295703447273],[10.268293020020387,4.784115358511176],[10.177408511505941,4.883284018585843],[10.074654305736814,4.985533195684022],[9.96042605921371,5.090594401818468],[9.835119428437345,5.198199149001928],[9.699130069908431,5.308078949247156],[9.55285364012768,5.419965314566901],[9.396685795595804,5.533589756973915],[9.231022192813512,5.648683788480947],[9.056258488281522,5.764978921100751],[8.87279033850054,5.882206666846076],[8.681013399971278,6.0000985377296745],[8.481323329194453,6.118386045764295],[8.274115782670773,6.23680070296269],[8.059786416900948,6.355074021337611],[7.838730888385697,6.472937512901807],[7.611344853625726,6.59012268966803],[7.37802396912175,6.706361063649032],[7.139163891374478,6.821384146857562],[6.895160276884624,6.934923451306372],[6.6464087821529,7.0467104890082135],[6.393305063680017,7.156476771975836],[6.136244777966686,7.263953812221992],[5.875623581513622,7.368873121759431],[5.6118371308215345,7.470966212600904],[5.345281082391136,7.569964596759163],[5.076351092723138,7.6655997862469585],[4.805442818318254,7.757603293077041],[4.532951915677194,7.845706629262162],[4.259274041300672,7.929641306815072],[3.9848048516893972,8.009138837748523],[3.7099400033440837,8.083930734075265]]] +bt.translate(penguinNeck, [47.71, 68.15]) +bt.join(logo, penguinNeck) +const penguinEye = [[[1.1999958742868666,0],[1.2617472724895766,0.001561447967705441],[1.3226880766005076,0.006195524439438466],[1.3827428854725843,0.013826828268124126],[1.4418362979587318,0.024379958306687478],[1.4998929129118754,0.03777951340805357],[1.5568373291849402,0.05395009242514745],[1.612594145630851,0.07281629421089418],[1.667087961102533,0.09430271761821882],[1.7202433744529113,0.1183339615000464],[1.7719849845349107,0.144834624709302],[1.8222373902014564,0.17372930609891063],[1.8709251903054736,0.20494260452179738],[1.9179729836998871,0.2383991188308873],[1.9633053692376221,0.27402344787910543],[2.0068469457716036,0.31174019051937685],[2.0485223121547564,0.3514739456046266],[2.0882560672400063,0.39314931198777964],[2.125972809880278,0.4366908885217612],[2.161597138928496,0.4820232740594962],[2.195053653237586,0.5290710674539096],[2.2262669516604725,0.5777588675579268],[2.255161633050081,0.6280112732244726],[2.281662296259337,0.679752883306472],[2.3056935401411645,0.7329082966568502],[2.327179963548489,0.7874021121285321],[2.346046165334236,0.843158928574443],[2.3622167443513296,0.9001033448475076],[2.3756162994526955,0.9581599598006513],[2.386169429491259,1.017253372286799],[2.393800733319945,1.0773081811588756],[2.3984348097916777,1.1382489852698066],[2.399996257759383,1.2000003834725166],[2.3984348097916777,1.2617523044764944],[2.393800733319945,1.3226935605262413],[2.386169429491259,1.3827487540333898],[2.3756162994526955,1.4418424874095728],[2.3622167443513296,1.4998993630664232],[2.346046165334236,1.5568439834155736],[2.327179963548489,1.612600950868657],[2.3056935401411645,1.6670948678373063],[2.281662296259337,1.720250336733154],[2.255161633050081,1.7719919599678335],[2.2262669516604725,1.8222443399529773],[2.195053653237586,1.8709320791002182],[2.161597138928496,1.917979779821189],[2.125972809880278,1.9633120445275227],[2.0882560672400063,2.006853475630852],[2.0485223121547564,2.04852867554281],[2.0068469457716036,2.088262246675029],[1.9633053692376221,2.125978791439142],[1.9179729836998871,2.1616029122467824],[1.8709251903054736,2.1950592115095824],[1.8222373902014564,2.2262722916391753],[1.7719849845349107,2.255166755047193],[1.7202433744529113,2.2816672041452697],[1.667087961102533,2.3056982413450378],[1.612594145630851,2.327184469058129],[1.5568373291849402,2.346050489696178],[1.4998929129118754,2.362220905670816],[1.4418362979587318,2.3756203193936765],[1.3827428854725843,2.386173333276392],[1.3226880766005076,2.3938045497305964],[1.2617472724895766,2.398438571167921],[1.1999958742868666,2.4],[1.1382442414878287,2.398438571167921],[1.0773032808942606,2.3938045497305964],[1.0172483890189872,2.386173333276392],[0.9581549623748328,2.3756203193936765],[0.9000983974746222,2.362220905670816],[0.8431540908311799,2.346050489696178],[0.7873974389573304,2.327184469058129],[0.7329038383658982,2.3056982413450378],[0.6797486855697081,2.2816672041452697],[0.6280073770815845,2.255166755047193],[0.577755309414352,2.2262722916391753],[0.5290678790808352,2.1950592115095824],[0.48202048259385855,2.1616029122467824],[0.4366885164662467,2.125978791439142],[0.3931473772108242,2.088262246675029],[0.35147246134041565,2.04852867554281],[0.3117391653678456,2.006853475630852],[0.2740228858059386,1.9633120445275227],[0.23839901916751918,1.917979779821189],[0.20494296196541195,1.8709320791002182],[0.1737301107124415,1.8222443399529773],[0.1448358619214323,1.7719919599678335],[0.11833561210520901,1.720250336733154],[0.09430475777659617,1.6670948678373063],[0.07281869544841832,1.612600950868657],[0.053952821633500035,1.5568439834155736],[0.037782532844665886,1.4998993630664232],[0.024383225594740442,1.4418424874095728],[0.013830296396548258,1.3827487540333898],[0.006199141762913905,1.3226935605262413],[0.001565158206661945,1.2617523044764944],[0.000003742240616944059,1.2000003834725166],[0.001565158206661945,1.1382489852698066],[0.006199141762913905,1.0773081811588756],[0.013830296396548258,1.017253372286799],[0.024383225594740442,0.9581599598006513],[0.037782532844665886,0.9001033448475076],[0.053952821633500035,0.843158928574443],[0.07281869544841832,0.7874021121285321],[0.09430475777659617,0.7329082966568502],[0.11833561210520901,0.679752883306472],[0.1448358619214323,0.6280112732244726],[0.1737301107124415,0.5777588675579268],[0.20494296196541195,0.5290710674539096],[0.23839901916751918,0.4820232740594962],[0.2740228858059386,0.4366908885217612],[0.3117391653678456,0.39314931198777964],[0.35147246134041565,0.3514739456046266],[0.3931473772108242,0.31174019051937685],[0.4366885164662467,0.27402344787910543],[0.48202048259385855,0.2383991188308873],[0.5290678790808352,0.20494260452179738],[0.577755309414352,0.17372930609891063],[0.6280073770815845,0.144834624709302],[0.6797486855697081,0.1183339615000464],[0.7329038383658982,0.09430271761821882],[0.7873974389573304,0.07281629421089418],[0.8431540908311799,0.05395009242514745],[0.9000983974746222,0.03777951340805357],[0.9581549623748328,0.024379958306687478],[1.0172483890189872,0.013826828268124126],[1.0773032808942606,0.006195524439438466],[1.1382442414878287,0.001561447967705441],[1.1999958742868666,0]]] +bt.translate(penguinEye, [38.4, 80.0]) +bt.join(logo, penguinEye) +const penguinBeak = [[[6.391779408674566,4.271461767783284],[6.139445570712824,4.342273734671163],[5.890827743019002,4.409511560163259],[5.646011025210331,4.473231975337291],[5.405080516904043,4.533491711270979],[5.168121317717369,4.590347499042042],[4.935218527267541,4.6438560697282],[4.706457245171789,4.694074154407171],[4.481922571047347,4.741058484156675],[4.261699604511445,4.784865790054433],[4.045873445181313,4.825552803178163],[3.8345291926741862,4.863176254605585],[3.6277519466072934,4.897792875414418],[3.4256268065978666,4.929459396682382],[3.2282388722631374,4.958232549487195],[3.0356732432203377,4.9841690649065775],[2.848015019086698,5.007325674018249],[2.6653492994794514,5.0277591078999295],[2.487761184015828,5.045526097629337],[2.31533577231306,5.060683374284192],[2.1481581639883784,5.073287668942213],[1.986313458659015,5.083395712681121],[1.8298867559422014,5.091064236578634],[1.678963155455169,5.096349971712471],[1.5336277568151493,5.099309649160354],[1.3939656596393737,5.1],[1.2600619635450738,5.098477755309129],[1.1320017681494812,5.094799646165461],[1.0098701730698274,5.089022403646714],[0.8937522779233437,5.081202758830609],[0.7837331823272616,5.071397442794865],[0.6798979858988128,5.059663186617201],[0.5823317882552287,5.046056721375337],[0.49241252369830757,5.030202235686934],[0.4112443031693504,5.011808942999147],[0.33850091291301876,4.991061225955348],[0.2738561391739744,4.968143467198909],[0.21698376819687903,4.943240049373202],[0.16755758622639433,4.9165353551215984],[0.12525137950718201,4.88821376708747],[0.08973893428390377,4.858459667914189],[0.06069403680122129,4.827457440245126],[0.037790473303796285,4.795391466723653],[0.02070203003629046,4.762446129993141],[0.009102493243365508,4.728805812696964],[0.0026656491696831295,4.694654897478491],[0.001065284059905025,4.6601777669810955],[0.003975184158692894,4.625558803848148],[0.011069135710708437,4.5909823907230205],[0.022020924960613353,4.5566329102490855],[0.036504338153069346,4.522694745069713],[0.05419316153273811,4.489352277828276],[0.07476118134428135,4.456789891168146],[0.09788218383236075,4.425191967732694],[0.12322995524163803,4.3947428901652925],[0.1504782818167749,4.365627041109312],[0.17930094980243302,4.338028803208125],[0.2093717454432741,4.3121325591051045],[0.2403644549839599,4.288122691443619],[0.27195286466915203,4.266183582867043],[0.30381076074351226,4.246499616018747],[0.3356119294517022,4.229255173542103],[0.3670301570383837,4.214634638080481],[0.3977392297482183,4.202822392277255],[0.4274129338258678,4.194002818775796],[0.45762788394535847,4.186282462498064],[0.49031073610767173,4.177626017689704],[0.5256600527443847,4.168005117878771],[0.5638743962870744,4.157391396593318],[0.6051523291673179,4.1457564873614],[0.6496924138166922,4.13307202371107],[0.6976932126667745,4.119309639170382],[0.7493532881491418,4.10444096726739],[0.8048712026953713,4.088437641530149],[0.8644455187370398,4.071271295486712],[0.9282747987057245,4.0529135626651325],[0.9965576050330024,4.033336076593466],[1.0694925001504507,4.012510470799765],[1.1472780464896464,3.990408378812085],[1.2301128064821665,3.9670014341584787],[1.3181953425595883,3.9422612703670006],[1.4117242171534883,3.916159520965704],[1.5108979926954442,3.888667819482644],[1.6159152316170329,3.859757799445873],[1.7269744963498312,3.8294010943834467],[1.8442743493254163,3.7975693378234183],[1.9680133529753654,3.764234163293841],[2.098390069731255,3.7293672043227706],[2.2356030620246634,3.6929400944382595],[2.3798508922871666,3.654924467168362],[2.531332122950342,3.6152919560411325],[2.6902453164457665,3.5740141945846244],[2.856789035205017,3.5310628163268922],[3.0311618416596713,3.48640945479599],[3.213562298241306,3.440025743519971],[3.404188967381498,3.391883316026889],[3.6032404115118246,3.3419538058447995],[3.8012124706246215,3.292224322624245],[3.988816580397157,3.2445798469891716],[4.166577521199637,3.1988359945165024],[4.33502007340227,3.1548083807831606],[4.494669017375262,3.1123126213660703],[4.646049133488819,3.0711643318421546],[4.789685202113148,3.031179127788337],[4.926102003618457,2.9921726247815412],[5.055824318374951,2.953960438398691],[5.179376926752837,2.9163581842167092],[5.297284609122322,2.87918147781252],[5.410072145853613,2.8422459347630467],[5.518264317316917,2.805367170645213],[5.62238590388244,2.768360801035942],[5.7229616859203905,2.7310424415121575],[5.820516443800972,2.693227707650783],[5.915574957894394,2.654732215028742],[6.008662008570863,2.615371579222958],[6.100302376200585,2.574961415810355],[6.191020841153765,2.533317340367856],[6.281342183800613,2.4902549684723843],[6.371791184511334,2.445589915700864],[6.462892623656136,2.3991377976302184],[6.555171281605223,2.350714229837371],[6.649151938728805,2.300134827899245],[6.745359375397086,2.2472152073927645],[6.844318371980275,2.1917709838948527],[6.946553708848577,2.1336177729824337],[7.0525901663722,2.07257119023243],[7.16295252492135,2.008446851221766],[7.278165564866234,1.9410603715273649],[7.398754066577059,1.87022736672615],[7.5261766674631385,1.7956466944255067],[7.661088196270667,1.717463520974261],[7.802807827971791,1.6361600737511128],[7.950654737538654,1.552218580134761],[8.103948099943404,1.4661212675039057],[8.262007090158184,1.3783503632372458],[8.424150883155141,1.2893880947134813],[8.589698653906419,1.1997166893113114],[8.757969577384165,1.1098183744094354],[8.928282828560523,1.0201753773865534],[9.09995758240764,0.9312699256213643],[9.27231301389766,0.8435842464925679],[9.444668298002728,0.7576005673788635],[9.61634260969499,0.6738011156589507],[9.786655123946593,0.592668118711529],[9.954925015729682,0.5146838039152979],[10.120471460016399,0.44033039864895673],[10.282613631778894,0.37009013029120513],[10.440670705989309,0.30444522622074255],[10.59396185761979,0.24387791381626847],[10.741806261642484,0.18887042045648236],[10.883523093029535,0.13990497352008374],[11.018431526753089,0.09746380038577206],[11.145850737785292,0.06202912843224681],[11.265099901098289,0.0340831850382075],[11.375498191664224,0.014108197582353602],[11.476364784455244,0.0025863934433846074],[11.567018854443495,0],[11.64677957660112,0.006831244630899267],[11.714966125900267,0.023562354714781894],[11.770897677313078,0.05067555763034737],[11.813893405811703,0.08865308075629517],[11.849279546891937,0.1315743879570155],[11.882751220501392,0.17331844441070302],[11.91420911860393,0.21406963457545908],[11.943553933163413,0.2540123429093851],[11.970686356143704,0.29333095387058256],[11.995507079508666,0.3322098519171528],[12.017916795222163,0.3708334215071973],[12.037816195248057,0.40938604709881743],[12.055105971550212,0.4480521131501146],[12.069686816092489,0.48701600411919027],[12.081459420838753,0.5264621044641458],[12.090324477752867,0.5665747986430826],[12.096182678798693,0.6075384711141021],[12.098934715940095,0.6495375063353057],[12.098481281140934,0.692756288764795],[12.094723066365075,0.737379202860671],[12.08756076357638,0.7835906330810356],[12.076895064738713,0.8315749638839899],[12.062626661815935,0.8815165797276353],[12.044656246771913,0.9335998650700734],[12.022884511570505,0.9880092043694055],[11.997212148175578,1.044928982083733],[11.967539848550992,1.1045435826711574],[11.933768304660612,1.16703739058978],[11.8957982084683,1.2325947902977024],[11.853530251937919,1.3014001662530257],[11.806865127033333,1.3736379029138515],[11.755703525718404,1.4494923847382815],[11.699946139956996,1.5291479961844165],[11.63949366171297,1.6127891217103583],[11.574246782950192,1.7006001457742084],[11.504106195632524,1.792765452834068],[11.42898243077844,1.886272533187701],[11.348823851339446,1.9780351309874036],[11.26358789717895,2.0681241601626876],[11.173232008160351,2.1566105346430664],[11.077713624147059,2.243565168358052],[10.976990185002474,2.329058975237158],[10.871019130590007,2.413162869209896],[10.759757900773057,2.4959477642057784],[10.643163935415032,2.577484574154319],[10.521194674379336,2.6578442129850295],[10.393807557529373,2.737097594627423],[10.260960024728549,2.815315633011012],[10.122609515840267,2.892569242065309],[9.978713470727936,2.9689293357198268],[9.829229329254956,3.044466827904078],[9.674114531284733,3.119252632547575],[9.513326516680674,3.193357663579831],[9.346822725306183,3.266852834930358],[9.174560597024662,3.3398090605286685],[8.99649757169952,3.4122972543042756],[8.812591089194159,3.4843883301866923],[8.622798589371985,3.5561532021054303],[8.427077512096401,3.6276627839900026],[8.225385297230815,3.6989879897699223],[8.01767938463863,3.7701997333747013],[7.80391721418325,3.841368928733852],[7.584056225728081,3.9125664897768884],[7.358053859136528,3.983863330433322],[7.125867554271995,4.055330364632666],[6.887454750997887,4.127038506304432],[6.642772889177609,4.199058669378134],[6.391779408674566,4.271461767783284]]] +bt.translate(penguinBeak, [22, 77]) +bt.cover(logo, penguinBeak) +bt.join(logo, penguinBeak) +bt.cut(logo, logoTurt.path) +bt.cut(logo, logoTurt.path) +bt.join(logo, logoTurt.path) +bt.scale(logo, 0.09) +bt.translate(logo, [-17, -15.1]) + +drawLines(logo) + +const logoText = [[[0,88.23063512143503],[0,86.69384903829986],[5.419188716986667,86.69384903829986],[5.419188716986667,66.58623764462016],[6.955996899903643,66.58623764462016],[6.955996899903643,86.69384903829986],[12.375180059609253,86.69384903829986],[12.375180059609253,88.23063512143503],[0,88.23063512143503]],[[25.320408436635766,88.23063512143503],[25.320408436635766,72.76575196979891],[25.31908143072411,72.64698428566294],[25.31510041274231,72.52929086815116],[25.308465382320104,72.41267171707847],[25.299176339087246,72.29712683225972],[25.287233282673473,72.18265621350977],[25.272636212708534,72.06925986064354],[25.25538512882217,71.95693777347586],[25.235480030644133,71.84568995182161],[25.212920917804162,71.7355163954957],[25.187707789932006,71.62641710431294],[25.159840646657404,71.51839207808823],[25.129319487610108,71.41144131663646],[25.09614431241986,71.30556481977248],[25.060315120716403,71.2007625873112],[25.021831912129485,71.09703461906744],[24.98069468628885,70.9943809148561],[24.936903442824242,70.89280147449205],[24.890458181365407,70.79229629779016],[24.841358901542087,70.6928653845653],[24.789605602984032,70.59450873463234],[24.735198285320987,70.49722634780619],[24.678136948182694,70.40101822390167],[24.618421591198896,70.30588436273368],[24.556052213999344,70.21182476411707],[24.491028816213777,70.11883942786673],[24.423351397471944,70.02692835379756],[24.353019957403585,69.93609154172438],[24.280034495638454,69.84632899146209],[24.204395011806287,69.75764070282557],[24.126101505536834,69.67002667562966],[24.045153976459837,69.58348690968927],[23.961552424205045,69.49802140481924],[23.876071196794882,69.41442003627266],[23.78948426311064,69.33347267942595],[23.70179162278206,69.25517933427915],[23.61299327543889,69.17954000083222],[23.52308922071087,69.1065546790852],[23.432079458227747,69.03622336903807],[23.33996398761927,68.96854607069082],[23.24674280851518,68.90352278404347],[23.152415920545224,68.84115350909602],[23.056983323339146,68.78143824584845],[22.96044501652669,68.72437699430077],[22.8628009997376,68.66996975445299],[22.764051272601627,68.6182165263051],[22.66419583474851,68.5691173098571],[22.563234685807995,68.522672105109],[22.46116782540983,68.47888091206079],[22.357995253183756,68.43774373071246],[22.253716968759523,68.39926056106403],[22.14833297176687,68.36343140311548],[22.041843261835545,68.33025625686685],[21.934247838595294,68.29973512231808],[21.825546701675858,68.27186799946922],[21.71573985070699,68.24665488832025],[21.60482728531842,68.22409578887117],[21.49280900513991,68.20419070112197],[21.3796850098012,68.18693962507268],[21.26545529893203,68.17234256072328],[21.150119872162144,68.16039950807377],[21.033678729121295,68.15111046712414],[20.91613186943922,68.1444754378744],[20.79747929274567,68.14049442032457],[20.677720998670388,68.13916741447463],[20.55895340638851,68.14049442032457],[20.441260074991884,68.1444754378744],[20.324641004480508,68.15111046712414],[20.20909619485438,68.16039950807377],[20.0946256461135,68.17234256072328],[19.981229358257867,68.18693962507268],[19.868907331287485,68.20419070112197],[19.757659565202353,68.22409578887117],[19.647486060002468,68.24665488832025],[19.53838681568783,68.27186799946922],[19.430361832258445,68.29973512231808],[19.323411109714304,68.33025625686685],[19.217534648055416,68.36343140311548],[19.112732447281775,68.39926056106403],[19.00900450739338,68.43774373071246],[18.906350828390238,68.47888091206079],[18.804771410272345,68.522672105109],[18.704266253039698,68.5691173098571],[18.6048353566923,68.6182165263051],[18.506478721230152,68.66996975445299],[18.40919634665325,68.72437699430077],[18.3129882329616,68.78143824584845],[18.2178543801552,68.84115350909602],[18.123794788234044,68.90352278404347],[18.03080945719814,68.96854607069082],[17.938898387047484,69.03622336903807],[17.848061577782076,69.1065546790852],[17.75829902940192,69.17954000083222],[17.669610741907007,69.25517933427915],[17.581996715297347,69.33347267942595],[17.495456949572937,69.41442003627266],[17.409991444733773,69.49802140481924],[17.326390076187177,69.58348690968927],[17.245442719340478,69.67002667562966],[17.16714937419367,69.75764070282557],[17.09151004074675,69.84632899146209],[17.018524718999725,69.93609154172438],[16.94819340895259,70.02692835379756],[16.88051611060535,70.11883942786673],[16.815492823958,70.21182476411707],[16.753123549010542,70.30588436273368],[16.693408285762974,70.40101822390167],[16.636347034215298,70.49722634780619],[16.581939794367518,70.59450873463234],[16.530186566219626,70.6928653845653],[16.481087349771627,70.79229629779016],[16.43464214502352,70.89280147449205],[16.390850951975303,70.9943809148561],[16.34971377062698,71.09703461906744],[16.311230600978547,71.2007625873112],[16.27540144303001,71.30556481977248],[16.24222629678136,71.41144131663646],[16.211705162232604,71.51839207808823],[16.18383803938374,71.62641710431294],[16.15862492823477,71.7355163954957],[16.136065828785686,71.84568995182161],[16.1161607410365,71.95693777347586],[16.0989096649872,72.06925986064354],[16.084312600637794,72.18265621350977],[16.072369547988284,72.29712683225972],[16.063080507038663,72.41267171707847],[16.05644547778893,72.52929086815116],[16.052464460239094,72.64698428566294],[16.05113745438915,72.76575196979891],[16.05113745438915,88.23063512143503],[14.498207684534673,88.23063512143503],[14.498207684534673,72.76575196979891],[14.49997690039832,72.60672886418308],[14.505284564280476,72.44915968765392],[14.514130700617976,72.29304441632993],[14.526515333847648,72.13838302632968],[14.54243848840633,71.98517549377172],[14.561900188730846,71.83342179477462],[14.584900459258032,71.68312190545691],[14.611439324424717,71.53427580193716],[14.641516808667737,71.38688346033388],[14.675132936423918,71.24094485676568],[14.712287732130093,71.09645996735105],[14.752981220223097,70.9534287682086],[14.797213425139757,70.81185123545683],[14.844984371316908,70.67172734521432],[14.896294083191378,70.53305707359962],[14.951142585200003,70.39584039673127],[15.00952990177961,70.26007729072782],[15.071456057367033,70.12576773170784],[15.136921076399103,69.99291169578987],[15.205924983312652,69.86150915909245],[15.27846780254451,69.73156009773413],[15.35454955853151,69.60306448783349],[15.434170275710484,69.47602230550906],[15.51732997851826,69.35043352687939],[15.604028691391674,69.22629812806304],[15.694266438767555,69.10361608517854],[15.788043245082735,68.98238737434448],[15.885359134774045,68.86261197167937],[15.986214132278317,68.74428985330178],[16.090608262032383,68.62742099533027],[16.198541548473074,68.51200537388337],[16.310014016037222,68.39804296507965],[16.42397633295599,68.28657067832337],[16.539391868071757,68.17863755565882],[16.656260644895713,68.07424357338968],[16.774582686939056,67.97338870781961],[16.894358017712975,67.8760729352523],[17.01558666072867,67.78229623199144],[17.13826863949733,67.69205857434069],[17.262403977530152,67.60535993860374],[17.38799269833833,67.52220030108427],[17.515034825433055,67.44257963808595],[17.643530382325523,67.36649792591246],[17.773479392526927,67.29395514086747],[17.904881879548462,67.22495125925468],[18.03773786690132,67.15948625737776],[18.1720473780967,67.09756011154039],[18.307810436645788,67.03917279804624],[18.445027066059787,66.984324293199],[18.583697289849884,66.93301457330233],[18.723821131527274,66.88524361465993],[18.865398614603155,66.84101139357547],[19.008429762588715,66.80031788635262],[19.152914598995153,66.76316306929508],[19.298853147333663,66.72954691870649],[19.446245431115432,66.69946941089057],[19.595091473851664,66.67293052215099],[19.745391299053544,66.6499302287914],[19.897144930232272,66.63046850711552],[20.05035239089904,66.614545333427],[20.20501370456504,66.60216068402951],[20.36112889474147,66.59331453522677],[20.51869798493952,66.58800686332242],[20.677720998670388,66.58623764462016],[20.83675404973723,66.58800686332242],[20.994365368538833,66.59331453522677],[21.150554954704944,66.60216068402951],[21.305322807865306,66.614545333427],[21.458668927649665,66.63046850711552],[21.61059331368776,66.6499302287914],[21.761095965609346,66.67293052215099],[21.91017688304416,66.69946941089057],[22.05783606562195,66.72954691870649],[22.20407351297246,66.76316306929508],[22.348889224725436,66.80031788635262],[22.492283200510624,66.84101139357547],[22.634255439957766,66.88524361465993],[22.77480594269661,66.93301457330233],[22.9139347083569,66.984324293199],[23.051641736568378,67.03917279804624],[23.187927026960796,67.09756011154039],[23.32279057916389,67.15948625737776],[23.45623239280741,67.22495125925468],[23.588252467521105,67.29395514086747],[23.71885080293471,67.36649792591246],[23.848027398677978,67.44257963808595],[23.975782254380654,67.52220030108427],[24.102115369672475,67.60535993860374],[24.227026744183195,67.69205857434069],[24.350516377542554,67.78229623199144],[24.4725842693803,67.8760729352523],[24.593230419326176,67.97338870781961],[24.712454827009925,68.07424357338968],[24.830257492061296,68.17863755565882],[24.94663841411003,68.28657067832337],[25.061597592785876,68.39804296507965],[25.173063995079076,68.51200537388337],[25.280991589465884,68.62742099533027],[25.38538038853497,68.74428985330178],[25.486230404875,68.86261197167937],[25.58354165107465,68.98238737434448],[25.67731413972259,69.10361608517854],[25.76754788340749,69.22629812806304],[25.854242894718023,69.35043352687939],[25.937399186242857,69.47602230550906],[26.017016770570663,69.60306448783349],[26.093095660290114,69.73156009773413],[26.165635867989877,69.86150915909245],[26.234637406258628,69.99291169578987],[26.300100287685034,70.12576773170784],[26.362024524857762,70.26007729072782],[26.420410130365493,70.39584039673127],[26.47525711679689,70.53305707359962],[26.526565496740623,70.67172734521432],[26.57433528278537,70.81185123545683],[26.618566487519796,70.9534287682086],[26.659259123532575,71.09645996735105],[26.696413203412373,71.24094485676568],[26.730028739747866,71.38688346033388],[26.76010574512772,71.53427580193716],[26.78664423214061,71.68312190545691],[26.809644213375204,71.83342179477462],[26.829105701420175,71.98517549377172],[26.84502870886419,72.13838302632968],[26.857413248295927,72.29304441632993],[26.86625933230405,72.44915968765392],[26.871566973477233,72.60672886418308],[26.873336184404142,72.76575196979891],[26.873336184404142,88.23063512143503],[25.320408436635766,88.23063512143503]],[[38.02299153712252,88.23063512143503],[34.35087913905789,79.4143174746045],[30.678764718907168,88.23063512143503],[28.996364820372612,88.23063512143503],[33.50971154316818,77.4084373856782],[28.996364820372612,66.58623764462016],[30.678764718907168,66.58623764462016],[34.35087913905789,75.40249056791066],[38.02299153712252,66.58623764462016],[39.689158128462665,66.58623764462016],[35.175878134508324,77.4084373856782],[39.689158128462665,88.23063512143503],[38.02299153712252,88.23063512143503]],[[41.81218676443113,88.23063512143503],[41.81218676443113,66.58623764462016],[52.63438751653222,66.58623764462016],[52.63438751653222,68.13916741447463],[43.36518124104074,68.13916741447463],[43.36518124104074,71.22892306049943],[49.54469657726255,71.22892306049943],[49.54469657726255,72.76575196979891],[43.36518124104074,72.76575196979891],[43.36518124104074,86.69384903829986],[52.63438751653222,86.69384903829986],[52.63438751653222,88.23063512143503],[41.81218676443113,88.23063512143503]],[[56.3104106291103,86.69384903829986],[56.54893633175926,86.69117926331634],[56.78528206761914,86.68316993669966],[57.01944783668995,86.66982105595056],[57.25143363897168,86.65113261856985],[57.48123947446434,86.62710462205828],[57.708865343167915,86.59773706391667],[57.93431124508242,86.56302994164577],[58.15757718020785,86.52298325274636],[58.378663148544206,86.47759699471922],[58.59756915009148,86.42687116506514],[58.81429518484968,86.37080576128487],[59.02884125281881,86.30940078087922],[59.24120735399886,86.24265622134895],[59.45139348838983,86.17057208019486],[59.659399655991734,86.0931483549177],[59.865225856804564,86.01038504301826],[60.06887209082831,85.92228214199733],[60.270338358062986,85.82883964935567],[60.46962465850858,85.73005756259408],[60.6667309921651,85.62593587921333],[60.86165735903255,85.51647459671418],[61.05440375911092,85.40167371259743],[61.24497019240022,85.28153322436384],[61.433356658900436,85.15605312951422],[61.619563158611584,85.02523342554932],[61.80358969153365,84.88907410996994],[61.98543625766664,84.74757518027684],[62.16510285701056,84.6007366339708],[62.342589489565405,84.4485584685526],[62.51789615533117,84.29104068152304],[62.69102285430786,84.12818327038286],[62.861969586495476,83.95998623263287],[63.02917232358866,83.78904126978603],[63.19106703728207,83.61591618621657],[63.34765372757568,83.44061098794117],[63.49893239446952,83.26312568097643],[63.64490303796357,83.08346027133905],[63.78556565805784,82.90161476504562],[63.920920254752325,82.71758916811282],[64.05096682804702,82.5313834865573],[64.17570537794194,82.34299772639567],[64.29513590443707,82.15243189364459],[64.40925840753242,81.95968599432071],[64.51807288722799,81.76476003444067],[64.62157934352378,81.56765402002111],[64.71977777641978,81.36836795707868],[64.81266818591598,81.16690185163003],[64.90025057201241,80.9632557096918],[64.98252493470906,80.75742953728061],[65.05949127400592,80.54942334041314],[65.131149589903,80.33923712510601],[65.1974998824003,80.12687089737588],[65.2585421514978,79.91232466323939],[65.31427639719554,79.69559842871317],[65.36470261949349,79.47669219981388],[65.40982081839165,79.25560598255817],[65.44963099389003,79.03233978296265],[65.48413314598862,78.806893607044],[65.51332727468743,78.57926746081887],[65.53721337998645,78.34946135030386],[65.5557914618857,78.11747528151565],[65.56906152038516,77.88330926047087],[65.57702355548483,77.64696329318618],[65.57967756718473,77.4084373856782],[65.57702355548483,77.16991158537448],[65.56906152038516,76.93356574649113],[65.5557914618857,76.69939986958354],[65.53721337998645,76.46741395520712],[65.51332727468743,76.23760800391719],[65.48413314598862,76.00998201626919],[65.44963099389003,75.78453599281848],[65.40982081839165,75.56126993412043],[65.36470261949349,75.34018384073045],[65.31427639719554,75.1212777132039],[65.2585421514978,74.90455155209617],[65.1974998824003,74.69000535796263],[65.131149589903,74.4776391313587],[65.05949127400592,74.26745287283973],[64.98252493470906,74.0594465829611],[64.90025057201241,73.85362026227821],[64.81266818591598,73.64997391134645],[64.71977777641978,73.44850753072117],[64.62157934352378,73.24922112095778],[64.51807288722799,73.05211468261166],[64.40925840753242,72.85718821623817],[64.29513590443707,72.66444172239271],[64.17570537794194,72.47387520163068],[64.05096682804702,72.28548865450742],[63.920920254752325,72.09928208157834],[63.78556565805784,71.91525548339882],[63.64490303796357,71.73340886052425],[63.49893239446952,71.55374221350999],[63.34765372757568,71.37625554291145],[63.19106703728207,71.20094884928399],[63.02917232358866,71.02782213318301],[62.861969586495476,70.85687539516388],[62.69102285430786,70.68967265807069],[62.51789615533117,70.52777794437728],[62.342589489565405,70.37119125408367],[62.16510285701056,70.21991258718984],[61.98543625766664,70.07394194369579],[61.80358969153365,69.93327932360151],[61.619563158611584,69.79792472690703],[61.433356658900436,69.66787815361232],[61.24497019240022,69.5431396037174],[61.05440375911092,69.42370907722227],[60.86165735903255,69.30958657412694],[60.6667309921651,69.20077209443136],[60.46962465850858,69.09726563813558],[60.270338358062986,68.99906720523958],[60.06887209082831,68.90617679574336],[59.865225856804564,68.81859440964695],[59.659399655991734,68.73632004695028],[59.45139348838983,68.65935370765342],[59.24120735399886,68.58769539175634],[59.02884125281881,68.52134509925905],[58.81429518484968,68.46030283016154],[58.59756915009148,68.40456858446382],[58.378663148544206,68.35414236216587],[58.15757718020785,68.30902416326771],[57.93431124508242,68.26921398776932],[57.708865343167915,68.23471183567074],[57.48123947446434,68.20551770697192],[57.25143363897168,68.18163160167289],[57.01944783668995,68.16305351977365],[56.78528206761914,68.1497834612742],[56.54893633175926,68.14182142617452],[56.3104106291103,68.13916741447463],[56.3104106291103,86.69384903829986]],[[54.7574121083285,88.23063512143503],[54.7574121083285,66.58623764462016],[56.3104106291103,66.58623764462016],[56.58819534489016,66.58933386719767],[56.86345222151476,66.598622542829],[57.13618127231329,66.61410368336232],[57.40638251061492,66.63577730064574],[57.67405594974883,66.66364340652748],[57.939201603044225,66.69770201285567],[58.201819483830256,66.73795313147849],[58.46190960543612,66.78439677424407],[58.719471981191,66.83703295300059],[58.97450662442406,66.89586167959621],[59.2270135484645,66.9608829658791],[59.47699276664149,67.03209682369739],[59.72444429228421,67.10950326489927],[59.96936813872185,67.19310230133289],[60.21176431928358,67.28289394484642],[60.45163284729859,67.37887820728801],[60.68897373609605,67.48105510050581],[60.92378699900516,67.58942463634801],[61.15607264935508,67.70398682666276],[61.385830700475,67.8247416832982],[61.6130611656941,67.95168921810252],[61.83776405834156,68.08482944292386],[62.05993939174657,68.22416236961038],[62.27958717923829,68.36968801001026],[62.49670743414592,68.52140637597165],[62.71130016979863,68.67931747934271],[62.92336539952561,68.8434213319716],[63.13290313665603,69.01371794570647],[63.33991339451909,69.19020733239552],[63.54439618644394,69.37288950388687],[63.746351525759785,69.56176447202868],[63.945779425795806,69.75683224866914],[64.14184453506516,69.95627598441992],[64.33168608911828,70.15827901119425],[64.515304039822,70.36284132843674],[64.69269833904319,70.56996293559203],[64.86386893864866,70.77964383210471],[65.02881579050529,70.99188401741942],[65.18753884647992,71.20668349098077],[65.34003805843939,71.42404225223338],[65.48631337825054,71.64396030062186],[65.62636475778024,71.86643763559083],[65.76019214889531,72.0914742565849],[65.88779550346263,72.3190701630487],[66.00917477334902,72.54922535442685],[66.12432991042132,72.78193983016396],[66.2332608665464,73.01721358970465],[66.3359675935911,73.25504663249353],[66.43245004342228,73.49543895797524],[66.52270816790676,73.73839056559436],[66.6067419189114,73.98390145479554],[66.68455124830304,74.23197162502339],[66.75613610794855,74.4826010757225],[66.82149644971474,74.73578980633754],[66.88063222546849,74.99153781631308],[66.93354338707664,75.24984510509375],[66.98022988640602,75.51071167212419],[67.0206916753235,75.77413751684901],[67.05492870569591,76.0401226387128],[67.0829409293901,76.30866703716019],[67.10472829827293,76.57977071163582],[67.12029076421123,76.85343366158428],[67.12962827907187,77.1296558864502],[67.13274079472167,77.4084373856782],[67.12962827907187,77.68721881485087],[67.12029076421123,77.96344074482408],[67.10472829827293,78.23710319013037],[67.0829409293901,78.50820616530225],[67.05492870569591,78.77674968487221],[67.0206916753235,79.04273376337278],[66.98022988640602,79.30615841533645],[66.93354338707664,79.56702365529574],[66.88063222546849,79.82532949778317],[66.82149644971474,80.08107595733125],[66.75613610794855,80.33426304847245],[66.68455124830304,80.58489078573933],[66.6067419189114,80.83295918366437],[66.52270816790676,81.07846825678008],[66.43245004342228,81.32141801961899],[66.3359675935911,81.56180848671359],[66.2332608665464,81.7996396725964],[66.12432991042132,82.03491159179993],[66.00917477334902,82.26762425885667],[65.88779550346263,82.49777768829915],[65.76019214889531,82.72537189465989],[65.62636475778024,82.95040689247136],[65.48631337825054,83.17288269626613],[65.34003805843939,83.39279932057664],[65.18753884647992,83.61015677993547],[65.02881579050529,83.82495508887506],[64.86386893864866,84.03719426192797],[64.69269833904319,84.24687431362668],[64.515304039822,84.45399525850371],[64.33168608911828,84.6585571110916],[64.14184453506516,84.86055988592281],[63.945779425795806,85.06000359752986],[63.746351525759785,85.25507148008055],[63.54439618644394,85.44394675693943],[63.33991339451909,85.62662942643422],[63.13290313665603,85.8031194868926],[62.92336539952561,85.97341693664228],[62.71130016979863,86.13752177401099],[62.49670743414592,86.29543399732641],[62.27958717923829,86.44715360491627],[62.05993939174657,86.59268059510825],[61.83776405834156,86.73201496623007],[61.6130611656941,86.86515671660943],[61.385830700475,86.99210584457404],[61.15607264935508,87.11286234845161],[60.92378699900516,87.22742622656983],[60.68897373609605,87.33579747725642],[60.45163284729859,87.43797609883909],[60.21176431928358,87.53396208964553],[59.96936813872185,87.62375544800344],[59.72444429228421,87.70735617224055],[59.47699276664149,87.78476426068455],[59.2270135484645,87.85597971166315],[58.97450662442406,87.92100252350406],[58.719471981191,87.97983269453496],[58.46190960543612,88.03247022308359],[58.201819483830256,88.07891510747764],[57.939201603044225,88.11916734604482],[57.67405594974883,88.15322693711282],[57.40638251061492,88.18109387900937],[57.13618127231329,88.20276817006216],[56.86345222151476,88.2182498085989],[56.58819534489016,88.22753879294729],[56.3104106291103,88.23063512143503],[54.7574121083285,88.23063512143503]],[[80.07790143186389,68.13916741447463],[79.83934140410595,68.14182142617452],[79.60296676367062,68.1497834612742],[79.368777149189,68.16305351977365],[79.13677219929218,68.18163160167289],[78.90695155261128,68.20551770697192],[78.67931484777736,68.23471183567074],[78.45386172342154,68.26921398776932],[78.23059181817491,68.30902416326771],[78.0095047706686,68.35414236216587],[77.79060021953366,68.40456858446382],[77.57387780340122,68.46030283016154],[77.35933716090236,68.52134509925905],[77.14697793066819,68.58769539175634],[76.93679975132979,68.65935370765342],[76.72880226151828,68.73632004695028],[76.52298509986474,68.81859440964695],[76.31934790500028,68.90617679574336],[76.117890315556,68.99906720523958],[75.91861197016298,69.09726563813558],[75.72151250745235,69.20077209443136],[75.52659156605516,69.30958657412694],[75.33384878460255,69.42370907722227],[75.14328380172559,69.5431396037174],[74.95489625605539,69.66787815361232],[74.76868578622306,69.79792472690703],[74.58465203085969,69.93327932360151],[74.40279462859635,70.07394194369579],[74.22311321806417,70.21991258718984],[74.04560743789425,70.37119125408367],[73.87027692671766,70.52777794437728],[73.69712132316552,70.68967265807069],[73.52614026586893,70.85687539516388],[73.35896214950057,71.02782213318301],[73.1970912523381,71.20094884928399],[73.04052757586251,71.37625554291145],[72.88927112155484,71.55374221350999],[72.74332189089611,71.73340886052425],[72.60267988536732,71.91525548339882],[72.46734510644953,72.09928208157834],[72.33731755562371,72.28548865450742],[72.21259723437092,72.47387520163068],[72.09318414417216,72.66444172239271],[71.97907828650844,72.85718821623817],[71.87027966286081,73.05211468261166],[71.76678827471028,73.24922112095778],[71.66860412353786,73.44850753072117],[71.57572721082457,73.64997391134645],[71.48815753805144,73.85362026227821],[71.40589510669949,74.0594465829611],[71.32893991824973,74.26745287283973],[71.25729197418318,74.4776391313587],[71.19095127598088,74.69000535796263],[71.12991782512383,74.90455155209617],[71.07419162309304,75.1212777132039],[71.02377267136957,75.34018384073045],[70.9786609714344,75.56126993412043],[70.93885652476857,75.78453599281848],[70.9043593328531,76.00998201626919],[70.875169397169,76.23760800391719],[70.8512867191973,76.46741395520712],[70.83271130041902,76.69939986958354],[70.81944314231518,76.93356574649113],[70.8114822463668,77.16991158537448],[70.80882861405487,77.4084373856782],[70.8114822463668,77.64696329318618],[70.81944314231518,77.88330926047087],[70.83271130041902,78.11747528151565],[70.8512867191973,78.34946135030386],[70.875169397169,78.57926746081887],[70.9043593328531,78.806893607044],[70.93885652476857,79.03233978296265],[70.9786609714344,79.25560598255817],[71.02377267136957,79.47669219981388],[71.07419162309304,79.69559842871317],[71.12991782512383,79.91232466323939],[71.19095127598088,80.12687089737588],[71.25729197418318,80.33923712510601],[71.32893991824973,80.54942334041314],[71.40589510669949,80.75742953728061],[71.48815753805144,80.9632557096918],[71.57572721082457,81.16690185163003],[71.66860412353786,81.36836795707868],[71.76678827471028,81.56765402002111],[71.87027966286081,81.76476003444067],[71.97907828650844,81.95968599432071],[72.09318414417216,82.15243189364459],[72.21259723437092,82.34299772639567],[72.33731755562371,82.5313834865573],[72.46734510644953,82.71758916811282],[72.60267988536732,82.90161476504562],[72.74332189089611,83.08346027133905],[72.88927112155484,83.26312568097643],[73.04052757586251,83.44061098794117],[73.1970912523381,83.61591618621657],[73.35896214950057,83.78904126978603],[73.52614026586893,83.95998623263287],[73.69712132316552,84.12818327038286],[73.87027692671766,84.29104068152304],[74.04560743789425,84.4485584685526],[74.22311321806417,84.6007366339708],[74.40279462859635,84.74757518027684],[74.58465203085969,84.88907410996994],[74.76868578622306,85.02523342554932],[74.95489625605539,85.15605312951422],[75.14328380172559,85.28153322436384],[75.33384878460255,85.40167371259743],[75.52659156605516,85.51647459671418],[75.72151250745235,85.62593587921333],[75.91861197016298,85.73005756259408],[76.117890315556,85.82883964935567],[76.31934790500028,85.92228214199733],[76.52298509986474,86.01038504301826],[76.72880226151828,86.0931483549177],[76.93679975132979,86.17057208019486],[77.14697793066819,86.24265622134895],[77.35933716090236,86.30940078087922],[77.57387780340122,86.37080576128487],[77.79060021953366,86.42687116506514],[78.0095047706686,86.47759699471922],[78.23059181817491,86.52298325274636],[78.45386172342154,86.56302994164577],[78.67931484777736,86.59773706391667],[78.90695155261128,86.62710462205828],[79.13677219929218,86.65113261856985],[79.368777149189,86.66982105595056],[79.60296676367062,86.68316993669966],[79.83934140410595,86.69117926331634],[80.07790143186389,86.69384903829986],[80.31640310594922,86.69117926331634],[80.55272680077444,86.68316993669966],[80.78687251337749,86.66982105595056],[81.01884024079635,86.65113261856985],[81.24862998006898,86.62710462205828],[81.47624172823333,86.59773706391667],[81.70167548232737,86.56302994164577],[81.92493123938907,86.52298325274636],[82.14600899645636,86.47759699471922],[82.36490875056722,86.42687116506514],[82.58163049875961,86.37080576128487],[82.79617423807147,86.30940078087922],[83.00853996554079,86.24265622134895],[83.21872767820551,86.17057208019486],[83.42673737310359,86.0931483549177],[83.63256904727301,86.01038504301826],[83.8362226977517,85.92228214199733],[84.03769832157764,85.82883964935567],[84.23699591578877,85.73005756259408],[84.43411547742308,85.62593587921333],[84.62905700351851,85.51647459671418],[84.82182049111302,85.40167371259743],[85.01240593724457,85.28153322436384],[85.20081333895112,85.15605312951422],[85.38704269327064,85.02523342554932],[85.57109399724109,84.88907410996994],[85.75296724790041,84.74757518027684],[85.93266244228658,84.6007366339708],[86.11017957743755,84.4485584685526],[86.28551865039128,84.29104068152304],[86.45867965818573,84.12818327038286],[86.62966259785887,83.95998623263287],[86.79782118038223,83.78904126978603],[86.96064509891642,83.61591618621657],[87.1181341105741,83.44061098794117],[87.27028797246803,83.26312568097643],[87.41710644171089,83.08346027133905],[87.55858927541537,82.90161476504562],[87.69473623069419,82.71758916811282],[87.82554706466006,82.5313834865573],[87.95102153442568,82.34299772639567],[88.07115939710376,82.15243189364459],[88.18596040980698,81.95968599432071],[88.29542432964809,81.76476003444067],[88.39955091373976,81.56765402002111],[88.49833991919469,81.36836795707868],[88.59179110312562,81.16690185163003],[88.67990422264523,80.9632557096918],[88.76267903486622,80.75742953728061],[88.84011529690132,80.54942334041314],[88.91221276586322,80.33923712510601],[88.97897119886461,80.12687089737588],[89.04039035301821,79.91232466323939],[89.09646998543674,79.69559842871317],[89.14720985323288,79.47669219981388],[89.19260971351935,79.25560598255817],[89.23266932340884,79.03233978296265],[89.26738844001407,78.806893607044],[89.29676682044774,78.57926746081887],[89.32080422182257,78.34946135030386],[89.33950040125123,78.11747528151565],[89.35285511584645,77.88330926047087],[89.36086812272094,77.64696329318618],[89.3635391789874,77.4084373856782],[89.36086812272094,77.16991158537448],[89.35285511584645,76.93356574649113],[89.33950040125123,76.69939986958354],[89.32080422182257,76.46741395520712],[89.29676682044774,76.23760800391719],[89.26738844001407,76.00998201626919],[89.23266932340884,75.78453599281848],[89.19260971351935,75.56126993412043],[89.14720985323288,75.34018384073045],[89.09646998543674,75.1212777132039],[89.04039035301821,74.90455155209617],[88.97897119886461,74.69000535796263],[88.91221276586322,74.4776391313587],[88.84011529690132,74.26745287283973],[88.76267903486622,74.0594465829611],[88.67990422264523,73.85362026227821],[88.59179110312562,73.64997391134645],[88.49833991919469,73.44850753072117],[88.39955091373976,73.24922112095778],[88.29542432964809,73.05211468261166],[88.18596040980698,72.85718821623817],[88.07115939710376,72.66444172239271],[87.95102153442568,72.47387520163068],[87.82554706466006,72.28548865450742],[87.69473623069419,72.09928208157834],[87.55858927541537,71.91525548339882],[87.41710644171089,71.73340886052425],[87.27028797246803,71.55374221350999],[87.1181341105741,71.37625554291145],[86.96064509891642,71.20094884928399],[86.79782118038223,71.02782213318301],[86.62966259785887,70.85687539516388],[86.45867965818573,70.68967265807069],[86.28551865039128,70.52777794437728],[86.11017957743755,70.37119125408367],[85.93266244228658,70.21991258718984],[85.75296724790041,70.07394194369579],[85.57109399724109,69.93327932360151],[85.38704269327064,69.79792472690703],[85.20081333895112,69.66787815361232],[85.01240593724457,69.5431396037174],[84.82182049111302,69.42370907722227],[84.62905700351851,69.30958657412694],[84.43411547742308,69.20077209443136],[84.23699591578877,69.09726563813558],[84.03769832157764,68.99906720523958],[83.8362226977517,68.90617679574336],[83.63256904727301,68.81859440964695],[83.42673737310359,68.73632004695028],[83.21872767820551,68.65935370765342],[83.00853996554079,68.58769539175634],[82.79617423807147,68.52134509925905],[82.58163049875961,68.46030283016154],[82.36490875056722,68.40456858446382],[82.14600899645636,68.35414236216587],[81.92493123938907,68.30902416326771],[81.70167548232737,68.26921398776932],[81.47624172823333,68.23471183567074],[81.24862998006898,68.20551770697192],[81.01884024079635,68.18163160167289],[80.78687251337749,68.16305351977365],[80.55272680077444,68.1497834612742],[80.31640310594922,68.14182142617452],[80.07790143186389,68.13916741447463]],[[80.07790143186389,88.23063512143503],[79.7990905644086,88.22753879294729],[79.52284195353447,88.2182498085989],[79.24915547779783,88.20276817006216],[78.97803101575506,88.18109387900937],[78.70946844596251,88.15322693711282],[78.44346764697652,88.11916734604482],[78.18002849735345,88.07891510747764],[77.91915087564966,88.03247022308359],[77.66083466042149,87.97983269453496],[77.4050797302253,87.92100252350406],[77.15188596361743,87.85597971166315],[76.90125323915424,87.78476426068455],[76.6531814353921,87.70735617224055],[76.40767043088734,87.62375544800344],[76.1647201041963,87.53396208964553],[75.92433033387537,87.43797609883909],[75.6865009984809,87.33579747725642],[75.4512319765692,87.22742622656983],[75.21852314669667,87.11286234845161],[74.98837438741963,86.99210584457404],[74.76078557729444,86.86515671660943],[74.53575659487747,86.73201496623007],[74.31328731872506,86.59268059510825],[74.09337762739355,86.44715360491627],[73.87602739943931,86.29543399732641],[73.66123651341869,86.13752177401099],[73.44900484788803,85.97341693664228],[73.2393322814037,85.8031194868926],[73.03221869252205,85.62662942643422],[72.82766395979942,85.44394675693943],[72.62566796179217,85.25507148008055],[72.42623057705666,85.06000359752986],[72.23116869067994,84.86055988592281],[72.04229926772418,84.6585571110916],[71.85962230670835,84.45399525850371],[71.68313780615144,84.24687431362668],[71.51284576457242,84.03719426192797],[71.34874618049027,83.82495508887506],[71.19083905242397,83.61015677993547],[71.03912437889251,83.39279932057664],[70.89360215841485,83.17288269626613],[70.75427238950999,82.95040689247136],[70.62113507069691,82.72537189465989],[70.49419020049457,82.49777768829915],[70.37343777742197,82.26762425885667],[70.25887779999809,82.03491159179993],[70.15051026674189,81.7996396725964],[70.04833517617237,81.56180848671359],[69.9523525268085,81.32141801961899],[69.86256231716925,81.07846825678008],[69.77896454577363,80.83295918366437],[69.70155921114059,80.58489078573933],[69.63034631178913,80.33426304847245],[69.56532584623821,80.08107595733125],[69.50649781300683,79.82532949778317],[69.45386221061396,79.56702365529574],[69.40741903757858,79.30615841533645],[69.36716829241968,79.04273376337278],[69.33310997365622,78.77674968487221],[69.3052440798072,78.50820616530225],[69.28357060939157,78.23710319013037],[69.26808956092836,77.96344074482408],[69.25880093293651,77.68721881485087],[69.255704723935,77.4084373856782],[69.25880093293651,77.1296558864502],[69.26808956092836,76.85343366158428],[69.28357060939157,76.57977071163582],[69.3052440798072,76.30866703716019],[69.33310997365622,76.0401226387128],[69.36716829241968,75.77413751684901],[69.40741903757858,75.51071167212419],[69.45386221061396,75.24984510509375],[69.50649781300683,74.99153781631308],[69.56532584623821,74.73578980633754],[69.63034631178913,74.4826010757225],[69.70155921114059,74.23197162502339],[69.77896454577363,73.98390145479554],[69.86256231716925,73.73839056559436],[69.9523525268085,73.49543895797524],[70.04833517617237,73.25504663249353],[70.15051026674189,73.01721358970465],[70.25887779999809,72.78193983016396],[70.37343777742197,72.54922535442685],[70.49419020049457,72.3190701630487],[70.62113507069691,72.0914742565849],[70.75427238950999,71.86643763559083],[70.89360215841485,71.64396030062186],[71.03912437889251,71.42404225223338],[71.19083905242397,71.20668349098077],[71.34874618049027,70.99188401741942],[71.51284576457242,70.77964383210471],[71.68313780615144,70.56996293559203],[71.85962230670835,70.36284132843674],[72.04229926772418,70.15827901119425],[72.23116869067994,69.95627598441992],[72.42623057705666,69.75683224866914],[72.62566796179217,69.56176447202868],[72.82766395979942,69.37288950388687],[73.03221869252205,69.19020733239552],[73.2393322814037,69.01371794570647],[73.44900484788803,68.8434213319716],[73.66123651341869,68.67931747934271],[73.87602739943931,68.52140637597165],[74.09337762739355,68.36968801001026],[74.31328731872506,68.22416236961038],[74.53575659487747,68.08482944292386],[74.76078557729444,67.95168921810252],[74.98837438741963,67.8247416832982],[75.21852314669667,67.70398682666276],[75.4512319765692,67.58942463634801],[75.6865009984809,67.48105510050581],[75.92433033387537,67.37887820728801],[76.1647201041963,67.28289394484642],[76.40767043088734,67.19310230133289],[76.6531814353921,67.10950326489927],[76.90125323915424,67.03209682369739],[77.15188596361743,66.9608829658791],[77.4050797302253,66.89586167959621],[77.66083466042149,66.83703295300059],[77.91915087564966,66.78439677424407],[78.18002849735345,66.73795313147849],[78.44346764697652,66.69770201285567],[78.70946844596251,66.66364340652748],[78.97803101575506,66.63577730064574],[79.24915547779783,66.61410368336232],[79.52284195353447,66.598622542829],[79.7990905644086,66.58933386719767],[80.07790143186389,66.58623764462016],[80.35665394564657,66.58933386719767],[80.63285161091059,66.598622542829],[80.90649418476866,66.61410368336232],[81.17758142433348,66.63577730064574],[81.44611308671774,66.66364340652748],[81.71208892903418,66.69770201285567],[81.97550870839547,66.73795313147849],[82.23637218191433,66.78439677424407],[82.49467910670347,66.83703295300059],[82.75042923987559,66.89586167959621],[83.0036223385434,66.9608829658791],[83.25425815981959,67.03209682369739],[83.50233646081688,67.10950326489927],[83.74785699864796,67.19310230133289],[83.99081953042557,67.28289394484642],[84.23122381326236,67.37887820728801],[84.46906960427108,67.48105510050581],[84.70435666056443,67.58942463634801],[84.9370847392551,67.70398682666276],[85.16725359745578,67.8247416832982],[85.39486299227922,67.95168921810252],[85.6199126808381,68.08482944292386],[85.84240242024511,68.22416236961038],[86.06233196761298,68.36968801001026],[86.2797010800544,68.52140637597165],[86.49450951468208,68.67931747934271],[86.70675702860873,68.8434213319716],[86.91644337894705,69.01371794570647],[87.12356832280975,69.19020733239552],[87.32813161730952,69.37288950388687],[87.53013301955909,69.56176447202868],[87.72957228667114,69.75683224866914],[87.92463417304785,69.95627598441992],[88.11350359600361,70.15827901119425],[88.29618055701944,70.36284132843674],[88.47266505757636,70.56996293559203],[88.64295709915538,70.77964383210471],[88.80705668323753,70.99188401741942],[88.96496381130383,71.20668349098077],[89.11667848483529,71.42404225223338],[89.26220070531295,71.64396030062186],[89.40153047421781,71.86643763559083],[89.53466779303089,72.0914742565849],[89.66161266323321,72.3190701630487],[89.78236508630582,72.54922535442685],[89.89692506372971,72.78193983016396],[90.00529259698591,73.01721358970465],[90.10746768755543,73.25504663249353],[90.2034503369193,73.49543895797524],[90.29324054655854,73.73839056559436],[90.37683831795417,73.98390145479554],[90.45424365258721,74.23197162502339],[90.52545655193867,74.4826010757225],[90.59047701748958,74.73578980633754],[90.64930505072097,74.99153781631308],[90.70194065311384,75.24984510509375],[90.74838382614921,75.51071167212419],[90.78863457130812,75.77413751684901],[90.82269289007158,76.0401226387128],[90.8505587839206,76.30866703716019],[90.87223225433621,76.57977071163582],[90.88771330279944,76.85343366158428],[90.89700193079129,77.1296558864502],[90.90009813979279,77.4084373856782],[90.89700193079129,77.68721881485087],[90.88771330279944,77.96344074482408],[90.87223225433621,78.23710319013037],[90.8505587839206,78.50820616530225],[90.82269289007158,78.77674968487221],[90.78863457130812,79.04273376337278],[90.74838382614921,79.30615841533645],[90.70194065311384,79.56702365529574],[90.64930505072097,79.82532949778317],[90.59047701748958,80.08107595733125],[90.52545655193867,80.33426304847245],[90.45424365258721,80.58489078573933],[90.37683831795417,80.83295918366437],[90.29324054655854,81.07846825678008],[90.2034503369193,81.32141801961899],[90.10746768755543,81.56180848671359],[90.00529259698591,81.7996396725964],[89.89692506372971,82.03491159179993],[89.78236508630582,82.26762425885667],[89.66161266323321,82.49777768829915],[89.53466779303089,82.72537189465989],[89.40153047421781,82.95040689247136],[89.26220070531295,83.17288269626613],[89.11667848483529,83.39279932057664],[88.96496381130383,83.61015677993547],[88.80705668323753,83.82495508887506],[88.64295709915538,84.03719426192797],[88.47266505757636,84.24687431362668],[88.29618055701944,84.45399525850371],[88.11350359600361,84.6585571110916],[87.92463417304785,84.86055988592281],[87.72957228667114,85.06000359752986],[87.53013301955909,85.25507148008055],[87.32813161730952,85.44394675693943],[87.12356832280975,85.62662942643422],[86.91644337894705,85.8031194868926],[86.70675702860873,85.97341693664228],[86.49450951468208,86.13752177401099],[86.2797010800544,86.29543399732641],[86.06233196761298,86.44715360491627],[85.84240242024511,86.59268059510825],[85.6199126808381,86.73201496623007],[85.39486299227922,86.86515671660943],[85.16725359745578,86.99210584457404],[84.9370847392551,87.11286234845161],[84.70435666056443,87.22742622656983],[84.46906960427108,87.33579747725642],[84.23122381326236,87.43797609883909],[83.99081953042557,87.53396208964553],[83.74785699864796,87.62375544800344],[83.50233646081688,87.70735617224055],[83.25425815981959,87.78476426068455],[83.0036223385434,87.85597971166315],[82.75042923987559,87.92100252350406],[82.49467910670347,87.97983269453496],[82.23637218191433,88.03247022308359],[81.97550870839547,88.07891510747764],[81.71208892903418,88.11916734604482],[81.44611308671774,88.15322693711282],[81.17758142433348,88.18109387900937],[80.90649418476866,88.20276817006216],[80.63285161091059,88.2182498085989],[80.35665394564657,88.22753879294729],[80.07790143186389,88.23063512143503]],[[27.589007050796262,36.76936487856496],[27.310231613908027,36.772461101142476],[27.034015072425852,36.78174977677381],[26.760357438938406,36.79723091730712],[26.489258726034365,36.81890453459055],[26.22071894630239,36.84677064047229],[25.954738112331164,36.88082924680048],[25.691316236709348,36.921080365423286],[25.430453332025618,36.967524008188875],[25.17214941086864,37.0201601869454],[24.916404485827094,37.07898891354102],[24.66321856948964,37.144010199823896],[24.412591674444954,37.215224057642196],[24.164523813281708,37.292630498844076],[23.91901499858857,37.3762295352777],[23.67606524295421,37.46602117879122],[23.4356745589673,37.56200544123281],[23.197842959216512,37.66418233445062],[22.962570456290518,37.77255187029282],[22.729857062777988,37.88711406060756],[22.499702791267588,38.00786891724301],[22.272107654347995,38.134816452047325],[22.047071664607873,38.267956676868664],[21.824594834635903,38.40728960355519],[21.604677177020744,38.552815243955074],[21.387318704351078,38.70453360991646],[21.172519429215566,38.862444713287516],[20.960279364202883,39.02654856591641],[20.7505985219017,39.19684517965129],[20.54347691490069,39.37333456634032],[20.33891455578852,39.55601673783167],[20.136911457153865,39.74489170597349],[19.93746763158539,39.93995948261394],[19.74239966932375,40.13940330447987],[19.55352416011592,40.341406400893],[19.370841115810066,40.54596877259384],[19.19435054825435,40.7530904203229],[19.024052469296922,40.962771344820695],[18.859946890785952,41.17501154682774],[18.7020338245696,41.389811027084534],[18.550313282496028,41.60716978633159],[18.40478527641339,41.82708782530942],[18.26544981816985,42.04956514475853],[18.13230691961357,42.27460174541944],[18.00535659259271,42.50219762803265],[17.88459884895543,42.73235279333867],[17.770033700549895,42.96506724207802],[17.66166115922426,43.2003409749912],[17.559481236826688,43.438173992818726],[17.46349394520534,43.6785662963011],[17.373699296208375,43.92151788617885],[17.290097301683957,44.16702876319246],[17.212687973480246,44.41509892808246],[17.1414713234454,44.66572838158935],[17.076447363427583,44.91891712445365],[17.017616105274953,45.17466515741586],[16.96497756083567,45.432972481216495],[16.9185317419579,45.693839096596065],[16.878278660489798,45.95726500429508],[16.844218328279528,46.22325020505404],[16.816350757175247,46.49179469961348],[16.794675959025124,46.76289848871389],[16.77919394567731,47.036561573095774],[16.76990472897997,47.31278395349966],[16.766808320781266,47.591565630666054],[16.76990472897997,47.87034675485656],[16.77919394567731,48.146568250165814],[16.794675959025124,48.42023014066039],[16.816350757175247,48.69133245040685],[16.844218328279528,48.95987520347178],[16.878278660489798,49.22585842392176],[16.9185317419579,49.48928213582336],[16.96497756083567,49.75014636324316],[17.017616105274953,50.008451130247735],[17.076447363427583,50.26419646090366],[17.1414713234454,50.517382379277514],[17.212687973480246,50.76800890943588],[17.290097301683957,51.01607607544532],[17.373699296208375,51.26158390137242],[17.46349394520534,51.504532411283755],[17.559481236826688,51.744921629245894],[17.66166115922426,51.98275157932543],[17.770033700549895,52.21802228558893],[17.88459884895543,52.450733772102964],[18.00535659259271,52.68088606293412],[18.13230691961357,52.908479182148966],[18.26544981816985,53.133513153814086],[18.40478527641339,53.355988001996046],[18.550313282496028,53.575903750761434],[18.7020338245696,53.79326042417682],[18.859946890785952,54.008058046308776],[19.024052469296922,54.2202966412239],[19.19435054825435,54.429976232988736],[19.370841115810066,54.63709684566989],[19.55352416011592,54.84165850333392],[19.74239966932375,55.0436612300474],[19.93746763158539,55.24310504987692],[20.136911457153865,55.43817301213856],[20.33891455578852,55.62704852134639],[20.54347691490069,55.80973156565224],[20.7505985219017,55.98622213320796],[20.960279364202883,56.15652021216539],[21.172519429215566,56.32062579067636],[21.387318704351078,56.47853885689271],[21.604677177020744,56.63025939896629],[21.824594834635903,56.77578740504892],[22.047071664607873,56.91512286329246],[22.272107654347995,57.04826576184874],[22.499702791267588,57.175216088869604],[22.729857062777988,57.295973832506874],[22.962570456290518,57.41053898091242],[23.197842959216512,57.51891152223805],[23.4356745589673,57.621091444635624],[23.67606524295421,57.717078736256965],[23.91901499858857,57.80687338525394],[24.164523813281708,57.89047537977835],[24.412591674444954,57.967884707982066],[24.66321856948964,58.03910135801691],[24.916404485827094,58.10412531803473],[25.17214941086864,58.162956576187355],[25.430453332025618,58.21559512062664],[25.691316236709348,58.262040939504416],[25.954738112331164,58.30229402097251],[26.22071894630239,58.336354353182784],[26.489258726034365,58.364221924287065],[26.760357438938406,58.38589672243719],[27.034015072425852,58.401378735785],[27.310231613908027,58.41066795248234],[27.589007050796262,58.41376436068104],[27.589007050796262,56.87700319126584],[27.35048134234664,56.87433326563482],[27.114135589578446,56.86632350503295],[26.879969793232185,56.85297393389709],[26.64798395404837,56.834284576664054],[26.41817807276751,56.81025545777068],[26.190552150130117,56.78088660165379],[25.965106186876696,56.74617803275024],[25.74184018374776,56.706129775496834],[25.520754141483824,56.66074185433041],[25.30184806082539,56.61001429368781],[25.08512194251297,56.55394711800585],[24.870575787287077,56.49254035172138],[24.658209595888216,56.42579401927122],[24.448023369056905,56.353708145092206],[24.240017107533646,56.27628275362116],[24.034190812058956,56.19351786929493],[23.830544483373338,56.105413516550335],[23.629078122217308,56.01196971982421],[23.429791729331374,55.91318650355338],[23.232685305456044,55.80906389217469],[23.03775885133183,55.69960191012497],[22.84501236769924,55.58480058184104],[22.65444585529879,55.464659931759726],[22.466059314870982,55.33917998431788],[22.279852747156333,55.20836076395233],[22.09582615289535,55.0722022950999],[21.913979532828538,54.930704602197416],[21.734312887696415,54.78386770968172],[21.55682621823949,54.63169164198965],[21.38151952519827,54.47417642355801],[21.208392809313267,54.311322078823665],[21.03744607132499,54.14312863222342],[20.870243519852988,53.9721815326194],[20.708349347225592,53.799054489182126],[20.55176352974648,53.62374750117107],[20.40048604371933,53.44626056784573],[20.254516865447822,53.26659368846559],[20.113855971235633,53.08474686229016],[19.978503337386446,52.90072008857891],[19.848458940203933,52.714513366591326],[19.723722755991773,52.52612669558692],[19.60429476105365,52.33556007482516],[19.49017493169324,52.14281350356555],[19.38136324421422,51.947886981067576],[19.27785967492027,51.75078050659073],[19.179664200115067,51.551494079394494],[19.086776796102292,51.350027698738366],[18.999197439185618,51.14638136388183],[18.916926105668733,50.940555074084386],[18.83996277185531,50.73254882860551],[18.768307414049023,50.522362626704705],[18.70196000855356,50.30999646764145],[18.64092053167259,50.09545035067524],[18.5851889597098,49.878724275065565],[18.534765268968865,49.65981824007192],[18.489649435753464,49.43873224495378],[18.449841436367272,49.21546628897066],[18.41534124711397,48.99002037138202],[18.386148844297242,48.762394491447374],[18.36226420422076,48.5325886484262],[18.343687303188204,48.30060284157799],[18.33041811750325,48.06643707016224],[18.32245662346958,47.830091333438425],[18.319802797390874,47.591565630666054],[18.32245662346958,47.35303956060069],[18.33041811750325,47.11669348028022],[18.343687303188204,46.88252738896412],[18.36226420422076,46.6505412859119],[18.386148844297242,46.420735170383026],[18.41534124711397,46.193109041637],[18.449841436367272,45.96766289893331],[18.489649435753464,45.74439674153145],[18.534765268968865,45.52331056869091],[18.5851889597098,45.30440437967117],[18.64092053167259,45.08767817373173],[18.70196000855356,44.87313195013208],[18.768307414049023,44.6607657081317],[18.83996277185531,44.45057944699008],[18.916926105668733,44.24257316596673],[18.999197439185618,44.036746864321124],[19.086776796102292,43.833100541312746],[19.179664200115067,43.631634196201105],[19.27785967492027,43.432347828245675],[19.38136324421422,43.23524143670595],[19.49017493169324,43.04031502084142],[19.60429476105365,42.84756857991158],[19.723722755991773,42.65700211317591],[19.848458940203933,42.46861561989391],[19.978503337386446,42.282409099325065],[20.113855971235633,42.09838255072887],[20.254516865447822,41.91653597336481],[20.40048604371933,41.73686936649237],[20.55176352974648,41.55938272937105],[20.708349347225592,41.38407606126033],[20.870243519852988,41.210949361419715],[21.03744607132499,41.04000262910868],[21.208392809313267,40.87279989201549],[21.38151952519827,40.71090517832209],[21.55682621823949,40.55431848802847],[21.734312887696415,40.403039821134634],[21.913979532828538,40.25706917764059],[22.09582615289535,40.11640655754632],[22.279852747156333,39.981051960851836],[22.466059314870982,39.85100538755713],[22.65444585529879,39.726266837662216],[22.84501236769924,39.606836311167086],[23.03775885133183,39.492713808071734],[23.232685305456044,39.38389932837617],[23.429791729331374,39.280392872080384],[23.629078122217308,39.182194439184386],[23.830544483373338,39.08930402968817],[24.034190812058956,39.00172164359174],[24.240017107533646,38.9194472808951],[24.448023369056905,38.84248094159823],[24.658209595888216,38.77082262570115],[24.870575787287077,38.70447233320386],[25.08512194251297,38.64343006410635],[25.30184806082539,38.58769581840862],[25.520754141483824,38.53726959611067],[25.74184018374776,38.49215139721251],[25.965106186876696,38.45234122171413],[26.190552150130117,38.41783906961554],[26.41817807276751,38.38864494091673],[26.64798395404837,38.3647588356177],[26.879969793232185,38.34618075371846],[27.114135589578446,38.332910695219],[27.35048134234664,38.324948660119325],[27.589007050796262,38.32229464841943],[27.589007050796262,36.76936487856496]],[[40.534236438865825,58.41376436068104],[40.534236438865825,42.94888021478677],[40.532909433015874,42.830112616704234],[40.52892841546604,42.712419268399294],[40.52229338621631,42.59580017061246],[40.51300434526669,42.48025532408425],[40.50106129261717,42.365784729555166],[40.48646422826777,42.25238838776572],[40.46921315221847,42.14006629945642],[40.449308064469285,42.02881846536778],[40.4267489650202,41.91864488624031],[40.40153585387123,41.80954556281452],[40.37366873102237,41.70152049583091],[40.343147596473614,41.594569686030006],[40.30997245022496,41.48869313415231],[40.27414329227642,41.38389084093833],[40.23566012262799,41.28016280712858],[40.194522941279665,41.17750903346357],[40.15073174823145,41.07592952068381],[40.10428654348335,40.9754242695298],[40.05518732703535,40.875993280742065],[40.00343409888745,40.777636555061115],[39.94902685903967,40.68035409322745],[39.891965607492,40.58414589598158],[39.83225034424443,40.48901196406402],[39.76988106929697,40.39495229821528],[39.704857782649626,40.301966899175866],[39.63718048430238,40.2100557676863],[39.566849174255246,40.11921890448708],[39.49386385250822,40.029456310318714],[39.418224519061305,39.94076798592172],[39.33993117391449,39.853153932036605],[39.258983817067794,39.76661414940388],[39.1753824485212,39.68114863876406],[39.08990690841332,39.59754727021746],[39.00332492855615,39.51659991337076],[38.9156365452347,39.43830656822395],[38.826841794733944,39.362667234777035],[38.73694071333888,39.28968191303001],[38.64593333733451,39.21935060298287],[38.55381970300582,39.15167330463563],[38.4605998466378,39.08665001798828],[38.366273804515444,39.024280743040826],[38.27084161292374,38.96456547979326],[38.17430330814769,38.907504228245585],[38.07665892647228,38.8530969883978],[37.977908504182494,38.80134376024991],[37.87805207756334,38.75224454380191],[37.777089682899806,38.705799339053804],[37.675021356476876,38.66200814600559],[37.57184713457955,38.620870964657264],[37.467567053492814,38.582387795008835],[37.362181149501666,38.54655863706029],[37.2556894588911,38.51338349081164],[37.1480920179461,38.482862356262885],[37.03938886295166,38.454995233414024],[36.92958003019278,38.42978212226505],[36.818665555954446,38.40722302281597],[36.70664547652165,38.38731793506678],[36.59351982817939,38.370066859017484],[36.47928864721265,38.35546979466808],[36.363951969906424,38.34352674201857],[36.24750983254571,38.33423770106894],[36.1299622714155,38.327602671819214],[36.01130932280078,38.323621654269374],[35.89155102298654,38.32229464841943],[35.77278307106362,38.323621654269374],[35.655089425937575,38.327602671819214],[35.538470097975534,38.33423770106894],[35.42292509754465,38.34352674201857],[35.30845443501206,38.35546979466808],[35.1950581207449,38.370066859017484],[35.082736165110326,38.38731793506678],[34.97148857847546,38.40722302281597],[34.861315371207446,38.42978212226505],[34.752216553673435,38.454995233414024],[34.644192136240555,38.482862356262885],[34.53724212927596,38.51338349081164],[34.43136654314678,38.54655863706029],[34.32656538822016,38.582387795008835],[34.22283867486324,38.620870964657264],[34.120186413443164,38.66200814600559],[34.018608614327064,38.705799339053804],[33.918105287882085,38.75224454380191],[33.81867644447537,38.80134376024991],[33.720322094474064,38.8530969883978],[33.6230422482453,38.907504228245585],[33.52683691615621,38.96456547979326],[33.431706108573955,39.024280743040826],[33.33764983586566,39.08665001798828],[33.24466810839848,39.15167330463563],[33.152760936539536,39.21935060298287],[33.06192833065599,39.28968191303001],[32.972170301114964,39.362667234777035],[32.883486858283604,39.43830656822395],[32.79587801252906,39.51659991337076],[32.70934377421847,39.59754727021746],[32.62388415371896,39.68114863876406],[32.54028278517237,39.76661414940388],[32.459335428325666,39.853153932036605],[32.38104208317886,39.94076798592172],[32.30540274973194,40.029456310318714],[32.23241742798491,40.11921890448708],[32.16208611793778,40.2100557676863],[32.09440881959054,40.301966899175866],[32.02938553294319,40.39495229821528],[31.96701625799573,40.48901196406402],[31.907300994748166,40.58414589598158],[31.85023974320049,40.68035409322745],[31.79583250335271,40.777636555061115],[31.744079275204818,40.875993280742065],[31.69498005875682,40.9754242695298],[31.648534854008712,41.07592952068381],[31.604743660960494,41.17750903346357],[31.563606479612172,41.28016280712858],[31.52512330996374,41.38389084093833],[31.4892941520152,41.48869313415231],[31.456119005766553,41.594569686030006],[31.425597871217796,41.70152049583091],[31.397730748368932,41.80954556281452],[31.37251763721996,41.91864488624031],[31.349958537770878,42.02881846536778],[31.33005345002169,42.14006629945642],[31.312802373972392,42.25238838776572],[31.298205309622986,42.365784729555166],[31.286262256973473,42.48025532408425],[31.27697321602385,42.59580017061246],[31.270338186774122,42.712419268399294],[31.266357169224285,42.830112616704234],[31.26503016337434,42.94888021478677],[31.26503016337434,58.41376436068104],[29.712035686764732,58.41376436068104],[29.712035686764732,42.94888021478677],[29.71380508911349,42.78985683940931],[29.71911328826099,42.632287421442996],[29.727960272359073,42.4761719357105],[29.74034602955958,42.32151035703446],[29.756270548014342,42.16830266023756],[29.77573381587521,42.01654882014243],[29.798735821294013,41.86624881157175],[29.825276552422597,41.71740260934817],[29.855355997412797,41.57001018829435],[29.888974144416455,41.424071523232946],[29.92613098158541,41.27958658898662],[29.966826497071498,41.136555360378026],[30.011060679026563,40.99497781222982],[30.05883351560244,40.85485391936467],[30.11014499495097,40.71618365660524],[30.164995105223998,40.57896699877416],[30.223383834573355,40.443203920694124],[30.28531117115088,40.308894397187764],[30.35077710310842,40.176038403077754],[30.419781618597806,40.04463591318674],[30.492324705770883,39.914686902337394],[30.568406352779487,39.78619134535236],[30.648026547775462,39.659149217054306],[30.73118527891064,39.533560492265885],[30.817882534336864,39.40942514580976],[30.908118302205974,39.28674315250859],[31.00189257066981,39.165514487185035],[31.09920532788021,39.04573912466174],[31.200056561989012,38.92741703976139],[31.304446261148055,38.81054820730661],[31.41237441350918,38.69513260212008],[31.52384100722423,38.581170199024456],[31.63780360544425,38.46969791226818],[31.75321977082663,38.361764789603626],[31.870089490782693,38.257370807334475],[31.98841275272377,38.15651594176441],[32.1081895440612,38.059200169197105],[32.22941985220629,37.96542346593624],[32.352103664570386,37.875185808285494],[32.47624096856482,37.78848717254854],[32.601831751600905,37.70532753502907],[32.728876001089986,37.62570687203075],[32.85737370444338,37.54962515985726],[32.98732484907243,37.477082374812284],[33.118729422388455,37.40807849319949],[33.25158741180279,37.342613491322574],[33.38589880472676,37.2806873454852],[33.52166358857169,37.22230003199105],[33.65888175074892,37.167451527143804],[33.79755327866977,37.11614180724714],[33.93767815974557,37.06837084860474],[34.07925638138766,37.02413862752027],[34.22228793100736,36.983445120297425],[34.366772796015994,36.94629030323988],[34.5127109638249,36.912674152651306],[34.66010242184541,36.88259664483538],[34.808947157488845,36.856057756095794],[34.95924515816654,36.833057462736214],[35.11099641128982,36.813595741060325],[35.26420090427001,36.7976725673718],[35.41885862451846,36.78528791797432],[35.57496955944647,36.776441769171576],[35.73253369646539,36.77113409726722],[35.89155102298654,36.76936487856496],[36.050583706698696,36.77113409726722],[36.208194681471674,36.776441769171576],[36.36438394656497,36.78528791797432],[36.51915150123807,36.7976725673718],[36.672497344750475,36.813595741060325],[36.824421476361664,36.833057462736214],[36.97492389533112,36.856057756095794],[37.12400460091836,36.88259664483538],[37.27166359238285,36.912674152651306],[37.417900868984084,36.94629030323988],[37.562716429981556,36.983445120297425],[37.70611027463476,37.02413862752027],[37.848082402203175,37.06837084860474],[37.988632811946296,37.11614180724714],[38.127761503123615,37.167451527143804],[38.26546847499463,37.22230003199105],[38.40175372681881,37.2806873454852],[38.53661725785566,37.342613491322574],[38.67005906736467,37.40807849319949],[38.802079154605316,37.477082374812284],[38.93267751883711,37.54962515985726],[39.06185415931952,37.62570687203075],[39.189609075312056,37.70532753502907],[39.315942266074195,37.78848717254854],[39.440853730865435,37.875185808285494],[39.56434346894525,37.96542346593624],[39.68641147957315,38.059200169197105],[39.80705776200862,38.15651594176441],[39.92628231551114,38.257370807334475],[40.044085139340204,38.361764789603626],[40.160466232755304,38.46969791226818],[40.27542559501593,38.581170199024456],[40.38689218873098,38.69513260212008],[40.49482034109211,38.81054820730661],[40.59921004025115,38.92741703976139],[40.70006127435995,39.04573912466174],[40.79737403157035,39.165514487185035],[40.89114830003419,39.28674315250859],[40.9813840679033,39.40942514580976],[41.06808132332952,39.533560492265885],[41.1512400544647,39.659149217054306],[41.230860249460676,39.78619134535236],[41.30694189646928,39.914686902337394],[41.37948498364236,40.04463591318674],[41.448489499131746,40.176038403077754],[41.51395543108928,40.308894397187764],[41.57588276766681,40.443203920694124],[41.634271497016165,40.57896699877416],[41.68912160728919,40.71618365660524],[41.74043308663772,40.85485391936467],[41.7882059232136,40.99497781222982],[41.832440105168665,41.136555360378026],[41.87313562065476,41.27958658898662],[41.91029245782371,41.424071523232946],[41.943910604827366,41.57001018829435],[41.973990049817566,41.71740260934817],[42.00053078094615,41.86624881157175],[42.02353278636495,42.01654882014243],[42.04299605422582,42.16830266023756],[42.058920572680584,42.32151035703446],[42.07130632988109,42.4761719357105],[42.080153313979174,42.632287421442996],[42.085461513126674,42.78985683940931],[42.08723091547543,42.94888021478677],[42.08723091547543,58.41376436068104],[40.534236438865825,58.41376436068104]],[[45.76318527712618,42.94888021478677],[45.76318527712618,56.87700319126584],[46.523517959163904,56.87700319126584],[46.70266014509105,56.87499676849808],[46.88015966647007,56.86897751623917],[47.05601651145282,56.858945458555695],[47.23023066819111,56.844900619514235],[47.40280212483681,56.826843023181354],[47.57373086954175,56.80477269362364],[47.74301689045775,56.778689654907666],[47.91066017573668,56.748593931100004],[48.07666071353036,56.714485546267234],[48.24101849199063,56.67636452447593],[48.403733499269336,56.634230889792676],[48.56480572351831,56.58808466628404],[48.724235152889406,56.53792587801661],[48.88202177553444,56.48375454905694],[49.03816557960527,56.425570703471635],[49.19266655325373,56.363374365327246],[49.345524684631656,56.29716555869037],[49.496739961890896,56.22694430762756],[49.64631237318328,56.15271063620543],[49.794241906660645,56.07446456849051],[49.94052855047484,55.99220612854941],[50.0851722927777,55.9059353404487],[50.228173121721056,55.81565222825495],[50.369531025456766,55.72135681603474],[50.509245992136655,55.62304912785464],[50.64731800991257,55.52072918778124],[50.783747066936336,55.41439701988111],[50.91853315135981,55.30405264822082],[51.05167625133482,55.189696096866946],[51.18317635501321,55.07132738988608],[51.31303345054682,54.948946551344775],[51.44124752608749,54.822553605309636],[51.56764028841443,54.69433952976897],[51.69002095472543,54.56448243423536],[51.80838950058366,54.43298233055697],[51.922745901552275,54.29983923058195],[52.033090133194456,54.165053146158485],[52.13942217107337,54.02862408913471],[52.24174199075218,53.8905520713588],[52.34004956779406,53.75083710467891],[52.43434487776218,53.609479200943206],[52.5246278962197,53.46647837199984],[52.6108985987298,53.32183462969699],[52.69315696085563,53.17554798588279],[52.77140295816038,53.02761845240542],[52.845636566207205,52.87804604111304],[52.91585776055928,52.726830763853805],[52.98206651677976,52.57397263247588],[53.04426281043184,52.41947165882742],[53.10244661707866,52.26332785475659],[53.15661791228341,52.10554123211155],[53.20677667160924,51.94611180274046],[53.25292287061934,51.785039578491485],[53.29505648487686,51.62232457121278],[53.33317748994497,51.45796679275251],[53.367285861386854,51.29196625495883],[53.39738157476567,51.1243229696799],[53.423464605644575,50.95503694876389],[53.445534929586756,50.78410820405896],[53.46359252215537,50.61153674741326],[53.477637358913604,50.43732259067497],[53.487669415424605,50.26146574569222],[53.49368866725155,50.0839662243132],[53.4956950899576,49.90482403838605],[53.49368866725155,49.726656843159226],[53.487669415424605,49.550069787514815],[53.477637358913604,49.37506284553497],[53.46359252215537,49.201635991301835],[53.445534929586756,49.02978919889756],[53.423464605644575,48.859522442404305],[53.39738157476567,48.690835695904205],[53.367285861386854,48.52372893347941],[53.33317748994497,48.358202129212074],[53.29505648487686,48.194255257184345],[53.25292287061934,48.03188829147837],[53.20677667160924,47.871101206176284],[53.15661791228341,47.711893975360255],[53.10244661707866,47.55426657311242],[53.04426281043184,47.398218973514936],[52.98206651677976,47.24375115064995],[52.91585776055928,47.0908630785996],[52.845636566207205,46.939554731446044],[52.77140295816038,46.78982608327143],[52.69315696085563,46.6416771081579],[52.6108985987298,46.49510778018761],[52.5246278962197,46.3501180734427],[52.43434487776218,46.20670796200533],[52.34004956779406,46.06487741995764],[52.24174199075218,45.92462642138178],[52.13942217107337,45.7859549403599],[52.033090133194456,45.64886295097414],[51.922745901552275,45.51335042730666],[51.80838950058366,45.37941734343961],[51.69002095472543,45.24706367345513],[51.56764028841443,45.116289391435366],[51.44124752608749,44.98709447146247],[51.31303345054682,44.86169261006443],[51.18317635501321,44.740272132768695],[51.05167625133482,44.62283301513844],[50.91853315135981,44.509375232736836],[50.783747066936336,44.39989876112705],[50.64731800991257,44.29440357587224],[50.509245992136655,44.192889652535584],[50.369531025456766,44.09535696668026],[50.228173121721056,44.00180549386941],[50.0851722927777,43.91223520966623],[49.94052855047484,43.82664608963387],[49.794241906660645,43.74503810933551],[49.64631237318328,43.66741124433431],[49.496739961890896,43.593765470193446],[49.345524684631656,43.52410076247608],[49.19266655325373,43.458417096745386],[49.03816557960527,43.39671444856453],[48.88202177553444,43.33899279349668],[48.724235152889406,43.285252107105],[48.56480572351831,43.23549236495266],[48.403733499269336,43.189713542602846],[48.24101849199063,43.1479156156187],[48.07666071353036,43.11009855956341],[47.91066017573668,43.076262350000135],[47.74301689045775,43.04640696249204],[47.57373086954175,43.02053237260231],[47.40280212483681,42.9986385558941],[47.23023066819111,42.98072548793057],[47.05601651145282,42.96679314427491],[46.88015966647007,42.95684150049028],[46.70266014509105,42.95087053213984],[46.523517959163904,42.94888021478677],[45.76318527712618,42.94888021478677]],[[44.210259551443905,58.41376436068104],[44.210259551443905,36.76936487856496],[45.76318527712618,36.76936487856496],[45.76318527712618,41.41205029444424],[46.523517959163904,41.41205029444424],[46.74291556657089,41.414483205518636],[46.960290846967325,41.42178193034937],[47.17564381220136,41.43394645634777],[47.38897447412115,41.450976770925166],[47.60028284457486,41.47287286149289],[47.80956893541066,41.49963471546228],[48.0168327584767,41.53126232024464],[48.22207432562114,41.567755663251326],[48.425293648692154,41.609114731893655],[48.62649073953789,41.65533951358295],[48.82566561000652,41.70642999573056],[49.022818271946186,41.76238616574779],[49.21794873720507,41.823208011045985],[49.411057017631315,41.888895519036474],[49.60214312507309,41.95944867713058],[49.79120707137856,42.034867472739634],[49.97824886839588,42.11515189327496],[50.16326852797321,42.2003019261479],[50.346266061958715,42.29031755876978],[50.52724148220055,42.38519877855192],[50.70619480054688,42.48494557290565],[50.883126028845865,42.58955792924231],[51.058035178945666,42.69903583497322],[51.23092226269444,42.81337927750972],[51.40178729194036,42.93258824426312],[51.57063027853157,43.056662722644774],[51.73745123431624,43.185602700065985],[51.902250171142526,43.31940816393811],[52.06502710085859,43.45807910167245],[52.225782035312605,43.60161550068035],[52.38451498635271,43.75001734837314],[52.54122596582709,43.90328463216215],[52.694493238014765,44.059979887029115],[52.842895051890935,44.21866565585458],[52.986431396347925,44.37934193789802],[53.125102260278105,44.54200873241893],[53.25890763257381,44.706666038676794],[53.3878475021274,44.873313855931116],[53.51192185783121,45.04195218344137],[53.631130688577606,45.212581020467056],[53.74547398325893,45.385200366267654],[53.85495173076753,45.55981022010267],[53.95956391999576,45.73641058123158],[54.059310539835955,45.915001448913884],[54.154191579180484,46.095582822409064],[54.244207026921686,46.27815470097661],[54.32935687195191,46.462717083876015],[54.4096411031635,46.649269970366774],[54.48505970944882,46.83781335970836],[54.55561267970021,47.028347251160284],[54.621300002810024,47.22087164398202],[54.68212166767061,47.41538653743307],[54.7380776631743,47.61189193077292],[54.78916797821348,47.81038782326105],[54.83539260168046,48.01087421415697],[54.876751522467615,48.213351102720154],[54.91324472946729,48.41781848821009],[54.94487221157183,48.624276369886275],[54.971633957673575,48.8327247470082],[54.993529956664894,49.04316361883536],[55.010560197438124,49.25559298462723],[55.02272466888562,49.47001284364331],[55.03002335989973,49.686423195143085],[55.0324562593728,49.90482403838605],[55.03002335989973,50.12422164579304],[55.02272466888562,50.341596926189474],[55.010560197438124,50.5569498914235],[54.993529956664894,50.7702805533433],[54.971633957673575,50.981588923797005],[54.94487221157183,51.19087501463281],[54.91324472946729,51.39813883769885],[54.876751522467615,51.60338040484329],[54.83539260168046,51.8065997279143],[54.78916797821348,52.00779681876004],[54.7380776631743,52.206971689228666],[54.68212166767061,52.404124351168335],[54.621300002810024,52.59925481642722],[54.55561267970021,52.792363096853464],[54.48505970944882,52.98344920429524],[54.4096411031635,53.17251315060071],[54.32935687195191,53.35955494761802],[54.244207026921686,53.54457460719536],[54.154191579180484,53.72757214118086],[54.059310539835955,53.908547561422694],[53.95956391999576,54.087500879769024],[53.85495173076753,54.264432108068014],[53.74547398325893,54.439341258167815],[53.631130688577606,54.61222834191659],[53.51192185783121,54.78309337116251],[53.3878475021274,54.951936357753716],[53.25890763257381,55.11875731353838],[53.125102260278105,55.28355625036467],[52.986431396347925,55.44633318008074],[52.842895051890935,55.60708811453475],[52.694493238014765,55.76582106557486],[52.54122596582709,55.92253204504924],[52.38451498635271,56.07579932303758],[52.225782035312605,56.22420115382205],[52.06502710085859,56.3677375255545],[51.902250171142526,56.50640842638676],[51.73745123431624,56.64021384447068],[51.57063027853157,56.76915376795807],[51.40178729194036,56.89322818500081],[51.23092226269444,57.01243708375071],[51.058035178945666,57.12678045235962],[50.883126028845865,57.23625827897938],[50.70619480054688,57.34087055176182],[50.52724148220055,57.44061725885878],[50.346266061958715,57.53549838842211],[50.16326852797321,57.62551392860365],[49.97824886839588,57.71066386755524],[49.79120707137856,57.790948193428704],[49.60214312507309,57.866366894375886],[49.411057017631315,57.93691995854863],[49.21794873720507,58.00260737409879],[49.022818271946186,58.063429129178175],[48.82566561000652,58.119385211938635],[48.62649073953789,58.17047561053202],[48.425293648692154,58.21670031311017],[48.22207432562114,58.25805930782491],[48.0168327584767,58.29455258282809],[47.80956893541066,58.32618012627154],[47.60028284457486,58.35294192630711],[47.38897447412115,58.374837971086635],[47.17564381220136,58.391868248761945],[46.960290846967325,58.40403274748489],[46.74291556657089,58.411331455407314],[46.523517959163904,58.41376436068104],[44.210259551443905,58.41376436068104]],[[67.97755218975989,36.76936487856496],[67.69878263733474,36.772461101142476],[67.42257162413031,36.78174977677381],[67.14891917384293,36.79723091730712],[66.87782531016892,36.81890453459055],[66.6092900568046,36.84677064047229],[66.3433134374463,36.88082924680048],[66.07989547579034,36.921080365423286],[65.81903619553302,36.967524008188875],[65.56073562037068,37.0201601869454],[65.30499377399966,37.07898891354102],[65.05181068011623,37.144010199823896],[64.80118636241676,37.215224057642196],[64.55312084459756,37.292630498844076],[64.30761415035494,37.3762295352777],[64.06466630338521,37.46602117879122],[63.82427732738473,37.56200544123281],[63.58644724604979,37.66418233445062],[63.35117608307672,37.77255187029282],[63.118463862161846,37.88711406060756],[62.888310607001486,38.00786891724301],[62.66071634129196,38.134816452047325],[62.435681088729595,38.267956676868664],[62.2132048730107,38.40728960355519],[61.99328771783161,38.552815243955074],[61.77592964688864,38.70453360991646],[61.56113068387812,38.862444713287516],[61.34889085249635,39.02654856591641],[61.139210176439676,39.19684517965129],[60.93208867940441,39.37333456634032],[60.72752638508687,39.55601673783167],[60.52552331718338,39.74489170597349],[60.326079499390254,39.93995948261394],[60.131011722749804,40.13940330447987],[59.94213675460798,40.341406400893],[59.759454583116636,40.54596877259384],[59.5829651964276,40.7530904203229],[59.41266858269272,40.962771344820695],[59.248564730063826,41.17501154682774],[59.09065362669277,41.389811027084534],[58.938935260731384,41.60716978633159],[58.7934096203315,41.82708782530942],[58.654076693644974,42.04956514475853],[58.520936468823635,42.27460174541944],[58.39398893401932,42.50219762803265],[58.273234077383876,42.73235279333867],[58.15867188706913,42.96506724207802],[58.05030235122693,43.2003409749912],[57.94812545800912,43.438173992818726],[57.85214119556753,43.6785662963011],[57.76234955205401,43.92151788617885],[57.678750515620386,44.16702876319246],[57.601344074418506,44.41509892808246],[57.530130216600206,44.66572838158935],[57.46510893031733,44.91891712445365],[57.40628020372171,45.17466515741586],[57.353644024965185,45.432972481216495],[57.307200382199596,45.693839096596065],[57.26694926357679,45.95726500429508],[57.2328906572486,46.22325020505404],[57.20502455136687,46.49179469961348],[57.18335093408343,46.76289848871389],[57.16786979355012,47.036561573095774],[57.158581117918786,47.31278395349966],[57.15548489534127,47.591565630666054],[57.158581117918786,47.87034675485656],[57.16786979355012,48.146568250165814],[57.18335093408343,48.42023014066039],[57.20502455136687,48.69133245040685],[57.2328906572486,48.95987520347178],[57.26694926357679,49.22585842392176],[57.307200382199596,49.48928213582336],[57.353644024965185,49.75014636324316],[57.40628020372171,50.008451130247735],[57.46510893031733,50.26419646090366],[57.530130216600206,50.517382379277514],[57.601344074418506,50.76800890943588],[57.678750515620386,51.01607607544532],[57.76234955205401,51.26158390137242],[57.85214119556753,51.504532411283755],[57.94812545800912,51.744921629245894],[58.05030235122693,51.98275157932543],[58.15867188706913,52.21802228558893],[58.273234077383876,52.450733772102964],[58.39398893401932,52.68088606293412],[58.520936468823635,52.908479182148966],[58.654076693644974,53.133513153814086],[58.7934096203315,53.355988001996046],[58.938935260731384,53.575903750761434],[59.09065362669277,53.79326042417682],[59.248564730063826,54.008058046308776],[59.41266858269272,54.2202966412239],[59.5829651964276,54.429976232988736],[59.759454583116636,54.63709684566989],[59.94213675460798,54.84165850333392],[60.131011722749804,55.0436612300474],[60.326079499390254,55.24310504987692],[60.52552331718338,55.43817301213856],[60.72752638508687,55.62704852134639],[60.93208867940441,55.80973156565224],[61.139210176439676,55.98622213320796],[61.34889085249635,56.15652021216539],[61.56113068387812,56.32062579067636],[61.77592964688864,56.47853885689271],[61.99328771783161,56.63025939896629],[62.2132048730107,56.77578740504892],[62.435681088729595,56.91512286329246],[62.66071634129196,57.04826576184874],[62.888310607001486,57.175216088869604],[63.118463862161846,57.295973832506874],[63.35117608307672,57.41053898091242],[63.58644724604979,57.51891152223805],[63.82427732738473,57.621091444635624],[64.06466630338521,57.717078736256965],[64.30761415035494,57.80687338525394],[64.55312084459756,57.89047537977835],[64.80118636241676,57.967884707982066],[65.05181068011623,58.03910135801691],[65.30499377399966,58.10412531803473],[65.56073562037068,58.162956576187355],[65.81903619553302,58.21559512062664],[66.07989547579034,58.262040939504416],[66.3433134374463,58.30229402097251],[66.6092900568046,58.336354353182784],[66.87782531016892,58.364221924287065],[67.14891917384293,58.38589672243719],[67.42257162413031,58.401378735785],[67.69878263733474,58.41066795248234],[67.97755218975989,58.41376436068104],[67.97755218975989,56.87700319126584],[67.73903824443578,56.87433326563482],[67.50270353131475,56.86632350503295],[67.26854807409318,56.85297393389709],[67.03657189646734,56.834284576664054],[66.80677502213358,56.81025545777068],[66.57915747478822,56.78088660165379],[66.35371927812758,56.74617803275024],[66.13046045584798,56.706129775496834],[65.90938103164574,56.66074185433041],[65.69048102921717,56.61001429368781],[65.47376047225862,56.55394711800585],[65.25921938446638,56.49254035172138],[65.04685778953679,56.42579401927122],[64.83667571116618,56.353708145092206],[64.62867317305084,56.27628275362116],[64.42285019888712,56.19351786929493],[64.21920681237134,56.105413516550335],[64.0177430371998,56.01196971982421],[63.818458897068844,55.91318650355338],[63.62135441567479,55.80906389217469],[63.42642961671394,55.69960191012497],[63.23368452388264,55.58480058184104],[63.0431191608772,55.464659931759726],[62.854733551393934,55.33917998431788],[62.66852771912918,55.20836076395233],[62.48450168777924,55.0722022950999],[62.30265548104046,54.930704602197416],[62.12298912260914,54.78386770968172],[61.945502636181615,54.63169164198965],[61.7701960454542,54.47417642355801],[61.59706937412322,54.311322078823665],[61.42612264588499,54.14312863222342],[61.2589199087918,53.9721815326194],[61.097025195098404,53.799054489182126],[60.94043850480478,53.62374750117107],[60.78915983791095,53.44626056784573],[60.6431891944169,53.26659368846559],[60.50252657432263,53.08474686229016],[60.367171977628146,52.90072008857891],[60.23712540433345,52.714513366591326],[60.112386854438526,52.52612669558692],[59.992956327943396,52.33556007482516],[59.878833824848044,52.14281350356555],[59.77001934515248,51.947886981067576],[59.6665128888567,51.75078050659073],[59.5683144559607,51.551494079394494],[59.47542404646448,51.350027698738366],[59.38784166036805,51.14638136388183],[59.30556729767141,50.940555074084386],[59.22860095837454,50.73254882860551],[59.15694264247747,50.522362626704705],[59.09059234998017,50.30999646764145],[59.02955008088266,50.09545035067524],[58.97381583518493,49.878724275065565],[58.92338961288698,49.65981824007192],[58.87827141398882,49.43873224495378],[58.838461238490446,49.21546628897066],[58.80395908639185,48.99002037138202],[58.77476495769304,48.762394491447374],[58.75087885239401,48.5325886484262],[58.73230077049477,48.30060284157799],[58.71903071199531,48.06643707016224],[58.711068676895636,47.830091333438425],[58.70841466519574,47.591565630666054],[58.711068676895636,47.35303956060069],[58.71903071199531,47.11669348028022],[58.73230077049477,46.88252738896412],[58.75087885239401,46.6505412859119],[58.77476495769304,46.420735170383026],[58.80395908639185,46.193109041637],[58.838461238490446,45.96766289893331],[58.87827141398882,45.74439674153145],[58.92338961288698,45.52331056869091],[58.97381583518493,45.30440437967117],[59.02955008088266,45.08767817373173],[59.09059234998017,44.87313195013208],[59.15694264247747,44.6607657081317],[59.22860095837454,44.45057944699008],[59.30556729767141,44.24257316596673],[59.38784166036805,44.036746864321124],[59.47542404646448,43.833100541312746],[59.5683144559607,43.631634196201105],[59.6665128888567,43.432347828245675],[59.77001934515248,43.23524143670595],[59.878833824848044,43.04031502084142],[59.992956327943396,42.84756857991158],[60.112386854438526,42.65700211317591],[60.23712540433345,42.46861561989391],[60.367171977628146,42.282409099325065],[60.50252657432263,42.09838255072887],[60.6431891944169,41.91653597336481],[60.78915983791095,41.73686936649237],[60.94043850480478,41.55938272937105],[61.097025195098404,41.38407606126033],[61.2589199087918,41.210949361419715],[61.42612264588499,41.04000262910868],[61.59706937412322,40.87279989201549],[61.7701960454542,40.71090517832209],[61.945502636181615,40.55431848802847],[62.12298912260914,40.403039821134634],[62.30265548104046,40.25706917764059],[62.48450168777924,40.11640655754632],[62.66852771912918,39.981051960851836],[62.854733551393934,39.85100538755713],[63.0431191608772,39.726266837662216],[63.23368452388264,39.606836311167086],[63.42642961671394,39.492713808071734],[63.62135441567479,39.38389932837617],[63.818458897068844,39.280392872080384],[64.0177430371998,39.182194439184386],[64.21920681237134,39.08930402968817],[64.42285019888712,39.00172164359174],[64.62867317305084,38.9194472808951],[64.83667571116618,38.84248094159823],[65.04685778953679,38.77082262570115],[65.25921938446638,38.70447233320386],[65.47376047225862,38.64343006410635],[65.69048102921717,38.58769581840862],[65.90938103164574,38.53726959611067],[66.13046045584798,38.49215139721251],[66.35371927812758,38.45234122171413],[66.57915747478822,38.41783906961554],[66.80677502213358,38.38864494091673],[67.03657189646734,38.3647588356177],[67.26854807409318,38.34618075371846],[67.50270353131475,38.332910695219],[67.73903824443578,38.324948660119325],[67.97755218975989,38.32229464841943],[67.97755218975989,36.76936487856496]],[[76.91134695583862,58.70497509007852],[70.10051611897323,36.76936487856496],[71.71857323787074,36.76936487856496],[72.6727147840534,39.85912052458976],[81.13342228665378,39.85912052458976],[82.1041206738065,36.76936487856496],[83.72152263680829,36.76936487856496],[76.91134695583862,58.70497509007852]],[[76.91134695583862,53.496032771671366],[80.66429831192744,41.41205029444424],[73.15839559974982,41.41205029444424],[76.91134695583862,53.496032771671366]],[[94.88694823900464,58.41376436068104],[87.38104552682702,45.11649989338741],[87.38104552682702,58.41376436068104],[85.82858488094728,58.41376436068104],[85.82858488094728,36.76936487856496],[87.38104552682702,36.76936487856496],[87.38104552682702,41.978238446044784],[93.99773992159965,36.76936487856496],[96.50501344624655,36.76936487856496],[88.14170578681262,43.337096480561605],[96.66668327395053,58.41376436068104],[94.88694823900464,58.41376436068104]],[[98.77374551808951,58.41376436068104],[98.77374551808951,36.76936487856496],[109.59594222601841,36.76936487856496],[109.59594222601841,38.32229464841943],[100.32620616396926,38.32229464841943],[100.32620616396926,41.41205029444424],[106.50625128674874,41.41205029444424],[106.50625128674874,42.94888021478677],[100.32620616396926,42.94888021478677],[100.32620616396926,56.87700319126584],[109.59594222601841,56.87700319126584],[109.59594222601841,58.41376436068104],[98.77374551808951,58.41376436068104]],[[118.01158956201189,50.69748987713013],[118.03401488387817,50.69142597069616],[118.0568137071633,50.68536082020532],[118.07998702711281,50.67929460338],[118.10353583897216,50.673227497942634],[118.12746113798688,50.66715968161562],[118.15176391940247,50.66109133212138],[118.17644517846442,50.65502262718231],[118.20150591041825,50.64895374452084],[118.22694711050943,50.64288486185936],[118.2527697739835,50.6368161569203],[118.27897489608593,50.63074780742605],[118.30556347206223,50.62467999109904],[118.33253649715792,50.618612885661676],[118.35989496661847,50.61254666883636],[118.3876398756894,50.60648151834551],[118.41577221961622,50.60041761191154],[118.5571504249285,50.56897832191924],[118.6961602051261,50.537349899737194],[118.83280144024641,50.505532309820936],[118.9670740103268,50.473525516625976],[119.09897779540464,50.441329484607834],[119.22851267551728,50.40894417822203],[119.35567853070214,50.37636956192407],[119.48047524099654,50.34360560016948],[119.60290268643789,50.310652257413786],[119.72296074706355,50.277509498112494],[119.84064930291089,50.244177286721126],[119.95596823401729,50.2106555876952],[120.06891742042012,50.17694436549023],[120.17949674215674,50.14304358456174],[120.28770607926454,50.10895320936525],[120.39354531178088,50.074673204356266],[120.49701431974316,50.04020353399031],[120.59811298318871,50.005544162722906],[120.69684118215493,49.97069505500957],[120.79319879667918,49.935656175305816],[120.88718570679885,49.900427488067166],[120.9788017925513,49.86500895774913],[121.06804693397389,49.829400548807236],[121.15492101110402,49.793602225697],[121.23942390397904,49.75761395287393],[121.32155549263634,49.721435694793556],[121.40131565711329,49.68506741591139],[121.47870427744724,49.64850908068295],[121.55372123367559,49.61176065356375],[121.6263664058357,49.57482209900932],[121.69663967396495,49.537693381475165],[121.7645409181007,49.50037446541681],[121.85797110289458,49.447061010001626],[121.95016678487241,49.39226254018398],[122.04112808695884,49.33597904263469],[122.13085513207852,49.27821050402458],[122.21934804315616,49.21895691102445],[122.30660694311639,49.15821825030514],[122.39263195488391,49.095994508537466],[122.47742320138336,49.032285672392234],[122.56098080553942,48.967091728540275],[122.64330489027675,48.90041266365241],[122.72439557852003,48.83224846439945],[122.80425299319391,48.76259911745221],[122.88287725722309,48.69146460948153],[122.9602684935322,48.61884492715821],[123.03642682504592,48.54474005715307],[123.11135237468893,48.46914998613694],[123.1850452653859,48.39207470078063],[123.25750562006147,48.31351418775497],[123.32873356164032,48.23346843373076],[123.39872921304713,48.15193742537884],[123.46749269720657,48.06892114937002],[123.53502413704328,47.98441959237512],[123.60132365548195,47.89843274106495],[123.66639137544725,47.81096058211034],[123.73022741986382,47.722003102182114],[123.79283191165636,47.631560287951075],[123.85420497374953,47.53963212608806],[123.91434672906799,47.44621860326387],[123.9732573005364,47.35131970614934],[124.03093681107944,47.25493542141528],[124.08738538362178,47.157065735732516],[124.14260314108807,47.05771063577186],[124.19531447791168,46.96042940232094],[124.24635612008947,46.86270595848607],[124.2957278262152,46.76454029093806],[124.34342935488256,46.665932386347734],[124.38946046468529,46.56688223138591],[124.43382091421711,46.46738981272341],[124.47651046207174,46.36745511703106],[124.51752886684294,46.267078130979655],[124.55687588712439,46.166258841240044],[124.59455128150984,46.06499723448302],[124.63055480859302,45.96329329737942],[124.66488622696762,45.861147016600064],[124.69754529522741,45.758558378815756],[124.72853177196609,45.65552737069733],[124.7578454157774,45.552053978915595],[124.78548598525504,45.44813819014138],[124.81145323899275,45.34377999104549],[124.83574693558425,45.23897936829876],[124.8583668336233,45.133736308572],[124.87931269170357,45.02805079853602],[124.89858426841882,44.92192282486166],[124.91618132236276,44.81535237421973],[124.93210361212913,44.70833943328105],[124.94635089631164,44.60088398871643],[124.95892293350401,44.4929860271967],[124.9698194823,44.38464553539268],[124.9790403012933,44.27586249997518],[124.98658514907764,44.16663690761503],[124.99245378424676,44.05696874498304],[124.99664596539438,43.94685799875003],[124.99916145111422,43.83630465558683],[125,43.72530870216424],[124.99800836466247,43.54616687415029],[124.99203362057472,43.36866767810201],[124.98207601062407,43.192811140677776],[124.9681357776978,43.018597288535936],[124.9502131646832,42.846026148334865],[124.9283084144676,42.675097746732924],[124.90242176993824,42.50581211038846],[124.87255347398245,42.33816926595985],[124.83870376948752,42.17216924010545],[124.80087289934075,42.00781205948362],[124.75906110642941,41.84509775075273],[124.71326863364084,41.68402634057112],[124.66349572386228,41.52459785559718],[124.60974261998108,41.36681232248925],[124.55200956488449,41.21066976790571],[124.49029680145982,41.0561702185049],[124.42460457259438,40.903313700945205],[124.35493312117545,40.75210024188497],[124.28128269009032,40.60252986798256],[124.2036535222263,40.45460260589634],[124.12204586047068,40.30831848228466],[124.03645994771075,40.1636775238059],[123.9468960268338,40.020679757118415],[123.85335434072714,39.879325208880566],[123.75583513227807,39.73961390575071],[123.65433864437385,39.60154587438721],[123.5488651199018,39.465121141448435],[123.43941480174922,39.33033973359274],[123.3259879328034,39.19720167747848],[123.20858475595163,39.06570699976403],[123.0872055140812,38.93585572710775],[122.96185045007942,38.80764788616799],[122.83360871031765,38.68224582754744],[122.70369355558758,38.56082477536908],[122.57210486296457,38.44338473037341],[122.43884250952395,38.32992569330095],[122.30390637234106,38.220447664892205],[122.16729632849122,38.11495064588769],[122.02901225504975,38.01343463702791],[121.88905402909202,37.91589963905338],[121.74742152769333,37.822345652704605],[121.60411462792902,37.7327726787221],[121.45913320687444,37.64718071784637],[121.3124771416049,37.56556977081793],[121.16414630919574,37.48793983837729],[121.0141405867223,37.41429092126495],[120.8624598512599,37.344623020221434],[120.70910397988388,37.27893613598724],[120.55407284966957,37.21723026930289],[120.3973663376923,37.159505420908886],[120.23898432102742,37.105761591545736],[120.07892667675023,37.05599878195395],[119.91719328193608,37.01021699287406],[119.75378401366032,36.96841622504654],[119.58869874899825,36.93059647921193],[119.42193736502522,36.896757756110716],[119.25349973881656,36.86690005648343],[119.08338574744761,36.84102338107057],[118.91159526799369,36.81912773061264],[118.73812817753013,36.801213105850174],[118.56298435313228,36.78727950752366],[118.38616367187545,36.777326936373605],[118.207666010835,36.77135539314054],[118.02749124708625,36.76936487856496],[117.8483553031651,36.77135539314054],[117.67086160910647,36.777326936373605],[117.49501016491033,36.78727950752366],[117.32080097057668,36.801213105850174],[117.14823402610553,36.81912773061264],[116.97730933149687,36.84102338107057],[116.80802688675071,36.86690005648343],[116.64038669186704,36.896757756110716],[116.47438874684586,36.93059647921193],[116.31003305168718,36.96841622504654],[116.14731960639101,37.01021699287406],[115.98624841095732,37.05599878195395],[115.82681946538612,37.105761591545736],[115.66903276967743,37.159505420908886],[115.51288832383123,37.21723026930289],[115.35838612784752,37.27893613598724],[115.20552618172631,37.344623020221434],[115.05430848546759,37.41429092126495],[114.90473303907137,37.48793983837729],[114.75679984253765,37.56556977081793],[114.6105088958664,37.64718071784637],[114.46586019905767,37.7327726787221],[114.32285375211143,37.822345652704605],[114.18148955502768,37.91589963905338],[114.04176760780643,38.01343463702791],[113.90368791044767,38.11495064588769],[113.76725046295141,38.220447664892205],[113.63245526531765,38.32992569330095],[113.49930231754637,38.44338473037341],[113.36779161963759,38.56082477536908],[113.2379231715913,38.68224582754744],[113.10969697340752,38.80764788616799],[112.98434190940574,38.93585572710775],[112.86296266753531,39.06570699976403],[112.74555949068355,39.19720167747848],[112.63213262173772,39.33033973359274],[112.52268230358514,39.465121141448435],[112.41720877911311,39.60154587438721],[112.3157122912089,39.73961390575071],[112.21819308275981,39.879325208880566],[112.12465139665315,40.020679757118415],[112.03508747577621,40.1636775238059],[111.94950156301627,40.30831848228466],[111.86789390126066,40.45460260589634],[111.79026473339663,40.60252986798256],[111.71661430231151,40.75210024188497],[111.64694285089257,40.903313700945205],[111.58125062202713,41.0561702185049],[111.51953785860246,41.21066976790571],[111.46180480350588,41.36681232248925],[111.40805169962466,41.52459785559718],[111.35827878984612,41.68402634057112],[111.31248631705753,41.84509775075273],[111.2706745241462,42.00781205948362],[111.23284365399944,42.17216924010545],[111.1989939495045,42.33816926595985],[111.16912565354872,42.50581211038846],[111.14323900901937,42.675097746732924],[111.12133425880374,42.846026148334865],[111.10341164578915,43.018597288535936],[111.08947141286289,43.192811140677776],[111.07951380291223,43.36866767810201],[111.0735390588245,43.54616687415029],[111.07154742348696,43.72530870216424],[112.62467131360684,43.72530870216424],[112.62622039249538,43.5864164417748],[112.63086754622393,43.448788283128465],[112.63861265038675,43.31242420030737],[112.64945558057818,43.17732416739368],[112.66339621239253,43.04348815846952],[112.6804344214241,42.910916147617066],[112.70057008326722,42.779608108918445],[112.7238030735162,42.64956401645581],[112.75013326776534,42.520783844311325],[112.77956054160896,42.39326756656712],[112.81208477064136,42.26701515730535],[112.84770583045687,42.14202659060816],[112.8864235966498,42.018301840557704],[112.92823794481447,41.895840881236126],[112.97314875054516,41.77464368672558],[113.02115588943622,41.65471023110821],[113.07225923708194,41.53604048846616],[113.12645866907663,41.41863443288159],[113.18375406101461,41.30249203843664],[113.2441452884902,41.18761327921346],[113.30763222709771,41.073998129294196],[113.37421475243144,40.961646562761004],[113.4438927400857,40.850558553696025],[113.51666606565483,40.74073407618141],[113.5925346047331,40.632173104299305],[113.67149823291487,40.524875612131865],[113.75355682579442,40.41884157376123],[113.83871025896607,40.31407096326956],[113.92695840802413,40.210563754738985],[114.01830114856291,40.10831992225167],[114.11273835617675,40.007339439889755],[114.21026990645993,39.90762228173539],[114.30997952091504,39.81009150874093],[114.41095108296952,39.715656566841005],[114.51318471110498,39.62431748121296],[114.61668052380304,39.53607427703415],[114.7214386395453,39.4509269794819],[114.82745917681336,39.368875613733564],[114.93474225408885,39.28992020496647],[115.04328798985334,39.214060778357975],[115.15309650258845,39.14129735908541],[115.26416791077581,39.071629972326114],[115.37650233289702,39.00505864325744],[115.49009988743367,38.94158339705672],[115.60496069286737,38.8812042589013],[115.72108486767974,38.82392125396852],[115.83847253035238,38.76973440743573],[115.9571237993669,38.718643744480254],[116.0770387932049,38.67064929027945],[116.198217630348,38.62575107001065],[116.32066042927781,38.58394910885119],[116.4443673084759,38.545243431978435],[116.56933838642392,38.5096340645697],[116.69557378160347,38.47712103180235],[116.82307361249615,38.447704358853706],[116.95183799758355,38.42138407090112],[117.0818670553473,38.398160193121925],[117.21316090426902,38.37803275069348],[117.34571966283028,38.36100176879311],[117.4795434495127,38.34706727259816],[117.61463238279791,38.33622928728598],[117.7509865811675,38.3284878380339],[117.88860616310308,38.32384295001927],[118.02749124708625,38.32229464841943],[118.16743257485157,38.32384295001927],[118.30610823469506,38.3284878380339],[118.4435182266167,38.33622928728598],[118.5796625506165,38.34706727259816],[118.71454120669445,38.36100176879311],[118.84815419485055,38.37803275069348],[118.98050151508481,38.398160193121925],[119.11158316739723,38.42138407090112],[119.2413991517878,38.447704358853706],[119.36994946825652,38.47712103180235],[119.4972341168034,38.5096340645697],[119.62325309742843,38.545243431978435],[119.74800641013162,38.58394910885119],[119.87149405491296,38.62575107001065],[119.99371603177245,38.67064929027945],[120.1146723407101,38.718643744480254],[120.23436298172591,38.76973440743573],[120.35278795481986,38.82392125396852],[120.46994725999198,38.8812042589013],[120.58584089724225,38.94158339705672],[120.70046886657067,39.00505864325744],[120.81383116797724,39.071629972326114],[120.92592780146198,39.14129735908541],[121.03675876702486,39.214060778357975],[121.1463240646659,39.28992020496647],[121.2546236943851,39.368875613733564],[121.36165765618244,39.4509269794819],[121.46742595005794,39.53607427703415],[121.5719285760116,39.62431748121296],[121.67516553404342,39.715656566841005],[121.77713682415339,39.81009150874093],[121.8778424463415,39.90762228173539],[121.97537280563769,40.007339439889755],[122.06980508861288,40.10831992225167],[122.16113941819174,40.210563754738985],[122.24937591729892,40.31407096326956],[122.33451470885912,40.41884157376123],[122.41655591579698,40.524875612131865],[122.49549966103717,40.632173104299305],[122.57134606750438,40.74073407618141],[122.64409525812326,40.850558553696025],[122.71374735581847,40.961646562761004],[122.78030248351469,41.073998129294196],[122.84376076413659,41.18761327921346],[122.90412232060883,41.30249203843664],[122.96138727585608,41.41863443288159],[123.01555575280301,41.53604048846616],[123.06662787437429,41.65471023110821],[123.11460376349459,41.77464368672558],[123.15948354308856,41.895840881236126],[123.20126733608087,42.018301840557704],[123.2399552653962,42.14202659060816],[123.27554745395922,42.26701515730535],[123.3080440246946,42.39326756656712],[123.33744510052698,42.520783844311325],[123.36375080438106,42.64956401645581],[123.38696125918149,42.779608108918445],[123.40707658785293,42.910916147617066],[123.42409691332007,43.04348815846952],[123.43802235850757,43.17732416739368],[123.44885304634009,43.31242420030737],[123.4565890997423,43.448788283128465],[123.46123064163886,43.5864164417748],[123.46277779495446,43.72530870216424],[123.46121507710505,43.86014133011245],[123.4565267626193,43.99367842092561],[123.44871261009095,44.12591998645188],[123.4377723781137,44.256866038539435],[123.4237058252813,44.38651658903642],[123.40651271018746,44.514871649791004],[123.38619279142591,44.641931232651345],[123.36274582759037,44.767695349465605],[123.33617157727457,44.892164012081935],[123.30646979907223,45.015337232348514],[123.27364025157709,45.13721502211349],[123.23768269338287,45.257797393225026],[123.19859688308327,45.37708435753129],[123.15638257927205,45.495075926880425],[123.1110395405429,45.61177211312061],[123.0625675254896,45.727172928099996],[123.01096629270582,45.84127838366675],[122.95623560078529,45.954088491669026],[122.89837520832177,46.06560326395499],[122.83738487390896,46.1758227123728],[122.7732643561406,46.28474684877062],[122.70601341361039,46.3923756849966],[122.63563180491208,46.49870923289892],[122.5621192886394,46.60374750432572],[122.48547562338604,46.70749051112517],[122.40570056774575,46.80993826514544],[122.32279388031226,46.91109077823468],[122.23675531967928,47.01094806224104],[122.14758464444054,47.109510129012705],[122.05528161318978,47.20677699039783],[121.9598459845207,47.30274865824455],[121.86127751702703,47.39742514440107],[121.79659488055138,47.45684030743677],[121.72790156909858,47.51578146036563],[121.65519746270597,47.5742486142953],[121.57848244141094,47.63224178033342],[121.49775638525088,47.68976096958766],[121.41301917426313,47.746806193165654],[121.32427068848507,47.80337746217505],[121.2315108079541,47.859474787723514],[121.13473941270756,47.91509818091868],[121.03395638278283,47.97024765286822],[120.9291615982173,48.02492321467976],[120.82035493904833,48.07912487746097],[120.7075362853133,48.13285265231949],[120.59070551704956,48.18610655036298],[120.4698625142945,48.238886582699074],[120.34500715708549,48.29119276043544],[120.2161393254599,48.343025094679724],[120.08325889945513,48.39438359653957],[119.9463657591085,48.445268277122636],[119.80545978445743,48.49567914753657],[119.66054085553927,48.54561621888902],[119.51160885239139,48.595079502287646],[119.35866365505117,48.64406900884009],[119.201705143556,48.692584749654],[119.04073319794321,48.74062673583704],[118.87574769825021,48.78819497849685],[118.70674852451435,48.835289488741076],[118.53373555677302,48.88191027767738],[118.35670867506359,48.928057356413404],[118.17566775942342,48.97373073605681],[117.99061268988989,49.01893042771524],[117.80154334650037,49.063656442496345],[117.61933619689943,49.10850144428286],[117.44082886948767,49.156095585170746],[117.26602124282145,49.206438851830825],[117.09491319545712,49.25953123093392],[116.92750460595104,49.31537270915085],[116.76379535285956,49.37396327315243],[116.60378531473903,49.435302909609476],[116.4474743701458,49.49939160519282],[116.29486239763622,49.566229346573266],[116.14594927576665,49.635816120421644],[116.00073488309344,49.70815191340877],[115.85921909817296,49.78323671220546],[115.72140179956152,49.86107050348254],[115.58728286581551,49.941653273910816],[115.45686217549127,50.02498501016112],[115.33013960714514,50.11106569890427],[115.20711503933349,50.19989532681108],[115.08778835061267,50.291473880552374],[114.97215941953903,50.385801346798964],[114.86022812466892,50.48287771222168],[114.7519943445587,50.58270296349133],[114.64745795776471,50.68527708727874],[114.54661884284332,50.790600070254726],[114.44947687835086,50.89867189909012],[114.35603194284371,51.00949256045571],[114.2662839148782,51.12306204102235],[114.18023267301069,51.239380327460836],[114.09787809579753,51.358447406442004],[114.01922006179508,51.48026326463666],[113.94425844955968,51.604827888715626],[113.8729931376477,51.732141265349725],[113.80542400461547,51.862203381209774],[113.77273026493485,51.930164504222],[113.74136415905669,51.998567859833486],[113.71132556849938,52.067413459892386],[113.68261437478131,52.13670131624686],[113.65523045942089,52.20643144074508],[113.62917370393652,52.276603845235186],[113.60444398984656,52.34721854156536],[113.58104119866942,52.41827554158375],[113.5589652119235,52.48977485713853],[113.5382159111272,52.56171650007784],[113.51879317779888,52.63410048224986],[113.50069689345696,52.70692681550274],[113.48392693961982,52.780195511684646],[113.46848319780587,52.85390658264373],[113.45436554953348,52.92806004022817],[113.44157387632104,53.00265589628611],[113.43010805968697,53.07769416266571],[113.41996798114964,53.15317485121514],[113.41115352222745,53.229097973782565],[113.4036645644388,53.30546354221614],[113.39750098930207,53.38227156836402],[113.39266267833567,53.45952206407436],[113.38914951305797,53.53721504119535],[113.38696137498738,53.615350511575116],[113.38609814564228,53.69392848706185],[113.38655970654108,53.77294897950368],[113.38834593920215,53.8524120007488],[113.39145672514391,53.93231756264534],[113.39589194588473,54.01266567704148],[113.401651482943,54.09345635578538],[113.40873521783713,54.174689610725196],[113.4171430320855,54.256365453709094],[113.42684114732239,54.33596893693606],[113.43767318337687,54.41503546188899],[113.44963938165522,54.49356501708998],[113.46273998356368,54.57155759106112],[113.47697523050857,54.6490131723245],[113.49234536389613,54.72593174940222],[113.50885062513267,54.80231331081637],[113.52649125562442,54.878157845089056],[113.5452674967777,54.953465340742355],[113.56517958999875,55.028235786298374],[113.58622777669387,55.10246917027921],[113.60841229826931,55.17616548120694],[113.63173339613138,55.24932470760366],[113.65619131168633,55.32194683799149],[113.68178628634043,55.3940318608925],[113.70851856149997,55.46557976482879],[113.73638837857122,55.53659053832246],[113.76539597896044,55.607064169895594],[113.79554160407393,55.67700064807029],[113.82682549531796,55.74639996136865],[113.85924789409879,55.81526209831276],[113.8928090418227,55.88358704742472],[113.92750917989598,55.95137479722662],[113.96334854972488,56.018625336240554],[114.0003273927157,56.085338652988625],[114.03844595027469,56.15151473599291],[114.07770446380815,56.21715357377552],[114.11810317472234,56.28225515485854],[114.15964232442353,56.346819467764064],[114.20232215431801,56.4108465010142],[114.24614290581204,56.47433624313102],[114.2911048203119,56.53728868263664],[114.33706706218672,56.600479287883466],[114.38401139662344,56.66265855782668],[114.43193770365944,56.7238265161626],[114.48084586333209,56.78398318658756],[114.53073575567878,56.843128592797875],[114.58160726073685,56.901262758489864],[114.6334602585437,56.958385707359845],[114.6862946291367,57.01449746310415],[114.74011025255321,57.06959804941909],[114.7949070088306,57.12368749000099],[114.85068477800627,57.17676580854618],[114.90744344011756,57.22883302875097],[114.96518287520186,57.279889174311684],[115.02390296329655,57.329934268924646],[115.08360358443898,57.37896833628618],[115.14428461866653,57.4269914000926],[115.2059459460166,57.474003484040225],[115.26858744652652,57.52000461182539],[115.33220900023369,57.564994807144416],[115.39681048717547,57.608974093693604],[115.46239178738925,57.651942495169294],[115.52895278091238,57.69390003526781],[115.59649334778224,57.73484673768546],[115.66501336803621,57.77478262611857],[115.73451272171167,57.813707724263466],[115.80499128884595,57.85162205581646],[115.87644894947648,57.88852564447389],[115.9488855836406,57.92441851393207],[116.0223010713757,57.95930068788731],[116.09669529271912,57.993172190035935],[116.17206812770826,58.02603304407428],[116.24841945638049,58.057883273698664],[116.32425414032683,58.08855881742744],[116.40018945070226,58.117907722599256],[116.47622502021379,58.14592997736595],[116.55236048156843,58.17262556987936],[116.6285954674732,58.197994488291314],[116.70492961063513,58.22203672075368],[116.78136254376122,58.24475225541826],[116.8578938995585,58.266141080436924],[116.934523310734,58.2862031839615],[117.0112504099947,58.30493855414382],[117.08807483004765,58.32234717913573],[117.16499620359984,58.33842904708908],[117.2420141633583,58.35318414615569],[117.31912834203007,58.36661246448741],[117.39633837232215,58.37871399023608],[117.47364388694153,58.389488711553525],[117.55104451859528,58.39893661659161],[117.62853989999037,58.40705769350215],[117.70612966383383,58.413851930437005],[117.78381344283271,58.419319315547995],[117.86159086969398,58.423459836986964],[117.93946157712469,58.42627348290577],[118.01742519783186,58.42776024145623],[118.09548136452247,58.42792010079018],[118.17362970990357,58.426753049059485],[118.25186986668217,58.42425907441596],[118.33020146756527,58.42043816501146],[118.40862414525992,58.41529030899781],[118.48713753247313,58.40881549452686],[118.5657412619119,58.40101370975045],[118.64443496628324,58.39188494282041],[118.7232182782942,58.38142918188859],[118.75553327966892,58.37727462031744],[118.7877513867852,58.37289878212624],[118.81987271812463,58.36830167879289],[118.85189739216882,58.3634833217953],[118.8838255273994,58.35844372261137],[118.91565724229794,58.35318289271902],[118.94739265534606,58.347700843596144],[118.97903188502538,58.34199758672064],[119.0105750498175,58.33607313357043],[119.04202226820404,58.32992749562341],[119.07337365866657,58.32356068435749],[119.10462933968674,58.31697271125057],[119.13578942974613,58.31016358778057],[119.16685404732635,58.30313332542538],[119.19782331090902,58.29588193566291],[119.22869733897573,58.28840942997107],[119.2594762500081,58.28071581982776],[119.29016016248775,58.272801116710895],[119.32074919489627,58.264665332098375],[119.35124346571526,58.256308477468096],[119.38164309342635,58.24773056429798],[119.41194819651112,58.23893160406592],[119.4421588934512,58.22991160824983],[119.47227530272818,58.22067058832761],[119.50229754282368,58.211208555777176],[119.5322257322193,58.201525522076416],[119.56205998939666,58.191621498703256],[119.59180043283736,58.18149649713558],[119.621447181023,58.171150528851314],[119.65100035243519,58.160583605328355],[119.68046006555554,58.1497957380446],[119.70982643886566,58.13878693847798],[119.79130033587398,58.10575029315546],[119.87185427059426,58.07135556351689],[119.95148836150807,58.03560272512544],[120.03020272709703,57.99849175354427],[120.10799748584277,57.96002262433656],[120.18487275622688,57.92019531306548],[120.26082865673096,57.87900979529418],[120.33586530583662,57.83646604658584],[120.40998282202548,57.79256404250363],[120.48318132377914,57.74730375861071],[120.55546092957921,57.700685170470265],[120.62682175790728,57.65270825364546],[120.69726392724499,57.603372983699444],[120.76678755607391,57.552679336195396],[120.83539276287567,57.5006272866965],[120.90307966613189,57.4472168107659],[120.96984838432414,57.39244788396678],[121.03569903593406,57.3363204818623],[121.10063173944323,57.27883458001564],[121.16464661333329,57.21999015398997],[121.22774377608582,57.159787179348434],[121.28992334618245,57.09822563165422],[121.35118544210475,57.0353054864705],[121.41153018233437,56.97102671936043],[121.4709576853529,56.905389305887184],[121.52946806964194,56.83839322161393],[121.5870614536831,56.77003844210384],[121.643737955958,56.700324942920076],[121.69949769494823,56.629252699625816],[121.75434078913541,56.55682168778422],[121.80826735700114,56.48303188295846],[121.86127751702703,56.4078832607117],[121.91209081528032,56.33088471416458],[121.96128914109916,56.25357015347447],[122.00887261592719,56.17593959048952],[122.05484136120805,56.0979930370579],[122.09919549838541,56.019730505027766],[122.1419351489029,55.94115200624727],[122.18306043420418,55.862257552564586],[122.22257147573289,55.78304715582787],[122.26046839493267,55.703520827885285],[122.29675131324719,55.623678580584986],[122.33142035212008,55.54352042577514],[122.36447563299498,55.463046375303904],[122.39591727731556,55.382256441019436],[122.42574540652545,55.301150634769904],[122.4539601420683,55.21972896840346],[122.48056160538776,55.13799145376828],[122.5055499179275,55.0559381027125],[122.52892520113112,54.9735689270843],[122.5506875764423,54.89088393873185],[122.5708371653047,54.80788314950328],[122.58937408916192,54.72456657124677],[122.60629846945766,54.64093421581048],[122.62161042763553,54.556986095042575],[122.63531008513918,54.4727222207912],[122.64739756341228,54.38814260490453],[122.65787298389847,54.303247259230716],[122.66673646804139,54.21803619561793],[122.6739881372847,54.13250942591432],[122.67962811307203,54.04666696196806],[122.68365651684704,53.96050881562731],[122.68607347005336,53.874034998740214],[122.68687909413465,53.78724552315494],[121.13374711567039,53.78724552315494],[121.1324989351401,53.885692905654814],[121.12875439157457,53.98287691877603],[121.12251348201174,54.07879753882225],[121.11377620348956,54.17345474209717],[121.10254255304602,54.26684850490446],[121.08881252771906,54.3589788035478],[121.07258612454665,54.44984561433087],[121.05386334056674,54.53944891355735],[121.03264417281729,54.627788677530916],[121.00892861833626,54.71486488255523],[120.98271667416161,54.80067750493401],[120.9540083373313,54.8852265209709],[120.9228036048833,54.968511906969596],[120.88910247385556,55.05053363923376],[120.85290494128604,55.13129169406709],[120.81421100421271,55.210786047773254],[120.77302065967352,55.28901667665593],[120.72933390470642,55.3659835570188],[120.68315073634939,55.44168666516554],[120.63447115164038,55.51612597739984],[120.58329514761735,55.58930147002535],[120.52962272131826,55.661213119345774],[120.47345386978108,55.73186090166479],[120.41478859004376,55.80124479328607],[120.35362687914424,55.869364770513286],[120.28996873412052,55.93622080965012],[120.22381415201053,56.00181288700026],[120.15516312985224,56.06614097886738],[120.08401566468362,56.129205061555155],[120.0103717535426,56.19100511136726],[119.93423139346717,56.251541104607384],[119.85559458149528,56.31081301757921],[119.77549090354113,56.367066011359896],[119.69494826900416,56.420570255917745],[119.61396643499708,56.47132575162302],[119.53254515863259,56.51933249884597],[119.4506841970234,56.56459049795684],[119.36838330728223,56.607099749325904],[119.28564224652177,56.6468602533234],[119.20246077185472,56.683872010319604],[119.1188386403938,56.71813502068474],[119.0347756092517,56.74964928478909],[118.95027143554113,56.7784148030029],[118.8653258763748,56.80443157569643],[118.77993868886541,56.82769960323992],[118.69410963012567,56.848218886003636],[118.60783845726827,56.865989424357835],[118.52112492740594,56.88101121867276],[118.43396879765136,56.893284269318684],[118.34636982511726,56.90280857666585],[118.25832776691632,56.90958414108451],[118.16984238016127,56.91361096294493],[118.0809134219648,56.91488904261736],[117.9915406494396,56.91341838047205],[117.9017238196984,56.90919897687927],[117.81146268985391,56.902230832209256],[117.72075701701881,56.89251394683228],[117.62960655830581,56.88004832111858],[117.53801107082764,56.86483395543843],[117.44597031169697,56.84687085016206],[117.35348403802654,56.826159005659754],[117.26055200692902,56.802698422301745],[117.16717397551714,56.7764891004583],[117.07334970090359,56.747531040499666],[116.98029808483881,56.716193692082285],[116.88923818902339,56.682833992958024],[116.80017001049526,56.64745194312688],[116.71309354629243,56.61004754258886],[116.6280087934528,56.57062079134395],[116.5449157490144,56.52917168939216],[116.46381441001513,56.48570023673349],[116.38470477349298,56.44020643336794],[116.3075868364859,56.39269027929551],[116.23246059603186,56.3431517745162],[116.1593260491688,56.29159091903],[116.0881831929347,56.238007712836925],[116.01903202436749,56.18240215593697],[115.95187254050518,56.12477424833013],[115.88670473838569,56.06512399001641],[115.82352861504698,56.00345138099581],[115.76234416752703,55.93975642126833],[115.7031513928638,55.87403911083396],[115.64595028809524,55.806299449692716],[115.5907408502593,55.73653743784459],[115.53752307639395,55.66475307528958],[115.48629696353716,55.590946362027694],[115.43706250872687,55.51511729805892],[115.38981970900105,55.43726588338327],[115.34456856139765,55.35739211800073],[115.30130906295466,55.27549600191132],[115.26004121071,55.19157753511502],[115.22076500170166,55.105636717611844],[115.1834804329676,55.017673549401785],[115.14818750154575,54.927688030484845],[115.11488620447409,54.835680160861024],[115.08357653879058,54.74164994053032],[115.05372441384634,54.64293408858177],[115.02690823346822,54.544944659215744],[115.00312787473156,54.44768166428041],[114.98238321471172,54.35114511562393],[114.96467413048398,54.25533502509447],[114.95000049912372,54.16025140454017],[114.93836219770624,54.065894265809206],[114.92975910330689,53.97226362074974],[114.924191093001,53.879359481209946],[114.9216580438639,53.78718185903795],[114.92215983297092,53.69573076608194],[114.9256963373974,53.60500621419006],[114.93226743421867,53.515008215210486],[114.94187300051006,53.42573678099137],[114.95451291334689,53.33719192338087],[114.97018704980452,53.249373654227156],[114.98889528695825,53.162281985378385],[115.01063750188345,53.075916928682716],[115.03541357165543,52.990278495988306],[115.06322337334952,52.905366699143315],[115.09406678404105,52.82118154999592],[115.12794368080536,52.737723060394266],[115.16485394071779,52.65499124218652],[115.20479744085365,52.572986107220835],[115.24777405828831,52.49170766734538],[115.29378367009707,52.41115593440832],[115.34282615335526,52.331330920257805],[115.39490138513824,52.252232636741994],[115.45000924252132,52.173861095709064],[115.50814960257983,52.09621630900716],[115.56932234238913,52.01929828848445],[115.63352733902452,51.94310704598909],[115.68092177891647,51.890956333646905],[115.73005180848114,51.83965898434081],[115.78091754620014,51.78921498548213],[115.83351911055509,51.73962432448219],[115.88785662002759,51.690886988752325],[115.94393019309925,51.64300296570386],[116.00173994825167,51.59597224274812],[116.06128600396646,51.54979480729644],[116.12256847872523,51.504470646760154],[116.18558749100958,51.45999974855059],[116.25034315930114,51.41638210007907],[116.31683560208148,51.37361768875692],[116.38506493783224,51.331706501995484],[116.45503128503502,51.29064852720608],[116.52673476217142,51.25044375180004],[116.60017548772304,51.211092163188695],[116.6753535801715,51.17259374878337],[116.75226915799841,51.1349484959954],[116.83092233968537,51.09815639223611],[116.91131324371399,51.06221742491683],[116.99344198856588,51.02713158144889],[117.07730869272264,50.99289884924362],[117.16291347466587,50.95951921571235],[117.25025645287721,50.92699266826641],[117.33933774583824,50.89531919431712],[117.43015747203056,50.86449878127581],[117.5227157499358,50.83453141655382],[117.61701269803555,50.80541708756248],[117.71304843481143,50.77715578171311],[117.81082307874505,50.74974748641704],[117.910336748318,50.72319218908561],[118.01158956201189,50.69748987713013]]] +bt.scale(logoText, 0.15) +bt.translate(logoText, [-15.0, -27.5]) +drawLines(logoText) + +if (outsideDecor) { + let boxBounds = [[[90, 40], [90, 30], [75, 0], [10, 0], [10, 10], [25, 40], [90, 40]]] + let walls = [[[0, 0], [100, 0], [100, 100], [0, 100], [0, 0]]] + + + bt.originate(boxBounds) + bt.translate(boxBounds, [width / 2, height / 2]) + + for (let i = 0; i < 10; i++) { + for (let j = 0; j < 10; j++) { + bt.join(boxBounds, drawCupcake(i * 10 - 45 + bt.randIntInRange(-2, 2), j * 10 - 45 + bt.randIntInRange(-2, 2), 4, color, boxBounds, false, bt.randIntInRange(-30, 30), walls)) + } + } + + let lines = [] + for (let i = 0; i < 25; i++) { + lines.push([[0, i * 4], [i * 4, 0]]) + } + for (let i = 0; i < 25; i++) { + lines.push([[100, i * 4], [i * 4, 100]]) + } + bt.cover(lines, boxBounds) + drawLines(lines, {width: .5}) + +} + + +// Draw a cupcake on the screen @ cx,cy (centered at center of screen) +// Cupcake can be scaled with cwidth (height is scaled based off width) +// ccolor is a boolean for whether the cupcake should be drawn with color +function drawCupcake(cx, cy, cwidth, ccolor, overlap, toppings, rotation, cutter) { + const startBaseLine = bt.randIntInRange(30, 70) + + const base = [ + [25, 40], + [75, 40], + [70, 10], + [30, 10], + [25, 40] + ]; + + + const cakeTurte = new bt.Turtle() // Cake Turte + + cakeTurte.jump([75, 40]) + cakeTurte.setAngle(0) + cakeTurte.arc(180, 2) + cakeTurte.goTo([25, 44]) + cakeTurte.setAngle(180) + cakeTurte.arc(180, 2) + + const cakeColor = cakeColors[bt.randIntInRange(0, cakeColors.length - 1)] + + + // base bottom - 30 -> 70, 40pts + // base top - 25 -> 75, 50pts + + const baseLines = [] + + for (let i = startBaseLine; i > 31; i -= 3 * Math.sin(Math.PI * (i-30) / 40) + 1) { + baseLines.push(baseLine(i)) + } + for (let i = startBaseLine + 3 * Math.sin(Math.PI * (startBaseLine-30) / 40) + 1; i < 69; i += 3 * Math.sin(Math.PI * (i-30) / 40) + 1) { + baseLines.push(baseLine(i)) + } + + + let turty = new bt.Turtle() // Frosting Turty + + turty.jump([70, 44]) + turty.setAngle(0) + turty.arc(175, 4) + for (let i = 0; i < 2; i++) { + turty.forward(7.5) + turty.setAngle(20) + turty.forward(2) + turty.arc(155, 4) + } + turty.forward(3.5) + turty.arc(-120, 1) + turty.forward(5) + turty.setAngle(190) + turty.forward(3) + turty.arc(60, 8) + turty.goTo([50 - 7.125, 70.15]) + turty.setAngle(185) + for (let i = 0; i < 2; i++) { + turty.arc(155, 4) + turty.forward(2) + turty.setAngle(185) + turty.forward(7.5) + } + turty.arc(175, 4) + + const frostingPath = turty.path + const frostingOutlinePath = bt.offset(bt.copy(frostingPath), 1) + + const frosting = frostingColors[bt.randIntInRange(0, frostingColors.length - 1)] + + let toppingPaths = [] + const pickedTopping = bt.randIntInRange(0, 2) + + if (toppings) { + // Random topping: 0=sprinkles, 1=choc chips, 3=cashews + const numOfToppings = bt.randIntInRange(20 * toppingDensity, 30 * toppingDensity) + for (let i = 0; i < numOfToppings; i++) { + let topping = getTopping(pickedTopping, bt.randIntInRange(24, 74), bt.randIntInRange(43, 78), frostingPath, toppingPaths) + if (topping) bt.join(toppingPaths, topping) + } + } + + // Draw all the lines + if (ccolor) { + let coloredPaths = [] + coloredPaths.push({path: [base], options: {fill: "#000000"}}) + coloredPaths.push({path: baseLines, options: {fill: "#1F1F1F"}}) + coloredPaths.push({path: frostingOutlinePath, options: {fill: frosting[1]}}) + coloredPaths.push({path: frostingPath, options: {fill: frosting[0]}}) + coloredPaths.push({path: cakeTurte.path, options: {fill: cakeColor}}) + + let toppingOutlines = [] + if (toppings) { + switch (pickedTopping) { + case 0: + toppingPaths.forEach((path) => { + let sColor = sprinkColors[bt.randIntInRange(0, sprinkColors.length - 1)] + coloredPaths.push({path: [path], options: {fill: sColor}}) + }) + break; + case 1: + toppingOutlines = bt.offset(bt.copy(toppingPaths), .2) + coloredPaths.push({path: toppingOutlines, options: {fill: "#463118"}}) + coloredPaths.push({path: toppingPaths, options: {fill: "#604320"}}) + break; + case 2: + toppingOutlines = bt.offset(bt.copy(toppingPaths), .2) + coloredPaths.push({path: toppingOutlines, options: {fill: "#d4a973"}}) + coloredPaths.push({path: toppingPaths, options: {fill: "#efc591"}}) + break; + } + } + + let wholeCupcake = [] + coloredPaths.forEach((path) => { + bt.union(wholeCupcake, path.path) + }) + + let baseHeight = bt.bounds(wholeCupcake).height + let baseCenter = bt.bounds(wholeCupcake).cc + let baseWidth = bt.bounds(cakeTurte.path).width + let cscale = cwidth / baseWidth + coloredPaths.forEach((path) => { + let pathCenter = bt.bounds(path.path).cc + bt.originate(path.path) + bt.translate(path.path, [width/2 + cx, height/2 + cy]) + bt.scale(path.path, cscale) + bt.translate(path.path, [(pathCenter[0] - baseCenter[0]) * cscale, (pathCenter[1] - baseCenter[1]) * cscale]) + print(Object.entries(path.options)) + wholeCupcake = [] + coloredPaths.forEach((path) => { + bt.union(wholeCupcake, path.path) + }) + bt.difference(path.path, overlap) + if(cutter) bt.cut(path.path, cutter) + drawLines(path.path, {fill: path.options.fill, width: .000001}) + }) + return wholeCupcake + } + else { + let basicPaths = [] + basicPaths.push(base) + bt.join(basicPaths, cakeTurte.path) + bt.join(basicPaths, baseLines) + bt.join(basicPaths, frostingPath) + bt.join(basicPaths, toppingPaths) + bt.originate(basicPaths) + bt.translate(basicPaths, [width/2 + cx, height/2 + cy]) + let baseWidth = bt.bounds(cakeTurte.path).width + bt.scale(basicPaths, cwidth / baseWidth) + let wholeCupcake = [] + basicPaths.forEach((path) => { + bt.union(wholeCupcake, [path]) + }) + if(rotation) bt.rotate(basicPaths, rotation) + bt.cover(basicPaths, overlap) + if(cutter) bt.cut(basicPaths, cutter) + drawLines(basicPaths) + return wholeCupcake + } +} + + + + + +// Return a line for the base of a cupcake +function baseLine(startPos) { + let line = [[[startPos, 10.5], [(startPos - 50) * (5/4) + 50, 39.5]]] + bt.offset(line, .3) + return line[0] +} + +// Get the lines describing a sprinkle that's randomly rotated +function getSprinkle(x, y) { + const sprinkTurt = new bt.Turtle() + sprinkTurt.jump([x, y]) + sprinkTurt.forward(1.5) + sprinkTurt.arc(180, 0.15) + sprinkTurt.forward(1.5) + sprinkTurt.arc(180, .15) + const sprinkPath = sprinkTurt.path + bt.rotate(sprinkPath, bt.randIntInRange(0, 360)) + bt.offset(sprinkPath, .1) + return sprinkPath +} + +// Get the lines describing a chocolate chip that's randomly rotated +function getChocChip(x, y) { + const chipTurt = new bt.Turtle() + chipTurt.jump([x, y]) + chipTurt.forward(2) + chipTurt.arc(144, .5) + chipTurt.forward(1) + chipTurt.arc(-180, .2) + chipTurt.left(163) + chipTurt.arc(127, .5) + chipTurt.arc(-66, 0.2) + chipTurt.arc(27, 0.2) + chipTurt.forward(1) + chipTurt.arc(144, .5) + const chipPath = chipTurt.path + bt.rotate(chipPath, bt.randIntInRange(-90, 90)) + return chipPath +} + +// Get the lines describing a cashew that's randomly rotated +function getCashew(x, y) { + const cashTurt = new bt.Turtle() + cashTurt.jump([x, y]) + cashTurt.arc(178, 1.2) + cashTurt.arc(165, .4) + cashTurt.arc(-43, 0.5) + cashTurt.arc(-38, 0.88) + cashTurt.arc(-78, 0.4) + cashTurt.arc(185, 0.24) + const cashewPath = cashTurt.path + bt.scale(cashewPath, 2.5) + bt.rotate(cashewPath, bt.randIntInRange(0, 360)) + return cashewPath +} + +// Get the lines for a topping of a specific type that's been checked +// to make sure nothing clips another topping or goes outside of the frosting +function getTopping(type, x, y, frostingPath, toppingPaths) { + let topping = [] + switch (type) { + case 0: + topping = getSprinkle(x, y) + break; + case 1: + topping = getChocChip(x, y) + break; + case 2: + topping = getCashew(x, y) + break; + } + + let clipping = bt.difference(bt.copy(topping), frostingPath) + let intersection = bt.intersection(bt.copy(topping), toppingPaths) + if (clipping.length == 0 && intersection.length == 0) return topping + return +} diff --git a/art/TuxedoCupcake-Olive/snapshots/blackAndWhite.png b/art/TuxedoCupcake-Olive/snapshots/blackAndWhite.png new file mode 100644 index 000000000..630dafe75 Binary files /dev/null and b/art/TuxedoCupcake-Olive/snapshots/blackAndWhite.png differ diff --git a/art/TuxedoCupcake-Olive/snapshots/color.png b/art/TuxedoCupcake-Olive/snapshots/color.png new file mode 100644 index 000000000..0978c4f92 Binary files /dev/null and b/art/TuxedoCupcake-Olive/snapshots/color.png differ diff --git a/art/TuxedoCupcake-Olive/snapshots/gallery.png b/art/TuxedoCupcake-Olive/snapshots/gallery.png new file mode 100644 index 000000000..33c6b93e0 Binary files /dev/null and b/art/TuxedoCupcake-Olive/snapshots/gallery.png differ diff --git a/art/flagDrawer-appleflyer/index.js b/art/flagDrawer-appleflyer/index.js new file mode 100644 index 000000000..0101b2a9e --- /dev/null +++ b/art/flagDrawer-appleflyer/index.js @@ -0,0 +1,276 @@ +/* +@title: Random Flag Generator +@author: appleflyer +@snapshot: snapshot0 +*/ + +// set alwaysRandom to true to always set random seeds +// this will ignore the variable fixedSeed + +// set addColor to true for color, set addColor to false for no color + +// set alwaysRandom to false to use the variable fixedSeed +const alwaysRandom = true; +const addColor = false; + +const fixedSeed = 12345; + +if (alwaysRandom) { + const randomSeed = Math.floor(bt.rand() * 1000000); + bt.setRandSeed(randomSeed); + // added for debugging just ignore + console.log(`Using random seed: ${randomSeed}`); +} else { + bt.setRandSeed(fixedSeed); + console.log(`Using fixed seed: ${fixedSeed}`); +} + +const flagWidth = 125; +const flagHeight = 125; + +setDocDimensions(flagWidth, flagHeight); + +function randomColor() { + if (addColor) { + return `rgb(${bt.randIntInRange(0, 255)}, ${bt.randIntInRange(0, 255)}, ${bt.randIntInRange(0, 255)})`; + } else { + return ; + } +} + +function clipShape(shape) { + return shape.map(point => [ + Math.max(0, Math.min(point[0], flagWidth)), + Math.max(0, Math.min(point[1], flagHeight)) + ]); +} + +function createHorizontalStripes(numStripes) { + const stripes = []; + const stripeHeight = flagHeight / numStripes; + for (let i = 0; i < numStripes; i++) { + stripes.push(clipShape([[0, i * stripeHeight], [flagWidth, i * stripeHeight], [flagWidth, (i + 1) * stripeHeight], [0, (i + 1) * stripeHeight], [0, i * stripeHeight]])); + } + return stripes; +} + +function createVerticalStripes(numStripes) { + const stripes = []; + const stripeWidth = flagWidth / numStripes; + for (let i = 0; i < numStripes; i++) { + stripes.push(clipShape([[i * stripeWidth, 0], [(i + 1) * stripeWidth, 0], [(i + 1) * stripeWidth, flagHeight], [i * stripeWidth, flagHeight], [i * stripeWidth, 0]])); + } + return stripes; +} + +function createDiagonalStripes(numStripes, angle = 45) { + const stripes = []; + const stripeWidth = (flagWidth + flagHeight) / numStripes; + const radians = angle * Math.PI / 180; + const cosAngle = Math.cos(radians); + const sinAngle = Math.sin(radians); + + for (let i = -numStripes; i < numStripes; i++) { + const x1 = i * stripeWidth * cosAngle; + const y1 = i * stripeWidth * sinAngle; + const x2 = x1 + flagHeight * sinAngle; + const y2 = y1 - flagHeight * cosAngle; + const x3 = x2 + flagWidth * cosAngle; + const y3 = y2 + flagWidth * sinAngle; + const x4 = x3 - flagHeight * sinAngle; + const y4 = y3 + flagHeight * cosAngle; + + stripes.push(clipShape([[x1, y1], [x2, y2], [x3, y3], [x4, y4]])); + } + + return stripes; +} + +function createStar(cx, cy, outerRadius, innerRadius, numPoints) { + const star = []; + for (let i = 0; i < numPoints * 2; i++) { + const angle = (i * Math.PI) / numPoints; + const radius = i % 2 === 0 ? outerRadius : innerRadius; + const x = cx + radius * Math.sin(angle); + const y = cy + radius * Math.cos(angle); + star.push([x, y]); + } + star.push(star[0]); + return [clipShape(star)]; +} + +function createCircle(cx, cy, radius, numPoints = 100) { + const circle = []; + for (let i = 0; i <= numPoints; i++) { + const angle = (i / numPoints) * 2 * Math.PI; + const x = cx + radius * Math.cos(angle); + const y = cy + radius * Math.sin(angle); + circle.push([x, y]); + } + return [clipShape(circle)]; +} + +function createCrescent(cx, cy, outerRadius, innerRadius) { + const outerCircle = createCircle(cx, cy, outerRadius)[0]; + const innerCircle = createCircle(cx + (outerRadius - innerRadius) / 2, cy, innerRadius)[0]; + return [clipShape(outerCircle), clipShape(innerCircle)]; +} + +function createTriangle(x1, y1, x2, y2, x3, y3) { + return [clipShape([[x1, y1], [x2, y2], [x3, y3], [x1, y1]])]; +} + +function createCross(cx, cy, width, height, thickness) { + const halfThickness = thickness / 2; + return [ + clipShape([[cx - width/2, cy - halfThickness], [cx + width/2, cy - halfThickness], [cx + width/2, cy + halfThickness], [cx - width/2, cy + halfThickness], [cx - width/2, cy - halfThickness]]), + clipShape([[cx - halfThickness, cy - height/2], [cx + halfThickness, cy - height/2], [cx + halfThickness, cy + height/2], [cx - halfThickness, cy + height/2], [cx - halfThickness, cy - height/2]]) + ]; +} + +function createSaltire(width, height, thickness) { + const diagonalLength = Math.sqrt(width * width + height * height); + const halfThickness = thickness / 2; + const angle = Math.atan2(height, width); + + return [ + clipShape(bt.rotate([[[-diagonalLength/2, -halfThickness], [diagonalLength/2, -halfThickness], [diagonalLength/2, halfThickness], [-diagonalLength/2, halfThickness], [-diagonalLength/2, -halfThickness]]], angle * 180 / Math.PI, [width/2, height/2])), + clipShape(bt.rotate([[[-diagonalLength/2, -halfThickness], [diagonalLength/2, -halfThickness], [diagonalLength/2, halfThickness], [-diagonalLength/2, halfThickness], [-diagonalLength/2, -halfThickness]]], -angle * 180 / Math.PI, [width/2, height/2])) + ]; +} + +function createSun(cx, cy, outerRadius, innerRadius, numRays) { + const sun = createCircle(cx, cy, innerRadius)[0]; + const rayAngle = (2 * Math.PI) / numRays; + + for (let i = 0; i < numRays; i++) { + const angle = i * rayAngle; + const x1 = cx + innerRadius * Math.cos(angle); + const y1 = cy + innerRadius * Math.sin(angle); + const x2 = cx + outerRadius * Math.cos(angle); + const y2 = cy + outerRadius * Math.sin(angle); + sun.push([x1, y1]); + sun.push([x2, y2]); + } + + sun.push(sun[0]); + return [clipShape(sun)]; +} + +function generateRandomFlag() { + const designType = bt.randIntInRange(1, 10); + let flagElements = []; + let emblemElements = []; + + // many designs :money_face: + switch (designType) { + case 1: + flagElements = createHorizontalStripes(bt.randIntInRange(2, 5)); + emblemElements = createRandomEmblem(); + break; + case 2: + flagElements = createVerticalStripes(bt.randIntInRange(2, 5)); + emblemElements = createRandomEmblem(); + break; + case 3: + flagElements = createDiagonalStripes(bt.randIntInRange(3, 7), bt.randInRange(30, 60)); + break; + case 4: + flagElements = [ + clipShape([[0, 0], [flagWidth, 0], [flagWidth, flagHeight], [0, flagHeight], [0, 0]]), + clipShape([[0, 0], [flagWidth, flagHeight], [0, flagHeight], [0, 0]]), + clipShape([[0, 0], [flagWidth, 0], [flagWidth, flagHeight], [0, 0]]) + ]; + break; + case 5: + flagElements = [ + clipShape([[0, 0], [flagWidth / 2, 0], [flagWidth / 2, flagHeight / 2], [0, flagHeight / 2], [0, 0]]), + clipShape([[flagWidth / 2, 0], [flagWidth, 0], [flagWidth, flagHeight / 2], [flagWidth / 2, flagHeight / 2], [flagWidth / 2, 0]]), + clipShape([[0, flagHeight / 2], [flagWidth / 2, flagHeight / 2], [flagWidth / 2, flagHeight], [0, flagHeight], [0, flagHeight / 2]]), + clipShape([[flagWidth / 2, flagHeight / 2], [flagWidth, flagHeight / 2], [flagWidth, flagHeight], [flagWidth / 2, flagHeight], [flagWidth / 2, flagHeight / 2]]) + ]; + emblemElements = createRandomEmblem(); + break; + case 6: + flagElements = [clipShape([[0, 0], [flagWidth, 0], [flagWidth, flagHeight], [0, flagHeight], [0, 0]])]; + flagElements.push(...createCross(flagWidth * 0.3, flagHeight / 2, flagWidth, flagHeight, flagHeight * 0.2)); + break; + case 7: + flagElements = [clipShape([[0, 0], [flagWidth, 0], [flagWidth, flagHeight], [0, flagHeight], [0, 0]])]; + flagElements.push(...createSaltire(flagWidth, flagHeight, flagHeight * 0.15)); + break; + case 8: + flagElements = [clipShape([[0, 0], [flagWidth, 0], [flagWidth, flagHeight], [0, flagHeight], [0, 0]])]; + emblemElements = createComplexEmblem(); + break; + case 9: + flagElements = createHorizontalStripes(3); + emblemElements = createRandomEmblem(); + break; + case 10: + flagElements = [ + clipShape([[0, 0], [flagWidth / 2, flagHeight / 2], [0, flagHeight], [0, 0]]), + clipShape([[flagWidth, 0], [flagWidth / 2, flagHeight / 2], [flagWidth, flagHeight], [flagWidth, 0]]), + clipShape([[0, 0], [flagWidth, 0], [flagWidth / 2, flagHeight / 2], [0, 0]]) + ]; + break; + } + + flagElements.forEach(element => { + drawLines([element], { fill: randomColor(), stroke: 'black', width: 0.5 }); + }); + + emblemElements.forEach(element => { + drawLines([element], { fill: randomColor(), stroke: 'black', width: 0.5 }); + }); +} + +function createRandomEmblem() { + const emblemType = bt.randIntInRange(1, 5); + switch (emblemType) { + case 1: + return createStar(flagWidth / 2, flagHeight / 2, flagHeight * 0.3, flagHeight * 0.15, bt.randIntInRange(5, 8)); + case 2: + return createCircle(flagWidth / 2, flagHeight / 2, flagHeight * 0.25); + case 3: + return createCrescent(flagWidth / 2, flagHeight / 2, flagHeight * 0.3, flagHeight * 0.2); + case 4: + return createSun(flagWidth / 2, flagHeight / 2, flagHeight * 0.3, flagHeight * 0.2, bt.randIntInRange(8, 16)); + case 5: + return createTriangle(flagWidth / 2, flagHeight * 0.2, flagWidth * 0.3, flagHeight * 0.8, flagWidth * 0.7, flagHeight * 0.8); + } +} + +function createComplexEmblem() { + const numElements = bt.randIntInRange(2, 4); + let elements = []; + + for (let i = 0; i < numElements; i++) { + const elementType = bt.randIntInRange(1, 5); + const scale = 0.6 - i * 0.1; // for every nested element, decrease size + + switch (elementType) { + case 1: + elements.push(...createStar(flagWidth / 2, flagHeight / 2, flagHeight * 0.3 * scale, flagHeight * 0.15 * scale, bt.randIntInRange(5, 8))); + break; + case 2: + elements.push(...createCircle(flagWidth / 2, flagHeight / 2, flagHeight * 0.25 * scale)); + break; + case 3: + elements.push(...createCrescent(flagWidth / 2, flagHeight / 2, flagHeight * 0.3 * scale, flagHeight * 0.2 * scale)); + break; + case 4: + elements.push(...createSun(flagWidth / 2, flagHeight / 2, flagHeight * 0.3 * scale, flagHeight * 0.2 * scale, bt.randIntInRange(8, 16))); + break; + case 5: + elements.push(...createTriangle(flagWidth / 2, flagHeight * (0.5 - 0.3 * scale), + flagWidth * (0.5 - 0.2 * scale), flagHeight * (0.5 + 0.3 * scale), + flagWidth * (0.5 + 0.2 * scale), flagHeight * (0.5 + 0.3 * scale))); + break; + } + } + + return elements; +} + +generateRandomFlag(); diff --git a/art/flagDrawer-appleflyer/snapshots/snapshot0.png b/art/flagDrawer-appleflyer/snapshots/snapshot0.png new file mode 100644 index 000000000..3ebb6860e Binary files /dev/null and b/art/flagDrawer-appleflyer/snapshots/snapshot0.png differ diff --git a/art/flagDrawer-appleflyer/snapshots/snapshot1.png b/art/flagDrawer-appleflyer/snapshots/snapshot1.png new file mode 100644 index 000000000..4d1886b0d Binary files /dev/null and b/art/flagDrawer-appleflyer/snapshots/snapshot1.png differ diff --git a/art/flagDrawer-appleflyer/snapshots/snapshot2.png b/art/flagDrawer-appleflyer/snapshots/snapshot2.png new file mode 100644 index 000000000..885c27273 Binary files /dev/null and b/art/flagDrawer-appleflyer/snapshots/snapshot2.png differ diff --git a/art/ragna-eddie/images/image1.png b/art/ragna-eddie/images/image1.png new file mode 100644 index 000000000..fe2b56244 Binary files /dev/null and b/art/ragna-eddie/images/image1.png differ diff --git a/art/ragna-eddie/images/image2.png b/art/ragna-eddie/images/image2.png new file mode 100644 index 000000000..8bc140dac Binary files /dev/null and b/art/ragna-eddie/images/image2.png differ diff --git a/art/ragna-eddie/images/image3.png b/art/ragna-eddie/images/image3.png new file mode 100644 index 000000000..d9b437cca Binary files /dev/null and b/art/ragna-eddie/images/image3.png differ diff --git a/art/ragna-eddie/index.js b/art/ragna-eddie/index.js new file mode 100644 index 000000000..3ee5fda77 --- /dev/null +++ b/art/ragna-eddie/index.js @@ -0,0 +1,633 @@ +// welcome to blot! + +// check out this guide to learn how to program in blot +// https://blot.hackclub.com/editor?guide=start + +// fire + +const width = 125; +const height = 125; + +setDocDimensions(width, height); + +const body = []; +const back = []; +const exclaim = []; +const arms = []; + +const clouds = []; + +const bodyOutline = []; +// const bodyEyes = []; +// const bodyMouth = []; +// const bodyCheecks = []; +const bodyFace = [] +const bodyBack = []; +const bodyBelly = []; +const text = []; +const btm = []; +const background = []; + +const turnMove = (turtle, direction, directionAngle, length) => { + switch (direction) { + case "left": + turtle.left(directionAngle) + break; + case "right": + turtle.right(directionAngle) + break; + default: + return "no direction specified" + } + turtle.forward(length) +} + +const angleMove = (turtle, direction, length) => { + turtle.setAngle(direction) + turtle.forward(length) +} + +const bo = new bt.Turtle() + +bo.pos = [61, 93] +bo.up(); +bo.down(); + +turnMove(bo, "right", 27, 19) +turnMove(bo, "right", 38, 22) +angleMove(bo, -90, 29) + +bo.left(20) +bo.arc(73, 14) + +bo.right(-67) +bo.arc(-70, -11) + +turnMove(bo, "right", 181, 10) +turnMove(bo, "right", 400, 7) +turnMove(bo, "right", 230, 6) +turnMove(bo, "left", 270, 16) +turnMove(bo, "left", 287, 7) +turnMove(bo, "left", 143, 6) +turnMove(bo, "left", 288, 10) + +bo.right(425) +bo.arc(-48, 56) + +bo.right(271) +bo.arc(-88, 16) +bo.right(381) +bo.arc(-54, 25) + +const bb = new bt.Turtle() +bb.pos = [66, 91] +bb.up(); +bb.down(); +bb.right(269) +bb.arc(171, 9) + +bb.pos = [82, 76] +bb.up(); +bb.down(); +bb.right(220) +bb.arc(181, 8) + +bb.pos = [87, 55] +bb.up(); +bb.down(); +bb.right(213) +bb.arc(181, 8) + +bb.pos = [87, 37] +bb.up(); +bb.down(); +bb.right(192) +bb.arc(181, 6) + +bb.pos = [95, 27] +bb.up(); +bb.down(); +bb.right(133) +bb.arc(181, 5) + + +const be = new bt.Turtle() +function drawMad() { + // lefteye + be.pos = [47, 82] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + // righteye + be.pos = [65, 81.5] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + // right eyebrow + be.pos = [61, 83.4] + be.up(); + be.down(); + turnMove(be, "left", 289, 4) + + // left eyebrow + be.pos = [48.5, 85.5] + be.up(); + be.down(); + turnMove(be, "left", 286, 4) + + //mouth + be.pos = [47.4, 76.7] + be.up(); + be.down(); + turnMove(be, "left", 49, 4) + + be.right(3) + be.arc(-65, 2.5) + be.right(-103) + be.arc(23, 3.0) + be.right(26) + be.arc(-65, 2.5) + be.right(44) + be.arc(20, 5.0) + be.right(-100) + be.arc(-71, 4.0) + be.right(0) + be.arc(-71, 4.0) + be.right(17) + be.arc(-71, 4.4) + be.right(-4) + be.arc(-45, 7.1) + be.right(-71) + be.arc(-45, 10.0) + be.right(10) + be.arc(-117, 3.6) +} +// drawMad() + +function drawHappy() { + be.pos = [47, 82] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + // righteye + be.pos = [65, 81.5] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + be.pos = [50.3, 76.2] + be.up(); + be.down(); + turnMove(be, "left", -105, 9) + be.right(84) + be.arc(-89, 4.0) + be.right(9) + be.arc(-67, 6.1) +} + +function drawEh() { + be.pos = [47, 82] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + // righteye + be.pos = [65, 81.5] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + be.pos = [48.7, 76.2] + be.up(); + be.down(); + turnMove(be, "left", -105, 9) +} + +function drawP() { + be.pos = [47, 82] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + // righteye + be.pos = [65, 81.5] + be.up(); + be.down(); + be.right(127) + be.arc(360, 1.5) + + be.pos = [50.3, 76.2] + be.up(); + be.down(); + turnMove(be, "left", -105, 9) + be.right(58) + be.arc(-89, 2.2) + be.right(9) + be.arc(-136, 2.1) +} + +const faces = [drawMad, drawHappy, drawEh, drawP] +function callRandomFunction() { + const randomIndex = Math.floor(bt.rand() * faces.length); + const selectedFunction = faces[randomIndex]; + return selectedFunction(); +} +callRandomFunction() + +// belly +be.setAngle(761) + +be.pos = [47.3, 48.3] +be.up(); +be.down(); +be.right(154) +be.arc(208, 12.2) +be.right(0) +be.arc(76, 14.4) +be.right(-16) +be.arc(65, 13.8) + +be.pos = [56.0, 44.3] +be.up(); +be.down(); +turnMove(be, "left", 59, 4) +be.pos = [56.0, 41.8] +be.up(); +be.down(); +turnMove(be, "left", 92, 4) + +const bl = new bt.Turtle() +// cheeks +bl.pos = [66, 76] +bl.up() +bl.down() +bl.right(43) +bl.arc(105, 5) +turnMove(bl, "left", 38, 2) +bl.right(-40) +bl.arc(103, 5) +turnMove(bl, "left", 34, 2) +bl.pos = [68, 78] +bl.up() +bl.down() +turnMove(bl, "left", 23, 2.5) +bl.pos = [69.6, 79.1] +bl.up() +bl.down() +turnMove(bl, "left", 3, 3.5) +bl.setAngle(-80) + +bl.pos = [35, 76] +bl.up() +bl.down() +bl.right(-32) +bl.arc(100, 5) +turnMove(bl, "left", 36, 2) +bl.right(-40) +bl.arc(103, 5) +turnMove(bl, "left", 37, 2.1) + +bl.pos = [37, 78] +bl.up() +bl.down() +turnMove(bl, "left", 23, 2.5) +bl.pos = [39.5, 78.5] +bl.up() +bl.down() +turnMove(bl, "left", -7, 2.8) + +const arm = new bt.Turtle() +function rightarm(angle) { + arm.setAngle(angle) + arm.pos = [79, 62] + arm.up() + arm.down() + turnMove(arm, "left", 16, 12) + arm.right(46) + arm.arc(-43, 6) + arm.right(17) + arm.arc(-35, 11) + turnMove(arm, "left", -62, 11) + + // arm.pos = [99, 73] + // arm.up() + // arm.down() + arm.up() + arm.setAngle(9 + angle) + arm.forward(8) + // arm.up() + arm.setAngle(-32 + angle) + arm.forward(1) + arm.down() + arm.setAngle(-1) + arm.forward(0) + arm.right(278 - angle) + arm.arc(-35, 9) +} +function leftarm(angle) { + arm.setAngle(angle) + arm.pos = [50, 57] + arm.up() + arm.down() + turnMove(arm, "left", 16, 12.3) + arm.right(46) + arm.arc(-43, 6) + arm.right(17) + arm.arc(-35, 11) + turnMove(arm, "left", -62, 11.0) +} + +const random = bt.randInRange(159, 220) +const opprandom = 180 - random +leftarm(random) +rightarm(opprandom) + + +const ex = new bt.Turtle() +// ex.pos = [63, 57] +// ex.up() +// ex.down() +// turnMove(ex, "left", 16, 6.3) +function createTriangle(sideLength, height, y, x, angle) { + const rad = (Math.PI / 180) * angle; + + const vertices = [ + [0, 0], + [sideLength, 0], + [sideLength / 2, -height] + ].map(([vx, vy]) => [ + Math.cos(rad) * vx - Math.sin(rad) * vy + y, + Math.sin(rad) * vx + Math.cos(rad) * vy + x + ]); + + vertices.push(vertices[0]); + + drawLines([vertices]); +} + +if (Math.floor(bt.randInRange(0, 2)) == 1) { + if (Math.floor(bt.randInRange(0, 2)) == 1) { + createTriangle(6, 9, 31, 97, 40) + createTriangle(5, 13, 25, 91, 75) + createTriangle(5, 14, 36, 105, 9) + } else { + if (Math.floor(bt.randInRange(0, 2)) == 1) { + createTriangle(6, 9, 77, 100, -33) + createTriangle(5, 13, 87, 100, -55) + createTriangle(5, 14, 72, 106, -8) + } else { + createTriangle(8, 14, 79, 106, -22) + createTriangle(5, 10, 87, 100, -53) + createTriangle(5, 10, 72, 102, 4) + } + } +} else { + createTriangle(8, 14, 27, 99, 40) + createTriangle(5, 10, 28, 90, 75) + createTriangle(5, 10, 36, 102, 9) +} + + +const cloud = new bt.Turtle() +cloud.pos = [0,0] +function drawClouds(x, y) { + // cloud.jump([0,0]) + const cloud = new bt.Turtle() + cloud.down() + // cloud.pos = [0,0] + // cloud.goTo([10,0]) + // console.log(cloud.pos) + cloud.jump([x, y]) + cloud.setAngle(bt.randInRange(-10, 10)) + cloud.right(-93) + cloud.arc(172, 10) + cloud.right(153) + cloud.arc(172, 7) + cloud.right(168) + cloud.arc(172, 4) + cloud.right(106) + cloud.arc(172, 4) + cloud.right(46) + cloud.arc(89, 11) + cloud.right(82) + cloud.arc(89, 11) + cloud.right(87) + cloud.arc(89, 11) + cloud.right(92) + cloud.arc(89, 8) + cloud.right(45) + cloud.arc(172, 4) + cloud.right(106) + cloud.arc(172, 4) + cloud.right(170) + cloud.arc(172, 6) + clouds.push(...bt.scale(cloud.lines(), bt.randInRange(0.2, 0.3))) + cloud.up() +} + +// drawClouds(bt.randIntInRange(29, 40), bt.randIntInRange(38, 101)) + +// drawClouds(bt.randInRange(111, 125), bt.randInRange(26, 121)) + +// drawClouds(bt.randInRange(15, 150), bt.randInRange(15, 150)) + +const txt = new bt.Turtle() +txt.pos = [0,0] +function textDraw() { + // txt.pos = [23, 8] + txt.down() + txt.jump([15, 99]) + turnMove(txt, "left", 90, 18) + turnMove(txt, "left", -93, 11) + turnMove(txt, "left", -90, 11) + turnMove(txt, "left", -90, 2) + turnMove(txt, "left", 100, 8) + turnMove(txt, "left", -90, 4) + turnMove(txt, "left", -90, 6) + turnMove(txt, "left", 90, 2) + turnMove(txt, "left", 83, 4) + turnMove(txt, "left", -93, 3) + txt.jump([18, 108]) + turnMove(txt, "left", -89, 6) + turnMove(txt, "left", -93, 3.5) + turnMove(txt, "left", -93, 5.5) + turnMove(txt, "left", -80, 3.2) + // A + txt.jump([18, 108]) + txt.up() +} + +// textDraw() + +text.push(...txt.lines()) + +let randomness; +function randomtext(number) { + switch (number) { + case 0: + randomness = bt.text("RAGNOHACKS",[29,109],2.7) + break; + case 1: + randomness = bt.text("ragnohacks.ca",[21,109],2.7) + break; + case 2: + randomness = bt.text("register now!",[23,109],2.7) + break; + } +} +randomtext(bt.randIntInRange(0, 2)) + +let bottom = new bt.Turtle(); +function rbottom(num) { + switch (num) { + case 0: + bottom.down() + bottom.jump([39, 19]) + bottom.right(-93) + bottom.arc(172, 10) + bottom.right(153) + bottom.arc(172, 7) + bottom.right(168) + bottom.arc(172, 4) + bottom.right(106) + bottom.arc(172, 4) + bottom.right(46) + bottom.arc(89, 11) + bottom.right(82) + bottom.arc(89, 11) + bottom.right(87) + bottom.arc(89, 11) + bottom.right(92) + bottom.arc(89, 8) + bottom.right(45) + bottom.arc(172, 4) + bottom.right(106) + bottom.arc(172, 4) + bottom.right(170) + bottom.arc(172, 6) + btm.push(...bt.rotate(bt.scale(bottom.lines(), 0.8), bt.randIntInRange(-10, 10))) + btm.push(...bt.rotate(bt.translate(bt.scale(bottom.lines(), 0.5), [41, -1]), bt.randIntInRange(-13, 13))) + btm.push(...bt.rotate(bt.translate(bt.scale(bottom.lines(), 0.6), [77, -1]), bt.randIntInRange(-13, 13))) + bottom.up() + break; + case 1: + bottom.down() + bottom.jump([124, 0]) + for (let i=0; i<11; i++) { + const randNum = bt.randIntInRange(5, 20) + bottom.angle = 90 + bottom.forward(randNum) + turnMove(bottom, "left", 90, 11.2) + turnMove(bottom, "left", 90, randNum) + } + btm.push(...bottom.lines()) + bottom.up() + break; + default: + console.log("ehyo?") + } +} +rbottom(bt.randIntInRange(0, 1)) + + +const bg = new bt.Turtle() +function fireBump(size) { + turnMove(bg, "left", bt.randIntInRange(75, 86), size) + turnMove(bg, "left", bt.randIntInRange(-126, -154), bt.randIntInRange(size-2, size+5)) +} + +function drawLightning(turtle, length, size, onezero) { + let x; + const rdm = onezero + + if (rdm === 0) { + x = bt.randIntInRange(10, 30) + } else { + x = bt.randIntInRange(90, 105) + } + turtle.jump([x, 104]) + + turtle.setAngle(-90) + const direction = (rdm === 1) ? "left" : "right" + for (let i=0; i