anchor.diff:    void offset(int x, int y, [bool lock]) => this.points.forEach((p) => p.offset(x, y));
   
     void offsetEdge(int edge, int x, int y, [bool lock]) {
  -    int next = (edge + 1) % points.length;
  -    Point a = points[edge];
  -    Point b = points[next];
  +    int next = (edge + 1) % this.points.length;
  +    Point a = this.points[edge];
  +    Point b = this.points[next];
   
       if (edge != this._lockEdge && this._lockEdge != null) {
         // unlock old points
  
positive.code:     g.strokeStyle = stroke.rgba;
  
      g.beginPath();
      g.moveTo(points[0].x, points[0].y);
      points.sublist(1).forEach((p) => g.lineTo(p.x, p.y));
      g.closePath();
  
      g.fill();
  
negative.code:   // uses ray-casting algorithm
    bool contains(Point p) {
      num crosses = 0;
      for (int i = 0; i < this.points.length; i++) {
        int second = (i + 1) % this.points.length;
  
        Point a = this.points[i];
        Point b = this.points[second];
  
        if (p.intersects(a, b)) {
          crosses++;
  