úÎ!6¸-ĒM      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLŠ 2016 2018 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafe!zip Decode a M containing CP 437 encoded text.Nzip+Decode a single byte of CP437 encoded text.Š 2016 2018 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableSafe12<zip8The bad things that can happen when you use the library.zip9Thrown when you try to get contents of non-existing entryzip.Thrown when archive structure cannot be parsedzip%Information about archive as a whole.zipComment of entire archivezip-Absolute offset of start of central directoryzip Size of central directory record zipSupported compression methods. zipStore file uncompressed zipDeflate zip Compressed using BZip2 algorithm zip˙This record represents all information about archive entry that can be stored in a zip archive. It does not mirror local file header or central directory file header, but their binary representations can be built given this data structure and the actual archive contents.zipVersion made byzipVersion needed to extractzipCompression methodzipLast modification date and timezipCRC32 check sumzipSize of compressed entryzipSize of uncompressed entryzip$Absolute offset of local file headerzip Entry commentzipAll extra fields foundzipExternal file attributeszip=The exception represents various troubles you can have with .zip! cannot be created from this pathzip~This data type serves for naming and selection of archive entries. It can be created only with help of the smart constructor i, and it's the only key  that can be used to refer to files in archive or to name new archive entries.˙“The abstraction is crucial for ensuring that created archives are portable across operating systems, file systems, and different platforms. Since on some operating systems, file paths are case-insensitive, this selector is also case-insensitive. It makes sure that only relative paths are used to name files inside archive, as it's recommended in the specification. It also guarantees that forward slashes are used when the path is stored inside archive for compatibility with Unix-like operating systems (as recommended in the specification). On the other hand, in can be rendered as an ordinary relative file path in OS-specific format when needed.Ozip+Path pieces of relative path inside archivezip Create an  from a P†. To avoid problems with distribution of the archive, characters that some operating systems do not expect in paths are not allowed. Argument to  should pass these checks:.it is a relative path without slash at the endVbinary representations of normalized path should be not longer than 65535 bytesThis function can throw an .zipRestore a relative path from . Every  corresponds to a single P.zipUGet an entry name in the from that is suitable for writing to file header, given an . Š 2016 2018 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone"#NV¸­?QzipMS-DOS date-time: a pair of R, (date, time) with the following structure: ˙DATE bit 0 - 4 5 - 8 9 - 15 value day (1 - 31) month (1 - 12) years from 1980 TIME bit 0 - 4 5 - 10 11 - 15 value seconds* minute hour *stored in two-second incrementsSzipFA temporary data structure to hold Zip64 extra data field information.TzipData descriptor representation.Uzip0Type of file header: local or central directory.Vzip4Origin of entries that can be streamed into archive.WzipVCollection of editing actions, that is, actions that modify already existing entries.XzipKCollection of maps describing how to produce entries in resulting archive.YzipNThe sum type describes all possible actions that can be performed on archive.ZzipAdd entry given its Source[zip9Copy an entry form another archive without re-compression\zip$Change name the entry inside archive]zipDelete entry from archive^zip%Change compression method on an entry_zip"Set comment for a particular entry`zip"Delete comment of particular entryazip)Set modification time of particular entrybzip%Add an extra field to specified entryczip(Delete an extra filed of specified entrydzipSet comment for entire archiveezip Delete comment of entire archivefzip2Set an external file attribute for specified entrygzip: Version created by  to specify when writing archive data.hzipEScan the central directory of an archive and return its description ( as well as a collection of its entries.This operation may fail with:isAlreadyInUseError9 if the file is already open and cannot be reopened;isDoesNotExistError if the file does not exist;isPermissionError< if the user does not have permission to open the file;u when specified archive is something this library cannot parse (this includes multi-disk archives, for example).˙cPlease note that entries with invalid (non-portable) file names may be missing in the list of entries. Files that are compressed with unsupported compression methods are skipped as well. Also, if several entries would collide on some operating systems (such as Windows, because of its case-insensitivity), only one of them will be available, because ’ is case-insensitive. These are the consequences of the design decision to make it impossible to create non-portable archives with this library.izipHGiven location of archive and information about specific archive entry   , return Source] of its data. Actual data can be compressed or uncompressed depending on the third argument.jzip Undertake allŋ actions specified as the fourth argument of the function. This transforms given pending actions so they can be performed in one pass, and then they are performed in the most efficient way.kzipŊCreate a new file with the guarantee that in case of exception the old file will be preserved intact. The file is only updated/replaced if the second argument finishes without exceptions.lzipsDetermine what comment in new archive will look like given its original value and a collection of pending actions.mzipiTransform a map representing existing entries into a collection of actions that re-create those entires.nzipTransform a collection of Ys into X and W5 data that describes how to create resulting archive.ozipmCopy entries from another archive and write them into the file associated with given handle. This can throw , if there is no such entry in that archive.pzipBSink entry from given stream into the file associated with given q.rzipCreate Sink; to stream data there. Once streaming is finished, return T# for the streamed data. The action does not close given q.szip]Append central directory entries and end of central directory record to the file that given q› is associated with. Note that this automatically writes Zip64 end of central directory record and Zip64 end of central directory locator when necessary.tzipaExtract the number of bytes between start of file name in local header and start of actual data.uzip7Parse central directory file headers and put them into v.wzip{Parse a single central directory file header. If it's a directory or file compressed with unsupported compression method, x is returned.yzipParse an extra-field.zzipOGet signature. If the extracted data is not equal to provided signature, fail.{zipParse S from its binary representation.|zip!Produce binary representation of S.}zipCreate M representing an extra field.~zipCreate M' representing entire central directory.zipCreate M: representing local file header if the first argument is €- and central directory file header otherwise.zipCreate M4 representing Zip64 end of central directory record.‚zipCreate M6 representing Zip64 end of central directory locator.ƒzipParse end of central directory record or Zip64 end of central directory record depending on signature binary data begins with.„zipCreate M. representing end of central directory record.…zipoFind absolute offset of end of central directory record or, if present, Zip64 end of central directory record.†zipRename an entry (key) in a v.‡zipLike ˆ8, but with saturation when converting to bounded types.‰zip!Determine target entry of action.ŠzipDecode M˙. The first argument indicates whether we should treat it as UTF-8 (in case bit 11 of general-purpose bit flag is set), otherwise the function assumes CP437. Note that since not every stream of bytes constitutes valid UTF-8 text, this function can fail. In that case x is returned.‹zip_Detect if the given text needs newer Unicode-aware features to be properly encoded in archive.ŒzipLConvert numeric representation (as per .ZIP specification) of version into .ŽzipCovert : to its numeric representation as per .ZIP specification.zip7Get compression method form its numeric representation.zipConvert  : to its numeric representation as per .ZIP specification.‘zip>Check if an entry with these parameters needs Zip64 extension.’zip|Determine version needed to extract  that should be written to headers given need of Zip64 feature and compression method.“zipReturn decompressing Conduit0 corresponding to the given compression method.”zip9Sink that calculates CRC32 check sum for incoming stream.•zipConvert – to MS-DOS time format.—zipConvert MS-DOS date-time to –.hzipPath to archive to scanizip'Path to archive that contains the entryzip/Information needed to extract entry of interestzip#Should we stream uncompressed data?zipSource of uncompressed datajzip*Location of archive file to edit or createzipArchive descriptionzipCurrent list of entireszipCollection of pending actionskzipName of file to createzipAction that writes to given qmzip0Name of the archive file where entires are foundzipActual list of entireszip)Actions that recreate the archive entriesnzipCollection of pending actionszipOptimized dataozipOpened q of zip archive filezip)Path to the file to copy the entries fromzipv1 from original name to name to use in new archivezip)Additional info that can influence resultzip5Info to generate central directory file headers laterpzipOpened q of zip archive filezipName of entry to addzip-Origin of entry (can contain additional info)zipSource of entry contentszip)Additional info that can influence resultzip5Info to generate central directory file headers laterrzipOpened q of zip archive filezipCompression method to applyzipSink where to stream dataszip!Opened handle of zip archive filezipCommentary to entire archivezip7Info about already written local headers and entry data{zip/What is read from central directory file headerzipActual binary representationzipResult|zip.Is this for local or central directory header?zipZip64 extra field's datazipResulting representationzipType of header to generatezipName of entry to writezipDescription of entryzipTotal number of entrieszipSize of the central directoryzip"Offset of central directory record‚zip(Offset of Zip64 end of central directory„zipTotal number of entrieszipSize of the central directoryzip"Offset of central directory recordzipZip file commentŠzip1Whether bit 11 of general-purpose bit flag is setzipBinary data to decodezipDecoded ˜ in case of successYZ[\]^_`abcdefhij‰”Š 2016 2018 Mark Karpov BSD 3 clause$Mark Karpov <markkarpov92@gmail.com> experimentalportableNone >?FKNT]+Ž0 zip"Internal state record used by the !, monad. This is only exported for use with ™ methods, you can't look inside.šzipPath to zip archive›zipActual collection of entriesœzipInfo about the whole archivezipPending actions!zipķMonad that provides context necessary for performing operations on zip archives. It's intentionally opaque and not a monad transformer to limit the actions that can be performed in it to those provided by this module and their combinations."zip¸Create a new archive given its location and an action that describes how to create contents of the archive. This will silently overwrite the specified file if it already exists. See #/ if you want to work with an existing archive.#zip#Work with an existing archive. See ". if you want to create a new archive instead.This operation may fail with:isAlreadyInUseError9 if the file is already open and cannot be reopened;isDoesNotExistError if the file does not exist;isPermissionError< if the user does not have permission to open the file;u when specified archive is something this library cannot parse (this includes multi-disk archives, for example).˙cPlease note that entries with invalid (non-portable) file names may be missing in the list of entries. Files that are compressed with unsupported compression methods are skipped as well. Also, if several entries would collide on some operating systems (such as Windows, because of its case-insensitivity), only one of them will be available, because ’ is case-insensitive. These are the consequences of the design decision to make it impossible to create non-portable archives with this library.$zipėRetrieve description of all archive entries. This is an efficient operation that can be used for example to list all entries in an archive. Do not hesitate to use the function frequently: scanning of archive happens only once anyway.ŖPlease note that the returned value only reflects actual contents of the archive in file system, non-committed actions do not influence the list of entries, see C for more information.%zip_Check whether the specified entry exists in the archive. This is a simple shortcut defined as: ,doesEntryExist s = M.member s <$> getEntries&zipGet  < for specified entry. This is a simple shortcut defined as: *getEntryDesc s = M.lookup s <$> getEntries'zip5Get contents of a specific archive entry as a strict M~. It's not recommended to use this on big entries, because it will suck out a lot of memory. For big entries, use conduits: ).Throws: .(zipGet an entry source.Throws: .)zip1Stream contents of an archive entry to the given Sink.Throws: .*zip;Save a specific archive entry as a file in the file system.Throws: .+zipeCalculate CRC32 check sum and compare it with the value read from the archive. The function returns žF when the check sums are the same that is, the data is not corrupted.Throws: .,ziplUnpack the entire archive into the specified directory. The directory will be created if it does not exist.-zipGet the archive comment..zip#Get the archive description record./zipAAdd a new entry to the archive given its contents in binary form.0zip:Stream data from the specified source to an archive entry.1zip Load an entry from a given file.2zip^Copy an entry as is  from another zip archive. If the entry does not exist in that archive,  will be eventually thrown.3zipAdd an entire directory to the archive. Please note that due to the design of the library, empty sub-directories won't be added.The action can throw .4zipRRename an entry in the archive. If the entry does not exist, nothing will happen.5zipMDelete an entry from the archive, if it does not exist, nothing will happen.6zipRChange compression method of an entry, if it does not exist, nothing will happen.7zipšSet an entry comment, if that entry does not exist, nothing will happen. Note that if binary representation of the comment is longer than 65535 bytes, it will be truncated on writing.8zipNDelete an entry's comment, if that entry does not exist, nothing will happen.9ziprSet the last modification  date/time. The specified entry may be missing, in that case the action has no effect.:zip`Add an extra field. The specified entry may be missing, in that case this action has no effect.;zipuDelete an extra field by its type (tag). The specified entry may be missing, in that case this action has no effect.<zipSet external file attributes.=zip0Perform an action on every entry in the archive.>zip"Set comment of the entire archive.?zip+Delete the archive comment if it's present.@zip)Undo changes to a specific archive entry.Azip;Undo changes to the archive as a whole (archive's comment).Bzip.Undo all changes made in this editing session.Czip˙Archive contents are not modified instantly, but instead changes are collected as pending actions  that should be committed, in order to efficiently modify the archive in one pass. The actions are committed automatically when the program leaves the realm of ! monad (i.e. as part of " or #Œ), or can be forced explicitly with the help of this function. Once committed, changes take place in the file system and cannot be undone.Ÿzip7Get the path of the actual archive file from inside of ! monad. zip&Get the collection of pending actions.Ązip5Modify the collection of pending actions in some way.ĸzip0Add a new action to the list of pending actions.ŖzipGRecursively list a directory. Do not return paths to empty directories.¤zip6Perform an action ignoring IO exceptions it may throw.DzipEzip"zip"Location of archive file to createzip#Actions that form archive's content#zip Location of archive to work withzipActions on that archive'zip&Selector that identifies archive entryzipContents of the entry(zip&Selector that identifies archive entry)zip&Selector that identifies archive entryzip#Sink where to stream entry contentszip Contents of the entry (if found)*zip&Selector that identifies archive entryzipWhere to save the file+zip&Selector that identifies archive entryzipIs the entry intact?/zipCompression method to usezipEntry contentszipName of entry to add0zipCompression method to usezipSource of entry contentszipName of entry to add1zipCompression method to usezipName of entry to addzipPath to file to add2zipPath to archive to copy fromzip)Name of entry (in source archive) to copyzip,Name of entry to insert (in current archive)3zipCompression method to usezip How to get ; from a path relative to the root of the directory we packzipPath to directory to add4zipOriginal entry namezipNew entry name6zipNew compression methodzipName of entry to re-compress7zipText of the commentzipName of entry to comment on9zipNew modification timezipName of entry to modify:zip%Tag (header id) of extra field to addzipBody of the fieldzipName of entry to modify;zip(Tag (header id) of extra field to deletezipName of entry to modify<zipExternal file attributeszipName of entry to modify=zipAction to performC  !"#$%&'()*+,-./0123456789:;<=>?@ABCC  ! "#$%&'()*+,-./0123456789:;<=>?@ABCĨ       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[X\]^_`abcdefghijklmnopqrs/Ituvwx6Xyz{|}~€‚Xƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•X–—˜™š›XœžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗŒ´ĩšēģzip-1.2.0-49JLAMMtnMQKLwKRaTYsXCodec.Archive.Zip.CP437Codec.Archive.ZipCodec.Archive.Zip.TypeSystem.FilePath.PosixisValidSystem.FilePath.WindowsCodec.Archive.Zip.Internal decodeCP437 ZipExceptionEntryDoesNotExist ParsingFailedArchiveDescription adComment adCDOffsetadCDSizeCompressionMethodStoreDeflateBZip2EntryDescriptionedVersionMadeByedVersionNeeded edCompression edModTimeedCRC32edCompressedSizeedUncompressedSizeedOffset edComment edExtraFieldedExternalFileAttrsEntrySelectorExceptionInvalidEntrySelector EntrySelectormkEntrySelectorunEntrySelector getEntryNameZipState ZipArchive createArchive withArchive getEntriesdoesEntryExist getEntryDescgetEntrygetEntrySource sourceEntry saveEntry checkEntry unpackIntogetArchiveCommentgetArchiveDescriptionaddEntry sinkEntry loadEntry copyEntry packDirRecur renameEntry deleteEntry recompresssetEntryCommentdeleteEntryComment setModTime addExtraFielddeleteExtraFieldsetExternalFileAttrs forEntriessetArchiveCommentdeleteArchiveCommentundoEntryChangesundoArchiveChangesundoAllcommit$fMonadBaseControlIOZipArchive$fMonadBaseIOZipArchive$fFunctorZipArchive$fApplicativeZipArchive$fMonadZipArchive$fMonadIOZipArchive$fMonadThrowZipArchive$fMonadCatchZipArchive$fMonadMaskZipArchivebytestring-0.10.8.2Data.ByteString.Internal ByteStringdecodeByteCP437unESbaseGHC.IOFilePath MsDosTimeGHC.WordWord16Zip64ExtraFieldDataDescriptor HeaderType EntryOriginEditingActionsProducingActions PendingAction SinkEntry CopyEntry RenameEntry DeleteEntry RecompressSetEntryCommentDeleteEntryComment SetModTime AddExtraFieldDeleteExtraFieldSetArchiveCommentDeleteArchiveCommentSetExternalFileAttributes zipVersion scanArchive withNewFilepredictCommenttoRecreatingActionsoptimize copyEntriesGHC.IO.Handle.TypesHandlesinkDatawriteCDgetLocalHeaderGapgetCDcontainers-0.5.11.0Data.Map.InternalMap getCDHeaderGHC.BaseNothing getExtraField getSignatureparseZip64ExtraFieldmakeZip64ExtraField putExtraFieldputCD putHeaderghc-prim GHC.TypesFalse putZip64ECDputZip64ECDLocatorgetECDputECD locateECD renameKeywithSaturationGHC.Real fromIntegral targetEntry decodeText needsUnicode toVersion Data.VersionVersion fromVersiontoCompressionMethodfromCompressionMethod needsZip64 getZipVersiondecompressingPipe crc32Sink toMsDosTime time-1.8.0.2 Data.Time.Clock.Internal.UTCTimeUTCTime fromMsDosTime text-1.2.3.0Data.Text.InternalText,monad-control-1.0.2.3-LxSa5UNSn5W3GzcRN1fxWYControl.Monad.Trans.ControlMonadBaseControl zsFilePath zsEntries zsArchive zsActionsTrue getFilePath getPending modifyActions addPending listDirRecurignoringAbsence