anchor.diff:      }
     }
   
  +  void AddVerticesFace3TakeOwnershipt(List<VM.Vector3> vs) {
  +    assert(vs.length == 3);
  +    int i = vertices.length;
  +    _faces3.add(new Face3(i + 0, i + 1, i + 2));
  +    for (VM.Vector3 v in vs) {
  +      vertices.add(v);
  +    }
  +  }
  +
  +  void AddAttributeDouble(String canonical, double v) {
  +    List<double> ts = attributes[canonical];
  +    ts.add(v);
  +  }
  +
     void AddAttributesDouble(String canonical, List<double> lst) {
  -    List ts = attributes[canonical];
  +    List<double> ts = attributes[canonical];
       for (double v in lst) {
         ts.add(v);
       }
     }
   
  +  void AddAttributeVector2(String canonical, VM.Vector2 v) {
  +    List<VM.Vector2> ts = attributes[canonical];
  +    ts.add(v.clone());
  +  }
  +
     void AddAttributesVector2(String canonical, List<VM.Vector2> lst) {
  -    List ts = attributes[canonical];
  +    List<VM.Vector2> ts = attributes[canonical];
       for (VM.Vector2 v in lst) {
         ts.add(v.clone());
       }
     }
   
  +  void AddAttributesVector2TakeOwnership(
  +      String canonical, List<VM.Vector2> lst) {
  +    List<VM.Vector2> ts = attributes[canonical];
  +    for (VM.Vector2 v in lst) {
  +      ts.add(v);
  +    }
  +  }
  +
  +  void AddAttributeVector3(String canonical, VM.Vector3 v) {
  +    List<VM.Vector3> ts = attributes[canonical];
  +    ts.add(v.clone());
  +  }
  +
     void AddAttributesVector3(String canonical, List<VM.Vector3> lst) {
  -    List ts = attributes[canonical];
  +    List<VM.Vector3> ts = attributes[canonical];
       for (VM.Vector3 v in lst) {
         ts.add(v.clone());
       }
     }
   
  +  void AddAttributesVector3TakeOwnership(
  +      String canonical, List<VM.Vector3> lst) {
  +    List<VM.Vector3> ts = attributes[canonical];
  +    for (VM.Vector3 v in lst) {
  +      ts.add(v);
  +    }
  +  }
  +
  +  void AddAttributeVector4(String canonical, VM.Vector4 v) {
  +    List<VM.Vector4> ts = attributes[canonical];
  +    ts.add(v.clone());
  +  }
  +
     void AddAttributesVector4(String canonical, List<VM.Vector4> lst) {
  +    List<VM.Vector4> ts = attributes[canonical];
  +    for (VM.Vector4 v in lst) {
  +      ts.add(v.clone());
  +    }
  +  }
  +
  +  void AddAttributesVector4TakeOwnership(
  +      String canonical, List<VM.Vector4> lst) {
       List ts = attributes[canonical];
       for (VM.Vector4 v in lst) {
  -      ts.add(v.clone());
  +      ts.add(v);
       }
     }
   
  
positive.code:       if (f.d > maxIndexFace4) maxIndexFace4 = f.d;
      }
  
      final int n = vertices.length ~/ 3;
      assert(n >= 0);
      assert(maxIndexFace3 < n);
      assert(maxIndexFace4 < n);
  
      for (String canonical in attributes.keys) {
        assert(attributes[canonical].length == vertices.length,
  
negative.code:     }
  
      for (VM.Vector3 key in avg.keys) {
        avg[key] = avg[key]..normalize();
      }
      List<VM.Vector3> normals = new List<VM.Vector3>(vertices.length);
      for (int i = 0; i < vertices.length; ++i) {
        normals[i] = avg[vertices[i]];
      }
      attributes[aNormal] = normals;
    }
  
    void GenerateRadialNormals(VM.Vector3 center) {
      VM.Vector3 norm = new VM.Vector3.zero();
  