<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<metadata xml:lang="en">
<Esri>
<SyncOnce>FALSE</SyncOnce>
<ArcGISFormat>1.0</ArcGISFormat>
<DataProperties>
<lineage>
<Process Date="20190923" Time="145305" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var deletes = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                adds[0] = {
            'attributes': {'centerlineid' : road.centerlineid, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                           'fromright' : fromright, 'fromleft' : fromleft, 'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]
            },
            'geometry': firstGeometry
        }
        adds[1] = {
            'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                        'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
            },
            'geometry': Union(secondGeomArray)
        }
                deletes[0] = { 'objectID': road.OBJECTID }            }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'deletes' : deletes}]     };
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;evaluation_order&gt;1&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="145537" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;var fullname = $feature.fullname;
if (fullname == null) return fullname;
var masterStreetNames = Filter(FeatureSetByName($datastore, "MasterStreetName"), "fullname = '" + fullname + "'");
if (Count(masterStreetNames) == 0) {
    return {
        "errorMessage": "Full Road Name is invalid, must be defined in the Master Street Name table."
    }
}
return fullname;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;evaluation_order&gt;2&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="145544" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;var fullname = $feature.fullname;
if (fullname == null) return fullname;
var masterStreetNames = Filter(FeatureSetByName($datastore, "MasterStreetName"), "fullname = '" + fullname + "'");
if (Count(masterStreetNames) == 0) {
    return {
        "errorMessage": "Full Road Name is invalid, must be defined in the Master Street Name table."
    }
}
return fullname;
&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Name="Flip Line" Time="154638" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190923" Name="Calculate New From Right" Time="154639" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromright 971 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New From Left" Time="154639" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromleft 972 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New To Left" Time="154639" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toleft 904 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New To Right" Time="154639" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toright 901 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Flip Line" Time="154723" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190923" Name="Calculate New From Right" Time="154724" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromright 901 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New From Left" Time="154724" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromleft 904 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New To Left" Time="154725" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toleft 972 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Name="Calculate New To Right" Time="154725" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toright 971 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190923" Time="165702" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var deletes = [];
var altRoadAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {            var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                adds[Count(adds)] = {
            'attributes': {'centerlineid' : road.centerlineid, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                           'fromright' : fromright, 'fromleft' : fromleft, 'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]
            },
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
            'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                        'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
            },
            'geometry': Union(secondGeomArray)
        }
                deletes[Count(deletes)] = { 'objectID': road.OBJECTID }            }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'deletes' : deletes}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="170302" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var deletes = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {            var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                adds[Count(adds)] = {
            'attributes': {'centerlineid' : road.centerlineid, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                           'fromright' : fromright, 'fromleft' : fromleft, 'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]
            },
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
            'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                        'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
            },
            'geometry': Union(secondGeomArray)
        }
                deletes[Count(deletes)] = { 'objectID': road.OBJECTID }
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : roadNameAlias.centerlineid, 'fullname' : roadNameAlias.fullname}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'deletes' : deletes},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="170855" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var deletes = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {            var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                adds[Count(adds)] = {
            'attributes': {'centerlineid' : road.centerlineid, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                           'fromright' : fromright, 'fromleft' : fromleft, 'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]
            },
            'geometry': firstGeometry
        }
        var newCenterlineID = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
            'attributes': {'centerlineid' : newCenterlineID, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                        'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
            },
            'geometry': Union(secondGeomArray)
        }
                deletes[Count(deletes)] = { 'objectID': road.OBJECTID }
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newCenterlineID, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'deletes' : deletes},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="171510" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var nameAliasAdds = [];
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newCenterlineID, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="171609" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var nameAliasAdds = [];
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newCenterlineID = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newCenterlineID, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="172229" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return;
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
    }
}
return { 'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates}] };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="172612" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190923" Time="172650" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid == "New Centerline") return "RD-" + NextSequenceValue("CenterlineID");
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : 'New Centerline', 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="130553" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="130705" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="131450" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="132107" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'fullname' : roadNameAlias.fullname}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="132406" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="133722" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="133931" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="134216" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="134353" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="134718" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]}
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="134821" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="135608" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
return Count(intersectingRoads);&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="135842" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
return id;
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
return Count(intersectingRoads);&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="140141" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="141302" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
if ($feature.centerlineid != null) return $feature.centerlineid;
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
for (var road in intersectingRoads) {
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    if (validCut) {
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                var secondGeometry = Union(secondGeomArray);
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': Union(secondGeomArray)
        }
                var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="141351" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Test Rule&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;var id = "RD-" + NextSequenceValue("CenterlineID");
return id;&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Test Rule&lt;/rule_name&gt;&lt;evaluation_order&gt;3&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142102" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteAttributeRule&gt;&lt;rule_name&gt;Test Rule&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DeleteAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142200" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;return $feature.centerlineid + ",Insert";&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;evaluation_order&gt;3&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142238" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Update&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;return $feature.centerlineid + ",Update";&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Update&lt;/rule_name&gt;&lt;evaluation_order&gt;4&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142415" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;return $feature.centerlineid + ",I";&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Update&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;return $feature.centerlineid + ",U";&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142547" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;var id = "RD-" + NextSequenceValue("CenterlineID");
return id;&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Update&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="142752" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;var id = "RD-" + NextSequenceValue("CenterlineID");
return id;&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20190925" Time="165910" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteAttributeRule&gt;&lt;rule_name&gt;Insert&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DeleteAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20190925" Time="165919" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteAttributeRule&gt;&lt;rule_name&gt;Update&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DeleteAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20190930" Name="Flip Line" Time="092847" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="092909" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093022" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Calculate New From Right" Time="093023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromright 896 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New From Left" Time="093023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromleft 889 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New To Left" Time="093023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toleft 889 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New To Right" Time="093023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toright 859 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Flip Line" Time="093042" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Calculate New From Right" Time="093042" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromright 859 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New From Left" Time="093042" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" fromleft 889 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New To Left" Time="093043" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toleft 889 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Calculate New To Right" Time="093043" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "I_Roads - Local Streets_OBJECTID" toright 896 PYTHON3 # "Long (large integer)"</Process>
<Process Date="20190930" Name="Flip Line" Time="093658" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093710" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093734" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093800" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093807" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="093823" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094054" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094258" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094314" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094321" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094413" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094424" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094507" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="094534" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Name="Flip Line" Time="095727" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="105120" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="105135" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="105205" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="105322" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="105323" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="111003" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="111004" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="111014" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="111015" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="133346" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="133347" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="133514" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="133515" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" #</Process>
<Process Date="20190930" Time="134953" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="135028" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="135306" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="135529" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="142259" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="142312" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="142328" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="142628" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="142644" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145145" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145145" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" # # # # #</Process>
<Process Date="20190930" Time="145737" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145737" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" # fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145750" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145751" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" true fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145804" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145804" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" true fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145819" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145820" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" false fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145834" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20190930" Time="145857" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20190930" Time="145858" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" true fromright fromleft toright toleft</Process>
<Process Date="20191001" Time="103855" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;domain_name&gt;Full Road Name&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191001" Time="133315" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20191001" Time="133359" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20191002" Time="102036" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;RemoveDomainFromField&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;/RemoveDomainFromField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20191002" Time="113614" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\SwapParity">SwapParity "Roads\Roads - Local Streets" fromright fromleft toright toleft</Process>
<Process Date="20191002" Time="113700" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Roads - Local Streets"</Process>
<Process Date="20191002" Time="113701" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\AddressDataManagement.pyt\FlipRoads">FlipRoads "Roads\Roads - Local Streets" true fromright fromleft toright toleft</Process>
<Process Date="20191002" Time="135841" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191002" Time="135921" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\DeleteRows">DeleteRows "C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb\Address\RoadCenterline"</Process>
<Process Date="20191002" Time="140437" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\Append">Append 'Road Centerlines' "Roads\Roads - Local Streets" "Use the Field Map to reconcile schema differences" "centerlineid "Centerline ID" true true false 20 Text 0 0,First,#,Road Centerlines,centerlineid,0,20;rclnguid "NENA Global ID" true true false 254 Text 0 0,First,#,Road Centerlines,rclnguid,0,254;discrpagid "Discrepancy Agency ID" true true false 75 Text 0 0,First,#,Road Centerlines,discrpagid,0,75;rangeprefixleft "Left Address Number Prefix" true true false 15 Text 0 0,First,#,Road Centerlines,rangeprefixleft,0,15;fromleft "Left From Address" true true false 4 Long 0 0,First,#,Road Centerlines,fromleft,-1,-1;toleft "Left To Address" true true false 4 Long 0 0,First,#,Road Centerlines,toleft,-1,-1;parityleft "Parity Left" true true false 1 Text 0 0,First,#,Road Centerlines,parityleft,0,1;rangeprefixright "Right Address Number Prefix" true true false 15 Text 0 0,First,#,Road Centerlines,rangeprefixright,0,15;fromright "Right From Address" true true false 4 Long 0 0,First,#,Road Centerlines,fromright,-1,-1;toright "Right To Address" true true false 4 Long 0 0,First,#,Road Centerlines,toright,-1,-1;parityright "Parity Right" true true false 1 Text 0 0,First,#,Road Centerlines,parityright,0,1;fullname "Full Road Name" true true false 300 Text 0 0,First,#,Road Centerlines,fullname,0,300;ctyroute "County Route" true true false 10 Text 0 0,First,#,Road Centerlines,ctyroute,0,10;onewaydir "One Way Indicator" true true false 10 Text 0 0,First,#,Road Centerlines,onewaydir,0,10;roadlevel "Above or Below Grade" true true false 4 Long 0 0,First,#,Road Centerlines,roadlevel,-1,-1;inwater "In Water" true true false 5 Text 0 0,First,#,Road Centerlines,inwater,0,5;roadclass "Road Class" true true false 20 Text 0 0,First,#,Road Centerlines,roadclass,0,20;countryleft "Country on Left" true true false 2 Text 0 0,First,#,Road Centerlines,countryleft,0,2;countryright "Country on Right" true true false 2 Text 0 0,First,#,Road Centerlines,countryright,0,2;stateleft "State on Left" true true false 2 Text 0 0,First,#,Road Centerlines,stateleft,0,2;stateright "State on Right" true true false 2 Text 0 0,First,#,Road Centerlines,stateright,0,2;countyleft "County on Left" true true false 40 Text 0 0,First,#,Road Centerlines,countyleft,0,40;countyright "County on Right" true true false 40 Text 0 0,First,#,Road Centerlines,countyright,0,40;munileft "Municipality on Left" true true false 100 Text 0 0,First,#,Road Centerlines,munileft,0,100;muniright "Municipality on Right" true true false 100 Text 0 0,First,#,Road Centerlines,muniright,0,100;zipleft "Zip on Left" true true false 5 Text 0 0,First,#,Road Centerlines,zipleft,0,5;zipright "Zip on Right" true true false 5 Text 0 0,First,#,Road Centerlines,zipright,0,5;msagleft "MSAG on Left" true true false 35 Text 0 0,First,#,Road Centerlines,msagleft,0,35;msagright "MSAG on Right" true true false 35 Text 0 0,First,#,Road Centerlines,msagright,0,35;esnleft "ESN on Left" true true false 5 Text 0 0,First,#,Road Centerlines,esnleft,0,5;esnright "ESN on Right" true true false 5 Text 0 0,First,#,Road Centerlines,esnright,0,5;GlobalID "GlobalID" false false true 38 GlobalID 0 0,First,#" # #</Process>
<Process Date="20191002" Time="140553" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191022" Time="141154" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This will calculate the full road name for the steet alias table by concatenating several other field values // Get the full name of the road. If it is null return the fullname
var fullname = $feature.fullname;
if (fullname == null) return fullname;
// Search the master street name table for a row matching the fullname.
// If there is no matching record raise an error preventing the edit
// Otherwise return the fullname
var masterStreetNames = Filter(FeatureSetByName($datastore, "MasterStreetName"), "fullname = '" + fullname + "'");
if (Count(masterStreetNames) == 0) {
    return {
        "errorMessage": "Full Road Name is invalid, must be defined in the Master Street Name table."
    }
}
return fullname;&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191022" Time="141344" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the full road name for the steet alias table by concatenating several other field values // Get the full name of the road. If it is null return the fullname
var fullname = $feature.fullname;
if (fullname == null) return fullname;
// Search the master street name table for a row matching the fullname.
// If there is no matching record raise an error preventing the edit
// Otherwise return the fullname
var masterStreetNames = Filter(FeatureSetByName($datastore, "MasterStreetName"), "fullname = '" + fullname + "'");
if (Count(masterStreetNames) == 0) {
 return {
  "errorMessage": "Full Road Name is invalid, must be defined in the Master Street Name table."
 }
}
return fullname;&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191022" Time="162825" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        adds[Count(adds)] = {
             'attributes': {'centerlineid' : newId, 'roadclass' : road.roadclass, 'fullname' : road.fullname,
                            'fromright' : newToFromRight[1], 'fromleft' : newToFromLeft[1], 'toright' : toRight, 'toleft' : toLeft
             },
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="093759" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var attributes = Dictionary(Text(road))['attributes'];
        attributes['fromright'] = newToFromRight[1];
        attributes['fromleft'] = newToFromLeft[1];
        adds[Count(adds)] = {
             'attributes': attributes,
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="095132" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (Lower(k) == "globalid") {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
                adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="095555" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid"], Lower(k)) == -1) {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
                adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="095713" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid"], Lower(k)) &amp;gt; -1) {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
                adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="095805" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid", "shape_length", "shape_area"], Lower(k)) &amp;gt; -1) {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
                adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find the all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': {'centerlineid' : newId, 'roadpredir' : roadNameAlias.roadpredir, 'roadname' : roadNameAlias.roadname, 'roadtype' : roadNameAlias.roadtype,}
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="105812" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid", "shape_length", "shape_area"], Lower(k)) &amp;gt; -1) {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
                adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
            var newAttributes = {};
            for(var k in featureAttributes) {
                if (IndexOf(["globalid", "objectid"], Lower(k)) &amp;gt; -1) {
                    continue;
                }
                else {
                    newAttributes[k] = featureAttributes[k];
                }
            }
            newAttributes['centerlineid'] = newId
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': newAttributes
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191029" Time="110208" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
        var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
        var val = percent * range;
    var newVal = 0;
        if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
        if (newVal == range) newVal -= 2;
        if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if ($feature.centerlineid != null) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
        // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
        var validCut = true;
    var geometries = []
        // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
                // Handle multipart geometries
        var allParts  = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts )
        {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
                // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
            var firstGeometry = null;
        var secondGeomArray = [];            var firstPoint = Geometry(road).paths[0][0];
                // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            }
            else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
                // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
                // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
                // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright' : newToFromRight[0], 'toleft' : newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for(var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid", "shape_length", "shape_area"], Lower(k)) &amp;gt; -1) {
                continue;
            }
            else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            }
            else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            }
            else {
                newAttributes[k] = featureAttributes[k];
            }
        }
        newAttributes['centerlineid'] = newId;
        adds[Count(adds)] = {
             'attributes': newAttributes,
             'geometry': secondGeometry
        }
                // Find all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
            var newAttributes = {};
            for(var k in featureAttributes) {
                if (IndexOf(["globalid", "objectid"], Lower(k)) &amp;gt; -1) {
                    continue;
                }
                else {
                    newAttributes[k] = featureAttributes[k];
                }
            }
            newAttributes['centerlineid'] = newId
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': newAttributes
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {     'result' : id,
    'edit' : [{'className': 'RoadCenterline', 'adds' : adds, 'updates' : updates},               {'className': 'AliasStreetName', 'adds': nameAliasAdds}]     };
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191031" Time="150413" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road is created and splits any intersecting roads
// All intersecting roads will be split at their intersection and the address ranges will be updated to reflect where the split occured.
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the id of the road is not null return the id
// This prevents the rule from being processed on new roads created as a result of the split
if (IsEmpty($feature.centerlineid) == false) return $feature.centerlineid;
// Create a new id for the road and get the object id and geometry from the road
var id = "RD-" + NextSequenceValue("CenterlineID");
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
var nameAliasAdds = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i], 'feet') == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright': newToFromRight[0], 'toleft': newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Create a new id for a road
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var newId = "RD-" + NextSequenceValue("CenterlineID");
        var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(["globalid", "objectid", "shape_length", "shape_area"], Lower(k)) &amp;gt; -1) {
                continue;
            } else if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else {
                newAttributes[k] = featureAttributes[k];
            }
        }
        newAttributes['centerlineid'] = newId;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
        // Find all the related road alias names for the intersecting road
        // Store an add for every road alias and related it to the new road that was added after the cut
        var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + road.centerlineid + "'");
        for (var roadNameAlias in roadNameAliases) {
            var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
            var newAttributes = {};
            for (var k in featureAttributes) {
                if (IndexOf(["globalid", "objectid"], Lower(k)) &amp;gt; -1) {
                    continue;
                } else {
                    newAttributes[k] = featureAttributes[k];
                }
            }
            newAttributes['centerlineid'] = newId
            nameAliasAdds[Count(nameAliasAdds)] = {
                'attributes': newAttributes
            }
        }
    }
}
// Return the new id of the road
// Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates},
        {'className': 'AliasStreetName', 'adds': nameAliasAdds}]
};
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Validate Full Road Name&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This constraint rule will ensure the full name exist in the master street name table
// Get the full name of the road. If it is null return the fullname
var fullname = $feature.fullname;
if (IsEmpty(fullname)) return fullname;
// Search the master street name table for a row matching the fullname.
// If there is no matching record raise an error preventing the edit
var masterStreetNames = Filter(FeatureSetByName($datastore, "MasterStreetName"), "fullname = '" + fullname + "'");
if (Count(masterStreetNames) == 0) {
    return {
        "errorMessage": "Full Road Name is invalid, must be defined in the Master Street Name table."
    }
}
return true;&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;False&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191111" Time="094715" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Users\scot6032\Documents\Demos and Prototypes\AddressDataManagement\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AssignDefaultToField&gt;&lt;field_name&gt;countryleft&lt;/field_name&gt;&lt;default_value&gt;&lt;/default_value&gt;&lt;/AssignDefaultToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDefaultToField&gt;&lt;field_name&gt;countryright&lt;/field_name&gt;&lt;default_value&gt;&lt;/default_value&gt;&lt;/AssignDefaultToField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20191115" Time="140336" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Users\scot6032\Documents\Demos and Prototypes\AddressDataManagement\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;domain_name&gt;RoadNameIndex&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20191119" Time="153500" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\ImportAttributeRules">ImportAttributeRules "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management Z.gdb\Address\RoadCenterline" "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Rules\RoadCenterline.CSV"</Process>
<Process Date="20191119" Time="154811" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\Append">Append 'C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management Sample.gdb\Address\RoadCenterline' "Roads\Local Streets" "Input schema must match target schema" # # #</Process>
<Process Date="20191120" Time="131853" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management Sample.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left).js&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will calculate the Left To Address using the Left From Address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;toleft&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Logical Block Addressing (Left).js&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left).js&lt;/rule_name&gt;&lt;evaluation_order&gt;3&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191120" Time="132117" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management Sample.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will calculate the Right To Address using the Right From Address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Right From Address is empty or the Right To Address is not empty return the Right To Address var fromRight = $feature.fromRight;
var toRight = $feature.toRight;
if (IsEmpty(fromRight) || !IsEmpty(toRight)) return toRight;
// Return the new Right To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromRight;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;toright&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;evaluation_order&gt;4&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191120" Time="132134" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management Sample.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left).js&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DeleteAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191120" Time="132241" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management Sample.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will calculate the Left To Address using the Left From Address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;field_name&gt;toleft&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;evaluation_order&gt;3&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191126" Time="130834" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Editing Tools.tbx\FlipLine">FlipLine "Roads\Local Streets"</Process>
<Process Date="20191126" Time="130834" ToolSource="C:\Solutions\Tasks\January2020\Address Data Management\Data Reviewer\Address Data Management\AddressTools.pyt\FlipRoads">FlipRoads "Roads\Local Streets" true fromright fromleft toright toleft</Process>
<Process Date="20191127" Time="120151" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Data Reviewer\Address Data Management\Address Data Management Sample.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright': newToFromRight[0], 'toleft': newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191127" Time="120507" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Data Reviewer\Address Data Management\Address Data Management Sample.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright': newToFromRight[0], 'toleft': newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Street Aliases&lt;/rule_name&gt;&lt;rule_description&gt;Create a new unique id when a road centerline is created and copy related street alias names from split roads.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related street alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the street name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias street names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasStreetName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_description&gt;Calculate the left to address using the left from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the left to address using the left from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_description&gt;Calculate the right to address using the right from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the right to address using the right from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Right From Address is empty or the Right To Address is not empty return the Right To Address var fromRight = $feature.fromRight;
var toRight = $feature.toRight;
if (IsEmpty(fromRight) || !IsEmpty(toRight)) return toRight;
// Return the new Right To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromRight;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191127" Time="120553" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.5.0'&gt;&lt;FeatureDataset&gt;Address&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;DATABASE=C:\Solutions\Tasks\January2020\Address Data Management\Data Reviewer\Address Data Management\Address Data Management Sample.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value         updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': {'toright': newToFromRight[0], 'toleft': newToFromLeft[0]},
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright") {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft") {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Street Aliases&lt;/rule_name&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related street alias names from split roads.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related street alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the street name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias street names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasStreetName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_description&gt;Calculates the left to address using the left from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the left to address using the left from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_description&gt;Calculates the right to address using the right from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the right to address using the right from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid optons are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Right From Address is empty or the Right To Address is not empty return the Right To Address var fromRight = $feature.fromRight;
var toRight = $feature.toRight;
if (IsEmpty(fromRight) || !IsEmpty(toRight)) return toRight;
// Return the new Right To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromRight;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191127" Name="Delete Rows" Time="121318" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\DeleteRows">DeleteRows "C:\Solutions\Tasks\January2020\Address Data Management\Data Reviewer\Address Data Management\Address Data Management 2.gdb\Address\RoadCenterline"</Process>
<Process Date="20191203" Time="172009" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191203" Time="172032" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Street Aliases&lt;/rule_name&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related street alias names from split roads.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related street alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the street name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias street names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasStreetName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasStreetName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191203" Time="173211" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Sample Data\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191211" Time="111058" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Street Aliases&lt;/rule_name&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related road alias names from split roads.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related road alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the road name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias road names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasRoadName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasRoadName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191211" Time="111500" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related road alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the road name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias road names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasRoadName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasRoadName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related road alias names from split roads.&lt;/rule_description&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;evaluation_order&gt;5&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191211" Time="111511" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Street Aliases&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DeleteAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191211" Time="111519" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related road alias names from split roads.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related road alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the road name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias road names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasRoadName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasRoadName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;category&gt;-1&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;evaluation_order&gt;2&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20191212" Time="144936" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "C:\Solutions\Tasks\January2020\Address Data Management\Project\Address Data Management\Address Data Management.gdb\Address\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_description&gt;Calculates the left to address using the left from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the left to address using the left from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid options are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_description&gt;Calculates the right to address using the right from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will calculate the right to address using the right from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid options are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Right From Address is empty or the Right To Address is not empty return the Right To Address var fromRight = $feature.fromRight;
var toRight = $feature.toRight;
if (IsEmpty(fromRight) || !IsEmpty(toRight)) return toRight;
// Return the new Right To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromRight;
&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20210512" Name="Define Projection" Time="152144" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\DefineProjection">DefineProjection "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" PROJCS['NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US',GEOGCS['GCS_NAD_1983_CORS96',DATUM['D_NAD_1983_CORS96',SPHEROID['GRS_1980',6378137.0,298.257222101]],PRIMEM['Greenwich',0.0],UNIT['Degree',0.0174532925199433]],PROJECTION['Lambert_Conformal_Conic'],PARAMETER['False_Easting',1968500.0],PARAMETER['False_Northing',0.0],PARAMETER['Central_Meridian',-98.0],PARAMETER['Standard_Parallel_1',33.93333333333333],PARAMETER['Standard_Parallel_2',35.23333333333333],PARAMETER['Latitude_Of_Origin',33.33333333333334],UNIT['Foot_US',0.3048006096012192]]</Process>
<Process Date="20210526" Time="130241" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\AddIndex">AddIndex ROADS_ALL discrpagid Agency NON_UNIQUE ASCENDING</Process>
<Process Date="20210803" Time="114418" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.8.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Road_Dist&lt;/field_name&gt;&lt;field_type&gt;DOUBLE&lt;/field_type&gt;&lt;field_alias&gt;Road Distance&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20210803" Time="114539" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateGeometryAttributes">CalculateGeometryAttributes "Road Centerlines" "Road_Dist LENGTH" "Feet (United States)" # PROJCS["NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US",GEOGCS["GCS_NAD_1983_CORS96",DATUM["D_NAD_1983_CORS96",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-98.0],PARAMETER["Standard_Parallel_1",33.93333333333333],PARAMETER["Standard_Parallel_2",35.23333333333333],PARAMETER["Latitude_Of_Origin",33.33333333333334],UNIT["Foot_US",0.3048006096012192]] "Same as input"</Process>
<Process Date="20220208" Time="085340" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220208" Time="091041" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220208" Time="093827" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow /&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220228" Time="084819" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Snow_Rt&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Snow Route&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;YesNo&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Snow_Rt_Num&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Snow Route Number&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;SnowRouteNumber&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220228" Time="090215" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="090241" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "Route 1" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="090354" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "1" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="090753" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="090812" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "1" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091053" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091109" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "1" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091312" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "2" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091353" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091408" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "2" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091607" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091626" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "3" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091711" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091729" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "3" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091906" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="091922" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "3" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092509" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092523" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "4" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092609" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092622" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "4" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092829" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="092850" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "4" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093008" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "5" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093207" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093223" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "5" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093309" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093322" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "5" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093430" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093445" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "6" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093549" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093743" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "6" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="093955" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094009" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "6" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094200" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094217" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "7" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094332" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094348" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "8" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094725" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094740" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "9" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094854" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="094914" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "9" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095121" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095136" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "10" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095335" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095413" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "11" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095601" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095614" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "11" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095747" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="095802" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "12" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100005" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100023" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "13" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100122" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100143" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "14" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100237" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100253" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "15" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100355" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="100414" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "16" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="103115" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220228" Time="103229" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220228" Time="103730" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt "Yes" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="103748" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Num "5" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="151456" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Snow_Rt_Prior&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Snow Router Priorty&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Snow Rt Priority&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220228" Time="151557" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Prior "1" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="151755" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Prior "2" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220228" Time="151838" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Snow_Rt_Prior "3" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220301" Time="124413" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220302" Time="110859" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Snow_Rt_Hill&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Snow Route Hill&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;YesNo&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Snow_Rt_Hill_Num&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Snow Route Hill Number&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Snow Route Hill Numbers&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220303" Time="125212" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\AddRelate">AddRelate "Road Centerlines" discrpagid IMS AGENCY_ID Relate1 "One to one"</Process>
<Process Date="20220303" Time="125334" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\RemoveRelate">RemoveRelate "Road Centerlines" #</Process>
<Process Date="20220303" Time="161634" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Rd_Status&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Road Status&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Road Status&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220314" Time="110720" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateGeometryAttributes">CalculateGeometryAttributes "Road Centerlines" "Road_Dist LENGTH" "Feet (United States)" # PROJCS["NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US",GEOGCS["GCS_NAD_1983_CORS96",DATUM["D_NAD_1983_CORS96",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-98.0],PARAMETER["Standard_Parallel_1",33.93333333333333],PARAMETER["Standard_Parallel_2",35.23333333333333],PARAMETER["Latitude_Of_Origin",33.33333333333334],UNIT["Foot_US",0.3048006096012192]] "Same as input"</Process>
<Process Date="20220317" Time="083611" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" countryleft 'US' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="083650" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" countryright 'US' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="083756" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" stateleft 'OK' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="083837" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" stateright 'OK' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="083924" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" countyleft 'Pottawatomie' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="084025" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" countyright 'Pottawatomie' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="084121" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" munileft 'Shawnee' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="084213" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" muniright 'Shawnee' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="085027" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" zipleft '74804' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="085316" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" zipright '74804' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="085459" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" zipleft '74801' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="085538" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" zipright '74801' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="085716" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" discrpagid 'psap.5730.ok.gov' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220317" Time="103718" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;field_type&gt;DOUBLE&lt;/field_type&gt;&lt;field_alias&gt;Speed Limit&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220317" Time="103749" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;/DeleteField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220317" Time="103844" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Speed Limit&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Speed Limit&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220317" Time="103857" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;3&lt;/field_length&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220317" Time="103919" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;DeleteField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;/DeleteField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220317" Time="103945" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;3&lt;/field_length&gt;&lt;field_alias&gt;Speed Limit&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Speed Limit&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220317" Time="131935" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;rclnguid&lt;/field_name&gt;&lt;new_field_name&gt;NGUID_RDCL&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;discrpagid&lt;/field_name&gt;&lt;new_field_name&gt;DiscrpAgID&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;new_field_name&gt;Street&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;countryleft&lt;/field_name&gt;&lt;new_field_name&gt;Country_L&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;countryright&lt;/field_name&gt;&lt;new_field_name&gt;Country_R&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;stateleft&lt;/field_name&gt;&lt;new_field_name&gt;State_L&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;stateright&lt;/field_name&gt;&lt;new_field_name&gt;State_R&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;countyleft&lt;/field_name&gt;&lt;new_field_name&gt;County_L&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;countyright&lt;/field_name&gt;&lt;new_field_name&gt;County_R&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;munileft&lt;/field_name&gt;&lt;new_field_name&gt;City_L&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;muniright&lt;/field_name&gt;&lt;new_field_name&gt;City_R&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;zipleft&lt;/field_name&gt;&lt;new_field_name&gt;Zipcode_L&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;zipright&lt;/field_name&gt;&lt;new_field_name&gt;Zipcode_R&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220321" Time="151704" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterField&gt;&lt;field_name&gt;Street&lt;/field_name&gt;&lt;new_field_name&gt;fullname&lt;/new_field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;clear_field_alias&gt;False&lt;/clear_field_alias&gt;&lt;/AlterField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220322" Time="093637" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" fullname 'E Main St' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220322" Time="132258" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField RoadCenterline NGUID_RDCL "'Road_Centerline' + $feature.centerlineid + $feature.discrpagid" Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220322" Time="132335" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField RoadCenterline NGUID_RDCL "'Road_Centerline_' + $feature.centerlineid + $feature.discrpagid" Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220322" Time="132726" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField RoadCenterline NGUID_RDCL "'Road_Centerline_' + $feature.centerlineid + '@' + $feature.discrpagid" Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220323" Time="071036" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Roads\Collectors and Arterials" esnleft '1261' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220323" Time="071452" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Roads\Local Streets" esnleft '1261' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220323" Time="071543" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Roads\Local Streets" esnright '1261' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220323" Time="071647" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Roads\Collectors and Arterials" esnright '1261' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220405" Time="110207" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220405" Time="110317" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;DisableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/DisableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220405" Time="110409" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220405" Time="110504" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AlterAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;category&gt;4294967295&lt;/category&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;/AlterAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220405" Time="110527" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;EnableAttributeRules&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;/EnableAttributeRules&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220405" Time="132546" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" msagleft 'SHAWOK' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220405" Time="132617" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" msagright 'SHAWOK' Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220405" Time="134222" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" NGUID_RDCL "'Road_Centerline_' + $feature.centerlineid + $feature.discrpagid" Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220405" Time="134344" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" NGUID_RDCL "'Road_Centerline_' + $feature.centerlineid + '@' + $feature.discrpagid" Arcade # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220602" Time="131903" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Rd_Status 'Active' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20220602" Time="141351" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Rd_Stat_Desc&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;350&lt;/field_length&gt;&lt;field_alias&gt;Road Status Description&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220602" Time="154206" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMStandardDataConnection xsi:type='typens:CIMStandardDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/2.9.0'&gt;&lt;WorkspaceConnectionString&gt;DATABASE=N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;FileGDB&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMStandardDataConnection&gt;" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddField&gt;&lt;field_name&gt;Reduced_Sp&lt;/field_name&gt;&lt;field_type&gt;TEXT&lt;/field_type&gt;&lt;field_length&gt;255&lt;/field_length&gt;&lt;field_alias&gt;Reduced_Speed&lt;/field_alias&gt;&lt;field_is_nullable&gt;True&lt;/field_is_nullable&gt;&lt;field_is_required&gt;False&lt;/field_is_required&gt;&lt;field_domain&gt;Speed Limit&lt;/field_domain&gt;&lt;/AddField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220830" Time="102758" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CopyFeatures">CopyFeatures "N:\GIS\_ARCGIS TOOLS\Address Data Management\Address Data Management.gdb\RoadCenterline" "N:\GIS\!MAPS\.APRX Files (ArcGIS Pro)\ArcCatalog\ESQL.sde\COSGISNEWDB.SDE.NENA_911\COSGISNEWDB.SDE.RoadCenterline" # # # #</Process>
<Process Date="20220830" Time="104041" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\!MAPS\.APRX Files (ArcGIS Pro)\ArcCatalog\ESQL.sde\COSGISNEWDB.SDE.NENA_911\COSGISNEWDB.SDE.RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will split intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured
//Define any fields to be copied from the centerline when split (lower case)
var centerline_field_names = ["rclnguid", "discrpagid", "rangeprefixleft", "fromleft", "toleft", "parityleft", "rangeprefixright", "fromright", "toright", "parityright", "fullname", "fedroute", "fedrtetype", "afedrte", "afedrtetype", "stroute", "strtetype", "astrte", "astrtetype", "ctyroute", "onewaydir", "roadlevel", "inwater", "roadclass", "countryleft", "countryright", "stateleft", "stateright", "countyleft", "countyright","munileft", "muniright", "zipleft", "zipright", "msagleft", "msagright", "esnleft", "esnright"]
// This function calculates a new from and to address based on the percentage along the line the split occurs
function newToFrom(from, to, percent) {
    if (from == null || to == null) return [null, null];
    var range = Abs(to - from);
    if (range &amp;lt; 2) return [from, to];
    var val = percent * range;
    var newVal = 0;
    if ((Floor(val) % 2) == 0) newVal = Floor(val);
    else if ((Ceil(val) % 2) == 0) newVal = Ceil(val);
    else newVal = Floor(val) - 1;
    if (newVal == range) newVal -= 2;
    if (from &amp;gt; to) return [from - newVal, from - newVal - 2];
    else return [from + newVal, from + newVal + 2];
}
// If the road was created from a split its id will have a prefix of '::'
// Don't process any futher splits to prevent getting in an infinite loop
var id = $feature.centerlineid;
if (Left(id, 2) == "::") return id;
// Get the object id, centerline id and geometry from the road
var oid = $feature.OBJECTID;
var geom = Geometry($feature);
// Get all the intersecting roads
var intersectingRoads = Intersects(FeatureSetByName($datastore, "RoadCenterline"), geom);
var adds = [];
var updates = [];
// Loop through each intersecting road
for (var road in intersectingRoads) {
    // Continue to the next road if the intersecting road is the same or geometry is the same
    if (oid == road.OBJECTID || Equals(geom, road)) continue;
    // Cut the intersecting road and continue if the result of the cut is 0 features
    var newRoads = Cut(road, geom);
    if (Count(newRoads) == 0) continue;
    var validCut = true;
    var geometries = []
    // Loop through collection of lines and check that it was a valid cut in the middle of a segment
    for (var i in newRoads) {
        if (newRoads[i] == null || Length(newRoads[i]) == 0) {
            validCut = false;
            continue;
        }
        // Handle multipart geometries
        var allParts = MultiPartToSinglePart(newRoads[i]);
        for (var p in allParts) {
            geometries[Count(geometries)] = allParts[p];
        }
    }
    // Process the cut if valid
    if (validCut) {
        // Get the address range of the intersecting road
        var fromRight = road.fromright;
        var toRight = road.toright;
        var fromLeft = road.fromleft;
        var toLeft = road.toleft;
        var firstGeometry = null;
        var secondGeomArray = [];
        var firstPoint = Geometry(road).paths[0][0];
        // Loop through each geometry in the cut
        // Store the geometry including the first vertex of the orginal road as the first geometry
        // Collect all other geometries in an array
        for (var i in geometries) {
            if (Equals(firstPoint, geometries[i].paths[0][0])) {
                firstGeometry = geometries[i];
            } else {
                secondGeomArray[Count(secondGeomArray)] = geometries[i];
            }
        }
        // Merge all other geometries as the second geometry
        var secondGeometry = Union(secondGeomArray);
        // Calculate the new address ranges based on the intersection location along the line
        var geometryPercent = Length(firstGeometry, 'feet') / (Length(firstGeometry, 'feet') + Length(secondGeometry, 'feet'));
        var newToFromLeft = newToFrom(fromLeft, toLeft, geometryPercent)
        var newToFromRight = newToFrom(fromRight, toRight, geometryPercent)
        // Store an update for the intersecting road with the first geometry from the cut and the new right to and left to value   var attributes = {}
  if (newToFromRight[0] != null) attributes['toright'] = newToFromRight[0];
  if (newToFromLeft[0] != null) attributes['toleft'] = newToFromLeft[0];
        updates[Count(updates)] = {
            'objectID': road.OBJECTID,
            'attributes': attributes,
            'geometry': firstGeometry
        }
        // Store an add for a new road with the second geometry from the cut and the new right from and left from value         var featureAttributes = Dictionary(Text(road))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (Lower(k) == "fromright" &amp;amp;&amp;amp; newToFromRight[1] != null) {
                newAttributes['fromright'] = newToFromRight[1];
            } else if (Lower(k) == "fromleft" &amp;amp;&amp;amp; newToFromLeft[1] != null) {
                newAttributes['fromleft'] = newToFromLeft[1];
            } else if (IndexOf(centerline_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
    continue;
   }
        }
  // Store a reference to the original id of the road for the split
        newAttributes['centerlineid'] = "::" + road.centerlineid;
        adds[Count(adds)] = {
            'attributes': newAttributes,
            'geometry': secondGeometry
        }
    }
}
// Return the original road centerline id
// Using the edit parameter return the list of updates and adds for the split roads
return {
    'result': id,
    'edit': [{'className': 'RoadCenterline', 'adds': adds, 'updates': updates}]
};&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;rule_description&gt;Splits intersecting roads at their intersection and the address ranges will be updated to reflect where the split occured.&lt;/rule_description&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Split Intersecting Road&lt;/rule_name&gt;&lt;evaluation_order&gt;1&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220830" Time="104113" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\!MAPS\.APRX Files (ArcGIS Pro)\ArcCatalog\ESQL.sde\COSGISNEWDB.SDE.NENA_911\COSGISNEWDB.SDE.RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will create a new unique id when a road centerline is created
// This will also copy related road alias names for any roads that were added as a result of a split
// Define the leading text and the delimiter for the ID
var prefix = "RD"
var join_char = "-"
// Define any fields to be copied from the road name aliases table (lower case)
var alias_field_names = ["roadpremod", "roadpredir", "roadpretype", "roadpretypesep", "roadname", "roadtype", "roadpostdir", "roadpostmod", "fullname", "municipality"]
// If the road was created from a split its oirginal id will have a prefix of '::'
// We will use this to find the original road and its related alias road names
if (Left($feature.centerlineid, 2) == "::" || IsEmpty($feature.centerlineid)) {
    var id = Concatenate([prefix, NextSequenceValue("CenterlineID")], join_char)
        // If the centerlineid is not set return the new id
    if (IsEmpty($feature.centerlineid)) return id;
       // Find the original ID of the road that was split
    var original_id = Mid($feature.centerlineid, 2, Count($feature.centerlineid) - 2);
    if (IsEmpty(original_id)) return id;
        // Find all the related road alias names for the split road
    // Store an add for every road alias and related it to the new road that was added after the cut
    var adds = []
    var roadNameAliases = Filter(FeatureSetByName($datastore, "AliasRoadName"), "centerlineid = '" + original_id + "'");
    for (var roadNameAlias in roadNameAliases) {
        var featureAttributes = Dictionary(Text(roadNameAlias))['attributes'];
        var newAttributes = {};
        for (var k in featureAttributes) {
            if (IndexOf(alias_field_names, Lower(k)) &amp;gt; -1 &amp;amp;&amp;amp; featureAttributes[k] != null) {
                newAttributes[k] = featureAttributes[k];
            } else {
                continue;
            }
        }
        newAttributes['centerlineid'] = id
        adds[Count(adds)] = {
            'attributes': newAttributes
        }
    }
        // Using the edit parameter return the list of updates and adds for the intersecting roads and a list of adds for related road alias names
    return {
        'result': id,
        'edit': [{'className': 'AliasRoadName', 'adds': adds}]
    };
}
else {
   return $feature.centerlineid
}&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;False&lt;/triggering_events_update&gt;&lt;rule_description&gt;Creates a new unique id when a road centerline is created and copy related road alias names from split roads.&lt;/rule_description&gt;&lt;field_name&gt;centerlineid&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;True&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Centerline ID and Copy Road Aliases&lt;/rule_name&gt;&lt;evaluation_order&gt;2&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220830" Time="104223" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\!MAPS\.APRX Files (ArcGIS Pro)\ArcCatalog\ESQL.sde\COSGISNEWDB.SDE.NENA_911\COSGISNEWDB.SDE.RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will calculate the left to address using the left from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid options are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Left From Address is empty or the Left To Address is not empty return the Left To Address var fromLeft = $feature.fromleft;
var toLeft = $feature.toleft;
if (IsEmpty(fromLeft) || !IsEmpty(toLeft)) return toLeft;
// Return the new Left To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromLeft;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;rule_description&gt;Calculates the left to address using the left from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;field_name&gt;toleft&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Left)&lt;/rule_name&gt;&lt;evaluation_order&gt;3&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220830" Time="104320" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\Toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "N:\GIS\!MAPS\.APRX Files (ArcGIS Pro)\ArcCatalog\ESQL.sde\COSGISNEWDB.SDE.NENA_911\COSGISNEWDB.SDE.RoadCenterline" "&lt;operationSequence&gt;&lt;workflow&gt;&lt;AddAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;rule_type&gt;CALCULATION&lt;/rule_type&gt;&lt;expression&gt;// This rule will calculate the right to address using the right from address, the length of the road and an interval or distance between unique addresses
// Specify the interval or distance between unique addresses
var addressIntervalDistance = 10;
// Specify the unity of measure. Valid options are feet, meters, yards, miles, kilometers
var unit = "feet";
// If the Right From Address is empty or the Right To Address is not empty return the Right To Address var fromRight = $feature.fromRight;
var toRight = $feature.toRight;
if (IsEmpty(fromRight) || !IsEmpty(toRight)) return toRight;
// Return the new Right To Address
var featureLength = Length($feature, unit);
return Ceil(featureLength/addressIntervalDistance) * 2 + fromRight;
&lt;/expression&gt;&lt;is_editable&gt;True&lt;/is_editable&gt;&lt;triggering_events_insert&gt;True&lt;/triggering_events_insert&gt;&lt;triggering_events_delete&gt;False&lt;/triggering_events_delete&gt;&lt;triggering_events_update&gt;True&lt;/triggering_events_update&gt;&lt;rule_description&gt;Calculates the right to address using the right from address, the length of the road and an interval or distance between unique addresses.&lt;/rule_description&gt;&lt;field_name&gt;toright&lt;/field_name&gt;&lt;exclude_from_client_eval&gt;False&lt;/exclude_from_client_eval&gt;&lt;batch&gt;False&lt;/batch&gt;&lt;severity&gt;-1&lt;/severity&gt;&lt;category&gt;-1&lt;/category&gt;&lt;/AddAttributeRule&gt;&lt;ReorderAttributeRule&gt;&lt;rule_name&gt;Logical Block Addressing (Right)&lt;/rule_name&gt;&lt;evaluation_order&gt;4&lt;/evaluation_order&gt;&lt;/ReorderAttributeRule&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;"</Process>
<Process Date="20220901" Time="143931" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/3.0.0'&gt;&lt;FeatureDataset&gt;COSGISNEWDB.SDE.NENA_911&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;ENCRYPTED_PASSWORD_UTF8=00022e687935696b725731552b522f654179416d7462413346646d79324a624d3050496942696d354d786148704f383d2a00;ENCRYPTED_PASSWORD=00022e687257766e3843586a4b4e624d4b54694d74464147323732486d2f75554131586b697466366e517132496b6b3d2a00;SERVER=ESQL;INSTANCE=sde:sqlserver:ESQL;DBCLIENT=sqlserver;DB_CONNECTION_PROPERTIES=ESQL;DATABASE=COSGISNEWDB;USER=sde;VERSION=sde.DEFAULT;AUTHENTICATION_MODE=DBMS&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;SDE&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;COSGISNEWDB.SDE.RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;parityleft&lt;/field_name&gt;&lt;domain_name&gt;AddressParity&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;parityright&lt;/field_name&gt;&lt;domain_name&gt;AddressParity&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;fullname&lt;/field_name&gt;&lt;domain_name&gt;RoadNameIndex&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;fedrtetype&lt;/field_name&gt;&lt;domain_name&gt;RouteType&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;afedrtetype&lt;/field_name&gt;&lt;domain_name&gt;RouteType&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;strtetype&lt;/field_name&gt;&lt;domain_name&gt;RouteType&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;onewaydir&lt;/field_name&gt;&lt;domain_name&gt;OneWayIndicator&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;roadlevel&lt;/field_name&gt;&lt;domain_name&gt;GradeLevel&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;inwater&lt;/field_name&gt;&lt;domain_name&gt;YesNo&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;roadclass&lt;/field_name&gt;&lt;domain_name&gt;RoadClass&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;State_L&lt;/field_name&gt;&lt;domain_name&gt;StateAbbreviation&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;State_R&lt;/field_name&gt;&lt;domain_name&gt;StateAbbreviation&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20220901" Time="144136" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\UpdateSchema">UpdateSchema "CIMDATA=&lt;CIMFeatureDatasetDataConnection xsi:type='typens:CIMFeatureDatasetDataConnection' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/3.0.0'&gt;&lt;FeatureDataset&gt;COSGISNEWDB.SDE.NENA_911&lt;/FeatureDataset&gt;&lt;WorkspaceConnectionString&gt;ENCRYPTED_PASSWORD_UTF8=00022e687935696b725731552b522f654179416d7462413346646d79324a624d3050496942696d354d786148704f383d2a00;ENCRYPTED_PASSWORD=00022e686a6e4b3235674f7063354a75727773577065555a576b496a52776439517a7136305453683479344b6957493d2a00;SERVER=ESQL;INSTANCE=sde:sqlserver:ESQL;DBCLIENT=sqlserver;DB_CONNECTION_PROPERTIES=ESQL;DATABASE=COSGISNEWDB;USER=sde;VERSION=sde.DEFAULT;AUTHENTICATION_MODE=DBMS&lt;/WorkspaceConnectionString&gt;&lt;WorkspaceFactory&gt;SDE&lt;/WorkspaceFactory&gt;&lt;Dataset&gt;COSGISNEWDB.SDE.RoadCenterline&lt;/Dataset&gt;&lt;DatasetType&gt;esriDTFeatureClass&lt;/DatasetType&gt;&lt;/CIMFeatureDatasetDataConnection&gt;" &lt;operationSequence&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;Rd_Status&lt;/field_name&gt;&lt;domain_name&gt;RoadStatus&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;Speed_Limit&lt;/field_name&gt;&lt;domain_name&gt;SpeedLimit&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;workflow&gt;&lt;AssignDomainToField&gt;&lt;field_name&gt;Reduced_Sp&lt;/field_name&gt;&lt;domain_name&gt;YesNo&lt;/domain_name&gt;&lt;/AssignDomainToField&gt;&lt;/workflow&gt;&lt;/operationSequence&gt;</Process>
<Process Date="20221025" Time="101124" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" NGUID_RDCL "'Road_Centerline_' + !centerlineid! + '@' + !discrpagid!" "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="093946" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" County_L 'Pottawatomie' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="094012" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" County_R 'Pottawatomie' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="094036" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" City_L 'Shawnee' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="094052" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" City_R 'Shawnee' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="094124" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Country_L 'US' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20221027" Time="094139" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField "Road Centerlines" Country_R 'US' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="105434" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Highway' "Python 3" # Text NO_ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="112103" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Highway' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="112327" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Collector' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="112432" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Highway' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="113022" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Collector' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="113201" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Major Arterial' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="113436" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Minor Arterial' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230207" Time="130211" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateField">CalculateField COSGISNEWDB.SDE.RoadCenterline roadclass 'Collector' "Python 3" # Text ENFORCE_DOMAINS</Process>
<Process Date="20230522" Time="084613" ToolSource="c:\program files\arcgis\pro\Resources\ArcToolbox\toolboxes\Data Management Tools.tbx\CalculateGeometryAttributes">CalculateGeometryAttributes "Road Centerlines" "Road_Dist LENGTH" "US Survey Feet" # PROJCS["NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US",GEOGCS["GCS_NAD_1983_CORS96",DATUM["D_NAD_1983_CORS96",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["False_Easting",1968500.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-98.0],PARAMETER["Standard_Parallel_1",33.93333333333333],PARAMETER["Standard_Parallel_2",35.23333333333333],PARAMETER["Latitude_Of_Origin",33.33333333333334],UNIT["Foot_US",0.3048006096012192]] "Same as input"</Process>
</lineage>
<itemProps>
<itemLocation>
<linkage Sync="TRUE">Server=ESQL; Service=sde:sqlserver:ESQL; Database=COSGISNEWDB; User=sde; Version=sde.DEFAULT</linkage>
<protocol Sync="TRUE">ArcSDE Connection</protocol>
</itemLocation>
<itemName Sync="TRUE">COSGISNEWDB.SDE.RoadCenterline</itemName>
<imsContentType Sync="TRUE">002</imsContentType>
</itemProps>
<coordRef>
<type Sync="TRUE">Projected</type>
<geogcsn Sync="TRUE">GCS_NAD_1983_CORS96</geogcsn>
<csUnits Sync="TRUE">Linear Unit: Foot_US (0.304801)</csUnits>
<projcsn Sync="TRUE">NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US</projcsn>
<peXml Sync="TRUE">&lt;ProjectedCoordinateSystem xsi:type='typens:ProjectedCoordinateSystem' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:typens='http://www.esri.com/schemas/ArcGIS/3.0.0'&gt;&lt;WKT&gt;PROJCS[&amp;quot;NAD_1983_CORS96_StatePlane_Oklahoma_South_FIPS_3502_Ft_US&amp;quot;,GEOGCS[&amp;quot;GCS_NAD_1983_CORS96&amp;quot;,DATUM[&amp;quot;D_NAD_1983_CORS96&amp;quot;,SPHEROID[&amp;quot;GRS_1980&amp;quot;,6378137.0,298.257222101]],PRIMEM[&amp;quot;Greenwich&amp;quot;,0.0],UNIT[&amp;quot;Degree&amp;quot;,0.0174532925199433]],PROJECTION[&amp;quot;Lambert_Conformal_Conic&amp;quot;],PARAMETER[&amp;quot;False_Easting&amp;quot;,1968500.0],PARAMETER[&amp;quot;False_Northing&amp;quot;,0.0],PARAMETER[&amp;quot;Central_Meridian&amp;quot;,-98.0],PARAMETER[&amp;quot;Standard_Parallel_1&amp;quot;,33.93333333333333],PARAMETER[&amp;quot;Standard_Parallel_2&amp;quot;,35.23333333333333],PARAMETER[&amp;quot;Latitude_Of_Origin&amp;quot;,33.33333333333334],UNIT[&amp;quot;Foot_US&amp;quot;,0.3048006096012192],AUTHORITY[&amp;quot;Esri&amp;quot;,103513]]&lt;/WKT&gt;&lt;XOrigin&gt;-122314500&lt;/XOrigin&gt;&lt;YOrigin&gt;-93445700&lt;/YOrigin&gt;&lt;XYScale&gt;3048.0060960121928&lt;/XYScale&gt;&lt;ZOrigin&gt;-100000&lt;/ZOrigin&gt;&lt;ZScale&gt;10000&lt;/ZScale&gt;&lt;MOrigin&gt;0&lt;/MOrigin&gt;&lt;MScale&gt;1&lt;/MScale&gt;&lt;XYTolerance&gt;0.0032808333333333331&lt;/XYTolerance&gt;&lt;ZTolerance&gt;0.001&lt;/ZTolerance&gt;&lt;MTolerance&gt;0.001&lt;/MTolerance&gt;&lt;HighPrecision&gt;true&lt;/HighPrecision&gt;&lt;WKID&gt;103513&lt;/WKID&gt;&lt;LatestWKID&gt;103513&lt;/LatestWKID&gt;&lt;/ProjectedCoordinateSystem&gt;</peXml>
</coordRef>
</DataProperties>
<CreaDate>20191127</CreaDate>
<CreaTime>12150600</CreaTime>
<SyncDate>20220830</SyncDate>
<SyncTime>10275700</SyncTime>
<ModDate>20220830</ModDate>
<ModTime>10275700</ModTime>
</Esri>
<idinfo>
<descript>
<abstract>Road segments that represent the centerlines of all roadways or carriageways and used for address geocoding, as well as a source for public works and other agencies responsible for the active management of the road network.</abstract>
<purpose>Road Centerlines</purpose>
</descript>
<keywords>
<theme>
<themekt>X-Ray</themekt>
<themekey>Transportation</themekey>
</theme>
</keywords>
<accconst/>
<useconst/>
<status>
<progress/>
<update/>
</status>
<spdom>
<bounding>
<westbc>NaN</westbc>
<eastbc>NaN</eastbc>
<northbc>NaN</northbc>
<southbc>NaN</southbc>
</bounding>
</spdom>
</idinfo>
<eainfo>
<detailed Name="COSGISNEWDB.SDE.RoadCenterline">
<attr>
<attrlabl Sync="TRUE">OBJECTID</attrlabl>
<attalias Sync="TRUE">OBJECTID</attalias>
<attrtype Sync="TRUE">OID</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Internal feature number.</attrdef>
<attrdefs Sync="TRUE">Esri</attrdefs>
<attrdomv>
<udom Sync="TRUE">Sequential unique whole numbers that are automatically generated.</udom>
</attrdomv>
</attr>
<attr>
<attrlabl Sync="TRUE">SHAPE</attrlabl>
<attalias Sync="TRUE">SHAPE</attalias>
<attrtype Sync="TRUE">Geometry</attrtype>
<attwidth Sync="TRUE">8</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Feature geometry.</attrdef>
<attrdefs Sync="TRUE">Esri</attrdefs>
<attrdomv>
<udom Sync="TRUE">Coordinates defining the features.</udom>
</attrdomv>
</attr>
<attr>
<attrlabl Sync="TRUE">afedrte</attrlabl>
<attalias Sync="TRUE">Alternate Federal Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The alternate federal route name</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">NGUID_RDCL</attrlabl>
<attalias Sync="TRUE">NENA Global ID</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">254</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">afedrtetype</attrlabl>
<attalias Sync="TRUE">Alternate Federal Route Type</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A functional classification of federal route that can be used to further classify the route if different than the ROADCLASS</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">astrte</attrlabl>
<attalias Sync="TRUE">Alternate State Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The alternate state route name</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">astrtetype</attrlabl>
<attalias Sync="TRUE">Alternate State Route Type</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A functional classification of route that can be used to symbolize the route if detail beyond what is provided in ROADCLASS is needed</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">centerlineid</attrlabl>
<attalias Sync="TRUE">Centerline ID</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A unique id for the road centerline segment</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">ctyroute</attrlabl>
<attalias Sync="TRUE">County Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The county route name</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">discrpagid</attrlabl>
<attalias Sync="TRUE">Discrepancy Agency ID</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">75</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The agency, as defined by NENA Master Glossary, that receives the discrepancy report, should one be discovered</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">esnleft</attrlabl>
<attalias Sync="TRUE">ESN on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">5</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The ESN on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">esnright</attrlabl>
<attalias Sync="TRUE">ESN on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">5</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The ESN on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">fedroute</attrlabl>
<attalias Sync="TRUE">Federal Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The federal route name</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">fedrtetype</attrlabl>
<attalias Sync="TRUE">Federal Route Type</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A functional classification of route that can be used to symbolize the route if detail beyond what is provided in ROADCLASS is needed</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">fromleft</attrlabl>
<attalias Sync="TRUE">Left From Address</attalias>
<attrtype Sync="TRUE">Integer</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Lowest address range on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">fromright</attrlabl>
<attalias Sync="TRUE">Right From Address</attalias>
<attrtype Sync="TRUE">Integer</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Lowest address range on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">fullname</attrlabl>
<attalias Sync="TRUE">Full Road Name</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">300</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The full name of the road including any prefix and/or suffix in mixed case format for Esri Community Map contributors</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">inwater</attrlabl>
<attalias Sync="TRUE">In Water</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">5</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A flag that indicates whether the segment of the road is crossing water</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">msagleft</attrlabl>
<attalias Sync="TRUE">MSAG on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">35</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The MSAG community on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">msagright</attrlabl>
<attalias Sync="TRUE">MSAG on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">35</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The MSAG community on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">onewaydir</attrlabl>
<attalias Sync="TRUE">One Way Indicator</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A code that indicates whether the traffic flows with, or against, the direction of the vertices</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">parityleft</attrlabl>
<attalias Sync="TRUE">Parity Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">1</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The even or odd property of the address number range on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">parityright</attrlabl>
<attalias Sync="TRUE">Parity Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">1</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The even or odd property of the address number range on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">rangeprefixleft</attrlabl>
<attalias Sync="TRUE">Left Address Number Prefix</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">15</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">An extension of the address range number on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">rangeprefixright</attrlabl>
<attalias Sync="TRUE">Right Address Number Prefix</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">15</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">An extension of the address range number on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">roadclass</attrlabl>
<attalias Sync="TRUE">Road Class</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Functional classification of roads based on type of service</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">roadlevel</attrlabl>
<attalias Sync="TRUE">Above or Below Grade</attalias>
<attrtype Sync="TRUE">Integer</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A code that indicates whether the traveled roadway is above or below grade</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">Country_L</attrlabl>
<attalias Sync="TRUE">Country on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">2</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Country_R</attrlabl>
<attalias Sync="TRUE">Country on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">2</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">State_L</attrlabl>
<attalias Sync="TRUE">State on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">2</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">State_R</attrlabl>
<attalias Sync="TRUE">State on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">2</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">County_L</attrlabl>
<attalias Sync="TRUE">County on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">40</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">County_R</attrlabl>
<attalias Sync="TRUE">County on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">40</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">City_L</attrlabl>
<attalias Sync="TRUE">Municipality on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">100</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">City_R</attrlabl>
<attalias Sync="TRUE">Municipality on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">100</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Zipcode_L</attrlabl>
<attalias Sync="TRUE">Zip on Left</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">5</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Zipcode_R</attrlabl>
<attalias Sync="TRUE">Zip on Right</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">5</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">stroute</attrlabl>
<attalias Sync="TRUE">State Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">10</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">The state route name</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">strtetype</attrlabl>
<attalias Sync="TRUE">State Route Type</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">20</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">A functional classification of route that can be used to symbolize the route if detail beyond what is provided in ROADCLASS is needed</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">toleft</attrlabl>
<attalias Sync="TRUE">Left To Address</attalias>
<attrtype Sync="TRUE">Integer</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Highest address range on left side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">toright</attrlabl>
<attalias Sync="TRUE">Right To Address</attalias>
<attrtype Sync="TRUE">Integer</attrtype>
<attwidth Sync="TRUE">4</attwidth>
<atprecis Sync="TRUE">10</atprecis>
<attscale Sync="TRUE">0</attscale>
<attrdef Sync="TRUE">Highest address range on right side of the road</attrdef>
</attr>
<attr>
<attrlabl Sync="TRUE">created_user</attrlabl>
<attalias Sync="TRUE">created_user</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">created_date</attrlabl>
<attalias Sync="TRUE">created_date</attalias>
<attrtype Sync="TRUE">Date</attrtype>
<attwidth Sync="TRUE">8</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">last_edited_user</attrlabl>
<attalias Sync="TRUE">last_edited_user</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">last_edited_date</attrlabl>
<attalias Sync="TRUE">last_edited_date</attalias>
<attrtype Sync="TRUE">Date</attrtype>
<attwidth Sync="TRUE">8</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Road_Dist</attrlabl>
<attalias Sync="TRUE">Road Distance</attalias>
<attrtype Sync="TRUE">Double</attrtype>
<attwidth Sync="TRUE">8</attwidth>
<atprecis Sync="TRUE">38</atprecis>
<attscale Sync="TRUE">8</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Snow_Rt</attrlabl>
<attalias Sync="TRUE">Snow Route</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Snow_Rt_Num</attrlabl>
<attalias Sync="TRUE">Snow Route Number</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Snow_Rt_Prior</attrlabl>
<attalias Sync="TRUE">Snow Router Priorty</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Snow_Rt_Hill</attrlabl>
<attalias Sync="TRUE">Snow Route Hill</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Snow_Rt_Hill_Num</attrlabl>
<attalias Sync="TRUE">Snow Route Hill Number</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Rd_Status</attrlabl>
<attalias Sync="TRUE">Road Status</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Speed_Limit</attrlabl>
<attalias Sync="TRUE">Speed Limit</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">3</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Rd_Stat_Desc</attrlabl>
<attalias Sync="TRUE">Road Status Description</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">350</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<attr>
<attrlabl Sync="TRUE">Reduced_Sp</attrlabl>
<attalias Sync="TRUE">Reduced_Speed</attalias>
<attrtype Sync="TRUE">String</attrtype>
<attwidth Sync="TRUE">255</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
<enttyp>
<enttypl Sync="TRUE">COSGISNEWDB.SDE.RoadCenterline</enttypl>
<enttypt Sync="TRUE">Feature Class</enttypt>
<enttypc Sync="TRUE">0</enttypc>
</enttyp>
<attr>
<attrlabl Sync="TRUE">SHAPE.STLength()</attrlabl>
<attalias Sync="TRUE">SHAPE.STLength()</attalias>
<attrtype Sync="TRUE">Double</attrtype>
<attwidth Sync="TRUE">0</attwidth>
<atprecis Sync="TRUE">0</atprecis>
<attscale Sync="TRUE">0</attscale>
</attr>
</detailed>
</eainfo>
<dataIdInfo>
<envirDesc Sync="TRUE">Microsoft Windows 10 Version 10.0 (Build 19044) ; Esri ArcGIS 13.0.0.36056</envirDesc>
<dataLang>
<languageCode Sync="TRUE" value="eng"/>
<countryCode Sync="TRUE" value="USA"/>
</dataLang>
<idCitation>
<resTitle Sync="TRUE">Roads_Public_View</resTitle>
<presForm>
<PresFormCd Sync="TRUE" value="005"/>
</presForm>
</idCitation>
<spatRpType>
<SpatRepTypCd Sync="TRUE" value="001"/>
</spatRpType>
<idAbs/>
<idPurp/>
<idCredit/>
<resConst>
<Consts>
<useLimit/>
</Consts>
</resConst>
</dataIdInfo>
<mdLang>
<languageCode Sync="TRUE" value="eng"/>
<countryCode Sync="TRUE" value="USA"/>
</mdLang>
<distInfo>
<distFormat>
<formatName Sync="TRUE">Enterprise Geodatabase Feature Class</formatName>
</distFormat>
</distInfo>
<mdHrLv>
<ScopeCd Sync="TRUE" value="005"/>
</mdHrLv>
<mdHrLvName Sync="TRUE">dataset</mdHrLvName>
<refSysInfo>
<RefSystem>
<refSysID>
<identCode Sync="TRUE" code="103513"/>
<idCodeSpace Sync="TRUE">Esri</idCodeSpace>
<idVersion Sync="TRUE">10.0.0</idVersion>
</refSysID>
</RefSystem>
</refSysInfo>
<spatRepInfo>
<VectSpatRep>
<geometObjs Name="COSGISNEWDB.SDE.RoadCenterline">
<geoObjTyp>
<GeoObjTypCd Sync="TRUE" value="002"/>
</geoObjTyp>
<geoObjCnt Sync="TRUE">0</geoObjCnt>
</geometObjs>
<topLvl>
<TopoLevCd Sync="TRUE" value="001"/>
</topLvl>
</VectSpatRep>
</spatRepInfo>
<spdoinfo>
<ptvctinf>
<esriterm Name="COSGISNEWDB.SDE.RoadCenterline">
<efeatyp Sync="TRUE">Simple</efeatyp>
<efeageom Sync="TRUE" code="3"/>
<esritopo Sync="TRUE">FALSE</esritopo>
<efeacnt Sync="TRUE">0</efeacnt>
<spindex Sync="TRUE">TRUE</spindex>
<linrefer Sync="TRUE">FALSE</linrefer>
</esriterm>
</ptvctinf>
</spdoinfo>
<mdDateSt Sync="TRUE">20220830</mdDateSt>
<Binary>
<Thumbnail>
<Data EsriPropertyType="PictureX">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
ivnPAAAAAElFTkSuQmCC</Data>
</Thumbnail>
</Binary>
</metadata>
