// Path: src/com/ciphertechsolutions/io/device/Device.java
// public abstract class Device {
// 
//     /**
//      *  The simple name of a device.
//      */
//     protected String name;
// 
//     /// The path to read the device with.
//     protected String path;
// 
//     /**
//      *  The size of the device in bytes.
//      */
//     protected long size;
// 
//     /**
//      * Gives detailed information about this device as a printable string.
//      * @return A printable string of device information.
//      */
//     public abstract String details();
// 
//     /**
//      * Converts the device name to a format appropriate for outputting as a file name. Does not include file extension.
//      * @return A valid file name containing device-relevant information.
//      */
//     public abstract String toFileNameString();
// 
//     /**
//      *
//      * @return The device path.
//      */
//     public Path getPath() {
//     	return Paths.get(path);
//     }
// 
//     /**
//      * @return the name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name the name to set
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Get the device serial number
//      * @return The serial number.
//      */
//     public abstract String getSerialNumber();
// 
//     protected static String trimPropertyName(String s) {
//         if (s.contains(":")) {
//             return s.substring(s.indexOf(":") + 1).trim();
//         }
//         return s;
//     }
// 
//     /**
//      * @return the size
//      */
//     public long getSize() {
//         return size;
//     }
// 
//     /**
//      * @param size the size to set
//      */
//     public void setSize(long size) {
//         this.size = size;
//     }
// }


import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import com.ciphertechsolutions.io.device.Device;
package com.ciphertechsolutions.io.ewf;



public class VolumeSectionManager {
    private final Map<RandomAccessFile, List<VolumeSection>> volumeSections;
    private final byte[] EMPTY_VOLUME_SECTION = new byte[VolumeSection.ADDITIONAL_SECTION_SIZE + Section.SECTION_HEADER_SIZE];
// Path: src/com/ciphertechsolutions/io/device/Device.java
// public abstract class Device {
// 
//     /**
//      *  The simple name of a device.
//      */
//     protected String name;
// 
//     /// The path to read the device with.
//     protected String path;
// 
//     /**
//      *  The size of the device in bytes.
//      */
//     protected long size;
// 
//     /**
//      * Gives detailed information about this device as a printable string.
//      * @return A printable string of device information.
//      */
//     public abstract String details();
// 
//     /**
//      * Converts the device name to a format appropriate for outputting as a file name. Does not include file extension.
//      * @return A valid file name containing device-relevant information.
//      */
//     public abstract String toFileNameString();
// 
//     /**
//      *
//      * @return The device path.
//      */
//     public Path getPath() {
//     	return Paths.get(path);
//     }
// 
//     /**
//      * @return the name
//      */
//     public String getName() {
//         return name;
//     }
// 
//     /**
//      * @param name the name to set
//      */
//     public void setName(String name) {
//         this.name = name;
//     }
// 
//     /**
//      * Get the device serial number
//      * @return The serial number.
//      */
//     public abstract String getSerialNumber();
// 
//     protected static String trimPropertyName(String s) {
//         if (s.contains(":")) {
//             return s.substring(s.indexOf(":") + 1).trim();
//         }
//         return s;
//     }
// 
//     /**
//      * @return the size
//      */
//     public long getSize() {
//         return size;
//     }
// 
//     /**
//      * @param size the size to set
//      */
//     public void setSize(long size) {
//         this.size = size;
//     }
// }


// Path: src/com/ciphertechsolutions/io/ewf/VolumeSectionManager.java
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import com.ciphertechsolutions.io.device.Device;

package com.ciphertechsolutions.io.ewf;



public class VolumeSectionManager {
    private final Map<RandomAccessFile, List<VolumeSection>> volumeSections;
    private final byte[] EMPTY_VOLUME_SECTION = new byte[VolumeSection.ADDITIONAL_SECTION_SIZE + Section.SECTION_HEADER_SIZE];
    private final Device imagedDisk;