protected override bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment,
		                                Func<string, Attachment> getAttachment, out RavenJObject metadataToSave,
		                                out byte[] dataToSave)
		{
			var existingAttachmentIsInConflict = existingAttachment.Metadata[Constants.RavenReplicationConflict] != null;
			var existingAttachmentIsDeleted = existingAttachment.Metadata[Constants.RavenDeleteMarker] != null
			                                  && existingAttachment.Metadata[Constants.RavenDeleteMarker].Value<bool>();

			metadataToSave = null;
			dataToSave = null;

			if (existingAttachmentIsInConflict && existingAttachmentIsDeleted == false)
			{
				var conflictIds =
					existingAttachment.Data().ToJObject().Value<RavenJArray>("Conflicts")
					                  .Select(x => x.Value<string>())
					                  .ToArray();

				if (conflictIds.Length == 0)
					return false;

				if (conflictIds
					    .Select(getAttachment)
					    .All(doc => Historian.IsDirectChildOfCurrent(metadata, doc.Metadata)) == false)
					return false;

				metadataToSave = metadata;
				dataToSave = data;

				return true;
			}

			return false;
		}
		private void HandleConflictedAttachment(Attachment attachment)
		{
			var attachmentDataStream = attachment.Data();
			var attachmentData = attachmentDataStream.ToJObject();

			var conflicts = attachmentData.Value<RavenJArray>("Conflicts");

			if (conflicts == null)
				return;

			var currentSource = Database.TransactionalStorage.Id.ToString();

			foreach (var c in conflicts)
			{
				var conflict = Database.GetStatic(c.Value<string>());
				var conflictSource = conflict.Metadata.Value<RavenJValue>(Constants.RavenReplicationSource).Value<string>();

				if (conflictSource != currentSource)
					continue;

				this.deletedHistory.Value = new RavenJArray
				{
					new RavenJObject
					{
						{ Constants.RavenReplicationVersion, conflict.Metadata[Constants.RavenReplicationVersion] },
						{ Constants.RavenReplicationSource, conflict.Metadata[Constants.RavenReplicationSource] }
					}
				};

				return;
			}
		}
		public override bool TryResolve(string id, RavenJObject metadata, byte[] data, Attachment existingAttachment, Func<string, Attachment> getAttachment, out RavenJObject metadataToSave,
										out byte[] dataToSave)
		{
			metadataToSave = existingAttachment.Metadata;
			dataToSave = existingAttachment.Data().ReadData();

			return true;
		}