!6ʚ      !"#$%&'()*+,-./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 TUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~,(c) Dominic Steinitz 2005, Warrick Gray 2002#BSD-style (see the file ReadMe.tex)!dominic.steinitz@blueyonder.co.uk experimentalportableSafe=?AHTTPACut up a string into 72 char lines, each line terminated by CRLF.Safe=?See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?1 HTTPcrlf) is our beloved two-char line terminator.HTTPlf; is a tolerated line terminator, per RFC 2616 section 19.3.HTTPsp$ lets you save typing one character.HTTPsplit delim ls# splits a list into two parts, the delim0 occurring at the head of the second list. If delim isn't in ls, Nothing is returned.HTTPtrim str. removes leading and trailing whitespace from str.HTTP trimL str+ removes leading whitespace (as defined by ) from str.HTTP trimL str, removes trailing whitespace (as defined by ) from str.HTTPsplitMany delim ls removes the delimiter delim from ls.HTTPreadsOne f def str tries to  str-, taking the first result and passing it to f . If the  doesn't succeed, return def.HTTPdropWhileTail p ls" chops off trailing elements from ls until p returns False.HTTPchopAtDelim elt ls breaks up ls" into two at first occurrence of elt; elt is elided too. If eltE does not occur, the second list is empty and the first is equal to ls.HTTPEncode ! to a list of UTF8-encoded octetsCode-points in the U+D800-U+DFFF; range will be encoded as the replacement character (i.e. U+FFFD).oThe code is extracted from Cabal library, written originally Herbert Valerio Riedel under BSD-3-Clause licenseHTTPDecode  from UTF8-encoded octets.;Invalid data in the UTF8 stream (this includes code-points U+D800 through U+DFFF0) will be decoded as the replacement character (U+FFFD). See also  =Abstract representation of request and response buffer types.See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?FHTTPBufferOp encodes the I/O operations of the underlying buffer over a Handle in an (explicit) dictionary type. May not be needed, but gives us flexibility in explicit overriding and wrapping up of these methods.Along with IO operations is an ad-hoc collection of functions for working with these abstract buffers, as needed by the internals of the code that processes requests and responses.We supply three default BufferOp values, for String- along with the strict and lazy versions of  ByteString. To add others, provide BufferOp definitions for HTTPThe  BufferType class encodes, in a mixed-mode way, the interface that the library requires to operate over data embedded in HTTP requests and responses. That is, we use explicit dictionaries for the operations, but overload the name of the dicts themselves.HTTPstrictBufferOp is the  definition over  ByteStrings, the non-lazy kind.HTTP lazyBufferOp is the  definition over  ByteStrings, the non-strict kind.HTTPstringBufferOp is the  definition over Strings. It is defined in terms of strictBufferOp& operations, unpacking/converting to String when needed.  See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?QHTTPStreams should make layering of TLS protocol easier in future, they allow reading/writing to files etc for debugging, they allow use of protocols other than TCP/IP and they allow customisation.Instances of this class should not trim the input in any way, e.g. leave LF on line endings etc. Unless that is exactly the behaviour you want from your twisted instances ;)HTTP=This is the type returned by many exported network functions.HTTPhTrue => shutdown the connection when response has been read / end-of-stream has been reached. !$"#%&'() !$"#()&'%See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?t.HTTP HasHeaders~ is a type class for types containing HTTP headers, allowing you to write overloaded header manipulation functions for both Request and Response data types, for instance.1HTTPHTTP  HeaderNameX type, a Haskell data constructor for each specification-defined header, prefixed with Hdr% and CamelCased, (i.e., eliding the -I in the process.) Should you require using a custom header, there's the  HdrCustom constructor which takes a String argument.Encoding HTTP header names differently, as Strings perhaps, is an equally fine choice..no decidedly clear winner, but let's stick with data constructors here.dHTTP#MIME entity headers (for sub-parts)eHTTP0Allows for unrecognised or experimental headers.fHTTPThe Header' data type pairs header names & values.jHTTP3Header constructor as a function, hiding above rep.kHTTP headerMapL is a straight assoc list for translating between header names and values.lHTTPinsertHeader hdr val x inserts a header with the given header name and value. Does not check for existing headers with same name, allowing duplicates to be introduce (use n if you want to avoid this.)mHTTPinsertHeaderIfMissing hdr val x; adds the new header only if no previous header with name hdr exists in x.nHTTPreplaceHeader hdr val o replaces the header hdr with the value val, dropping any existing oHTTPinsertHeaders hdrs x appends multiple headers to x's existing set.pHTTPretrieveHeaders hdrNm x gets a list of headers with 1 hdrNm.qHTTPfindHeader hdrNm x looks up hdrNm in x3, returning the first header that matches, if any.rHTTPlookupHeader hdr hdrs# locates the first header matching hdr in the list hdrs.sHTTP$parseHeader headerNameAndValueString tries to unscramble a  header: value pairing and returning it as a f.tHTTPparseHeaders hdrs takes a sequence of strings holding header information and parses them into a set of headers (preserving their order in the input argument.) Handles header values split up over multiple lines.H-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstH./0fgjhi123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdelmopnqrstk-See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?xHTTPCookieh is the Haskell representation of HTTP cookie values. See its relevant specs for authoritative details.HTTPcookieToHeaders ck serialises Cookies to an HTTP request header.HTTPLTurn a list of cookies into a key=value pair list, separated by semicolons.HTTPcookieMatch (domain,path) ckD performs the standard cookie match wrt the given domain and path. HTTP processCookieHeaders dom hdrsHTTP headerToCookies dom hdr acc xyz{|}~ xyz{|}~Safe=?See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?XͰ!HTTPRequestNormalizerV is the shape of a (pure) function that rewrites a request into some normalized form.HTTPNormalizeRequestOptionsD brings together the various defaulting/normalization options over s. Use % for the standard selection of optionHTTPAn HTTP Response. The  instance of this type is used for message serialisation, which means no body data is output, additionally the output will show an HTTP version of 1.1 instead of the actual version returned by a server.HTTP RequestDatag contains the head of a HTTP request; method, its URL along with the auxillary/supporting header data.HTTP ResponseDatan contains the head of a response payload; HTTP response code, accompanying text description + header fields.HTTP/For easy pattern matching, HTTP response codes xyz are represented as (x,y,z).HTTPAn HTTP Request. The ^ instance of this type is used for message serialisation, which means no body data is output.HTTP.might need changing in future 1) to support  uri in OPTIONS request 2) transparent support for both relative & absolute uris, although this should already work (leave scheme & host parts empty).HTTP+The HTTP request method, to be used in the r object. We are missing a few of the stranger methods, but these are not really necessary until we add full TLS.HTTP"Parse the authority part of a URL. RFC 1732, section 3.1: //<user>:<password>@<host>:<port>/<url-path> Some or all of the parts "<user>:<password>@", ":<password>", ":<port>", and "/<url-path>" may be excluded.HTTPDeprecated. Use HTTP+A default user agent string. The string is "haskell-HTTP/$version" where $version% is the version of this HTTP package.HTTP3The version of this HTTP package as a string, e.g.  "4000.1.2". This may be useful to include in a user agent string so that you can determine from server logs what version of this package HTTP clients are using. This can be useful for tracking down HTTP compatibility quirks.HTTP'mkRequest method uri' constructs a well formed request for the given HTTP method and URI. It does not normalize the URI for the request _nor_ add the required Host: header. That is done either explicitly by the user or when requests are normalized prior to transmission.HTTPgetRequestVersion req3 returns the HTTP protocol version of the request req. If Nothing, the default  can be assumed.HTTPsetRequestVersion v req& returns a new request, identical to req#, but with its HTTP version set to v.HTTPgetResponseVersion rsp4 returns the HTTP protocol version of the response rsp. If Nothing, the default  can be assumed.HTTPsetResponseVersion v rsp' returns a new response, identical to rsp#, but with its HTTP version set to v.HTTPGEncode a single Haskell Char to a list of Word8 values, in UTF8 format.)Shamelessly stolen from utf-8string-0.3.7HTTPKDecode a UTF8 string packed into a list of Word8 values, directly to String)Shamelessly stolen from utf-8string-0.3.7HTTP getAuth req< fishes out the authority portion of the URL in a request's Host header.HTTPnormalizeRequest opts req is the entry point to use to normalize your request prior to transmission (or other use.) Normalization is controlled via the NormalizeRequestOptions record.HTTPnormalizeUserAgent ua x req augments the request req with a User-Agent: ua header if req doesn't already have a a  User-Agent: set.HTTP!normalizeConnectionClose opts req sets the header Connection: close% to indicate one-shot behavior iff  normDoClose is True,. i.e., it then _replaces_ any an existing  Connection: header in req.HTTPnormalizeBasicAuth opts req sets the header Authorization: Basic... if the "user:pass" part is present in the " http://user:passWhost/path" of the URI. If Authorization header was present already it is not replaced.HTTPnormalizeHostURI forProxy reqh rewrites your request to have it follow the expected formats by the receiving party (proxy or server.)HTTP3Used when we know exactly how many bytes to expect.HTTPUsed when nothing about data is known, Unfortunately waiting for a socket closure causes bad behaviour. Here we just take data once and give up the rest.HTTPbA necessary feature of HTTP/1.1 Also the only transfer variety likely to return any footers.HTTPrMaybe in the future we will have a sensible thing to do here, at that time we might want to change the name.HTTPCRemove leading crlfs then call readTillEmpty2 (not required by RFC)HTTPRead lines until an empty line (CRLF), also accepts a connection close as end of input, which is not an HTTP/1.1 compliant thing to do - so probably indicates an error condition.HTTP catchIO a h[ handles IO action exceptions throughout codebase; version-specific tweaks better go here.XXSee LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=?dHTTPHStream overloads the use of |s, letting you overload the handle operations over the type that is communicated across the handle. It comes in handy for  Network.HTTP Request and Response<s as the payload representation isn't fixed, but overloaded.%The library comes with instances for  ByteStrings and StringV, but should you want to plug in your own payload representation, defining your own HStream( instance _should_ be all that it takes.HTTPThe ( newtype is a wrapper that allows us to make connections an instance of the Stream class, without GHC extensions. While this looks sort of like a generic reference to the transport layer it is actually TCP specific, which can be seen in the implementation of the 'Stream Connection' instance.HTTPopenTCPPort uri port4 establishes a connection to a remote host, using  getHostByNameQ which possibly queries the DNS system, hence may trigger a network connection.HTTPsocketConnection, like openConnection but using a pre-existing .HTTPChecks both that the underlying Socket is connected and that the connection peer matches the given host name (which is recorded locally).See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=? HTTP!Allows stream logging. Refer to   below. HTTPXWraps a stream with logging I/O. The first argument is a filename which is opened in  AppendMode.    See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=?HTTP(Exception handler for socket operations. See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=?HTTPESimple way to transmit a resource across a non-persistent connection.HTTPLike ), but acting on an already opened stream.HTTPhReceive and parse a HTTP request from the given Stream. Should be used for server side interactions.HTTPVery simple function, send a HTTP response over the given stream. This could be improved on to use different transfer types. !$"#%&'() See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=?HTTP simpleHTTP9 transmits a resource across a non-persistent connection.HTTPsimpleHTTP_debug debugFile req behaves like 2, but logs the HTTP operation via the debug file  debugFile.HTTPLike ), but acting on an already opened stream.HTTPsendHTTP hStream httpRequest transmits  httpRequest over hStreaml, but does not alter the status of the connection, nor request it to be closed upon receiving the response.HTTP*sendHTTP_notify hStream httpRequest action behaves like , but lets you supply an IO action to execute once the request has been successfully transmitted over the connection. Useful when you want to set up tracing of request transmission and its performance.HTTPreceiveHTTP hStream reads a  from the  hStreamHTTP respondHTTP hStream httpResponse transmits an HTTP  over the  hStream]. It could be used to implement simple web server interactions, performing the dual role to . See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=? HTTP#HTTP Algorithm# controls the digest algorithm to, MD5 or  MD5Session.0HTTP AuthorityL specifies the HTTP Authentication method to use for a given domain/realm; Basic or Digest.<HTTPwithAuthority auth req( generates a credentials value from the auth 0', in the context of the given request.hIf a client nonce was to be used then this function might need to be of type ... -> BrowserAction String=HTTPheaderToChallenge base www_auth tries to convert the WWW-Authenticate header www_auth into a & value. !"#$%&'()*+,-./0123456789:;<=0123456789:;#$%&'()*+,-./ !"=< See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)Safe=?$ BHTTP*HTTP proxies (or not) are represented via B=, specifying if a proxy should be used for the request (see )CHTTPDon't use a proxy.DHTTPUse the proxy given. Should be of the form "http://host:port", "host", "host:port", or "http://host". Additionally, an optional 0# for authentication with the proxy.HTTPenvProxyString; locates proxy server settings by looking up env variable  HTTP_PROXY? (or its lower-case equivalent.) If no mapping found, returns Nothing.HTTP proxyString tries to locate the user's proxy server setting. Consults environment variable, and in case of Windows, by querying the Registry (cf. registryProxyString.)FHTTPfetchProxy flg< gets the local proxy settings and parse the string into a ProxyV value. If you want to be informed of ill-formed proxy configuration strings, supply True for flg'. Proxy settings are sourced from the  HTTP_PROXYx environment variable, and in the case of Windows platforms, by consulting IE/WinInet's proxy setting in the Registry.GHTTPparseProxy str) translates a proxy server string into a Proxy value; returns Nothing if not well-formed.HTTP2tidy up user portion, don't want the trailing "@".BDCEFGBDCEFG See LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=?O0 HHTTPsimpleHTTP req transmits the  req by opening a direct5, non-persistent connection to the HTTP server that reqR is destined for, followed by transmitting it and gathering up the response as a 7. Prior to sending the request, it is normalized (via ). If you have to mediate the request via an HTTP proxy, you will have to normalize the request yourself. Or switch to using  instead. Examples: psimpleHTTP (getRequest "http://hackage.haskell.org/") simpleHTTP (getRequest "http://hackage.haskell.org:8012/")IHTTP Identical to H), but acting on an already opened stream.JHTTPsendHTTP hStream httpRequest transmits  httpRequest (after normalization) over hStreaml, but does not alter the status of the connection, nor request it to be closed upon receiving the response.KHTTP*sendHTTP_notify hStream httpRequest action behaves like J, but lets you supply an IO action to execute once the request has been successfully transmitted over the connection. Useful when you want to set up tracing of request transmission and its performance.LHTTPreceiveHTTP hStream reads a  from the  hStreamMHTTP respondHTTP hStream httpResponse transmits an HTTP  over the  hStream]. It could be used to implement simple web server interactions, performing the dual role to J.NHTTP$A convenience constructor for a GET .CIf the URL isn't syntactically valid, the function raises an error.OHTTP%A convenience constructor for a HEAD .CIf the URL isn't syntactically valid, the function raises an error.PHTTP%A convenience constructor for a POST .CIf the URL isn't syntactically valid, the function raises an error.QHTTP%A convenience constructor for a POST .It constructs a request and sets the body as well as the Content-Type and Content-Length headers. The contents of the body are forced to calculate the value for the Content-Length header.CIf the URL isn't syntactically valid, the function raises an error.RHTTPgetResponseBody responseX takes the response of a HTTP requesting action and tries to extricate the body of the  responseF. If the request action returned an error, an IO exception is raised.SHTTPgetResponseBody response_ takes the response of a HTTP requesting action and tries to extricate the status code of the  responseF. If the request action returned an error, an IO exception is raised.NHTTP URL to fetchHTTPThe constructed requestOHTTP URL to fetchHTTPThe constructed requestPHTTPURL to POST toHTTPThe constructed requestQHTTPURL to POST toHTTPContent-Type of bodyHTTPThe body of the requestHTTPThe constructed request-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstHIJKLMNOPQRS HIJKLMNOPQRSSee LICENSE fileBSD$Ganesh Sittampalam <ganesh@earth.li> experimentalnon-portable (not tested)None=>?@AMf;WHTTPWj is the enumerated list of events that the browser internals will report to a user-defined event handler.]HTTP BrowserEvent@ is the event record type that a user-defined handler, set via _, will be passed. It indicates various state changes encountered in the processing of a given c0, along with timestamps at which they occurred.HTTP RequestState is an internal tallying type keeping track of various per-connection counters, like the number of authorization attempts and forwards we've gone through.HTTPnumber of 401 responses so farHTTPnumber of redirects so farHTTPnumber of retries so farHTTP whether to pre-empt 401 responsedHTTP BrowserAction' is the IO monad, but carrying along a e.eHTTP BrowserStateJ is the (large) record type tracking the current settings of the browser.fHTTPdefaultCookieFilterO is the initial cookie acceptance filter. It welcomes them all into the store :-)gHTTPuserCookieFilter is a handy acceptance filter, asking the user if he/she is willing to accept an incoming cookie before adding it to the store.hHTTP addCookie c9 adds a cookie to the browser state, removing duplicates.iHTTPsetCookies cookies6 replaces the set of cookies known to the browser to cookies6. Useful when wanting to restore cookies used across x invocations.jHTTP getCookies: returns the current set of cookies known to the browser.kHTTPsetCookieFilter fn& sets the cookie acceptance filter to fn.lHTTPgetCookieFilter. returns the current cookie acceptance filter.HTTPLReturn authorities for a given domain and path. Assumes "dom" is lower casemHTTPgetAuthorities return the current set of  Authoritys known to the browser.pHTTPgetAuthorityGen( returns the current authority generatorqHTTPsetAuthorityGen genAct sets the auth generator to genAct.rHTTPsetAllowBasicAuth onOff, enables/disables HTTP Basic Authentication.tHTTPsetMaxAuthAttempts mbMax? sets the maximum number of authentication attempts to do. If Nothing, rever to default max.uHTTPgetMaxAuthAttempts+ returns the current max auth attempts. If Nothing!, the browser's default is used.vHTTPsetMaxErrorRetries mbMaxD sets the maximum number of attempts at transmitting a request. If Nothing, rever to default max.wHTTPgetMaxErrorRetries1 returns the current max number of error retries.HTTP2Retrieve a likely looking authority for a Request.HTTP)Asking the user to respond to a challengexHTTP browse act% is the toplevel action to perform a d. Example use: %browse (request (getRequest yourURL)).HTTP+The default browser state has the settings yHTTPgetBrowserStateH returns the current browser config. Useful for restoring state across ds.zHTTPwithBrowserAction st act performs act with e st.HTTPnextRequest act performs the browser action actO as the next request, i.e., setting up a new request context before doing so.{HTTPLifts an IO action into the d monad.|HTTP setErrHandlerf sets the IO action to call when the browser reports running errors. To disable any such, set it to const (return ()).}HTTP setOutHandlerl sets the IO action to call when the browser chatters info on its running. To disable any such, set it to const (return ()).HTTPsetAllowRedirects onOffU toggles the willingness to follow redirects (HTTP responses with 3xx status codes).HTTPgetAllowRedirects8 returns current setting of the do-chase-redirects flag.HTTPsetMaxRedirects maxCount sets the maxiumum number of forwarding hops we are willing to jump through. A no-op if the count is negative; if zero, the max is set to whatever default applies. Notice that setting the max redirects count does not, enable following of redirects itself; use  to do so.HTTPgetMaxRedirects= returns the current setting for the max-redirect count. If Nothing, the Network.Browser's default is used.HTTPsetMaxPoolSize maxCounta sets the maximum size of the connection pool that is used to cache connections between requestsHTTPgetMaxPoolSizeg gets the maximum size of the connection pool that is used to cache connections between requests. If Nothing, the Network.Browser's default is used.HTTP setProxy p will disable proxy usage if p is NoProxy. If p is Proxy proxyURL mbAuth, then proxyURLO is interpreted as the URL of the proxy to use, possibly authenticating via 0 information in mbAuth.HTTPgetProxyG returns the current proxy settings. If the auto-proxy flag is set to True, getProxy will perform the necessary HTTPsetCheckForProxy flg, sets the one-time check for proxy flag to flg. If TrueQ, the session will try to determine the proxy server is locally configured. See F for details of how this done.HTTPgetCheckForProxyP returns the current check-proxy setting. Notice that this may not be equal to True( if the session has set it to that via  and subsequently performed some HTTP protocol interactions. i.e., the flag return represents whether a proxy will be checked for again before any future protocol interactions.HTTPsetDebugLog mbFile turns off debug logging iff mbFile is Nothing . If set to  Just fStem=, logs of browser activity is appended to files of the form fStem-url-authority , i.e., fStemC is just the prefix for a set of log files, one per host/authority.HTTPsetUserAgent ua sets the current  User-Agent: string to uaT. It will be used if no explicit user agent header is found in subsequent requests.&A common form of user agent string is "name/version (details)". For example &"cabal-install/0.10.2 (HTTP 4000.1.2)". Including the version of this HTTP package can be helpful if you ever need to track down HTTP compatability quirks. This version is available via . For more info see  'http://en.wikipedia.org/wiki/User_agent.HTTP getUserAgent returns the current  User-Agent: default string.HTTPsetEventHandler onBrowserEvent configures event handling. If onBrowserEvent is Nothing/, event handling is turned off; setting it to  Just onEv causes the onEvi IO action to be notified of browser events during the processing of a request by the Browser pipeline.HTTPUThe default number of hops we are willing not to go beyond for request forwardings.HTTP>The default number of error retries we are willing to perform.HTTPTThe default maximum HTTP Authentication attempts we will make for a single request.HTTPXThe default setting for auto-proxy detection. You may change this within a session via setAutoProxyDetectB. To avoid initial backwards compatibility issues, leave this as False.HTTPrequest httpRequest tries to submit the   httpRequest, to some HTTP server (possibly going via a proxy, see f.) Upon successful delivery, the URL where the response was fetched from is returned along with the  itself.HTTPIInternal helper function, explicitly carrying along per-request counts.HTTP,The internal request handling state machine.HTTPIDefault maximum number of open connections we are willing to have active.HTTPReturn TrueC iff the package is able to handle requests and responses over it.HTTPuriDefaultTo a b? returns a URI that is consistent with the first argument URI a, when read in the context of the second URI bc. If the second argument is not sufficient context for determining a full URI then anarchy reins.fxyz{|}~ !"#$%&'()*+,-./0123456789:;BDCTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~fedBDCxyz0123456789:;mno&'()*+,-./ !"#$%pqrsvwtuklfgxyz{|}~jih|}]^_`abWXYZ[\c~{TUV !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{{|}~/0123           !  "     ! # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F E G H I      ! J K L M N OPPQRSTUVWXXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   %HTTP-4000.3.15-8YMxtGEgi4Z3m812A0U3IONetwork.BufferTypeNetwork.StreamNetwork.HTTP.HeadersNetwork.HTTP.CookieNetwork.HTTP.Base Network.TCPNetwork.StreamDebuggerNetwork.StreamSocketNetwork.HTTP.StreamNetwork.HTTP.HandleStreamNetwork.HTTP.AuthNetwork.HTTP.Proxy Network.HTTPNetwork.BrowserNetwork.HTTP.Base64Network.HTTP.MD5AuxNetwork.HTTP.Utils Paths_HTTPsetProxyNetworkBrowserBufferOpbuf_hGetbuf_hGetContentsbuf_hPut buf_hGetLine buf_empty buf_append buf_concat buf_fromStr buf_toStrbuf_snoc buf_splitAtbuf_spanbuf_isLineTerm buf_isEmpty BufferType bufferOpsstrictBufferOp lazyBufferOpstringBufferOp $fEqBufferOp$fBufferType[]$fBufferTypeByteString$fBufferTypeByteString0StreamreadLine readBlock writeBlockclose closeOnEndResult ConnError ErrorReset ErrorClosed ErrorParse ErrorMiscfailMisc failParsefailWithbindEfmapE$fErrorConnError$fShowConnError $fEqConnError HeaderSetter HasHeaders getHeaders setHeaders HeaderNameHdrCacheControl HdrConnectionHdrDate HdrPragmaHdrTransferEncoding HdrUpgradeHdrVia HdrAcceptHdrAcceptCharsetHdrAcceptEncodingHdrAcceptLanguageHdrAuthorization HdrCookie HdrExpectHdrFromHdrHostHdrIfModifiedSince HdrIfMatchHdrIfNoneMatch HdrIfRangeHdrIfUnmodifiedSinceHdrMaxForwardsHdrProxyAuthorizationHdrRange HdrReferer HdrUserAgentHdrAge HdrLocationHdrProxyAuthenticate HdrPublic HdrRetryAfter HdrServer HdrSetCookieHdrTE HdrTrailerHdrVary HdrWarningHdrWWWAuthenticateHdrAllowHdrContentBaseHdrContentEncodingHdrContentLanguageHdrContentLengthHdrContentLocation HdrContentMD5HdrContentRangeHdrContentTypeHdrETag HdrExpiresHdrLastModifiedHdrContentTransferEncoding HdrCustomHeaderhdrNamehdrValuemkHeader headerMap insertHeaderinsertHeaderIfMissing replaceHeader insertHeadersretrieveHeaders findHeader lookupHeader parseHeader parseHeaders$fShowHeaderName$fEqHeaderName $fShowHeaderCookieMkCookieckDomainckNameckValueckPath ckComment ckVersioncookiesToHeader cookieMatchprocessCookieHeaders $fEqCookie $fShowCookie $fReadCookieRequestNormalizerNormalizeRequestOptions normDoClose normForProxy normUserAgent normCustomsResponseNextStepContinueRetryDone ExpectEntity DieHorriblyResponserspCode rspReason rspHeadersrspBody RequestData ResponseData ResponseCodeRequestrqURIrqMethod rqHeadersrqBody HTTPResponse HTTPRequestResponse_StringRequest_String RequestMethodHEADPUTGETPOSTDELETEOPTIONSTRACECONNECTCustom URIAuthorityuserpasswordhostportparseURIAuthorityuriToAuthorityStringuriAuthToString uriAuthPort failHTTPS reqURIAuth httpVersionlibUAdefaultUserAgenthttpPackageVersiondefaultGETRequestdefaultGETRequest_ mkRequestsetRequestBodyparseRequestHeadparseResponseHeadgetRequestVersionsetRequestVersiongetResponseVersionsetResponseVersion matchResponse urlDecode urlEncode urlEncodeVarsgetAuthnormalizeRequestURIdefaultNormalizeRequestOptionsnormalizeRequestsplitRequestURInormalizeHostHeader findConnCloselinearTransferhopefulTransferchunkedTransferuglyDeathTransferreadTillEmpty1readTillEmpty2catchIOcatchIO_responseParseError$fShowRequestMethod$fHasHeadersRequest $fShowRequest$fHasHeadersResponse$fShowResponse$fEqURIAuthority$fShowURIAuthority$fEqRequestMethodHStream openStreamopenSocketStream closeQuick StreamHooks hook_readLinehook_readBlockhook_writeBlock hook_close hook_nameEndPointepHostepPort HandleStream ConnectionhstreamToConnection nullHookssetStreamHooksgetStreamHooks openTCPPortopenTCPConnectionsocketConnection isConnectedToisTCPConnectedTo $fEqEndPoint$fEqStreamHooks $fHStream[]$fStreamConnection$fHStreamByteString$fHStreamByteString0$fEqConnStreamDebugger debugStreamdebugByteStream$fStreamStreamDebuggerhandleSocketErrormyrecv$fStreamSocket simpleHTTP simpleHTTP_sendHTTPsendHTTP_notify receiveHTTP respondHTTPsimpleHTTP_debugQopQopAuth QopAuthInt AlgorithmAlgMD5 AlgMD5sess Challenge ChalBasic ChalDigestchRealmchDomainchNoncechOpaquechStale chAlgorithmchQop Authority AuthBasic AuthDigestauRealm auUsername auPasswordauSiteauNonce auAlgorithmauDomainauOpaqueauQop withAuthorityheaderToChallenge$fShowAlgorithm $fEqAlgorithm$fEqQop $fShowQopProxyNoProxynoProxy fetchProxy parseProxy getRequest headRequest postRequestpostRequestWithBodygetResponseBodygetResponseCodeFormFormVarBrowserEventTypeOpenConnectionReuseConnection RequestSent ResponseEndResponseFinish BrowserEventbrowserTimestampbrowserRequestIDbrowserRequestURIbrowserEventType RequestID BrowserAction BrowserStatedefaultCookieFilteruserCookieFilter addCookie setCookies getCookiessetCookieFiltergetCookieFiltergetAuthoritiessetAuthorities addAuthoritygetAuthorityGensetAuthorityGensetAllowBasicAuthgetAllowBasicAuthsetMaxAuthAttemptsgetMaxAuthAttemptssetMaxErrorRetriesgetMaxErrorRetriesbrowsegetBrowserStatewithBrowserStateioAction setErrHandler setOutHandlerouterrsetAllowRedirectsgetAllowRedirectssetMaxRedirectsgetMaxRedirectssetMaxPoolSizegetMaxPoolSizegetProxysetCheckForProxygetCheckForProxy setDebugLog setUserAgent getUserAgentsetEventHandlerrequest uriDefaultTo formToRequest$fShowBrowserState$fFunctorBrowserAction$fApplicativeBrowserAction$fMonadBrowserAction$fMonadIOBrowserAction$fMonadStateBrowserAction$fMonadFailBrowserActionchop72OctetencodedecodeMD5finishedget_nextlen_padWordListBoolListStrABCDZord64md5md5smd5icrlflfspsplittrimtrimLbase GHC.UnicodeisSpacetrimRsplitByreadsOne Text.Readread dropWhileTail chopAtDelimencodeStringUtf8GHC.BaseStringdecodeStringUtf8toUTF8BS fromUTF8BSmkCookieHeaderValueheaderToCookiesversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameGHC.ShowShowGHC.Num* encodeCharnormalizeUserAgentnormalizeConnectionClosenormalizeBasicAuthnormalizeHostURI&network-3.1.2.0-3J3aiSFSjtoHAHbAISoV5iNetwork.Socket.TypesSocketenvProxyString proxyString fixUserInfo RequestState reqDenies reqRedirects reqRetries reqStopOnDeny getAuthForanticipateChallengechallengeToAuthoritydefaultBrowserState nextRequestdefaultMaxRetriesdefaultMaxErrorRetriesdefaultMaxAuthAttemptsdefaultAutoProxyDetectrequest' dorequestdefaultMaxPoolSizesupportedScheme