const LED_1206 = {"A":{"shape":"M -0.037,0.034L 0.027,0.034L 0.027,-0.034L -0.037,-0.034L -0.037,0.034","pos":[-0.055,0],"layers":["F.Cu"],"index":1},"C":{"shape":"M -0.027,0.034L 0.037,0.034L 0.037,-0.034L -0.027,-0.034L -0.027,0.034","pos":[0.055,0],"layers":["F.Cu"],"index":2}}
    const header_FTDI = {"GND":{"shape":"M 0.05,0.025L -0.05,0.025L -0.0509,0.025L -0.0517,0.025L -0.0535,0.0248L -0.0552,0.0244L -0.056,0.0243L -0.0578,0.0237L -0.0593,0.0232L -0.0602,0.0229L -0.061,0.0225L -0.0618,0.0221L -0.0625,0.0216L -0.0633,0.0212L -0.064,0.0208L -0.0654,0.0197L -0.0661,0.0191L -0.0668,0.0186L -0.0686,0.0168L -0.0691,0.0161L -0.0697,0.0154L -0.0708,0.014L -0.0712,0.0133L -0.0716,0.0125L -0.0721,0.0118L -0.0725,0.011L -0.0729,0.0102L -0.0732,0.0093L -0.0737,0.0078L -0.0743,0.006L -0.0744,0.0052L -0.0748,0.0035L -0.075,0.0017L -0.075,0.0009L -0.075,0L -0.075,-0.0009L -0.075,-0.0017L -0.0748,-0.0035L -0.0744,-0.0052L -0.0743,-0.006L -0.0737,-0.0078L -0.0732,-0.0093L -0.0729,-0.0102L -0.0725,-0.011L -0.0721,-0.0118L -0.0716,-0.0125L -0.0712,-0.0133L -0.0708,-0.014L -0.0697,-0.0154L -0.0691,-0.0161L -0.0686,-0.0168L -0.0668,-0.0186L -0.0661,-0.0191L -0.0654,-0.0197L -0.064,-0.0208L -0.0633,-0.0212L -0.0625,-0.0216L -0.0618,-0.0221L -0.061,-0.0225L -0.0602,-0.0229L -0.0593,-0.0232L -0.0578,-0.0237L -0.056,-0.0243L -0.0552,-0.0244L -0.0535,-0.0248L -0.0517,-0.025L 0.05,-0.025L 0.05,0.025","pos":[0,0.25],"layers":["F.Cu"],"index":1},"CTS":{"shape":"M -0.05,0.025L 0.05,0.025L 0.05,-0.025L -0.05,-0.025L -0.05,0.025","pos":[0,0.15],"layers":["F.Cu"],"index":2},"VCC":{"shape":"M -0.05,0.025L 0.05,0.025L 0.05,-0.025L -0.05,-0.025L -0.05,0.025","pos":[0,0.05],"layers":["F.Cu"],"index":3},"Tx":{"shape":"M -0.05,0.025L 0.05,0.025L 0.05,-0.025L -0.05,-0.025L -0.05,0.025","pos":[0,-0.05],"layers":["F.Cu"],"index":4},"Rx":{"shape":"M -0.05,0.025L 0.05,0.025L 0.05,-0.025L -0.05,-0.025L -0.05,0.025","pos":[0,-0.15],"layers":["F.Cu"],"index":5},"RTS":{"shape":"M -0.05,0.025L 0.05,0.025L 0.05,-0.025L -0.05,-0.025L -0.05,0.025","pos":[0,-0.25],"layers":["F.Cu"],"index":6}};
    const regulator_SOT223 = {"G":{"shape":"M -0.02,0.03L 0.02,0.03L 0.02,-0.03L -0.02,-0.03L -0.02,0.03","pos":[-0.09,-0.12],"layers":["F.Cu"],"index":1},"O":{"shape":"M -0.02,0.03L 0.02,0.03L 0.02,-0.03L -0.02,-0.03L -0.02,0.03","pos":[0,-0.12],"layers":["F.Cu"],"index":2},"I":{"shape":"M -0.02,0.03L 0.02,0.03L 0.02,-0.03L -0.02,-0.03L -0.02,0.03","pos":[0.09,-0.12],"layers":["F.Cu"],"index":3},"out":{"shape":"M -0.065,0.03L 0.065,0.03L 0.065,-0.03L -0.065,-0.03L -0.065,0.03","pos":[0,0.12],"layers":["F.Cu"],"index":4}};
    const C_1206 = {"1":{"shape":"M -0.032,0.034L 0.032,0.034L 0.032,-0.034L -0.032,-0.034L -0.032,0.034","pos":[-0.06,0],"layers":["F.Cu"],"index":1},"2":{"shape":"M -0.032,0.034L 0.032,0.034L 0.032,-0.034L -0.032,-0.034L -0.032,0.034","pos":[0.06,0],"layers":["F.Cu"],"index":2}};
    const ESP32_WROOM = {"GND1":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.3],"layers":["F.Cu"],"index":1},"GND2":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[-0.225,-0.3894],"layers":["F.Cu"],"index":15},"GND3":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.3],"layers":["F.Cu"],"index":38},"3V3":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.25],"layers":["F.Cu"],"index":2},"EN":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.2],"layers":["F.Cu"],"index":3},"VP":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.15],"layers":["F.Cu"],"index":4},"VN":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.1],"layers":["F.Cu"],"index":5},"IO34":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0.05],"layers":["F.Cu"],"index":6},"IO35":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,0],"layers":["F.Cu"],"index":7},"IO32":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.05],"layers":["F.Cu"],"index":8},"IO33":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.1],"layers":["F.Cu"],"index":9},"IO25":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.15],"layers":["F.Cu"],"index":10},"IO26":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.2],"layers":["F.Cu"],"index":11},"IO27":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.25],"layers":["F.Cu"],"index":12},"IO14":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.3],"layers":["F.Cu"],"index":13},"IO12":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[-0.3346,-0.35],"layers":["F.Cu"],"index":14},"IO13":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[-0.175,-0.3894],"layers":["F.Cu"],"index":16},"SHD":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[-0.125,-0.3894],"layers":["F.Cu"],"index":17},"SWP":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[-0.075,-0.3894],"layers":["F.Cu"],"index":18},"SCS":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[-0.025,-0.3894],"layers":["F.Cu"],"index":19},"SCK":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[0.025,-0.3894],"layers":["F.Cu"],"index":20},"SDO":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[0.075,-0.3894],"layers":["F.Cu"],"index":21},"SDI":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[0.125,-0.3894],"layers":["F.Cu"],"index":22},"IO15":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[0.175,-0.3894],"layers":["F.Cu"],"index":23},"IO2":{"shape":"M -0.0157,0.0394L 0.0157,0.0394L 0.0157,-0.0394L -0.0157,-0.0394L -0.0157,0.0394","pos":[0.225,-0.3894],"layers":["F.Cu"],"index":24},"IO0":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.35],"layers":["F.Cu"],"index":25},"IO4":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.3],"layers":["F.Cu"],"index":26},"IO16":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.25],"layers":["F.Cu"],"index":27},"IO17":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.2],"layers":["F.Cu"],"index":28},"IO5":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.15],"layers":["F.Cu"],"index":29},"IO18":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.1],"layers":["F.Cu"],"index":30},"IO19":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,-0.05],"layers":["F.Cu"],"index":31},"NC":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0],"layers":["F.Cu"],"index":32},"IO21":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.05],"layers":["F.Cu"],"index":33},"RX0":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.1],"layers":["F.Cu"],"index":34},"TX0":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.15],"layers":["F.Cu"],"index":35},"IO22":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.2],"layers":["F.Cu"],"index":36},"IO23":{"shape":"M -0.0394,0.0157L 0.0394,0.0157L 0.0394,-0.0157L -0.0394,-0.0157L -0.0394,0.0157","pos":[0.3346,0.25],"layers":["F.Cu"],"index":37}};
    const slide_switch = {"1":{"shape":"M -0.0195,0.0235L 0.0195,0.0235L 0.0195,-0.0235L -0.0195,-0.0235L -0.0195,0.0235","pos":[-0.098,0.1],"layers":["F.Cu"],"index":1},"2":{"shape":"M -0.0195,0.0235L 0.0195,0.0235L 0.0195,-0.0235L -0.0195,-0.0235L -0.0195,0.0235","pos":[0,0.1],"layers":["F.Cu"],"index":2},"3":{"shape":"M -0.0195,0.0235L 0.0195,0.0235L 0.0195,-0.0235L -0.0195,-0.0235L -0.0195,0.0235","pos":[0.098,0.1],"layers":["F.Cu"],"index":3}};
    const button_6mm = {"L1":{"shape":"M -0.04,0.03L 0.04,0.03L 0.04,-0.03L -0.04,-0.03L -0.04,0.03","pos":[-0.125,0.08],"layers":["F.Cu"],"index":1},"R1":{"shape":"M -0.04,0.03L 0.04,0.03L 0.04,-0.03L -0.04,-0.03L -0.04,0.03","pos":[-0.125,-0.08],"layers":["F.Cu"],"index":2},"R2":{"shape":"M -0.04,0.03L 0.04,0.03L 0.04,-0.03L -0.04,-0.03L -0.04,0.03","pos":[0.125,-0.08],"layers":["F.Cu"],"index":3},"L2":{"shape":"M -0.04,0.03L 0.04,0.03L 0.04,-0.03L -0.04,-0.03L -0.04,0.03","pos":[0.125,0.08],"layers":["F.Cu"],"index":4}};
    const R_1206 = {"1":{"shape":"M -0.032,0.034L 0.032,0.034L 0.032,-0.034L -0.032,-0.034L -0.032,0.034","pos":[-0.06,0],"layers":["F.Cu"],"index":1},"2":{"shape":"M -0.032,0.034L 0.032,0.034L 0.032,-0.034L -0.032,-0.034L -0.032,0.034","pos":[0.06,0],"layers":["F.Cu"],"index":2}};
    const footprint_holes = {};
    
    // commands:
    //  - SHIFT+ENTER: render
    //  - drap & drop file: kicad import
    
    
    // constants
    //const width = 1.45 // board width
    //const height = 1.2 // board height
    const x = 1 // x origin
    const y = 1 // y origin
    const zt = 0 // top z
    const zb = -0.06 // bottom z
    //const w = .015 // wire width
    const mask = .004 // solder mask size
    const border = 0.05 // rendering border
    //New constants
    const n = 20;
    const i_ignore = [0, 1,2,3,4,5,6,7,8,9,10,11, 19];
    const r_holes = 1.00;
    const width = 2.3;
    const height = 2.3;
    const w = 0.016;
    
    
    
    // Create a custom footprint
    for (var i=0; i < n; i++) {
      if (i_ignore.includes(i)) {
        continue;
      }
      
      let hole = geo.circle(0.07);
      let hole_plating = geo.circle(0.13);
    
      let hole_pos = [r_holes * Math.cos(i * 2 *Math.PI/n), r_holes * Math.sin(i * 2 *Math.PI/n)];
      
      footprint_holes[i.toString()] = {
        "shape": geo.getPathData(hole_plating),
        "pos": hole_pos,
        "layers": ["F.Cu"]
      }
    
      footprint_holes[i.toString()+"_hole"] = {
        "shape": geo.getPathData(hole),
        "pos": hole_pos,
        "layers": ["drill"]
      }
    }
    
    //console.log(footprint_holes)
    
    
    /* -- DECLARE_PCB -- */
    let board = new PCB();
    
    let H1 = board.add(footprint_holes, {"translate":[0, 0], "padLabelSize": 0.00});
    //let IC1 = board.add(ATtiny412, {"translate":pt(0, 0), "padLabelSize": 0.07});
    
    let interior = geo.circle(1.11);
    
    board.addShape("interior", interior);
    
    ///////////Cross ruler
    // const makeCross = (x, y) => {
    //   const width = 0.15;
    //   const height = 0.19;
    //   const w = 0.016
      
    //   board.wire([
    //     [x, y],
    //     [x - width/2, y]
    //   ], w);
    //   board.wire([
    //     [x, y],
    //     [x + width/2, y]
    //   ], w);
    //   board.wire([
    //     [x, y],
    //     [x, y - height/2]
    //   ], w);
    //   board.wire([
    //     [x, y],
    //     [x, y + height/2]
    //   ], w);
    // }
    // //makeCross(...pt(-0.869, -0.101));
    
    
    ////////
    /* -- ADD_COMPONENTS -- */
    let LED1 = board.add(LED_1206, { translate: pt(-0.132, 1.008), rotate: 180, name: "LED1" })
    let R7 = board.add(R_1206, { translate: pt(-0.136, 0.906), rotate: 0, name: "R7" })

    
    let J1 = board.add(header_FTDI, {translate: pt(x+width-2.706, y-0.774), rotate: 0, name: 'J1 FTDI\n3.3V'});
    let IC1 = board.add(regulator_SOT223, {translate: pt(J1.posX-0.247, J1.posY), name: 'IC1\n3.3V', padLabelSize: 0.01});
    let C1 = board.add(C_1206, {translate: pt(IC1.posX, IC1.posY-0.28), name: 'C1 10uF'});
    let C2 = board.add(C_1206, {translate: pt(IC1.posX, IC1.posY+.25), name: 'C2 1uF'});
    let IC2 = board.add(ESP32_WROOM, {translate: pt(x-1.423, y-0.66), rotate: 90, name: 'IC2\nESP32-WROOM', padLabelSize:0.01});
    let S1 = board.add(slide_switch, {translate: pt(IC1.posX, IC1.padY("out")+0.405), rotate: 180, name: 'prog run'});
    let S2 = board.add(button_6mm, {translate: pt(IC2.posX-0.239, IC2.padY("EN")-0.291), name: 'reset'});
    let R1 = board.add(R_1206, {translate: pt(S2.padX("L2")+0.12, S2.posY), rotate: 90, name: 'R1\n10k'});
    let R2 = board.add(R_1206, {translate: pt(R1.posX+0.088, R1.posY), rotate: 90, name: "R2" })
    let R3 = board.add(R_1206, {translate: pt(R2.posX+0.088, R1.posY), rotate: 90, name: "R3" })
    let R4 = board.add(R_1206, {translate: pt(R3.posX+0.088, R1.posY), rotate: 90, name: "R4" })
    let R5 = board.add(R_1206, {translate: pt(R4.posX+0.088, R1.posY), rotate: 90, name: "R5" })
    let R6 = board.add(R_1206, {translate: pt(R5.posX+0.088, R1.posY), rotate: 90, name: "R6" })
    let R19 = board.add(R_1206, {translate: pt(R6.posX+0.084, R1.posY), rotate: 90, name: "R19" })
    let R20 = board.add(R_1206, {translate: pt(R19.posX+0.088, R1.posY), rotate: 90, name: "R20" })
    
    let C3 = board.add(C_1206, {translate: pt(R6.posX+0.261, R1.posY), rotate: 90, name: 'C3\n.1uF'});
    
    board.addShape("interior", interior);
    
    
    /* -- ADD_WIRES -- */
    board.wire(path(IC1.pad("G"),
                    ["fillet", 0.04,pt(IC1.padX("G")-0.053, IC1.padY("G"))],
                    ["fillet", 0.04, pt(IC1.padX("G")-0.05, J1.padY("GND")+0.1)],
                    ["fillet", 0.04, pt(J1.padX("GND"), J1.padY("GND")+.1)],
                    J1.pad("GND"),), w);
    
    board.wire(path(IC1.pad("I"),
                     ["fillet", 0.03, pt(IC1.padX("I"), J1.padY("VCC"))],
                    J1.pad("VCC"),), w);
    
    board.wire(path(IC1.pad("O"),
                    IC1.pad("out"),), w);
    
    board.wire(path(C1.pad("1"),
                    pt(IC1.padX("G"), C1.padY("1")),
                    IC1.pad("G"),), w);
    
    board.wire(path(C1.pad("2"),
                    pt(IC1.padX("I"), C1.padY("2")),
                    IC1.pad("I"),), w);
    
    board.wire(path(C2.pad("1"),
                    pt(IC1.padX("G")-0.05, C2.padY("1")),), w);
    
    board.wire(path(C2.pad("2"),
                    pt(C2.padX("2"), IC1.padY("out")),
                    IC1.pad("out"),), w);
    
    board.wire(path(IC2.pad("GND1"),
                    pt(IC2.padX("GND1"), IC2.padY("GND2")),
                    IC2.pad("GND2"),), w);
    
    board.wire(path(IC2.pad("GND1"),      
      IC2.pad("GND3"),
                   ), w);
    
    board.wire(path(IC2.pad("GND2"),
                    pt(IC1.padX("G")-0.051, IC2.padY("GND2")),
                     ["fillet", 0.06, pt(IC1.padX("G")-0.067, IC1.padY("G"))],
                    IC1.pad("G"),), w);
    
    board.wire(path(IC2.pad("RX0"),
                    ["fillet", 0.03, pt(IC2.padX("RX0"), IC2.padY("RX0")+0.087)],
                    //["fillet", 0.04, pt(J1.padX("Tx")-0.59, IC2.padY("RX0")+0.108)],
                    //["fillet", 0.03, pt(J1.padX("Tx")-0.608, IC2.padY("RX0")+0.091)],
                    ["fillet", 0.08, pt(J1.padX("Tx")+0.091, IC2.padY("RX0")+0.084)],
                    
                    ["fillet", 0.04, pt(J1.padX("Tx")+0.096, J1.padY("Tx"))],
                    J1.pad("Tx"),), w);
    
    board.wire(path(IC2.pad("TX0"),
                    ["fillet", 0.03, pt(IC2.padX("TX0"), IC2.padY("RX0")+0.12)],
                    //["fillet", 0.06, pt(J1.padX("Rx")-0.46, IC2.padY("RX0")+0.365)],
                    //["fillet", 0.03, pt(J1.padX("Rx")-0.495, IC2.padY("RX0")+0.174)],
                     ["fillet", 0.07, pt(J1.padX("Rx")+0.139, IC2.padY("RX0")+0.122)],
                    
                    ["fillet", 0.06, pt(J1.padX("Rx")+0.144, J1.padY("Rx"))],
                    J1.pad("Rx"),), w);
    
    board.wire(path(S1.pad("3"),
                     ["fillet", 0.06, pt(IC1.padX("G")-0.056, S1.padY("3"))],
                     ["fillet", 0.06, pt(IC1.padX("G")-0.06, IC2.padY("IO0"))],
                    IC2.pad("IO0"),), w);
    
    board.wire(path(S1.pad("2"),
                    pt(S1.posX, J1.padY("GND")+0.106),), w);
    
    board.wire(path(S2.pad("L1"),
                    S2.pad("L2"),), w);
    
    board.wire(path(S2.pad("L1"),
                    ["fillet", 0.02, pt(-0.622, -0.204)],
                     ["fillet", 0.02,pt(IC2.padX("EN"), S2.padY("L1")+0.058)],
                    IC2.pad("EN"),), w);
    
    board.wire(path(S2.pad("R1"),
                    S2.pad("R2"),), w);
    
    board.wire(path(S2.pad("R1"),
                    ["fillet", 0.06, pt(IC2.padX("GND1")-0.265, S2.padY("R1"))],
                    ["fillet", 0.04, pt(-0.988, -0.072)],
                    ["fillet", 0.02, pt(-0.722, -0.071)],
                    IC2.pad("GND1"),), w);
    
    board.wire(path(IC2.pad("3V3"),
                     ["fillet", 0.02, pt(-0.674, -0.107)],
                    ["fillet", 0.04, pt(-0.927, -0.109)],
                    ["fillet", 0.04, pt(-0.924, -0.289)],
                    ["fillet", 0.04, pt(IC2.padX("3V3"), S2.posY)],
                    ["fillet", 0.03, pt(IC1.padX("O"), S2.posY)],
                    IC1.pad("O"),), w);
    
    board.wire(path(R1.pad("1"),
                    pt(R1.posX, R1.posY),), w);
    
    board.wire(path(R1.pad("2"),
                    pt(R1.posX, S2.padY("L2")),
                    S2.pad("L2"),), w);
    
    board.wire(path(C3.pad("1"),
                    pt(C3.posX, C3.posY),), w);
    
    board.wire(path(C3.pad("2"),
                    pt(C1.padX("1"), C3.padY("2")),
                    C1.pad("1"),), w);
    
    // //IO23 to hole 8
    // board.wire(path(IC2.pad("IO23"),            
    //   ["fillet", 0.27, pt(-0.643, 0.415)],
    //   ["fillet", 0.27, pt(-0.678, 0.553)],
    //   ["fillet", 0.27, pt(-0.895, 0.466)],
    //   H1.pad("8"),
    //   ), w+0.01);
    
    // board.wire(path(R17.pad("2"),
    //   // ["fillet", -0.03, pt(-0.878, 0.713)],
      
    //               H1.pad("8") ), w+0.01);
    
    // //IO22 to hole 7
    // board.wire(path(IC2.pad("IO22"),            
    //   ["fillet", 0.27, pt(-0.591, 0.514)],
    //   ["fillet", 0.27, pt(-0.587, 0.675)],
    //   ["fillet", 0.27, pt(-0.757, 0.696)],
    //   ["fillet", 0.27, pt(-0.861, 0.77)],
    //   H1.pad("7") ), w+0.01);
                   
    
    // board.wire(path(R18.pad("2"),
    //   // ["fillet", -0.03, pt(-0.878, 0.713)],
      
    //               H1.pad("7") ), w+0.01);
    
    
    // //IO21 to hole 6
    // board.wire(path(IC2.pad("IO21"),            
    //   ["fillet", 0.02, pt(-0.441, 0.428)],
    //   R8.pad("1"),
    //                ), w);
    
    // board.wire(path(R8.pad("2"),
    //   R7.pad("1"),
    //                ), w);
    
    // board.wire(path(R7.pad("2"),
    //   ["fillet", 1.11, pt(-0.347, 0.987)],
    //   ["fillet", 1.11, pt(-0.558, 0.977)],
    //               H1.pad("6") ), w+0.01);
    
    // //IO19 to hole 5
    // board.wire(path(IC2.pad("IO19"),            
    //   ["fillet", 0.02, pt(-0.339, 0.422)],
    //   R10.pad("1"),
    //                ), w);
    
    // board.wire(path(R10.pad("2"),
    //   R9.pad("1"),
    //                ), w);
    
    // board.wire(path(R9.pad("2"),
    //   ["fillet", 0.27, pt(-0.288, 0.943)],
    //   ["fillet", 0.27, pt(-0.288, 1.078)],
    //               H1.pad("5") ), w+0.01);
    
    // //IO18 to hole 4
    // board.wire(path(IC2.pad("IO18"),            
    //   ["fillet", 0.02, pt(-0.294, 0.401)],
    //   ["fillet", 0.02, pt(-0.223, 0.449)],
    //   R12.pad("1"),
    //                ), w);
    
    // board.wire(path(R12.pad("2"),
    //   R11.pad("1"),
    //                ), w);
    
    // board.wire(path(R11.pad("2"),
    //   ["fillet", 0.27, pt(-0.279, 1.13)],
    //   ["fillet", 0.27, pt(0.149, 1.078)],
      
    //               H1.pad("4") ), w+0.01);
    
    // //IO17 to hole 3
    // board.wire(path(IC2.pad("IO17"),            
    //   ["fillet", 0.02, pt(-0.195, 0.396)],
    //   ["fillet", 0.02, pt(-0.135, 0.441)],
    //   R14.pad("1"),
    //                ), w);
    
    // board.wire(path(R14.pad("2"),
    //   R13.pad("1"),
    //                ), w);
    
    // board.wire(path(R13.pad("2"),
    //   ["fillet", 0.27, pt(-0.164, 1.001)],
    //   ["fillet", 0.27, pt(0.029, 1.034)],
    
    //   ["fillet", 0.27, pt(0.235, 0.916)],
    //   ["fillet", 0.27, pt(0.478, 1.051)],
    //               H1.pad("3") ), w+0.01);
    
    // //IO16 to hole 2
    // board.wire(path(IC2.pad("IO4"),            
    //   ["fillet", 0.02, pt(-0.091, 0.399)],
    //   ["fillet", 0.02, pt(-0.041, 0.438)],
    //   R16.pad("1"),
    //                ), w);
    
    // board.wire(path(R16.pad("2"),
    //   R15.pad("1"),
    //                ), w);
    
    // board.wire(path(R15.pad("2"),
    //   ["fillet", 1.58, pt(-0.07, 0.976)],
    //   ["fillet", 1.58, pt(0.202, 0.855)],
    
    //   ["fillet", 1.58, pt(0.543, 0.925)],
    //   ["fillet", 1.58, pt(0.587, 0.614)],
      
    //               H1.pad("2") ), w+0.01);
    
    //IO32 to hole 12
    board.wire(path(IC2.pad("IO32"),            
      ["fillet", 0.08, pt(-0.373, -0.126)],
      ["fillet", 0.05, pt(-0.328, -0.191)],
      R2.pad("2"),
                   ), w);
    
    // board.wire(path(R2.pad("1"),
    //   ["fillet", 0.27, pt(-0.363, -0.72)],
    //   ["fillet", 0.27, pt(-0.556, -0.534)],
    //   ["fillet", 0.27, pt(-0.568, -0.547)],
    //   H1.pad("12") ), w+0.01);
    
    
    //IO33 to hole 13
    board.wire(path(IC2.pad("IO33"),            
      ["fillet", 0.11, pt(-0.327, -0.128)],
      ["fillet", 0.10, pt(-0.247, -0.182)],
      R3.pad("2"),
                   ), w);
    
    board.wire(path(R3.pad("1"),
    
                    ["bezier", pt(-0.284, -0.561), 
                    pt(-0.181, -0.693)],
                    H1.pad("13")), w+0.01);
    
    //IO25 to hole 14
    board.wire(path(IC2.pad("IO25"),            
      ["fillet", 0.10, pt(-0.273, -0.113)],
      ["fillet", 0.08, pt(-0.162, -0.177)],
      R4.pad("2"),
                   ), w);
    
    board.wire(path(R4.pad("1"),
                    ["bezier", pt(-0.263, -0.655), 
                    pt(0.074, -0.597)],
                    H1.pad("14")), w+0.01);
    
    //IO26 to hole 15
    board.wire(path(IC2.pad("IO26"),            
      ["fillet", 0.07, pt(-0.223, -0.106)],
      ["fillet", 0.05, pt(-0.071, -0.175)],
      R5.pad("2"),
                   ), w);
    
    board.wire(path(R5.pad("1"),
    
                    ["bezier", pt(-0.12, -0.805), 
                    pt(0.162, -0.582)],
                    H1.pad("15")), w+0.01);
    
    
    
    //IO27 to hole 16
    board.wire(path(IC2.pad("IO27"),            
      ["fillet", 0.06, pt(-0.174, -0.086)],
      ["fillet", 0.05, pt(0.019, -0.179)],
      R6.pad("2"),
                   ), w);
    
    board.wire(path(R6.pad("1"),
    
                    ["bezier", pt(0.009, -0.775), 
                    pt(0.32, -0.506)],
                    H1.pad("16")), w+0.01);
    
    
    //IO14 to hole 17
    board.wire(path(IC2.pad("IO14"),            
      ["fillet", 0.04, pt(-0.123, -0.071)],
      ["fillet", 0.05, pt(0.106, -0.173)],
      R19.pad("2"),
                   ), w);
    
    board.wire(path(R19.pad("1"),
    
                    ["bezier", pt(0.112, -0.731), 
                    pt(0.452, -0.391)],
                    H1.pad("17")), w+0.01);
    
    
    //IO12 to hole 18
    board.wire(path(IC2.pad("IO12"),            
      ["fillet", 0.04, pt(-0.073, -0.053)],
      ["fillet", 0.06, pt(0.191, -0.16)],
    
      R20.pad("2"),
                   ), w);
    
    board.wire(path(R20.pad("1"),
    
                    ["bezier", pt(0.162, -0.582), 
                    pt(0.493, -0.418)],
                    H1.pad("18")), w+0.01);
      // ["fillet", 0.27, pt(0.061, -0.95)],
      // ["fillet", 0.27, pt(0.536, -0.296)],
      // ["fillet", 0.27, pt(0.958, -0.716)],
      // ["fillet", 0.27, pt(0.829, -0.578)],
      
      // H1.pad("18") ), w+0.01);
    
    
    // //Bezier lines
    // board.wire(path(H1.pad("7"),
    //                 ["bezier", pt(-0.78, 0.44),
    //                             pt(-0.6, 1.87)],
    //                 IC2.pad("IO22")), w+0.01);
    
    // board.wire(path(H1.pad("8"),
    //                 ["bezier", pt(-1.13, -0.07),
    //                             pt(-0.56, 1.87),
    //                 pt(-0.65, 0.62)],
    //                 IC2.pad("IO23")), w+0.01);
    
    board.wire(path(R2.pad("1"),
                    ["bezier", pt(-0.313, -0.617), 
                    pt(-0.563, -0.465)],
                    H1.pad("12")), w+0.01);
    
    
    board.wire(path(IC2.pad("GND3"),
      ["fillet", 0.11, pt(-0.722,0.792)],          
      ["fillet", 0.32, pt(-0.411, 0.995)],
      ["fillet", 0.06, pt(-0.192, 1.002)],
      LED1.pad("C"),), w);
    
    board.wire(path(IC2.pad("IO23"),
      ["fillet", 0.08, pt(-0.659,0.788)], 
      ["fillet", 0.19, pt(-0.407,0.912)],  
      ["fillet", 0.06, pt(-0.204, 0.906)],
      R7.pad("1"),), w);
    
    board.wire(path(LED1.pad("A"),
                    R7.pad("2"),
                    ), w);
    
    let header_pad = path(
      pt(0.801, 0.543),
      pt(1.177, 0.546),
      pt(1.161, -0.171),
      pt(0.814, -0.167),);
    board.addShape("holes", header_pad);
    
    let lip = 0.1;
    let background = geo.rectangle(width, height+lip);
    
    geo.translate(background, [0, (height-lip)/65]);
    
    board.addShape("background", background);
    
    
    // //render
    
    // render normal PCB
    renderPCB({
      pcb: board,
        layerColors: {
        "background": "#ffffffff",
        "interior": "#002d00ff",
        //"holes": "#ffffffff",
        "B.Cu": "#ff4c007f",
        "F.Cu": "#ff8c00cc",
        "drill": "#ffffffff",
        "padLabels": "#000099e5",
        "componentLabels": "#00e5e5e5",
      },
      limits: {
        x: [-width/2, width/2],
        y: [-height/2, height/2]
      },
      mm_per_unit: 25.4
    })
    // renderPCB({
    //   pcb: board,
    //     layerColors: {
    //     "background": "#ffffffff",
    //     "interior": "#002d00ff",
    //     "holes": "#ffffffff",
    //     "B.Cu": "#ff4c007f",
    //     "F.Cu": "#ff8c00cc",
    //     "drill": "#ffffffff",
    //     "padLabels": "#000099e5",
    //     "componentLabels": "#00e5e5e5",
    //   },
    //   limits: {
    //     x: [-width/2, width/2],
    //     y: [-height/2, height/2]
    //   },
    //   mm_per_unit: 25.4
    // })
    
    //render for traces
    // renderPCB({
    //   pcb: board,
    //     layerColors: {
    //     "background": "00000ff",
    //     "interior": "#00000ff",
    //    // "holes": "#ffffffff",
    //     //"B.Cu": "#ff4c007f",
    //     "F.Cu": "#ffffffff",
    //     "drill": "#ffffffff",
    //     //"padLabels": "#000099e5",
    //    // "componentLabels": "#00e5e5e5",
    //   },
    //   limits: {
    //     x: [-width/2, width/2],
    //     y: [-height/2, height/2]
    //   },
    //   mm_per_unit: 25.4
    // })
    
    
    //render for holes
    // renderPCB({
    //   pcb: board,
    //     layerColors: {
    //     "background": "00000ff",
    //     "interior": "#00000ff",
    //     //"holes": "#ffffffff",
    //     //"B.Cu": "#ff4c007f",
    //     //"F.Cu": "#ffffffff",
    //     "drill": "#ffffffff",
    //     //"padLabels": "#000099e5",
    //    // "componentLabels": "#00e5e5e5",
    //   },
    //   limits: {
    //     x: [-width/2, width/2],
    //     y: [-height/2, height/2]
    //   },
    //   mm_per_unit: 25.4
    // })
    
    //render for outline
    // renderPCB({
    //   pcb: board,
    //     layerColors: {
    //     "background": "#ffffffff",
    //     "interior": "#00000ff",
    //     "holes": "#ffffffff",
    //     //"B.Cu": "#ff4c007f",
    //     "F.Cu": "#ff8c00cc",
    //     "drill": "#ffffffff",
    //     "padLabels": "#000099e5",
    //     //"componentLabels": "#00e5e5e5",
    //   },
    //   limits: {
    //     x: [-width/2, width/2],
    //     y: [-height/2, height/2]
    //   },
    //   mm_per_unit: 25.4
    // })