Implemented the initial offline processing implementation, with dependency layer building and ordered processing Processing is still single threaded and unoptimized so it can take some time to complete, the next step is to move from a single threaded design to a ThreadPoolExecutor that splits up the buffer into a set number of chunks for processing