d70417lJͤc oW @JPY{0, tZ0SYZE8S   \mL3ް}AZ[TD-_i7 7VVD~Dtql"o-B.Tz5st%Tvl  LL  LM  ML   L  M  ML   L  zפڰ[oaeY LLr yĜ;bHU L ML M  `FMX L ML M 9U^SlO L8 ML d=\$ &f 1x Lx ML 4;wcQZHLsЦ L ML ^^^jO1Z+,7 L ML  LZϖ#c z L8 ML  8w!wZJjLV Lx ML  u| L ML  nϙh(C L ML  OX?qg6 L@ ML  ML3]"\X Q L ML  Μ$kc   L !QKpF/XCj& ?"  L #bfgIh6$   L %tUlFY$V& 8 L '^&2:7by( f L )D%(Oce*  L +q*Q}up,  L -n?q#kƒF9wԒ.  L /jZwXﭔa<0  L 1;%nu݅42 L L 3 w͕A 9g4 L ML  BSj0M˝[%5  L 6L`¨ QxoU7  L 80&9x9  L :VոA,_Z; D L { QIM73RC?  L @!ڽLrn'^ԩA L ML M q ?cB L # ML  ji6KQC L c ML ! "A/눢]D L  ML M #ߵ@Њ^7۶@E L  ML $ %ԍGsmS!]kF L & ML & 'Fey చ5gG L f ML ( )ٴj]cN2H L  ML * +#lRn˳@ȊL^I L  ML M ,V{*#+J L ) ML -47>ӨFKK L i ML . /k&¹? q -VL L  ML 0A;-سi IM L  ML 1 2fBk773wĈtN L ) ML 3 4w9uocbKO O L i ML 5 6b=˫PgdP L  ML ! 7١fklQ L  ML 8 9:C:QR L ) ML : ;\cl&aZKJ7S L q ML < ML ITm0 T   L UhWoq aV   L WBq~O}򭒾@GX   L Y["K _ GNΫZ ) L [X ~r97N cm\ W L ]@ǿFP^  L _O4(·`  L aRTo9>!t{&)b L ML M =OGm¡Pc $ L d$.n>] `7e R L fF[̀\$N g  L hF| t"m$JWi  L j6nr-`k  L l,.vgm L ML > ?N$Gf+Qu3Mn L\ ML @ ATr̅U=6o L ML B Ci>M=d[^.D pqrkA 0.,*(&$" ?4=EBiC9DF;PgGeHcIJK`LM^N\OZQbXRVSTm7n5o2smainMkSharedStringbaseghc-prim integer-gmpGHC.Base GHC.Float Data.Either Data.Maybe GHC.Generics GHC.Tuple Data.ListPrelude$wsharedStringbww1wildmodule sharedString sharedString1sharedString10sharedString11sharedString12sharedString13sharedString14sharedString15sharedString16sharedString17sharedString18sharedString19 sharedString2sharedString20 return s'sharedString21G writeIORef stringPoolRef $! M.insert s' s' stringPoolsharedString22$ Nothing -> do let s' = BS.copy ssharedString23 Just s' -> return s'sharedString24 case M.lookup s stringPool ofsharedString25' stringPool <- readIORef stringPoolRefsharedString26$shareString s = unsafePerformIO $ dosharedString27-shareString :: BS.ByteString -> BS.ByteStringsharedString28{-# NOINLINE shareString #-}sharedString292stringPoolRef = unsafePerformIO $ newIORef M.empty sharedString3sharedString30:stringPoolRef :: IORef (M.Map BS.ByteString BS.ByteString)sharedString31{-# NOINLINE stringPoolRef #-}sharedString32)import System.IO.Unsafe (unsafePerformIO)sharedString33,import qualified Data.ByteString.Char8 as BSsharedString34import Data.IORefsharedString35import Data.Map as MsharedString36sharedString37sharedString38sharedString39 sharedString4sharedString40sharedString41sharedString42sharedString43sharedString44sharedString45sharedString46sharedString47sharedString48sharedString49 sharedString5sharedString50sharedString51sharedString52sharedString53 return ssharedString54) H.insert stringPool s ssharedString55 Nothing -> dosharedString56 Just s' -> return s'sharedString57 case mv ofsharedString58 mv <- H.lookup stringPool ssharedString59shareString :: String -> String sharedString6sharedString602stringPool = unsafePerformIO $ new (==) hashStringsharedString61%stringPool :: HashTable String StringsharedString62{-# NOINLINE stringPool #-}sharedString63import Data.HashTable as HsharedString64 (shareString) where sharedString7 sharedString8 sharedString9unlines GHC.CStringunpackAppendCString#