úÎwúu/      !"#$%&'()*+,-.NoneKA type suitable for containing a file-path, qualified by the corresponding .:A type-synonym specifically to hold file-sizes (in bytes).>A type suitable for containing an arbitrary set of file-paths. Accessor. Accessor.Sum the s in the specified list.ZReturns the cumulative sequence of sizes, as each file is prepended to the specified list.vCAVEAT: the list-length is one greater than that supplied, since the last element represents the size with zero files./ERecursively descend the specified path, accumulating a list of files.SCAVEAT: all non-directory files are returned; devices, pipes, sockets, symlinks ...>Finds any file-paths which have been specified more than once.IThis includes files which have been implicitly specified via a directory.0?Get the size of a file, treating a directory as an atomic unit.FCAVEAT: the size of a symlink, is that of the file to which it refers.Finds file-sizes. Sorts a list of ( by increasing size; ie. smallest first. Sorts a list of ( by decreasing size; ie. smallest first. VTrue if the specified file has the required size according to the specified predicate. .Acquire statistics related to a list of files. ™Partitions the specified list of file-sizes & paths, into those whose size is suitable according to the specified predicate & those which are unsuitable.Logs the results./0 The predicate.!The file-parameters to be tested. F(Number of components, Aggregate size, Mean size, Standard-deviation).    /0 None 8Declare a list of files qualified by its aggregate size..The aggregate size of the files referenced by .)A list of paths, defining a set of files.A constant empty instance.Smart constructor. Construct a  from a single . Prepend a  to an existing .ACAVEAT: performance hot-spot, so it by-passes the checks made by .cPredicate used to determine whether a specific file-combination matches a size-related requirement.{Progressively raises the selection-criterion as each match is found, to produce monotonically increasing file-combinations.1£Merges two lists of monotonically increasing values, into a single monotonically increasing list, by dropping values which compare less than results already found.üCAVEAT: both lists must produce an element, in order to determine which is selected. As a result, though one list produces a value, it can't be returned until the other does (which make take a long time), even if ultimately the first is then selected. Compares two file-combinations by their aggregate file-size.ÊMerges two lists of monotonically increasing lists of file-combinations, into a single monotonically increasing list, by dropping values which have a smaller aggregate size than results already found.2:The new path to prepend to the incumbent file-combination.#The incumbent combination of files.The predicate.The input datum to be tested.0The initial minimum byte-size of file to accept."The input list of files to filter.=The resulting list of files, which have met rising criterion.1\Comparator used to select the best file-combination from the heads of the two list supplied.5A list of monotonically increasing file-combinations.5A list of monotonically increasing file-combinations.5A list of monotonically increasing file-combinations.5A list of monotonically increasing file-combinations.   21None 2Declares a record to contain command-line options.FWhether empty directories or files should be included in any solution.YThe maximum space (in bytes) available in which to store a subset of the specified files.[Optionally seed the random-number generator to produce a repeatable pseudo-random sequence. &The minimum acceptable usage-ratio of .!3Set the threshold for ancillary information-output."Smart constructor.#8Derives the minimum number of bytes, from other options.$3Reduce the requirements by the specified file-size.%5The bounds on the aggregate size of the set of files. 3 !"#$%&'  !"#$%  !%#$"3 !"#$%&'None4#A channel terminated by a sentinel.5RWrite the specified list to the specified channel, terminating it with a sentinel.6?Read the contents of the specified channel, up to the sentinel.\Any attempt to read beyond the sentinel, will block forever since the writer is out of data.*¥Writes the two unevaluated lists to separate concurrent channels, lazily reads them both (resulting in parallel evaluation) & merges them into a single results-list.456*BMerge-function, which reads from two channels, to produce a third.Data for first channel.Data for second channel.**456*None+ Checks that the total aggregate , meets or exceeds  minimumBytes.bDrops excessively large files, assuming that the file-list has been sorted by size, largest first.Generates up to 2^n combinations of the n. specified files; the algorithm is similar to 7Ò, except that unproductive lines are immediately terminated. This is the performance bottle-neck, and though there may be simpler and faster algorithms, the key attribute is that it operates in constant space.:CAVEAT: assumes files have been sorted by decreasing size.±The algorithm is stable, in that it maintains the specified file-order within each combination; though the order in which the combinations are concatenated is rather arbitrary.,+Orders the files by decreasing size, calls +, calls * to select progressively better solutions.-<Recursively bisects the task, distributing the sub-tasks to ,%, to utilise the available CPU-cores.ÿ¼The task is bisected by removing the smallest file, then solving the remaining problem for two independent cases; that the selected file is excluded or the selected file is included, in the final solution. Selecting the smallest file rather than the largest, seems to balance the load of the sub-tasks more evenly. CAVEAT: no account has been taken of the possibility that the smallest file has size zero, which makes the sub-tasks identical.„Recombines the part solutions to finds the single monotonically increasing list of file-combinations matching the original criteria.•CAVEAT: whilst the ultimate solution is similar, regardless of the specified number of CPU-cores available, the path leading to it typically differs..Neither - nor ,ÿ distinguish between empty & non-empty files, but empty files cause significant inefficiency in the former (where the same calculation is performed multiple times) & could be treated much more efficiently in the latter (since they're potentially a member of any other solution).IThis function side-lines empty files, delegates the remaining problem to - (& consequently ,_), then prepends combinations of empty files to the resulting combinations of non-empty files.+HThe closed interval of acceptible aggregate size, for file-combinations.;The list of file-names & sizes, ordered by decreasing size.;The resulting unordered list of suitable file-combinations.,>The closed interval of acceptible sizes for file-combinations.%The input list of file-names & sizes.:A reduced list of increasingly suitable file-combinations.-$The unordered list of files & sizes..$The unordered list of files & sizes.+,-.+,-.+,-.8      !"#$%&'()*+,-./0123456789:;<=>?'squeeze-1.0.4.13-8vYMaIbWpUL3Ouub9zpdCXSqueeze.Data.FileSqueeze.Data.FileCombinationSqueeze.Data.CommandOptions+Squeeze.Control.Concurrent.DivideAndConquerSqueeze.SqueezeFileSizeAndPathFileSize FilePathListgetSizegetPath aggregateSizeaccumulateSizefindDuplicates findSizesorderByIncreasingSizeorderByDecreasingSize hasSizeBygetFileSizeStatisticsselectSuitableFileSizesFileCombinationgetAggregateFileSizegetFilePathListnullFileCombinationmkFileCombination singletonprepend risingFiltercomparingAggregateFileSizerisingMergeByAggregateFileSize$fSelfValidatorFileCombination$fShowFileCombination$fEqFileCombinationCommandOptionsgetIncludeEmptygetMaximumBytesgetMaybeRandomSeedgetMinimumUsageRatio getVerbositymkCommandOptionsderiveMinimumBytes subtractFilesolutionSizeBounds$fSelfValidatorCommandOptions$fDefaultCommandOptions$fEqCommandOptions$fShowCommandOptionsdivideAndConquerfindCombinations findBestFitdistributeAndFindBestFit.partitionEmptyFilesAndDistributeAndFindBestFitexpandDirectoryfindSize risingMergeMkFileCombinationMkCommandOptionsTerminatedChannelwriteListToChanreadListFromChanbase Data.OldList subsequences