!"#$%&'()*+,-./0123456789:;< = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n opqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !!!!!!!!!!!"""""""""""###########$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''()))))*********++++++,,,,,, , , , , ,,,,,,,,,,,,,,,,,-- -!-"-#-$-%-&-'-(-)-*-+-,---.-/-0-1-2-3-4-5-6-7-8-9-:-;-<-=->-?-@-A-B-C-D-E-F-G-H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W/X/Y/Z/[/\/]/^/_/`/a/b/c/d/e/f/g/h/i/j/k/l/m0n0o0p0q0r0s0t0u0v0w0x0y0z0{0|0}0~011112222222222222223333333345             % &a state monad containing the BinArea. !4Somewhere to where you write binary data in memory. "#?Given a consumer of binary data, and an (a), write out the (a) $.Given a source of binary data, provide an (a) %A source of binary data &'read one byte (read multiple bytes )A consumer of binary data *+write one byte ,write multiple bytes -Write an (a) to a  .Read an (a) from a  /01Write an (a) to memory. The  is the length of the area. 2Write an (a) to memory. A The integer argument is an initial guess at the number of bytes @ that will be needed. This should be greater than 0. If it is C too small, there will be unnecessary reallocations; if too large,  too much memory will be used. 3Create an empty !, given the initial size. 4%Return all the data currently in the ! 5A !" as somewhere to put binary data. ;ensure that the given BinArea can hold at least len bytes. 6.Read a value from binary data in memory. The  is the length, F and there will be an error if this is either too small or too large. 7"Turn binary data in memory into a ! (so that you can  read from it). 89&A BinArea as a source of binary data. :Transform the monad used by a *) ;Transform the monad used by a &%  !"#$%&'()*+,-./0123456789:;-.126"#$)*+,%&'(/0! 354798:; !"#$#$%&'(&'()*+,*+,-./0123456789:; <=>AA wrapper for instances of Binary. This can be written, but not  read (since we wouldn't know what type to decode). ?@2A monad which hides an additional value which the " A instances should be able to get at. This is used, for example,  by  CodedValue, to make the View available to instances. ACGiven a function which converts an (a) to something we can already  convert to binary, return a # function to be used in  instances of " (a). BCGiven a function which converts something we can already read from  binary to (a), return a $" function to be used in instances  of " (a). CLike A5, but the conversion function is also allowed to use  . DLIke B5, but the conversion function is also allowed to use  . EFGHIJWrite a ?> <=>?@ABCDEFGHIJABCD@EFIGH>?J<=<==>??@ABCDEFGHIJ +KLMN?Newtype alias for things we want to encode or decode via their   or   representation. O&Some alternative the user provides in V in the  U9 instance, to indicate one particular alternative we use  when reading from binary. P Value the U instance generates from W to 4 indicate how we should write some value to binary. QR@Newtype alias you need to wrap around something which instances  U5 to get an actual HasBinary instance. You will then  need something like this: ) instance Monad m => HasBinary a m where  writeBin = mapWrite Wrapped  readBin = mapRead wrapped STUBA class allowing you to handle types with up to 256 alternatives. ? If this all seems to complicated, look at the source file and  the example for the "Tree" data type. V8For each alternative in the type, provide a recognition  9, and a way of mapping that alternative to the (wrapper) W1Map a (wrapper) to the corresponding recognition  & and the type within the alternative. X=This is a rather inelegant way of encoding a type with up to B 5 alternatives. If 5 is too many, use () for the others, if too  few use U . In fact U is probably better  anyway. YZ[\]^ This is an newtype2 alias for integral types where the user promises = that the value will be non-negative, and so saves us a bit. > This is what we use for character data incidentally, so that  ASCII characters with codes <&128 can be encoded (as themselves) in  just one byte. _`* value for constructor with no arguments. a( value for constructor with 1 argument. b) value for constructor with 2 arguments. c) value for constructor with 3 arguments. d) value for constructor with 4 arguments. KLMNOPQRSTUVWXYZ[\]^_`abcdX]\[ZYUVWRSTPQ`abcdNOKLM^_KLMLMNOOPQQRSTSTUVWVWX]\[ZYYZ[\]^__`abcd e9The Bool is a sign, with True meaning positive infinity. fefefef ghijkghijkghijkghijk lmnlmnlmnlmmn opqrstuvwx opqrstuvwx uvstwqropx oppqrrsttuvvwxyz{|}~yz{|}~yz{|}~yz{|}~  Option processing C%Get a path within the top directory. ... 4Send a string to the debug file. This differs from = debug, in that debug will Haskell-escape the string and add B a newline, while just writes to the file with no interpretation. 6show something to log file if debugging is turned on. .If an action fails print out a message before  propagating message. &always show something to the log file ,always print out a message if action fails. $Miscellaneous Monads, in particular Computation.WithError. .;coerce or use the supplied break function (to be used with  ExtendedPrelude.addFallOut) % The value is evaluated immediately. ;coerce or use the supplied break function (to be used with  ExtendedPrelude.addFallOut) 6The first argument is prepended to any error message. % The value is evaluated immediately. ;coerce or use the supplied break function (to be used with  ExtendedPrelude.addFallOut) ;coerce or use the supplied break function (to be used with  ExtendedPrelude.addFallOut) 6The first argument is prepended to any error message. //+DReturn portion up to (not including) first %, and portion after it. &Converts character to representation. -Like HasAddDelayer, but allows an IO action. EInstances of HasAddDelayer are event sources to which you can attach F a delayer, to indicate you are currently not interested in events. 0 when not delay'd.  Gcarry out the given action preventing the Delayer from doing anything.    ;If this DelayedAction is queued, remove it from the queue.               0Converts a String into its UTF8 representation. AConverts a UTF8 representation of a String back into the String, & catching all possible format errors. >Example: With the Haskell module Control.Monad.Error, you can  instance this as 0 (fromUTF8WE :: String -> Either String String) ? to get a conversion function which either succeeds (Right) or " returns an error message (Left). >return the number of the top bit which is zero, or -1 if they / are all zero, for a number between 0 and 255. A(ones i) is number with binary representation 1 written i times.    Like / but provides an error message indicating what  types are getting confused.  !"#$FConstruct a TypeRep for a type or type constructor with no arguments. J The first string should be the module name, the second that of the type.  !"#$ !"#$ !"#$What the Prelude Forgot R%&'()9indicates that an Ord or Eq instance really does need to  take everything into account. *+,-./FA function indicating we want to escape from the current computation. 0123456CRemove trailing spaces (We try to avoid reconstructing the string, " on the assumption that there aren't often spaces) 7Remove leading spaces 8#Remove trailing and leading spaces 9CPad a string if necessary to the given length with leading spaces. :>returns Just a if we can read a, and the rest is just spaces. ;The .7 operator lifted to monads. So like ., the arguments = are given in the reverse order to that in which they should  be executed. <=>?@ABCDEFGKinsertOrdAlternate is similar to insertOrd except (1) it takes an Ordering D argument; (2) if it finds an argument that matches, it applies the J given function to generate a new element, rather than inserting another. 8 The new generated element should be EQ to the old one. HIJKLAWe split at the first occurrence of the character, returning the  string before and after. MNOPQRCreturns remainder if the first list is a prefix of the second one. Snode is the tree' s node type. E state is folded through every node of the tree (and is the result). E We search the tree in depth-first order, applying visitNode at each  node to update the state. H The ancestorInfo information comes from the ancestors of the node. EG I if we are visiting node N1 which came from N2 the ancestorInfo given to ? visitNode for N1 will be that computed from visitNode for N2. / For the root node, it will be initialAncestor T!Like treeFold, but using monads. U#Produce an equality function for b V!Produce a compare function for b WIntended use, EG  addFallOut (  break ->  do . -- blah blah (normal IO a stuff) -- ! when (break condition)  (break You can't do that there ere) 2 -- more blah blah, not executed if there's an break -- # return (value of type a)  ) X9Like addFallOut, but returns a WithError object instead. YZ[\]^_`abcde'Remove duplicate elements from a list. fJRemove duplicate elements from a list where the key function is supplied. gJRemove duplicate elements from a list where the key function is supplied. K The list order is preserved and of the duplicates, it is the first in the  list which is not deleted. hCLike uniqOrd, except that we specify the output order of the list. H The resulting list is that obtained by deleting all duplicate elements 8 in the list, except the first, for example [1,2,3,2,1,4] will go to  [1,2,3,4]. iEIf there are two elements of the list with the same (a), return one,  otherwise Nothing. jIReturn Just True if all the elements give True, Just False if all False, ' Nothing otherwise (or list is empty). k+If all the elements are equal, return True lAA merge function for combining an input list with some new data,  where both are pre-sorted.  input list  list to combine with input list 7comparison function. a and b should be already sorted ? consistently with this comparison function, and it is assumed 3 that each list is EQ to at most one of the other. 9Merge function applied to each element of a and b, where  we pair EQ elements together. 'Output of merge function concatenated. H%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklH6789;=>DEFGH:OPQR234501<IJKLMN?@ABCSTUV/WXZY[\]^-.+,abc_d`'(%&)*ehfgjkilH%&&'(()**+,,-../0112334556789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl mnopq  r mnopqrqrmponmponnopqr s  tuvwxstuvwxstuvwxstuvwxyARead something, but throw an exception if there is an attempt to  read too many characters. !the maximum number of characters z=Time this code was written. We bung this definition in here D because this module needs GHC-specific access to ClockTime anyway. yzyzyz5 Conversion to/ from binary. G !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdyzOutputting Messages {|}~Display an alert Display an error Display a warning message !Confirm something with the user. $Display some informational message. CIf True, indicates that the flag corresponding to a graphical mode B has been set. This is used occasionally for deciding whether to : ask the user something on stdout, stdin or via a window. :queries the user on stdout getting the answer from stdin. : Leading and trailing spaces are trimmed from the result. HDisplay a series of one-line messages, separated by newline characters, I attempting to combine them together and eliminate duplicates as much as H possible. If other identical messages come in while the error message ' is being delayed, we throw them away. {|}~{|}~{|}~|}~ !Convert a ClockTime to a String.  This has the format  < optional sign><digits>+<digits> H where the digits encode two integers N1 and N2 (in order) representing B the time elapsed since 00:00:00 UTC on 1 Jan 1970. This will be  N1 + (N2 / 10^12) seconds. 0<=N2<10^12. 3Convert a validly formatted String to a ClockTime. ! !"#$   "Generate Unique Strings %&'()'readUniqueStringSource is used by types/ CodedValue.hs to export values. CcreateUniqueStringSource is the inverse of readUniqueStringSource. *:Create non-conflicting string which cannot be produced by 9 newUniqueString. This is useful for exceptional cases. D We add this by adding a character with integer value 0 at the end.   # +,     -$.% /0123456&Store information by key. .789:;<IListRegistryContents will not be implemented for the untyped registries. this is atomic. =look up the element given by the first key, and if it exists C delete it, replacing it with the element given by the second key. =>?@ABC!!!' DEFGH(IJKLM)GFor now we just do this naively, with a Registry. Since the names are J generated sequentially a dynamic array would be more efficient, perhaps. NOP* QBConverts a list to a queue with the first element of the list the  first element of the queue. Inverts listToQueue   +0A lock which can be globally or locally locked.  At any time, a VSem3 is either globally locked once, or locally locked J zero or more times. Global locks always take priority over local locks. RSTUVW@1 if the vSem is globally locked, otherwise the number of local  locks.  Creates a . "Perform an action while locking a  locally. "Perform an action while locking a  globally. XAcquire a local lock on a  Release a local lock on a  YAcquire a global lock on a  ZRelease a global lock on a  ,$[DA class for things (in particular Source and SimpleSource) that can B output via sinks. Each sink source is supposed to have a unique A x, containing a representation of the current value, and delta, A containing the (incremental) updates which are put in the sink. < Only the addOrdSink function must be defined by instances.     \]^ _`aIThe HasInvalidate class represents information sources which can be told  " No more, I'm not interested." b)Returns True if sink is still interested 'Creates a new sink with its own SinkID ;Creates a new sink with a given SinkID. This allows us to ; invalidate lots of sinks just by invalidating one sinkID. CPut a value into the sink, returning False if the sink id has been  invalidated. LPut a list of values into the sink, returning False if the sink id has been  invalidated (Convert a sink from one type to another AAnother version which allows a transformation function to filter  certain elements IA version which allows an IO action, which had better not take too long. JAdd an action to a sinkSource which is performed until the action returns  False. DCreates a new sink which executes actions in a parallelExec thread. DCreates a new sink which executes actions in a parallelExec thread, H but allow the function generating these actions to be specified later,  via the returned command. c#Or we can do so with HasInvalidate                   -Simple Events @ !"#$defgh%i&j'()*+k,lBattachClientTemporary is like attach, but additionally returns an H IO action which can be used to prevent any client being run after that  IO action is called. mFmkTemporaryClient is used to map the client by attachClientTemporary. nHmkComputedClient computes a client using a value to be supplied via the I returned function. (Hopefully soon after, because of course the source  will block until it is.) oFmkComputedClient is like mkComputedClient, but still more dangerously , allows an IO action to compute the client. GIt also allows the supplied function to provide Nothing, indicating no  client. pDmkStaticClient is used by various functions to create from a client > a single static client which tracks its state using an MVar. qImkStaticClientGeneral is like mkStaticClient except that it also returns < an action which determines if the client is still running. -./r0s1t231Fold a Source so that it can carry state around. u45A Source combinator which "flattens" lists of updates. v67w89:;/Get the current contents of the source, but don't specify any other  action. <Pair two SimpleSource'5s. This is probably better than using >>=, since it = does not require reregistering with the second SimpleSource =ADoes a similar job to pairSimpleSources, so that the sources run  parallel. >@For each update d, pairs it with its predecessor (given first). E For the very first update, a value is given based on the initial x,  mapped by the given function. ?)Like mkHistorySource but for SimpleSource's; the x returns the initial  value to compare with. @"filter out consecutive duplicates A0Fold a Simple Source, so that it carries state. * The state is recomputed for each client. B.replaces the first value of the SimpleSource. CERun the specified actions for the source, using the given SinkID and  in the ParallelExec thread. G The x -> IO () action is guaranteed to be performed before any of the  d -> IO () actions. DAOutputs information about what comes through the source, turning B it into a String with the supplied function. (This is done once  for each active client.) EAOutputs information about what comes through the source, turning B it into a String with the supplied function. (This is done once  for each active client.) xFEUsed when we are worried that a SimpleSource recursively constructed C by mapIOSeq, >>= and friends may actually try to call itself, and ; so loop forever. The Strings identify the SimpleSource,  and so the [String]9 is effectively a backtrace of the TSems, revealing what 5 chain of simple sources might have caused the loop. yG* !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFG*&%'()+$*,-./01234675"#89 !;>?@<=B:CDEFGA* !!"##$%&'()*+,-./0123456789:;<=>?@ABCDEFG.HIJz{|K}~L2old field name, preserved here for compatibility. MNOPQRSTJReplace a SimpleSource by another which comes with a switch-off function, + which temporarily blocks further updates. L The action returned by the switch-off function switches the source back on  again. UDReplace a SimpleSource by another which mirrors it, but only copies * from it once, hopefully saving CPU time. $ The IO action stops the mirroring. VDReplace a SimpleSource by another which mirrors it, but only copies B from it once, hopefully saving CPU time. In addition, block all . update while the Delayer is delaying things. HIJKLMNOPQRSTUVLKJMNOHIPQRSTUVHIIJKLMNOPQRSTUV/WXYZ'Encodes the updates to a variable set. 8 BeginGroup does not actually alter the set itself, but M indicate that a group of updates is about to begin, terminated by EndGroup. R This prevents the client from trying to recalculate the state after every single  update.  BeginGroup/$EndGroup may be nested (though I don' t have any application for that  yet). [\]^_`abc!Create a new empty variable set. d.Create a new variable set with given contents e#Update a variable set in some way. f&Set the elements of the variable set. ghijklHCreates a VariableSetSource whose elements are the same as those of the  corresponding list. ?HasKey specifies the ordering to use (without committing us to ' a particular Ord instance elsewhere). WXYZ[\]^_`abcdefghijklab_`Z^]\[XYcdefWghijklWXYYZ^]\[[\]^_``abbcdefghijkl0mn0We recycle the VariableSetUpdate type for this. opFDescribes a map update. For DelUpdate, the second parameter (the one 2 of type elt) is irrelevant and may be undefined. GThe Bool indicates whether the operation was successfully carried out. ; We block updating a value which is already in the map, or  deleting one that isn't. q!Create a new empty variable map. r.Create a new variable map with given contents stCUpdate a variable map in some way. Returns True if the update was D sucessful (so for insertions, the object is not already there; for % deletions the object is not there). uvwxyJGiven a variable map and conversion function, produce a VariableSetSource z{|}~GUnlike VariableSet, the contents of a variable map are not returned in J concrete form but as the abstract data type VariableMapData. We provide  functions for querying this. mnopqrstuvwxyz{|}~pnomqrstuvwxyz{|}~mnoopqrstuvwxyz{|}~12Return the close action. N attachListOp :: ParallelExec -> VariableList a -> ListDrawer a -> IO (IO ()) 3(setSource2,block) <"- blockableVariableSet setSource1 I returns a setSource2 which is in one of two states. In one state it is J blocked, and empty. In the other, it is unblocked, and its contents are G the same as those of setSource1. Initially it is blocked. To switch 4 from one to the other the block function is used. " block True" blocks  the set source; " block False"+ unblocks it. Blocking if we are already J blocked, or unblocking if we are already unblocked, is harmless and does  nothing. FThis somewhat baroque function is required for arc sets from folders. I I have wasted a couple of days trying to think of a more elegant way of  doing this ... 4Beffectively a list with a pointer in the middle which can only be > moved right. The list should always be in increasing order. huffmanFold op l I where op is associative, l is a nonempty monotonically increasing list, F and op has the property that (x1>=x2,y1>=y2) => (op x1 y1>=op x2 y2) H computes the fold of l with op, by repeatedly folding the smallest two . elements of the list until only one remains. ApointList makes a new pointed list with the pointer at the left. GremovePointed gets the first element of a PointedList. If the pointer ; is at the start of the list, it is moved to the new head. EinsertAndMovePointer inserts an element to the right of the pointer, I and moves the pointer after it. It does this maintaining the invariant J that the pointed list is ordered, and we assume that all elements to the = left of the pointer are not more than the inserted element. FIf the pointer reaches the end of the list, we instead of returning a ; PointedList, return a queue containing the list contents. 67869:6;<6=>6=?6=@67A67BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_``abccdefghijklmnopqrst u u v v w x y z { | } ~                            !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTTUUVVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !!!!!!!!!!!"""""""""""###########4$$$$$%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& & ' ' ' ''''()))))********* +!+"+#+$+%+&,',(,),*,+,,,-,.,/,0,1,2,3,4,5,6,7,8,9,:,;,<,=,>,?,@,A-B-C-D-E-F-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z-[-\-]-^-_-`-a-b-c-d-e-f-g-h-i-j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y/z/{/{/|/}/~////////////////0000000000000000001111222222222222222333333334CGJK\6 w666                 f   %1    2   !"#$%&'()*+,-!.!.!!/!/!0!1!2!3"""4"5"6"7##89$%:%:%% %;%<%=%>&?&&@&@&&&A&B&C&D&E&F&G' 'H'I'J' (K(K(L(M(N))O)P*+!+Q+Q+R+S+T+U+V+W,',0,X, ,1,Y,Z,[,\-G-]-]-^-_-H-I-`-a-b-c-d-e-f-g-h-i-j-k-l-m-n.m.o.p.n.q.r.o.s.t.u/v/v/w/x/y/z0{0{0|0}000y0~1233333344444uni-util-2.2.0.0 Util.DynamicsUtil.Computation Util.Thread Util.Store Util.HostNameUtil.VisitedSet Util.Bytes Util.BinaryUtil.BinaryUtilsUtil.BinaryInstances Util.IntPlusUtil.ReferenceCount Util.DeepSeqUtil.QuickReadShow Util.IOExtras Util.Cache Util.LineShow Util.MaybesUtil.FileNames Util.ObjectUtil.CompileFlags Util.WBFiles Util.DebugUtil.CommandStringSub Util.Delayer Util.UTF8Util.ExtendedPrelude Util.MyersUtil.UnionFindUtil.BinaryExtras Util.MessagesUtil.ClockTimeToStringUtil.AtomStringUtil.UniqueStringUtil.ICStringLenUtil.ThreadDict Util.TSem Util.RegistryUtil.UniqueFile Util.TempFileUtil.NameMangle Util.Queue Util.VSem Util.Sink Util.SourcesUtil.BroadcasterUtil.VariableSetUtil.VariableMapUtil.KeyedChangesUtil.VariableListUtil.VariableSetBlocker Util.HuffmanUtil.BinaryAllbase Data.TypeableTypeableControl.OldExceptiontryGHC.ConcThreadId Control.MonadunlesswhenforeverTypeReptypeOfStorenewStore takeStoregetFullHostName VisitedSet newVisitedSet isVisitedBytesByteputByteToBytesgetByteFromBytesputBytesToByteshPutBytehGetByte hPutBytes hGetBytes bytesMalloc bytesReAlloc bytesAlloca bytesFreewithBytesAsCCharsmkBytes unMkBytes compareBytes StateBinAreaBinArea HasBinarywriteBinreadBin ReadBinaryreadByte readBytes WriteBinary writeByte writeByteshWritehReadtoWriteBinaryHandletoReadBinaryHandle writeToBytes writeToBytes0mkEmptyBinArea closeBinAreawriteBinaryBinArea readFromBytes mkBinAreacheckFullBinAreareadBinaryBinArealiftWriteBinaryliftReadBinary WrapBinary WrappedBinaryArgMonadmapWritemapRead mapWriteIO mapReadIO mkArgMonad toArgMonadwriteBinaryToArgMonadreadBinaryToArgMonad runArgMonadhWriteWrappedBinaryViaEnumenumReadShowUnWrapWrappedwrapped HasWrapperwrapsunWrapChoice5Choice4Choice3Choice2Choice1Unsignedwrap0wrap1wrap2wrap3wrap4IntPlusinfinityRefCount newRefCountnewLinkedRefCountaddRefremRefDeepSeqdeepSeq$!! QuickShow quickShowWrapShow QuickRead quickReadWrapReadqReadqShowcatchEOFcatchAlreadyExistscatchDoesNotExistcatchErrorCalls hGetLineRsimpleModifyIORefCachenewCache getCachedLineShow fromMaybesfileSep recordSeptopDirthisDirtrimDir splitName combineNames breakName unbreakNamesplitExtensionunsplitExtensionnewIntObjectobjectIDObjectID newObject staticObjectisDebug uniVersionArgValue BoolValueIntValue StringValueArgTypeBOOLINTSTRINGProgramArgument optionName optionHelp defaultValargType getWishPathgetEditorString getMMiSSDTDgetMMiSSAPIDTDgetHostsgetDaVinciPathgetGnuClientPathgetToolTimeOutgetTOP getTOPPathgetPort getXMLPort getWorkingDirgetDebugFileName getServerFile getServerDir getServerIdgetDaVinciIcons getServergetUser getPasswordgetCouplingPortgetCouplingDirusualProgramArguments getArgString getArgInt getArgBoolsetAlternateArgsparseArgumentsparseArgumentsRequiringparseTheseArgumentsparseTheseArgumentsRequiring debugStringdebugdebugAct@: alwaysDebugalwaysDebugAct@@: wrapError HasConfig$$ configUsedConfigMonadWithError WithErrorAnswerdone#raise propagate tryUntilOKhasErrorhasValue toWithErrorisError fromWithErrorfromWithError1 mapWithError mapWithError'mapWithErrorIOmapWithErrorIO' pairWithError listWithErrorcoerceWithErrorcoerceWithErrorIOcoerceWithErrorStringIOcoerceWithErrorOrBreakIOcoerceWithErrorOrBreakIOPrefixcoerceWithErrorOrBreakcoerceWithErrorOrBreakPrefixconcatWithErrorswapIOWithErrorexceptionToErrormonadifyWithErrortoMonadWithError foreverUntilforeachincasewhile configureconfigCompiledFormatStringcompileFormatString bashEscape emacsEscaperunFormatStringdoFormatString HasDelayer toDelayerHasAddDelayerIO addDelayerIO HasAddDelayer addDelayerDelayer DelayedAction newDelayerdelaynewDelayedAction delayedActcancelDelayedActtoUTF8 fromUTF8WETypeable6_000111typeOf6_000111Typeable5_00111 typeOf5_00111Typeable4_0111 typeOf4_0111 Typeable3_111 typeOf3_111 Typeable2_11 typeOf2_11 Typeable1_1 typeOf1_1Dyn fromDynamic fromDynamicWEtoDyncoercecoerceIO typeMismatchdynCast dynCastOpt mkTypeRepOrdIO compareIOEqIOeqIOFullGeneralCatchFnGeneralBreakFnBreakFn HasMapMonadic mapMonadic HasCoMapIOcoMapIOHasMapIOmapIO trimTrailing trimLeading trimSpaces padToLength readCheckmonadDot mapPartialM simpleSplitfindJust deleteFirstdeleteFirstOptdeleteAndFindFirstdeleteAndFindFirstOpt divideList insertOrdLt insertOrdGt insertOrdinsertOrdAlternatebottom splitByChar unsplitByCharunsplitByChar0 splitToChar splitToElemsplitToElemGeneralchoppairListlastOptisPrefixtreeFold treeFoldMmapEqmapOrd addFallOut addFallOutWE simpleFallOutaddSimpleFallOut mkBreakFn newFallOut isOurFallOutaddGeneralFallOutourExcepToMessshowException2catchOurExcepscatchAllExcepserrorOurExcepsbreakOtherExcepsuniqOrd uniqOrdByKeyuniqOrdByKeyOrder uniqOrdOrder findDuplicateallSameallEqgeneralisedMerge DiffElementInSecondInFirstInBothdiffdiff2 UnionFind newElementtoValueunionisSame sameElementshReadLtdinitialClockTimeMessFnsalertFnerrorFn warningFn confirmFn messageFnhtkPres alertMess errorMess warningMess confirmMess messageMess htkPresent textQuery setMessFns errorMess2clockTimeToStringstringToClockTimeStr StringClasstoString fromString fromStringWE AtomStringfirstAtomStringfromStringWEHackedfromStringErrormkFromStringWEUniqueStringCounterUniqueStringSourcenewUniqueStringSourcenewUniqueStringreadUniqueStringSourcecreateUniqueStringSourcemaxUniqueStringSourcesfirstUniqueStringCounterstepUniqueStringCounterfirstUniqueString newNonUniqueUTF8 ICStringLen mkICStringLenmkICStringLenExtrawithICStringLenbytesToICStringLenbytesFromICStringLentouchICStringLenreadICStringLenwriteToICStringLenDurationaftereveryusecsmsecssecsmins goesQuietly forkIODebug forkIOquietmapMConcurrentmapMConcurrentExcepmapMConcurrent_ hashThreadId ThreadDict newThreadDictwriteThreadDictreadThreadDictmodifyThreadDictTSemnewTSemsynchronizeTSemUntypedLockedRegistryLockedRegistryUnsafeUnsafeRegistryGetSetRegistryDyn setValueAsDyn getValueAsDynUntypedUntypedRegistryRegistryKeyOpsRegistrydeleteFromRegistryBooldeleteFromRegistrylistKeysListRegistryContentslistRegistryContents$listRegistryContentsAndEmptyRegistrylistToNewRegistryGetSetRegistrytransformValue getValueOptgetValuesetValue NewRegistry newRegistry emptyRegistrygetValueDefaultgetRegistryValuegetRegistryValueSafe changeKeylockedRegistryCheck getValueSafe getValue'UniqueFileStoreUniqueFileCounterinitialUniqueFileCounterstepUniqueFileCounternewUniqueFileStoreensureDirectories getFilePath newTempFile NameMangler MangledNamenewNameManglernewMangledNamereadMangledNameQueueemptyQ singletonQisEmptyQinsertQremoveQ insertAtEndQ listToQueue queueToListVSemnewVSemsynchronizeLocalsynchronizeGlobal acquireLocal releaseLocal ParallelExec CanAddSinks addNewSinkaddNewSinkGeneraladdNewSinkVeryGeneraladdNewSinkWithInitialaddNewQuickSinkaddNewQuickSinkGeneral addOldSinkSinkSinkID HasInvalidate invalidate newSinkIDnewSinknewSinkGeneralputSinkputSinkMultiple coMapSink coMapSink' coMapIOSink' addNewActionparallelExecVSemnewParallelExec parallelExecnewParallelSinknewParallelDelayedSinkHasSimpleSourcetoSimpleSource HasSourcetoSource SimpleSourceUpdaterClientSource staticSourcestaticSourceIOvariableSourceapplyToUpdatervariableGeneralSource attachClientmap1map1IOmap2filter2 filter2IO foldSource foldSourceIO stepSource flattenSourcechoose seqSourcestaticSimpleSourcestaticSimpleSourceIOmapIOSeq readContentspairSimpleSourcessequenceSimpleSourcemkHistorySourcemkHistorySimpleSourceuniqSimpleSourcefoldSimpleSourceIOchange1addNewSourceActionstraceSimpleSource traceSourcenoLoopSimpleSourcemkIOSimpleSourceBroadcasterClass broadcastSimpleBroadcaster BroadcasterGeneralBroadcasternewBroadcasternewSimpleBroadcasternewGeneralBroadcasterapplySimpleUpdateapplySimpleUpdate' applyUpdateapplyGeneralUpdateswitchOffSimpleSourcemirrorSimpleSourcemirrorSimpleSourceWithDelayerVariableSetSource VariableSetVariableSetUpdateEndGroup BeginGroup DelElement AddElementKeyedHasKeytoKeynewEmptyVariableSetnewVariableSet updateSetsetVariableSetemptyVariableSetSourcemapVariableSetSourceIO'concatVariableSetSourcemapVariableSetSourcesingletonSetSourcelistToSetSource VariableMapVariableMapUpdateVariableMapDatanewEmptyVariableMapnewVariableMapnewVariableMapFromFM updateMap lookupMaplookupWithDefaultMap mapToListmapToFMmapToVariableSetSourceaddToVariableMapdelFromVariableMapvariableMapToListlookupVariableMapgetVariableMapByKey KeyedChangesnewKeyedChangessendKeyedChangesdeleteKeyedChange VariableList attachListOp ListDrawernewPossetPosdelPosredrawcoMapListDrawermap2ListDraweremptyVariableList singletonListnewVariableListFromSetnewVariableListFromListcatVariableListsBlockIDBlocker newBlockernewBlockerWithPreAction newBlockID openBlocker closeBlockerblockVariableSet huffmanFoldcompareBytesPrimthrowEOFbyteslennextGHC.IO.Handle.TypesHandletoWriteBinaryHandleDebugtoReadBinaryHandleDebug bracketDebugghc-prim GHC.TypesInt ensureBinArea checkBinAreaIOGHC.ReadReadGHC.ShowShowGHC.BaseStringTreeNodeLeafWrap CodedListencodeIntegraldecodeIntegral encodeWord decodeWord bitsInByte bitsPerBytetopBitmasknextBitFiniteInfinite mkReadsPrec mkShowsPrec catchGeneral splitName1defaultOptions ParseStateParsedArgumentsvalOf defaultPortdefaultXMLPortdefaultCouplingPort showArgType parseArgValue showArgValuemakeParsedArgumentsparsedArguments getArgValuemismatchforceParseArgumentsnewAlternateArgs alternateArgsgetArgsparseTheseArgumentsRequiring' printToErr openDebugFile debugFile wrapErrorIOValueErrorcatchall FormatItemEscaped Unescaped splitToDollarprependLiteralcompileFromEscapemapEscapeFunctionmkEscapeFunction chbashEscape chEmacsEscapetoOctal DelayerState delayCountdelayedActionsoIdaction beginDelayendDelayemptyDelayerStatetopZero8onesGeneralFallOutExcepgeneralFallOutIda FallOutExcep fallOutIdmesssimpleFallOutIdnewGeneralFallOutalgbalgclcssdiffST2value contentsRefheadRefgetHead messFnsMVar getMessFn getMessValuedefaultMessFns defaultAlert defaultErrordefaultWarningdefaultConfirmdefaultMessagependingErrorMessagesMVarclearPendingErrorMessagesFromStringExcep AtomSourceemptyAtomSource theAtomSourcemkAtomreadAtomprintableCharsStrprintableCharsLenprintableCharsArrtoStringUniqueStringCountercreateICStringLen getThreadId ThreadInfolabelthreadInfoDict tryAcquirereleaseLockedObjfromDynamicMessagetoObjfromObjtakeValputVallockedFallOutIdlockedCheckBreak directoryalreadyExistsRegistry createDirActTempFileSource fileStore fileSourcetempFileSource nameSourcefromMangledName VSemState queuedGlobals queuedLocals nLocalLocksvSemAct acquireGlobal releaseGlobalsinkIDoID interested isInterested$fHasInvalidateSink SourceDataxclientcombineClientsattachClientTemporarymkTemporaryClientmkComputedClientmkComputedClientIOmkStaticClientmkStaticClientGeneral coMapClient filterClientfilterClientIO foldClientIO flattenClient seqSourceIO noLoopSource mkIOSource simpleSource updateAct3source updateActsource'updater updateAct2VariableSetDataunKeyliftupdate $fEqKeyedVariableMapSet variableMap mkElement6$fHasSourceVariableMapVariableMapDataVariableMapUpdateregistry setSource getBlockEntryblockableVariableSet PointedList pointList removePointedinsertAndMovePointer