B      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred4Integer encoding. The first argument is N of prefix. encode 5 10[10] encode 5 1337 [31,154,10] encode 8 42[42]4Integer decoding. The first argument is N of prefix.decode 5 10 $ BS.empty10decode 5 31 $ BS.pack [154,10]1337decode 8 42 $ BS.empty426parseInteger 7 127 $ BS.pack [210,211,212,87,88,89,90](183839313,"XYZ") Safe-InferredNone&let bs = BS.pack [0x12,0x34,0xf3,0xab]unpack4bits bs[1,2,3,4,15,3,10,11]unpack4bits $ BS.tail bs[3,4,15,3,10,11] Safe-Inferred Bit stream.Data type for Bit.OneZeroFrom  of length 8 to .fromBits [T,F,T,F,T,F,T,F]170fromBits [F,T,F,T,F,T,F,T]85 Safe-Inferred  Safe-InferredType for Huffman decoding. Creating .Marking the EOS path   NoneHuffman encoding.toShifted [T,T,T,T] 0Shifted 1 4 "\240"toShifted [T,T,T,T] 4Shifted 1 0 "\SI"toShifted [T,T,T,T] 5Shifted 2 1 "\a\128"Huffman encoding.  None  Safe-Inferred  Safe-Inferred+#(The data type for HTTP/2 frame payloads. 'The data type for HTTP/2 frame headers. The data type for HTTP/2 frames.0NCooked version of settings. This is suitable to be stored in a HTTP/2 context.8Settings containing raw values.A)The connection error or the stream error.U"The length of HTTP/2 frame header.frameHeaderLength9VfromErrorCodeId NoError0"fromErrorCodeId InadequateSecurity12WtoErrorCodeId 0NoErrortoErrorCodeId 0xcInadequateSecuritytoErrorCodeId 0xeUnknownErrorCode 14X Obtaining D from A.Y)fromSettingsKeyId SettingsHeaderTableSize1,fromSettingsKeyId SettingsMaxHeaderBlockSize6ZtoSettingsKeyId 0NothingtoSettingsKeyId 1Just SettingsHeaderTableSizetoSettingsKeyId 6Just SettingsMaxHeaderBlockSizetoSettingsKeyId 7Nothing[ Checking 8 and reporting an error if any.*checkSettingsList [(SettingsEnablePush,2)]AJust (ConnectionError ProtocolError "enable push must be 0 or 1")\The default settings.defaultSettingsSettings {headerTableSize = 4096, enablePush = True, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Nothing}]Updating settings.XupdateSettings defaultSettings [(SettingsEnablePush,0),(SettingsMaxHeaderBlockSize,200)]Settings {headerTableSize = 4096, enablePush = False, maxConcurrentStreams = Nothing, initialWindowSize = 65535, maxFrameSize = 16384, maxHeaderBlockSize = Just 200}^fromFrameTypeId FrameData0!fromFrameTypeId FrameContinuation9!fromFrameTypeId (FrameUnknown 10)10_toFrameTypeId 0 FrameDatatoFrameTypeId 9FrameContinuationtoFrameTypeId 10FrameUnknown 10`%The maximum length of HTTP/2 payload.maxPayloadLength16384a defaultFlags0btestEndStream 0x1Truec testAck 0x1TruedtestEndHeader 0x4TrueetestPadded 0x8TrueftestPriority 0x20TruegsetEndStream 01hsetAck 01isetEndHeader 04j setPadded 08k setPriority 032ltoStreamIdentifier 0StreamIdentifier 0m+fromStreamIdentifier (toStreamIdentifier 0)0n isControl $ toStreamIdentifier 0True isControl $ toStreamIdentifier 1Falseo isRequest $ toStreamIdentifier 0False isRequest $ toStreamIdentifier 1Truep!isResponse $ toStreamIdentifier 0False!isResponse $ toStreamIdentifier 2TruesGetting * from .,framePayloadToFrameTypeId (DataFrame "body") FrameDataz  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrsv  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrs:    )('&%$#"! *+,-./0123456789:@?>=<;ACBDSRQPONMLKJIHGFETUVWXYZ[\]^_`abcdefghijklmnopqrs Safe-InferredNonet)Auxiliary information for frame encoding.v!Flags to be set in a frame headerw%Stream id to be set in a frame headerxPadding if anyyA smart builder of t.encodeInfo setAck 0ZEncodeInfo {encodeFlags = 1, encodeStreamId = StreamIdentifier 0, encodePadding = Nothing}zEncoding an HTTP/2 frame to f. This function is not efficient enough for high performace program because of the concatenation of .0encodeFrame (encodeInfo id 1) (DataFrame "body")*"\NUL\NUL\EOT\NUL\NUL\NUL\NUL\NUL\SOHbody"tuvwxystream identifierz{|Payload length. tuvwxyz{|tuvwxyz{|NoneE~Decoding an HTTP/2 frame to . The second argument must be include the entire of frame. So, this function is not useful for real applications but useful for testing.Must supply 9 bytes.6Checking a frame header and reporting an error if any.let stid = toStreamIdentifier 0CcheckFrameHeader defaultSettings FrameData (FrameHeader 100 0 stid)DJust (ConnectionError ProtocolError "cannot used in control stream")Helper function to pull off the padding if its there, and will eat up the trailing padding automatically. Calls the decoder func passed in with the length of the unpadded portion between the padding octet and the actual padding}~HTTP/2 settingsInput byte-stream Decoded frame}~}~NoneThe preface of HTTP/2.connectionPreface""PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n"Length of the preface.connectionPrefaceLength24  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  z{|tuvwxy~})('&%$#"! s*^_+,-./mlnopqrabcdefghijk89:@?>=<;YZ[01234567\]TDSRQPONMLKJIHGFEVWACBXU` Safe-Inferred+Errors for decoder.Header block is emptyEncoded string has no length)Eos of huffman string is more than 7 bits,Non-eos appears in the end of huffman string+Eos appears in the middle of huffman stringIndex is out of rangeStrategy for HPACK encoding.$Which compression algorithm is used.3Whether or not to use Huffman encoding for strings.*Compression algorithms for HPACK encoding.Using indices onlyUsing the static table onlyNo compressionIndex for table.To be a  or . Header list.Header. Header value. Header name.Default .defaultEncodeStrategy<EncodeStrategy {compressionAlgo = Linear, useHuffman = True} NoneHuffman decoding.Huffman decoding.           None Safe-InferredIndex or literal.!Whether or not adding to a table.Type for representation.Type for header block.Empty header block.  ! !! None" Encoding  to  according to HuffmanEncoding.#Parsing  from . The second $: is whether or not huffman encoding is used. The third %% is the length of the encoded string."#"#"#None&#Converting the low level format to .'#Converting the low level format to . ! forms a pair with corresponding .&'()*+,-./01234567&'&'()*+,-./01234567None8 Converting  to the low level format. 98:;<=>?@ABCD8 98:;<=>?@ABCD Safe-Inferred E>Type for table entry. Size includes the 32 bytes magic number.Size in bytes.FFrom  to E.GFrom E to .HGetting the size of E.IGetting .JGetting .KGetting .LDummy E to initialize a dynamic table.M2How many entries can be stored in a dynamic table? ENOFGHIJKLMEFGHIJKLM ENOFGHIJKLM Safe-Inferred PQRSTUVWXYZ[ PQRSTVWXYZ[PSRQTUVWXYZ[ Safe-Inferred\The size of static table.]Get E from the static table.toStaticEntry (SIndex 1)(42,(":authority",""))toStaticEntry (SIndex 8)(42,(":status","200"))toStaticEntry (SIndex 50)(37,("range",""))^Pre-defined static table. _`abc\]^de_`abc\]d _`abc\]^deNoneEType for dynamic table.fAn arrayg Start pointhThe current number of entriesiThe size of the arrayj1The current dynamic table size (defined in HPACK)k-The max dynamic table size (defined in HPACK)ljHeader to the index in Dynamic Table for encoder. Static Table is not included. Nothing for decoder.m Printing . Creating r. The default maxDynamicTableSize is 4096 bytes, an array has 128 entries, resulting 1024 bytes in 64bit machine Creating r. The default maxDynamicTableSize is 4096 bytes, an array has 128 entries, resulting 1024 bytes in 64bit machinen Renewing  with necessary entries copied.oIs the size of  really changed?p Inserting E to  . New , the largest new  and a set of dropped OLD  are returned.#qrsfghijkltumvwxyz{|n}~opsfghijklmwxyz{npqrsfghijkltumvwxyz{|n}~opNoneE)Is header key-value stored in the tables?Which table does  refer to?MResolving an index from a header. Static table is prefer to dynamic table.Which table does  belong to? EFGHIJKLMmwnpNone Decoding  to .Decoding step for one $. Exporting for the test purpose.None Encoding  to .  None !&'8NoneHPACK decoding, from  to .HPACK encoding, from  to . Converting * for HTTP request to the low level format.4Converting the low level format for HTTP request to .  would be thrown.   ! " # $ % & ' ( ) * + + , - . / / 0 1 2 3 4 5 6 7 8 8 9 : ; < = > ? @ A B C D E F G G H I J K 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 { | } ~                      !"#$%&'()*+,-./0123456789:89;<=>?@ABCDEFGHIJKLMNOPQDERSTUVWXYZ[\]^_`abcdefgghijklmnoppqrstuvwxyLz{|}~ http2-0.8.0 Network.HTTP2Network.HTTP2.Internal Network.HPACK!Network.HPACK.HeaderBlock.IntegerNetwork.HPACK.Huffman.Params Network.HPACK.Huffman.ByteStringNetwork.HPACK.Huffman.BitNetwork.HPACK.Huffman.TableNetwork.HPACK.Huffman.TreeNetwork.HPACK.Huffman.EncodeNetwork.HPACK.Builder.Word8Network.HPACK.BuilderNetwork.HTTP2.TypesNetwork.HTTP2.EncodeNetwork.HTTP2.DecodeNetwork.HPACK.TypesNetwork.HPACK.Huffman.DecodeNetwork.HPACK.Huffman%Network.HPACK.HeaderBlock.HeaderField Network.HPACK.HeaderBlock.String Network.HPACK.HeaderBlock.Decode Network.HPACK.HeaderBlock.EncodeNetwork.HPACK.Table.EntryNetwork.HPACK.Table.HashPSQNetwork.HPACK.Table.StaticNetwork.HPACK.Table.DynamicNetwork.HPACK.TableNetwork.HPACK.HeaderBlock.FromNetwork.HPACK.HeaderBlock.ToNetwork.HPACK.HeaderBlock FramePayload UnknownFrameContinuationFrameWindowUpdateFrame GoAwayFrame PingFramePushPromiseFrame SettingsFrameRSTStreamFrame PriorityFrame HeadersFrame DataFrame FrameHeader payloadLengthflagsstreamIdFrame frameHeader framePayloadPaddingHeaderBlockFragmentWindowSizeIncrementPromisedStreamId LastStreamIdStreamDependencyStreamIdentifier FrameFlags FrameTypeId FrameUnknownFrameContinuationFrameWindowUpdate FrameGoAway FramePingFramePushPromise FrameSettingsFrameRSTStream FramePriority FrameHeaders FrameData FrameTypePriority exclusivestreamDependencyweightSettingsheaderTableSize enablePushmaxConcurrentStreamsinitialWindowSize maxFrameSizemaxHeaderBlockSize SettingsList SettingsValue SettingsKeyIdSettingsMaxHeaderBlockSizeSettingsMaxFrameSizeSettingsInitialWindowSizeSettingsMaxConcurrentStreamsSettingsEnablePushSettingsHeaderTableSize HTTP2Error StreamErrorConnectionError ErrorCodeIdUnknownErrorCodeHTTP11RequiredInadequateSecurityEnhanceYourCalm ConnectErrorCompressionErrorCancel RefusedStreamFrameSizeError StreamClosedSettingsTimeoutFlowControlError InternalError ProtocolErrorNoError ErrorCodeframeHeaderLengthfromErrorCodeId toErrorCodeId errorCodeIdfromSettingsKeyIdtoSettingsKeyIdcheckSettingsListdefaultSettingsupdateSettingsfromFrameTypeId toFrameTypeIdmaxPayloadLength defaultFlags testEndStreamtestAck testEndHeader testPadded testPriority setEndStreamsetAck setEndHeader setPadded setPrioritytoStreamIdentifierfromStreamIdentifier isControl isRequest isResponse testExclusive setExclusiveframePayloadToFrameTypeId EncodeInfo encodeFlagsencodeStreamId encodePadding encodeInfo encodeFrameencodeFrameHeaderencodeFramePayloadFramePayloadDecoder decodeFramedecodeFrameHeadercheckFrameHeaderdecodeFramePayloaddecodeDataFramedecodeHeadersFramedecodePriorityFramedecoderstStreamFramedecodeSettingsFramedecodePushPromiseFramedecodePingFramedecodeGoAwayFramedecodeWindowUpdateFramedecodeContinuationFrameconnectionPrefaceconnectionPrefaceLength DecodeError EmptyBlockEmptyEncodedString TooLongEos IllegalEosEosInTheMiddle IndexOverrunEncodeStrategycompressionAlgo useHuffmanCompressionAlgoLinearStaticNaiveIndex HeaderListHeader HeaderValue HeaderNamedefaultEncodeStrategySize DynamicTablenewDynamicTableForEncodingnewDynamicTableForDecoding HPACKDecoding HPACKEncoding encodeHeader decodeHeaderencodedecode parseInteger powerArrayencode'decode'idxEos unpack4bitsc_memcpycopymemcpyBitsBTFfromBitsbaseGHC.WordWord8fromBit huffmanTableHTreetoHTreemarkBinTipEOSInfoeosInfoshowTree showTree' printTreebuildflattenHuffmanEncoding toShiftedShifted ShiftedArrayAOSAaosatoShiftedArray Word8Builder<|w8empty toByteStringBuilder<<empty singletonrunminSettingsKeyIdmaxSettingsKeyIdcheckSettingsValue minFrameType maxFrameType$fExceptionHTTP2Errorbytestring-0.10.4.0Data.ByteString.Internal ByteString buildFramebuildFrameHeaderbuildFramePayload buildPadding buildPriority buildStreambuildErrorCodeIdbuildFramePayloadDatabuildFramePayloadHeadersbuildFramePayloadPrioritybuildFramePayloadRSTStreambuildFramePayloadSettingsbuildFramePayloadPushPromisebuildFramePayloadPingbuildFramePayloadGoAwaybuildFramePayloadWindowUpdatebuildFramePayloadContinuationbuildFramePayloadUnknowndecodeWithPadding+.zeroFrameTypesnonZeroFrameTypespayloadDecodersdecodeUnknownFramestreamIdentifierpriority intFromWord8word32word32'word16' HeaderStuff$fExceptionDecodeErrorHuffmanDecodingWay256Way16PinGoBackForward EndOfStringnextdecway256 constructstepbits4sNamingIndexing HeaderField HeaderBlockemptyHeaderBlockLitIdxNeverNotAddAddLiteralIndexedChangeTableSize parseStringghc-prim GHC.TypesBoolIntfromByteStringfromByteStringDebug toHeaderFieldindexedincrementalIndexingmaxSizewithoutIndexing neverIndexing indexedNamenewName headerStuffmask6mask5mask4isIndexedName1isIndexedName2 isHuffman dropHuffmanSetterfromHeaderFieldchangeindexset1set01set001set0001set0000setHEntrytoEntry fromEntry entrySize entryHeaderentryHeaderNameentryHeaderValue dummyEntry maxNumbersheaderSizeMagicNumber headerSizeResKVKNHashPSQinsertdeletefromList deleteListsearchstaticTableSize toStaticEntry staticTableSIndexfromStaticIndex toStaticIndex isSIndexValid staticHashPSQstaticTableList circularTableoffset numOfEntriesmaxNumOfEntriesmaxDynamicTableSize reverseIndexprintDynamicTablerenewDynamicTable shouldRenew insertEntryHIndexTableadj printEntryisDynamicTableEmptyfromHIndexToIndexfromIndexToHIndexfromSIndexToIndexfromIndexToSIndexnewDynamicTable copyTable getEntries copyEntries insertFrontadjustTableSizeadjust insertEnd removeEnd toHeaderEntry HeaderCache WhichTable lookupTablewhichKeyValueKeyOnlyNone InStaticTableInDynamicTableisInfromHeaderBlock decodeStepStepCtx decodeLoop decodeFinal fromNaming toHeaderBlock encodeFinal encodeLoop naiveStep staticStep linearStep smartStepcheckheadersNotToIndex