protected override Config OnConfigure(Config defaultConfig, Config[] existingConfigs) {
			foreach (var item in defaultConfig.parameters.elementItem) {
				if (item.name == "Points") {
					const float b = 0.25f;
					item.any = new synesis.RegionPoints() {
						Points = new[]{
                           new synesis.Point(){ X=-b,Y=-b},
                           new synesis.Point(){ X=-b,Y=b},
                           new synesis.Point(){ X=b,Y=b},
                           new synesis.Point(){ X=b,Y=-b},
                        }
					}.Serialize();
				} else if (item.name == "RegionMotionAlarm") {
					item.any = new synesis.RegionMotionAlarm() { Enabled = true }.Serialize();
				} else if (item.name == "DirectionAlarm") {
					item.any = new synesis.DirectionAlarm() {
						Enabled = false,
						MinShift = 0.05f,
						Rose = new synesis.Rose() { Left = true, Right = true }
					}.Serialize();
				} else if (item.name == "LoiteringAlarm") {
					item.any = new synesis.LoiteringAlarm() { Radius = 999f, Time = 10 }.Serialize();
				} else if (item.name == "SpeedAlarm") {
					item.any = new synesis.SpeedAlarm() { Speed = 1.388888888889f, Time = 2 }.Serialize();
				}
			}
			return defaultConfig;
		}
		public Config Configure(Config defaultConfig, Config[] existingConfigs) {
			existingConfigs = existingConfigs ?? new Config[0];

			if (existingConfigs.Any((cfg) => cfg.name == defaultConfig.name))
				throw new InvalidOperationException(string.Format(ExceptionStrings.instance.sErrorNameNotUnique, defaultConfig.name));

			return OnConfigure(defaultConfig, existingConfigs);
		}
		protected override Config OnConfigure(Config defaultConfig, Config[] existingConfigs) {
			var xmlPoints = defaultConfig.parameters.elementItem.FirstOrDefault((item) => item.name == "Points");
			if (xmlPoints != null) {
				const float b = 0.25f;
				xmlPoints.any = new synesis.TripWirePoints() {
					P1 = new synesis.Point() { X = -b, Y = -b },
					P2 = new synesis.Point() { X = b, Y = b }
				}.Serialize();
			}

			var xmlDirection = defaultConfig.parameters.simpleItem.FirstOrDefault((item) => item.name == "Direction");
			if (xmlDirection != null) {
				xmlDirection.value = "FromBoth";
			}

			return defaultConfig;
		}
		protected override Config OnConfigure(Config defaultConfig, Config[] existingConfigs) {
			foreach (var item in defaultConfig.parameters.elementItem) {
				if (item.name == "AntishakerCrop") {
					item.any = new synesis.AntishakerCrop() {
						XOffs = -1, YOffs = 1, CropWidth = 2, CropHeight = 2
					}.Serialize();
				} else if (item.name == "UserRegion") {
					var rose = new synesis.Rose() { Left = true, UpLeft = true, Up = true, UpRight = true, Right = true, DownRight = true, Down = true, DownLeft = true };
					var points = new [] {
                     new synesis.Point() { X=-1,Y=-1 },
                     new synesis.Point() { X=-1,Y=1},
                     new synesis.Point() { X=1,Y=1 },
                     new synesis.Point() { X=1,Y=-1 }
               };
					item.any = new synesis.UserRegion() {
						Rose = rose, Points = points
					}.Serialize();
				} else if (item.name == "MarkerCalibration") {
					var heightMarker = new synesis.HeightMarker() {
						Height = 170,
						SurfaceNormals = new synesis.SurfaceNormal[] 
                        { 
                            new synesis.SurfaceNormal() { Height=0.4f, Point = new synesis.Point() {X=-0.5f,Y=-0.25f} } ,
                            new synesis.SurfaceNormal() { Height = 0.25f, Point = new synesis.Point() { X = 0.5f, Y = 0.5f } }
                        }
					};
					var heightMarkers = new synesis.HeightMarker[] { heightMarker };
					var heightMarkerCalibration = new synesis.HeightMarkerCalibration() { FocalLength = 9, MatrixFormat = synesis.MatrixFormat.Item13, HeightMarkers = heightMarkers };
					item.any = new synesis.MarkerCalibration() { Item = heightMarkerCalibration }.Serialize();
				}
			}

			foreach (var item in defaultConfig.parameters.simpleItem) {
				switch (item.name) {
					case "UseObjectTracker":
					item.value = DataConverter.BoolToString(true); break;
					case "StabilizationTime":
					item.value = DataConverter.IntToString(1000); break;
					case "MinObjectArea":
					item.value = DataConverter.FloatToString(0.1f); break;
					case "MaxObjectArea":
					item.value = DataConverter.FloatToString(10.0f); break;
					case "MaxObjectSpeed":
					item.value = DataConverter.FloatToString(20.0f); break;
					case "DisplacementSensitivity":
					item.value = DataConverter.IntToString(3); break;
					case "UseAntishaker":
					item.value = DataConverter.BoolToString(true); break;
					case "ContrastSensitivity":
					item.value = DataConverter.IntToString(7); break;
					case "ImageTooDark":
					item.value = DataConverter.BoolToString(true); break;
					case "ImageTooBlurry":
					item.value = DataConverter.BoolToString(true); break;
					case "ImageTooBright":
					item.value = DataConverter.BoolToString(true); break;
					case "CameraRedirected":
					item.value = DataConverter.BoolToString(true); break;
					case "CameraObstructed":
					item.value = DataConverter.BoolToString(true); break;
				}
			}





			return defaultConfig;
		}
		protected virtual Config OnConfigure(Config defaultConfig, Config[] existingConfigs) {
			return defaultConfig;
		}