anchor.diff:    | WebResourceByteDiff -> webResourceByteDiff (dev_path, prod_path) dev_elem prod_elem
   
   
  -let elim_elem ((dev_path, prod_path): (string * string)) type_ output 
  -    (dev_node: XmlNode) (prod_node: XmlNode) dev_path dev_id (dev_readable: ReadableName) (extra_check: ExtraChecks) callback =
  -  let dev_elems = select_nodes dev_node dev_path
  +type AddToSolutionStrategy = 
  +  | EntityComponentAdd of EntityComponent
  +  | SolutionComponentAdd of SolutionComponent
  +
  +let elim_elem ((dev_unzip_path, prod_unzip_path): (string * string)) output (dev_node: XmlNode) (prod_node: XmlNode) 
  +              type_ dev_node_path dev_id (dev_readable: ReadableName) (extra_check: ExtraChecks) callback =
  +  let dev_elems = select_nodes dev_node dev_node_path
     dev_elems
     |> Seq.iter (fun dev_elem ->
       let id = get_id dev_elem dev_id
       let name = GetReadableName dev_elem dev_readable
  -    let prod_elem = prod_node.SelectSingleNode(append_selector dev_path id dev_id)
  -    let extra_check_fun = GetExtraCheck (dev_path, prod_path) dev_elem prod_elem extra_check
  +    let prod_elem = prod_node.SelectSingleNode(append_selector dev_node_path id dev_id)
  +    let extra_check_fun = GetExtraCheck (dev_unzip_path, prod_unzip_path) dev_elem prod_elem extra_check
       // remove_useless dev_elem prod_elem;
       if prod_elem = null then
         if output = Diff || output = Both then 
  
positive.code:         req.EntityFilters <- EntityFilters.All;
          req.LogicalName <- name.ToLower();
          let resp = proxy.Execute(req) :?> RetrieveEntityResponse
          addElementToTemp "entity info" output
            dev_ent prod_ent 
            "EntityInfo/entity/*[not(self::attributes)]" 
            (Custom (fun id -> "EntityInfo/entity/"+id))
            ElemName
            NoExtra
            (fun id -> 
              add_entity_component proxy sol_id resp.EntityMetadata.MetadataId.Value EntityComponent.EntityMetaData);
          addElementToTemp "ribbon" output
            dev_ent prod_ent 
            "RibbonDiffXml"
            (Custom (fun id -> "RibbonDiffXml"))
            (Static "Ribbon")
            NoExtra
            (fun id -> 
              add_solution_component proxy sol_id resp.EntityMetadata.MetadataId.Value SolutionComponent.Ribbon);
          addElementToTemp "attribute" output
            dev_ent prod_ent 
            "EntityInfo/entity/attributes/attribute"
            (Attribute "PhysicalName")
            (AttributeNamedItem "PhysicalName")
            NoExtra
  
negative.code:       add_solution_component proxy sol_id (Guid.Parse id) SolutionComponent.PluginStep);
    // (Reports)
    // (regular Sitemap)
    AddEntityDataToSolution "app site map" "/ImportExportXml/AppModuleSiteMaps/AppModuleSiteMap"
      (Node "SiteMapUniqueName")
      LocalizedNameDescription
      NoExtra
      (fun id -> 
        add_solution_component proxy sol_id (fetch_sitemap_id proxy id) SolutionComponent.SiteMap);
    AddEntityDataToSolution "app" "/ImportExportXml/AppModules/AppModule"
      (Node "UniqueName")
      LocalizedNameDescription
      NoExtra
  