<6W2      !"#$%&'()*+,-./01Safe  breaks a list into sublists of the given size. The final resulting group may contain fewer elements than the given size. Property: For all positive n. concat (groups n xs) == xsT returns a list with the first occurrence of @x removed. If there is no occurrence 2 is returned.= returns the element at the given 0-based index and returns 2 on failure.WExtract an element from a list by index returning that element and the remaining list.9Drop last element of list if there is an element to drop.* returns all combinations of two elements.- converts seconds to microseconds for use in  threadDelay.& calls shuffle using a generator from 3.B shuffles the elements of a list using the given random generator.  : centers the given string in a field of @width characters.  ? right-aligns the given string in a field of @width characters.  > left-aligns the given string in a field of @width characters.     Safe% solveBoardC returns the list of all valid sets contained in the given list.  !"4#$%  !"#$%  !"$#%  !"4#$%Safe &&k represents the current state of a Set game including the remaining shuffled deck and the current tableau.55> is the minimum number of cards that should be on the tableau.(( creates a new &' with a full tableau and shuffled deck.66* adds additional cards as needed to reach 5 cards.))\ verifies that a given set exists in the tableau and then removes the set from the tableau.77? adds the top @n cards from the deck to the end of the tableau.**3 returns the number of cards remaining in the deck.++ returns 8 iff the deck is empty.,,i returns either a new game with 3 additional cards dealt or the number of sets remaining in the tableau.--K returns a randomly selected card contained in a set found on the tableau...& sorts the tableau with a given order.//O tests for a game with no cards remaining in either the tableau or the deck.&95'(6)7*+,-./ &'()*+,-./ &(),.'+*/- &95'(6)7*+,-./Safe::B returns the ASCII art representation of the lines for a given  and .01Compute the ASCII lines and color of a given card;; pads a <5 to fit neatly, centered in a 14-character region.:0;00:0;None==d is the main event-loop for the game. It alternates reading user input and drawing the interface.>>N performs an event on the interface based on the currently focused control.??u attempts to add a new card to the selection and handles checking for a valid set when the selection becomes full.@@ updates the A based on the current & state.BBV checks for a hint in the current game and alters the selection if a hint is found.CC will extract the chosen set from the tableau and check it for validity. If a valid set is removed from the tableau the tableau will be refilled up to 12 cards.DDp verifies that there are no sets in the current tableau and deals additional cards to the tableau in that case.EE renders a  3 based on its current selection and focus state.BFGHIJKLMNOPQRSTAUVWXYZ[\]^_1=>?@`abBCDcdefghijklmnopqrstuvwxyEz{|}11+FGHIJKLMNOPQRSTA UVWXYZ[\]^_1=>?@`abBCDcdefghijklmnopqrstuvwxyEz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABC+DE78FG HIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~setga_BVmgX8aVCmm3kwa69OPzbr Set.UtilsSet.CardSet.Game Set.AsciiSetGamegroupsdelete1indexselectinit' chooseTwoseconds shuffleIOshuffleshuffle' centerText leftPadText rightPadTextCardcolorcountshadingsymbolSymbolDiamondSquiggleOvalShadingOpenStripedSolidCountOneTwoThreeColorRedPurpleGreenvalidSetallCardssolveGametableaunewGame considerSetdeckSizedeckNull extraCardshint sortTableau emptyGame cardLinesgameMainbaseGHC.BaseNothingrando_1z8Ujelqc6aKgvPnbRUKkP System.Random newStdGencheckAttribute tableauSizedealaddCardsghc-prim GHC.TypesTrue selectArt duplicateStringrunaddCardsetGame InterfacegiveHintcheckSet checkNoSets cardImage DirectionGoUpGoDownGoLeftGoRightCommandMoveSelectQuitDealDeleteHintRedrawCurrentControl CardButtonISiControl iSelectioniMessage iDealCounteriBadDealCounter iHintCounteriStdGeniTimeriTableau iRemaining moveFocusmoveFocusCardButton printGame newInterface setRemaining setTableausetTimer delayedUpdateincHintCounterincDealCounterincBadDealCounter setControl clearMessage setMessage setSelectionupdateSelectionappendSelectionclearSelection isSelectedsetGen handleInput titleString helpStringinterfaceImage tableauImage cardRowImage makePicture plainString boldString tableauWidth