| 
					
				 | 
			
			
				@@ -477,6 +477,27 @@ bool ManagedRoute::sync() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// Detect routes previously applied by ZT that don't exist in the system's route list. Re-apply these. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// NOTE: The following block was added in reaction to the macOS High Sierra 10.13.2 disappearing  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	// route issue. This comment should be removed once we're sure this block doesn't have any side-effects. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool found; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	std::vector<_RTE> currRoutes(_getRTEs(_target,false)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	found = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	for(std::vector<_RTE>::iterator r(currRoutes.begin());r!=currRoutes.end();++r) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(_target == r->target) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			found = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (!found) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		// erase _applied enteries 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		std::map<InetAddress, bool>::iterator rt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		rt = _applied.find(leftt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_applied.erase(rt, _applied.end()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		rt = _applied.find(rightt); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		_applied.erase(rt, _applied.end()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if (!_applied.count(leftt)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_applied[leftt] = false; // not ifscoped 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		_routeCmd("add",leftt,_via,(const char *)0,(_via) ? (const char *)0 : _device); 
			 |