packages feed

Agda 2.2.10 → 2.3.0

raw patch · 186 files changed

+19636/−10586 lines, 186 filesdep +hashabledep +hashtablesdep ~arraydep ~basedep ~bytestringnew-uploaderPVP ok

version bump matches the API change (PVP)

Dependencies added: hashable, hashtables

Dependency ranges changed: array, base, bytestring, containers, epic, filepath, haskell-src-exts, old-time, pretty, process, syb, zlib

API changes (from Hackage documentation)

- Agda.Auto.SearchControl: costAppExtraRef :: Int
- Agda.Auto.SearchControl: costIncrease :: Int
- Agda.Auto.SearchControl: costIotaStep :: Int
- Agda.Auto.SearchControl: prioAbsurdLambda :: Int
- Agda.Auto.SearchControl: prioCompBeta :: Int
- Agda.Auto.SearchControl: prioCompBetaStructured :: Int
- Agda.Auto.SearchControl: prioCompChoice :: Int
- Agda.Auto.SearchControl: prioCompCopy :: Int
- Agda.Auto.SearchControl: prioCompIota :: Int
- Agda.Auto.SearchControl: prioCompUnif :: Int
- Agda.Auto.SearchControl: prioCompareArgList :: Int
- Agda.Auto.SearchControl: prioInferredTypeUnknown :: Int
- Agda.Auto.SearchControl: prioNo :: Int
- Agda.Auto.SearchControl: prioNoIota :: Int
- Agda.Auto.SearchControl: prioTypeUnknown :: Int
- Agda.Auto.SearchControl: prioTypecheckArgList :: Int
- Agda.Compiler.Epic.AuxAST: pairwiseFilter :: [Bool] -> [a] -> [a]
- Agda.Compiler.Epic.AuxAST: type Tag = Int
- Agda.Compiler.Epic.AuxAST: type Var = String
- Agda.Compiler.Epic.CompileState: addDataDecl :: Monad m => [QName] -> Compile m ()
- Agda.Compiler.Epic.CompileState: conPars :: CompileState -> Map QName Int
- Agda.Compiler.Epic.CompileState: dataDecls :: CompileState -> Map QName Tag
- Agda.Compiler.Epic.CompileState: defDelayed :: CompileState -> Map QName Bool
- Agda.Compiler.Epic.CompileState: definitions :: CompileState -> Set Var
- Agda.Compiler.Epic.CompileState: getConPar :: MonadTCM m => QName -> Compile m Int
- Agda.Compiler.Epic.CompileState: getIrrFilter :: Monad m => QName -> Compile m IrrFilter
- Agda.Compiler.Epic.CompileState: irrFilters :: CompileState -> Map QName IrrFilter
- Agda.Compiler.Epic.CompileState: mainName :: CompileState -> Maybe QName
- Agda.Compiler.Epic.CompileState: putConPar :: Monad m => QName -> Int -> Compile m ()
- Agda.Compiler.Epic.CompileState: putIrrFilter :: Monad m => QName -> IrrFilter -> Compile m ()
- Agda.Compiler.Epic.CompileState: type IrrFilter = [Bool]
- Agda.Compiler.Epic.ConstructorIrrelevancy: constrIrr :: MonadTCM m => [Fun] -> Compile m [Fun]
- Agda.Compiler.Epic.ConstructorIrrelevancy: irrBranch :: MonadTCM m => Branch -> Compile m Branch
- Agda.Compiler.Epic.ConstructorIrrelevancy: irrExpr :: MonadTCM m => Expr -> Compile m Expr
- Agda.Compiler.Epic.ConstructorIrrelevancy: irrFilter :: Type -> IrrFilter
- Agda.Compiler.Epic.ConstructorIrrelevancy: irrFun :: MonadTCM m => Fun -> Compile m Fun
- Agda.Compiler.Epic.Erasure: DontKnow :: Relevancy
- Agda.Compiler.Epic.Erasure: Irr :: Relevancy
- Agda.Compiler.Epic.Erasure: Rel :: Relevancy
- Agda.Compiler.Epic.Erasure: data Relevancy
- Agda.Compiler.Epic.Erasure: instance Eq Relevancy
- Agda.Compiler.Epic.Erasure: instance Ord Relevancy
- Agda.Compiler.Epic.Erasure: instance Show Relevancy
- Agda.Compiler.Epic.Forcing: FoldState :: CompiledClauses -> (CompiledClauses -> CompiledClauses) -> [Maybe Term] -> Telescope -> Nat -> FoldState
- Agda.Compiler.Epic.Forcing: clauseToFix :: FoldState -> CompiledClauses
- Agda.Compiler.Epic.Forcing: clausesAbove :: FoldState -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.Forcing: constrType :: MonadTCM m => QName -> Compile m Type
- Agda.Compiler.Epic.Forcing: data FoldState
- Agda.Compiler.Epic.Forcing: foldM' :: Monad m => a -> [b] -> (a -> b -> m a) -> m a
- Agda.Compiler.Epic.Forcing: instance Show FoldState
- Agda.Compiler.Epic.Forcing: isIn :: MonadTCM m => Nat -> CompiledClauses -> Compile m Bool
- Agda.Compiler.Epic.Forcing: isInCase :: MonadTCM m => Nat -> (Nat, Case CompiledClauses) -> Compile m Bool
- Agda.Compiler.Epic.Forcing: isInTerm :: Nat -> Term -> Bool
- Agda.Compiler.Epic.Forcing: lift2 :: (MonadTrans t, Monad (t1 m), MonadTrans t1, Monad m) => m a -> t (t1 m) a
- Agda.Compiler.Epic.Forcing: modifyM :: MonadState a m => (a -> m a) -> m ()
- Agda.Compiler.Epic.Forcing: raiseFromCC :: Nat -> Nat -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.Forcing: removeForced :: MonadTCM m => CompiledClauses -> Type -> Compile m CompiledClauses
- Agda.Compiler.Epic.Forcing: substCC :: MonadTCM m => [Nat] -> CompiledClauses -> StateT FoldState (Compile m) CompiledClauses
- Agda.Compiler.Epic.Forcing: substCCBody :: Nat -> Term -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.Forcing: substsCCBody :: [Term] -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.Forcing: telePos :: FoldState -> Nat
- Agda.Compiler.Epic.Forcing: theTelescope :: FoldState -> Telescope
- Agda.Compiler.Epic.Forcing: unification :: FoldState -> [Maybe Term]
- Agda.Compiler.Epic.LambdaLift: lambdaLift :: MonadTCM m => [Fun] -> Compile m [Fun]
- Agda.Compiler.Epic.LambdaLift: lambdaLiftExpr :: MonadTCM m => Expr -> LL (Compile m) Expr
- Agda.Compiler.Epic.LambdaLift: lambdaLiftFun :: MonadTCM m => Fun -> LL (Compile m) Fun
- Agda.Compiler.Epic.LambdaLift: type LL = WriterT [Fun]
- Agda.Compiler.Epic.Primitive: primLists :: MonadTCM m => Compile m [Fun]
- Agda.Compiler.MAlonzo.Compiler: constructorArity :: MonadTCM tcm => QName -> tcm Nat
- Agda.Interaction.BasicOps: CmpTerms :: [Polarity] -> a -> [b] -> [b] -> OutputForm a b
- Agda.Interaction.BasicOps: data OutputForm' a b
- Agda.Interaction.BasicOps: getConstraint :: Int -> TCM (OutputForm Expr Expr)
- Agda.Interaction.BasicOps: instance (Pretty a, Pretty b) => Pretty (OutputForm' a b)
- Agda.Interaction.BasicOps: instance (ToConcrete a c, ToConcrete b d) => ToConcrete (OutputForm' a b) (OutputForm' c d)
- Agda.Interaction.BasicOps: instance Reify Constraint (OutputForm Expr Expr)
- Agda.Interaction.GhciTop: A :: a -> Lisp a
- Agda.Interaction.GhciTop: Cons :: (Lisp a) -> (Lisp a) -> Lisp a
- Agda.Interaction.GhciTop: L :: [Lisp a] -> Lisp a
- Agda.Interaction.GhciTop: Q :: (Lisp a) -> Lisp a
- Agda.Interaction.GhciTop: data Lisp a
- Agda.Interaction.GhciTop: instance Pretty String
- Agda.Interaction.GhciTop: instance Pretty a => Pretty (Lisp a)
- Agda.Interaction.GhciTop: instance Pretty a => Show (Lisp a)
- Agda.Interaction.GhciTop: response :: Lisp String -> String
- Agda.Interaction.Options: optUnreachableCheck :: PragmaOptions -> Bool
- Agda.Syntax.Abstract: Definition :: DeclInfo -> [TypeSignature] -> [Definition] -> Declaration
- Agda.Syntax.Abstract: ScopedDef :: ScopeInfo -> Definition -> Definition
- Agda.Syntax.Abstract: data Definition
- Agda.Syntax.Abstract: instance Data Definition
- Agda.Syntax.Abstract: instance HasRange Definition
- Agda.Syntax.Abstract: instance KillRange Definition
- Agda.Syntax.Abstract: instance Show Definition
- Agda.Syntax.Abstract: instance Typeable Definition
- Agda.Syntax.Abstract.Views: HeadCon :: [QName] -> Head
- Agda.Syntax.Abstract.Views: HeadDef :: QName -> Head
- Agda.Syntax.Abstract.Views: HeadVar :: Name -> Head
- Agda.Syntax.Abstract.Views: NonApplication :: Expr -> AppView
- Agda.Syntax.Abstract.Views: data Head
- Agda.Syntax.Abstract.Views: headToExpr :: Head -> Expr
- Agda.Syntax.Abstract.Views: instance HasRange Head
- Agda.Syntax.Common: ignoreForced :: Relevance -> Relevance
- Agda.Syntax.Common: irrelevant :: Bool -> Relevance
- Agda.Syntax.Common: makeIrrelevant :: Arg a -> Arg a
- Agda.Syntax.Common: makeRelevant :: Arg a -> Arg a
- Agda.Syntax.Concrete.Definitions: NiceDef :: Range -> [Declaration] -> [NiceTypeSignature] -> [NiceDefinition] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: data NiceDefinition
- Agda.Syntax.Concrete.Definitions: instance Data NiceDefinition
- Agda.Syntax.Concrete.Definitions: instance HasRange NiceDefinition
- Agda.Syntax.Concrete.Definitions: instance Typeable NiceDefinition
- Agda.Syntax.Concrete.Name: isInfix :: Name -> Bool
- Agda.Syntax.Concrete.Name: isNonfix :: Name -> Bool
- Agda.Syntax.Concrete.Name: isPostfix :: Name -> Bool
- Agda.Syntax.Concrete.Name: isPrefix :: Name -> Bool
- Agda.Syntax.Concrete.Operators.Parser: infixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: infixlP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: infixrP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: nonfixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: postfixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: postop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> ReadP a e)
- Agda.Syntax.Concrete.Operators.Parser: prefixP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
- Agda.Syntax.Concrete.Operators.Parser: preop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> ReadP a e)
- Agda.Syntax.Internal: Clauses :: Maybe Clause -> Clause -> Clauses
- Agda.Syntax.Internal: Fun :: (Arg Type) -> Type -> Term
- Agda.Syntax.Internal: FunV :: (Arg Type) -> Term -> FunView
- Agda.Syntax.Internal: Lub :: Sort -> Sort -> Sort
- Agda.Syntax.Internal: MetaS :: MetaId -> Args -> Sort
- Agda.Syntax.Internal: NoBind :: ClauseBody -> ClauseBody
- Agda.Syntax.Internal: NoFunV :: Term -> FunView
- Agda.Syntax.Internal: Suc :: Sort -> Sort
- Agda.Syntax.Internal: absBody :: Abs a -> a
- Agda.Syntax.Internal: data Clauses
- Agda.Syntax.Internal: data FunView
- Agda.Syntax.Internal: funView :: Term -> FunView
- Agda.Syntax.Internal: instance Data Clauses
- Agda.Syntax.Internal: instance Eq Sort
- Agda.Syntax.Internal: instance Eq Term
- Agda.Syntax.Internal: instance Eq Type
- Agda.Syntax.Internal: instance Eq a => Eq (Abs a)
- Agda.Syntax.Internal: instance Eq a => Eq (Tele a)
- Agda.Syntax.Internal: instance HasRange Clauses
- Agda.Syntax.Internal: instance Ord Sort
- Agda.Syntax.Internal: instance Ord Term
- Agda.Syntax.Internal: instance Ord Type
- Agda.Syntax.Internal: instance Ord a => Ord (Abs a)
- Agda.Syntax.Internal: instance Ord a => Ord (Tele a)
- Agda.Syntax.Internal: instance Show Clauses
- Agda.Syntax.Internal: instance Typeable Clauses
- Agda.Syntax.Internal: maybeOriginalClause :: Clauses -> Maybe Clause
- Agda.Syntax.Internal: originalClause :: Clauses -> Clause
- Agda.Syntax.Internal: sLub :: Sort -> Sort -> Sort
- Agda.Syntax.Internal: telFromList :: [Arg (String, Type)] -> Telescope
- Agda.Syntax.Internal: telToList :: Telescope -> [Arg (String, Type)]
- Agda.Syntax.Internal: teleLam :: Telescope -> Term -> Term
- Agda.Syntax.Internal: translatedClause :: Clauses -> Clause
- Agda.Syntax.Literal: LitLevel :: Range -> Integer -> Literal
- Agda.Syntax.Scope.Base: importedNameSpace :: Access -> NameSpaceId
- Agda.Syntax.Scope.Base: scopeImported :: Scope -> NameSpace
- Agda.Syntax.Scope.Base: scopePrivate :: Scope -> NameSpace
- Agda.Syntax.Scope.Base: scopePublic :: Scope -> NameSpace
- Agda.Syntax.Translation.AbstractToConcrete: data TypeAndDef
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] (ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (a1, a2) (c1, c2)
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] (ToConcrete a1 c1, ToConcrete a2 c2, ToConcrete a3 c3) => ToConcrete (a1, a2, a3) (c1, c2, c3)
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete (Constr Constructor) Declaration
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete (DontTouchMe a) a
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete AsWhereDecls WhereClause
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete Clause [Declaration]
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete Declaration [Declaration]
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete Expr Expr
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete LHS LHS
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete LamBinding LamBinding
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete LetBinding [Declaration]
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete ModuleName QName
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete Name Name
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete Pattern Pattern
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete QName QName
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete RHS (RHS, [Expr], [Expr], [Declaration])
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete RangeAndPragma Pragma
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete TypeAndDef [Declaration]
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete TypedBinding TypedBinding
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete TypedBindings TypedBindings
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete [Declaration] [Declaration]
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete a c => ToConcrete (Arg a) (Arg c)
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete a c => ToConcrete (Named name a) (Named name c)
- Agda.Syntax.Translation.AbstractToConcrete: instance [overlap ok] ToConcrete a c => ToConcrete [a] [c]
- Agda.Syntax.Translation.ConcreteToAbstract: instance [overlap ok] ToAbstract NiceDefinition Definition
- Agda.Syntax.Translation.InternalToAbstract: instance Reify i a => Reify (Abs i) (Name, a)
- Agda.Termination.SparseMatrix: instance (Integral i, HasZero b, Pretty b) => Pretty (Matrix i b)
- Agda.Termination.SparseMatrix: instance (Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b)
- Agda.TypeChecking.Abstract: instance (Subst a, AbstractTerm a) => AbstractTerm (Abs a)
- Agda.TypeChecking.CompiledClause: compile :: Cls -> CompiledClauses
- Agda.TypeChecking.CompiledClause: compileClauses :: [Clauses] -> CompiledClauses
- Agda.TypeChecking.CompiledClause: nextSplit :: Cls -> Maybe Int
- Agda.TypeChecking.CompiledClause: splitC :: Int -> Cl -> Case Cl
- Agda.TypeChecking.CompiledClause: splitOn :: Int -> Cls -> Case Cls
- Agda.TypeChecking.CompiledClause: type Cl = ([Arg Pattern], ClauseBody)
- Agda.TypeChecking.CompiledClause: type Cls = [Cl]
- Agda.TypeChecking.Constraints: addNewConstraints :: MonadTCM tcm => Constraints -> tcm ()
- Agda.TypeChecking.Constraints: solveConstraints :: MonadTCM tcm => Constraints -> tcm Constraints
- Agda.TypeChecking.Conversion: equalArgs :: MonadTCM tcm => Type -> Args -> Args -> tcm Constraints
- Agda.TypeChecking.Empty: isEmptyTypeC :: MonadTCM tcm => Type -> tcm Constraints
- Agda.TypeChecking.Level: BlockedLevel :: Term -> LevelAtom
- Agda.TypeChecking.Level: ClosedLevel :: Integer -> PlusView
- Agda.TypeChecking.Level: Max :: [PlusView] -> LevelView
- Agda.TypeChecking.Level: MetaLevel :: MetaId -> Args -> LevelAtom
- Agda.TypeChecking.Level: NeutralLevel :: Term -> LevelAtom
- Agda.TypeChecking.Level: Plus :: Integer -> LevelAtom -> PlusView
- Agda.TypeChecking.Level: data LevelAtom
- Agda.TypeChecking.Level: data PlusView
- Agda.TypeChecking.Level: instance Eq LevelAtom
- Agda.TypeChecking.Level: instance Eq PlusView
- Agda.TypeChecking.Level: instance Ord LevelAtom
- Agda.TypeChecking.Level: instance Ord PlusView
- Agda.TypeChecking.Level: instance Show LevelAtom
- Agda.TypeChecking.Level: instance Show LevelView
- Agda.TypeChecking.Level: instance Show PlusView
- Agda.TypeChecking.Level: levelMax :: LevelKit -> Term -> Term -> Term
- Agda.TypeChecking.Level: levelSuc :: LevelKit -> Term -> Term
- Agda.TypeChecking.Level: levelType :: LevelKit -> Term
- Agda.TypeChecking.Level: levelZero :: LevelKit -> Term
- Agda.TypeChecking.Level: newtype LevelView
- Agda.TypeChecking.Level: unLevelAtom :: LevelAtom -> Term
- Agda.TypeChecking.Level: unLevelView :: MonadTCM tcm => LevelView -> tcm Term
- Agda.TypeChecking.MetaVars: (=:) :: (MonadTCM tcm, HasMeta t, KillRange t, Show t) => MetaId -> t -> tcm ()
- Agda.TypeChecking.MetaVars: (=:=) :: MonadTCM tcm => MetaId -> Term -> tcm ()
- Agda.TypeChecking.MetaVars: abortAssign :: MonadTCM tcm => tcm a
- Agda.TypeChecking.MetaVars: assignS :: MonadTCM tcm => MetaId -> Args -> Sort -> tcm Constraints
- Agda.TypeChecking.MetaVars: assignSort :: MonadTCM tcm => MetaId -> Sort -> tcm ()
- Agda.TypeChecking.MetaVars: checkArgs :: MonadTCM tcm => MetaId -> Args -> FVs -> tcm [Arg Nat]
- Agda.TypeChecking.MetaVars: class HasMeta t
- Agda.TypeChecking.MetaVars: handleAbort :: MonadTCM tcm => TCM a -> TCM a -> tcm a
- Agda.TypeChecking.MetaVars: instance HasMeta Sort
- Agda.TypeChecking.MetaVars: instance HasMeta Term
- Agda.TypeChecking.MetaVars: isVar :: Arg Term -> Bool
- Agda.TypeChecking.MetaVars: metaInstance :: (HasMeta t, MonadTCM tcm) => t -> tcm MetaInstantiation
- Agda.TypeChecking.MetaVars: metaVariable :: HasMeta t => MetaId -> Args -> t
- Agda.TypeChecking.MetaVars: validParameters :: Monad m => Args -> FVs -> m [Arg Nat]
- Agda.TypeChecking.Monad.Base: AbortAssign :: TCState -> TCErr'
- Agda.TypeChecking.Monad.Base: ArgsCmp :: [Polarity] -> Type -> Args -> Args -> Constraint
- Agda.TypeChecking.Monad.Base: ScopeCheckDefinition :: NiceDefinition -> (Maybe Definition) -> Call
- Agda.TypeChecking.Monad.Base: axEpDef :: Defn -> Maybe EpicCode
- Agda.TypeChecking.Monad.Base: axHsDef :: Defn -> Maybe HaskellRepresentation
- Agda.TypeChecking.Monad.Base: conHsCode :: Defn -> Maybe (HaskellType, HaskellCode)
- Agda.TypeChecking.Monad.Base: dataHsType :: Defn -> Maybe HaskellType
- Agda.TypeChecking.Monad.Base: envIrrelevant :: TCEnv -> Bool
- Agda.TypeChecking.Monad.Base: envReplace :: TCEnv -> Bool
- Agda.TypeChecking.Monad.Base: stConstraints :: TCState -> Constraints
- Agda.TypeChecking.Monad.Base: type ConstraintClosure = Closure Constraint
- Agda.TypeChecking.Monad.Builtin: builtinTypes :: [String]
- Agda.TypeChecking.Monad.Builtin: getBuiltinThings :: MonadTCM tcm => tcm (BuiltinThings PrimFun)
- Agda.TypeChecking.Monad.Builtin: primAgdaTerm :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermCon :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermDef :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermLam :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermPi :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermSort :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermUnsupported :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primAgdaTermVar :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primArg :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primArgArg :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primBool :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primChar :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primCons :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primEquality :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primFalse :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primFlat :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primFloat :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primIO :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primInf :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primInteger :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primLevel :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primLevelMax :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primLevelSuc :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primLevelZero :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primList :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNat :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatDivSucAux :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatEquality :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatLess :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatMinus :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatModSucAux :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatPlus :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNatTimes :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primNil :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primQName :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primRefl :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primSharp :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primSize :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primSizeInf :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primSizeSuc :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primString :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primSuc :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primTrue :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Builtin: primZero :: MonadTCM tcm => tcm Term
- Agda.TypeChecking.Monad.Constraints: addConstraints :: MonadTCM tcm => Constraints -> tcm ()
- Agda.TypeChecking.Monad.Constraints: getConstraints :: MonadTCM tcm => tcm Constraints
- Agda.TypeChecking.Monad.Constraints: lookupConstraint :: MonadTCM tcm => Int -> tcm ConstraintClosure
- Agda.TypeChecking.Monad.Constraints: takeConstraints :: MonadTCM tcm => tcm Constraints
- Agda.TypeChecking.Monad.Context: applyRelevanceToContext :: MonadTCM tcm => Relevance -> tcm a -> tcm a
- Agda.TypeChecking.Monad.Context: wakeIrrelevantVars :: MonadTCM tcm => tcm a -> tcm a
- Agda.TypeChecking.Monad.Imports: preserveDecodedModules :: TCM a -> TCM a
- Agda.TypeChecking.Pretty: comma :: MonadTCM tcm => tcm Doc
- Agda.TypeChecking.Pretty: empty :: MonadTCM tcm => tcm Doc
- Agda.TypeChecking.Primitive: (<#>) :: MonadTCM tcm => tcm Term -> tcm Term -> tcm Term
- Agda.TypeChecking.Primitive: (<@>) :: MonadTCM tcm => tcm Term -> tcm Term -> tcm Term
- Agda.TypeChecking.Primitive: hPi :: MonadTCM tcm => String -> tcm Type -> tcm Type -> tcm Type
- Agda.TypeChecking.Primitive: nPi :: MonadTCM tcm => String -> tcm Type -> tcm Type -> tcm Type
- Agda.TypeChecking.Reduce: instance InstantiateFull Clauses
- Agda.TypeChecking.Reduce: instance InstantiateFull a => InstantiateFull (Tele a)
- Agda.TypeChecking.Reduce: instance InstantiateFull t => InstantiateFull (Abs t)
- Agda.TypeChecking.Reduce: instance Normalise a => Normalise (Tele a)
- Agda.TypeChecking.Reduce: instance Normalise t => Normalise (Abs t)
- Agda.TypeChecking.Reduce: instance Reduce t => Reduce (Abs t)
- Agda.TypeChecking.Rules.Builtin: bindBuiltinBool :: String -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinCons :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinDummyConstructor :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinEquality :: Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: bindBuiltinNil :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinPrimitive :: String -> String -> Expr -> (Term -> TCM ()) -> TCM ()
- Agda.TypeChecking.Rules.Builtin: bindBuiltinRefl :: Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinSuc' :: String -> TCM Term -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindBuiltinType :: String -> Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: bindBuiltinType1 :: String -> Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: bindBuiltinZero' :: String -> TCM Term -> Expr -> TCM Term
- Agda.TypeChecking.Rules.Builtin: bindConstructor :: String -> (Expr -> TCM Term) -> Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: bindPostulate :: String -> TCM Type -> Expr -> TCM ()
- Agda.TypeChecking.Rules.Builtin: builtinConstructors :: [(String, Expr -> TCM Term)]
- Agda.TypeChecking.Rules.Builtin: builtinDatatypes :: [(String, Int)]
- Agda.TypeChecking.Rules.Builtin: builtinPostulates :: [(String, TCM Type)]
- Agda.TypeChecking.Rules.Builtin: builtinPrimitives :: [(String, (String, Term -> TCM ()))]
- Agda.TypeChecking.Rules.Builtin: inductiveCheck :: String -> Term -> TCM ()
- Agda.TypeChecking.Rules.Builtin: typeOfSizeInf :: TCM Type
- Agda.TypeChecking.Rules.Builtin: typeOfSizeSuc :: TCM Type
- Agda.TypeChecking.Rules.Decl: checkDefinition :: Definition -> TCM ()
- Agda.TypeChecking.Rules.LHS.Unify: getSub :: Unify Sub
- Agda.TypeChecking.Rules.Term: checkTelescope :: Telescope -> Sort -> (Telescope -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: checkTypedBinding_ :: Hiding -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: forcePi :: MonadTCM tcm => Hiding -> String -> Type -> tcm (Type, Constraints)
- Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Clauses
- Agda.TypeChecking.Substitute: data TelView
- Agda.TypeChecking.Substitute: instance Abstract Clauses
- Agda.TypeChecking.Substitute: instance Apply Clauses
- Agda.TypeChecking.Telescope: rename :: Subst t => Permutation -> t -> t
- Agda.TypeChecking.UniversePolymorphism: mlevel :: MonadTCM tcm => tcm (Maybe Term)
- Agda.TypeChecking.UniversePolymorphism: solveLevelConstraints :: TCM ()
- Agda.TypeChecking.UniversePolymorphism: warshallConstraint :: Constraint -> TCM [Constraint]
- Agda.TypeChecking.With: ArgPat :: Int -> ConPos -> ConPos
- Agda.TypeChecking.With: Here :: ConPos
- Agda.TypeChecking.With: constructorsInClause :: ConPos -> Clause -> [Range]
- Agda.TypeChecking.With: constructorsInClauses :: ConPos -> [Clause] -> [Range]
- Agda.TypeChecking.With: data ConPos
- Agda.TypeChecking.With: updateWithConstructorRanges :: [Telescope] -> [Arg Pattern] -> RHS -> [Arg Pattern]
+ Agda.Auto.Convert: fmLevel :: MetaId -> PlusLevel -> Bool
+ Agda.Auto.Convert: frommyType :: MExp O -> ErrorT String IO Type
+ Agda.Auto.SearchControl: costIotaStep, costIncrease, costAppExtraRef :: Int
+ Agda.Auto.SearchControl: prioNo, prioAbsurdLambda, prioNoIota, prioCompCopy, prioCompUnif, prioCompChoice, prioCompIota, prioCompareArgList, prioCompBetaStructured, prioCompBeta, prioInferredTypeUnknown, prioTypecheckArgList, prioTypeUnknown :: Int
+ Agda.Auto.Syntax: Instance :: FMode
+ Agda.Compiler.Epic.AuxAST: casee :: Expr -> [Branch] -> Expr
+ Agda.Compiler.Epic.AuxAST: funQName :: Fun -> Maybe QName
+ Agda.Compiler.Epic.AuxAST: getBrVars :: Branch -> [Var]
+ Agda.Compiler.Epic.AuxAST: lazy :: Expr -> Expr
+ Agda.Compiler.Epic.AuxAST: lett :: Var -> Expr -> Expr -> Expr
+ Agda.Compiler.Epic.AuxAST: substs :: [(Var, Var)] -> Expr -> Expr
+ Agda.Compiler.Epic.CaseOpts: caseOpts :: [Fun] -> Compile TCM [Fun]
+ Agda.Compiler.Epic.CaseOpts: caseOptsExpr :: Expr -> Compile TCM Expr
+ Agda.Compiler.Epic.CompileState: assignConstrTag :: QName -> Compile TCM Tag
+ Agda.Compiler.Epic.CompileState: assignConstrTag' :: QName -> [QName] -> Compile TCM Tag
+ Agda.Compiler.Epic.CompileState: bindExpr :: Expr -> (Var -> Compile TCM Expr) -> Compile TCM Expr
+ Agda.Compiler.Epic.CompileState: compiledModules :: CompileState -> Map TopLevelModuleName (EInterface, Set FilePath)
+ Agda.Compiler.Epic.CompileState: constrInScope :: QName -> Compile TCM Bool
+ Agda.Compiler.Epic.CompileState: curFun :: CompileState -> String
+ Agda.Compiler.Epic.CompileState: curModule :: CompileState -> EInterface
+ Agda.Compiler.Epic.CompileState: getConArity :: QName -> Compile TCM Int
+ Agda.Compiler.Epic.CompileState: getConData :: QName -> Compile TCM QName
+ Agda.Compiler.Epic.CompileState: getConstrTag' :: QName -> Compile TCM (Maybe Tag)
+ Agda.Compiler.Epic.CompileState: getDataCon :: QName -> Compile TCM [QName]
+ Agda.Compiler.Epic.CompileState: getForcedArgs :: QName -> Compile TCM ForcedArgs
+ Agda.Compiler.Epic.CompileState: getType :: QName -> Compile TCM Type
+ Agda.Compiler.Epic.CompileState: getsEI :: (EInterface -> a) -> Compile TCM a
+ Agda.Compiler.Epic.CompileState: importedModules :: CompileState -> EInterface
+ Agda.Compiler.Epic.CompileState: lookInterface :: (EInterface -> Maybe a) -> Compile TCM a -> Compile TCM a
+ Agda.Compiler.Epic.CompileState: modifyEI :: (EInterface -> EInterface) -> Compile TCM ()
+ Agda.Compiler.Epic.CompileState: putConArity :: QName -> Int -> Compile TCM ()
+ Agda.Compiler.Epic.CompileState: putConstrTag :: QName -> Tag -> Compile TCM ()
+ Agda.Compiler.Epic.CompileState: putForcedArgs :: QName -> ForcedArgs -> Compile TCM ()
+ Agda.Compiler.Epic.CompileState: resetNameSupply :: Compile TCM ()
+ Agda.Compiler.Epic.Epic: prettyEpic :: Expr -> String
+ Agda.Compiler.Epic.Erasure: (||-) :: Relevance -> Relevance -> Relevance
+ Agda.Compiler.Epic.Erasure: diff :: (Ord k, Eq a) => Map k a -> Map k a -> [(k, (a, a))]
+ Agda.Compiler.Epic.Erasure: ignoreForced :: Relevance -> Bool
+ Agda.Compiler.Epic.Erasure: initialRels :: Type -> Relevance -> [Relevance]
+ Agda.Compiler.Epic.Erasure: removeUnused :: Map Var [Relevance] -> Expr -> Expr
+ Agda.Compiler.Epic.ForceConstrs: forceConstrs :: [Fun] -> Compile TCM [Fun]
+ Agda.Compiler.Epic.ForceConstrs: forceFun :: Fun -> Compile TCM Fun
+ Agda.Compiler.Epic.ForceConstrs: makeForcedArgs :: Type -> ForcedArgs
+ Agda.Compiler.Epic.Forcing: buildTerm :: Var -> Nat -> Term -> Compile TCM (Expr -> Expr, Var)
+ Agda.Compiler.Epic.Forcing: dataParametersTCM :: QName -> TCM Nat
+ Agda.Compiler.Epic.Forcing: forcedExpr :: [Var] -> Telescope -> Expr -> Compile TCM Expr
+ Agda.Compiler.Epic.Forcing: piApplyM' :: Type -> Args -> TCM Type
+ Agda.Compiler.Epic.Injection: (!!!) :: Ord k => k :-> v -> k -> v
+ Agda.Compiler.Epic.Injection: (<:) :: Term -> Term -> (QName :-> InjectiveFun) -> Compile TCM InjConstraints
+ Agda.Compiler.Epic.Injection: IsTag :: Tag -> TagEq
+ Agda.Compiler.Epic.Injection: Same :: Int -> TagEq
+ Agda.Compiler.Epic.Injection: Tags :: Int :-> Set QName -> QName :-> TagEq -> Tags
+ Agda.Compiler.Epic.Injection: addConstraint :: QName -> QName -> InjConstraints -> InjConstraints
+ Agda.Compiler.Epic.Injection: constrGroup :: Tags -> QName :-> TagEq
+ Agda.Compiler.Epic.Injection: data TagEq
+ Agda.Compiler.Epic.Injection: data Tags
+ Agda.Compiler.Epic.Injection: emptyC :: InjConstraints
+ Agda.Compiler.Epic.Injection: eqGroups :: Tags -> Int :-> Set QName
+ Agda.Compiler.Epic.Injection: findInjection :: [(QName, Definition)] -> Compile TCM [(QName, Definition)]
+ Agda.Compiler.Epic.Injection: initialTags :: Map QName Tag -> [QName] -> Tags
+ Agda.Compiler.Epic.Injection: insertAt :: (Nat, Term) -> Term -> Term
+ Agda.Compiler.Epic.Injection: instance Eq TagEq
+ Agda.Compiler.Epic.Injection: isInjective :: QName -> [Clause] -> Compile TCM (Maybe ((QName, InjectiveFun), [(QName, QName)]))
+ Agda.Compiler.Epic.Injection: isInjectiveHere :: QName -> Int -> Clause -> Compile TCM InjConstraints
+ Agda.Compiler.Epic.Injection: isNoBody :: ClauseBody -> Bool
+ Agda.Compiler.Epic.Injection: litCon :: Literal -> Bool
+ Agda.Compiler.Epic.Injection: litToCon :: Literal -> TCM Term
+ Agda.Compiler.Epic.Injection: mergeGroups :: Int -> Int -> Tags -> Compile TCM (Maybe Tags)
+ Agda.Compiler.Epic.Injection: nrBinds :: Num i => Pattern -> i
+ Agda.Compiler.Epic.Injection: patternToTerm :: Nat -> Pattern -> Term
+ Agda.Compiler.Epic.Injection: remAbs :: ClauseBody -> Term
+ Agda.Compiler.Epic.Injection: replaceFunCC :: QName -> CompiledClauses -> Compile TCM ()
+ Agda.Compiler.Epic.Injection: setTag :: Int -> Tag -> Tags -> Compile TCM (Maybe Tags)
+ Agda.Compiler.Epic.Injection: solve :: [QName] -> [((QName, InjectiveFun), [(QName, QName)])] -> Compile TCM [(QName, InjectiveFun)]
+ Agda.Compiler.Epic.Injection: substForDot :: [Arg Pattern] -> Substitution
+ Agda.Compiler.Epic.Injection: type InjConstraints = Maybe [(QName, QName)]
+ Agda.Compiler.Epic.Injection: unifiable :: QName -> QName -> Compile TCM Bool
+ Agda.Compiler.Epic.Injection: unify :: QName -> QName -> Tags -> Compile TCM (Maybe Tags)
+ Agda.Compiler.Epic.Injection: unionConstraints :: [InjConstraints] -> InjConstraints
+ Agda.Compiler.Epic.Interface: EInterface :: Map QName Tag -> Set Var -> Map QName Bool -> Map QName Int -> Maybe QName -> Map Var RelevantArgs -> Map QName ForcedArgs -> Map QName InjectiveFun -> EInterface
+ Agda.Compiler.Epic.Interface: Forced :: Forced
+ Agda.Compiler.Epic.Interface: InjectiveFun :: Nat -> Nat -> InjectiveFun
+ Agda.Compiler.Epic.Interface: Irr :: Relevance
+ Agda.Compiler.Epic.Interface: NotForced :: Forced
+ Agda.Compiler.Epic.Interface: PrimTag :: Var -> Tag
+ Agda.Compiler.Epic.Interface: Rel :: Relevance
+ Agda.Compiler.Epic.Interface: Tag :: Int -> Tag
+ Agda.Compiler.Epic.Interface: conArity :: EInterface -> Map QName Int
+ Agda.Compiler.Epic.Interface: constrTags :: EInterface -> Map QName Tag
+ Agda.Compiler.Epic.Interface: data EInterface
+ Agda.Compiler.Epic.Interface: data Forced
+ Agda.Compiler.Epic.Interface: data InjectiveFun
+ Agda.Compiler.Epic.Interface: data Relevance
+ Agda.Compiler.Epic.Interface: data Tag
+ Agda.Compiler.Epic.Interface: defDelayed :: EInterface -> Map QName Bool
+ Agda.Compiler.Epic.Interface: definitions :: EInterface -> Set Var
+ Agda.Compiler.Epic.Interface: forced :: ForcedArgs -> [a] -> [a]
+ Agda.Compiler.Epic.Interface: forcedArgs :: EInterface -> Map QName ForcedArgs
+ Agda.Compiler.Epic.Interface: injArg :: InjectiveFun -> Nat
+ Agda.Compiler.Epic.Interface: injArity :: InjectiveFun -> Nat
+ Agda.Compiler.Epic.Interface: injectiveFuns :: EInterface -> Map QName InjectiveFun
+ Agda.Compiler.Epic.Interface: instance Eq Forced
+ Agda.Compiler.Epic.Interface: instance Eq InjectiveFun
+ Agda.Compiler.Epic.Interface: instance Eq Relevance
+ Agda.Compiler.Epic.Interface: instance Eq Tag
+ Agda.Compiler.Epic.Interface: instance Monoid EInterface
+ Agda.Compiler.Epic.Interface: instance Ord Relevance
+ Agda.Compiler.Epic.Interface: instance Ord Tag
+ Agda.Compiler.Epic.Interface: instance Show EInterface
+ Agda.Compiler.Epic.Interface: instance Show Forced
+ Agda.Compiler.Epic.Interface: instance Show InjectiveFun
+ Agda.Compiler.Epic.Interface: instance Show Relevance
+ Agda.Compiler.Epic.Interface: instance Show Tag
+ Agda.Compiler.Epic.Interface: instance Typeable EInterface
+ Agda.Compiler.Epic.Interface: instance Typeable Forced
+ Agda.Compiler.Epic.Interface: instance Typeable InjectiveFun
+ Agda.Compiler.Epic.Interface: instance Typeable Relevance
+ Agda.Compiler.Epic.Interface: instance Typeable Tag
+ Agda.Compiler.Epic.Interface: mainName :: EInterface -> Maybe QName
+ Agda.Compiler.Epic.Interface: notForced :: ForcedArgs -> [a] -> [a]
+ Agda.Compiler.Epic.Interface: pairwiseFilter :: [Bool] -> [a] -> [a]
+ Agda.Compiler.Epic.Interface: relevantArgs :: EInterface -> Map Var RelevantArgs
+ Agda.Compiler.Epic.Interface: type ForcedArgs = [Forced]
+ Agda.Compiler.Epic.Interface: type RelevantArgs = [Relevance]
+ Agda.Compiler.Epic.Interface: type Var = String
+ Agda.Compiler.Epic.NatDetection: isNatish :: QName -> Defn -> Compile TCM (Maybe (ForcedArgs, [QName]))
+ Agda.Compiler.Epic.Primitive: initialPrims :: Compile TCM ()
+ Agda.Compiler.Epic.Primitive: prZero, prNatEquality, prPred, prFalse, prTrue, prSuc :: Var
+ Agda.Compiler.Epic.Smashing: (+++) :: Telescope -> Telescope -> Telescope
+ Agda.Compiler.Epic.Smashing: buildLambda :: (Ord n, Num n) => n -> Expr -> Expr
+ Agda.Compiler.Epic.Smashing: defnPars :: Integral n => Defn -> n
+ Agda.Compiler.Epic.Smashing: inferable :: Set QName -> QName -> [Arg Term] -> Compile TCM (Maybe Expr)
+ Agda.Compiler.Epic.Smashing: smash'em :: [Fun] -> Compile TCM [Fun]
+ Agda.Compiler.Epic.Smashing: smashable :: Int -> Type -> Compile TCM (Maybe Expr)
+ Agda.Compiler.Epic.Static: etaExpand :: Term -> Compile TCM Term
+ Agda.Compiler.Epic.Static: evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses
+ Agda.Compiler.Epic.Static: evaluateTerm :: Term -> Compile TCM Term
+ Agda.Compiler.Epic.Static: normaliseStatic :: CompiledClauses -> Compile TCM CompiledClauses
+ Agda.Compiler.HaskellTypes: hsUnit :: HaskellType
+ Agda.Compiler.JS.Case: Case :: [Patt] -> Exp -> Case
+ Agda.Compiler.JS.Case: Tag :: MemberId -> [MemberId] -> (Exp -> [Exp] -> Exp) -> Tag
+ Agda.Compiler.JS.Case: Tagged :: Tag -> [Patt] -> Patt
+ Agda.Compiler.JS.Case: VarPatt :: Patt
+ Agda.Compiler.JS.Case: body :: Case -> Exp
+ Agda.Compiler.JS.Case: data Case
+ Agda.Compiler.JS.Case: data Patt
+ Agda.Compiler.JS.Case: data Tag
+ Agda.Compiler.JS.Case: instance Pretty Case
+ Agda.Compiler.JS.Case: instance Pretty Patt
+ Agda.Compiler.JS.Case: instance Show Case
+ Agda.Compiler.JS.Case: instance Show Patt
+ Agda.Compiler.JS.Case: instance Show Tag
+ Agda.Compiler.JS.Case: lambda :: [Case] -> Exp
+ Agda.Compiler.JS.Case: lambda' :: Nat -> Nat -> Nat -> [Case] -> Exp
+ Agda.Compiler.JS.Case: match :: Nat -> Nat -> Nat -> [Case] -> MemberId -> Nat -> Exp
+ Agda.Compiler.JS.Case: numVars :: [Patt] -> Nat
+ Agda.Compiler.JS.Case: numVars' :: Patt -> Nat
+ Agda.Compiler.JS.Case: pats :: Case -> [Patt]
+ Agda.Compiler.JS.Case: pop :: Case -> Case
+ Agda.Compiler.JS.Case: refine :: MemberId -> Nat -> Case -> [Case]
+ Agda.Compiler.JS.Case: tag :: Case -> Map MemberId Nat
+ Agda.Compiler.JS.Case: tags :: [Case] -> Map MemberId Nat
+ Agda.Compiler.JS.Case: visit :: [Case] -> Exp -> [Exp] -> Exp
+ Agda.Compiler.JS.Compiler: args :: Maybe (QName, Int) -> Args -> TCM [Exp]
+ Agda.Compiler.JS.Compiler: body :: ClauseBody -> TCM Exp
+ Agda.Compiler.JS.Compiler: clause :: Clause -> TCM Case
+ Agda.Compiler.JS.Compiler: compile :: Interface -> TCM ()
+ Agda.Compiler.JS.Compiler: compileDir :: TCM FilePath
+ Agda.Compiler.JS.Compiler: compilerMain :: Interface -> TCM ()
+ Agda.Compiler.JS.Compiler: curModule :: TCM Module
+ Agda.Compiler.JS.Compiler: defProjection :: Definition -> Maybe (QName, Int)
+ Agda.Compiler.JS.Compiler: definition :: (QName, Definition) -> TCM Export
+ Agda.Compiler.JS.Compiler: defn :: QName -> [MemberId] -> Type -> Maybe JSCode -> Defn -> TCM Exp
+ Agda.Compiler.JS.Compiler: dummyLambda :: Int -> Exp -> Exp
+ Agda.Compiler.JS.Compiler: global :: QName -> TCM (Exp, [MemberId])
+ Agda.Compiler.JS.Compiler: global' :: QName -> TCM (Exp, [MemberId])
+ Agda.Compiler.JS.Compiler: insertAfter :: Set [MemberId] -> Export -> [Export] -> [Export]
+ Agda.Compiler.JS.Compiler: isSingleton :: Type -> TCM (Maybe Exp)
+ Agda.Compiler.JS.Compiler: jsFileName :: GlobalId -> String
+ Agda.Compiler.JS.Compiler: jsMember :: Name -> MemberId
+ Agda.Compiler.JS.Compiler: jsMod :: ModuleName -> GlobalId
+ Agda.Compiler.JS.Compiler: literal :: Literal -> Exp
+ Agda.Compiler.JS.Compiler: mapping :: [Pattern] -> (Nat, Nat, [Exp])
+ Agda.Compiler.JS.Compiler: mapping' :: Pattern -> (Nat, Nat, [Exp]) -> (Nat, Nat, [Exp])
+ Agda.Compiler.JS.Compiler: numPars :: [Clause] -> Nat
+ Agda.Compiler.JS.Compiler: outFile :: GlobalId -> TCM FilePath
+ Agda.Compiler.JS.Compiler: outFile_ :: TCM FilePath
+ Agda.Compiler.JS.Compiler: pattern :: Pattern -> TCM Patt
+ Agda.Compiler.JS.Compiler: qname :: QName -> TCM Exp
+ Agda.Compiler.JS.Compiler: reorder :: [Export] -> [Export]
+ Agda.Compiler.JS.Compiler: reorder' :: Set [MemberId] -> [Export] -> [Export]
+ Agda.Compiler.JS.Compiler: tag :: QName -> TCM Tag
+ Agda.Compiler.JS.Compiler: term :: Term -> TCM Exp
+ Agda.Compiler.JS.Compiler: visitorName :: QName -> TCM MemberId
+ Agda.Compiler.JS.Compiler: writeModule :: Module -> TCM ()
+ Agda.Compiler.JS.Parser: binop :: Parser String
+ Agda.Compiler.JS.Parser: braced :: Parser a -> Parser a
+ Agda.Compiler.JS.Parser: bracedBlock :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: bracketed :: Parser a -> Parser a
+ Agda.Compiler.JS.Parser: escChr :: Parser Char
+ Agda.Compiler.JS.Parser: exp :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: exp0 :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: exp1 :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: exp2 :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: exp2' :: (Map String Nat) -> Exp -> Parser Exp
+ Agda.Compiler.JS.Parser: exp3 :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: exp3' :: (Map String Nat) -> Exp -> Parser Exp
+ Agda.Compiler.JS.Parser: field :: (Map String Nat) -> Parser (MemberId, Exp)
+ Agda.Compiler.JS.Parser: function :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: globalid :: Parser Exp
+ Agda.Compiler.JS.Parser: identifier :: Parser String
+ Agda.Compiler.JS.Parser: ifBlock :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: intLit :: Parser Exp
+ Agda.Compiler.JS.Parser: localid :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: object :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: parened :: Parser a -> Parser a
+ Agda.Compiler.JS.Parser: parse :: String -> Either Exp String
+ Agda.Compiler.JS.Parser: preop :: Parser String
+ Agda.Compiler.JS.Parser: punct :: Char -> Parser ()
+ Agda.Compiler.JS.Parser: quoted :: Parser a -> Parser a
+ Agda.Compiler.JS.Parser: returnBlock :: (Map String Nat) -> Parser Exp
+ Agda.Compiler.JS.Parser: stringChr :: Parser Char
+ Agda.Compiler.JS.Parser: stringLit :: Parser Exp
+ Agda.Compiler.JS.Parser: stringStr :: Parser String
+ Agda.Compiler.JS.Parser: token :: String -> Parser ()
+ Agda.Compiler.JS.Parser: topLevel :: Parser Exp
+ Agda.Compiler.JS.Parser: type Parser = ReadP Char
+ Agda.Compiler.JS.Parser: undef :: Parser Exp
+ Agda.Compiler.JS.Parser: wordBoundary :: Parser ()
+ Agda.Compiler.JS.Pretty: block :: Nat -> Int -> Exp -> String
+ Agda.Compiler.JS.Pretty: block' :: Nat -> Int -> Exp -> String
+ Agda.Compiler.JS.Pretty: br :: Int -> String
+ Agda.Compiler.JS.Pretty: class Pretties a
+ Agda.Compiler.JS.Pretty: class Pretty a
+ Agda.Compiler.JS.Pretty: exports :: Nat -> Int -> Set [MemberId] -> [Export] -> String
+ Agda.Compiler.JS.Pretty: instance (Pretty a, Pretty b) => Pretties (Map a b)
+ Agda.Compiler.JS.Pretty: instance (Pretty a, Pretty b) => Pretty (a, b)
+ Agda.Compiler.JS.Pretty: instance Pretty Exp
+ Agda.Compiler.JS.Pretty: instance Pretty GlobalId
+ Agda.Compiler.JS.Pretty: instance Pretty LocalId
+ Agda.Compiler.JS.Pretty: instance Pretty MemberId
+ Agda.Compiler.JS.Pretty: instance Pretty Module
+ Agda.Compiler.JS.Pretty: instance Pretty a => Pretties [a]
+ Agda.Compiler.JS.Pretty: modname :: GlobalId -> String
+ Agda.Compiler.JS.Pretty: pretties :: Pretties a => Nat -> Int -> a -> [String]
+ Agda.Compiler.JS.Pretty: pretty :: Pretty a => Nat -> Int -> a -> String
+ Agda.Compiler.JS.Pretty: unescape :: Char -> String
+ Agda.Compiler.JS.Pretty: unescapes :: String -> String
+ Agda.Compiler.JS.Substitution: apply :: Exp -> [Exp] -> Exp
+ Agda.Compiler.JS.Substitution: curriedApply :: Exp -> [Exp] -> Exp
+ Agda.Compiler.JS.Substitution: curriedLambda :: Nat -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: emp :: Exp
+ Agda.Compiler.JS.Substitution: fix :: Exp -> Exp
+ Agda.Compiler.JS.Substitution: lookup :: Exp -> MemberId -> Exp
+ Agda.Compiler.JS.Substitution: map :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: map' :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: object :: [([MemberId], Exp)] -> Exp
+ Agda.Compiler.JS.Substitution: self :: Exp -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: shift :: Nat -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: shiftFrom :: Nat -> Nat -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: shifter :: Nat -> Nat -> LocalId -> Exp
+ Agda.Compiler.JS.Substitution: subst :: Nat -> [Exp] -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: subst' :: Nat -> [Exp] -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: substituter :: Nat -> [Exp] -> Nat -> LocalId -> Exp
+ Agda.Compiler.JS.Substitution: union :: Exp -> Exp -> Exp
+ Agda.Compiler.JS.Substitution: vine :: [MemberId] -> Exp -> Exp
+ Agda.Compiler.JS.Syntax: Apply :: Exp -> [Exp] -> Exp
+ Agda.Compiler.JS.Syntax: BinOp :: Exp -> String -> Exp -> Exp
+ Agda.Compiler.JS.Syntax: Char :: Char -> Exp
+ Agda.Compiler.JS.Syntax: Const :: String -> Exp
+ Agda.Compiler.JS.Syntax: Double :: Double -> Exp
+ Agda.Compiler.JS.Syntax: Export :: [MemberId] -> Exp -> Export
+ Agda.Compiler.JS.Syntax: Global :: GlobalId -> Exp
+ Agda.Compiler.JS.Syntax: GlobalId :: [String] -> GlobalId
+ Agda.Compiler.JS.Syntax: If :: Exp -> Exp -> Exp -> Exp
+ Agda.Compiler.JS.Syntax: Integer :: Integer -> Exp
+ Agda.Compiler.JS.Syntax: Lambda :: Nat -> Exp -> Exp
+ Agda.Compiler.JS.Syntax: Local :: LocalId -> Exp
+ Agda.Compiler.JS.Syntax: LocalId :: Nat -> LocalId
+ Agda.Compiler.JS.Syntax: Lookup :: Exp -> MemberId -> Exp
+ Agda.Compiler.JS.Syntax: MemberId :: String -> MemberId
+ Agda.Compiler.JS.Syntax: Module :: GlobalId -> [Export] -> Module
+ Agda.Compiler.JS.Syntax: Object :: (Map MemberId Exp) -> Exp
+ Agda.Compiler.JS.Syntax: PreOp :: String -> Exp -> Exp
+ Agda.Compiler.JS.Syntax: Self :: Exp
+ Agda.Compiler.JS.Syntax: String :: String -> Exp
+ Agda.Compiler.JS.Syntax: Undefined :: Exp
+ Agda.Compiler.JS.Syntax: class Globals a
+ Agda.Compiler.JS.Syntax: class Uses a
+ Agda.Compiler.JS.Syntax: data Exp
+ Agda.Compiler.JS.Syntax: data Export
+ Agda.Compiler.JS.Syntax: data Module
+ Agda.Compiler.JS.Syntax: defn :: Export -> Exp
+ Agda.Compiler.JS.Syntax: expName :: Export -> [MemberId]
+ Agda.Compiler.JS.Syntax: exports :: Module -> [Export]
+ Agda.Compiler.JS.Syntax: globals :: Globals a => a -> Set GlobalId
+ Agda.Compiler.JS.Syntax: instance Data Exp
+ Agda.Compiler.JS.Syntax: instance Data Export
+ Agda.Compiler.JS.Syntax: instance Data GlobalId
+ Agda.Compiler.JS.Syntax: instance Data LocalId
+ Agda.Compiler.JS.Syntax: instance Data MemberId
+ Agda.Compiler.JS.Syntax: instance Data Module
+ Agda.Compiler.JS.Syntax: instance Eq GlobalId
+ Agda.Compiler.JS.Syntax: instance Eq LocalId
+ Agda.Compiler.JS.Syntax: instance Eq MemberId
+ Agda.Compiler.JS.Syntax: instance Globals Exp
+ Agda.Compiler.JS.Syntax: instance Globals Export
+ Agda.Compiler.JS.Syntax: instance Globals Module
+ Agda.Compiler.JS.Syntax: instance Globals a => Globals (Map k a)
+ Agda.Compiler.JS.Syntax: instance Globals a => Globals [a]
+ Agda.Compiler.JS.Syntax: instance Ord GlobalId
+ Agda.Compiler.JS.Syntax: instance Ord LocalId
+ Agda.Compiler.JS.Syntax: instance Ord MemberId
+ Agda.Compiler.JS.Syntax: instance Show Exp
+ Agda.Compiler.JS.Syntax: instance Show Export
+ Agda.Compiler.JS.Syntax: instance Show GlobalId
+ Agda.Compiler.JS.Syntax: instance Show LocalId
+ Agda.Compiler.JS.Syntax: instance Show MemberId
+ Agda.Compiler.JS.Syntax: instance Show Module
+ Agda.Compiler.JS.Syntax: instance Typeable Exp
+ Agda.Compiler.JS.Syntax: instance Typeable Export
+ Agda.Compiler.JS.Syntax: instance Typeable GlobalId
+ Agda.Compiler.JS.Syntax: instance Typeable LocalId
+ Agda.Compiler.JS.Syntax: instance Typeable MemberId
+ Agda.Compiler.JS.Syntax: instance Typeable Module
+ Agda.Compiler.JS.Syntax: instance Uses Exp
+ Agda.Compiler.JS.Syntax: instance Uses Export
+ Agda.Compiler.JS.Syntax: instance Uses a => Uses (Map k a)
+ Agda.Compiler.JS.Syntax: instance Uses a => Uses [a]
+ Agda.Compiler.JS.Syntax: modName :: Module -> GlobalId
+ Agda.Compiler.JS.Syntax: newtype GlobalId
+ Agda.Compiler.JS.Syntax: newtype LocalId
+ Agda.Compiler.JS.Syntax: newtype MemberId
+ Agda.Compiler.JS.Syntax: uses :: Uses a => a -> Set [MemberId]
+ Agda.Compiler.MAlonzo.Compiler: conArityAndPars :: QName -> TCM (Nat, Nat)
+ Agda.Compiler.MAlonzo.Compiler: litqname :: QName -> TCM Exp
+ Agda.Compiler.MAlonzo.Misc: rtmIncompleteMatch :: QName -> Exp
+ Agda.Interaction.BasicOps: CmpElim :: [Polarity] -> a -> [b] -> [b] -> OutputConstraint a b
+ Agda.Interaction.BasicOps: FindInScopeOF :: b -> OutputConstraint a b
+ Agda.Interaction.BasicOps: OutputForm :: ProblemId -> (OutputConstraint a b) -> OutputForm a b
+ Agda.Interaction.BasicOps: data OutputConstraint a b
+ Agda.Interaction.BasicOps: data OutputConstraint' a b
+ Agda.Interaction.BasicOps: instance (Pretty a, Pretty b) => Pretty (OutputConstraint' a b)
+ Agda.Interaction.BasicOps: instance (Show a, Show b) => Show (OutputConstraint a b)
+ Agda.Interaction.BasicOps: instance (ToConcrete a c, ToConcrete b d) => ToConcrete (OutputConstraint a b) (OutputConstraint c d)
+ Agda.Interaction.BasicOps: instance (ToConcrete a c, ToConcrete b d) => ToConcrete (OutputConstraint' a b) (OutputConstraint' c d)
+ Agda.Interaction.BasicOps: instance Functor (OutputConstraint a)
+ Agda.Interaction.BasicOps: instance Reify Constraint (OutputConstraint Expr Expr)
+ Agda.Interaction.BasicOps: instance Reify ProblemConstraint (Closure (OutputForm Expr Expr))
+ Agda.Interaction.EmacsCommand: A :: a -> Lisp a
+ Agda.Interaction.EmacsCommand: Cons :: (Lisp a) -> (Lisp a) -> Lisp a
+ Agda.Interaction.EmacsCommand: L :: [Lisp a] -> Lisp a
+ Agda.Interaction.EmacsCommand: Q :: (Lisp a) -> Lisp a
+ Agda.Interaction.EmacsCommand: data Lisp a
+ Agda.Interaction.EmacsCommand: instance Pretty String
+ Agda.Interaction.EmacsCommand: instance Pretty a => Pretty (Lisp a)
+ Agda.Interaction.EmacsCommand: instance Pretty a => Show (Lisp a)
+ Agda.Interaction.EmacsCommand: putResponse :: Lisp String -> IO ()
+ Agda.Interaction.GhciTop: JS :: Backend
+ Agda.Interaction.GhciTop: instance LowerMeta (Maybe Expr)
+ Agda.Interaction.GhciTop: instance LowerMeta (OpApp Expr)
+ Agda.Interaction.GhciTop: instance LowerMeta ModuleApplication
+ Agda.Interaction.Highlighting.Dot: DotState :: Map ModuleName String -> [String] -> Set (String, String) -> DotState
+ Agda.Interaction.Highlighting.Dot: addConnection :: String -> String -> DotM ()
+ Agda.Interaction.Highlighting.Dot: addModule :: ModuleName -> DotM (String, Bool)
+ Agda.Interaction.Highlighting.Dot: data DotState
+ Agda.Interaction.Highlighting.Dot: dottify :: Interface -> DotM String
+ Agda.Interaction.Highlighting.Dot: dsConnection :: DotState -> Set (String, String)
+ Agda.Interaction.Highlighting.Dot: dsModules :: DotState -> Map ModuleName String
+ Agda.Interaction.Highlighting.Dot: dsNameSupply :: DotState -> [String]
+ Agda.Interaction.Highlighting.Dot: generateDot :: Interface -> TCM ()
+ Agda.Interaction.Highlighting.Dot: initialDotState :: DotState
+ Agda.Interaction.Highlighting.Dot: type DotM = StateT DotState TCM
+ Agda.Interaction.MakeCase: ExtendedLambda :: Int -> Int -> CaseContext
+ Agda.Interaction.MakeCase: FunctionDef :: CaseContext
+ Agda.Interaction.MakeCase: data CaseContext
+ Agda.Interaction.MakeCase: instance Eq CaseContext
+ Agda.Interaction.Options: optDependencyGraph :: CommandLineOptions -> Maybe FilePath
+ Agda.Interaction.Options: optExperimentalIrrelevance :: PragmaOptions -> Bool
+ Agda.Interaction.Options: optJSCompile :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: optSafe :: CommandLineOptions -> Bool
+ Agda.Interaction.Options: unsafePragmaOptions :: PragmaOptions -> [String]
+ Agda.Syntax.Abstract: CompiledJSPragma :: QName -> String -> Pragma
+ Agda.Syntax.Abstract: DataSig :: DefInfo -> QName -> Telescope -> Expr -> Declaration
+ Agda.Syntax.Abstract: ExtendedLam :: ExprInfo -> DefInfo -> QName -> [Clause] -> Expr
+ Agda.Syntax.Abstract: Mutual :: DeclInfo -> [Declaration] -> Declaration
+ Agda.Syntax.Abstract: QuoteTerm :: ExprInfo -> Expr
+ Agda.Syntax.Abstract: RecSig :: DefInfo -> QName -> Telescope -> Expr -> Declaration
+ Agda.Syntax.Abstract: RecUpdate :: ExprInfo -> Expr -> [(Name, Expr)] -> Expr
+ Agda.Syntax.Abstract: RecordModuleIFS :: ModuleName -> ModuleApplication
+ Agda.Syntax.Abstract: SectionApp :: [TypedBindings] -> ModuleName -> [NamedArg Expr] -> ModuleApplication
+ Agda.Syntax.Abstract: StaticPragma :: QName -> Pragma
+ Agda.Syntax.Abstract: Unquote :: ExprInfo -> Expr
+ Agda.Syntax.Abstract: anyAbstract :: AnyAbstract a => a -> Bool
+ Agda.Syntax.Abstract: class AnyAbstract a
+ Agda.Syntax.Abstract: class GetDefInfo a
+ Agda.Syntax.Abstract: data ModuleApplication
+ Agda.Syntax.Abstract: getDefInfo :: GetDefInfo a => a -> Maybe DefInfo
+ Agda.Syntax.Abstract: instance AnyAbstract Declaration
+ Agda.Syntax.Abstract: instance AnyAbstract a => AnyAbstract [a]
+ Agda.Syntax.Abstract: instance Data ModuleApplication
+ Agda.Syntax.Abstract: instance GetDefInfo Declaration
+ Agda.Syntax.Abstract: instance KillRange ModuleApplication
+ Agda.Syntax.Abstract: instance KillRange x => KillRange (ThingWithFixity x)
+ Agda.Syntax.Abstract: instance Show ModuleApplication
+ Agda.Syntax.Abstract: instance Typeable ModuleApplication
+ Agda.Syntax.Abstract.Name: mnameToQName :: ModuleName -> QName
+ Agda.Syntax.Common: Instance :: Hiding
+ Agda.Syntax.Common: NonStrict :: Relevance
+ Agda.Syntax.Common: OnlyQualified :: Access
+ Agda.Syntax.Common: makeInstance :: Arg a -> Arg a
+ Agda.Syntax.Common: moreRelevant :: Relevance -> Relevance -> Bool
+ Agda.Syntax.Concrete: CompiledJSPragma :: !Range -> QName -> String -> Pragma
+ Agda.Syntax.Concrete: DataSig :: !Range -> Induction -> Name -> [LamBinding] -> Expr -> Declaration
+ Agda.Syntax.Concrete: DontCare :: Expr -> Expr
+ Agda.Syntax.Concrete: ExtendedLam :: !Range -> [(LHS, RHS, WhereClause)] -> Expr
+ Agda.Syntax.Concrete: InstanceArg :: !Range -> (Named String Expr) -> Expr
+ Agda.Syntax.Concrete: InstanceP :: !Range -> (Named String Pattern) -> Pattern
+ Agda.Syntax.Concrete: Ordinary :: e -> OpApp e
+ Agda.Syntax.Concrete: QuoteTerm :: !Range -> Expr
+ Agda.Syntax.Concrete: RecUpdate :: !Range -> Expr -> [(Name, Expr)] -> Expr
+ Agda.Syntax.Concrete: RecordModuleIFS :: Range -> QName -> ModuleApplication
+ Agda.Syntax.Concrete: RecordSig :: !Range -> Name -> [LamBinding] -> Expr -> Declaration
+ Agda.Syntax.Concrete: SectionApp :: Range -> [TypedBindings] -> Expr -> ModuleApplication
+ Agda.Syntax.Concrete: StaticPragma :: !Range -> QName -> Pragma
+ Agda.Syntax.Concrete: SyntaxBindingLambda :: !Range -> [LamBinding] -> e -> OpApp e
+ Agda.Syntax.Concrete: ThingWithFixity :: x -> Fixity' -> ThingWithFixity x
+ Agda.Syntax.Concrete: Unquote :: !Range -> Expr
+ Agda.Syntax.Concrete: data ModuleApplication
+ Agda.Syntax.Concrete: data OpApp e
+ Agda.Syntax.Concrete: data ThingWithFixity x
+ Agda.Syntax.Concrete: fromOrdinary :: e -> OpApp e -> e
+ Agda.Syntax.Concrete: instance Data ModuleApplication
+ Agda.Syntax.Concrete: instance Data e => Data (OpApp e)
+ Agda.Syntax.Concrete: instance Functor OpApp
+ Agda.Syntax.Concrete: instance HasRange ModuleApplication
+ Agda.Syntax.Concrete: instance HasRange e => HasRange (OpApp e)
+ Agda.Syntax.Concrete: instance Show AsName
+ Agda.Syntax.Concrete: instance Typeable ModuleApplication
+ Agda.Syntax.Concrete: instance Typeable1 OpApp
+ Agda.Syntax.Concrete: lhsOriginalPattern :: LHS -> Pattern
+ Agda.Syntax.Concrete: lhsRewriteEqn :: LHS -> [RewriteEqn]
+ Agda.Syntax.Concrete: lhsWithExpr :: LHS -> [WithExpr]
+ Agda.Syntax.Concrete: lhsWithPattern :: LHS -> [Pattern]
+ Agda.Syntax.Concrete: patternHead :: Pattern -> Maybe Name
+ Agda.Syntax.Concrete: patternNames :: Pattern -> [Name]
+ Agda.Syntax.Concrete.Definitions: AmbiguousFunClauses :: LHS -> [Name] -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: FunSig :: Range -> Fixity' -> Access -> Relevance -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: MissingDataSignature :: Name -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: NiceDataSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceMutual :: Range -> [NiceDeclaration] -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceRecSig :: Range -> Fixity' -> Access -> Name -> [LamBinding] -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: UselessAbstract :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: UselessPrivate :: Range -> DeclarationException
+ Agda.Syntax.Concrete.Definitions: instance Eq DataRecOrFun
+ Agda.Syntax.Concrete.Definitions: instance Eq InMutual
+ Agda.Syntax.Concrete.Definitions: instance Ord DataRecOrFun
+ Agda.Syntax.Concrete.Definitions: instance Show Clause
+ Agda.Syntax.Concrete.Definitions: instance Show InMutual
+ Agda.Syntax.Concrete.Definitions: instance Show NiceDeclaration
+ Agda.Syntax.Concrete.Name: isPrefix, isNonfix, isInfix, isPostfix :: Name -> Bool
+ Agda.Syntax.Concrete.Name: nameStringParts :: Name -> [String]
+ Agda.Syntax.Concrete.Operators.Parser: InstanceArgV :: (Named String e) -> ExprView e
+ Agda.Syntax.Concrete.Operators.Parser: WildV :: e -> ExprView e
+ Agda.Syntax.Concrete.Operators.Parser: infixP, nonfixP, prefixP, postfixP, infixlP, infixrP :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e e -> ReadP e e
+ Agda.Syntax.Concrete.Operators.Parser: preop, postop :: IsExpr e => ReadP e (NewNotation, Range, [e]) -> ReadP e (e -> ReadP a e)
+ Agda.Syntax.Concrete.Pretty: dbraces :: Doc -> Doc
+ Agda.Syntax.Concrete.Pretty: instance Pretty (OpApp Expr)
+ Agda.Syntax.Concrete.Pretty: instance Pretty (ThingWithFixity Name)
+ Agda.Syntax.Concrete.Pretty: instance Pretty ModuleApplication
+ Agda.Syntax.Concrete.Pretty: instance Show LHS
+ Agda.Syntax.Concrete.Pretty: instance Show ModuleApplication
+ Agda.Syntax.Concrete.Pretty: instance Show WhereClause
+ Agda.Syntax.Fixity: ThingWithFixity :: x -> Fixity' -> ThingWithFixity x
+ Agda.Syntax.Fixity: data ThingWithFixity x
+ Agda.Syntax.Fixity: instance Data x => Data (ThingWithFixity x)
+ Agda.Syntax.Fixity: instance Foldable ThingWithFixity
+ Agda.Syntax.Fixity: instance Functor ThingWithFixity
+ Agda.Syntax.Fixity: instance Show x => Show (ThingWithFixity x)
+ Agda.Syntax.Fixity: instance Traversable ThingWithFixity
+ Agda.Syntax.Fixity: instance Typeable1 ThingWithFixity
+ Agda.Syntax.Internal: Apply :: (Arg Term) -> Elim
+ Agda.Syntax.Internal: BlockedLevel :: MetaId -> Term -> LevelAtom
+ Agda.Syntax.Internal: ClosedLevel :: Integer -> PlusLevel
+ Agda.Syntax.Internal: Level :: Level -> Term
+ Agda.Syntax.Internal: Max :: [PlusLevel] -> Level
+ Agda.Syntax.Internal: MetaLevel :: MetaId -> Args -> LevelAtom
+ Agda.Syntax.Internal: NeutralLevel :: Term -> LevelAtom
+ Agda.Syntax.Internal: NoAbs :: String -> a -> Abs a
+ Agda.Syntax.Internal: Plus :: Integer -> LevelAtom -> PlusLevel
+ Agda.Syntax.Internal: Proj :: QName -> Elim
+ Agda.Syntax.Internal: UnreducedLevel :: Term -> LevelAtom
+ Agda.Syntax.Internal: data Elim
+ Agda.Syntax.Internal: data LevelAtom
+ Agda.Syntax.Internal: data PlusLevel
+ Agda.Syntax.Internal: instance Data Level
+ Agda.Syntax.Internal: instance Data LevelAtom
+ Agda.Syntax.Internal: instance Data PlusLevel
+ Agda.Syntax.Internal: instance Foldable Tele
+ Agda.Syntax.Internal: instance KillRange Level
+ Agda.Syntax.Internal: instance KillRange LevelAtom
+ Agda.Syntax.Internal: instance KillRange PlusLevel
+ Agda.Syntax.Internal: instance Show Elim
+ Agda.Syntax.Internal: instance Show Level
+ Agda.Syntax.Internal: instance Show LevelAtom
+ Agda.Syntax.Internal: instance Show PlusLevel
+ Agda.Syntax.Internal: instance Sized Level
+ Agda.Syntax.Internal: instance Sized LevelAtom
+ Agda.Syntax.Internal: instance Sized PlusLevel
+ Agda.Syntax.Internal: instance Traversable Tele
+ Agda.Syntax.Internal: instance Typeable Level
+ Agda.Syntax.Internal: instance Typeable LevelAtom
+ Agda.Syntax.Internal: instance Typeable PlusLevel
+ Agda.Syntax.Internal: newtype Level
+ Agda.Syntax.Internal: topSort :: Type
+ Agda.Syntax.Internal: unAbs :: Abs a -> a
+ Agda.Syntax.Internal.Generic: instance TermLike Level
+ Agda.Syntax.Internal.Generic: instance TermLike LevelAtom
+ Agda.Syntax.Internal.Generic: instance TermLike PlusLevel
+ Agda.Syntax.Internal.Generic: instance TermLike a => TermLike (Maybe a)
+ Agda.Syntax.Notation: stringParts :: Notation -> [String]
+ Agda.Syntax.Parser.Alex: alexGetByte :: AlexInput -> Maybe (Word8, AlexInput)
+ Agda.Syntax.Parser.Tokens: KwCOMPILED_JS :: Keyword
+ Agda.Syntax.Parser.Tokens: KwQuoteTerm :: Keyword
+ Agda.Syntax.Parser.Tokens: KwSTATIC :: Keyword
+ Agda.Syntax.Parser.Tokens: KwUnquote :: Keyword
+ Agda.Syntax.Parser.Tokens: SymDotDot :: Symbol
+ Agda.Syntax.Parser.Tokens: SymDoubleCloseBrace :: Symbol
+ Agda.Syntax.Parser.Tokens: SymDoubleOpenBrace :: Symbol
+ Agda.Syntax.Scope.Base: OnlyQualifiedNS :: NameSpaceId
+ Agda.Syntax.Scope.Base: allNamesInScope' :: InScope a => Scope -> ThingsInScope (a, Access)
+ Agda.Syntax.Scope.Base: instance Bounded NameSpaceId
+ Agda.Syntax.Scope.Base: instance Enum NameSpaceId
+ Agda.Syntax.Scope.Base: instance KillRange ScopeInfo
+ Agda.Syntax.Scope.Base: instance Show NameSpaceId
+ Agda.Syntax.Scope.Base: nameSpaceAccess :: NameSpaceId -> Access
+ Agda.Syntax.Scope.Base: removeOnlyQualified :: Scope -> Scope
+ Agda.Syntax.Scope.Base: scopeLookup' :: InScope a => QName -> ScopeInfo -> [(a, Access)]
+ Agda.Syntax.Scope.Base: scopeNameSpaces :: Scope -> [(NameSpaceId, NameSpace)]
+ Agda.Syntax.Scope.Base: setNameSpace :: NameSpaceId -> NameSpace -> Scope -> Scope
+ Agda.Syntax.Strict: instance Strict Level
+ Agda.Syntax.Strict: instance Strict LevelAtom
+ Agda.Syntax.Strict: instance Strict PlusLevel
+ Agda.Syntax.Strict: instance Strict a => Strict (Maybe a)
+ Agda.Syntax.Translation.AbstractToConcrete: instance (ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (a1, a2) (c1, c2)
+ Agda.Syntax.Translation.AbstractToConcrete: instance (ToConcrete a1 c1, ToConcrete a2 c2, ToConcrete a3 c3) => ToConcrete (a1, a2, a3) (c1, c2, c3)
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete (Constr Constructor) Declaration
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete (DontTouchMe a) a
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete (Maybe QName) (Maybe Name)
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete AsWhereDecls WhereClause
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete Clause [Declaration]
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete Declaration [Declaration]
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete Expr Expr
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete LHS LHS
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete LamBinding LamBinding
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete LetBinding [Declaration]
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete ModuleApplication ModuleApplication
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete ModuleName QName
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete Name Name
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete Pattern Pattern
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete QName QName
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete RHS (RHS, [Expr], [Expr], [Declaration])
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete RangeAndPragma Pragma
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete TypedBinding TypedBinding
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete TypedBindings TypedBindings
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete a c => ToConcrete (Arg a) (Arg c)
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete a c => ToConcrete (Named name a) (Named name c)
+ Agda.Syntax.Translation.AbstractToConcrete: instance ToConcrete a c => ToConcrete [a] [c]
+ Agda.Syntax.Translation.AbstractToConcrete: noTakenNames :: AbsToCon a -> AbsToCon a
+ Agda.Syntax.Translation.InternalToAbstract: instance (Free i, Reify i a) => Reify (Abs i) (Name, a)
+ Agda.Syntax.Translation.InternalToAbstract: instance DotVars Clause
+ Agda.Syntax.Translation.InternalToAbstract: instance DotVars RHS
+ Agda.Syntax.Translation.InternalToAbstract: instance Reify Elim Expr
+ Agda.Syntax.Translation.InternalToAbstract: instance Reify Level Expr
+ Agda.Termination.SparseMatrix: instance (Show i, Integral i, HasZero b, Pretty b) => Pretty (Matrix i b)
+ Agda.Termination.SparseMatrix: instance (Show i, Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b)
+ Agda.Termination.TermCheck: instance StripAllProjections Term
+ Agda.Termination.TermCheck: instance StripAllProjections a => StripAllProjections (Arg a)
+ Agda.Termination.TermCheck: instance StripAllProjections a => StripAllProjections [a]
+ Agda.TypeChecking.Abstract: instance (Raise a, AbstractTerm a) => AbstractTerm (Abs a)
+ Agda.TypeChecking.Abstract: instance AbstractTerm Level
+ Agda.TypeChecking.Abstract: instance AbstractTerm LevelAtom
+ Agda.TypeChecking.Abstract: instance AbstractTerm PlusLevel
+ Agda.TypeChecking.Abstract: instance AbstractTerm a => AbstractTerm (Maybe a)
+ Agda.TypeChecking.CompiledClause.Compile: compile :: Cls -> CompiledClauses
+ Agda.TypeChecking.CompiledClause.Compile: compileClauses :: Bool -> [Clause] -> TCM CompiledClauses
+ Agda.TypeChecking.CompiledClause.Compile: expandCatchAlls :: Int -> Cls -> Cls
+ Agda.TypeChecking.CompiledClause.Compile: nextSplit :: Cls -> Maybe Int
+ Agda.TypeChecking.CompiledClause.Compile: splitC :: Int -> Cl -> Case Cl
+ Agda.TypeChecking.CompiledClause.Compile: splitOn :: Int -> Cls -> Case Cls
+ Agda.TypeChecking.CompiledClause.Compile: substBody :: Int -> Integer -> Term -> ClauseBody -> ClauseBody
+ Agda.TypeChecking.CompiledClause.Compile: type Cl = ([Arg Pattern], ClauseBody)
+ Agda.TypeChecking.CompiledClause.Compile: type Cls = [Cl]
+ Agda.TypeChecking.Constraints: addConstraint :: Constraint -> TCM ()
+ Agda.TypeChecking.Constraints: ifNoConstraints :: TCM a -> (a -> TCM b) -> (ProblemId -> a -> TCM b) -> TCM b
+ Agda.TypeChecking.Constraints: ifNoConstraints_ :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a
+ Agda.TypeChecking.Constraints: localState :: MonadState s m => m a -> m a
+ Agda.TypeChecking.Constraints: newProblem :: TCM a -> TCM (ProblemId, a)
+ Agda.TypeChecking.Constraints: newProblem_ :: TCM () -> TCM ProblemId
+ Agda.TypeChecking.Constraints: solveAwakeConstraints :: TCM ()
+ Agda.TypeChecking.Constraints: wakeupConstraints_ :: TCM ()
+ Agda.TypeChecking.Constraints: whenConstraints :: TCM () -> TCM () -> TCM ()
+ Agda.TypeChecking.Conversion: compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()
+ Agda.TypeChecking.Conversion: compareTerm' :: Comparison -> Type -> Term -> Term -> TCM ()
+ Agda.TypeChecking.Conversion: intersectVars :: Args -> Args -> Maybe [Bool]
+ Agda.TypeChecking.Conversion: mlevel :: TCM (Maybe Term)
+ Agda.TypeChecking.Datatypes: isDataOrRecordType :: QName -> TCM Bool
+ Agda.TypeChecking.Eliminators: ConElim :: QName -> [Elim] -> ElimView
+ Agda.TypeChecking.Eliminators: DefElim :: QName -> [Elim] -> ElimView
+ Agda.TypeChecking.Eliminators: MetaElim :: MetaId -> [Elim] -> ElimView
+ Agda.TypeChecking.Eliminators: NoElim :: Term -> ElimView
+ Agda.TypeChecking.Eliminators: VarElim :: Nat -> [Elim] -> ElimView
+ Agda.TypeChecking.Eliminators: data ElimView
+ Agda.TypeChecking.Eliminators: elimView :: Term -> TCM ElimView
+ Agda.TypeChecking.Eliminators: unElim :: Term -> [Elim] -> Term
+ Agda.TypeChecking.Eliminators: unElimView :: ElimView -> Term
+ Agda.TypeChecking.Empty: isReallyEmptyType :: Type -> TCM ()
+ Agda.TypeChecking.Free: Flexible :: Occurrence
+ Agda.TypeChecking.Free: NoOccurrence :: Occurrence
+ Agda.TypeChecking.Free: StronglyRigid :: Occurrence
+ Agda.TypeChecking.Free: WeaklyRigid :: Occurrence
+ Agda.TypeChecking.Free: data Occurrence
+ Agda.TypeChecking.Free: instance Eq Occurrence
+ Agda.TypeChecking.Free: instance Free Level
+ Agda.TypeChecking.Free: instance Free LevelAtom
+ Agda.TypeChecking.Free: instance Free PlusLevel
+ Agda.TypeChecking.Free: instance Free a => Free (Maybe a)
+ Agda.TypeChecking.Free: instance Show Occurrence
+ Agda.TypeChecking.Free: irrelevantVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: isBinderUsed :: Free a => Abs a -> Bool
+ Agda.TypeChecking.Free: occurrence :: Nat -> FreeVars -> Occurrence
+ Agda.TypeChecking.Free: relevantIn :: Free a => Nat -> a -> Bool
+ Agda.TypeChecking.Free: relevantVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: stronglyRigidVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Free: weaklyRigidVars :: FreeVars -> VarSet
+ Agda.TypeChecking.Irrelevance: applyRelevance :: Relevance -> Arg a -> Arg a
+ Agda.TypeChecking.Irrelevance: applyRelevanceToContext :: Relevance -> TCM a -> TCM a
+ Agda.TypeChecking.Irrelevance: composeRelevance :: Relevance -> Relevance -> Relevance
+ Agda.TypeChecking.Irrelevance: doWorkOnTypes :: TCM a -> TCM a
+ Agda.TypeChecking.Irrelevance: hideAndRelParams :: Arg a -> Arg a
+ Agda.TypeChecking.Irrelevance: ignoreForced :: Relevance -> Relevance
+ Agda.TypeChecking.Irrelevance: inverseApplyRelevance :: Relevance -> Arg a -> Arg a
+ Agda.TypeChecking.Irrelevance: inverseComposeRelevance :: Relevance -> Relevance -> Relevance
+ Agda.TypeChecking.Irrelevance: irrToNonStrict :: Relevance -> Relevance
+ Agda.TypeChecking.Irrelevance: modifyArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a
+ Agda.TypeChecking.Irrelevance: nonStrictToIrr :: Relevance -> Relevance
+ Agda.TypeChecking.Irrelevance: unusableRelevance :: Relevance -> Bool
+ Agda.TypeChecking.Irrelevance: wakeIrrelevantVars :: TCM a -> TCM a
+ Agda.TypeChecking.Irrelevance: workOnTypes :: TCM a -> TCM a
+ Agda.TypeChecking.Irrelevance: workOnTypes' :: Bool -> TCM a -> TCM a
+ Agda.TypeChecking.Level: levelLub :: Level -> Level -> Level
+ Agda.TypeChecking.Level: lvlMax :: LevelKit -> Term -> Term -> Term
+ Agda.TypeChecking.Level: lvlSuc :: LevelKit -> Term -> Term
+ Agda.TypeChecking.Level: lvlType :: LevelKit -> Term
+ Agda.TypeChecking.Level: lvlZero :: LevelKit -> Term
+ Agda.TypeChecking.Level: reallyUnLevelView :: Level -> TCM Term
+ Agda.TypeChecking.LevelConstraints: instance Eq Leq
+ Agda.TypeChecking.LevelConstraints: instance Show Leq
+ Agda.TypeChecking.LevelConstraints: simplifyLevelConstraint :: Integer -> Constraint -> Constraints -> Constraint
+ Agda.TypeChecking.MetaVars: allVarOrIrrelevant :: Args -> Maybe [Arg Nat]
+ Agda.TypeChecking.MetaVars: assign :: MetaId -> Args -> Term -> TCM ()
+ Agda.TypeChecking.MetaVars: blockTermOnProblem :: Type -> Term -> ProblemId -> TCM Term
+ Agda.TypeChecking.MetaVars: checkAllVars :: Args -> TCM [Nat]
+ Agda.TypeChecking.MetaVars: newIFSMeta :: Type -> TCM Term
+ Agda.TypeChecking.MetaVars: newIFSMetaCtx :: Type -> Args -> TCM Term
+ Agda.TypeChecking.MetaVars: wakeupListener :: Listener -> TCM ()
+ Agda.TypeChecking.MetaVars.Mention: class MentionsMeta t
+ Agda.TypeChecking.MetaVars.Mention: instance (MentionsMeta a, MentionsMeta b) => MentionsMeta (a, b)
+ Agda.TypeChecking.MetaVars.Mention: instance (MentionsMeta a, MentionsMeta b, MentionsMeta c) => MentionsMeta (a, b, c)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Constraint
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Elim
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Level
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta LevelAtom
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta PlusLevel
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta ProblemConstraint
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Sort
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Term
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta Type
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta a => MentionsMeta (Closure a)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta a => MentionsMeta (Tele a)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta t => MentionsMeta (Abs t)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta t => MentionsMeta (Arg t)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta t => MentionsMeta (Maybe t)
+ Agda.TypeChecking.MetaVars.Mention: instance MentionsMeta t => MentionsMeta [t]
+ Agda.TypeChecking.MetaVars.Mention: mentionsMeta :: MentionsMeta t => MetaId -> t -> Bool
+ Agda.TypeChecking.MetaVars.Occurs: Irrel :: OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: NoUnfold :: UnfoldStrategy
+ Agda.TypeChecking.MetaVars.Occurs: NothingToPrune :: PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: PrunedEverything :: PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: PrunedNothing :: PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: PrunedSomething :: PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: StronglyRigid :: OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: YesUnfold :: UnfoldStrategy
+ Agda.TypeChecking.MetaVars.Occurs: allowedVar :: Nat -> Vars -> Bool
+ Agda.TypeChecking.MetaVars.Occurs: data PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: data UnfoldStrategy
+ Agda.TypeChecking.MetaVars.Occurs: defArgs :: UnfoldStrategy -> OccursCtx -> OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: goIrrelevant :: Vars -> Vars
+ Agda.TypeChecking.MetaVars.Occurs: instance Eq PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: instance Eq UnfoldStrategy
+ Agda.TypeChecking.MetaVars.Occurs: instance Occurs Level
+ Agda.TypeChecking.MetaVars.Occurs: instance Occurs LevelAtom
+ Agda.TypeChecking.MetaVars.Occurs: instance Occurs PlusLevel
+ Agda.TypeChecking.MetaVars.Occurs: instance Show PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: instance Show UnfoldStrategy
+ Agda.TypeChecking.MetaVars.Occurs: prune :: MetaId -> Args -> [Nat] -> TCM PruneResult
+ Agda.TypeChecking.MetaVars.Occurs: strongly :: OccursCtx -> OccursCtx
+ Agda.TypeChecking.MetaVars.Occurs: takeRelevant :: Vars -> [Nat]
+ Agda.TypeChecking.MetaVars.Occurs: type Vars = ([Nat], [Nat])
+ Agda.TypeChecking.MetaVars.Occurs: underAbs :: Vars -> Vars
+ Agda.TypeChecking.MetaVars.Occurs: unfold :: UnfoldStrategy -> Term -> TCM (Blocked Term)
+ Agda.TypeChecking.MetaVars.Occurs: weakly :: OccursCtx -> OccursCtx
+ Agda.TypeChecking.Monad.Base: BuiltinData :: (TCM Type) -> [String] -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: BuiltinDataCons :: (TCM Type) -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: BuiltinInfo :: String -> BuiltinDescriptor -> BuiltinInfo
+ Agda.TypeChecking.Monad.Base: BuiltinPostulate :: (TCM Type) -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: BuiltinPrim :: String -> (Term -> TCM ()) -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: BuiltinUnknown :: (Maybe (TCM Type)) -> (Term -> TCM ()) -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: CallInfo :: Range -> String -> CallInfo
+ Agda.TypeChecking.Monad.Base: CheckConstraint :: Nat -> ProblemConstraint -> Listener
+ Agda.TypeChecking.Monad.Base: CheckIsEmpty :: Type -> (Maybe ()) -> Call
+ Agda.TypeChecking.Monad.Base: CheckWithFunctionType :: Expr -> (Maybe ()) -> Call
+ Agda.TypeChecking.Monad.Base: CompiledRep :: Maybe HaskellRepresentation -> Maybe EpicCode -> Maybe JSCode -> CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: CoverageCantSplitIrrelevantType :: Type -> TypeError
+ Agda.TypeChecking.Monad.Base: DCon :: QName -> [Arg DisplayTerm] -> DisplayTerm
+ Agda.TypeChecking.Monad.Base: DDef :: QName -> [Arg DisplayTerm] -> DisplayTerm
+ Agda.TypeChecking.Monad.Base: DDot :: Term -> DisplayTerm
+ Agda.TypeChecking.Monad.Base: ElimCmp :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> Constraint
+ Agda.TypeChecking.Monad.Base: EtaExpand :: MetaId -> Listener
+ Agda.TypeChecking.Monad.Base: FindInScope :: MetaId -> Constraint
+ Agda.TypeChecking.Monad.Base: Frozen :: Frozen
+ Agda.TypeChecking.Monad.Base: HeterogeneousEquality :: Term -> Type -> Term -> Type -> TypeError
+ Agda.TypeChecking.Monad.Base: IFSNoCandidateInScope :: Type -> TypeError
+ Agda.TypeChecking.Monad.Base: Instantiable :: Frozen
+ Agda.TypeChecking.Monad.Base: NothingAppliedToInstanceArg :: Expr -> TypeError
+ Agda.TypeChecking.Monad.Base: OpenIFS :: MetaInstantiation
+ Agda.TypeChecking.Monad.Base: PConstr :: ProblemId -> Closure Constraint -> ProblemConstraint
+ Agda.TypeChecking.Monad.Base: PersistentTCSt :: DecodedModules -> CommandLineOptions -> PersistentTCState
+ Agda.TypeChecking.Monad.Base: ProblemId :: Nat -> ProblemId
+ Agda.TypeChecking.Monad.Base: SafeFlagPostulate :: Name -> TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPragma :: [String] -> TypeError
+ Agda.TypeChecking.Monad.Base: SafeFlagPrimTrustMe :: TypeError
+ Agda.TypeChecking.Monad.Base: TerminationError :: [QName] -> [CallInfo] -> TerminationError
+ Agda.TypeChecking.Monad.Base: WrongIrrelevanceInLambda :: Type -> TypeError
+ Agda.TypeChecking.Monad.Base: builtinDesc :: BuiltinInfo -> BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: builtinName :: BuiltinInfo -> String
+ Agda.TypeChecking.Monad.Base: callInfoCall :: CallInfo -> String
+ Agda.TypeChecking.Monad.Base: callInfoRange :: CallInfo -> Range
+ Agda.TypeChecking.Monad.Base: compiledEpic :: CompiledRepresentation -> Maybe EpicCode
+ Agda.TypeChecking.Monad.Base: compiledHaskell :: CompiledRepresentation -> Maybe HaskellRepresentation
+ Agda.TypeChecking.Monad.Base: compiledJS :: CompiledRepresentation -> Maybe JSCode
+ Agda.TypeChecking.Monad.Base: constraintProblem :: ProblemConstraint -> ProblemId
+ Agda.TypeChecking.Monad.Base: data BuiltinDescriptor
+ Agda.TypeChecking.Monad.Base: data BuiltinInfo
+ Agda.TypeChecking.Monad.Base: data CallInfo
+ Agda.TypeChecking.Monad.Base: data CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: data Frozen
+ Agda.TypeChecking.Monad.Base: data Listener
+ Agda.TypeChecking.Monad.Base: data PersistentTCState
+ Agda.TypeChecking.Monad.Base: data ProblemConstraint
+ Agda.TypeChecking.Monad.Base: data TerminationError
+ Agda.TypeChecking.Monad.Base: defCompiledRep :: Definition -> CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: defEpicDef :: Definition -> Maybe EpicCode
+ Agda.TypeChecking.Monad.Base: defJSDef :: Definition -> Maybe JSCode
+ Agda.TypeChecking.Monad.Base: envActiveProblems :: TCEnv -> [ProblemId]
+ Agda.TypeChecking.Monad.Base: envRelevance :: TCEnv -> Relevance
+ Agda.TypeChecking.Monad.Base: envSolvingConstraints :: TCEnv -> Bool
+ Agda.TypeChecking.Monad.Base: envTopLevel :: TCEnv -> Bool
+ Agda.TypeChecking.Monad.Base: fProblem :: FreshThings -> ProblemId
+ Agda.TypeChecking.Monad.Base: funStatic :: Defn -> Bool
+ Agda.TypeChecking.Monad.Base: instance Data CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: instance Data ProblemId
+ Agda.TypeChecking.Monad.Base: instance Enum ProblemId
+ Agda.TypeChecking.Monad.Base: instance Eq CallInfo
+ Agda.TypeChecking.Monad.Base: instance Eq Frozen
+ Agda.TypeChecking.Monad.Base: instance Eq Listener
+ Agda.TypeChecking.Monad.Base: instance Eq ProblemId
+ Agda.TypeChecking.Monad.Base: instance Functor (Reduced no)
+ Agda.TypeChecking.Monad.Base: instance Functor Open
+ Agda.TypeChecking.Monad.Base: instance HasFresh ProblemId FreshThings
+ Agda.TypeChecking.Monad.Base: instance Integral ProblemId
+ Agda.TypeChecking.Monad.Base: instance Num ProblemId
+ Agda.TypeChecking.Monad.Base: instance Ord CallInfo
+ Agda.TypeChecking.Monad.Base: instance Ord Listener
+ Agda.TypeChecking.Monad.Base: instance Ord ProblemId
+ Agda.TypeChecking.Monad.Base: instance Real ProblemId
+ Agda.TypeChecking.Monad.Base: instance Show CallInfo
+ Agda.TypeChecking.Monad.Base: instance Show CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: instance Show Frozen
+ Agda.TypeChecking.Monad.Base: instance Show Occ
+ Agda.TypeChecking.Monad.Base: instance Show OccPos
+ Agda.TypeChecking.Monad.Base: instance Show ProblemConstraint
+ Agda.TypeChecking.Monad.Base: instance Show ProblemId
+ Agda.TypeChecking.Monad.Base: instance Show TerminationError
+ Agda.TypeChecking.Monad.Base: instance Typeable CallInfo
+ Agda.TypeChecking.Monad.Base: instance Typeable CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: instance Typeable Listener
+ Agda.TypeChecking.Monad.Base: instance Typeable ProblemConstraint
+ Agda.TypeChecking.Monad.Base: instance Typeable ProblemId
+ Agda.TypeChecking.Monad.Base: instance Typeable TerminationError
+ Agda.TypeChecking.Monad.Base: jMetaId :: Judgement t a -> a
+ Agda.TypeChecking.Monad.Base: jMetaType :: Judgement t a -> t
+ Agda.TypeChecking.Monad.Base: mvFrozen :: MetaVariable -> Frozen
+ Agda.TypeChecking.Monad.Base: newtype ProblemId
+ Agda.TypeChecking.Monad.Base: noCompiledRep :: CompiledRepresentation
+ Agda.TypeChecking.Monad.Base: stAwakeConstraints :: TCState -> Constraints
+ Agda.TypeChecking.Monad.Base: stExtLambdaTele :: TCState -> Map QName (Int, Int)
+ Agda.TypeChecking.Monad.Base: stPersistent :: TCState -> PersistentTCState
+ Agda.TypeChecking.Monad.Base: stSleepingConstraints :: TCState -> Constraints
+ Agda.TypeChecking.Monad.Base: termErrCalls :: TerminationError -> [CallInfo]
+ Agda.TypeChecking.Monad.Base: termErrFunctions :: TerminationError -> [QName]
+ Agda.TypeChecking.Monad.Base: theConstraint :: ProblemConstraint -> Closure Constraint
+ Agda.TypeChecking.Monad.Base: type JSCode = Exp
+ Agda.TypeChecking.Monad.Builtin: getBuiltinThing :: String -> TCM (Maybe (Builtin PrimFun))
+ Agda.TypeChecking.Monad.Builtin: primInteger, primAgdaRecordDef, primAgdaDataDef, primAgdaFunDef, primAgdaDefinitionDataConstructor, primAgdaDefinitionPrimitive, primAgdaDefinitionPostulate, primAgdaDefinitionRecordDef, primAgdaDefinitionDataDef, primAgdaDefinitionFunDef, primAgdaDefinition, primAgdaSortUnsupported, primAgdaSortLit, primAgdaSortSet, primAgdaSort, primIrrelevant, primRelevant, primRelvance, primVisible, primInstance, primHidden, primHiding, primAgdaTypeEl, primAgdaType, primAgdaTermUnsupported, primAgdaTermSort, primAgdaTermPi, primAgdaTermCon, primAgdaTermDef, primAgdaTermLam, primAgdaTermVar, primAgdaTerm, primArgArg, primArg, primQName, primLevelMax, primLevelSuc, primLevelZero, primLevel, primRefl, primEquality, primFlat, primSharp, primInf, primSizeInf, primSizeSuc, primSize, primNatLess, primNatEquality, primNatModSucAux, primNatDivSucAux, primNatTimes, primNatMinus, primNatPlus, primZero, primSuc, primNat, primIO, primCons, primNil, primList, primFalse, primTrue, primBool, primString, primChar, primFloat :: TCM Term
+ Agda.TypeChecking.Monad.Constraints: addAwakeConstraints :: Constraints -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: addConstraint' :: Constraint -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: buildProblemConstraint :: ProblemId -> Constraint -> TCM ProblemConstraint
+ Agda.TypeChecking.Monad.Constraints: currentProblem :: TCM ProblemId
+ Agda.TypeChecking.Monad.Constraints: getAllConstraints :: TCM Constraints
+ Agda.TypeChecking.Monad.Constraints: getAwakeConstraints :: TCM Constraints
+ Agda.TypeChecking.Monad.Constraints: getConstraintsForProblem :: ProblemId -> TCM Constraints
+ Agda.TypeChecking.Monad.Constraints: isProblemSolved :: ProblemId -> TCM Bool
+ Agda.TypeChecking.Monad.Constraints: isSolvingConstraints :: TCM Bool
+ Agda.TypeChecking.Monad.Constraints: nowSolvingConstraints :: TCM a -> TCM a
+ Agda.TypeChecking.Monad.Constraints: solvingProblem :: ProblemId -> TCM a -> TCM a
+ Agda.TypeChecking.Monad.Constraints: stealConstraints :: ProblemId -> TCM ()
+ Agda.TypeChecking.Monad.Constraints: takeAwakeConstraint :: TCM (Maybe ProblemConstraint)
+ Agda.TypeChecking.Monad.Constraints: wakeConstraints :: (ProblemConstraint -> Bool) -> TCM ()
+ Agda.TypeChecking.Monad.Context: addContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: addCtxString :: MonadTCM tcm => String -> Arg Type -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: modifyContext :: MonadTCM tcm => (Context -> Context) -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Context: modifyContextEntries :: (Arg (Name, Type) -> Arg (Name, Type)) -> Context -> Context
+ Agda.TypeChecking.Monad.Context: modifyContextEntry :: (Arg (Name, Type) -> Arg (Name, Type)) -> ContextEntry -> ContextEntry
+ Agda.TypeChecking.Monad.Env: leaveTopLevel :: TCM a -> TCM a
+ Agda.TypeChecking.Monad.Env: onTopLevel :: TCM Bool
+ Agda.TypeChecking.Monad.Exception: instance (Monad m, MonadException err m) => MonadException err (ReaderT r m)
+ Agda.TypeChecking.Monad.Exception: instance (Monad m, MonadException err m, Monoid w) => MonadException err (WriterT w m)
+ Agda.TypeChecking.Monad.MetaVars: freezeMetas :: TCM ()
+ Agda.TypeChecking.Monad.MetaVars: isFrozen :: MetaId -> TCM Bool
+ Agda.TypeChecking.Monad.MetaVars: modifyMetaStore :: (MetaStore -> MetaStore) -> TCM ()
+ Agda.TypeChecking.Monad.MetaVars: unfreezeMetas :: TCM ()
+ Agda.TypeChecking.Monad.Signature: addJSCode :: QName -> String -> TCM ()
+ Agda.TypeChecking.Monad.Signature: makeProjection :: QName -> TCM ()
+ Agda.TypeChecking.Monad.Signature: markStatic :: QName -> TCM ()
+ Agda.TypeChecking.Monad.SizedTypes: isSizeNameTest :: TCM (QName -> Bool)
+ Agda.TypeChecking.Monad.SizedTypes: isSizeTypeTest :: TCM (Type -> Bool)
+ Agda.TypeChecking.Monad.State: addExtLambdaTele :: QName -> (Int, Int) -> TCM ()
+ Agda.TypeChecking.Monad.State: getExtLambdaTele :: TCM (Map QName (Int, Int))
+ Agda.TypeChecking.Monad.State: resetAllState :: TCM ()
+ Agda.TypeChecking.Monad.State: setExtLambdaTele :: Map QName (Int, Int) -> TCM ()
+ Agda.TypeChecking.Monad.Statistics: tickMax :: String -> Integer -> TCM ()
+ Agda.TypeChecking.Monad.Statistics: tickN :: String -> Integer -> TCM ()
+ Agda.TypeChecking.Polarity: instance HasPolarity Level
+ Agda.TypeChecking.Polarity: instance HasPolarity LevelAtom
+ Agda.TypeChecking.Polarity: instance HasPolarity PlusLevel
+ Agda.TypeChecking.Positivity: instance ComputeOccurrences Level
+ Agda.TypeChecking.Positivity: instance ComputeOccurrences LevelAtom
+ Agda.TypeChecking.Positivity: instance ComputeOccurrences PlusLevel
+ Agda.TypeChecking.Pretty: ($$, <+>, <>) :: TCM Doc -> TCM Doc -> TCM Doc
+ Agda.TypeChecking.Pretty: empty, comma :: TCM Doc
+ Agda.TypeChecking.Pretty: instance PrettyTCM Elim
+ Agda.TypeChecking.Pretty: instance PrettyTCM Level
+ Agda.TypeChecking.Pretty: instance PrettyTCM ProblemConstraint
+ Agda.TypeChecking.Pretty: sep, vcat, hsep, fsep :: [TCM Doc] -> TCM Doc
+ Agda.TypeChecking.Pretty: text :: String -> TCM Doc
+ Agda.TypeChecking.Primitive: (<@>, <#>) :: TCM Term -> TCM Term -> TCM Term
+ Agda.TypeChecking.Primitive: hPi, nPi :: String -> TCM Type -> TCM Type -> TCM Type
+ Agda.TypeChecking.Primitive: instance PrimTerm Type
+ Agda.TypeChecking.Primitive: instance ToTerm Type
+ Agda.TypeChecking.Primitive: mkPrimFun1TCM :: (FromTerm a, ToTerm b) => TCM Type -> (a -> TCM b) -> TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimLevelMax :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimLevelSuc :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimLevelZero :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: primDataConstructors :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: primQNameDefinition :: TCM PrimitiveImpl
+ Agda.TypeChecking.Primitive: primQNameType :: TCM PrimitiveImpl
+ Agda.TypeChecking.Quote: choice :: Monad m => [(m Bool, m a)] -> m a -> m a
+ Agda.TypeChecking.Quote: class Unquote a
+ Agda.TypeChecking.Quote: instance Unquote Hiding
+ Agda.TypeChecking.Quote: instance Unquote Integer
+ Agda.TypeChecking.Quote: instance Unquote Level
+ Agda.TypeChecking.Quote: instance Unquote QName
+ Agda.TypeChecking.Quote: instance Unquote Relevance
+ Agda.TypeChecking.Quote: instance Unquote Sort
+ Agda.TypeChecking.Quote: instance Unquote Term
+ Agda.TypeChecking.Quote: instance Unquote Type
+ Agda.TypeChecking.Quote: instance Unquote a => Unquote (Abs a)
+ Agda.TypeChecking.Quote: instance Unquote a => Unquote (Arg a)
+ Agda.TypeChecking.Quote: instance Unquote a => Unquote [a]
+ Agda.TypeChecking.Quote: isCon :: QName -> TCM Term -> TCM Bool
+ Agda.TypeChecking.Quote: quotingKit :: TCM (Term -> Term, Type -> Term)
+ Agda.TypeChecking.Quote: unquote :: Unquote a => Term -> TCM a
+ Agda.TypeChecking.Quote: unquoteFailed :: String -> String -> Term -> TCM a
+ Agda.TypeChecking.Quote: unquoteFailedGeneric :: String -> TCM a
+ Agda.TypeChecking.Quote: unquoteH :: Unquote a => Arg Term -> TCM a
+ Agda.TypeChecking.Quote: unquoteN :: Unquote a => Arg Term -> TCM a
+ Agda.TypeChecking.Records: findPossibleRecords :: [Name] -> TCM [QName]
+ Agda.TypeChecking.Records: isEtaRecordType :: Type -> TCM (Maybe (QName, Args))
+ Agda.TypeChecking.Records: isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId Bool)
+ Agda.TypeChecking.Records: isSingletonRecordModuloRelevance :: QName -> Args -> TCM (Either MetaId Bool)
+ Agda.TypeChecking.Reduce: instance (Raise a, InstantiateFull a) => InstantiateFull (Tele a)
+ Agda.TypeChecking.Reduce: instance (Raise a, Normalise a) => Normalise (Tele a)
+ Agda.TypeChecking.Reduce: instance (Raise t, InstantiateFull t) => InstantiateFull (Abs t)
+ Agda.TypeChecking.Reduce: instance (Raise t, Normalise t) => Normalise (Abs t)
+ Agda.TypeChecking.Reduce: instance (Raise t, Reduce t) => Reduce (Abs t)
+ Agda.TypeChecking.Reduce: instance Instantiate Elim
+ Agda.TypeChecking.Reduce: instance Instantiate Level
+ Agda.TypeChecking.Reduce: instance Instantiate LevelAtom
+ Agda.TypeChecking.Reduce: instance Instantiate PlusLevel
+ Agda.TypeChecking.Reduce: instance InstantiateFull Elim
+ Agda.TypeChecking.Reduce: instance InstantiateFull Level
+ Agda.TypeChecking.Reduce: instance InstantiateFull LevelAtom
+ Agda.TypeChecking.Reduce: instance InstantiateFull PlusLevel
+ Agda.TypeChecking.Reduce: instance InstantiateFull ProblemConstraint
+ Agda.TypeChecking.Reduce: instance Normalise Elim
+ Agda.TypeChecking.Reduce: instance Normalise Level
+ Agda.TypeChecking.Reduce: instance Normalise LevelAtom
+ Agda.TypeChecking.Reduce: instance Normalise PlusLevel
+ Agda.TypeChecking.Reduce: instance Normalise ProblemConstraint
+ Agda.TypeChecking.Reduce: instance Reduce Elim
+ Agda.TypeChecking.Reduce: instance Reduce Level
+ Agda.TypeChecking.Reduce: instance Reduce LevelAtom
+ Agda.TypeChecking.Reduce: instance Reduce PlusLevel
+ Agda.TypeChecking.Rules.Decl: checkSectionApplication' :: ModuleInfo -> ModuleName -> ModuleApplication -> Map QName QName -> Map ModuleName ModuleName -> TCM ()
+ Agda.TypeChecking.Rules.Def: checkFunDef' :: Type -> Relevance -> Delayed -> DefInfo -> QName -> [Clause] -> TCM ()
+ Agda.TypeChecking.Rules.LHS.Problem: instance Raise (Problem' p)
+ Agda.TypeChecking.Rules.LHS.Unify: DefSh :: QName -> ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: Definitely :: Unifiable
+ Agda.TypeChecking.Rules.LHS.Unify: ElseSh :: ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: FunSh :: (Arg a) -> a -> ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: Het :: a -> a -> HomHet a
+ Agda.TypeChecking.Rules.LHS.Unify: Hom :: a -> HomHet a
+ Agda.TypeChecking.Rules.LHS.Unify: LitSh :: Literal -> ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: MayNotPostpone :: UnifyMayPostpone
+ Agda.TypeChecking.Rules.LHS.Unify: MayPostpone :: UnifyMayPostpone
+ Agda.TypeChecking.Rules.LHS.Unify: MetaSh :: ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: PiSh :: (Arg a) -> (Abs a) -> ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: Possibly :: Unifiable
+ Agda.TypeChecking.Rules.LHS.Unify: SortSh :: ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: StronglyRigidOccurrence :: Type -> Term -> Term -> UnifyException
+ Agda.TypeChecking.Rules.LHS.Unify: VarSh :: Nat -> ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH
+ Agda.TypeChecking.Rules.LHS.Unify: addEqualityHH :: TypeHH -> Term -> Term -> Unify ()
+ Agda.TypeChecking.Rules.LHS.Unify: applyHH :: ApplyHH t => t -> HomHet Args -> HomHet t
+ Agda.TypeChecking.Rules.LHS.Unify: askPostpone :: Unify UnifyMayPostpone
+ Agda.TypeChecking.Rules.LHS.Unify: checkEquality :: Type -> Term -> Term -> TCM ()
+ Agda.TypeChecking.Rules.LHS.Unify: checkEqualityHH :: TypeHH -> Term -> Term -> Unify ()
+ Agda.TypeChecking.Rules.LHS.Unify: class ApplyHH t
+ Agda.TypeChecking.Rules.LHS.Unify: class SubstHH t tHH
+ Agda.TypeChecking.Rules.LHS.Unify: class UReduce t
+ Agda.TypeChecking.Rules.LHS.Unify: constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a
+ Agda.TypeChecking.Rules.LHS.Unify: data HomHet a
+ Agda.TypeChecking.Rules.LHS.Unify: data ShapeView a
+ Agda.TypeChecking.Rules.LHS.Unify: data Unifiable
+ Agda.TypeChecking.Rules.LHS.Unify: data UnifyMayPostpone
+ Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordType' :: QName -> Type -> TCM (Maybe (QName, Type, Args))
+ Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordTypeHH :: QName -> TypeHH -> TCM (Maybe TypeHH)
+ Agda.TypeChecking.Rules.LHS.Unify: emptyUOutput :: UnifyOutput
+ Agda.TypeChecking.Rules.LHS.Unify: forceHom :: TypeHH -> TCM Type
+ Agda.TypeChecking.Rules.LHS.Unify: fromHom :: HomHet a -> a
+ Agda.TypeChecking.Rules.LHS.Unify: ifClean :: Unify () -> Unify a -> Unify a -> Unify a
+ Agda.TypeChecking.Rules.LHS.Unify: instance (Eq a, Raise a) => Eq (ShapeView a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance (Free a, Subst a) => SubstHH (HomHet a) (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance (Ord a, Raise a) => Ord (ShapeView a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance (SubstHH a a', SubstHH b b') => SubstHH (a, b) (a', b')
+ Agda.TypeChecking.Rules.LHS.Unify: instance ApplyHH Term
+ Agda.TypeChecking.Rules.LHS.Unify: instance ApplyHH Type
+ Agda.TypeChecking.Rules.LHS.Unify: instance Data a => Data (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Data a => Data (ShapeView a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Eq a => Eq (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Foldable HomHet
+ Agda.TypeChecking.Rules.LHS.Unify: instance Functor HomHet
+ Agda.TypeChecking.Rules.LHS.Unify: instance Functor ShapeView
+ Agda.TypeChecking.Rules.LHS.Unify: instance MonadWriter UnifyOutput Unify
+ Agda.TypeChecking.Rules.LHS.Unify: instance Monoid Unifiable
+ Agda.TypeChecking.Rules.LHS.Unify: instance Ord a => Ord (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance PrettyTCM a => PrettyTCM (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Raise a => Raise (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Show a => Show (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Show a => Show (ShapeView a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Subst a => Subst (HomHet a)
+ Agda.TypeChecking.Rules.LHS.Unify: instance SubstHH Term (HomHet Term)
+ Agda.TypeChecking.Rules.LHS.Unify: instance SubstHH Type (HomHet Type)
+ Agda.TypeChecking.Rules.LHS.Unify: instance SubstHH a b => SubstHH (Abs a) (Abs b)
+ Agda.TypeChecking.Rules.LHS.Unify: instance SubstHH a b => SubstHH (Arg a) (Arg b)
+ Agda.TypeChecking.Rules.LHS.Unify: instance SubstHH a b => SubstHH (Tele a) (Tele b)
+ Agda.TypeChecking.Rules.LHS.Unify: instance Traversable HomHet
+ Agda.TypeChecking.Rules.LHS.Unify: instance Typeable1 HomHet
+ Agda.TypeChecking.Rules.LHS.Unify: instance Typeable1 ShapeView
+ Agda.TypeChecking.Rules.LHS.Unify: instance UReduce Term
+ Agda.TypeChecking.Rules.LHS.Unify: instance UReduce Type
+ Agda.TypeChecking.Rules.LHS.Unify: instance UReduce t => UReduce (HomHet t)
+ Agda.TypeChecking.Rules.LHS.Unify: instance UReduce t => UReduce (Maybe t)
+ Agda.TypeChecking.Rules.LHS.Unify: isEtaRecordTypeHH :: MonadTCM tcm => TypeHH -> tcm (Maybe (QName, HomHet Args))
+ Agda.TypeChecking.Rules.LHS.Unify: isHom :: HomHet a -> Bool
+ Agda.TypeChecking.Rules.LHS.Unify: leftHH :: HomHet a -> a
+ Agda.TypeChecking.Rules.LHS.Unify: noPostponing :: Unify a -> Unify a
+ Agda.TypeChecking.Rules.LHS.Unify: reportPostponing :: Unify ()
+ Agda.TypeChecking.Rules.LHS.Unify: rightHH :: HomHet a -> a
+ Agda.TypeChecking.Rules.LHS.Unify: shapeView :: Type -> Unify (Type, ShapeView Type)
+ Agda.TypeChecking.Rules.LHS.Unify: shapeViewHH :: TypeHH -> Unify (TypeHH, ShapeView TypeHH)
+ Agda.TypeChecking.Rules.LHS.Unify: substHH :: SubstHH t tHH => TermHH -> t -> tHH
+ Agda.TypeChecking.Rules.LHS.Unify: substUnderHH :: SubstHH t tHH => Nat -> TermHH -> t -> tHH
+ Agda.TypeChecking.Rules.LHS.Unify: telViewUpToHH :: Int -> TypeHH -> Unify TelViewHH
+ Agda.TypeChecking.Rules.LHS.Unify: trivialHH :: SubstHH t tHH => t -> tHH
+ Agda.TypeChecking.Rules.LHS.Unify: type TelHH = Tele (Arg TypeHH)
+ Agda.TypeChecking.Rules.LHS.Unify: type TelViewHH = TelV TypeHH
+ Agda.TypeChecking.Rules.LHS.Unify: type TermHH = HomHet Term
+ Agda.TypeChecking.Rules.LHS.Unify: type TypeHH = HomHet Type
+ Agda.TypeChecking.Rules.LHS.Unify: type UnifyEnv = UnifyMayPostpone
+ Agda.TypeChecking.Rules.LHS.Unify: type UnifyOutput = Unifiable
+ Agda.TypeChecking.Rules.Term: LamNotPi :: LamOrPi
+ Agda.TypeChecking.Rules.Term: PiNotLam :: LamOrPi
+ Agda.TypeChecking.Rules.Term: checkLambda :: Arg TypedBinding -> Expr -> Type -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkMeta :: (Type -> TCM Term) -> Type -> MetaInfo -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkTerm :: Term -> Type -> TCM Term
+ Agda.TypeChecking.Rules.Term: data LamOrPi
+ Agda.TypeChecking.Rules.Term: inferMeta :: (Type -> TCM Term) -> MetaInfo -> TCM (Args -> Term, Type)
+ Agda.TypeChecking.Rules.Term: instance Eq LamOrPi
+ Agda.TypeChecking.Rules.Term: instance Show LamOrPi
+ Agda.TypeChecking.Rules.Term: isTypeEqualTo :: Expr -> Type -> TCM Type
+ Agda.TypeChecking.Rules.Term: leqType_ :: Type -> Type -> TCM ()
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj ()
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj CompiledRepresentation
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj EInterface
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Exp
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Forced
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj GlobalId
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj InjectiveFun
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Level
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj LevelAtom
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj LocalId
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj MemberId
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj NameSpaceId
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj PlusLevel
+ Agda.TypeChecking.Serialise: instance [incoherent] EmbPrj Tag
+ Agda.TypeChecking.Serialise: instance [incoherent] Eq TypeRep'
+ Agda.TypeChecking.Serialise: instance [incoherent] Hashable TypeRep'
+ Agda.TypeChecking.Substitute: absBody :: Raise t => Abs t -> t
+ Agda.TypeChecking.Substitute: data TelV a
+ Agda.TypeChecking.Substitute: instance (Eq a, Raise a) => Eq (TelV a)
+ Agda.TypeChecking.Substitute: instance (Ord a, Raise a) => Ord (TelV a)
+ Agda.TypeChecking.Substitute: instance (Raise a, Eq a) => Eq (Abs a)
+ Agda.TypeChecking.Substitute: instance (Raise a, Eq a) => Eq (Tele a)
+ Agda.TypeChecking.Substitute: instance (Raise a, Ord a) => Ord (Abs a)
+ Agda.TypeChecking.Substitute: instance (Raise a, Ord a) => Ord (Tele a)
+ Agda.TypeChecking.Substitute: instance Data a => Data (TelV a)
+ Agda.TypeChecking.Substitute: instance Eq Constraint
+ Agda.TypeChecking.Substitute: instance Eq Elim
+ Agda.TypeChecking.Substitute: instance Eq Level
+ Agda.TypeChecking.Substitute: instance Eq LevelAtom
+ Agda.TypeChecking.Substitute: instance Eq PlusLevel
+ Agda.TypeChecking.Substitute: instance Eq Sort
+ Agda.TypeChecking.Substitute: instance Eq Term
+ Agda.TypeChecking.Substitute: instance Eq Type
+ Agda.TypeChecking.Substitute: instance Functor TelV
+ Agda.TypeChecking.Substitute: instance Ord Elim
+ Agda.TypeChecking.Substitute: instance Ord Level
+ Agda.TypeChecking.Substitute: instance Ord LevelAtom
+ Agda.TypeChecking.Substitute: instance Ord PlusLevel
+ Agda.TypeChecking.Substitute: instance Ord Sort
+ Agda.TypeChecking.Substitute: instance Ord Term
+ Agda.TypeChecking.Substitute: instance Ord Type
+ Agda.TypeChecking.Substitute: instance Raise ()
+ Agda.TypeChecking.Substitute: instance Raise ClauseBody
+ Agda.TypeChecking.Substitute: instance Raise Constraint
+ Agda.TypeChecking.Substitute: instance Raise Elim
+ Agda.TypeChecking.Substitute: instance Raise Level
+ Agda.TypeChecking.Substitute: instance Raise LevelAtom
+ Agda.TypeChecking.Substitute: instance Raise PlusLevel
+ Agda.TypeChecking.Substitute: instance Show a => Show (TelV a)
+ Agda.TypeChecking.Substitute: instance Subst Level
+ Agda.TypeChecking.Substitute: instance Subst LevelAtom
+ Agda.TypeChecking.Substitute: instance Subst PlusLevel
+ Agda.TypeChecking.Substitute: instance Typeable1 TelV
+ Agda.TypeChecking.Substitute: levelMax :: [PlusLevel] -> Level
+ Agda.TypeChecking.Substitute: levelSort :: Level -> Sort
+ Agda.TypeChecking.Substitute: levelTm :: Level -> Term
+ Agda.TypeChecking.Substitute: lvlView :: Term -> Level
+ Agda.TypeChecking.Substitute: mkAbs :: (Raise a, Free a) => String -> a -> Abs a
+ Agda.TypeChecking.Substitute: reAbs :: (Raise a, Free a) => Abs a -> Abs a
+ Agda.TypeChecking.Substitute: rename :: Raise t => (Nat -> Nat) -> t -> t
+ Agda.TypeChecking.Substitute: renameFrom :: Raise t => Nat -> (Nat -> Nat) -> t -> t
+ Agda.TypeChecking.Substitute: sLub :: Sort -> Sort -> Sort
+ Agda.TypeChecking.Substitute: sortTm :: Sort -> Term
+ Agda.TypeChecking.Substitute: telFromList :: [Arg (String, Type)] -> Telescope
+ Agda.TypeChecking.Substitute: telToList :: Telescope -> [Arg (String, Type)]
+ Agda.TypeChecking.Substitute: teleLam :: Telescope -> Term -> Term
+ Agda.TypeChecking.Substitute: type TelView = TelV Type
+ Agda.TypeChecking.Telescope: renameP :: Subst t => Permutation -> t -> t
+ Agda.TypeChecking.Telescope: reorderTel_ :: [Arg Type] -> Permutation
+ Agda.TypeChecking.Test.Generators: instance KillVar a => KillVar (Maybe a)
+ Agda.Utils.Graph: instance (Eq n, Eq e) => Eq (Graph n e)
+ Agda.Utils.Graph: instance Functor (Graph n)
+ Agda.Utils.IO.UTF8: hPutStr :: Handle -> String -> IO ()
+ Agda.Utils.List: isSublistOf :: Eq a => [a] -> [a] -> Bool
+ Agda.Utils.List: prop_uniqBy :: [Integer] -> Bool
+ Agda.Utils.List: prop_zipWith' :: (Integer -> Integer -> Integer) -> Property
+ Agda.Utils.List: uniqBy :: Ord b => (a -> b) -> [a] -> [a]
+ Agda.Utils.List: zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]
+ Agda.Utils.ReadP: parse' :: ReadP t a -> [t] -> Either a [t]
+ Agda.Utils.Size: instance Sized a => Sized (Maybe a)
+ Agda.Utils.VarSet: delete :: Ord a => a -> Set a -> Set a
+ Agda.Utils.VarSet: empty :: Set a
+ Agda.Utils.VarSet: fromList :: Ord a => [a] -> Set a
+ Agda.Utils.VarSet: isSubsetOf :: Ord a => Set a -> Set a -> Bool
+ Agda.Utils.VarSet: member :: Ord a => a -> Set a -> Bool
+ Agda.Utils.VarSet: singleton :: a -> Set a
+ Agda.Utils.VarSet: subtract :: Integer -> VarSet -> VarSet
+ Agda.Utils.VarSet: toList :: Set a -> [a]
+ Agda.Utils.VarSet: type VarSet = Set Integer
+ Agda.Utils.VarSet: union :: Ord a => Set a -> Set a -> Set a
+ Agda.Utils.VarSet: unions :: Ord a => [Set a] -> Set a
- Agda.Auto.Convert: frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> IO Clause
+ Agda.Auto.Convert: frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> ErrorT String IO Clause
- Agda.Auto.Convert: frommyExp :: MExp O -> IO Term
+ Agda.Auto.Convert: frommyExp :: MExp O -> ErrorT String IO Term
- Agda.Auto.Convert: frommyExps :: Nat -> MArgList O -> Term -> IO Term
+ Agda.Auto.Convert: frommyExps :: Nat -> MArgList O -> Term -> ErrorT String IO Term
- Agda.Compiler.Epic.AuxAST: EpicFun :: Var -> Comment -> String -> Fun
+ Agda.Compiler.Epic.AuxAST: EpicFun :: Var -> Maybe QName -> Comment -> String -> Fun
- Agda.Compiler.Epic.AuxAST: Fun :: Inline -> Var -> Comment -> [Var] -> Expr -> Fun
+ Agda.Compiler.Epic.AuxAST: Fun :: Inline -> Var -> Maybe QName -> Comment -> [Var] -> Expr -> Fun
- Agda.Compiler.Epic.CompileState: CompileState :: Map QName Tag -> [Var] -> Set Var -> Map QName Bool -> Map QName Int -> Maybe QName -> Map QName IrrFilter -> CompileState
+ Agda.Compiler.Epic.CompileState: CompileState :: [Var] -> Map TopLevelModuleName (EInterface, Set FilePath) -> EInterface -> EInterface -> String -> CompileState
- Agda.Compiler.Epic.CompileState: addDefName :: Monad m => QName -> Compile m ()
+ Agda.Compiler.Epic.CompileState: addDefName :: QName -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: constructorArity :: (MonadTCM tcm, Num a) => QName -> tcm a
+ Agda.Compiler.Epic.CompileState: constructorArity :: Num a => QName -> TCM a
- Agda.Compiler.Epic.CompileState: epicError :: MonadTCM m => String -> Compile m a
+ Agda.Compiler.Epic.CompileState: epicError :: String -> Compile TCM a
- Agda.Compiler.Epic.CompileState: getConstrTag :: Monad m => QName -> Compile m Tag
+ Agda.Compiler.Epic.CompileState: getConstrTag :: QName -> Compile TCM Tag
- Agda.Compiler.Epic.CompileState: getDelayed :: MonadTCM m => QName -> Compile m Bool
+ Agda.Compiler.Epic.CompileState: getDelayed :: QName -> Compile TCM Bool
- Agda.Compiler.Epic.CompileState: getMain :: MonadTCM m => Compile m Var
+ Agda.Compiler.Epic.CompileState: getMain :: Compile TCM Var
- Agda.Compiler.Epic.CompileState: newName :: Monad m => Compile m Var
+ Agda.Compiler.Epic.CompileState: newName :: Compile TCM Var
- Agda.Compiler.Epic.CompileState: putDelayed :: Monad m => QName -> Bool -> Compile m ()
+ Agda.Compiler.Epic.CompileState: putDelayed :: QName -> Bool -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: putMain :: Monad m => QName -> Compile m ()
+ Agda.Compiler.Epic.CompileState: putMain :: QName -> Compile TCM ()
- Agda.Compiler.Epic.CompileState: topBindings :: Monad m => Compile m (Set Var)
+ Agda.Compiler.Epic.CompileState: topBindings :: Compile TCM (Set Var)
- Agda.Compiler.Epic.Epic: prettyEpicFun :: Fun -> String
+ Agda.Compiler.Epic.Epic: prettyEpicFun :: MonadTCM m => Fun -> Compile m String
- Agda.Compiler.Epic.Erasure: (&&-) :: Relevancy -> Relevancy -> Relevancy
+ Agda.Compiler.Epic.Erasure: (&&-) :: Relevance -> Relevance -> Relevance
- Agda.Compiler.Epic.Erasure: ErasureState :: Map Var [Relevancy] -> Map Var Fun -> ErasureState
+ Agda.Compiler.Epic.Erasure: ErasureState :: Map Var [Relevance] -> Map Var Fun -> ErasureState
- Agda.Compiler.Epic.Erasure: erasure :: MonadTCM m => [Fun] -> Compile m [Fun]
+ Agda.Compiler.Epic.Erasure: erasure :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Erasure: initiate :: Monad m => Fun -> Erasure m ()
+ Agda.Compiler.Epic.Erasure: initiate :: Fun -> Erasure (Compile TCM) ()
- Agda.Compiler.Epic.Erasure: isIrr :: Relevancy -> Bool
+ Agda.Compiler.Epic.Erasure: isIrr :: Relevance -> Bool
- Agda.Compiler.Epic.Erasure: isRel :: Relevancy -> Bool
+ Agda.Compiler.Epic.Erasure: isRel :: Relevance -> Bool
- Agda.Compiler.Epic.Erasure: relevancies :: ErasureState -> Map Var [Relevancy]
+ Agda.Compiler.Epic.Erasure: relevancies :: ErasureState -> Map Var [Relevance]
- Agda.Compiler.Epic.Erasure: relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevancy
+ Agda.Compiler.Epic.Erasure: relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevance
- Agda.Compiler.Epic.Erasure: step :: (Monad m, Functor m) => Erasure m (Map Var [Relevancy])
+ Agda.Compiler.Epic.Erasure: step :: Integer -> Erasure (Compile TCM) (Map Var [Relevance])
- Agda.Compiler.Epic.Forcing: dataParameters :: MonadTCM m => QName -> Compile m Nat
+ Agda.Compiler.Epic.Forcing: dataParameters :: QName -> Compile TCM Nat
- Agda.Compiler.Epic.Forcing: findPosition :: Nat -> [Maybe Term] -> (Nat, Term)
+ Agda.Compiler.Epic.Forcing: findPosition :: Nat -> [Maybe Term] -> Compile TCM (Maybe (Nat, Term))
- Agda.Compiler.Epic.Forcing: insertTele :: MonadTCM m => Int -> Maybe Type -> Term -> Telescope -> Compile m (Telescope, (Type, Type))
+ Agda.Compiler.Epic.Forcing: insertTele :: (QName, Args) -> Int -> Maybe Type -> Term -> Telescope -> Compile TCM (Telescope, (Telescope, Type, Type))
- Agda.Compiler.Epic.Forcing: remForced :: MonadTCM m => CompiledClauses -> Telescope -> Compile m CompiledClauses
+ Agda.Compiler.Epic.Forcing: remForced :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.Epic.Forcing: replaceForced :: MonadTCM m => (Nat, Telescope) -> [Nat] -> (CompiledClauses, [Maybe Term]) -> Compile m CompiledClauses
+ Agda.Compiler.Epic.Forcing: replaceForced :: ([Var], [Var]) -> Telescope -> [Var] -> [Maybe Term] -> Expr -> Compile TCM Expr
- Agda.Compiler.Epic.Forcing: unifyI :: MonadTCM m => Telescope -> [Nat] -> Type -> Args -> Args -> Compile m [Maybe Term]
+ Agda.Compiler.Epic.Forcing: unifyI :: Telescope -> [Nat] -> Type -> Args -> Args -> Compile TCM [Maybe Term]
- Agda.Compiler.Epic.FromAgda: compileClauses :: MonadTCM m => QName -> Int -> CompiledClauses -> Compile m Fun
+ Agda.Compiler.Epic.FromAgda: compileClauses :: QName -> Int -> CompiledClauses -> Compile TCM Fun
- Agda.Compiler.Epic.FromAgda: fromAgda :: MonadTCM m => Maybe Term -> [(QName, Definition)] -> Compile m [Fun]
+ Agda.Compiler.Epic.FromAgda: fromAgda :: Maybe Term -> [(QName, Definition)] -> Compile TCM [Fun]
- Agda.Compiler.Epic.FromAgda: reverseCCBody :: CompiledClauses -> CompiledClauses
+ Agda.Compiler.Epic.FromAgda: reverseCCBody :: Int -> CompiledClauses -> CompiledClauses
- Agda.Compiler.Epic.FromAgda: substLit :: MonadTCM m => Literal -> Compile m Lit
+ Agda.Compiler.Epic.FromAgda: substLit :: Literal -> Compile TCM Lit
- Agda.Compiler.Epic.FromAgda: substTerm :: MonadTCM m => [Var] -> Term -> Compile m Expr
+ Agda.Compiler.Epic.FromAgda: substTerm :: [Var] -> Term -> Compile TCM Expr
- Agda.Compiler.Epic.FromAgda: translateDefn :: MonadTCM m => Maybe Term -> (QName, Definition) -> Compile m (Maybe Fun)
+ Agda.Compiler.Epic.FromAgda: translateDefn :: Maybe Term -> (QName, Definition) -> Compile TCM (Maybe Fun)
- Agda.Compiler.Epic.NatDetection: getNatish :: MonadTCM m => Compile m [(IrrFilter, [QName])]
+ Agda.Compiler.Epic.NatDetection: getNatish :: Compile TCM [(ForcedArgs, [QName])]
- Agda.Compiler.Epic.NatDetection: nrRel :: IrrFilter -> Integer
+ Agda.Compiler.Epic.NatDetection: nrRel :: ForcedArgs -> Integer
- Agda.Compiler.Epic.Primitive: getBuiltins :: MonadTCM m => Compile m [PrimTransform]
+ Agda.Compiler.Epic.Primitive: getBuiltins :: Compile TCM [PrimTransform]
- Agda.Compiler.Epic.Primitive: natPrimTF :: IrrFilter -> [QName] -> PrimTransform
+ Agda.Compiler.Epic.Primitive: natPrimTF :: ForcedArgs -> [QName] -> PrimTransform
- Agda.Compiler.Epic.Primitive: primExpr :: MonadTCM m => [PrimTransform] -> Expr -> Compile m Expr
+ Agda.Compiler.Epic.Primitive: primExpr :: [PrimTransform] -> Expr -> Compile TCM Expr
- Agda.Compiler.Epic.Primitive: primFun :: MonadTCM m => [PrimTransform] -> Fun -> Compile m Fun
+ Agda.Compiler.Epic.Primitive: primFun :: [PrimTransform] -> Fun -> Compile TCM Fun
- Agda.Compiler.Epic.Primitive: primitivise :: MonadTCM m => [Fun] -> Compile m [Fun]
+ Agda.Compiler.Epic.Primitive: primitivise :: [Fun] -> Compile TCM [Fun]
- Agda.Compiler.HaskellTypes: getHsType :: MonadTCM tcm => QName -> tcm HaskellType
+ Agda.Compiler.HaskellTypes: getHsType :: QName -> TCM HaskellType
- Agda.Compiler.HaskellTypes: getHsVar :: MonadTCM tcm => Nat -> tcm HaskellCode
+ Agda.Compiler.HaskellTypes: getHsVar :: Nat -> TCM HaskellCode
- Agda.Compiler.HaskellTypes: haskellKind :: MonadTCM tcm => Type -> tcm HaskellKind
+ Agda.Compiler.HaskellTypes: haskellKind :: Type -> TCM HaskellKind
- Agda.Compiler.HaskellTypes: haskellType :: MonadTCM tcm => Type -> tcm HaskellType
+ Agda.Compiler.HaskellTypes: haskellType :: Type -> TCM HaskellType
- Agda.Compiler.HaskellTypes: notAHaskellKind :: MonadTCM tcm => Type -> tcm a
+ Agda.Compiler.HaskellTypes: notAHaskellKind :: Type -> TCM a
- Agda.Compiler.HaskellTypes: notAHaskellType :: MonadTCM tcm => Type -> tcm a
+ Agda.Compiler.HaskellTypes: notAHaskellType :: Type -> TCM a
- Agda.Interaction.BasicOps: Assign :: b -> a -> OutputForm a b
+ Agda.Interaction.BasicOps: Assign :: b -> a -> OutputConstraint a b
- Agda.Interaction.BasicOps: CmpInType :: Comparison -> a -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpInType :: Comparison -> a -> b -> b -> OutputConstraint a b
- Agda.Interaction.BasicOps: CmpLevels :: Comparison -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpLevels :: Comparison -> b -> b -> OutputConstraint a b
- Agda.Interaction.BasicOps: CmpSorts :: Comparison -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpSorts :: Comparison -> b -> b -> OutputConstraint a b
- Agda.Interaction.BasicOps: CmpTeles :: Comparison -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpTeles :: Comparison -> b -> b -> OutputConstraint a b
- Agda.Interaction.BasicOps: CmpTypes :: Comparison -> b -> b -> OutputForm a b
+ Agda.Interaction.BasicOps: CmpTypes :: Comparison -> b -> b -> OutputConstraint a b
- Agda.Interaction.BasicOps: Guard :: (OutputForm a b) -> [OutputForm a b] -> OutputForm a b
+ Agda.Interaction.BasicOps: Guard :: (OutputConstraint a b) -> ProblemId -> OutputConstraint a b
- Agda.Interaction.BasicOps: IsEmptyType :: a -> OutputForm a b
+ Agda.Interaction.BasicOps: IsEmptyType :: a -> OutputConstraint a b
- Agda.Interaction.BasicOps: JustSort :: b -> OutputForm a b
+ Agda.Interaction.BasicOps: JustSort :: b -> OutputConstraint a b
- Agda.Interaction.BasicOps: JustType :: b -> OutputForm a b
+ Agda.Interaction.BasicOps: JustType :: b -> OutputConstraint a b
- Agda.Interaction.BasicOps: OfType :: b -> a -> OutputForm a b
+ Agda.Interaction.BasicOps: OfType :: b -> a -> OutputConstraint a b
- Agda.Interaction.BasicOps: OfType' :: b -> a -> OutputForm' a b
+ Agda.Interaction.BasicOps: OfType' :: b -> a -> OutputConstraint' a b
- Agda.Interaction.BasicOps: TypedAssign :: b -> a -> a -> OutputForm a b
+ Agda.Interaction.BasicOps: TypedAssign :: b -> a -> a -> OutputConstraint a b
- Agda.Interaction.BasicOps: contextOfMeta :: InteractionId -> Rewrite -> TCM [OutputForm' Expr Name]
+ Agda.Interaction.BasicOps: contextOfMeta :: InteractionId -> Rewrite -> TCM [OutputConstraint' Expr Name]
- Agda.Interaction.BasicOps: judgToOutputForm :: Judgement a c -> OutputForm a c
+ Agda.Interaction.BasicOps: judgToOutputForm :: Judgement a c -> OutputConstraint a c
- Agda.Interaction.BasicOps: ofExpr :: OutputForm' a b -> a
+ Agda.Interaction.BasicOps: ofExpr :: OutputConstraint' a b -> a
- Agda.Interaction.BasicOps: ofName :: OutputForm' a b -> b
+ Agda.Interaction.BasicOps: ofName :: OutputConstraint' a b -> b
- Agda.Interaction.BasicOps: typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputForm Expr InteractionId)
+ Agda.Interaction.BasicOps: typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputConstraint Expr InteractionId)
- Agda.Interaction.BasicOps: typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputForm Expr MetaId)
+ Agda.Interaction.BasicOps: typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr MetaId)
- Agda.Interaction.BasicOps: typesOfHiddenMetas :: Rewrite -> TCM [OutputForm Expr MetaId]
+ Agda.Interaction.BasicOps: typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr MetaId]
- Agda.Interaction.BasicOps: typesOfVisibleMetas :: Rewrite -> TCM [OutputForm Expr InteractionId]
+ Agda.Interaction.BasicOps: typesOfVisibleMetas :: Rewrite -> TCM [OutputConstraint Expr InteractionId]
- Agda.Interaction.Highlighting.Generate: generateSyntaxInfo :: AbsolutePath -> Maybe TCErr -> TopLevelInfo -> [([QName], [Range])] -> TCM HighlightingInfo
+ Agda.Interaction.Highlighting.Generate: generateSyntaxInfo :: AbsolutePath -> Maybe TCErr -> TopLevelInfo -> [TerminationError] -> TCM HighlightingInfo
- Agda.Interaction.Imports: Warnings :: [([QName], [Range])] -> [Range] -> Constraints -> Warnings
+ Agda.Interaction.Imports: Warnings :: [TerminationError] -> [Range] -> Constraints -> Warnings
- Agda.Interaction.Imports: terminationProblems :: Warnings -> [([QName], [Range])]
+ Agda.Interaction.Imports: terminationProblems :: Warnings -> [TerminationError]
- Agda.Interaction.MakeCase: findClause :: MetaId -> TCM (QName, Clause)
+ Agda.Interaction.MakeCase: findClause :: MetaId -> TCM (CaseContext, QName, Clause)
- Agda.Interaction.MakeCase: makeCase :: InteractionId -> Range -> String -> TCM [Clause]
+ Agda.Interaction.MakeCase: makeCase :: InteractionId -> Range -> String -> TCM (CaseContext, [Clause])
- Agda.Interaction.Options: Options :: String -> Maybe FilePath -> Either [FilePath] [AbsolutePath] -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> FilePath -> Maybe FilePath -> Bool -> Bool -> [String] -> PragmaOptions -> [String] -> CommandLineOptions
+ Agda.Interaction.Options: Options :: String -> Maybe FilePath -> Either [FilePath] [AbsolutePath] -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Maybe FilePath -> Bool -> Bool -> Maybe FilePath -> FilePath -> Maybe FilePath -> Bool -> Bool -> [String] -> PragmaOptions -> [String] -> Bool -> CommandLineOptions
- Agda.Syntax.Abstract: Apply :: ModuleInfo -> ModuleName -> [TypedBindings] -> ModuleName -> [NamedArg Expr] -> (Map QName QName) -> (Map ModuleName ModuleName) -> Declaration
+ Agda.Syntax.Abstract: Apply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Map QName QName) -> (Map ModuleName ModuleName) -> Declaration
- Agda.Syntax.Abstract: DataDef :: DefInfo -> QName -> [LamBinding] -> [Constructor] -> Definition
+ Agda.Syntax.Abstract: DataDef :: DefInfo -> QName -> [LamBinding] -> [Constructor] -> Declaration
- Agda.Syntax.Abstract: DomainFree :: Hiding -> Name -> LamBinding
+ Agda.Syntax.Abstract: DomainFree :: Hiding -> Relevance -> Name -> LamBinding
- Agda.Syntax.Abstract: DontCare :: Expr
+ Agda.Syntax.Abstract: DontCare :: Expr -> Expr
- Agda.Syntax.Abstract: FunDef :: DefInfo -> QName -> [Clause] -> Definition
+ Agda.Syntax.Abstract: FunDef :: DefInfo -> QName -> [Clause] -> Declaration
- Agda.Syntax.Abstract: LetApply :: ModuleInfo -> ModuleName -> [TypedBindings] -> ModuleName -> [NamedArg Expr] -> (Map QName QName) -> (Map ModuleName ModuleName) -> LetBinding
+ Agda.Syntax.Abstract: LetApply :: ModuleInfo -> ModuleName -> ModuleApplication -> (Map QName QName) -> (Map ModuleName ModuleName) -> LetBinding
- Agda.Syntax.Abstract: RecDef :: DefInfo -> QName -> (Maybe Constructor) -> [LamBinding] -> Expr -> [Declaration] -> Definition
+ Agda.Syntax.Abstract: RecDef :: DefInfo -> QName -> (Maybe QName) -> [LamBinding] -> Expr -> [Declaration] -> Declaration
- Agda.Syntax.Abstract: TypedBindings :: Range -> (Arg [TypedBinding]) -> TypedBindings
+ Agda.Syntax.Abstract: TypedBindings :: Range -> (Arg TypedBinding) -> TypedBindings
- Agda.Syntax.Abstract.Pretty: prettyA :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc
+ Agda.Syntax.Abstract.Pretty: prettyA :: (Pretty c, ToConcrete a c) => a -> TCM Doc
- Agda.Syntax.Abstract.Pretty: prettyATop :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc
+ Agda.Syntax.Abstract.Pretty: prettyATop :: (Pretty c, ToConcrete a c) => a -> TCM Doc
- Agda.Syntax.Abstract.Pretty: showA :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String
+ Agda.Syntax.Abstract.Pretty: showA :: (Show c, ToConcrete a c) => a -> TCM String
- Agda.Syntax.Abstract.Pretty: showATop :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String
+ Agda.Syntax.Abstract.Pretty: showATop :: (Show c, ToConcrete a c) => a -> TCM String
- Agda.Syntax.Abstract.Views: Application :: Head -> [NamedArg Expr] -> AppView
+ Agda.Syntax.Abstract.Views: Application :: Expr -> [NamedArg Expr] -> AppView
- Agda.Syntax.Concrete: Data :: !Range -> Induction -> Name -> [TypedBindings] -> Expr -> [Constructor] -> Declaration
+ Agda.Syntax.Concrete: Data :: !Range -> Induction -> Name -> [LamBinding] -> (Maybe Expr) -> [Constructor] -> Declaration
- Agda.Syntax.Concrete: DomainFree :: Hiding -> BoundName -> LamBinding
+ Agda.Syntax.Concrete: DomainFree :: Hiding -> Relevance -> BoundName -> LamBinding
- Agda.Syntax.Concrete: ModuleMacro :: !Range -> Name -> [TypedBindings] -> Expr -> OpenShortHand -> ImportDirective -> Declaration
+ Agda.Syntax.Concrete: ModuleMacro :: !Range -> Name -> ModuleApplication -> OpenShortHand -> ImportDirective -> Declaration
- Agda.Syntax.Concrete: OpApp :: !Range -> Name -> [Expr] -> Expr
+ Agda.Syntax.Concrete: OpApp :: !Range -> Name -> [OpApp Expr] -> Expr
- Agda.Syntax.Concrete: Record :: !Range -> Name -> (Maybe Name) -> [TypedBindings] -> Expr -> [Declaration] -> Declaration
+ Agda.Syntax.Concrete: Record :: !Range -> Name -> (Maybe Name) -> [LamBinding] -> (Maybe Expr) -> [Declaration] -> Declaration
- Agda.Syntax.Concrete: TypedBindings :: !Range -> (Arg [TypedBinding]) -> TypedBindings
+ Agda.Syntax.Concrete: TypedBindings :: !Range -> (Arg TypedBinding) -> TypedBindings
- Agda.Syntax.Concrete.Definitions: Axiom :: Range -> Fixity' -> Access -> IsAbstract -> Relevance -> Name -> Expr -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: Axiom :: Range -> Fixity' -> Access -> Relevance -> Name -> Expr -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Fixity' -> Access -> IsAbstract -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: DataDef :: Range -> Fixity' -> IsAbstract -> Name -> [LamBinding] -> [NiceConstructor] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity' -> Access -> IsAbstract -> Name -> [Clause] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: FunDef :: Range -> [Declaration] -> Fixity' -> IsAbstract -> Name -> [Clause] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: NiceModuleMacro :: Range -> Access -> IsAbstract -> Name -> Telescope -> Expr -> OpenShortHand -> ImportDirective -> NiceDeclaration
+ Agda.Syntax.Concrete.Definitions: NiceModuleMacro :: Range -> Access -> IsAbstract -> Name -> ModuleApplication -> OpenShortHand -> ImportDirective -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity' -> Access -> IsAbstract -> Name -> (Maybe NiceConstructor) -> [LamBinding] -> [NiceDeclaration] -> NiceDefinition
+ Agda.Syntax.Concrete.Definitions: RecDef :: Range -> Fixity' -> IsAbstract -> Name -> (Maybe (ThingWithFixity Name)) -> [LamBinding] -> [NiceDeclaration] -> NiceDeclaration
- Agda.Syntax.Concrete.Definitions: type Nice = Either DeclarationException
+ Agda.Syntax.Concrete.Definitions: type Nice = StateT NiceEnv (Either DeclarationException)
- Agda.Syntax.Concrete.Operators.Parser: OpAppV :: Name -> [e] -> ExprView e
+ Agda.Syntax.Concrete.Operators.Parser: OpAppV :: Name -> [OpApp e] -> ExprView e
- Agda.Syntax.Concrete.Operators.Parser: rebuild :: IsExpr e => NewNotation -> Range -> [e] -> ReadP a e
+ Agda.Syntax.Concrete.Operators.Parser: rebuild :: IsExpr e => NewNotation -> Range -> [e] -> ReadP symbol e
- Agda.Syntax.Internal: DontCare :: Term
+ Agda.Syntax.Internal: DontCare :: Term -> Term
- Agda.Syntax.Internal: Type :: Term -> Sort
+ Agda.Syntax.Internal: Type :: Level -> Sort
- Agda.Syntax.Position: killRange2 :: (KillRange a1, KillRange a) => (a1 -> a -> t) -> a1 -> a -> t
+ Agda.Syntax.Position: killRange2 :: (KillRange a, KillRange a1) => (a1 -> a -> t) -> a1 -> a -> t
- Agda.Syntax.Position: killRange3 :: (KillRange a2, KillRange a1, KillRange a) => (a2 -> a1 -> a -> t) -> a2 -> a1 -> a -> t
+ Agda.Syntax.Position: killRange3 :: (KillRange a, KillRange a1, KillRange a2) => (a2 -> a1 -> a -> t) -> a2 -> a1 -> a -> t
- Agda.Syntax.Position: killRange4 :: (KillRange a3, KillRange a1, KillRange a2, KillRange a) => (a3 -> a2 -> a1 -> a -> t) -> a3 -> a2 -> a1 -> a -> t
+ Agda.Syntax.Position: killRange4 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3) => (a3 -> a2 -> a1 -> a -> t) -> a3 -> a2 -> a1 -> a -> t
- Agda.Syntax.Position: killRange5 :: (KillRange a4, KillRange a2, KillRange a3, KillRange a1, KillRange a) => (a4 -> a3 -> a2 -> a1 -> a -> t) -> a4 -> a3 -> a2 -> a1 -> a -> t
+ Agda.Syntax.Position: killRange5 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4) => (a4 -> a3 -> a2 -> a1 -> a -> t) -> a4 -> a3 -> a2 -> a1 -> a -> t
- Agda.Syntax.Position: killRange6 :: (KillRange a5, KillRange a1, KillRange a2, KillRange a4, KillRange a3, KillRange a) => (a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
+ Agda.Syntax.Position: killRange6 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5) => (a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- Agda.Syntax.Position: killRange7 :: (KillRange a6, KillRange a3, KillRange a2, KillRange a5, KillRange a1, KillRange a4, KillRange a) => (a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
+ Agda.Syntax.Position: killRange7 :: (KillRange a, KillRange a1, KillRange a2, KillRange a3, KillRange a4, KillRange a5, KillRange a6) => (a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t) -> a6 -> a5 -> a4 -> a3 -> a2 -> a1 -> a -> t
- Agda.Syntax.Scope.Base: Scope :: ModuleName -> [ModuleName] -> NameSpace -> NameSpace -> NameSpace -> Map QName ModuleName -> Scope
+ Agda.Syntax.Scope.Base: Scope :: ModuleName -> [ModuleName] -> [(NameSpaceId, NameSpace)] -> Map QName ModuleName -> Scope
- Agda.Syntax.Scope.Base: mapScopeM :: Monad m => (NameSpaceId -> NamesInScope -> m NamesInScope) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
+ Agda.Syntax.Scope.Base: mapScopeM :: (Functor m, Monad m) => (NameSpaceId -> NamesInScope -> m NamesInScope) -> (NameSpaceId -> ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
- Agda.Syntax.Scope.Base: mapScopeM_ :: Monad m => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
+ Agda.Syntax.Scope.Base: mapScopeM_ :: (Functor m, Monad m) => (NamesInScope -> m NamesInScope) -> (ModulesInScope -> m ModulesInScope) -> Scope -> m Scope
- Agda.Syntax.Scope.Base: mergeNames :: InScope a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a
+ Agda.Syntax.Scope.Base: mergeNames :: Eq a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a
- Agda.Syntax.Scope.Base: namesInScope :: InScope a => [Scope -> NameSpace] -> Scope -> ThingsInScope a
+ Agda.Syntax.Scope.Base: namesInScope :: InScope a => [NameSpaceId] -> Scope -> ThingsInScope a
- Agda.Syntax.Scope.Base: thingsInScope :: [Scope -> NameSpace] -> Scope -> NameSpace
+ Agda.Syntax.Scope.Base: thingsInScope :: [NameSpaceId] -> Scope -> NameSpace
- Agda.Syntax.Scope.Monad: DefinedName :: AbstractName -> ResolvedName
+ Agda.Syntax.Scope.Monad: DefinedName :: Access -> AbstractName -> ResolvedName
- Agda.Syntax.Translation.AbstractToConcrete: abstractToConcreteCtx :: (MonadTCM tcm, ToConcrete a c) => Precedence -> a -> tcm c
+ Agda.Syntax.Translation.AbstractToConcrete: abstractToConcreteCtx :: ToConcrete a c => Precedence -> a -> TCM c
- Agda.Syntax.Translation.AbstractToConcrete: abstractToConcrete_ :: (MonadTCM tcm, ToConcrete a c) => a -> tcm c
+ Agda.Syntax.Translation.AbstractToConcrete: abstractToConcrete_ :: ToConcrete a c => a -> TCM c
- Agda.Syntax.Translation.AbstractToConcrete: runAbsToCon :: MonadTCM tcm => AbsToCon a -> tcm a
+ Agda.Syntax.Translation.AbstractToConcrete: runAbsToCon :: AbsToCon a -> TCM a
- Agda.Syntax.Translation.InternalToAbstract: apps :: MonadTCM tcm => (Expr, [Arg Expr]) -> tcm Expr
+ Agda.Syntax.Translation.InternalToAbstract: apps :: (Expr, [Arg Expr]) -> TCM Expr
- Agda.Syntax.Translation.InternalToAbstract: reify :: (Reify i a, MonadTCM tcm) => i -> tcm a
+ Agda.Syntax.Translation.InternalToAbstract: reify :: Reify i a => i -> TCM a
- Agda.Syntax.Translation.InternalToAbstract: reifyApp :: MonadTCM tcm => Expr -> [Arg Term] -> tcm Expr
+ Agda.Syntax.Translation.InternalToAbstract: reifyApp :: Expr -> [Arg Term] -> TCM Expr
- Agda.Syntax.Translation.InternalToAbstract: reifyDisplayForm :: MonadTCM tcm => QName -> Args -> tcm Expr -> tcm Expr
+ Agda.Syntax.Translation.InternalToAbstract: reifyDisplayForm :: QName -> Args -> TCM Expr -> TCM Expr
- Agda.Syntax.Translation.InternalToAbstract: reifyPatterns :: MonadTCM tcm => Telescope -> Permutation -> [Arg Pattern] -> tcm [NamedArg Pattern]
+ Agda.Syntax.Translation.InternalToAbstract: reifyPatterns :: Telescope -> Permutation -> [Arg Pattern] -> TCM [NamedArg Pattern]
- Agda.Syntax.Translation.InternalToAbstract: stripImplicits :: MonadTCM tcm => [NamedArg Pattern] -> [Pattern] -> tcm ([NamedArg Pattern], [Pattern])
+ Agda.Syntax.Translation.InternalToAbstract: stripImplicits :: [NamedArg Pattern] -> [Pattern] -> TCM ([NamedArg Pattern], [Pattern])
- Agda.Termination.SparseMatrix: diagonal :: (Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b
+ Agda.Termination.SparseMatrix: diagonal :: (Show i, Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b
- Agda.Termination.SparseMatrix: toLists :: (Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]]
+ Agda.Termination.SparseMatrix: toLists :: (Show i, Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]]
- Agda.Termination.TermCheck: type Result = [([QName], [Range])]
+ Agda.Termination.TermCheck: type Result = [TerminationError]
- Agda.TypeChecking.CompiledClause: Done :: Int -> Term -> CompiledClauses
+ Agda.TypeChecking.CompiledClause: Done :: [Arg String] -> Term -> CompiledClauses
- Agda.TypeChecking.Constraints: catchConstraint :: MonadTCM tcm => Constraint -> TCM Constraints -> tcm Constraints
+ Agda.TypeChecking.Constraints: catchConstraint :: Constraint -> TCM () -> TCM ()
- Agda.TypeChecking.Constraints: guardConstraint :: MonadTCM tcm => tcm Constraints -> Constraint -> tcm Constraints
+ Agda.TypeChecking.Constraints: guardConstraint :: Constraint -> TCM () -> TCM ()
- Agda.TypeChecking.Constraints: noConstraints :: MonadTCM tcm => tcm Constraints -> tcm ()
+ Agda.TypeChecking.Constraints: noConstraints :: TCM a -> TCM a
- Agda.TypeChecking.Constraints: solveConstraint :: MonadTCM tcm => Constraint -> tcm Constraints
+ Agda.TypeChecking.Constraints: solveConstraint :: Constraint -> TCM ()
- Agda.TypeChecking.Constraints: wakeupConstraints :: MonadTCM tcm => tcm ()
+ Agda.TypeChecking.Constraints: wakeupConstraints :: MetaId -> TCM ()
- Agda.TypeChecking.Conversion: compareArgs :: MonadTCM tcm => [Polarity] -> Type -> Args -> Args -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareArgs :: [Polarity] -> Type -> Term -> Args -> Args -> TCM ()
- Agda.TypeChecking.Conversion: compareAtom :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareAtom :: Comparison -> Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Conversion: compareSort :: MonadTCM tcm => Comparison -> Sort -> Sort -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareSort :: Comparison -> Sort -> Sort -> TCM ()
- Agda.TypeChecking.Conversion: compareTel :: MonadTCM tcm => Comparison -> Telescope -> Telescope -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareTel :: Type -> Type -> Comparison -> Telescope -> Telescope -> TCM ()
- Agda.TypeChecking.Conversion: compareTerm :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareTerm :: Comparison -> Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Conversion: compareType :: MonadTCM tcm => Comparison -> Type -> Type -> tcm Constraints
+ Agda.TypeChecking.Conversion: compareType :: Comparison -> Type -> Type -> TCM ()
- Agda.TypeChecking.Conversion: equalAtom :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: equalAtom :: Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Conversion: equalLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: equalLevel :: Level -> Level -> TCM ()
- Agda.TypeChecking.Conversion: equalSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
+ Agda.TypeChecking.Conversion: equalSort :: Sort -> Sort -> TCM ()
- Agda.TypeChecking.Conversion: equalTerm :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: equalTerm :: Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Conversion: equalType :: MonadTCM tcm => Type -> Type -> tcm Constraints
+ Agda.TypeChecking.Conversion: equalType :: Type -> Type -> TCM ()
- Agda.TypeChecking.Conversion: leqLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints
+ Agda.TypeChecking.Conversion: leqLevel :: Level -> Level -> TCM ()
- Agda.TypeChecking.Conversion: leqSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints
+ Agda.TypeChecking.Conversion: leqSort :: Sort -> Sort -> TCM ()
- Agda.TypeChecking.Conversion: leqType :: MonadTCM tcm => Type -> Type -> tcm Constraints
+ Agda.TypeChecking.Conversion: leqType :: Type -> Type -> TCM ()
- Agda.TypeChecking.Coverage: cover :: MonadTCM tcm => [Clause] -> SplitClause -> tcm (Set Nat, [[Arg Pattern]])
+ Agda.TypeChecking.Coverage: cover :: [Clause] -> SplitClause -> TCM (Set Nat, [[Arg Pattern]])
- Agda.TypeChecking.Coverage: split :: MonadTCM tcm => Induction -> Telescope -> Permutation -> [Arg Pattern] -> Nat -> tcm (Either SplitError Covering)
+ Agda.TypeChecking.Coverage: split :: Induction -> Telescope -> Permutation -> [Arg Pattern] -> Nat -> TCM (Either SplitError Covering)
- Agda.TypeChecking.Coverage: split' :: MonadTCM tcm => Induction -> Telescope -> Permutation -> [Arg Pattern] -> Nat -> tcm (Either SplitError (Either SplitClause Covering))
+ Agda.TypeChecking.Coverage: split' :: Induction -> Telescope -> Permutation -> [Arg Pattern] -> Nat -> TCM (Either SplitError (Either SplitClause Covering))
- Agda.TypeChecking.Coverage.Match: Block :: (Maybe Nat) -> Match a
+ Agda.TypeChecking.Coverage.Match: Block :: Nat -> Match a
- Agda.TypeChecking.Datatypes: getConstructorData :: MonadTCM tcm => QName -> tcm QName
+ Agda.TypeChecking.Datatypes: getConstructorData :: QName -> TCM QName
- Agda.TypeChecking.Datatypes: getDatatypeInfo :: MonadTCM tcm => Type -> tcm (Maybe DatatypeInfo)
+ Agda.TypeChecking.Datatypes: getDatatypeInfo :: Type -> TCM (Maybe DatatypeInfo)
- Agda.TypeChecking.Datatypes: isDatatype :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Datatypes: isDatatype :: QName -> TCM Bool
- Agda.TypeChecking.Empty: isEmptyType :: MonadTCM tcm => Type -> tcm ()
+ Agda.TypeChecking.Empty: isEmptyType :: Type -> TCM ()
- Agda.TypeChecking.Errors: prettyError :: MonadTCM tcm => TCErr -> tcm String
+ Agda.TypeChecking.Errors: prettyError :: TCErr -> TCM String
- Agda.TypeChecking.Errors: prettyTCM :: (PrettyTCM a, MonadTCM tcm) => a -> tcm Doc
+ Agda.TypeChecking.Errors: prettyTCM :: PrettyTCM a => a -> TCM Doc
- Agda.TypeChecking.EtaContract: etaContract :: (MonadTCM tcm, TermLike a) => a -> tcm a
+ Agda.TypeChecking.EtaContract: etaContract :: TermLike a => a -> TCM a
- Agda.TypeChecking.EtaContract: etaOnce :: MonadTCM tcm => Term -> tcm Term
+ Agda.TypeChecking.EtaContract: etaOnce :: Term -> TCM Term
- Agda.TypeChecking.Free: FV :: Set Nat -> Set Nat -> FreeVars
+ Agda.TypeChecking.Free: FV :: VarSet -> VarSet -> VarSet -> VarSet -> FreeVars
- Agda.TypeChecking.Free: allVars :: FreeVars -> Set Nat
+ Agda.TypeChecking.Free: allVars :: FreeVars -> VarSet
- Agda.TypeChecking.Free: flexibleVars :: FreeVars -> Set Nat
+ Agda.TypeChecking.Free: flexibleVars :: FreeVars -> VarSet
- Agda.TypeChecking.Free: rigidVars :: FreeVars -> Set Nat
+ Agda.TypeChecking.Free: rigidVars :: FreeVars -> VarSet
- Agda.TypeChecking.Implicit: ImpInsert :: Int -> ImplicitInsertion
+ Agda.TypeChecking.Implicit: ImpInsert :: [Hiding] -> ImplicitInsertion
- Agda.TypeChecking.Implicit: impInsert :: Int -> ImplicitInsertion
+ Agda.TypeChecking.Implicit: impInsert :: [Hiding] -> ImplicitInsertion
- Agda.TypeChecking.Injectivity: useInjectivity :: Comparison -> Type -> Term -> Term -> TCM Constraints
+ Agda.TypeChecking.Injectivity: useInjectivity :: Comparison -> Type -> Term -> Term -> TCM ()
- Agda.TypeChecking.Level: builtinLevelKit :: MonadTCM tcm => tcm (Maybe LevelKit)
+ Agda.TypeChecking.Level: builtinLevelKit :: TCM (Maybe LevelKit)
- Agda.TypeChecking.Level: levelSucFunction :: MonadTCM tcm => tcm (Term -> Term)
+ Agda.TypeChecking.Level: levelSucFunction :: TCM (Term -> Term)
- Agda.TypeChecking.Level: levelView :: MonadTCM tcm => Term -> tcm LevelView
+ Agda.TypeChecking.Level: levelView :: Term -> TCM Level
- Agda.TypeChecking.Level: maybePrimCon :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)
+ Agda.TypeChecking.Level: maybePrimCon :: TCM Term -> TCM (Maybe QName)
- Agda.TypeChecking.Level: maybePrimDef :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)
+ Agda.TypeChecking.Level: maybePrimDef :: TCM Term -> TCM (Maybe QName)
- Agda.TypeChecking.MetaVars: assignTerm :: MonadTCM tcm => MetaId -> Term -> tcm ()
+ Agda.TypeChecking.MetaVars: assignTerm :: MetaId -> Term -> TCM ()
- Agda.TypeChecking.MetaVars: assignV :: MonadTCM tcm => Type -> MetaId -> Args -> Term -> tcm Constraints
+ Agda.TypeChecking.MetaVars: assignV :: MetaId -> Args -> Term -> TCM ()
- Agda.TypeChecking.MetaVars: blockTerm :: MonadTCM tcm => Type -> Term -> tcm Constraints -> tcm Term
+ Agda.TypeChecking.MetaVars: blockTerm :: Type -> TCM Term -> TCM Term
- Agda.TypeChecking.MetaVars: etaExpandBlocked :: (MonadTCM tcm, Reduce t) => Blocked t -> tcm (Blocked t)
+ Agda.TypeChecking.MetaVars: etaExpandBlocked :: Reduce t => Blocked t -> TCM (Blocked t)
- Agda.TypeChecking.MetaVars: etaExpandListeners :: MonadTCM tcm => MetaId -> tcm ()
+ Agda.TypeChecking.MetaVars: etaExpandListeners :: MetaId -> TCM ()
- Agda.TypeChecking.MetaVars: etaExpandMeta :: MonadTCM tcm => [MetaKind] -> MetaId -> tcm ()
+ Agda.TypeChecking.MetaVars: etaExpandMeta :: [MetaKind] -> MetaId -> TCM ()
- Agda.TypeChecking.MetaVars: etaExpandMetaSafe :: MonadTCM tcm => MetaId -> tcm ()
+ Agda.TypeChecking.MetaVars: etaExpandMetaSafe :: MetaId -> TCM ()
- Agda.TypeChecking.MetaVars: isBlockedTerm :: MonadTCM tcm => MetaId -> tcm Bool
+ Agda.TypeChecking.MetaVars: isBlockedTerm :: MetaId -> TCM Bool
- Agda.TypeChecking.MetaVars: isEtaExpandable :: MonadTCM tcm => MetaId -> tcm Bool
+ Agda.TypeChecking.MetaVars: isEtaExpandable :: MetaId -> TCM Bool
- Agda.TypeChecking.MetaVars: newArgsMeta :: MonadTCM tcm => Type -> tcm Args
+ Agda.TypeChecking.MetaVars: newArgsMeta :: Type -> TCM Args
- Agda.TypeChecking.MetaVars: newArgsMetaCtx :: MonadTCM tcm => Type -> Telescope -> Args -> tcm Args
+ Agda.TypeChecking.MetaVars: newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args
- Agda.TypeChecking.MetaVars: newQuestionMark :: MonadTCM tcm => Type -> tcm Term
+ Agda.TypeChecking.MetaVars: newQuestionMark :: Type -> TCM Term
- Agda.TypeChecking.MetaVars: newRecordMeta :: MonadTCM tcm => QName -> Args -> tcm Term
+ Agda.TypeChecking.MetaVars: newRecordMeta :: QName -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: newRecordMetaCtx :: MonadTCM tcm => QName -> Args -> Telescope -> Args -> tcm Term
+ Agda.TypeChecking.MetaVars: newRecordMetaCtx :: QName -> Args -> Telescope -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: newSortMeta :: MonadTCM tcm => tcm Sort
+ Agda.TypeChecking.MetaVars: newSortMeta :: TCM Sort
- Agda.TypeChecking.MetaVars: newSortMetaCtx :: MonadTCM tcm => Args -> tcm Sort
+ Agda.TypeChecking.MetaVars: newSortMetaCtx :: Args -> TCM Sort
- Agda.TypeChecking.MetaVars: newTelMeta :: MonadTCM tcm => Telescope -> tcm Args
+ Agda.TypeChecking.MetaVars: newTelMeta :: Telescope -> TCM Args
- Agda.TypeChecking.MetaVars: newTypeMeta :: MonadTCM tcm => Sort -> tcm Type
+ Agda.TypeChecking.MetaVars: newTypeMeta :: Sort -> TCM Type
- Agda.TypeChecking.MetaVars: newTypeMeta_ :: MonadTCM tcm => tcm Type
+ Agda.TypeChecking.MetaVars: newTypeMeta_ :: TCM Type
- Agda.TypeChecking.MetaVars: newValueMeta :: MonadTCM tcm => Type -> tcm Term
+ Agda.TypeChecking.MetaVars: newValueMeta :: Type -> TCM Term
- Agda.TypeChecking.MetaVars: newValueMeta' :: MonadTCM tcm => Type -> tcm Term
+ Agda.TypeChecking.MetaVars: newValueMeta' :: Type -> TCM Term
- Agda.TypeChecking.MetaVars: newValueMetaCtx :: MonadTCM tcm => Type -> Args -> tcm Term
+ Agda.TypeChecking.MetaVars: newValueMetaCtx :: Type -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: newValueMetaCtx' :: MonadTCM tcm => Type -> Args -> tcm Term
+ Agda.TypeChecking.MetaVars: newValueMetaCtx' :: Type -> Args -> TCM Term
- Agda.TypeChecking.MetaVars: postponeTypeCheckingProblem :: MonadTCM tcm => Expr -> Type -> TCM Bool -> tcm Term
+ Agda.TypeChecking.MetaVars: postponeTypeCheckingProblem :: Expr -> Type -> TCM Bool -> TCM Term
- Agda.TypeChecking.MetaVars: postponeTypeCheckingProblem_ :: MonadTCM tcm => Expr -> Type -> tcm Term
+ Agda.TypeChecking.MetaVars: postponeTypeCheckingProblem_ :: Expr -> Type -> TCM Term
- Agda.TypeChecking.MetaVars: type FVs = Set Nat
+ Agda.TypeChecking.MetaVars: type FVs = VarSet
- Agda.TypeChecking.MetaVars: unblockedTester :: MonadTCM tcm => Type -> tcm Bool
+ Agda.TypeChecking.MetaVars: unblockedTester :: Type -> TCM Bool
- Agda.TypeChecking.MetaVars: updateMeta :: (MonadTCM tcm, Data a, Occurs a, Abstract a) => MetaId -> a -> tcm ()
+ Agda.TypeChecking.MetaVars: updateMeta :: MetaId -> Term -> TCM ()
- Agda.TypeChecking.MetaVars.Occurs: killArgs :: [Bool] -> MetaId -> TCM Bool
+ Agda.TypeChecking.MetaVars.Occurs: killArgs :: [Bool] -> MetaId -> TCM PruneResult
- Agda.TypeChecking.MetaVars.Occurs: occurs :: Occurs t => OccursCtx -> MetaId -> [Nat] -> t -> TCM t
+ Agda.TypeChecking.MetaVars.Occurs: occurs :: Occurs t => UnfoldStrategy -> OccursCtx -> MetaId -> Vars -> t -> TCM t
- Agda.TypeChecking.MetaVars.Occurs: occursCheck :: MonadTCM tcm => MetaId -> [Nat] -> Term -> tcm Term
+ Agda.TypeChecking.MetaVars.Occurs: occursCheck :: MetaId -> Vars -> Term -> TCM Term
- Agda.TypeChecking.Monad.Base: Axiom :: Maybe HaskellRepresentation -> Maybe EpicCode -> Defn
+ Agda.TypeChecking.Monad.Base: Axiom :: Defn
- Agda.TypeChecking.Monad.Base: CheckArguments :: Range -> [NamedArg Expr] -> Type -> Type -> (Maybe (Args, Type, Constraints)) -> Call
+ Agda.TypeChecking.Monad.Base: CheckArguments :: Range -> [NamedArg Expr] -> Type -> Type -> (Maybe (Args, Type)) -> Call
- Agda.TypeChecking.Monad.Base: CheckSectionApplication :: Range -> ModuleName -> Telescope -> ModuleName -> [NamedArg Expr] -> (Maybe ()) -> Call
+ Agda.TypeChecking.Monad.Base: CheckSectionApplication :: Range -> ModuleName -> ModuleApplication -> (Maybe ()) -> Call
- Agda.TypeChecking.Monad.Base: Constructor :: Nat -> QName -> QName -> Maybe (HaskellType, HaskellCode) -> IsAbstract -> Induction -> Defn
+ Agda.TypeChecking.Monad.Base: Constructor :: Nat -> QName -> QName -> IsAbstract -> Induction -> Defn
- Agda.TypeChecking.Monad.Base: CoverageCantSplitOn :: QName -> TypeError
+ Agda.TypeChecking.Monad.Base: CoverageCantSplitOn :: QName -> Telescope -> Args -> Args -> TypeError
- Agda.TypeChecking.Monad.Base: Datatype :: Nat -> Nat -> Induction -> (Maybe Clause) -> [QName] -> Sort -> [Polarity] -> [Occurrence] -> Maybe HaskellType -> IsAbstract -> Defn
+ Agda.TypeChecking.Monad.Base: Datatype :: Nat -> Nat -> Induction -> (Maybe Clause) -> [QName] -> Sort -> [Polarity] -> [Occurrence] -> IsAbstract -> Defn
- Agda.TypeChecking.Monad.Base: Defn :: Relevance -> QName -> Type -> [Open DisplayForm] -> MutualId -> Defn -> Definition
+ Agda.TypeChecking.Monad.Base: Defn :: Relevance -> QName -> Type -> [Open DisplayForm] -> MutualId -> CompiledRepresentation -> Defn -> Definition
- Agda.TypeChecking.Monad.Base: Fresh :: MetaId -> InteractionId -> MutualId -> NameId -> CtxId -> Integer -> FreshThings
+ Agda.TypeChecking.Monad.Base: Fresh :: MetaId -> InteractionId -> MutualId -> NameId -> CtxId -> ProblemId -> Integer -> FreshThings
- Agda.TypeChecking.Monad.Base: Function :: [Clauses] -> CompiledClauses -> FunctionInverse -> [Polarity] -> [Occurrence] -> IsAbstract -> Delayed -> Maybe Int -> Defn
+ Agda.TypeChecking.Monad.Base: Function :: [Clause] -> CompiledClauses -> FunctionInverse -> [Polarity] -> [Occurrence] -> IsAbstract -> Delayed -> Maybe (QName, Int) -> Bool -> Defn
- Agda.TypeChecking.Monad.Base: Guarded :: Constraint -> Constraints -> Constraint
+ Agda.TypeChecking.Monad.Base: Guarded :: Constraint -> ProblemId -> Constraint
- Agda.TypeChecking.Monad.Base: IsSort :: a -> Judgement t a
+ Agda.TypeChecking.Monad.Base: IsSort :: a -> t -> Judgement t a
- Agda.TypeChecking.Monad.Base: LevelCmp :: Comparison -> Term -> Term -> Constraint
+ Agda.TypeChecking.Monad.Base: LevelCmp :: Comparison -> Level -> Level -> Constraint
- Agda.TypeChecking.Monad.Base: MetaVar :: MetaInfo -> MetaPriority -> Permutation -> Judgement Type MetaId -> MetaInstantiation -> Set MetaId -> MetaVariable
+ Agda.TypeChecking.Monad.Base: MetaVar :: MetaInfo -> MetaPriority -> Permutation -> Judgement Type MetaId -> MetaInstantiation -> Set Listener -> Frozen -> MetaVariable
- Agda.TypeChecking.Monad.Base: PrimFun :: QName -> Arity -> (forall tcm. MonadTCM tcm => [Arg Term] -> tcm (Reduced MaybeReducedArgs Term)) -> PrimFun
+ Agda.TypeChecking.Monad.Base: PrimFun :: QName -> Arity -> ([Arg Term] -> TCM (Reduced MaybeReducedArgs Term)) -> PrimFun
- Agda.TypeChecking.Monad.Base: Primitive :: IsAbstract -> String -> Maybe [Clauses] -> Maybe CompiledClauses -> Defn
+ Agda.TypeChecking.Monad.Base: Primitive :: IsAbstract -> String -> Maybe [Clause] -> Maybe CompiledClauses -> Defn
- Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> AbstractMode -> Bool -> Bool -> Bool -> Bool -> Bool -> Range -> Maybe (Closure Call) -> TCEnv
+ Agda.TypeChecking.Monad.Base: TCEnv :: Context -> LetBindings -> ModuleName -> [(ModuleName, Nat)] -> [TopLevelModuleName] -> Maybe MutualId -> Bool -> [ProblemId] -> AbstractMode -> Bool -> Relevance -> Bool -> Bool -> Bool -> Range -> Maybe (Closure Call) -> TCEnv
- Agda.TypeChecking.Monad.Base: TCM :: (TCState -> TCEnv -> m (a, TCState)) -> TCMT m a
+ Agda.TypeChecking.Monad.Base: TCM :: (IORef TCState -> TCEnv -> m a) -> TCMT m a
- Agda.TypeChecking.Monad.Base: TCSt :: FreshThings -> MetaStore -> InteractionPoints -> Constraints -> Signature -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> DecodedModules -> Maybe ModuleName -> ScopeInfo -> CommandLineOptions -> PragmaOptions -> Statistics -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> BuiltinThings PrimFun -> Set String -> TCState
+ Agda.TypeChecking.Monad.Base: TCSt :: FreshThings -> MetaStore -> InteractionPoints -> Constraints -> Constraints -> Signature -> Signature -> Set ModuleName -> ModuleToSource -> VisitedModules -> Maybe ModuleName -> ScopeInfo -> PragmaOptions -> Statistics -> Map QName (Int, Int) -> Map MutualId (Set QName) -> BuiltinThings PrimFun -> BuiltinThings PrimFun -> Set String -> PersistentTCState -> TCState
- Agda.TypeChecking.Monad.Base: TelCmp :: Comparison -> Telescope -> Telescope -> Constraint
+ Agda.TypeChecking.Monad.Base: TelCmp :: Type -> Type -> Comparison -> Telescope -> Telescope -> Constraint
- Agda.TypeChecking.Monad.Base: TerminationCheckFailed :: [([QName], [Range])] -> TypeError
+ Agda.TypeChecking.Monad.Base: TerminationCheckFailed :: [TerminationError] -> TypeError
- Agda.TypeChecking.Monad.Base: buildClosure :: MonadTCM tcm => a -> tcm (Closure a)
+ Agda.TypeChecking.Monad.Base: buildClosure :: a -> TCM (Closure a)
- Agda.TypeChecking.Monad.Base: defClauses :: Definition -> [Clauses]
+ Agda.TypeChecking.Monad.Base: defClauses :: Definition -> [Clause]
- Agda.TypeChecking.Monad.Base: funClauses :: Defn -> [Clauses]
+ Agda.TypeChecking.Monad.Base: funClauses :: Defn -> [Clause]
- Agda.TypeChecking.Monad.Base: funProjection :: Defn -> Maybe Int
+ Agda.TypeChecking.Monad.Base: funProjection :: Defn -> Maybe (QName, Int)
- Agda.TypeChecking.Monad.Base: mvListeners :: MetaVariable -> Set MetaId
+ Agda.TypeChecking.Monad.Base: mvListeners :: MetaVariable -> Set Listener
- Agda.TypeChecking.Monad.Base: patternViolation :: MonadTCM tcm => tcm a
+ Agda.TypeChecking.Monad.Base: patternViolation :: TCM a
- Agda.TypeChecking.Monad.Base: primClauses :: Defn -> Maybe [Clauses]
+ Agda.TypeChecking.Monad.Base: primClauses :: Defn -> Maybe [Clause]
- Agda.TypeChecking.Monad.Base: primFunImplementation :: PrimFun -> forall tcm. MonadTCM tcm => [Arg Term] -> tcm (Reduced MaybeReducedArgs Term)
+ Agda.TypeChecking.Monad.Base: primFunImplementation :: PrimFun -> [Arg Term] -> TCM (Reduced MaybeReducedArgs Term)
- Agda.TypeChecking.Monad.Base: pureTCM :: Monad m => (TCState -> TCEnv -> a) -> TCMT m a
+ Agda.TypeChecking.Monad.Base: pureTCM :: MonadIO m => (TCState -> TCEnv -> a) -> TCMT m a
- Agda.TypeChecking.Monad.Base: reduced :: Blocked a -> MaybeReduced a
+ Agda.TypeChecking.Monad.Base: reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term)
- Agda.TypeChecking.Monad.Base: runTCM' :: Monad m => TCMT m a -> m a
+ Agda.TypeChecking.Monad.Base: runTCM' :: MonadIO m => TCMT m a -> m a
- Agda.TypeChecking.Monad.Base: stDecodedModules :: TCState -> DecodedModules
+ Agda.TypeChecking.Monad.Base: stDecodedModules :: PersistentTCState -> DecodedModules
- Agda.TypeChecking.Monad.Base: stPersistentOptions :: TCState -> CommandLineOptions
+ Agda.TypeChecking.Monad.Base: stPersistentOptions :: PersistentTCState -> CommandLineOptions
- Agda.TypeChecking.Monad.Base: type Constraints = [ConstraintClosure]
+ Agda.TypeChecking.Monad.Base: type Constraints = [ProblemConstraint]
- Agda.TypeChecking.Monad.Base: type Statistics = Map String Int
+ Agda.TypeChecking.Monad.Base: type Statistics = Map String Integer
- Agda.TypeChecking.Monad.Base: unTCM :: TCMT m a -> TCState -> TCEnv -> m (a, TCState)
+ Agda.TypeChecking.Monad.Base: unTCM :: TCMT m a -> IORef TCState -> TCEnv -> m a
- Agda.TypeChecking.Monad.Builtin: bindBuiltinName :: MonadTCM tcm => String -> Term -> tcm ()
+ Agda.TypeChecking.Monad.Builtin: bindBuiltinName :: String -> Term -> TCM ()
- Agda.TypeChecking.Monad.Builtin: bindPrimitive :: MonadTCM tcm => String -> PrimFun -> tcm ()
+ Agda.TypeChecking.Monad.Builtin: bindPrimitive :: String -> PrimFun -> TCM ()
- Agda.TypeChecking.Monad.Builtin: getBuiltin :: MonadTCM tcm => String -> tcm Term
+ Agda.TypeChecking.Monad.Builtin: getBuiltin :: String -> TCM Term
- Agda.TypeChecking.Monad.Builtin: getBuiltin' :: MonadTCM tcm => String -> tcm (Maybe Term)
+ Agda.TypeChecking.Monad.Builtin: getBuiltin' :: String -> TCM (Maybe Term)
- Agda.TypeChecking.Monad.Builtin: getPrimitive :: MonadTCM tcm => String -> tcm PrimFun
+ Agda.TypeChecking.Monad.Builtin: getPrimitive :: String -> TCM PrimFun
- Agda.TypeChecking.Monad.Builtin: setBuiltinThings :: MonadTCM tcm => BuiltinThings PrimFun -> tcm ()
+ Agda.TypeChecking.Monad.Builtin: setBuiltinThings :: BuiltinThings PrimFun -> TCM ()
- Agda.TypeChecking.Monad.Closure: enterClosure :: MonadTCM tcm => Closure a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Closure: enterClosure :: Closure a -> (a -> TCM b) -> TCM b
- Agda.TypeChecking.Monad.Constraints: buildConstraint :: MonadTCM tcm => Constraint -> tcm Constraints
+ Agda.TypeChecking.Monad.Constraints: buildConstraint :: Constraint -> TCM ProblemConstraint
- Agda.TypeChecking.Monad.Constraints: withConstraint :: MonadTCM tcm => (Constraint -> tcm a) -> ConstraintClosure -> tcm a
+ Agda.TypeChecking.Monad.Constraints: withConstraint :: (Constraint -> TCM a) -> ProblemConstraint -> TCM a
- Agda.TypeChecking.Monad.Context: underAbstraction :: MonadTCM tcm => Arg Type -> Abs a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Context: underAbstraction :: (Raise a, MonadTCM tcm) => Arg Type -> Abs a -> (a -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Context: underAbstraction_ :: MonadTCM tcm => Abs a -> (a -> tcm b) -> tcm b
+ Agda.TypeChecking.Monad.Context: underAbstraction_ :: (Raise a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b
- Agda.TypeChecking.Monad.Env: currentModule :: MonadTCM tcm => tcm ModuleName
+ Agda.TypeChecking.Monad.Env: currentModule :: TCM ModuleName
- Agda.TypeChecking.Monad.Env: getAnonymousVariables :: MonadTCM tcm => ModuleName -> tcm Nat
+ Agda.TypeChecking.Monad.Env: getAnonymousVariables :: ModuleName -> TCM Nat
- Agda.TypeChecking.Monad.Env: getEnv :: MonadTCM tcm => tcm TCEnv
+ Agda.TypeChecking.Monad.Env: getEnv :: TCM TCEnv
- Agda.TypeChecking.Monad.Env: withAnonymousModule :: MonadTCM tcm => ModuleName -> Nat -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Env: withAnonymousModule :: ModuleName -> Nat -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Env: withCurrentModule :: MonadTCM tcm => ModuleName -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Env: withCurrentModule :: ModuleName -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Env: withEnv :: MonadTCM tcm => TCEnv -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Env: withEnv :: TCEnv -> TCM a -> TCM a
- Agda.TypeChecking.Monad.MetaVars: addInteractionPoint :: MonadTCM tcm => InteractionId -> MetaId -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: addInteractionPoint :: InteractionId -> MetaId -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: clearMetaListeners :: MonadTCM tcm => MetaId -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: clearMetaListeners :: MetaId -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: createMetaInfo :: MonadTCM tcm => tcm MetaInfo
+ Agda.TypeChecking.Monad.MetaVars: createMetaInfo :: TCM MetaInfo
- Agda.TypeChecking.Monad.MetaVars: getInstantiatedMetas :: MonadTCM tcm => tcm [MetaId]
+ Agda.TypeChecking.Monad.MetaVars: getInstantiatedMetas :: TCM [MetaId]
- Agda.TypeChecking.Monad.MetaVars: getInteractionMetas :: MonadTCM tcm => tcm [MetaId]
+ Agda.TypeChecking.Monad.MetaVars: getInteractionMetas :: TCM [MetaId]
- Agda.TypeChecking.Monad.MetaVars: getInteractionPoints :: MonadTCM tcm => tcm [InteractionId]
+ Agda.TypeChecking.Monad.MetaVars: getInteractionPoints :: TCM [InteractionId]
- Agda.TypeChecking.Monad.MetaVars: getInteractionRange :: MonadTCM tcm => InteractionId -> tcm Range
+ Agda.TypeChecking.Monad.MetaVars: getInteractionRange :: InteractionId -> TCM Range
- Agda.TypeChecking.Monad.MetaVars: getInteractionScope :: MonadTCM tcm => InteractionId -> tcm ScopeInfo
+ Agda.TypeChecking.Monad.MetaVars: getInteractionScope :: InteractionId -> TCM ScopeInfo
- Agda.TypeChecking.Monad.MetaVars: getMetaListeners :: MonadTCM tcm => MetaId -> tcm [MetaId]
+ Agda.TypeChecking.Monad.MetaVars: getMetaListeners :: MetaId -> TCM [Listener]
- Agda.TypeChecking.Monad.MetaVars: getMetaPriority :: MonadTCM tcm => MetaId -> tcm MetaPriority
+ Agda.TypeChecking.Monad.MetaVars: getMetaPriority :: MetaId -> TCM MetaPriority
- Agda.TypeChecking.Monad.MetaVars: getMetaRange :: MonadTCM tcm => MetaId -> tcm Range
+ Agda.TypeChecking.Monad.MetaVars: getMetaRange :: MetaId -> TCM Range
- Agda.TypeChecking.Monad.MetaVars: getMetaStore :: MonadTCM tcm => tcm MetaStore
+ Agda.TypeChecking.Monad.MetaVars: getMetaStore :: TCM MetaStore
- Agda.TypeChecking.Monad.MetaVars: getOpenMetas :: MonadTCM tcm => tcm [MetaId]
+ Agda.TypeChecking.Monad.MetaVars: getOpenMetas :: TCM [MetaId]
- Agda.TypeChecking.Monad.MetaVars: isInstantiatedMeta :: MonadTCM tcm => MetaId -> tcm Bool
+ Agda.TypeChecking.Monad.MetaVars: isInstantiatedMeta :: MetaId -> TCM Bool
- Agda.TypeChecking.Monad.MetaVars: isInteractionMeta :: MonadTCM tcm => MetaId -> tcm Bool
+ Agda.TypeChecking.Monad.MetaVars: isInteractionMeta :: MetaId -> TCM Bool
- Agda.TypeChecking.Monad.MetaVars: isSortMeta :: MonadTCM tcm => MetaId -> tcm Bool
+ Agda.TypeChecking.Monad.MetaVars: isSortMeta :: MetaId -> TCM Bool
- Agda.TypeChecking.Monad.MetaVars: judgementInteractionId :: MonadTCM tcm => InteractionId -> tcm (Judgement Type MetaId)
+ Agda.TypeChecking.Monad.MetaVars: judgementInteractionId :: InteractionId -> TCM (Judgement Type MetaId)
- Agda.TypeChecking.Monad.MetaVars: listenToMeta :: MonadTCM tcm => MetaId -> MetaId -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: listenToMeta :: Listener -> MetaId -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: lookupInteractionId :: MonadTCM tcm => InteractionId -> tcm MetaId
+ Agda.TypeChecking.Monad.MetaVars: lookupInteractionId :: InteractionId -> TCM MetaId
- Agda.TypeChecking.Monad.MetaVars: lookupMeta :: MonadTCM tcm => MetaId -> tcm MetaVariable
+ Agda.TypeChecking.Monad.MetaVars: lookupMeta :: MetaId -> TCM MetaVariable
- Agda.TypeChecking.Monad.MetaVars: newMeta :: MonadTCM tcm => MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId
+ Agda.TypeChecking.Monad.MetaVars: newMeta :: MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> TCM MetaId
- Agda.TypeChecking.Monad.MetaVars: newMeta' :: MonadTCM tcm => MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId
+ Agda.TypeChecking.Monad.MetaVars: newMeta' :: MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> TCM MetaId
- Agda.TypeChecking.Monad.MetaVars: removeInteractionPoint :: MonadTCM tcm => InteractionId -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: removeInteractionPoint :: InteractionId -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: unlistenToMeta :: MonadTCM tcm => MetaId -> MetaId -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: unlistenToMeta :: Listener -> MetaId -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: updateMetaVar :: MonadTCM tcm => MetaId -> (MetaVariable -> MetaVariable) -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: updateMetaVar :: MetaId -> (MetaVariable -> MetaVariable) -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: updateMetaVarRange :: MonadTCM tcm => MetaId -> Range -> tcm ()
+ Agda.TypeChecking.Monad.MetaVars: updateMetaVarRange :: MetaId -> Range -> TCM ()
- Agda.TypeChecking.Monad.MetaVars: withMetaInfo :: MonadTCM tcm => MetaInfo -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.MetaVars: withMetaInfo :: MetaInfo -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Mutual: currentMutualBlock :: MonadTCM tcm => tcm MutualId
+ Agda.TypeChecking.Monad.Mutual: currentMutualBlock :: TCM MutualId
- Agda.TypeChecking.Monad.Mutual: findMutualBlock :: MonadTCM tcm => QName -> tcm (Set QName)
+ Agda.TypeChecking.Monad.Mutual: findMutualBlock :: QName -> TCM (Set QName)
- Agda.TypeChecking.Monad.Mutual: getMutualBlocks :: MonadTCM tcm => tcm [Set QName]
+ Agda.TypeChecking.Monad.Mutual: getMutualBlocks :: TCM [Set QName]
- Agda.TypeChecking.Monad.Mutual: inMutualBlock :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Mutual: inMutualBlock :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Mutual: lookupMutualBlock :: MonadTCM tcm => MutualId -> tcm (Set QName)
+ Agda.TypeChecking.Monad.Mutual: lookupMutualBlock :: MutualId -> TCM (Set QName)
- Agda.TypeChecking.Monad.Mutual: noMutualBlock :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Mutual: noMutualBlock :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Mutual: setMutualBlock :: MonadTCM tcm => MutualId -> QName -> tcm ()
+ Agda.TypeChecking.Monad.Mutual: setMutualBlock :: MutualId -> QName -> TCM ()
- Agda.TypeChecking.Monad.Open: getOpen :: (MonadTCM tcm, Raise a) => Open a -> tcm a
+ Agda.TypeChecking.Monad.Open: getOpen :: Raise a => Open a -> TCM a
- Agda.TypeChecking.Monad.Open: makeOpen :: MonadTCM tcm => a -> tcm (Open a)
+ Agda.TypeChecking.Monad.Open: makeOpen :: a -> TCM (Open a)
- Agda.TypeChecking.Monad.Open: tryOpen :: (MonadTCM tcm, Raise a) => Open a -> tcm (Maybe a)
+ Agda.TypeChecking.Monad.Open: tryOpen :: Raise a => Open a -> TCM (Maybe a)
- Agda.TypeChecking.Monad.Options: commandLineOptions :: MonadTCM tcm => tcm CommandLineOptions
+ Agda.TypeChecking.Monad.Options: commandLineOptions :: TCM CommandLineOptions
- Agda.TypeChecking.Monad.Options: disableDisplayForms :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: disableDisplayForms :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: displayFormsEnabled :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: displayFormsEnabled :: TCM Bool
- Agda.TypeChecking.Monad.Options: dontEtaContractImplicit :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: dontEtaContractImplicit :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: dontReifyInteractionPoints :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: dontReifyInteractionPoints :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: enableDisplayForms :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: enableDisplayForms :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]
+ Agda.TypeChecking.Monad.Options: getIncludeDirs :: TCM [AbsolutePath]
- Agda.TypeChecking.Monad.Options: getInputFile :: MonadTCM tcm => tcm AbsolutePath
+ Agda.TypeChecking.Monad.Options: getInputFile :: TCM AbsolutePath
- Agda.TypeChecking.Monad.Options: getVerbosity :: MonadTCM tcm => tcm (Trie String Int)
+ Agda.TypeChecking.Monad.Options: getVerbosity :: TCM (Trie String Int)
- Agda.TypeChecking.Monad.Options: hasInputFile :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: hasInputFile :: TCM Bool
- Agda.TypeChecking.Monad.Options: hasUniversePolymorphism :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: hasUniversePolymorphism :: TCM Bool
- Agda.TypeChecking.Monad.Options: hasVerbosity :: MonadTCM tcm => VerboseKey -> Int -> tcm Bool
+ Agda.TypeChecking.Monad.Options: hasVerbosity :: VerboseKey -> Int -> TCM Bool
- Agda.TypeChecking.Monad.Options: ignoreInterfaces :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: ignoreInterfaces :: TCM Bool
- Agda.TypeChecking.Monad.Options: positivityCheckEnabled :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: positivityCheckEnabled :: TCM Bool
- Agda.TypeChecking.Monad.Options: pragmaOptions :: MonadTCM tcm => tcm PragmaOptions
+ Agda.TypeChecking.Monad.Options: pragmaOptions :: TCM PragmaOptions
- Agda.TypeChecking.Monad.Options: proofIrrelevance :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: proofIrrelevance :: TCM Bool
- Agda.TypeChecking.Monad.Options: reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
+ Agda.TypeChecking.Monad.Options: reportS :: VerboseKey -> Int -> String -> TCM ()
- Agda.TypeChecking.Monad.Options: reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> tcm Doc -> tcm ()
+ Agda.TypeChecking.Monad.Options: reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM ()
- Agda.TypeChecking.Monad.Options: reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()
+ Agda.TypeChecking.Monad.Options: reportSLn :: VerboseKey -> Int -> String -> TCM ()
- Agda.TypeChecking.Monad.Options: setCommandLineOptions :: MonadTCM tcm => CommandLineOptions -> tcm ()
+ Agda.TypeChecking.Monad.Options: setCommandLineOptions :: CommandLineOptions -> TCM ()
- Agda.TypeChecking.Monad.Options: setIncludeDirs :: MonadTCM tcm => [FilePath] -> RelativeTo -> tcm ()
+ Agda.TypeChecking.Monad.Options: setIncludeDirs :: [FilePath] -> RelativeTo -> TCM ()
- Agda.TypeChecking.Monad.Options: setInputFile :: MonadTCM tcm => FilePath -> tcm ()
+ Agda.TypeChecking.Monad.Options: setInputFile :: FilePath -> TCM ()
- Agda.TypeChecking.Monad.Options: setOptionsFromPragma :: MonadTCM tcm => OptionsPragma -> tcm ()
+ Agda.TypeChecking.Monad.Options: setOptionsFromPragma :: OptionsPragma -> TCM ()
- Agda.TypeChecking.Monad.Options: setPragmaOptions :: MonadTCM tcm => PragmaOptions -> tcm ()
+ Agda.TypeChecking.Monad.Options: setPragmaOptions :: PragmaOptions -> TCM ()
- Agda.TypeChecking.Monad.Options: setShowImplicitArguments :: MonadTCM tcm => Bool -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: setShowImplicitArguments :: Bool -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: shouldEtaContractImplicit :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: shouldEtaContractImplicit :: TCM Bool
- Agda.TypeChecking.Monad.Options: shouldReifyInteractionPoints :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: shouldReifyInteractionPoints :: TCM Bool
- Agda.TypeChecking.Monad.Options: showImplicitArguments :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: showImplicitArguments :: TCM Bool
- Agda.TypeChecking.Monad.Options: typeInType :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.Monad.Options: typeInType :: TCM Bool
- Agda.TypeChecking.Monad.Options: verboseBracket :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Options: verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Options: verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()
+ Agda.TypeChecking.Monad.Options: verboseS :: VerboseKey -> Int -> TCM () -> TCM ()
- Agda.TypeChecking.Monad.Signature: addConstant :: MonadTCM tcm => QName -> Definition -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addConstant :: QName -> Definition -> TCM ()
- Agda.TypeChecking.Monad.Signature: addDisplayForm :: MonadTCM tcm => QName -> DisplayForm -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addDisplayForm :: QName -> DisplayForm -> TCM ()
- Agda.TypeChecking.Monad.Signature: addEpicCode :: MonadTCM tcm => QName -> EpicCode -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addEpicCode :: QName -> EpicCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: addHaskellCode :: MonadTCM tcm => QName -> HaskellType -> HaskellCode -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM ()
- Agda.TypeChecking.Monad.Signature: addHaskellType :: MonadTCM tcm => QName -> HaskellType -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addHaskellType :: QName -> HaskellType -> TCM ()
- Agda.TypeChecking.Monad.Signature: addSection :: MonadTCM tcm => ModuleName -> Nat -> tcm ()
+ Agda.TypeChecking.Monad.Signature: addSection :: ModuleName -> Nat -> TCM ()
- Agda.TypeChecking.Monad.Signature: applySection :: MonadTCM tcm => ModuleName -> Telescope -> ModuleName -> Args -> Map QName QName -> Map ModuleName ModuleName -> tcm ()
+ Agda.TypeChecking.Monad.Signature: applySection :: ModuleName -> Telescope -> ModuleName -> Args -> Map QName QName -> Map ModuleName ModuleName -> TCM ()
- Agda.TypeChecking.Monad.Signature: canonicalName :: MonadTCM tcm => QName -> tcm QName
+ Agda.TypeChecking.Monad.Signature: canonicalName :: QName -> TCM QName
- Agda.TypeChecking.Monad.Signature: freeVarsToApply :: MonadTCM tcm => QName -> tcm Args
+ Agda.TypeChecking.Monad.Signature: freeVarsToApply :: QName -> TCM Args
- Agda.TypeChecking.Monad.Signature: getArgOccurrence :: MonadTCM tcm => QName -> Nat -> tcm Occurrence
+ Agda.TypeChecking.Monad.Signature: getArgOccurrence :: QName -> Nat -> TCM Occurrence
- Agda.TypeChecking.Monad.Signature: getDefFreeVars :: MonadTCM tcm => QName -> tcm Nat
+ Agda.TypeChecking.Monad.Signature: getDefFreeVars :: QName -> TCM Nat
- Agda.TypeChecking.Monad.Signature: getImportedSignature :: MonadTCM tcm => tcm Signature
+ Agda.TypeChecking.Monad.Signature: getImportedSignature :: TCM Signature
- Agda.TypeChecking.Monad.Signature: getModuleFreeVars :: MonadTCM tcm => ModuleName -> tcm Nat
+ Agda.TypeChecking.Monad.Signature: getModuleFreeVars :: ModuleName -> TCM Nat
- Agda.TypeChecking.Monad.Signature: getPolarity :: MonadTCM tcm => QName -> tcm [Polarity]
+ Agda.TypeChecking.Monad.Signature: getPolarity :: QName -> TCM [Polarity]
- Agda.TypeChecking.Monad.Signature: getPolarity' :: MonadTCM tcm => Comparison -> QName -> tcm [Polarity]
+ Agda.TypeChecking.Monad.Signature: getPolarity' :: Comparison -> QName -> TCM [Polarity]
- Agda.TypeChecking.Monad.Signature: getSecFreeVars :: MonadTCM tcm => ModuleName -> tcm Nat
+ Agda.TypeChecking.Monad.Signature: getSecFreeVars :: ModuleName -> TCM Nat
- Agda.TypeChecking.Monad.Signature: getSignature :: MonadTCM tcm => tcm Signature
+ Agda.TypeChecking.Monad.Signature: getSignature :: TCM Signature
- Agda.TypeChecking.Monad.Signature: ignoreAbstractMode :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Signature: ignoreAbstractMode :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Signature: inAbstractMode :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Signature: inAbstractMode :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Signature: inConcreteMode :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.Signature: inConcreteMode :: TCM a -> TCM a
- Agda.TypeChecking.Monad.Signature: instantiateDef :: MonadTCM tcm => Definition -> tcm Definition
+ Agda.TypeChecking.Monad.Signature: instantiateDef :: Definition -> TCM Definition
- Agda.TypeChecking.Monad.Signature: isProjection :: MonadTCM tcm => QName -> tcm (Maybe Int)
+ Agda.TypeChecking.Monad.Signature: isProjection :: QName -> TCM (Maybe (QName, Int))
- Agda.TypeChecking.Monad.Signature: lookupSection :: MonadTCM tcm => ModuleName -> tcm Telescope
+ Agda.TypeChecking.Monad.Signature: lookupSection :: ModuleName -> TCM Telescope
- Agda.TypeChecking.Monad.Signature: modifyImportedSignature :: MonadTCM tcm => (Signature -> Signature) -> tcm ()
+ Agda.TypeChecking.Monad.Signature: modifyImportedSignature :: (Signature -> Signature) -> TCM ()
- Agda.TypeChecking.Monad.Signature: modifySignature :: MonadTCM tcm => (Signature -> Signature) -> tcm ()
+ Agda.TypeChecking.Monad.Signature: modifySignature :: (Signature -> Signature) -> TCM ()
- Agda.TypeChecking.Monad.Signature: relOfConst :: MonadTCM tcm => QName -> tcm Relevance
+ Agda.TypeChecking.Monad.Signature: relOfConst :: QName -> TCM Relevance
- Agda.TypeChecking.Monad.Signature: setArgOccurrences :: MonadTCM tcm => QName -> [Occurrence] -> tcm ()
+ Agda.TypeChecking.Monad.Signature: setArgOccurrences :: QName -> [Occurrence] -> TCM ()
- Agda.TypeChecking.Monad.Signature: setImportedSignature :: MonadTCM tcm => Signature -> tcm ()
+ Agda.TypeChecking.Monad.Signature: setImportedSignature :: Signature -> TCM ()
- Agda.TypeChecking.Monad.Signature: setPolarity :: MonadTCM tcm => QName -> [Polarity] -> tcm ()
+ Agda.TypeChecking.Monad.Signature: setPolarity :: QName -> [Polarity] -> TCM ()
- Agda.TypeChecking.Monad.Signature: setSignature :: MonadTCM tcm => Signature -> tcm ()
+ Agda.TypeChecking.Monad.Signature: setSignature :: Signature -> TCM ()
- Agda.TypeChecking.Monad.Signature: sortOfConst :: MonadTCM tcm => QName -> tcm Sort
+ Agda.TypeChecking.Monad.Signature: sortOfConst :: QName -> TCM Sort
- Agda.TypeChecking.Monad.Signature: treatAbstractly :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Monad.Signature: treatAbstractly :: QName -> TCM Bool
- Agda.TypeChecking.Monad.Signature: typeOfConst :: MonadTCM tcm => QName -> tcm Type
+ Agda.TypeChecking.Monad.Signature: typeOfConst :: QName -> TCM Type
- Agda.TypeChecking.Monad.Signature: whatInduction :: MonadTCM tcm => QName -> tcm Induction
+ Agda.TypeChecking.Monad.Signature: whatInduction :: QName -> TCM Induction
- Agda.TypeChecking.Monad.Signature: withSignature :: MonadTCM tcm => Signature -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Signature: withSignature :: Signature -> TCM a -> TCM a
- Agda.TypeChecking.Monad.SizedTypes: isSizeType :: MonadTCM tcm => Type -> tcm Bool
+ Agda.TypeChecking.Monad.SizedTypes: isSizeType :: Type -> TCM Bool
- Agda.TypeChecking.Monad.SizedTypes: sizeSuc :: MonadTCM tcm => tcm (Maybe QName)
+ Agda.TypeChecking.Monad.SizedTypes: sizeSuc :: TCM (Maybe QName)
- Agda.TypeChecking.Monad.SizedTypes: sizeType :: MonadTCM tcm => tcm Type
+ Agda.TypeChecking.Monad.SizedTypes: sizeType :: TCM Type
- Agda.TypeChecking.Monad.SizedTypes: sizeView :: MonadTCM tcm => Term -> tcm SizeView
+ Agda.TypeChecking.Monad.SizedTypes: sizeView :: Term -> TCM SizeView
- Agda.TypeChecking.Monad.SizedTypes: unSizeView :: MonadTCM tcm => SizeView -> tcm Term
+ Agda.TypeChecking.Monad.SizedTypes: unSizeView :: SizeView -> TCM Term
- Agda.TypeChecking.Monad.State: addHaskellImport :: MonadTCM tcm => String -> tcm ()
+ Agda.TypeChecking.Monad.State: addHaskellImport :: String -> TCM ()
- Agda.TypeChecking.Monad.State: getHaskellImports :: MonadTCM tcm => tcm (Set String)
+ Agda.TypeChecking.Monad.State: getHaskellImports :: TCM (Set String)
- Agda.TypeChecking.Monad.State: getScope :: MonadTCM tcm => tcm ScopeInfo
+ Agda.TypeChecking.Monad.State: getScope :: TCM ScopeInfo
- Agda.TypeChecking.Monad.State: localScope :: MonadTCM tcm => tcm a -> tcm a
+ Agda.TypeChecking.Monad.State: localScope :: TCM a -> TCM a
- Agda.TypeChecking.Monad.State: modifyScope :: MonadTCM tcm => (ScopeInfo -> ScopeInfo) -> tcm ()
+ Agda.TypeChecking.Monad.State: modifyScope :: (ScopeInfo -> ScopeInfo) -> TCM ()
- Agda.TypeChecking.Monad.State: resetState :: MonadTCM tcm => tcm ()
+ Agda.TypeChecking.Monad.State: resetState :: TCM ()
- Agda.TypeChecking.Monad.State: setScope :: MonadTCM tcm => ScopeInfo -> tcm ()
+ Agda.TypeChecking.Monad.State: setScope :: ScopeInfo -> TCM ()
- Agda.TypeChecking.Monad.State: setTopLevelModule :: MonadTCM tcm => QName -> tcm ()
+ Agda.TypeChecking.Monad.State: setTopLevelModule :: QName -> TCM ()
- Agda.TypeChecking.Monad.State: withScope :: MonadTCM tcm => ScopeInfo -> tcm a -> tcm (a, ScopeInfo)
+ Agda.TypeChecking.Monad.State: withScope :: ScopeInfo -> TCM a -> TCM (a, ScopeInfo)
- Agda.TypeChecking.Monad.State: withScope_ :: MonadTCM tcm => ScopeInfo -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.State: withScope_ :: ScopeInfo -> TCM a -> TCM a
- Agda.TypeChecking.Monad.State: withTopLevelModule :: MonadTCM tcm => QName -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.State: withTopLevelModule :: QName -> TCM a -> TCM a
- Agda.TypeChecking.Monad.Trace: getCurrentRange :: MonadTCM tcm => tcm Range
+ Agda.TypeChecking.Monad.Trace: getCurrentRange :: TCM Range
- Agda.TypeChecking.Monad.Trace: setCurrentRange :: MonadTCM tcm => Range -> tcm a -> tcm a
+ Agda.TypeChecking.Monad.Trace: setCurrentRange :: Range -> TCM a -> TCM a
- Agda.TypeChecking.Patterns.Match: matchPattern :: MonadTCM tcm => Arg Pattern -> Arg Term -> tcm (Match, Arg Term)
+ Agda.TypeChecking.Patterns.Match: matchPattern :: Arg Pattern -> Arg Term -> TCM (Match, Arg Term)
- Agda.TypeChecking.Patterns.Match: matchPatterns :: MonadTCM tcm => [Arg Pattern] -> [Arg Term] -> tcm (Match, [Arg Term])
+ Agda.TypeChecking.Patterns.Match: matchPatterns :: [Arg Pattern] -> [Arg Term] -> TCM (Match, [Arg Term])
- Agda.TypeChecking.Pretty: prettyTCM :: (PrettyTCM a, MonadTCM tcm) => a -> tcm Doc
+ Agda.TypeChecking.Pretty: prettyTCM :: PrettyTCM a => a -> TCM Doc
- Agda.TypeChecking.Primitive: (-->) :: MonadTCM tcm => tcm Type -> tcm Type -> tcm Type
+ Agda.TypeChecking.Primitive: (-->) :: TCM Type -> TCM Type -> TCM Type
- Agda.TypeChecking.Primitive: buildList :: MonadTCM tcm => tcm ([Term] -> Term)
+ Agda.TypeChecking.Primitive: buildList :: TCM ([Term] -> Term)
- Agda.TypeChecking.Primitive: constructorForm :: MonadTCM tcm => Term -> tcm Term
+ Agda.TypeChecking.Primitive: constructorForm :: Term -> TCM Term
- Agda.TypeChecking.Primitive: el :: MonadTCM tcm => tcm Term -> tcm Type
+ Agda.TypeChecking.Primitive: el :: TCM Term -> TCM Type
- Agda.TypeChecking.Primitive: fromLiteral :: MonadTCM tcm => (Literal -> Maybe a) -> tcm (FromTermFunction a)
+ Agda.TypeChecking.Primitive: fromLiteral :: (Literal -> Maybe a) -> TCM (FromTermFunction a)
- Agda.TypeChecking.Primitive: fromReducedTerm :: MonadTCM tcm => (Term -> Maybe a) -> tcm (FromTermFunction a)
+ Agda.TypeChecking.Primitive: fromReducedTerm :: (Term -> Maybe a) -> TCM (FromTermFunction a)
- Agda.TypeChecking.Primitive: fromTerm :: (FromTerm a, MonadTCM tcm) => tcm (FromTermFunction a)
+ Agda.TypeChecking.Primitive: fromTerm :: FromTerm a => TCM (FromTermFunction a)
- Agda.TypeChecking.Primitive: gApply :: MonadTCM tcm => Hiding -> tcm Term -> tcm Term -> tcm Term
+ Agda.TypeChecking.Primitive: gApply :: Hiding -> TCM Term -> TCM Term -> TCM Term
- Agda.TypeChecking.Primitive: gpi :: MonadTCM tcm => Hiding -> Relevance -> String -> tcm Type -> tcm Type -> tcm Type
+ Agda.TypeChecking.Primitive: gpi :: Hiding -> Relevance -> String -> TCM Type -> TCM Type -> TCM Type
- Agda.TypeChecking.Primitive: io :: MonadTCM tcm => tcm Term -> tcm Term
+ Agda.TypeChecking.Primitive: io :: TCM Term -> TCM Term
- Agda.TypeChecking.Primitive: list :: MonadTCM tcm => tcm Term -> tcm Term
+ Agda.TypeChecking.Primitive: list :: TCM Term -> TCM Term
- Agda.TypeChecking.Primitive: lookupPrimitiveFunction :: MonadTCM tcm => String -> tcm PrimitiveImpl
+ Agda.TypeChecking.Primitive: lookupPrimitiveFunction :: String -> TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: mkPrimFun1 :: (MonadTCM tcm, PrimType a, PrimType b, FromTerm a, ToTerm b) => (a -> b) -> tcm PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimFun1 :: (PrimType a, PrimType b, FromTerm a, ToTerm b) => (a -> b) -> TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: mkPrimFun2 :: (MonadTCM tcm, PrimType a, PrimType b, PrimType c, FromTerm a, ToTerm a, FromTerm b, ToTerm c) => (a -> b -> c) -> tcm PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimFun2 :: (PrimType a, PrimType b, PrimType c, FromTerm a, ToTerm a, FromTerm b, ToTerm c) => (a -> b -> c) -> TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: mkPrimFun4 :: (MonadTCM tcm, PrimType a, FromTerm a, ToTerm a, PrimType b, FromTerm b, ToTerm b, PrimType c, FromTerm c, ToTerm c, PrimType d, FromTerm d, PrimType e, ToTerm e) => (a -> b -> c -> d -> e) -> tcm PrimitiveImpl
+ Agda.TypeChecking.Primitive: mkPrimFun4 :: (PrimType a, FromTerm a, ToTerm a, PrimType b, FromTerm b, ToTerm b, PrimType c, FromTerm c, ToTerm c, PrimType d, FromTerm d, PrimType e, ToTerm e) => (a -> b -> c -> d -> e) -> TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: primTerm :: (PrimTerm a, MonadTCM tcm) => a -> tcm Term
+ Agda.TypeChecking.Primitive: primTerm :: PrimTerm a => a -> TCM Term
- Agda.TypeChecking.Primitive: primTrustMe :: MonadTCM tcm => tcm PrimitiveImpl
+ Agda.TypeChecking.Primitive: primTrustMe :: TCM PrimitiveImpl
- Agda.TypeChecking.Primitive: primType :: (PrimType a, MonadTCM tcm) => a -> tcm Type
+ Agda.TypeChecking.Primitive: primType :: PrimType a => a -> TCM Type
- Agda.TypeChecking.Primitive: rebindPrimitive :: MonadTCM tcm => String -> tcm PrimFun
+ Agda.TypeChecking.Primitive: rebindPrimitive :: String -> TCM PrimFun
- Agda.TypeChecking.Primitive: redBind :: MonadTCM tcm => tcm (Reduced a a') -> (a -> b) -> (a' -> tcm (Reduced b b')) -> tcm (Reduced b b')
+ Agda.TypeChecking.Primitive: redBind :: TCM (Reduced a a') -> (a -> b) -> (a' -> TCM (Reduced b b')) -> TCM (Reduced b b')
- Agda.TypeChecking.Primitive: redReturn :: MonadTCM tcm => a -> tcm (Reduced a' a)
+ Agda.TypeChecking.Primitive: redReturn :: a -> TCM (Reduced a' a)
- Agda.TypeChecking.Primitive: toTerm :: (ToTerm a, MonadTCM tcm) => tcm (a -> Term)
+ Agda.TypeChecking.Primitive: toTerm :: ToTerm a => TCM (a -> Term)
- Agda.TypeChecking.Primitive: tset :: MonadTCM tcm => tcm Type
+ Agda.TypeChecking.Primitive: tset :: TCM Type
- Agda.TypeChecking.Primitive: var :: MonadTCM tcm => Integer -> tcm Term
+ Agda.TypeChecking.Primitive: var :: Integer -> TCM Term
- Agda.TypeChecking.Rebind: rebindClause :: Clauses -> TCM Clauses
+ Agda.TypeChecking.Rebind: rebindClause :: Clause -> TCM Clause
- Agda.TypeChecking.RecordPatterns: translateRecordPatterns :: MonadTCM tcm => Clause -> tcm Clauses
+ Agda.TypeChecking.RecordPatterns: translateRecordPatterns :: Clause -> TCM Clause
- Agda.TypeChecking.Records: etaContractRecord :: MonadTCM tcm => QName -> QName -> Args -> tcm Term
+ Agda.TypeChecking.Records: etaContractRecord :: QName -> QName -> Args -> TCM Term
- Agda.TypeChecking.Records: etaExpandRecord :: MonadTCM tcm => QName -> Args -> Term -> tcm (Telescope, Args)
+ Agda.TypeChecking.Records: etaExpandRecord :: QName -> Args -> Term -> TCM (Telescope, Args)
- Agda.TypeChecking.Records: getRecordConstructor :: MonadTCM tcm => QName -> tcm QName
+ Agda.TypeChecking.Records: getRecordConstructor :: QName -> TCM QName
- Agda.TypeChecking.Records: getRecordConstructorType :: MonadTCM tcm => QName -> tcm Type
+ Agda.TypeChecking.Records: getRecordConstructorType :: QName -> TCM Type
- Agda.TypeChecking.Records: getRecordDef :: MonadTCM tcm => QName -> tcm Defn
+ Agda.TypeChecking.Records: getRecordDef :: QName -> TCM Defn
- Agda.TypeChecking.Records: getRecordFieldNames :: MonadTCM tcm => QName -> tcm [Arg Name]
+ Agda.TypeChecking.Records: getRecordFieldNames :: QName -> TCM [Arg Name]
- Agda.TypeChecking.Records: getRecordFieldTypes :: MonadTCM tcm => QName -> tcm Telescope
+ Agda.TypeChecking.Records: getRecordFieldTypes :: QName -> TCM Telescope
- Agda.TypeChecking.Records: isEtaRecord :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Records: isEtaRecord :: QName -> TCM Bool
- Agda.TypeChecking.Records: isGeneratedRecordConstructor :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Records: isGeneratedRecordConstructor :: QName -> TCM Bool
- Agda.TypeChecking.Records: isRecord :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Records: isRecord :: QName -> TCM Bool
- Agda.TypeChecking.Records: isRecordConstructor :: MonadTCM tcm => QName -> tcm Bool
+ Agda.TypeChecking.Records: isRecordConstructor :: QName -> TCM Bool
- Agda.TypeChecking.Records: isSingletonRecord :: MonadTCM tcm => QName -> Args -> tcm (Either MetaId Bool)
+ Agda.TypeChecking.Records: isSingletonRecord :: QName -> Args -> TCM (Either MetaId Bool)
- Agda.TypeChecking.Records: orderFields :: MonadTCM tcm => QName -> a -> [Name] -> [(Name, a)] -> tcm [a]
+ Agda.TypeChecking.Records: orderFields :: QName -> a -> [Name] -> [(Name, a)] -> TCM [a]
- Agda.TypeChecking.Reduce: instantiate :: (Instantiate t, MonadTCM tcm) => t -> tcm t
+ Agda.TypeChecking.Reduce: instantiate :: Instantiate t => t -> TCM t
- Agda.TypeChecking.Reduce: instantiateFull :: (InstantiateFull t, MonadTCM tcm) => t -> tcm t
+ Agda.TypeChecking.Reduce: instantiateFull :: InstantiateFull t => t -> TCM t
- Agda.TypeChecking.Reduce: normalise :: (Normalise t, MonadTCM tcm) => t -> tcm t
+ Agda.TypeChecking.Reduce: normalise :: Normalise t => t -> TCM t
- Agda.TypeChecking.Reduce: reduce :: (Reduce t, MonadTCM tcm) => t -> tcm t
+ Agda.TypeChecking.Reduce: reduce :: Reduce t => t -> TCM t
- Agda.TypeChecking.Reduce: reduceB :: (Reduce t, MonadTCM tcm) => t -> tcm (Blocked t)
+ Agda.TypeChecking.Reduce: reduceB :: Reduce t => t -> TCM (Blocked t)
- Agda.TypeChecking.Reduce: telViewM :: MonadTCM tcm => Type -> tcm TelView
+ Agda.TypeChecking.Reduce: telViewM :: Type -> TCM TelView
- Agda.TypeChecking.Reduce: traceFun :: MonadTCM tcm => String -> tcm a -> tcm a
+ Agda.TypeChecking.Reduce: traceFun :: String -> TCM a -> TCM a
- Agda.TypeChecking.Reduce: traceFun' :: (Show a, MonadTCM tcm) => String -> tcm a -> tcm a
+ Agda.TypeChecking.Reduce: traceFun' :: Show a => String -> TCM a -> TCM a
- Agda.TypeChecking.Reduce: unfoldDefinition :: MonadTCM tcm => Bool -> (Term -> tcm (Blocked Term)) -> Term -> QName -> Args -> tcm (Blocked Term)
+ Agda.TypeChecking.Reduce: unfoldDefinition :: Bool -> (Term -> TCM (Blocked Term)) -> Term -> QName -> Args -> TCM (Blocked Term)
- Agda.TypeChecking.Rules.Data: forceData :: MonadTCM tcm => QName -> Type -> tcm Type
+ Agda.TypeChecking.Rules.Data: forceData :: QName -> Type -> TCM Type
- Agda.TypeChecking.Rules.Data: isCoinductive :: MonadTCM tcm => Type -> tcm (Maybe Bool)
+ Agda.TypeChecking.Rules.Data: isCoinductive :: Type -> TCM (Maybe Bool)
- Agda.TypeChecking.Rules.Decl: checkMutual :: DeclInfo -> [TypeSignature] -> [Definition] -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkMutual :: DeclInfo -> [Declaration] -> TCM ()
- Agda.TypeChecking.Rules.Decl: checkSectionApplication :: ModuleInfo -> ModuleName -> Telescope -> ModuleName -> [NamedArg Expr] -> Map QName QName -> Map ModuleName ModuleName -> TCM ()
+ Agda.TypeChecking.Rules.Decl: checkSectionApplication :: ModuleInfo -> ModuleName -> ModuleApplication -> Map QName QName -> Map ModuleName ModuleName -> TCM ()
- Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Telescope -> Telescope -> Telescope -> [Term] -> [Type] -> Type -> [Arg Pattern] -> Permutation -> [Clause] -> WithFunctionProblem
+ Agda.TypeChecking.Rules.Def: WithFunction :: QName -> QName -> Telescope -> Telescope -> Telescope -> [Term] -> [Type] -> Type -> [Arg Pattern] -> Permutation -> Permutation -> [Clause] -> WithFunctionProblem
- Agda.TypeChecking.Rules.Def: actualConstructor :: MonadTCM tcm => QName -> tcm QName
+ Agda.TypeChecking.Rules.Def: actualConstructor :: QName -> TCM QName
- Agda.TypeChecking.Rules.Def: checkClause :: Type -> Clause -> TCM Clauses
+ Agda.TypeChecking.Rules.Def: checkClause :: Type -> Clause -> TCM Clause
- Agda.TypeChecking.Rules.LHS: checkDotPattern :: DotPatternInst -> TCM Constraints
+ Agda.TypeChecking.Rules.LHS: checkDotPattern :: DotPatternInst -> TCM ()
- Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: MonadTCM tcm => [Arg Pattern] -> tcm ()
+ Agda.TypeChecking.Rules.LHS: noPatternMatchingOnCodata :: [Arg Pattern] -> TCM ()
- Agda.TypeChecking.Rules.LHS.Instantiate: instantiateTel :: MonadTCM tcm => Substitution -> Telescope -> tcm (Telescope, Permutation, [Term], [Type])
+ Agda.TypeChecking.Rules.LHS.Instantiate: instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, [Term], [Type])
- Agda.TypeChecking.Rules.LHS.Split: wellFormedIndices :: MonadTCM tcm => [Arg Term] -> [Arg Term] -> tcm ()
+ Agda.TypeChecking.Rules.LHS.Split: wellFormedIndices :: [Arg Term] -> [Arg Term] -> TCM ()
- Agda.TypeChecking.Rules.LHS.Unify: Equal :: Type -> Term -> Term -> Equality
+ Agda.TypeChecking.Rules.LHS.Unify: Equal :: TypeHH -> Term -> Term -> Equality
- Agda.TypeChecking.Rules.LHS.Unify: U :: ExceptionT UnifyException (StateT UnifyState TCM) a -> Unify a
+ Agda.TypeChecking.Rules.LHS.Unify: U :: ReaderT UnifyEnv (WriterT UnifyOutput (ExceptionT UnifyException (StateT UnifyState TCM))) a -> Unify a
- Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordType :: MonadTCM tcm => QName -> Type -> tcm Type
+ Agda.TypeChecking.Rules.LHS.Unify: dataOrRecordType :: QName -> Type -> TCM (Maybe Type)
- Agda.TypeChecking.Rules.LHS.Unify: unUnify :: Unify a -> ExceptionT UnifyException (StateT UnifyState TCM) a
+ Agda.TypeChecking.Rules.LHS.Unify: unUnify :: Unify a -> ReaderT UnifyEnv (WriterT UnifyOutput (ExceptionT UnifyException (StateT UnifyState TCM))) a
- Agda.TypeChecking.Rules.LHS.Unify: ureduce :: Term -> Unify Term
+ Agda.TypeChecking.Rules.LHS.Unify: ureduce :: UReduce t => t -> Unify t
- Agda.TypeChecking.Rules.Record: checkRecDef :: DefInfo -> QName -> Maybe Constructor -> [LamBinding] -> Expr -> [Constructor] -> TCM ()
+ Agda.TypeChecking.Rules.Record: checkRecDef :: DefInfo -> QName -> Maybe QName -> [LamBinding] -> Expr -> [Constructor] -> TCM ()
- Agda.TypeChecking.Rules.Record: checkRecordProjections :: ModuleName -> QName -> Telescope -> Telescope -> [Declaration] -> TCM ()
+ Agda.TypeChecking.Rules.Record: checkRecordProjections :: ModuleName -> QName -> QName -> Telescope -> Telescope -> [Declaration] -> TCM ()
- Agda.TypeChecking.Rules.Term: checkArguments :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> ErrorT Type TCM (Args, Type, Constraints)
+ Agda.TypeChecking.Rules.Term: checkArguments :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> ErrorT Type TCM (Args, Type)
- Agda.TypeChecking.Rules.Term: checkArguments' :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> Expr -> (Args -> Type -> Constraints -> TCM Term) -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkArguments' :: ExpandHidden -> Range -> [NamedArg Expr] -> Type -> Type -> Expr -> (Args -> Type -> TCM Term) -> TCM Term
- Agda.TypeChecking.Rules.Term: checkArguments_ :: ExpandHidden -> Range -> [NamedArg Expr] -> Telescope -> TCM (Args, Constraints)
+ Agda.TypeChecking.Rules.Term: checkArguments_ :: ExpandHidden -> Range -> [NamedArg Expr] -> Telescope -> TCM Args
- Agda.TypeChecking.Rules.Term: checkHeadApplication :: Expr -> Type -> Head -> [NamedArg Expr] -> TCM Term
+ Agda.TypeChecking.Rules.Term: checkHeadApplication :: Expr -> Type -> Expr -> [NamedArg Expr] -> TCM Term
- Agda.TypeChecking.Rules.Term: checkTypedBinding :: Hiding -> Sort -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBinding :: LamOrPi -> Hiding -> Relevance -> TypedBinding -> ([(String, Type)] -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: checkTypedBindings :: TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a
+ Agda.TypeChecking.Rules.Term: checkTypedBindings :: LamOrPi -> TypedBindings -> (Telescope -> TCM a) -> TCM a
- Agda.TypeChecking.Rules.Term: inferHead :: Head -> TCM (Args -> Term, Type)
+ Agda.TypeChecking.Rules.Term: inferHead :: Expr -> TCM (Args -> Term, Type)
- Agda.TypeChecking.Rules.Term: reduceCon :: MonadTCM tcm => QName -> tcm QName
+ Agda.TypeChecking.Rules.Term: reduceCon :: QName -> TCM QName
- Agda.TypeChecking.SizedTypes: compareSizes :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.SizedTypes: compareSizes :: Comparison -> Term -> Term -> TCM ()
- Agda.TypeChecking.SizedTypes: computeSizeConstraint :: MonadTCM tcm => ConstraintClosure -> tcm (Maybe SizeConstraint)
+ Agda.TypeChecking.SizedTypes: computeSizeConstraint :: Closure Constraint -> TCM (Maybe SizeConstraint)
- Agda.TypeChecking.SizedTypes: getSizeConstraints :: MonadTCM tcm => tcm [SizeConstraint]
+ Agda.TypeChecking.SizedTypes: getSizeConstraints :: TCM [SizeConstraint]
- Agda.TypeChecking.SizedTypes: getSizeMetas :: MonadTCM tcm => tcm [(MetaId, Int)]
+ Agda.TypeChecking.SizedTypes: getSizeMetas :: TCM [(MetaId, Int)]
- Agda.TypeChecking.SizedTypes: haveSizedTypes :: MonadTCM tcm => tcm Bool
+ Agda.TypeChecking.SizedTypes: haveSizedTypes :: TCM Bool
- Agda.TypeChecking.SizedTypes: sizeExpr :: MonadTCM tcm => Term -> tcm (SizeExpr, Int)
+ Agda.TypeChecking.SizedTypes: sizeExpr :: Term -> TCM (SizeExpr, Int)
- Agda.TypeChecking.SizedTypes: solveSizeConstraints :: MonadTCM tcm => tcm ()
+ Agda.TypeChecking.SizedTypes: solveSizeConstraints :: TCM ()
- Agda.TypeChecking.SizedTypes: trivial :: MonadTCM tcm => Term -> Term -> tcm Bool
+ Agda.TypeChecking.SizedTypes: trivial :: Term -> Term -> TCM Bool
- Agda.TypeChecking.Substitute: TelV :: Telescope -> Type -> TelView
+ Agda.TypeChecking.Substitute: TelV :: (Tele (Arg a)) -> a -> TelV a
- Agda.TypeChecking.Telescope: piApplyM :: MonadTCM tcm => Type -> Args -> tcm Type
+ Agda.TypeChecking.Telescope: piApplyM :: Type -> Args -> TCM Type
- Agda.TypeChecking.Telescope: reorderTel :: [Arg Type] -> Permutation
+ Agda.TypeChecking.Telescope: reorderTel :: [Arg Type] -> Maybe Permutation
- Agda.TypeChecking.Telescope: splitTelescope :: Set Nat -> Telescope -> SplitTel
+ Agda.TypeChecking.Telescope: splitTelescope :: VarSet -> Telescope -> SplitTel
- Agda.TypeChecking.Telescope: telView :: MonadTCM tcm => Type -> tcm TelView
+ Agda.TypeChecking.Telescope: telView :: Type -> TCM TelView
- Agda.TypeChecking.Telescope: telViewUpTo :: MonadTCM tcm => Int -> Type -> tcm TelView
+ Agda.TypeChecking.Telescope: telViewUpTo :: Int -> Type -> TCM TelView
- Agda.TypeChecking.UniversePolymorphism: compareLevel :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints
+ Agda.TypeChecking.UniversePolymorphism: compareLevel :: Comparison -> Level -> Level -> TCM ()
- Agda.TypeChecking.With: patsToTerms :: [Arg Pattern] -> [Arg Term]
+ Agda.TypeChecking.With: patsToTerms :: [Arg Pattern] -> [Arg DisplayTerm]
- Agda.Utils.Graph: transitiveClosure :: (SemiRing e, Ord n) => Graph n e -> Graph n e
+ Agda.Utils.Graph: transitiveClosure :: (Eq e, SemiRing e, Ord n) => Graph n e -> Graph n e
- Agda.Utils.String: showIndex :: Integral i => i -> String
+ Agda.Utils.String: showIndex :: (Show i, Integral i) => i -> String

Files

Agda.cabal view
@@ -1,6 +1,6 @@ name:            Agda-version:         2.2.10-cabal-version:   >= 1.8 && < 2+version:         2.3.0+cabal-version:   >= 1.8 build-type:      Simple license:         OtherLicense license-file:    LICENSE@@ -34,7 +34,7 @@   Note also that this library does not follow the package versioning   policy, because the library is only intended to be used by the Emacs   mode and the Agda-executable package.-tested-with:        GHC == 6.12.1, GHC == 6.12.3, GHC == 7.0.1+tested-with:        GHC == 7.2.2 extra-source-files: src/full/Agda/undefined.h                     README                     doc/release-notes/*.txt@@ -52,7 +52,7 @@ source-repository this   type:     darcs   location: http://code.haskell.org/Agda/-  tag:      2.2.10+  tag:      2.3.0  flag use-locale   description:@@ -69,30 +69,32 @@ library   hs-source-dirs:   src/full   if flag(use-locale)-    build-depends:  base >= 4.2 && < 4.4+    build-depends:  base >= 4.2 && < 4.5   else     build-depends:  base == 4.1.*,                     utf8-string == 0.3.*   if flag(epic)-    build-depends:  epic >= 0.1.7 && < 0.2+    build-depends:  epic >= 0.1.13 && < 0.2   build-depends:    mtl == 2.0.*,                     QuickCheck >= 2.3 && < 2.5,-                    haskell-src-exts >= 1.9.6 && < 1.10,-                    containers >= 0.1.0 && < 1,-                    pretty >= 1 && < 2,+                    haskell-src-exts >= 1.9.6 && < 1.12,+                    containers >= 0.1 && < 0.5,+                    pretty >= 1.0 && < 1.2,                     directory >= 1.0 && < 1.2,-                    old-time >= 1 && < 2,-                    bytestring >= 0.9.0.1 && < 1,-                    array >= 0.1 && < 1,+                    old-time == 1.0.*,+                    bytestring >= 0.9.0.1 && < 0.10,+                    array >= 0.1 && < 0.4,                     binary >= 0.4.4 && < 0.6,-                    zlib >= 0.4.0.1 && < 1,-                    filepath >= 1.1 && < 2,-                    process >= 1.0.1.0 && < 2,+                    zlib >= 0.4.0.1 && < 0.6,+                    filepath >= 1.1 && < 1.3,+                    process >= 1.0.1.0 && < 1.2,                     haskeline >= 0.6.3.2 && < 0.7,                     xhtml == 3000.2.*,-                    syb >= 0.1 && < 0.3+                    hashable == 1.1.*,+                    hashtables == 1.0.*,+                    syb >= 0.1 && < 0.4   build-tools:      happy >= 1.15 && < 2,-                    alex >= 2.0.1 && < 3+                    alex >= 2.3.1 && < 3.1   extensions:       CPP   exposed-modules:  Agda.Main                     Agda.ImpossibleTest@@ -100,16 +102,26 @@                     Agda.Interaction.GhciTop                     Agda.Compiler.HaskellTypes                     Agda.Compiler.Epic.AuxAST+                    Agda.Compiler.Epic.CaseOpts                     Agda.Compiler.Epic.Compiler                     Agda.Compiler.Epic.CompileState-                    Agda.Compiler.Epic.ConstructorIrrelevancy-                    Agda.Compiler.Epic.Erasure                     Agda.Compiler.Epic.Epic+                    Agda.Compiler.Epic.Erasure+                    Agda.Compiler.Epic.ForceConstrs                     Agda.Compiler.Epic.Forcing                     Agda.Compiler.Epic.FromAgda-                    Agda.Compiler.Epic.LambdaLift+                    Agda.Compiler.Epic.Injection+                    Agda.Compiler.Epic.Interface                     Agda.Compiler.Epic.NatDetection                     Agda.Compiler.Epic.Primitive+                    Agda.Compiler.Epic.Smashing+                    Agda.Compiler.Epic.Static+                    Agda.Compiler.JS.Case+                    Agda.Compiler.JS.Compiler+                    Agda.Compiler.JS.Syntax+                    Agda.Compiler.JS.Substitution+                    Agda.Compiler.JS.Parser+                    Agda.Compiler.JS.Pretty                     Agda.Compiler.MAlonzo.Compiler                     Agda.Compiler.MAlonzo.Encode                     Agda.Compiler.MAlonzo.Misc@@ -120,8 +132,10 @@                     Agda.Packaging.Monad                     Agda.Packaging.Types                     Agda.Interaction.CommandLine.CommandLine+                    Agda.Interaction.EmacsCommand                     Agda.Interaction.Exceptions                     Agda.Interaction.FindFile+                    Agda.Interaction.Highlighting.Dot                     Agda.Interaction.Highlighting.Emacs                     Agda.Interaction.Highlighting.Generate                     Agda.Interaction.Highlighting.HTML@@ -179,6 +193,7 @@                     Agda.TypeChecker                     Agda.TypeChecking.Abstract                     Agda.TypeChecking.CompiledClause+                    Agda.TypeChecking.CompiledClause.Compile                     Agda.TypeChecking.CompiledClause.Match                     Agda.TypeChecking.Constraints                     Agda.TypeChecking.Conversion@@ -186,6 +201,7 @@                     Agda.TypeChecking.Coverage.Match                     Agda.TypeChecking.Datatypes                     Agda.TypeChecking.DisplayForm+                    Agda.TypeChecking.Eliminators                     Agda.TypeChecking.Empty                     Agda.TypeChecking.EtaContract                     Agda.TypeChecking.Errors@@ -193,8 +209,11 @@                     Agda.TypeChecking.Forcing                     Agda.TypeChecking.Implicit                     Agda.TypeChecking.Injectivity+                    Agda.TypeChecking.Irrelevance                     Agda.TypeChecking.Level+                    Agda.TypeChecking.LevelConstraints                     Agda.TypeChecking.MetaVars+                    Agda.TypeChecking.MetaVars.Mention                     Agda.TypeChecking.MetaVars.Occurs                     Agda.TypeChecking.Monad.Base                     Agda.TypeChecking.Monad.Builtin@@ -246,6 +265,7 @@                     Agda.TypeChecking.Tests                     Agda.TypeChecking.UniversePolymorphism                     Agda.TypeChecking.With+                    Agda.Utils.VarSet                     Agda.Utils.Char                     Agda.Utils.Either                     Agda.Utils.FileName@@ -286,7 +306,7 @@                     Agda.Auto.CaseSplit   other-modules:    Paths_Agda   if true-    ghc-options:    -w -Werror+    ghc-options:    -w                     -fwarn-deprecated-flags                     -fwarn-dodgy-foreign-imports                     -fwarn-dodgy-imports@@ -297,9 +317,14 @@                     -fwarn-missing-methods                     -fwarn-overlapping-patterns                     -fwarn-warnings-deprecations+  -- The Cabal-generated module Paths_Agda triggers a warning under+  -- GHC 7.2.1/7.2.2 (at least when certain versions of Cabal are+  -- used).   if impl(ghc >= 6.12)     ghc-options:    -fwarn-dodgy-exports                     -fwarn-wrong-do-bind+  if impl(ghc >= 7.2)+    ghc-options:    -fwarn-identities   ghc-prof-options: -auto-all  executable agda-mode@@ -307,10 +332,10 @@   main-is:          Main.hs   other-modules:    Paths_Agda   if flag(use-locale)-    build-depends:  base >= 4.2 && < 4.4+    build-depends:  base >= 4.2 && < 4.5   else     build-depends:  base == 4.1.*,                     utf8-string == 0.3.*-  build-depends:    filepath >= 1.1 && < 2,-                    process >= 1.0.1.0 && < 2,+  build-depends:    filepath >= 1.1 && < 1.3,+                    process >= 1.0.1.0 && < 1.2,                     directory >= 1.0 && < 1.2
README view
@@ -160,10 +160,7 @@ * When installing using a source tar ball, following the instructions   in 2b) above: -    make CABAL_OPTIONS="--global -fepic" install--  (The Makefile specifies CABAL_OPTIONS=--global by default; feel free-  to omit --global.)+    make CABAL_OPTIONS=-fepic install  You can also install Epic directly: 
dist/build/Agda/Syntax/Parser/Lexer.hs view
@@ -1,7 +1,8 @@-{-# OPTIONS -fglasgow-exts -cpp #-}+{-# LANGUAGE CPP,MagicHash #-} {-# LINE 1 "src/full/Agda/Syntax/Parser/Lexer.x" #-}  {-# OPTIONS_GHC -fno-warn-deprecated-flags #-}+{-# LANGUAGE BangPatterns #-} {-| The lexer is generated by Alex (<http://www.haskell.org/alex>) and is an     adaptation of GHC's lexer. The main lexing function 'lexer' is called by     the "Agda.Syntax.Parser.Parser" to get the next token from the input.@@ -49,19 +50,19 @@ import GlaExts #endif alex_base :: AlexAddr-alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x70\x00\x00\x00\x74\x00\x00\x00\x78\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x81\x00\x00\x00\x48\x01\x00\x00\x49\x01\x00\x00\x4f\x01\x00\x00\x50\x01\x00\x00\x53\x01\x00\x00\x51\x01\x00\x00\x54\x01\x00\x00\x55\x01\x00\x00\x57\x01\x00\x00\xfb\xff\xff\xff\x00\x00\x00\x00\xfc\xff\xff\xff\xfd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa3\xff\xff\xff\x9b\xff\xff\xff\xa6\xff\xff\xff\x90\xff\xff\xff\xa9\xff\xff\xff\x9e\xff\xff\xff\xaa\xff\xff\xff\xab\xff\xff\xff\x92\xff\xff\xff\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\xee\xff\xff\xff\x9a\x00\x00\x00\xa0\x00\x00\x00\xa6\x00\x00\x00\xab\x00\x00\x00\xb8\x00\x00\x00\x69\x01\x00\x00\x6f\x01\x00\x00\x75\x01\x00\x00\x7b\x01\x00\x00\x99\x01\x00\x00\x9e\x01\x00\x00\xcc\x01\x00\x00\xd1\x01\x00\x00\xde\x01\x00\x00\xe9\x01\x00\x00\xee\x01\x00\x00\xf6\x01\x00\x00\xfb\x01\x00\x00\x07\x02\x00\x00\x13\x02\x00\x00\x1f\x02\x00\x00\x24\x02\x00\x00\x3c\x02\x00\x00\x48\x02\x00\x00\x4d\x02\x00\x00\x59\x02\x00\x00\x65\x02\x00\x00\x6b\x02\x00\x00\x71\x02\x00\x00\x77\x02\x00\x00\x83\x02\x00\x00\x90\x02\x00\x00\x95\x02\x00\x00\xad\x02\x00\x00\xb4\x02\x00\x00\xbc\x02\x00\x00\xce\x02\x00\x00\xd4\x02\x00\x00\xdc\x02\x00\x00\xe6\x02\x00\x00\xee\x02\x00\x00\xf4\x02\x00\x00\xfe\x02\x00\x00\x0d\x03\x00\x00\x16\x03\x00\x00\x1b\x03\x00\x00\x33\x03\x00\x00\x38\x03\x00\x00\x43\x03\x00\x00\x55\x03\x00\x00\x5d\x03\x00\x00\x66\x03\x00\x00\x6e\x03\x00\x00\x75\x03\x00\x00\x80\x03\x00\x00\x86\x03\x00\x00\x8e\x03\x00\x00\x98\x03\x00\x00\x9e\x03\x00\x00\xb0\x03\x00\x00\xb6\x03\x00\x00\x00\x00\x00\x00\xe5\xff\xff\xff\x09\x00\x00\x00\xcd\x03\x00\x00\x0a\x00\x00\x00\x3e\x04\x00\x00\xaf\x04\x00\x00\x20\x05\x00\x00\x91\x05\x00\x00\x02\x06\x00\x00\x5e\x06\x00\x00\xe8\xff\xff\xff\xba\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x07\x00\x00\x72\x07\x00\x00\xce\x07\x00\x00\x2a\x08\x00\x00\x86\x08\x00\x00\xe2\x08\x00\x00\x3e\x09\x00\x00\x9a\x09\x00\x00\xf6\x09\x00\x00\x52\x0a\x00\x00\xae\x0a\x00\x00\x0a\x0b\x00\x00\x66\x0b\x00\x00\xc2\x0b\x00\x00\x1e\x0c\x00\x00\x7a\x0c\x00\x00\xd6\x0c\x00\x00\x32\x0d\x00\x00\x8e\x0d\x00\x00\xea\x0d\x00\x00\x46\x0e\x00\x00\xa2\x0e\x00\x00\xfe\x0e\x00\x00\x5a\x0f\x00\x00\xb6\x0f\x00\x00\x12\x10\x00\x00\x6e\x10\x00\x00\xca\x10\x00\x00\x26\x11\x00\x00\x82\x11\x00\x00\xde\x11\x00\x00\x3a\x12\x00\x00\x96\x12\x00\x00\xf2\x12\x00\x00\x4e\x13\x00\x00\xaa\x13\x00\x00\x06\x14\x00\x00\x62\x14\x00\x00\xbe\x14\x00\x00\x1a\x15\x00\x00\x76\x15\x00\x00\xd2\x15\x00\x00\x2e\x16\x00\x00\x8a\x16\x00\x00\xe6\x16\x00\x00\x42\x17\x00\x00\x9e\x17\x00\x00\xfa\x17\x00\x00\x56\x18\x00\x00\xb2\x18\x00\x00\x0e\x19\x00\x00\x6a\x19\x00\x00\xc6\x19\x00\x00\x22\x1a\x00\x00\x7e\x1a\x00\x00\xda\x1a\x00\x00\x36\x1b\x00\x00\x92\x1b\x00\x00\xee\x1b\x00\x00\x4a\x1c\x00\x00\xa6\x1c\x00\x00\x02\x1d\x00\x00\x5e\x1d\x00\x00\xba\x1d\x00\x00\x16\x1e\x00\x00\x72\x1e\x00\x00\xce\x1e\x00\x00\x2a\x1f\x00\x00\x86\x1f\x00\x00\xe2\x1f\x00\x00\x3e\x20\x00\x00\x9a\x20\x00\x00\xf6\x20\x00\x00\x52\x21\x00\x00\xae\x21\x00\x00\x0a\x22\x00\x00\x66\x22\x00\x00\xc2\x22\x00\x00\x1e\x23\x00\x00\x7a\x23\x00\x00\xd6\x23\x00\x00\x32\x24\x00\x00\x8e\x24\x00\x00\xea\x24\x00\x00\x46\x25\x00\x00\xa2\x25\x00\x00\xfe\x25\x00\x00\x5a\x26\x00\x00\xb6\x26\x00\x00\x12\x27\x00\x00\x6e\x27\x00\x00\xca\x27\x00\x00\x26\x28\x00\x00\x82\x28\x00\x00\xde\x28\x00\x00\x3a\x29\x00\x00\x96\x29\x00\x00\xf2\x29\x00\x00\x4e\x2a\x00\x00\xaa\x2a\x00\x00\x06\x2b\x00\x00\x62\x2b\x00\x00\xbe\x2b\x00\x00\x1a\x2c\x00\x00\x76\x2c\x00\x00\xd2\x2c\x00\x00\x2e\x2d\x00\x00\x8a\x2d\x00\x00\xe6\x2d\x00\x00\x42\x2e\x00\x00\x9e\x2e\x00\x00\xfa\x2e\x00\x00\x56\x2f\x00\x00\xb2\x2f\x00\x00\x0e\x30\x00\x00\x6a\x30\x00\x00\xc6\x30\x00\x00\x22\x31\x00\x00\x7e\x31\x00\x00\xda\x31\x00\x00\x36\x32\x00\x00\x92\x32\x00\x00\xee\x32\x00\x00\x4a\x33\x00\x00\xa6\x33\x00\x00\x02\x34\x00\x00\x5e\x34\x00\x00\xba\x34\x00\x00\x16\x35\x00\x00\x72\x35\x00\x00\xce\x35\x00\x00\x2a\x36\x00\x00\x86\x36\x00\x00\xe2\x36\x00\x00\x3e\x37\x00\x00\x9a\x37\x00\x00\xf6\x37\x00\x00\x52\x38\x00\x00\xae\x38\x00\x00\x0a\x39\x00\x00\x66\x39\x00\x00\xc2\x39\x00\x00\x1e\x3a\x00\x00\x7a\x3a\x00\x00\xd6\x3a\x00\x00\x32\x3b\x00\x00\x8e\x3b\x00\x00\xea\x3b\x00\x00\x46\x3c\x00\x00\xa2\x3c\x00\x00\x00\x00\x00\x00\xa7\xff\xff\xff\xfe\x3c\x00\x00\x5a\x3d\x00\x00\xb6\x3d\x00\x00\x12\x3e\x00\x00\x6e\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\xca\x3e\x00\x00\x26\x3f\x00\x00\x82\x3f\x00\x00\xde\x3f\x00\x00\x3a\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x40\x00\x00\xf2\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x41\x00\x00\xaa\x41\x00\x00\x06\x42\x00\x00\x62\x42\x00\x00\xbe\x42\x00\x00\x1a\x43\x00\x00\x76\x43\x00\x00\xd2\x43\x00\x00\x2e\x44\x00\x00\x8a\x44\x00\x00\xe6\x44\x00\x00\x42\x45\x00\x00\x9e\x45\x00\x00\xfa\x45\x00\x00\x56\x46\x00\x00\xb2\x46\x00\x00\x0e\x47\x00\x00\x6a\x47\x00\x00\xc6\x47\x00\x00\x22\x48\x00\x00\x7e\x48\x00\x00\xda\x48\x00\x00\x36\x49\x00\x00\x92\x49\x00\x00\xee\x49\x00\x00\x4a\x4a\x00\x00\xa6\x4a\x00\x00\x02\x4b\x00\x00\x5e\x4b\x00\x00\xba\x4b\x00\x00\x16\x4c\x00\x00\x72\x4c\x00\x00\xce\x4c\x00\x00\x2a\x4d\x00\x00\x86\x4d\x00\x00"#+alex_base = AlexA# "\xf7\xff\xff\xff\x6c\x00\x00\x00\xc8\x00\x00\x00\x3c\x01\x00\x00\x40\x01\x00\x00\x44\x01\x00\x00\x4b\x01\x00\x00\x70\x00\x00\x00\x74\x00\x00\x00\x78\x00\x00\x00\x7c\x00\x00\x00\x7d\x00\x00\x00\x81\x00\x00\x00\x48\x01\x00\x00\x49\x01\x00\x00\x4f\x01\x00\x00\x50\x01\x00\x00\x53\x01\x00\x00\x51\x01\x00\x00\x54\x01\x00\x00\x55\x01\x00\x00\x57\x01\x00\x00\xfb\xff\xff\xff\x00\x00\x00\x00\xfc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa2\xff\xff\xff\x9a\xff\xff\xff\xa5\xff\xff\xff\x8f\xff\xff\xff\xa8\xff\xff\xff\x9d\xff\xff\xff\xa9\xff\xff\xff\xaa\xff\xff\xff\x91\xff\xff\xff\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x01\x00\x00\xed\xff\xff\xff\x9a\x00\x00\x00\xa0\x00\x00\x00\xa6\x00\x00\x00\xab\x00\x00\x00\xb8\x00\x00\x00\x6b\x01\x00\x00\x71\x01\x00\x00\x78\x01\x00\x00\x7d\x01\x00\x00\x99\x01\x00\x00\x9e\x01\x00\x00\xc3\x01\x00\x00\xcc\x01\x00\x00\xd1\x01\x00\x00\xe9\x01\x00\x00\xee\x01\x00\x00\xf3\x01\x00\x00\xf8\x01\x00\x00\x10\x02\x00\x00\x18\x02\x00\x00\x1d\x02\x00\x00\x22\x02\x00\x00\x28\x02\x00\x00\x3a\x02\x00\x00\x44\x02\x00\x00\x49\x02\x00\x00\x52\x02\x00\x00\x61\x02\x00\x00\x6e\x02\x00\x00\x73\x02\x00\x00\x79\x02\x00\x00\x91\x02\x00\x00\x96\x02\x00\x00\x9e\x02\x00\x00\xa3\x02\x00\x00\xbf\x02\x00\x00\xc6\x02\x00\x00\xcf\x02\x00\x00\xd7\x02\x00\x00\xdf\x02\x00\x00\xe7\x02\x00\x00\xf7\x02\x00\x00\x09\x03\x00\x00\x0f\x03\x00\x00\x14\x03\x00\x00\x19\x03\x00\x00\x31\x03\x00\x00\x36\x03\x00\x00\x3b\x03\x00\x00\x40\x03\x00\x00\x58\x03\x00\x00\x60\x03\x00\x00\x66\x03\x00\x00\x70\x03\x00\x00\x7e\x03\x00\x00\x88\x03\x00\x00\x8d\x03\x00\x00\x96\x03\x00\x00\xae\x03\x00\x00\xb3\x03\x00\x00\xbb\x03\x00\x00\xcb\x03\x00\x00\xd8\x03\x00\x00\xdd\x03\x00\x00\xe8\x03\x00\x00\xf8\x03\x00\x00\x00\x04\x00\x00\x05\x04\x00\x00\x0a\x04\x00\x00\x00\x00\x00\x00\xe4\xff\xff\xff\x08\x00\x00\x00\x2c\x04\x00\x00\x09\x00\x00\x00\x9d\x04\x00\x00\x0e\x05\x00\x00\x7f\x05\x00\x00\xf0\x05\x00\x00\x61\x06\x00\x00\xbd\x06\x00\x00\xe7\xff\xff\xff\x19\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x07\x00\x00\xd1\x07\x00\x00\x2d\x08\x00\x00\x89\x08\x00\x00\xe5\x08\x00\x00\x41\x09\x00\x00\x9d\x09\x00\x00\xf9\x09\x00\x00\x55\x0a\x00\x00\xb1\x0a\x00\x00\x0d\x0b\x00\x00\x69\x0b\x00\x00\xc5\x0b\x00\x00\x21\x0c\x00\x00\x7d\x0c\x00\x00\xd9\x0c\x00\x00\x35\x0d\x00\x00\x91\x0d\x00\x00\xed\x0d\x00\x00\x49\x0e\x00\x00\xa5\x0e\x00\x00\x01\x0f\x00\x00\x5d\x0f\x00\x00\xb9\x0f\x00\x00\x15\x10\x00\x00\x71\x10\x00\x00\xcd\x10\x00\x00\x29\x11\x00\x00\x85\x11\x00\x00\xe1\x11\x00\x00\x3d\x12\x00\x00\x99\x12\x00\x00\xf5\x12\x00\x00\x51\x13\x00\x00\xad\x13\x00\x00\x09\x14\x00\x00\x65\x14\x00\x00\xc1\x14\x00\x00\x1d\x15\x00\x00\x79\x15\x00\x00\xd5\x15\x00\x00\x31\x16\x00\x00\x8d\x16\x00\x00\xe9\x16\x00\x00\x45\x17\x00\x00\xa1\x17\x00\x00\xfd\x17\x00\x00\x59\x18\x00\x00\xb5\x18\x00\x00\x11\x19\x00\x00\x6d\x19\x00\x00\xc9\x19\x00\x00\x25\x1a\x00\x00\x81\x1a\x00\x00\xdd\x1a\x00\x00\x39\x1b\x00\x00\x95\x1b\x00\x00\xf1\x1b\x00\x00\x4d\x1c\x00\x00\xa9\x1c\x00\x00\x05\x1d\x00\x00\x61\x1d\x00\x00\xbd\x1d\x00\x00\x19\x1e\x00\x00\x75\x1e\x00\x00\xd1\x1e\x00\x00\x2d\x1f\x00\x00\x89\x1f\x00\x00\xe5\x1f\x00\x00\x41\x20\x00\x00\x9d\x20\x00\x00\xf9\x20\x00\x00\x55\x21\x00\x00\xb1\x21\x00\x00\x0d\x22\x00\x00\x69\x22\x00\x00\xc5\x22\x00\x00\x21\x23\x00\x00\x7d\x23\x00\x00\xd9\x23\x00\x00\x35\x24\x00\x00\x91\x24\x00\x00\xed\x24\x00\x00\x49\x25\x00\x00\xa5\x25\x00\x00\x01\x26\x00\x00\x5d\x26\x00\x00\xb9\x26\x00\x00\x15\x27\x00\x00\x71\x27\x00\x00\xcd\x27\x00\x00\x29\x28\x00\x00\x85\x28\x00\x00\xe1\x28\x00\x00\x3d\x29\x00\x00\x99\x29\x00\x00\xf5\x29\x00\x00\x51\x2a\x00\x00\xad\x2a\x00\x00\x09\x2b\x00\x00\x65\x2b\x00\x00\xc1\x2b\x00\x00\x1d\x2c\x00\x00\x79\x2c\x00\x00\xd5\x2c\x00\x00\x31\x2d\x00\x00\x8d\x2d\x00\x00\xe9\x2d\x00\x00\x45\x2e\x00\x00\xa1\x2e\x00\x00\xfd\x2e\x00\x00\x59\x2f\x00\x00\xb5\x2f\x00\x00\x11\x30\x00\x00\x6d\x30\x00\x00\xc9\x30\x00\x00\x25\x31\x00\x00\x81\x31\x00\x00\xdd\x31\x00\x00\x39\x32\x00\x00\x95\x32\x00\x00\xf1\x32\x00\x00\x4d\x33\x00\x00\xa9\x33\x00\x00\x05\x34\x00\x00\x61\x34\x00\x00\xbd\x34\x00\x00\x19\x35\x00\x00\x75\x35\x00\x00\xd1\x35\x00\x00\x2d\x36\x00\x00\x89\x36\x00\x00\xe5\x36\x00\x00\x41\x37\x00\x00\x9d\x37\x00\x00\xf9\x37\x00\x00\x55\x38\x00\x00\xb1\x38\x00\x00\x0d\x39\x00\x00\x69\x39\x00\x00\xc5\x39\x00\x00\x21\x3a\x00\x00\x7d\x3a\x00\x00\xd9\x3a\x00\x00\x35\x3b\x00\x00\x91\x3b\x00\x00\xed\x3b\x00\x00\x49\x3c\x00\x00\xa5\x3c\x00\x00\x01\x3d\x00\x00\x5d\x3d\x00\x00\xb9\x3d\x00\x00\x15\x3e\x00\x00\x71\x3e\x00\x00\xcd\x3e\x00\x00\x29\x3f\x00\x00\x85\x3f\x00\x00\xe1\x3f\x00\x00\x3d\x40\x00\x00\x99\x40\x00\x00\x00\x00\x00\x00\xa6\xff\xff\xff\xf5\x40\x00\x00\x51\x41\x00\x00\xad\x41\x00\x00\x09\x42\x00\x00\x65\x42\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xff\xff\xff\x63\x00\x00\x00\x00\x00\x00\x00\xc1\x42\x00\x00\x1d\x43\x00\x00\x79\x43\x00\x00\xd5\x43\x00\x00\x31\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x44\x00\x00\xe9\x44\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x45\x00\x00\xa1\x45\x00\x00\xfd\x45\x00\x00\x59\x46\x00\x00\xb5\x46\x00\x00\x11\x47\x00\x00\x6d\x47\x00\x00\xc9\x47\x00\x00\x25\x48\x00\x00\x81\x48\x00\x00\xdd\x48\x00\x00\x39\x49\x00\x00\x95\x49\x00\x00\xf1\x49\x00\x00\x4d\x4a\x00\x00\xa9\x4a\x00\x00\x05\x4b\x00\x00\x61\x4b\x00\x00\xbd\x4b\x00\x00\x19\x4c\x00\x00\x75\x4c\x00\x00\xd1\x4c\x00\x00\x2d\x4d\x00\x00\x89\x4d\x00\x00\xe5\x4d\x00\x00\x41\x4e\x00\x00\x9d\x4e\x00\x00\xf9\x4e\x00\x00\x55\x4f\x00\x00\xb1\x4f\x00\x00\x0d\x50\x00\x00\x69\x50\x00\x00\xc5\x50\x00\x00\x21\x51\x00\x00\x7d\x51\x00\x00"#  alex_table :: AlexAddr-alex_table = AlexA# "\x00\x00\x75\x00\x26\x00\x26\x00\x26\x00\x17\x00\xff\xff\x1a\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x1c\x00\x25\x00\x28\x00\x68\x00\xff\xff\xff\xff\x6a\x00\x0e\x01\x26\x00\x44\x01\x26\x01\x44\x01\x44\x01\x44\x01\x44\x01\x25\x01\x1f\x01\x20\x01\x44\x01\x44\x01\x44\x01\x74\x00\x17\x01\x44\x01\x27\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x1a\x01\x19\x01\x44\x01\x1b\x01\x44\x01\x1d\x01\x23\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\xe4\x00\x44\x01\x44\x01\xe0\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x22\x01\x44\x01\x44\x01\x1c\x01\x44\x01\xd9\x00\x44\x01\xba\x00\xb4\x00\x44\x01\x86\x00\x44\x01\x07\x01\x7c\x00\x44\x01\x44\x01\x7a\x00\xb0\x00\x44\x01\xa5\x00\x99\x00\xf6\x00\x90\x00\xfc\x00\x44\x01\x01\x01\x44\x01\x81\x00\x44\x01\x44\x01\x44\x01\x29\x00\x1e\x01\x24\x01\x44\x01\x76\x00\x26\x00\x26\x00\x26\x00\x1b\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x09\x00\x09\x00\x09\x00\xff\xff\x09\x00\x09\x00\x09\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0b\x00\xff\xff\x26\x00\x26\x00\x26\x00\x26\x00\x0b\x00\x18\x01\x15\x01\x16\x01\x09\x00\x00\x00\x00\x00\x00\x00\x09\x00\x73\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x26\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1d\x00\x2b\x00\x00\x00\xff\xff\x0a\x00\x2d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x26\x00\x26\x00\x26\x00\x00\x00\x00\x00\xff\xff\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x0d\x00\x69\x00\x26\x00\x44\x01\x26\x01\x44\x01\x44\x01\x44\x01\x44\x01\x25\x01\x1f\x01\x20\x01\x44\x01\x44\x01\x44\x01\x74\x00\x17\x01\x44\x01\x27\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x28\x01\x1a\x01\x19\x01\x44\x01\x1b\x01\x44\x01\x1d\x01\x23\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\xe4\x00\x44\x01\x44\x01\xe0\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x22\x01\x44\x01\x44\x01\x1c\x01\x44\x01\xd9\x00\x44\x01\xba\x00\xb4\x00\x44\x01\x86\x00\x44\x01\x07\x01\x7c\x00\x44\x01\x44\x01\x7a\x00\xb0\x00\x44\x01\xa5\x00\x99\x00\xf6\x00\x90\x00\xfc\x00\x44\x01\x01\x01\x44\x01\x81\x00\x44\x01\x44\x01\x44\x01\x29\x00\x1e\x01\x24\x01\x44\x01\x26\x00\x26\x00\x26\x00\x75\x00\x26\x00\x26\x00\x26\x00\x77\x00\x26\x00\x26\x00\x26\x00\xff\xff\xff\xff\xff\xff\x27\x00\x27\x00\x27\x00\x27\x00\xff\xff\xff\xff\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\x26\x00\xff\xff\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x27\x00\x00\x00\x73\x00\x2f\x00\x00\x00\x00\x00\x73\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x39\x00\x40\x00\xff\xff\x61\x00\x00\x00\x00\x00\x00\x00\x55\x00\xff\xff\x00\x00\x64\x00\x00\x00\x00\x00\x32\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x0f\x01\x00\x00\x12\x00\x69\x00\x14\x00\xff\xff\x15\x00\x69\x00\x00\x00\x10\x00\xff\xff\x69\x00\x13\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x00\x00\x00\x34\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x3b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3a\x00\xff\xff\x00\x00\x00\x00\x3c\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x42\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x44\x00\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x45\x00\x00\x00\x00\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x00\x00\x47\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x51\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x4d\x00\x00\x00\xff\xff\x00\x00\x00\x00\x48\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x4e\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x52\x00\xff\xff\x00\x00\x53\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x59\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x54\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x5d\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x5f\x00\x5a\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x60\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x62\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x63\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\xff\xff\x6e\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\xff\xff\x6e\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x70\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\xff\xff\x6e\x00\x00\x00\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x70\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\xff\xff\x6f\x00\x00\x00\x6f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x71\x00\x6d\x00\x6d\x00\x72\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\xff\xff\x6d\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x00\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x00\x6f\x00\x6d\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x6f\x00\x00\x00\x6f\x00\x45\x01\x6f\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x6b\x00\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x21\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x78\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x79\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xca\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xaa\x00\x7b\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x7d\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x7e\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x7f\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x80\x00\x89\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x82\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x83\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x84\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x85\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe9\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x87\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x88\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8a\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8b\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8c\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8d\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xbe\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x0d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8e\x00\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x8f\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x91\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x92\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x93\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x94\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x95\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x96\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x97\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x98\x00\x45\x01\x45\x01\xa1\x00\x45\x01\x45\x01\x14\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9a\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9b\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9c\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9d\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9e\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x9f\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xdd\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa0\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa4\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa6\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa7\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa8\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xa9\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xab\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xac\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xad\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xae\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xaf\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd1\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb1\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb5\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb6\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb7\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb8\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc7\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xb9\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xbb\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xbc\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xbd\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xbf\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc0\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc1\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc4\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc5\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc6\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xcb\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xcc\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc8\x00\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xc9\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xcd\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xce\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xcf\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd0\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd4\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd5\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd6\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd7\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xd8\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xda\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xdb\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xdc\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\xea\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xde\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xdf\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe1\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe5\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe6\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe7\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xe8\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xed\x00\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\xeb\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\xec\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xee\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xef\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf0\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf1\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf2\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf3\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf4\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf5\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf7\x00\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf8\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xf9\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xfa\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xfb\x00\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xfd\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xfe\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\xff\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x02\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x03\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x04\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x05\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x06\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x08\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x09\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x0a\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x0b\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x0c\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x10\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x11\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x12\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x13\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x46\x01\x45\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x45\x01\x46\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x44\x01\x45\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x45\x01\x44\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2e\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x29\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x41\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x43\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x42\x01\x45\x01\x42\x01\x3c\x01\x45\x01\x2a\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x2b\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3c\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2c\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x2d\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3d\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x31\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3e\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x3f\x01\x45\x01\x3f\x01\x47\x01\x45\x01\x33\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x40\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x34\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x32\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x40\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x43\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x44\x01\x45\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x2f\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x30\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x48\x01\x44\x01\x44\x01\x49\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x45\x01\x44\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x35\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x3f\x01\x45\x01\x3f\x01\x47\x01\x45\x01\x36\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x36\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x37\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x38\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x42\x01\x45\x01\x42\x01\x47\x01\x45\x01\x39\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x39\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x3a\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x47\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x45\x01\x00\x00\x45\x01\x46\x01\x45\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x47\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x44\x01\x46\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x48\x01\x44\x01\x44\x01\x49\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x44\x01\x44\x01\x44\x01\x00\x00\x44\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x01\x46\x01\x44\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x46\x01\x00\x00\x46\x01\x00\x00\x46\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#+alex_table = AlexA# "\x00\x00\x7b\x00\x24\x00\x24\x00\x24\x00\x17\x00\xff\xff\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x1a\x00\x23\x00\x26\x00\x6e\x00\xff\xff\xff\xff\x70\x00\x1e\x01\x28\x01\x24\x00\x57\x01\x39\x01\x57\x01\x57\x01\x57\x01\x57\x01\x38\x01\x2f\x01\x30\x01\x57\x01\x57\x01\x57\x01\x7a\x00\x27\x01\x57\x01\x3a\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x2a\x01\x29\x01\x57\x01\x2b\x01\x57\x01\x2d\x01\x33\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\xea\x00\x57\x01\x57\x01\xe6\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x32\x01\x57\x01\x57\x01\x2c\x01\x57\x01\xdf\x00\x57\x01\xc0\x00\xba\x00\x57\x01\x8c\x00\x57\x01\x17\x01\x82\x00\x57\x01\x57\x01\x80\x00\xb6\x00\x57\x01\xab\x00\x9f\x00\xfc\x00\x96\x00\x0d\x01\x57\x01\x07\x01\x57\x01\x87\x00\x57\x01\x57\x01\x57\x01\x27\x00\x2e\x01\x37\x01\x57\x01\x7c\x00\x24\x00\x24\x00\x24\x00\x19\x00\x0b\x00\x0b\x00\x0b\x00\xff\xff\x09\x00\x09\x00\x09\x00\xff\xff\x09\x00\x09\x00\x09\x00\xff\xff\xff\xff\x0b\x00\x0b\x00\x0b\x00\xff\xff\x24\x00\x24\x00\x24\x00\x24\x00\x0b\x00\x26\x01\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\xff\xff\x09\x00\x79\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x24\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x1b\x00\x29\x00\x00\x00\xff\xff\x0a\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7b\x00\x24\x00\x24\x00\x24\x00\x00\x00\x00\x00\xff\xff\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x00\x0d\x00\x6f\x00\x24\x00\x57\x01\x39\x01\x57\x01\x57\x01\x57\x01\x57\x01\x38\x01\x2f\x01\x30\x01\x57\x01\x57\x01\x57\x01\x7a\x00\x27\x01\x57\x01\x3a\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x3b\x01\x2a\x01\x29\x01\x57\x01\x2b\x01\x57\x01\x2d\x01\x33\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\xea\x00\x57\x01\x57\x01\xe6\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x32\x01\x57\x01\x57\x01\x2c\x01\x57\x01\xdf\x00\x57\x01\xc0\x00\xba\x00\x57\x01\x8c\x00\x57\x01\x17\x01\x82\x00\x57\x01\x57\x01\x80\x00\xb6\x00\x57\x01\xab\x00\x9f\x00\xfc\x00\x96\x00\x0d\x01\x57\x01\x07\x01\x57\x01\x87\x00\x57\x01\x57\x01\x57\x01\x27\x00\x2e\x01\x37\x01\x57\x01\x24\x00\x24\x00\x24\x00\x7b\x00\x24\x00\x24\x00\x24\x00\x7d\x00\x24\x00\x24\x00\x24\x00\xff\xff\xff\xff\xff\xff\x25\x00\x25\x00\x25\x00\x25\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\xff\xff\xff\xff\x24\x00\xff\xff\x00\x00\x00\x00\x24\x00\x00\x00\x00\x00\x25\x01\x00\x00\x79\x00\x00\x00\x25\x00\x00\x00\x79\x00\x2d\x00\x00\x00\x00\x00\x79\x00\x00\x00\x28\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x37\x00\x3e\x00\x00\x00\x67\x00\xff\xff\x00\x00\x00\x00\x5b\x00\x00\x00\x00\x00\x6a\x00\xff\xff\x00\x00\x30\x00\x00\x00\x00\x00\xff\xff\x55\x00\x00\x00\x1b\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x1f\x01\x00\x00\x12\x00\x6f\x00\x14\x00\xff\xff\x15\x00\x6f\x00\x00\x00\x10\x00\xff\xff\x6f\x00\x13\x00\x34\x01\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x00\x00\x00\x31\x00\x00\x00\x00\x00\x11\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x32\x00\x00\x00\x00\x00\x08\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x33\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x00\x00\x00\x00\xff\xff\x34\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x35\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x2f\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x39\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x38\x00\x3a\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x3c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x36\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x3f\x00\xff\xff\x00\x00\x00\x00\x40\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x41\x00\x00\x00\x00\x00\x42\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x45\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x47\x00\x4f\x00\x00\x00\x48\x00\x00\x00\x00\x00\x53\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x4b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x46\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x4a\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x51\x00\xff\xff\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x57\x00\xff\xff\x52\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x59\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x58\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x5c\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x5f\x00\x61\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x5a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x63\x00\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x65\x00\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x66\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x68\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x74\x00\x6c\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x76\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\xff\xff\x74\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x76\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\xff\xff\x74\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x76\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x00\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\x74\x00\xff\xff\x74\x00\x00\x00\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x76\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\xff\xff\x75\x00\x00\x00\x75\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x00\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x77\x00\x73\x00\x73\x00\x78\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\xff\xff\x73\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x73\x00\x73\x00\x73\x00\x00\x00\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x00\x75\x00\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x00\x00\x75\x00\x58\x01\x75\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x71\x00\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x31\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x7e\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x7f\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd0\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb0\x00\x81\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x83\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x84\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x85\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x86\x00\x8f\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x88\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x89\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x8a\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x8b\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xef\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x8d\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x8e\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x90\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x91\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x92\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x93\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x1d\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x94\x00\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x95\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x97\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x98\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x99\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x9a\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x9b\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x9c\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x9d\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x9e\x00\x58\x01\x58\x01\xa7\x00\x58\x01\x58\x01\x24\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa0\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa1\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa3\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe3\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa6\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xa9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xaa\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xac\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xad\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xae\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xaf\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb1\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb3\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd7\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb7\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xb9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xbb\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xbc\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xbd\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xbe\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xcd\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xbf\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc1\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc3\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc6\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc7\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xc9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xca\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xcb\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xcc\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd1\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xce\x00\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xcf\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd3\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd6\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xd9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xda\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xdb\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xdc\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xdd\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xde\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe0\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe1\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\xf0\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe7\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xe9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xeb\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xec\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xed\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xee\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf3\x00\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\xf1\x00\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\xf2\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf4\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf5\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf6\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf7\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf8\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xf9\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xfa\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xfb\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xfd\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xfe\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\xff\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x01\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x02\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x03\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x04\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x05\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x06\x01\x58\x01\x58\x01\x58\x01\x58\x01\x11\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x08\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x09\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x0a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x0b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x0c\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x0e\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x0f\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x10\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x12\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x13\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x14\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x15\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x16\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x18\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x19\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x1a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x1b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x1c\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x20\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x21\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x22\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x23\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x59\x01\x58\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x58\x01\x59\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x57\x01\x58\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x58\x01\x57\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x41\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x3c\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x54\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x56\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x55\x01\x58\x01\x55\x01\x4f\x01\x58\x01\x3d\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x3e\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x4f\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x3f\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x40\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x50\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x44\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x51\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x52\x01\x58\x01\x52\x01\x5a\x01\x58\x01\x46\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x53\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x47\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x45\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x53\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x56\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x57\x01\x58\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x42\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x43\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x5b\x01\x57\x01\x57\x01\x5c\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x58\x01\x57\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x48\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x52\x01\x58\x01\x52\x01\x5a\x01\x58\x01\x49\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x49\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x4a\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x4b\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x55\x01\x58\x01\x55\x01\x5a\x01\x58\x01\x4c\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4c\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x4d\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x4e\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x5a\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x58\x01\x00\x00\x58\x01\x59\x01\x58\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x5a\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x57\x01\x59\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x5b\x01\x57\x01\x57\x01\x5c\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x57\x01\x57\x01\x57\x01\x00\x00\x57\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x01\x59\x01\x57\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x59\x01\x00\x00\x59\x01\x00\x00\x59\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#  alex_check :: AlexAddr-alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x65\x00\x6e\x00\x64\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x23\x00\x2d\x00\x0a\x00\x0a\x00\x2d\x00\x6f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x2e\x00\x21\x00\x2e\x00\x20\x00\xff\xff\xff\xff\xff\xff\x20\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x5c\x00\x23\x00\xff\xff\x20\x00\x5c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x65\x00\x7b\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\x42\x00\x43\x00\x20\x00\x45\x00\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\x69\x00\xff\xff\x74\x00\xff\xff\x63\x00\x7b\x00\x64\x00\x20\x00\x65\x00\x7b\x00\xff\xff\x6e\x00\x20\x00\x7b\x00\x6f\x00\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x4e\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x53\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x20\x00\xff\xff\xff\xff\x4c\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x49\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x4f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\x4d\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x4c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x44\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x44\x00\x45\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x54\x00\xff\xff\x20\x00\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x54\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x50\x00\x59\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x50\x00\x20\x00\xff\xff\x49\x00\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x50\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x4f\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x52\x00\x53\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x54\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\x53\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x49\x00\x42\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x4c\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\xff\xff\x20\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x45\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_check = AlexA# "\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x65\x00\x6e\x00\x64\x00\x7b\x00\x63\x00\x6f\x00\x64\x00\x7d\x00\x65\x00\x23\x00\x2d\x00\x0a\x00\x0a\x00\x2d\x00\x6f\x00\x2e\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x20\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x2e\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x2d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x21\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x5c\x00\x23\x00\xff\xff\x20\x00\x5c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x62\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2d\x00\x65\x00\x7b\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\x0a\x00\x0a\x00\x20\x00\x0a\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x21\x00\xff\xff\x2d\x00\xff\xff\x20\x00\xff\xff\x2d\x00\x23\x00\xff\xff\xff\xff\x2d\x00\xff\xff\x2d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\x42\x00\x43\x00\xff\xff\x45\x00\x20\x00\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\x4c\x00\x20\x00\xff\xff\x4f\x00\xff\xff\xff\xff\x20\x00\x53\x00\xff\xff\x5c\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\x69\x00\xff\xff\x74\x00\xff\xff\x63\x00\x7b\x00\x64\x00\x20\x00\x65\x00\x7b\x00\xff\xff\x6e\x00\x20\x00\x7b\x00\x6f\x00\x7b\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7b\x00\xff\xff\x50\x00\xff\xff\xff\xff\x7b\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x54\x00\xff\xff\xff\xff\x7d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x4f\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x4e\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x53\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x55\x00\x4c\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x49\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4e\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x4f\x00\x20\x00\xff\xff\xff\xff\x4d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4c\x00\xff\xff\x45\x00\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x44\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x44\x00\x45\x00\xff\xff\x41\x00\xff\xff\xff\xff\x4a\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x5f\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x41\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x54\x00\x20\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x50\x00\x49\x00\x20\x00\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x41\x00\x20\x00\x53\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x54\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x43\x00\x49\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x54\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x4d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\x52\x00\x53\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x54\x00\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x49\x00\x53\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x42\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x4c\x00\x45\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\x20\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\x54\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x49\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x45\x00\xff\xff\xff\xff\x21\x00\x4e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x0a\x00\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\xff\xff\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5c\x00\x5d\x00\x5e\x00\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7c\x00\x21\x00\x7e\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\xff\xff\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#  alex_deflt :: AlexAddr-alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\x67\x00\xff\xff\xff\xff\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\x6c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#+alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6d\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\x18\x00\xff\xff\xff\xff\x18\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\x6d\x00\xff\xff\xff\xff\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\x72\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x36\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# -alex_accept = listArray (0::Int,329) [[],[(AlexAccPred  (alex_action_26) ( not' eof ))],[],[(AlexAcc (alex_action_29))],[],[(AlexAcc (alex_action_28))],[],[(AlexAccPred  (alex_action_1) (alexRightContext 25))],[(AlexAccPred  (alex_action_0) (alexRightContext 22)),(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_0) (alexRightContext 22)),(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) (alexRightContext 25)),(AlexAcc (alex_action_2))],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_4) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_77))],[(AlexAccPred  (alex_action_21) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_20))],[(AlexAccPred  (alex_action_21) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_83))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_83))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_83))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_83))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_22) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_24))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_61))],[],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_65))],[],[(AlexAcc (alex_action_66))],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[(AlexAcc (alex_action_82))],[],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[(AlexAcc (alex_action_83))],[],[],[]]-{-# LINE 193 "src/full/Agda/Syntax/Parser/Lexer.x" #-}+alex_accept = listArray (0::Int,348) [[],[(AlexAccPred  (alex_action_29) ( not' eof ))],[],[(AlexAcc (alex_action_32))],[],[(AlexAcc (alex_action_31))],[],[(AlexAccPred  (alex_action_4) ( eof ))],[(AlexAccPred  (alex_action_0) (alexRightContext 22)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_0) (alexRightContext 22)),(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[],[(AlexAccSkip)],[(AlexAccPred  (alex_action_1) ( keepComments )),(AlexAccSkip)],[(AlexAccSkip)],[(AlexAccPred  (alex_action_5) ( inState code ))],[],[],[],[],[],[],[],[],[],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_84))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_10))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_23))],[(AlexAccPred  (alex_action_24) ( not' (followedBy '#') ))],[],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof )),(AlexAcc (alex_action_90))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[(AlexAccPred  (alex_action_25) ( keepComments .&&. (followedBy '\n' .||. eof) )),(AlexAccSkipPred  ( followedBy '\n' .||. eof ))],[],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_27))],[(AlexAccSkip)],[(AlexAccSkip)],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))],[(AlexAcc (alex_action_51))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_52))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_53))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_54))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_55))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_56))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_57))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_58))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_59))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_60))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_61))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_62))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_63))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_64))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_65))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_66))],[],[(AlexAcc (alex_action_67))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_68))],[(AlexAcc (alex_action_69))],[(AlexAcc (alex_action_71))],[(AlexAcc (alex_action_70))],[(AlexAcc (alex_action_72))],[(AlexAcc (alex_action_73))],[(AlexAcc (alex_action_74))],[(AlexAcc (alex_action_75))],[(AlexAcc (alex_action_76))],[(AlexAcc (alex_action_77))],[(AlexAcc (alex_action_78))],[(AlexAcc (alex_action_79))],[(AlexAcc (alex_action_80))],[(AlexAcc (alex_action_81))],[(AlexAcc (alex_action_82))],[(AlexAccPred  (alex_action_83) (alexRightContext 309))],[],[(AlexAccSkip)],[(AlexAcc (alex_action_85))],[(AlexAcc (alex_action_86))],[(AlexAcc (alex_action_87))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_88))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[(AlexAcc (alex_action_89))],[],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[(AlexAcc (alex_action_90))],[],[],[]]+{-# LINE 208 "src/full/Agda/Syntax/Parser/Lexer.x" #-}   -- | This is the initial state for parsing a literate file. Code blocks@@ -147,82 +148,88 @@ tex = 7 alex_action_0 =  end_  alex_action_1 =  withInterval TokTeX -alex_action_2 =  withInterval TokTeX -alex_action_4 =  begin_ tex -alex_action_7 =  begin pragma -alex_action_8 =  symbol SymOpenPragma -alex_action_9 =  endWith $ symbol SymClosePragma -alex_action_10 =  keyword KwOPTIONS -alex_action_11 =  keyword KwBUILTIN -alex_action_12 =  keyword KwCOMPILED_DATA -alex_action_13 =  keyword KwCOMPILED_TYPE -alex_action_14 =  keyword KwCOMPILED -alex_action_15 =  keyword KwCOMPILED_EPIC -alex_action_16 =  keyword KwIMPORT -alex_action_17 =  keyword KwIMPOSSIBLE -alex_action_18 =  keyword KwETA -alex_action_19 =  keyword KwLINE -alex_action_20 =  withInterval $ TokString -alex_action_21 =  nestedComment -alex_action_22 =  withInterval TokComment -alex_action_24 =  begin bol_ -alex_action_26 =  offsideRule -alex_action_28 =  endWith newLayoutContext -alex_action_29 =  emptyLayout -alex_action_30 =  keyword KwLet -alex_action_31 =  keyword KwIn -alex_action_32 =  keyword KwWhere -alex_action_33 =  keyword KwField -alex_action_34 =  keyword KwWith -alex_action_35 =  keyword KwRewrite -alex_action_36 =  keyword KwPostulate -alex_action_37 =  keyword KwPrimitive -alex_action_38 =  keyword KwOpen -alex_action_39 =  keyword KwImport -alex_action_40 =  keyword KwModule -alex_action_41 =  keyword KwData -alex_action_42 =  keyword KwCoData -alex_action_43 =  keyword KwRecord -alex_action_44 =  keyword KwConstructor -alex_action_45 =  keyword KwInfix -alex_action_46 =  keyword KwInfixL -alex_action_47 =  keyword KwInfixR -alex_action_48 =  keyword KwMutual -alex_action_49 =  keyword KwAbstract -alex_action_50 =  keyword KwPrivate -alex_action_51 =  keyword KwSet -alex_action_52 =  keyword KwProp -alex_action_53 =  keyword KwForall -alex_action_54 =  withInterval' (read . drop 3) TokSetN -alex_action_55 =  keyword KwQuoteGoal -alex_action_56 =  keyword KwQuote -alex_action_57 =  keyword KwSyntax -alex_action_58 =  keyword KwUsing -alex_action_59 =  keyword KwHiding -alex_action_60 =  keyword KwRenaming -alex_action_61 =  endWith $ keyword KwTo -alex_action_62 =  keyword KwPublic -alex_action_63 =  hole -alex_action_64 =  symbol SymEllipsis -alex_action_65 =  symbol SymDot -alex_action_66 =  symbol SymSemi -alex_action_67 =  symbol SymColon -alex_action_68 =  symbol SymEqual -alex_action_69 =  symbol SymUnderscore -alex_action_70 =  symbol SymQuestionMark -alex_action_71 =  symbol SymBar -alex_action_72 =  symbol SymOpenParen -alex_action_73 =  symbol SymCloseParen -alex_action_74 =  symbol SymArrow -alex_action_75 =  symbol SymLambda -alex_action_76 =  symbol SymAs -alex_action_77 =  symbol SymOpenBrace -alex_action_78 =  symbol SymCloseBrace -alex_action_79 =  litChar -alex_action_80 =  litString -alex_action_81 =  literal LitInt -alex_action_82 =  literal LitFloat -alex_action_83 =  identifier +alex_action_4 =  end_ +alex_action_5 =  begin_ tex +alex_action_8 =  begin pragma +alex_action_9 =  symbol SymOpenPragma +alex_action_10 =  endWith $ symbol SymClosePragma +alex_action_11 =  keyword KwOPTIONS +alex_action_12 =  keyword KwBUILTIN +alex_action_13 =  keyword KwCOMPILED_DATA +alex_action_14 =  keyword KwCOMPILED_TYPE +alex_action_15 =  keyword KwCOMPILED +alex_action_16 =  keyword KwCOMPILED_EPIC +alex_action_17 =  keyword KwCOMPILED_JS +alex_action_18 =  keyword KwSTATIC +alex_action_19 =  keyword KwIMPORT +alex_action_20 =  keyword KwIMPOSSIBLE +alex_action_21 =  keyword KwETA +alex_action_22 =  keyword KwLINE +alex_action_23 =  withInterval $ TokString +alex_action_24 =  nestedComment +alex_action_25 =  withInterval TokComment +alex_action_27 =  begin bol_ +alex_action_29 =  offsideRule +alex_action_31 =  endWith newLayoutContext +alex_action_32 =  emptyLayout +alex_action_33 =  keyword KwLet +alex_action_34 =  keyword KwIn +alex_action_35 =  keyword KwWhere +alex_action_36 =  keyword KwField +alex_action_37 =  keyword KwWith +alex_action_38 =  keyword KwRewrite +alex_action_39 =  keyword KwPostulate +alex_action_40 =  keyword KwPrimitive +alex_action_41 =  keyword KwOpen +alex_action_42 =  keyword KwImport +alex_action_43 =  keyword KwModule +alex_action_44 =  keyword KwData +alex_action_45 =  keyword KwCoData +alex_action_46 =  keyword KwRecord +alex_action_47 =  keyword KwConstructor +alex_action_48 =  keyword KwInfix +alex_action_49 =  keyword KwInfixL +alex_action_50 =  keyword KwInfixR +alex_action_51 =  keyword KwMutual +alex_action_52 =  keyword KwAbstract +alex_action_53 =  keyword KwPrivate +alex_action_54 =  keyword KwSet +alex_action_55 =  keyword KwProp +alex_action_56 =  keyword KwForall +alex_action_57 =  withInterval' (read . drop 3) TokSetN +alex_action_58 =  keyword KwQuoteGoal +alex_action_59 =  keyword KwQuote +alex_action_60 =  keyword KwQuoteTerm +alex_action_61 =  keyword KwUnquote +alex_action_62 =  keyword KwSyntax +alex_action_63 =  keyword KwUsing +alex_action_64 =  keyword KwHiding +alex_action_65 =  keyword KwRenaming +alex_action_66 =  endWith $ keyword KwTo +alex_action_67 =  keyword KwPublic +alex_action_68 =  hole +alex_action_69 =  symbol SymEllipsis +alex_action_70 =  symbol SymDotDot +alex_action_71 =  symbol SymDot +alex_action_72 =  symbol SymSemi +alex_action_73 =  symbol SymColon +alex_action_74 =  symbol SymEqual +alex_action_75 =  symbol SymUnderscore +alex_action_76 =  symbol SymQuestionMark +alex_action_77 =  symbol SymBar +alex_action_78 =  symbol SymOpenParen +alex_action_79 =  symbol SymCloseParen +alex_action_80 =  symbol SymArrow +alex_action_81 =  symbol SymLambda +alex_action_82 =  symbol SymAs +alex_action_83 =  symbol SymDoubleOpenBrace +alex_action_84 =  symbol SymOpenBrace +alex_action_85 =  symbol SymCloseBrace +alex_action_86 =  litChar +alex_action_87 =  litString +alex_action_88 =  literal LitInt +alex_action_89 =  literal LitFloat +alex_action_90 =  identifier  {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "templates/GenericTemplate.hs" #-} {-# LINE 1 "<built-in>" #-}@@ -253,10 +260,10 @@ #ifdef WORDS_BIGENDIAN   narrow16Int# i   where-	i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)-	high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))-	low  = int2Word# (ord# (indexCharOffAddr# arr off'))-	off' = off *# 2#+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))+        off' = off *# 2# #else   indexInt16OffAddr# arr off #endif@@ -353,12 +360,12 @@   	let-		!(base) = alexIndexInt32OffAddr alex_base s-		!((I# (ord_c))) = ord c-		!(offset) = (base +# ord_c)-		!(check)  = alexIndexInt16OffAddr alex_check offset+		(base) = alexIndexInt32OffAddr alex_base s+		((I# (ord_c))) = ord c+		(offset) = (base +# ord_c)+		(check)  = alexIndexInt16OffAddr alex_check offset 		-		!(new_s) = if (offset >=# 0#) && (check ==# ord_c)+		(new_s) = if (offset >=# 0#) && (check ==# ord_c) 			  then alexIndexInt16OffAddr alex_table offset 			  else alexIndexInt16OffAddr alex_deflt s 	in
dist/build/Agda/Syntax/Parser/Parser.hs view
@@ -1,4200 +1,4996 @@-{-# OPTIONS_GHC -fno-warn-overlapping-patterns #-}-{-# OPTIONS -fglasgow-exts -cpp #-}-{-# OPTIONS_GHC -fno-warn-incomplete-patterns-                -fno-warn-deprecated-flags #-}-{-| The parser is generated by Happy (<http://www.haskell.org/happy>).--}-module Agda.Syntax.Parser.Parser (-      moduleParser-    , exprParser-    , tokensParser-    , tests-    ) where--import Control.Arrow-import Control.Monad-import Control.Monad.State-import Data.Char-import Data.List-import Data.Maybe-import qualified Data.Traversable as T--import Agda.Syntax.Position hiding (tests)-import Agda.Syntax.Parser.Monad-import Agda.Syntax.Parser.Lexer-import Agda.Syntax.Parser.Tokens-import Agda.Syntax.Concrete-import Agda.Syntax.Concrete.Name-import Agda.Syntax.Concrete.Pretty-import Agda.Syntax.Common-import Agda.Syntax.Fixity-import Agda.Syntax.Notation-import Agda.Syntax.Literal--import Agda.Utils.Monad-import Agda.Utils.QuickCheck-import Agda.Utils.TestHelpers-import qualified Data.Array as Happy_Data_Array-import qualified GHC.Exts as Happy_GHC_Exts---- parser produced by Happy Version 1.18.5--newtype HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63 = HappyAbsSyn HappyAny-#if __GLASGOW_HASKELL__ >= 607-type HappyAny = Happy_GHC_Exts.Any-#else-type HappyAny = forall a . a-#endif-happyIn6 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn6 #-}-happyOut6 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Token])-happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut6 #-}-happyIn7 :: ([Token]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn7 #-}-happyOut7 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Token])-happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut7 #-}-happyIn8 :: (Token) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn8 #-}-happyOut8 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Token)-happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut8 #-}-happyIn9 :: (()) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn9 #-}-happyOut9 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (())-happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut9 #-}-happyIn10 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn10 #-}-happyOut10 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([Pragma], [Declaration]))-happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut10 #-}-happyIn11 :: t11 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn11 #-}-happyOut11 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t11-happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut11 #-}-happyIn12 :: t12 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn12 #-}-happyOut12 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t12-happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut12 #-}-happyIn13 :: t13 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn13 #-}-happyOut13 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t13-happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut13 #-}-happyIn14 :: (()) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn14 #-}-happyOut14 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (())-happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut14 #-}-happyIn15 :: (Integer) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn15 #-}-happyOut15 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Integer)-happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut15 #-}-happyIn16 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn16 #-}-happyOut16 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)-happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut16 #-}-happyIn17 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn17 #-}-happyOut17 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])-happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut17 #-}-happyIn18 :: (Arg Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn18 #-}-happyOut18 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Arg Name)-happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut18 #-}-happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn19 #-}-happyOut19 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Name])-happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut19 #-}-happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn20 #-}-happyOut20 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Name])-happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut20 #-}-happyIn21 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn21 #-}-happyOut21 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)-happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut21 #-}-happyIn22 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn22 #-}-happyOut22 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)-happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut22 #-}-happyIn23 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn23 #-}-happyOut23 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)-happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut23 #-}-happyIn24 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn24 #-}-happyOut24 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])-happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut24 #-}-happyIn25 :: ([Name]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn25 #-}-happyOut25 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Name])-happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut25 #-}-happyIn26 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn26 #-}-happyOut26 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([String])-happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut26 #-}-happyIn27 :: (QName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn27 #-}-happyOut27 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (QName)-happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut27 #-}-happyIn28 :: (Expr) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn28 #-}-happyOut28 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Expr)-happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut28 #-}-happyIn29 :: t29 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn29 #-}-happyOut29 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t29-happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut29 #-}-happyIn30 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn30 #-}-happyOut30 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut30 #-}-happyIn31 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn31 #-}-happyOut31 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut31 #-}-happyIn32 :: t32 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn32 #-}-happyOut32 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t32-happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut32 #-}-happyIn33 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn33 #-}-happyOut33 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut33 #-}-happyIn34 :: t34 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn34 #-}-happyOut34 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t34-happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut34 #-}-happyIn35 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn35 #-}-happyOut35 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([(Name, Expr)])-happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut35 #-}-happyIn36 :: ([(Name, Expr)]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn36 #-}-happyOut36 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([(Name, Expr)])-happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut36 #-}-happyIn37 :: ((Name, Expr)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn37 #-}-happyOut37 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Name, Expr))-happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut37 #-}-happyIn38 :: t38 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn38 #-}-happyOut38 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t38-happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut38 #-}-happyIn39 :: t39 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn39 #-}-happyOut39 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t39-happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut39 #-}-happyIn40 :: ([TypedBindings]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn40 #-}-happyOut40 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBindings])-happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut40 #-}-happyIn41 :: (TypedBindings) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn41 #-}-happyOut41 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (TypedBindings)-happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut41 #-}-happyIn42 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn42 #-}-happyOut42 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBinding])-happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut42 #-}-happyIn43 :: ([TypedBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn43 #-}-happyOut43 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypedBinding])-happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut43 #-}-happyIn44 :: (TypedBinding) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn44 #-}-happyOut44 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (TypedBinding)-happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut44 #-}-happyIn45 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn45 #-}-happyOut45 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])-happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut45 #-}-happyIn46 :: (([LamBinding], Hiding)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn46 #-}-happyOut46 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([LamBinding], Hiding))-happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut46 #-}-happyIn47 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn47 #-}-happyOut47 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Either Hiding LamBinding])-happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut47 #-}-happyIn48 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn48 #-}-happyOut48 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])-happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut48 #-}-happyIn49 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn49 #-}-happyOut49 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])-happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut49 #-}-happyIn50 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn50 #-}-happyOut50 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])-happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut50 #-}-happyIn51 :: ([LamBinding]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn51 #-}-happyOut51 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([LamBinding])-happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut51 #-}-happyIn52 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn52 #-}-happyOut52 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Maybe AsName, ImportDirective))-happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut52 #-}-happyIn53 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn53 #-}-happyOut53 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)-happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut53 #-}-happyIn54 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn54 #-}-happyOut54 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)-happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut54 #-}-happyIn55 :: (ImportDirective) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn55 #-}-happyOut55 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportDirective)-happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut55 #-}-happyIn56 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn56 #-}-happyOut56 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((UsingOrHiding , Range))-happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut56 #-}-happyIn57 :: (([Renaming] , Range)) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn57 #-}-happyOut57 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (([Renaming] , Range))-happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut57 #-}-happyIn58 :: ([Renaming]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn58 #-}-happyOut58 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Renaming])-happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut58 #-}-happyIn59 :: (Renaming) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn59 #-}-happyOut59 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Renaming)-happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut59 #-}-happyIn60 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn60 #-}-happyOut60 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportedName)-happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut60 #-}-happyIn61 :: (ImportedName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn61 #-}-happyOut61 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (ImportedName)-happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut61 #-}-happyIn62 :: ([ImportedName]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn62 #-}-happyOut62 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([ImportedName])-happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut62 #-}-happyIn63 :: t63 -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn63 #-}-happyOut63 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> t63-happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut63 #-}-happyIn64 :: (LHS) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn64 #-}-happyOut64 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (LHS)-happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut64 #-}-happyIn65 :: ([Pattern]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn65 #-}-happyOut65 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Pattern])-happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut65 #-}-happyIn66 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn66 #-}-happyOut66 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut66 #-}-happyIn67 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn67 #-}-happyOut67 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut67 #-}-happyIn68 :: (WhereClause) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn68 #-}-happyOut68 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (WhereClause)-happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut68 #-}-happyIn69 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn69 #-}-happyOut69 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut69 #-}-happyIn70 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn70 #-}-happyOut70 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut70 #-}-happyIn71 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn71 #-}-happyOut71 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut71 #-}-happyIn72 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn72 #-}-happyOut72 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut72 #-}-happyIn73 :: ([Arg Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn73 #-}-happyOut73 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg Declaration])-happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut73 #-}-happyIn74 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn74 #-}-happyOut74 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut74 #-}-happyIn75 :: (RHS) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn75 #-}-happyOut75 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (RHS)-happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut75 #-}-happyIn76 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn76 #-}-happyOut76 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut76 #-}-happyIn77 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn77 #-}-happyOut77 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut77 #-}-happyIn78 :: (Name) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn78 #-}-happyOut78 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Name)-happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut78 #-}-happyIn79 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn79 #-}-happyOut79 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut79 #-}-happyIn80 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn80 #-}-happyOut80 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut80 #-}-happyIn81 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn81 #-}-happyOut81 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut81 #-}-happyIn82 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn82 #-}-happyOut82 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut82 #-}-happyIn83 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn83 #-}-happyOut83 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut83 #-}-happyIn84 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn84 #-}-happyOut84 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut84 #-}-happyIn85 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn85 #-}-happyOut85 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut85 #-}-happyIn86 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn86 #-}-happyOut86 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut86 #-}-happyIn87 :: ([String]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn87 #-}-happyOut87 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([String])-happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut87 #-}-happyIn88 :: ([HoleName]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn88 #-}-happyOut88 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([HoleName])-happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut88 #-}-happyIn89 :: (HoleName) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn89 #-}-happyOut89 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (HoleName)-happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut89 #-}-happyIn90 :: (String) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn90 #-}-happyOut90 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (String)-happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut90 #-}-happyIn91 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn91 #-}-happyOut91 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut91 #-}-happyIn92 :: ([Expr]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn92 #-}-happyOut92 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Expr])-happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut92 #-}-happyIn93 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn93 #-}-happyOut93 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut93 #-}-happyIn94 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn94 #-}-happyOut94 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut94 #-}-happyIn95 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn95 #-}-happyOut95 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut95 #-}-happyIn96 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn96 #-}-happyOut96 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut96 #-}-happyIn97 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn97 #-}-happyOut97 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut97 #-}-happyIn98 :: (Declaration) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn98 #-}-happyOut98 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Declaration)-happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut98 #-}-happyIn99 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn99 #-}-happyOut99 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut99 #-}-happyIn100 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn100 #-}-happyOut100 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut100 #-}-happyIn101 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn101 #-}-happyOut101 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut101 #-}-happyIn102 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn102 #-}-happyOut102 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut102 #-}-happyIn103 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn103 #-}-happyOut103 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut103 #-}-happyIn104 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn104 #-}-happyOut104 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut104 #-}-happyIn105 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn105 #-}-happyOut105 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut105 #-}-happyIn106 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn106 #-}-happyOut106 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut106 #-}-happyIn107 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn107 #-}-happyOut107 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut107 #-}-happyIn108 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn108 #-}-happyOut108 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut108 #-}-happyIn109 :: (Pragma) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn109 #-}-happyOut109 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Pragma)-happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut109 #-}-happyIn110 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn110 #-}-happyOut110 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])-happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut110 #-}-happyIn111 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn111 #-}-happyOut111 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])-happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut111 #-}-happyIn112 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn112 #-}-happyOut112 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])-happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut112 #-}-happyIn113 :: ([TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn113 #-}-happyOut113 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([TypeSignature])-happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut113 #-}-happyIn114 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn114 #-}-happyOut114 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg TypeSignature])-happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut114 #-}-happyIn115 :: ([Arg TypeSignature]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn115 #-}-happyOut115 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Arg TypeSignature])-happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut115 #-}-happyIn116 :: ([Constructor]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn116 #-}-happyOut116 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Constructor])-happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut116 #-}-happyIn117 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn117 #-}-happyOut117 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ((Maybe Name, [Declaration]))-happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut117 #-}-happyIn118 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn118 #-}-happyOut118 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut118 #-}-happyIn119 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn119 #-}-happyOut119 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut119 #-}-happyIn120 :: ([Declaration]) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyIn120 #-}-happyOut120 :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> ([Declaration])-happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOut120 #-}-happyInTok :: (Token) -> (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63)-happyInTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyInTok #-}-happyOutTok :: (HappyAbsSyn t11 t12 t13 t29 t32 t34 t38 t39 t63) -> (Token)-happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x-{-# INLINE happyOutTok #-}---happyActOffsets :: HappyAddr-happyActOffsets = HappyA# "\x00\x00\xaf\x03\xe9\x04\x00\x00\x5d\x02\xaf\x00\xd7\x04\xe7\x04\x00\x00\xe7\x04\xdd\x04\x00\x00\xcc\x04\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x31\x03\xaf\x03\xdc\x04\x00\x00\x91\x01\xe4\x04\xce\x04\x00\x00\x00\x00\x42\x04\xc6\x04\x00\x00\x00\x00\x08\x01\x00\x00\x00\x00\xc3\x03\x0f\x03\xed\x02\x00\x00\x00\x00\x00\x00\x99\x04\x7b\x01\xcf\x04\xb8\x04\xc2\x04\xaf\x04\xae\x04\x00\x00\x90\x04\x8f\x04\x00\x00\x00\x00\x00\x00\xc3\x03\xaf\x03\x00\x00\x84\x04\xc3\x03\x00\x00\x85\x03\x70\x03\x00\x00\xcb\x02\xa7\x00\xb7\x04\xfb\x02\x5b\x03\x83\x04\xfb\x02\xc4\x03\xc4\x03\x75\x04\x73\x04\xa3\x04\x00\x00\xc4\x03\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x03\xc4\x03\x08\x01\x00\x00\x00\x00\x77\x04\x77\x04\x00\x00\x77\x04\x00\x00\xfa\xff\xf9\x02\xf9\x02\x82\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\x04\x00\x00\x00\x00\xfb\x02\x96\x00\x08\x01\xf9\x02\x00\x00\x3c\x01\x00\x00\x00\x00\x00\x00\x00\x00\x61\x04\x00\x00\x00\x00\xc4\x03\x5b\x03\x6c\x04\x6d\x04\x5b\x04\x00\x00\x66\x04\xe8\xff\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x03\x00\x00\x00\x00\x5b\x03\x5b\x03\x58\x04\x00\x00\x62\x04\x00\x00\x00\x00\x00\x00\x00\x00\x4c\x04\x00\x00\x5b\x03\xa1\x02\xf9\xff\x00\x00\x96\x00\x08\x01\xd0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x7e\x04\x00\x00\x53\x04\x50\x04\x4f\x04\x0e\x03\x45\x04\xfb\x02\x7c\x04\xfb\x02\x3e\x04\x35\x04\x00\x00\x00\x00\x00\x00\x52\x04\x00\x00\xd0\x03\x00\x00\x67\x04\x52\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x00\x4e\x04\x00\x00\xc5\x01\x70\x04\x3b\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x04\x40\x04\xc9\x00\x29\x04\x29\x04\x29\x04\x86\x01\x37\x04\x1d\x04\x1d\x04\x1d\x04\x34\x04\x34\x04\x34\x04\x10\x04\x26\x04\x08\x01\x7d\x06\x00\x00\x00\x00\x5b\x03\x00\x00\x00\x00\x1b\x04\x18\x04\x1a\x04\x16\x04\x16\x04\x16\x04\x16\x04\x16\x04\xfd\x00\x4b\x04\x08\x01\x8d\x00\x00\x00\x00\x00\x00\x00\xc3\x00\x00\x00\xc3\x00\xc3\x00\x0b\x04\x00\x00\xfb\x02\xfb\x02\xfb\x02\xfb\x02\x0e\x04\x0a\x04\x00\x00\x08\x04\x00\x00\x4a\x00\x5b\x03\x3f\x04\x5b\x03\x5b\x03\xa1\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x04\x06\x04\x00\x00\x01\x04\x05\x04\xfc\x03\xfb\x03\x04\x04\x25\x04\x00\x00\x00\x00\xee\x03\x00\x00\x00\x00\xfe\x03\xe6\x03\xe6\x03\x17\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x03\x00\x00\x00\x00\xfa\x03\xe2\x03\xf5\x03\xf5\x03\xfb\x02\x10\x00\xf2\x03\xf1\x03\xe7\x03\xeb\x03\xc3\x00\x00\x00\x00\x00\x00\x00\xa5\x00\x00\x00\x00\x00\xe0\x03\x00\x00\xd6\x03\x08\x01\xff\x03\x5b\x03\xbe\x03\x00\x00\xbe\x03\xbd\x03\xb5\x03\xb4\x03\x00\x00\xab\x03\xac\x03\xaa\x03\x00\x00\x00\x00\xa8\x03\xa0\x03\xa6\x03\xa5\x03\x00\x00\x00\x00\x00\x00\x83\x03\x00\x00\x83\x03\x00\x00\xfe\x00\xf9\xff\x5b\x03\x5b\x03\x5b\x03\x97\x03\x5b\x03\x8f\x03\x7b\x03\xf9\xff\x0f\x00\xf9\xff\xb8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x02\x00\x00\x8e\x03\x1d\x00\x8e\x03\x00\x00\x0f\x00\x86\x03\x00\x00\x74\x03\x1d\x00\x81\x03\x68\x03\x77\x03\x00\x00\x5b\x03\xd0\x03\x00\x00\xa3\x03\xa1\x03\x98\x03\x1d\x00\x6b\x03\xfe\x00\x64\x03\x00\x00\x2a\x01\x0f\x00\x4e\x03\x00\x00\x5e\x03\x00\x00\x00\x00\x51\x03\x00\x00\x00\x00\x00\x00\x49\x03\x00\x00\x4d\x03\x00\x00\x39\x03\x5b\x03\x00\x00\xfe\x00\x00\x00\x5c\x03\x5c\x03\x5c\x03\x00\x00\xd0\x03\x5b\x03\x00\x00\x2d\x03\x00\x00\x5b\x03\x00\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x34\x03\x00\x00\x00\x00\x00\x00\x30\x03\x00\x00\x00\x00\x00\x00\x2c\x03\xfe\x00\x28\x03\x00\x00\x00\x00\xfe\x00\x3f\x03\x3f\x03\x12\x00\xd4\x01\xf9\xff\x00\x00\x1d\x00\x00\x00\xf9\xff\x1d\x03\x00\x00\x00\x00\x1d\x00\x32\x03\x00\x00\xf9\xff\x00\x00\x1d\x00\x00\x00\x00\x00"#--happyGotoOffsets :: HappyAddr-happyGotoOffsets = HappyA# "\xef\x02\x79\x06\x11\x00\x56\x03\x52\x03\xf5\x01\x00\x00\x4f\x03\x00\x00\x4b\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x03\x64\x06\x00\x00\x00\x00\x8b\x02\x0e\x00\x00\x00\x00\x00\x00\x00\x6d\x01\x3b\x03\x00\x00\x00\x00\x0f\x01\x00\x00\x00\x00\x1f\x00\x4d\x04\x32\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1b\x02\x4f\x06\x00\x00\x00\x00\xe7\x01\x00\x00\x8a\x04\x76\x04\x00\x00\x3a\x06\x25\x06\x00\x00\x13\x03\x10\x06\x00\x00\x2c\x02\x68\x04\x3c\x03\x2c\x00\x00\x00\x00\x00\x00\x00\xf8\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x05\x65\x03\xd4\x00\x00\x00\x00\x00\x30\x00\x08\x00\x00\x00\x2f\x00\x00\x00\xb6\x02\x30\x02\x14\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x36\x03\x00\x00\x00\x00\xce\x02\xa2\x04\x36\x00\xcf\x01\x00\x00\x9f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x03\xe6\x05\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x04\x00\x00\x00\x00\xbc\x05\xa7\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x32\x01\x00\x00\x92\x05\x6c\x01\xa8\x02\x00\x00\x8d\x04\x35\x00\xcb\x04\x00\x00\x00\x00\x00\x00\x00\x00\x01\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x02\x35\x03\x9b\x02\x00\x00\xfa\x01\x00\x00\x15\x03\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\xb6\x04\x00\x00\xfa\x00\xd6\x00\x27\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x03\x23\x03\x00\x00\x00\x00\xd6\x02\xde\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x06\x00\x37\x01\x04\x03\xfc\x02\xf7\x02\xf2\x02\x16\x00\xe9\x02\xdb\x02\xd8\x02\x0d\x00\x0c\x00\x0b\x00\xcd\x02\x9a\x02\xb1\x00\x00\x00\x00\x00\x00\x00\xf8\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x02\xad\x02\x9f\x02\x91\x02\x47\x02\x00\x00\x18\x02\x6e\x01\x7e\x02\x00\x00\x00\x00\x00\x00\x83\x01\x00\x00\x70\x01\x57\x01\x00\x00\x00\x00\xef\x01\xb5\x01\x82\x01\x6f\x01\x2f\x02\x00\x00\x00\x00\x00\x00\x00\x00\xfd\x01\x7d\x05\xdb\x01\x68\x05\x53\x05\x0e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x02\x00\x00\x03\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xfb\x01\xec\x01\xeb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xca\x00\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x05\x00\x00\x00\x00\x0a\x00\xe9\x01\x04\x00\x1e\x00\x11\x01\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\xdb\x00\x00\x00\x00\x00\x00\x00\x50\x02\x00\x00\x00\x00\x00\x00\x00\x00\xa5\x01\x44\x01\x81\x01\x29\x05\xa0\x01\x00\x00\x90\x01\x00\x00\x85\x01\x00\x00\x00\x00\x00\x00\x79\x01\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x01\x00\x00\x93\x00\x00\x00\x21\x00\x42\x02\x14\x05\xff\x04\xea\x04\x05\x00\xd5\x04\x00\x00\xb2\x00\x35\x02\x84\x00\xfc\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x00\x00\x00\x09\x00\x50\x01\x40\x01\x00\x00\x6f\x03\x00\x00\x00\x00\x12\x01\x00\x01\xf5\x00\xcc\x01\x00\x00\x00\x00\xc0\x04\x9e\x03\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x00\xd0\x00\xd0\x02\x00\x00\x00\x00\xb7\x00\xb7\x02\x4b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\xff\x00\x00\x00\x00\x00\x00\x4c\x00\xab\x04\x00\x00\x20\x00\x00\x00\x03\x00\x18\x00\x17\x00\x00\x00\xba\x02\x91\x04\x00\x00\x15\x00\x00\x00\x87\x01\x00\x00\x2b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x00\x00\x00\x00\x00\x00\x9f\x00\xff\xff\x1b\x00\x1c\x00\x4e\x00\xbb\x01\x00\x00\x66\x00\x00\x00\x88\x01\x44\x00\x00\x00\x00\x00\x3d\x00\xfe\xff\x00\x00\x37\x00\x00\x00\x33\x00\x00\x00\x00\x00"#--happyDefActions :: HappyAddr-happyDefActions = HappyA# "\xfa\xff\x00\x00\xb5\xff\x00\x00\xfc\xff\x00\x00\x00\x00\xb5\xff\xb2\xff\xb5\xff\x9c\xff\x82\xff\x00\x00\x8f\xff\x8e\xff\x8c\xff\x8b\xff\x00\x00\x86\xff\x00\x00\x00\x00\x6c\xff\x6a\xff\xb5\xff\x00\x00\x7e\xff\x7d\xff\x00\x00\x00\x00\x7c\xff\x7b\xff\x00\x00\x7f\xff\x80\xff\x00\x00\x00\x00\x00\x00\xaa\xff\x9d\xff\x81\xff\x00\x00\x9c\xff\x00\x00\x00\x00\x8c\xff\x00\x00\x67\xff\x77\xff\x00\x00\x00\x00\x76\xff\x9a\xff\x51\xff\x5c\xff\x00\x00\x88\xff\x60\xff\x5d\xff\x99\xff\x00\x00\x00\x00\x74\xff\x00\x00\x00\x00\x00\x00\x55\xff\x00\x00\x00\x00\x56\xff\x00\x00\x00\x00\x72\xff\x00\x00\x00\x00\x6b\xff\x00\x00\x6d\xff\x92\xff\x8a\xff\x83\xff\x00\x00\x00\x00\x00\x00\xb4\xff\xb3\xff\xb5\xff\xb5\xff\xf7\xfe\xb5\xff\xf2\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd4\xff\xd3\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd2\xff\xd1\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\x95\xff\x9c\xff\x9b\xff\x52\xff\x47\xff\xfe\xfe\x00\x00\xb1\xff\x00\x00\xf6\xfe\xf5\xfe\x75\xff\x8d\xff\x00\x00\x90\xff\x96\xff\x86\xff\x00\x00\xb5\xff\x00\x00\x00\x00\x71\xff\x70\xff\x00\x00\x58\xff\x59\xff\x91\xff\x57\xff\x00\x00\x5a\xff\x5b\xff\x5f\xff\x61\xff\x89\xff\x5e\xff\x69\xff\x78\xff\x00\x00\x68\xff\x7a\xff\x00\x00\x00\x00\x00\x00\x62\xff\x63\xff\x65\xff\x66\xff\x85\xff\x50\xff\x00\x00\x73\xff\x00\x00\x00\x00\xb5\xff\x87\xff\x47\xff\xfe\xfe\x47\xff\xfa\xfe\x4f\xff\x4d\xff\x4b\xff\x48\xff\x49\xff\x00\x00\x00\x00\x00\x00\x47\xff\x00\x00\x52\xff\x00\x00\x52\xff\x00\x00\x95\xff\x94\xff\xe9\xfe\x54\xff\xb5\xff\x53\xff\x47\xff\x4c\xff\xac\xff\x00\x00\x3c\xff\x4a\xff\xff\xfe\xfd\xfe\xf9\xfe\x00\x00\xb5\xff\xae\xff\x9c\xff\x32\xff\x15\xff\xcd\xfe\x2d\xff\x2b\xff\x2a\xff\x29\xff\x28\xff\x2c\xff\x27\xff\x26\xff\x25\xff\x24\xff\x23\xff\x1d\xff\x22\xff\x20\xff\x21\xff\x1f\xff\x1e\xff\xf3\xfe\xf1\xfe\xf0\xfe\xee\xfe\xef\xfe\xed\xfe\xea\xfe\xec\xfe\xeb\xfe\xb5\xff\xb5\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\xb5\xff\xb5\xff\xb5\xff\x00\x00\x36\xff\x00\x00\x00\x00\x6e\xff\x6f\xff\x00\x00\x79\xff\x64\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\xff\x32\xff\x00\x00\x00\x00\x0a\xff\x0b\xff\x0c\xff\x00\x00\xab\xff\x00\x00\x00\x00\x00\x00\x0d\xff\x52\xff\x52\xff\x52\xff\x52\xff\x00\x00\x00\x00\x08\xff\x00\x00\x09\xff\x30\xff\x00\x00\x34\xff\x00\x00\x00\x00\x00\x00\xd1\xfe\xaf\xff\xb0\xff\xad\xff\x3e\xff\x3a\xff\x00\x00\x3b\xff\x00\x00\x00\x00\x00\x00\x00\x00\x42\xff\x00\x00\xac\xff\x4e\xff\x00\x00\xcf\xfe\xf4\xfe\xb5\xff\x00\x00\x00\x00\xac\xff\x44\xff\x40\xff\x45\xff\x3d\xff\x46\xff\x00\x00\xce\xfe\x1a\xff\x31\xff\x38\xff\x00\x00\x16\xff\x17\xff\xb5\xff\x00\x00\xb5\xff\xb5\xff\x52\xff\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\x97\xff\x10\xff\x0f\xff\x0e\xff\x00\x00\x04\xff\x02\xff\x00\x00\x00\xff\x36\xff\x84\xff\x34\xff\x00\x00\x95\xff\x93\xff\x95\xff\x00\x00\x95\xff\x00\x00\xe1\xfe\x00\x00\x00\x00\x00\x00\xe2\xfe\xe3\xfe\x00\x00\x95\xff\x00\x00\x00\x00\x1b\xff\x37\xff\x35\xff\x00\x00\x03\xff\x00\x00\x98\xff\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\xb5\xff\x00\x00\x00\x00\x00\x00\xb5\xff\x00\x00\xb5\xff\x00\x00\x2f\xff\x33\xff\x39\xff\x43\xff\x41\xff\x3f\xff\x00\x00\xd0\xfe\xb5\xff\x00\x00\xb5\xff\xa6\xff\xa4\xff\x00\x00\xdb\xfe\x00\x00\x00\x00\xb5\xff\xa8\xff\x00\x00\xde\xfe\x00\x00\x47\xff\xf8\xfe\x00\x00\x00\x00\x00\x00\x00\x00\xb5\xff\xa2\xff\x00\x00\xd8\xfe\x00\x00\x00\x00\x07\xff\x06\xff\x00\x00\xe4\xfe\xe6\xfe\x00\x00\xe7\xfe\xe8\xfe\xe5\xfe\x00\x00\x05\xff\x00\x00\xa7\xff\x00\x00\x00\x00\xa3\xff\x00\x00\xda\xfe\xb5\xff\xb5\xff\xb5\xff\xfc\xfe\x47\xff\x00\x00\xa9\xff\x00\x00\xe0\xfe\x00\x00\xa5\xff\x00\x00\xdd\xfe\x2e\xff\xdc\xfe\x19\xff\xdf\xfe\x1c\xff\xfb\xfe\x00\x00\xd6\xfe\x14\xff\x13\xff\x00\x00\x12\xff\xd9\xfe\x18\xff\x00\x00\xa0\xff\x00\x00\x01\xff\xa1\xff\x9e\xff\xb5\xff\xb5\xff\x00\x00\x00\x00\xb5\xff\x9f\xff\x00\x00\xd5\xfe\xb5\xff\x00\x00\xd7\xfe\x11\xff\x00\x00\xb5\xff\xd2\xfe\xb5\xff\xd4\xfe\x00\x00\xd3\xfe"#--happyCheck :: HappyAddr-happyCheck = HappyA# "\xff\xff\x03\x00\x03\x00\x09\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x03\x00\x04\x00\x05\x00\x03\x00\x30\x00\x03\x00\x03\x00\x03\x00\x03\x00\x00\x00\x03\x00\x0a\x00\x0b\x00\x03\x00\x06\x00\x3b\x00\x2b\x00\x54\x00\x0a\x00\x0b\x00\x2f\x00\x0a\x00\x0a\x00\x0a\x00\x0c\x00\x0c\x00\x0e\x00\x0e\x00\x11\x00\x0a\x00\x03\x00\x03\x00\x05\x00\x0a\x00\x0a\x00\x0c\x00\x0d\x00\x06\x00\x03\x00\x41\x00\x42\x00\x2e\x00\x07\x00\x0a\x00\x0a\x00\x31\x00\x23\x00\x06\x00\x0f\x00\x0f\x00\x27\x00\x28\x00\x29\x00\x1d\x00\x1e\x00\x1f\x00\x2d\x00\x03\x00\x0a\x00\x3d\x00\x41\x00\x1c\x00\x1c\x00\x41\x00\x06\x00\x40\x00\x0a\x00\x0b\x00\x0a\x00\x0f\x00\x3d\x00\x3e\x00\x40\x00\x0f\x00\x37\x00\x38\x00\x39\x00\x0f\x00\x5a\x00\x43\x00\x43\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x5a\x00\x06\x00\x42\x00\x68\x00\x6b\x00\x72\x00\x72\x00\x6f\x00\x72\x00\x72\x00\x70\x00\x71\x00\x70\x00\x71\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x70\x00\x68\x00\x68\x00\x6d\x00\x6c\x00\x6a\x00\x69\x00\x6e\x00\x6e\x00\x69\x00\x3a\x00\x5a\x00\x5a\x00\x56\x00\x56\x00\x3f\x00\x0a\x00\x41\x00\x0c\x00\x0d\x00\x44\x00\x41\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x54\x00\x0a\x00\x0b\x00\x0c\x00\x55\x00\x0e\x00\x57\x00\x58\x00\x59\x00\x01\x00\x0a\x00\x5c\x00\x0c\x00\x5e\x00\x0e\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x06\x00\x08\x00\x09\x00\x12\x00\x0a\x00\x0a\x00\x0a\x00\x0b\x00\x0f\x00\x0f\x00\x0f\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x38\x00\x42\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1c\x00\x41\x00\x28\x00\x29\x00\x2a\x00\x09\x00\x03\x00\x0a\x00\x2e\x00\x31\x00\x41\x00\x0f\x00\x32\x00\x33\x00\x06\x00\x35\x00\x38\x00\x0a\x00\x38\x00\x0a\x00\x3a\x00\x3b\x00\x0f\x00\x51\x00\x0a\x00\x41\x00\x54\x00\x41\x00\x42\x00\x3a\x00\x44\x00\x11\x00\x12\x00\x3f\x00\x3f\x00\x1c\x00\x41\x00\x40\x00\x08\x00\x44\x00\x32\x00\x46\x00\x47\x00\x03\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x37\x00\x08\x00\x39\x00\x41\x00\x55\x00\x06\x00\x57\x00\x58\x00\x59\x00\x41\x00\x42\x00\x5c\x00\x37\x00\x5e\x00\x39\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x0a\x00\x0a\x00\x12\x00\x0a\x00\x0a\x00\x0f\x00\x0f\x00\x34\x00\x35\x00\x36\x00\x11\x00\x1b\x00\x1c\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1c\x00\x2e\x00\x30\x00\x34\x00\x35\x00\x36\x00\x29\x00\x2a\x00\x36\x00\x23\x00\x0a\x00\x2e\x00\x0c\x00\x3a\x00\x0e\x00\x32\x00\x33\x00\x0a\x00\x2c\x00\x2d\x00\x41\x00\x38\x00\x0a\x00\x3a\x00\x03\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x3a\x00\x41\x00\x42\x00\x0f\x00\x44\x00\x3f\x00\x0a\x00\x41\x00\x1e\x00\x1f\x00\x44\x00\x0f\x00\x46\x00\x47\x00\x06\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x1b\x00\x1c\x00\x0a\x00\x14\x00\x55\x00\x3a\x00\x57\x00\x58\x00\x59\x00\x11\x00\x12\x00\x5c\x00\x41\x00\x5e\x00\x54\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0f\x00\x34\x00\x0f\x00\x11\x00\x37\x00\x11\x00\x11\x00\x12\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1b\x00\x1c\x00\x03\x00\x0a\x00\x0a\x00\x15\x00\x07\x00\x23\x00\x0a\x00\x23\x00\x11\x00\x11\x00\x12\x00\x0f\x00\x2a\x00\x2b\x00\x14\x00\x2d\x00\x2c\x00\x2d\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x14\x00\x23\x00\x3a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x3f\x00\x31\x00\x41\x00\x2c\x00\x2d\x00\x44\x00\x36\x00\x46\x00\x47\x00\x14\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x3c\x00\x03\x00\x0a\x00\x3a\x00\x55\x00\x07\x00\x57\x00\x58\x00\x59\x00\x11\x00\x41\x00\x5c\x00\x38\x00\x5e\x00\x3a\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x00\x00\x01\x00\x0a\x00\x0b\x00\x23\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x3b\x00\x2c\x00\x2d\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x1e\x00\x0a\x00\x55\x00\x30\x00\x0a\x00\x58\x00\x11\x00\x0a\x00\x5b\x00\x36\x00\x28\x00\x29\x00\x2a\x00\x03\x00\x11\x00\x2d\x00\x2e\x00\x07\x00\x0a\x00\x0a\x00\x32\x00\x33\x00\x08\x00\x35\x00\x23\x00\x11\x00\x38\x00\x0a\x00\x3a\x00\x0a\x00\x29\x00\x3d\x00\x23\x00\x3f\x00\x2d\x00\x41\x00\x42\x00\x3c\x00\x44\x00\x00\x00\x01\x00\x2c\x00\x2d\x00\x23\x00\x0a\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x0a\x00\x2c\x00\x2d\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x11\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0a\x00\x1e\x00\x03\x00\x0a\x00\x0a\x00\x3e\x00\x07\x00\x11\x00\x23\x00\x0f\x00\x10\x00\x28\x00\x29\x00\x2a\x00\x29\x00\x03\x00\x2d\x00\x2e\x00\x2d\x00\x07\x00\x55\x00\x32\x00\x33\x00\x58\x00\x35\x00\x23\x00\x5b\x00\x38\x00\x5d\x00\x3a\x00\x5f\x00\x3d\x00\x3d\x00\x2b\x00\x3f\x00\x2d\x00\x41\x00\x42\x00\x15\x00\x44\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x01\x00\x53\x00\x54\x00\x0a\x00\x15\x00\x06\x00\x07\x00\x08\x00\x09\x00\x03\x00\x11\x00\x22\x00\x23\x00\x07\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x15\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x23\x00\x1e\x00\x0a\x00\x0a\x00\x15\x00\x0c\x00\x0d\x00\x0f\x00\x10\x00\x2c\x00\x2d\x00\x28\x00\x29\x00\x2a\x00\x01\x00\x15\x00\x2d\x00\x2e\x00\x52\x00\x53\x00\x54\x00\x32\x00\x33\x00\x3b\x00\x35\x00\x0a\x00\x0a\x00\x38\x00\x0a\x00\x3a\x00\x0c\x00\x12\x00\x0e\x00\x11\x00\x3f\x00\x09\x00\x41\x00\x42\x00\x09\x00\x44\x00\x1b\x00\x1c\x00\x1d\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x01\x00\x00\x00\x01\x00\x23\x00\x09\x00\x28\x00\x29\x00\x2a\x00\x31\x00\x32\x00\x33\x00\x2e\x00\x2c\x00\x2d\x00\x0a\x00\x32\x00\x33\x00\x12\x00\x35\x00\x0a\x00\x0a\x00\x38\x00\x39\x00\x3a\x00\x0a\x00\x0f\x00\x1b\x00\x1c\x00\x1d\x00\x13\x00\x41\x00\x42\x00\x0a\x00\x44\x00\x01\x00\x19\x00\x1a\x00\x3d\x00\x1c\x00\x28\x00\x29\x00\x2a\x00\x0a\x00\x0b\x00\x0c\x00\x2e\x00\x24\x00\x0a\x00\x26\x00\x32\x00\x33\x00\x12\x00\x35\x00\x45\x00\x11\x00\x38\x00\x03\x00\x3a\x00\x3b\x00\x14\x00\x1b\x00\x1c\x00\x1d\x00\x32\x00\x41\x00\x42\x00\x06\x00\x44\x00\x01\x00\x38\x00\x33\x00\x3a\x00\x23\x00\x28\x00\x29\x00\x2a\x00\x41\x00\x42\x00\x41\x00\x2e\x00\x2b\x00\x0a\x00\x2d\x00\x32\x00\x33\x00\x12\x00\x35\x00\x0a\x00\x0a\x00\x38\x00\x39\x00\x3a\x00\x14\x00\x0f\x00\x1b\x00\x1c\x00\x03\x00\x13\x00\x41\x00\x42\x00\x03\x00\x44\x00\x02\x00\x19\x00\x1a\x00\x01\x00\x1c\x00\x28\x00\x29\x00\x2a\x00\x01\x00\x2b\x00\x41\x00\x2e\x00\x24\x00\x39\x00\x26\x00\x32\x00\x33\x00\x34\x00\x35\x00\x3b\x00\x37\x00\x38\x00\x2b\x00\x3a\x00\x3c\x00\x12\x00\x41\x00\x0a\x00\x3c\x00\x01\x00\x41\x00\x42\x00\x0f\x00\x44\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x41\x00\x0c\x00\x0d\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x12\x00\x28\x00\x29\x00\x2a\x00\x01\x00\x2b\x00\x3b\x00\x2e\x00\x41\x00\x1b\x00\x1c\x00\x32\x00\x33\x00\x41\x00\x35\x00\x40\x00\x34\x00\x38\x00\x30\x00\x3a\x00\x2b\x00\x12\x00\x28\x00\x29\x00\x2a\x00\x03\x00\x41\x00\x42\x00\x2e\x00\x44\x00\x1b\x00\x1c\x00\x32\x00\x33\x00\x03\x00\x35\x00\x03\x00\x30\x00\x38\x00\x41\x00\x3a\x00\x3b\x00\x2b\x00\x28\x00\x29\x00\x2a\x00\x01\x00\x41\x00\x42\x00\x2e\x00\x44\x00\x41\x00\x30\x00\x32\x00\x33\x00\x2b\x00\x35\x00\x03\x00\x41\x00\x38\x00\x39\x00\x3a\x00\x31\x00\x12\x00\x2b\x00\x0a\x00\x41\x00\x01\x00\x41\x00\x42\x00\x0f\x00\x44\x00\x1b\x00\x1c\x00\x1d\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x12\x00\x28\x00\x29\x00\x2a\x00\x0a\x00\x0b\x00\x0c\x00\x2e\x00\x0e\x00\x1b\x00\x1c\x00\x32\x00\x33\x00\x43\x00\x35\x00\x40\x00\x40\x00\x38\x00\x40\x00\x3a\x00\x40\x00\x40\x00\x28\x00\x29\x00\x2a\x00\x43\x00\x41\x00\x42\x00\x2e\x00\x44\x00\x40\x00\x32\x00\x32\x00\x33\x00\x43\x00\x35\x00\x0a\x00\x38\x00\x38\x00\x3a\x00\x3a\x00\x0f\x00\x43\x00\x43\x00\x0a\x00\x04\x00\x41\x00\x41\x00\x42\x00\x0f\x00\x44\x00\x19\x00\x1a\x00\x13\x00\x1c\x00\x37\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x35\x00\x2b\x00\x30\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0a\x00\x2b\x00\x30\x00\x30\x00\x41\x00\x0f\x00\x2b\x00\x0f\x00\x41\x00\x13\x00\x2b\x00\x3c\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x0d\x00\x2f\x00\x39\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x0a\x00\x41\x00\x39\x00\x39\x00\x2f\x00\x0f\x00\x41\x00\x04\x00\x3c\x00\x13\x00\x3c\x00\x3c\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x41\x00\x05\x00\x41\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\x26\x00\x43\x00\x40\x00\x43\x00\x0f\x00\x37\x00\x43\x00\x2b\x00\x13\x00\x44\x00\x2b\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x41\x00\x2b\x00\x31\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x0a\x00\x26\x00\x32\x00\x05\x00\x0f\x00\x0f\x00\x43\x00\x2b\x00\x38\x00\x13\x00\x3a\x00\x2b\x00\x40\x00\x03\x00\x0a\x00\x19\x00\x1a\x00\x41\x00\x1c\x00\x0f\x00\x41\x00\x38\x00\x38\x00\x13\x00\x0c\x00\x38\x00\x24\x00\x41\x00\x26\x00\x19\x00\x1a\x00\x2f\x00\x1c\x00\x3b\x00\x0a\x00\x2f\x00\x3b\x00\x2b\x00\x37\x00\x0f\x00\x24\x00\x0a\x00\x26\x00\x13\x00\x31\x00\x43\x00\x0f\x00\x1f\x00\x2b\x00\x19\x00\x1a\x00\x02\x00\x1c\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x24\x00\x3c\x00\x26\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0a\x00\x41\x00\x34\x00\x34\x00\x02\x00\x0f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x39\x00\x39\x00\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x2f\x00\x45\x00\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x3b\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x30\x00\x3b\x00\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x30\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x41\x00\x3a\x00\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\x2b\x00\x34\x00\x45\x00\x2b\x00\x36\x00\x2b\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x45\x00\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x0a\x00\x20\x00\x21\x00\x22\x00\x23\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x20\x00\x21\x00\x22\x00\x23\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#--happyTable :: HappyAddr-happyTable = HappyA# "\x00\x00\xd7\x00\x0e\x02\xaa\x00\xbc\x01\xd7\x00\x01\x02\xb3\x01\x67\x01\x4d\x01\x67\x01\xab\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x48\x00\x59\x01\xaf\x01\x05\x00\x06\x00\x07\x00\xa9\x01\xcc\x00\x46\x01\xfd\x01\xfd\x01\x4f\x01\x59\x01\x0d\x02\xc8\x01\xc9\x01\xb1\x01\x15\x02\xd4\x00\x0a\x00\x07\x02\xc8\x01\xc9\x01\xfe\x00\x33\x00\xc1\x01\xc1\x01\xd3\x01\xd3\x01\xd4\x01\xd4\x01\x34\x00\x5b\x01\x05\x00\xab\x00\xaa\x00\xc1\x01\xb6\x00\xc2\x01\xc3\x01\x1d\x02\x1c\x02\x26\x00\x27\x00\xc6\x01\xfc\x00\x0a\x00\x0a\x00\xb0\x01\x35\x00\x1b\x02\x0b\x00\x0b\x00\x36\x00\x37\x00\x38\x00\xb7\x00\xb8\x00\xb9\x00\x39\x00\x7c\x01\x16\x02\x5a\x01\x26\x00\xdb\x00\xdb\x00\x26\x00\x12\x02\xfa\x01\xc8\x01\x05\x02\xfe\x00\x7d\x01\x5a\x01\x5b\x01\xca\x01\x0b\x00\x5c\x01\x5d\x01\x5e\x01\x60\x01\xac\x00\x03\x02\xd5\x01\xff\x00\x0e\x00\x0f\x00\x10\x00\xb0\x00\x12\x00\x08\x00\x19\x02\xf8\x01\x4e\x01\xb4\x01\x1a\x02\x0f\x02\x02\x02\xd8\x00\xd8\x00\x68\x01\xcd\x01\x68\x01\x69\x01\xf7\x01\xb6\x01\x3f\x01\x40\x01\x41\x01\x49\x00\xfe\x01\xfe\x01\xaa\x01\x47\x01\x50\x01\xb2\x01\xff\x01\x00\x02\xb2\x01\x00\x01\x08\x00\xad\x00\xf9\x00\xdc\x00\x01\x01\xc1\x01\x02\x01\xc2\x01\xc3\x01\x03\x01\x26\x00\x04\x01\x05\x01\x13\x02\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\xe2\x01\xe4\x00\xe5\x00\xe6\x00\x0e\x01\xe7\x00\x0f\x01\x10\x01\x11\x01\x18\x00\xc1\x01\x12\x01\xd3\x01\x13\x01\x10\x02\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\xbd\x01\x5b\x00\x5c\x00\x19\x00\xfe\x00\x3b\x01\xc8\x01\xc9\x01\x5d\x00\x0b\x00\x0b\x00\xe4\x01\x1a\x00\x1b\x00\x1c\x00\x8d\x01\xc4\x01\xff\x00\x0e\x00\x0f\x00\x10\x00\xb0\x00\x12\x00\x3d\x00\x8e\x01\x1d\x00\x1e\x00\x1f\x00\xaa\x00\xe8\x01\x5b\x01\x20\x00\xa8\x01\xe8\x00\x4d\x01\x21\x00\x22\x00\xe9\x01\x23\x00\x8d\x01\x0a\x00\x24\x00\x5b\x01\x25\x00\x30\x00\x0b\x00\xd8\x01\x33\x00\x8e\x01\xd9\x01\x26\x00\x27\x00\x00\x01\x28\x00\x85\x01\xa8\x01\x5e\x00\x01\x01\xae\x00\x02\x01\xca\x01\x61\x01\x03\x01\x3b\x00\x04\x01\x05\x01\xf1\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x5c\x01\x61\x01\xb8\x01\x26\x00\x0e\x01\xf2\x01\x0f\x01\x10\x01\x11\x01\x26\x00\x27\x00\x12\x01\x5c\x01\x13\x01\x60\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\xfe\x00\x0a\x00\x19\x00\x33\x00\xe4\x01\x0b\x00\x0b\x00\xb9\x01\x63\x01\x64\x01\x34\x00\x1a\x00\x1b\x00\xff\x00\x0e\x00\x0f\x00\x10\x00\xb0\x00\x12\x00\x3d\x00\xd7\x01\x92\x01\x62\x01\x63\x01\x64\x01\x1e\x00\x1f\x00\x53\x00\xe8\x00\xc1\x01\x20\x00\xd3\x01\xd8\x01\x09\x02\x21\x00\x22\x00\xb6\x00\xb0\x01\xea\x00\x26\x00\x3f\x00\xa4\x00\x40\x00\xf5\x01\x5b\x00\x5c\x00\xa5\x00\xa8\x00\x00\x01\x26\x00\x27\x00\x5d\x00\x28\x00\x74\x01\x0a\x00\x02\x01\x2f\x01\xb9\x00\x03\x01\x0b\x00\x04\x01\x05\x01\xf6\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\x4f\x00\x8f\x01\x33\x00\xdd\x01\x0e\x01\xe6\x01\x0f\x01\x10\x01\x11\x01\x85\x01\x86\x01\x12\x01\x26\x00\x13\x01\xda\x01\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\xfe\x00\x33\x00\x0a\x00\x33\x00\x33\x00\x0b\x00\x51\x00\x0b\x00\x34\x00\x52\x00\x34\x00\x85\x01\x87\x01\xff\x00\x0e\x00\x0f\x00\x10\x00\xb0\x00\x12\x00\x8e\x01\x8f\x01\x17\x02\x33\x00\x33\x00\x9b\x01\x18\x02\x41\x00\x0a\x00\xe8\x00\x34\x00\x85\x01\x88\x01\x0b\x00\x42\x00\x43\x00\x9e\x01\x44\x00\x80\x01\xea\x00\xf9\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xa0\x01\xe8\x00\x00\x01\x13\x00\x14\x00\x15\x00\x16\x00\x01\x01\xcd\x00\x02\x01\x81\x01\xea\x00\x03\x01\x53\x00\x04\x01\x05\x01\xa1\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x0d\x01\xa3\x01\x11\x02\x33\x00\x48\x00\x0e\x01\xfc\x00\x0f\x01\x10\x01\x11\x01\x34\x00\x26\x00\x12\x01\x46\x00\x13\x01\x4c\x00\x14\x01\x15\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x59\x01\x18\x00\xc8\x01\xf0\x01\xe8\x00\xa4\x00\x1d\x01\x1e\x01\x1f\x01\x5c\x00\xa5\x00\xda\x00\xa4\x01\x82\x01\xea\x00\x20\x01\x21\x01\x22\x01\x23\x01\x15\x02\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x1a\x00\x1b\x00\x33\x00\x2b\x01\xb5\x01\x55\x00\x56\x01\xba\x01\x56\x00\x34\x00\x33\x00\x57\x00\x53\x00\x1d\x00\x1e\x00\x1f\x00\xbf\x01\x34\x00\x2c\x01\x2d\x01\xc0\x01\x33\x00\xbb\x01\x21\x00\x22\x00\x6b\x01\x23\x00\x35\x00\x34\x00\x3f\x00\x6f\x01\x40\x00\x71\x01\xc2\x00\x5a\x01\xe8\x00\x2e\x01\x39\x00\x26\x00\x27\x00\x77\x01\x28\x00\x59\x01\x18\x00\x83\x01\xea\x00\xe8\x00\xa4\x00\x1d\x01\x1e\x01\x1f\x01\x5c\x00\xa5\x00\xa6\x00\x33\x00\xef\x00\xea\x00\x20\x01\x21\x01\x22\x01\x23\x01\x34\x00\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x1a\x00\x1b\x00\x33\x00\x2b\x01\xc6\x01\x7f\x01\xa4\x00\x7a\x01\xc7\x01\x34\x00\x35\x00\xa5\x00\xa7\x00\x1d\x00\x1e\x00\x1f\x00\xc5\x00\xd1\x01\x2c\x01\x2d\x01\x39\x00\xd2\x01\x55\x00\x21\x00\x22\x00\x56\x00\x23\x00\x41\x00\x57\x00\x3f\x00\x58\x00\x40\x00\x59\x00\x90\x01\x5a\x01\xbb\x00\x2e\x01\x44\x00\x26\x00\x27\x00\x92\x01\x28\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\x18\x00\xa6\x01\x8b\x01\x33\x00\x94\x01\x1d\x01\x1e\x01\x1f\x01\x5c\x00\xfb\x00\x34\x00\x4a\x00\x16\x00\xfc\x00\x20\x01\x21\x01\x22\x01\x23\x01\x95\x01\x24\x01\x25\x01\x26\x01\x27\x01\x28\x01\x29\x01\x2a\x01\x1a\x00\x1b\x00\xe8\x00\x2b\x01\xa4\x00\xc1\x01\x96\x01\xc2\x01\xe3\x01\xa5\x00\xa8\x00\xf1\x00\xea\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x97\x01\x2c\x01\x2d\x01\x89\x01\x8a\x01\x8b\x01\x21\x00\x22\x00\x3c\x01\x23\x00\x3e\x01\x33\x00\x3f\x00\xc1\x01\x40\x00\xd3\x01\x19\x00\xe7\x01\x34\x00\x2e\x01\x42\x01\x26\x00\x27\x00\x44\x01\x28\x00\x1a\x00\x1b\x00\x1c\x00\xfc\x01\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x18\x00\x28\x00\x04\x00\xe8\x00\x45\x01\x1d\x00\x1e\x00\x1f\x00\xf3\x00\xe1\x00\xe2\x00\x20\x00\xe9\x00\xea\x00\x48\x01\x21\x00\x22\x00\x19\x00\x23\x00\x49\x01\x0a\x00\x24\x00\x33\x00\x25\x00\x4a\x01\x0b\x00\x1a\x00\x1b\x00\x1c\x00\x2a\x00\x26\x00\x27\x00\x4b\x01\x28\x00\x18\x00\xb2\x00\x10\x00\x53\x01\xb3\x00\x1d\x00\x1e\x00\x1f\x00\xe4\x00\xe5\x00\xe6\x00\x20\x00\x2d\x00\x33\x00\x2e\x00\x21\x00\x22\x00\x19\x00\x23\x00\x51\x01\x34\x00\x24\x00\x56\x01\x25\x00\x30\x00\xed\x00\x1a\x00\x1b\x00\x1c\x00\x3b\x00\x26\x00\x27\x00\x57\x01\x28\x00\x18\x00\x46\x00\xf7\x00\x47\x00\x41\x00\x1d\x00\x1e\x00\x1f\x00\x26\x00\x27\x00\x26\x00\x20\x00\xbe\x00\xf2\x00\x44\x00\x21\x00\x22\x00\x19\x00\x23\x00\x40\x00\x0a\x00\x24\x00\x33\x00\x25\x00\xeb\x00\x0b\x00\x1a\x00\x1b\x00\x53\x00\xba\x00\x26\x00\x27\x00\x54\x00\x28\x00\x5e\x00\xb2\x00\x10\x00\x04\x00\xb3\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x0a\x00\x26\x00\x20\x00\x2d\x00\x09\x02\x2e\x00\x21\x00\x22\x00\x84\xff\x23\x00\x0b\x02\x84\xff\x3f\x00\x0a\x00\x40\x00\x0c\x02\x19\x00\x26\x00\x0a\x00\x0d\x02\x18\x00\x26\x00\x27\x00\x0b\x00\x28\x00\x1a\x00\x1b\x00\x1c\x00\xc1\x01\x26\x00\xc2\x01\xf4\x01\xaf\x00\x0f\x00\x10\x00\xb0\x00\x12\x00\x19\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x0a\x00\x07\x02\x20\x00\x8e\x01\x1a\x00\x1b\x00\x21\x00\x22\x00\x8e\x01\x23\x00\xe1\x01\xe2\x01\x24\x00\xe7\x01\x25\x00\x0a\x00\x19\x00\x1d\x00\x1e\x00\x1f\x00\xeb\x01\x26\x00\x27\x00\x20\x00\x28\x00\x1a\x00\x1b\x00\x21\x00\x22\x00\xec\x01\x23\x00\xed\x01\xf0\x01\x3f\x00\x26\x00\x40\x00\xc1\x00\x0a\x00\x1d\x00\x1e\x00\x1f\x00\x18\x00\x26\x00\x27\x00\x20\x00\x28\x00\x26\x00\xf4\x01\x21\x00\x22\x00\x0a\x00\x23\x00\xbf\x01\x26\x00\x3f\x00\xc2\x00\x40\x00\xcc\x01\x19\x00\x0a\x00\x0a\x00\x8e\x01\x18\x00\x26\x00\x27\x00\x0b\x00\x28\x00\x1a\x00\x1b\x00\x1c\x00\xed\x01\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x4e\x00\x10\x00\x4f\x00\x12\x00\x19\x00\x1d\x00\x1e\x00\x1f\x00\xe4\x00\xe5\x00\xe6\x00\x20\x00\xe7\x00\x1a\x00\x1b\x00\x21\x00\x22\x00\xed\x00\x23\x00\xdc\x01\xdd\x01\x24\x00\xdf\x01\x25\x00\xe0\x01\x9d\x01\x1d\x00\x1e\x00\x1f\x00\x94\x01\x26\x00\x27\x00\x20\x00\x28\x00\x9e\x01\x3b\x00\x21\x00\x22\x00\xed\x00\x23\x00\x0a\x00\x3c\x00\x3f\x00\x3d\x00\x40\x00\x0b\x00\xa0\x01\xed\x00\x0a\x00\x79\x01\x26\x00\x26\x00\x27\x00\x0b\x00\x28\x00\x4e\x00\x10\x00\x2a\x00\xb3\x00\x3e\x01\xcf\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\xa6\x01\x0a\x00\xac\x01\x13\x00\x14\x00\x15\x00\x16\x00\xd0\x00\x32\x01\x2e\x00\x0a\x00\x0a\x00\xad\x01\xae\x01\x26\x00\x0b\x00\x0a\x00\x66\x01\x26\x00\x2a\x00\x0a\x00\x6b\x01\xcf\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x6d\x01\x6e\x01\x6f\x01\x13\x00\x14\x00\x15\x00\x16\x00\xd0\x00\xd1\x00\x2e\x00\x29\x00\x26\x00\x71\x01\x73\x01\x74\x01\x0b\x00\x26\x00\x79\x01\x7e\x01\x2a\x00\x7f\x01\x85\x01\x2b\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x26\x00\x55\x01\x26\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0a\x00\x2e\x00\x94\x01\x99\x01\x9a\x01\x0b\x00\x3e\x01\x9b\x01\x0a\x00\x2a\x00\x44\x01\x0a\x00\x30\x00\x0d\x00\x0e\x00\x2c\x00\x10\x00\x11\x00\x12\x00\x26\x00\x0a\x00\x53\x01\x13\x00\x14\x00\x15\x00\x16\x00\x31\x00\x0a\x00\x2e\x00\x3b\x00\x55\x01\x66\x01\x0b\x00\xed\x00\x0a\x00\x46\x00\x2a\x00\x47\x00\x0a\x00\xef\x00\xf1\x00\x0a\x00\xb2\x00\x10\x00\x26\x00\xb3\x00\x0b\x00\x26\x00\xf5\x00\xf6\x00\xba\x00\xe6\x00\xf7\x00\x31\x00\x26\x00\x2e\x00\xb2\x00\x10\x00\x31\x01\xb3\x00\x32\x01\x0a\x00\xd5\x00\xd6\x00\x0a\x00\x52\x00\x0b\x00\x2d\x00\x0a\x00\x2e\x00\x2a\x00\xd7\x00\xed\x00\x0b\x00\xa4\x00\x0a\x00\xb2\x00\x10\x00\xb5\x00\xb3\x00\xfb\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x31\x00\xb6\x00\x2e\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0a\x00\x26\x00\xbd\x00\xc4\x00\xc0\x00\x0b\x00\xfa\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\x04\x02\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xc7\x00\xc8\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xee\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xc9\x00\xff\xff\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x66\x01\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xca\x00\xcc\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x96\xff\xcb\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\xf8\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xcc\x00\xce\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x26\x00\x48\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x0a\x00\x4d\x00\xff\xff\x0a\x00\x53\x00\x0a\x00\xcf\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\xff\xff\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb7\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x76\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x79\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\x01\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xcd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xce\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd9\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb1\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x29\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc4\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x0a\x00\x13\x00\x14\x00\x15\x00\x16\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x34\x01\x35\x01\x36\x01\x37\x01\x38\x01\x39\x01\x3a\x01\x3b\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#--happyReduceArr = Happy_Data_Array.array (3, 306) [-	(3 , happyReduce_3),-	(4 , happyReduce_4),-	(5 , happyReduce_5),-	(6 , happyReduce_6),-	(7 , happyReduce_7),-	(8 , happyReduce_8),-	(9 , happyReduce_9),-	(10 , happyReduce_10),-	(11 , happyReduce_11),-	(12 , happyReduce_12),-	(13 , happyReduce_13),-	(14 , happyReduce_14),-	(15 , happyReduce_15),-	(16 , happyReduce_16),-	(17 , happyReduce_17),-	(18 , happyReduce_18),-	(19 , happyReduce_19),-	(20 , happyReduce_20),-	(21 , happyReduce_21),-	(22 , happyReduce_22),-	(23 , happyReduce_23),-	(24 , happyReduce_24),-	(25 , happyReduce_25),-	(26 , happyReduce_26),-	(27 , happyReduce_27),-	(28 , happyReduce_28),-	(29 , happyReduce_29),-	(30 , happyReduce_30),-	(31 , happyReduce_31),-	(32 , happyReduce_32),-	(33 , happyReduce_33),-	(34 , happyReduce_34),-	(35 , happyReduce_35),-	(36 , happyReduce_36),-	(37 , happyReduce_37),-	(38 , happyReduce_38),-	(39 , happyReduce_39),-	(40 , happyReduce_40),-	(41 , happyReduce_41),-	(42 , happyReduce_42),-	(43 , happyReduce_43),-	(44 , happyReduce_44),-	(45 , happyReduce_45),-	(46 , happyReduce_46),-	(47 , happyReduce_47),-	(48 , happyReduce_48),-	(49 , happyReduce_49),-	(50 , happyReduce_50),-	(51 , happyReduce_51),-	(52 , happyReduce_52),-	(53 , happyReduce_53),-	(54 , happyReduce_54),-	(55 , happyReduce_55),-	(56 , happyReduce_56),-	(57 , happyReduce_57),-	(58 , happyReduce_58),-	(59 , happyReduce_59),-	(60 , happyReduce_60),-	(61 , happyReduce_61),-	(62 , happyReduce_62),-	(63 , happyReduce_63),-	(64 , happyReduce_64),-	(65 , happyReduce_65),-	(66 , happyReduce_66),-	(67 , happyReduce_67),-	(68 , happyReduce_68),-	(69 , happyReduce_69),-	(70 , happyReduce_70),-	(71 , happyReduce_71),-	(72 , happyReduce_72),-	(73 , happyReduce_73),-	(74 , happyReduce_74),-	(75 , happyReduce_75),-	(76 , happyReduce_76),-	(77 , happyReduce_77),-	(78 , happyReduce_78),-	(79 , happyReduce_79),-	(80 , happyReduce_80),-	(81 , happyReduce_81),-	(82 , happyReduce_82),-	(83 , happyReduce_83),-	(84 , happyReduce_84),-	(85 , happyReduce_85),-	(86 , happyReduce_86),-	(87 , happyReduce_87),-	(88 , happyReduce_88),-	(89 , happyReduce_89),-	(90 , happyReduce_90),-	(91 , happyReduce_91),-	(92 , happyReduce_92),-	(93 , happyReduce_93),-	(94 , happyReduce_94),-	(95 , happyReduce_95),-	(96 , happyReduce_96),-	(97 , happyReduce_97),-	(98 , happyReduce_98),-	(99 , happyReduce_99),-	(100 , happyReduce_100),-	(101 , happyReduce_101),-	(102 , happyReduce_102),-	(103 , happyReduce_103),-	(104 , happyReduce_104),-	(105 , happyReduce_105),-	(106 , happyReduce_106),-	(107 , happyReduce_107),-	(108 , happyReduce_108),-	(109 , happyReduce_109),-	(110 , happyReduce_110),-	(111 , happyReduce_111),-	(112 , happyReduce_112),-	(113 , happyReduce_113),-	(114 , happyReduce_114),-	(115 , happyReduce_115),-	(116 , happyReduce_116),-	(117 , happyReduce_117),-	(118 , happyReduce_118),-	(119 , happyReduce_119),-	(120 , happyReduce_120),-	(121 , happyReduce_121),-	(122 , happyReduce_122),-	(123 , happyReduce_123),-	(124 , happyReduce_124),-	(125 , happyReduce_125),-	(126 , happyReduce_126),-	(127 , happyReduce_127),-	(128 , happyReduce_128),-	(129 , happyReduce_129),-	(130 , happyReduce_130),-	(131 , happyReduce_131),-	(132 , happyReduce_132),-	(133 , happyReduce_133),-	(134 , happyReduce_134),-	(135 , happyReduce_135),-	(136 , happyReduce_136),-	(137 , happyReduce_137),-	(138 , happyReduce_138),-	(139 , happyReduce_139),-	(140 , happyReduce_140),-	(141 , happyReduce_141),-	(142 , happyReduce_142),-	(143 , happyReduce_143),-	(144 , happyReduce_144),-	(145 , happyReduce_145),-	(146 , happyReduce_146),-	(147 , happyReduce_147),-	(148 , happyReduce_148),-	(149 , happyReduce_149),-	(150 , happyReduce_150),-	(151 , happyReduce_151),-	(152 , happyReduce_152),-	(153 , happyReduce_153),-	(154 , happyReduce_154),-	(155 , happyReduce_155),-	(156 , happyReduce_156),-	(157 , happyReduce_157),-	(158 , happyReduce_158),-	(159 , happyReduce_159),-	(160 , happyReduce_160),-	(161 , happyReduce_161),-	(162 , happyReduce_162),-	(163 , happyReduce_163),-	(164 , happyReduce_164),-	(165 , happyReduce_165),-	(166 , happyReduce_166),-	(167 , happyReduce_167),-	(168 , happyReduce_168),-	(169 , happyReduce_169),-	(170 , happyReduce_170),-	(171 , happyReduce_171),-	(172 , happyReduce_172),-	(173 , happyReduce_173),-	(174 , happyReduce_174),-	(175 , happyReduce_175),-	(176 , happyReduce_176),-	(177 , happyReduce_177),-	(178 , happyReduce_178),-	(179 , happyReduce_179),-	(180 , happyReduce_180),-	(181 , happyReduce_181),-	(182 , happyReduce_182),-	(183 , happyReduce_183),-	(184 , happyReduce_184),-	(185 , happyReduce_185),-	(186 , happyReduce_186),-	(187 , happyReduce_187),-	(188 , happyReduce_188),-	(189 , happyReduce_189),-	(190 , happyReduce_190),-	(191 , happyReduce_191),-	(192 , happyReduce_192),-	(193 , happyReduce_193),-	(194 , happyReduce_194),-	(195 , happyReduce_195),-	(196 , happyReduce_196),-	(197 , happyReduce_197),-	(198 , happyReduce_198),-	(199 , happyReduce_199),-	(200 , happyReduce_200),-	(201 , happyReduce_201),-	(202 , happyReduce_202),-	(203 , happyReduce_203),-	(204 , happyReduce_204),-	(205 , happyReduce_205),-	(206 , happyReduce_206),-	(207 , happyReduce_207),-	(208 , happyReduce_208),-	(209 , happyReduce_209),-	(210 , happyReduce_210),-	(211 , happyReduce_211),-	(212 , happyReduce_212),-	(213 , happyReduce_213),-	(214 , happyReduce_214),-	(215 , happyReduce_215),-	(216 , happyReduce_216),-	(217 , happyReduce_217),-	(218 , happyReduce_218),-	(219 , happyReduce_219),-	(220 , happyReduce_220),-	(221 , happyReduce_221),-	(222 , happyReduce_222),-	(223 , happyReduce_223),-	(224 , happyReduce_224),-	(225 , happyReduce_225),-	(226 , happyReduce_226),-	(227 , happyReduce_227),-	(228 , happyReduce_228),-	(229 , happyReduce_229),-	(230 , happyReduce_230),-	(231 , happyReduce_231),-	(232 , happyReduce_232),-	(233 , happyReduce_233),-	(234 , happyReduce_234),-	(235 , happyReduce_235),-	(236 , happyReduce_236),-	(237 , happyReduce_237),-	(238 , happyReduce_238),-	(239 , happyReduce_239),-	(240 , happyReduce_240),-	(241 , happyReduce_241),-	(242 , happyReduce_242),-	(243 , happyReduce_243),-	(244 , happyReduce_244),-	(245 , happyReduce_245),-	(246 , happyReduce_246),-	(247 , happyReduce_247),-	(248 , happyReduce_248),-	(249 , happyReduce_249),-	(250 , happyReduce_250),-	(251 , happyReduce_251),-	(252 , happyReduce_252),-	(253 , happyReduce_253),-	(254 , happyReduce_254),-	(255 , happyReduce_255),-	(256 , happyReduce_256),-	(257 , happyReduce_257),-	(258 , happyReduce_258),-	(259 , happyReduce_259),-	(260 , happyReduce_260),-	(261 , happyReduce_261),-	(262 , happyReduce_262),-	(263 , happyReduce_263),-	(264 , happyReduce_264),-	(265 , happyReduce_265),-	(266 , happyReduce_266),-	(267 , happyReduce_267),-	(268 , happyReduce_268),-	(269 , happyReduce_269),-	(270 , happyReduce_270),-	(271 , happyReduce_271),-	(272 , happyReduce_272),-	(273 , happyReduce_273),-	(274 , happyReduce_274),-	(275 , happyReduce_275),-	(276 , happyReduce_276),-	(277 , happyReduce_277),-	(278 , happyReduce_278),-	(279 , happyReduce_279),-	(280 , happyReduce_280),-	(281 , happyReduce_281),-	(282 , happyReduce_282),-	(283 , happyReduce_283),-	(284 , happyReduce_284),-	(285 , happyReduce_285),-	(286 , happyReduce_286),-	(287 , happyReduce_287),-	(288 , happyReduce_288),-	(289 , happyReduce_289),-	(290 , happyReduce_290),-	(291 , happyReduce_291),-	(292 , happyReduce_292),-	(293 , happyReduce_293),-	(294 , happyReduce_294),-	(295 , happyReduce_295),-	(296 , happyReduce_296),-	(297 , happyReduce_297),-	(298 , happyReduce_298),-	(299 , happyReduce_299),-	(300 , happyReduce_300),-	(301 , happyReduce_301),-	(302 , happyReduce_302),-	(303 , happyReduce_303),-	(304 , happyReduce_304),-	(305 , happyReduce_305),-	(306 , happyReduce_306)-	]--happy_n_terms = 70 :: Int-happy_n_nonterms = 115 :: Int--happyReduce_3 = happySpecReduce_1  0# happyReduction_3-happyReduction_3 happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	happyIn6-		 (reverse happy_var_1-	)}--happyReduce_4 = happySpecReduce_2  1# happyReduction_4-happyReduction_4 happy_x_2-	happy_x_1-	 =  case happyOut7 happy_x_1 of { happy_var_1 -> -	case happyOut8 happy_x_2 of { happy_var_2 -> -	happyIn7-		 (happy_var_2 : happy_var_1-	)}}--happyReduce_5 = happySpecReduce_0  1# happyReduction_5-happyReduction_5  =  happyIn7-		 ([]-	)--happyReduce_6 = happySpecReduce_1  2# happyReduction_6-happyReduction_6 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	happyIn8-		 (TokKeyword KwLet happy_var_1-	)}--happyReduce_7 = happySpecReduce_1  2# happyReduction_7-happyReduction_7 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> -	happyIn8-		 (TokKeyword KwIn happy_var_1-	)}--happyReduce_8 = happySpecReduce_1  2# happyReduction_8-happyReduction_8 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> -	happyIn8-		 (TokKeyword KwWhere happy_var_1-	)}--happyReduce_9 = happySpecReduce_1  2# happyReduction_9-happyReduction_9 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> -	happyIn8-		 (TokKeyword KwWith happy_var_1-	)}--happyReduce_10 = happySpecReduce_1  2# happyReduction_10-happyReduction_10 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> -	happyIn8-		 (TokKeyword KwRewrite happy_var_1-	)}--happyReduce_11 = happySpecReduce_1  2# happyReduction_11-happyReduction_11 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPostulate happy_var_1-	)}--happyReduce_12 = happySpecReduce_1  2# happyReduction_12-happyReduction_12 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrimitive happy_var_1-	)}--happyReduce_13 = happySpecReduce_1  2# happyReduction_13-happyReduction_13 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	happyIn8-		 (TokKeyword KwOpen happy_var_1-	)}--happyReduce_14 = happySpecReduce_1  2# happyReduction_14-happyReduction_14 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	happyIn8-		 (TokKeyword KwImport happy_var_1-	)}--happyReduce_15 = happySpecReduce_1  2# happyReduction_15-happyReduction_15 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	happyIn8-		 (TokKeyword KwUsing happy_var_1-	)}--happyReduce_16 = happySpecReduce_1  2# happyReduction_16-happyReduction_16 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	happyIn8-		 (TokKeyword KwHiding happy_var_1-	)}--happyReduce_17 = happySpecReduce_1  2# happyReduction_17-happyReduction_17 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	happyIn8-		 (TokKeyword KwRenaming happy_var_1-	)}--happyReduce_18 = happySpecReduce_1  2# happyReduction_18-happyReduction_18 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> -	happyIn8-		 (TokKeyword KwTo happy_var_1-	)}--happyReduce_19 = happySpecReduce_1  2# happyReduction_19-happyReduction_19 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> -	happyIn8-		 (TokKeyword KwPublic happy_var_1-	)}--happyReduce_20 = happySpecReduce_1  2# happyReduction_20-happyReduction_20 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	happyIn8-		 (TokKeyword KwModule happy_var_1-	)}--happyReduce_21 = happySpecReduce_1  2# happyReduction_21-happyReduction_21 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	happyIn8-		 (TokKeyword KwData happy_var_1-	)}--happyReduce_22 = happySpecReduce_1  2# happyReduction_22-happyReduction_22 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	happyIn8-		 (TokKeyword KwCoData happy_var_1-	)}--happyReduce_23 = happySpecReduce_1  2# happyReduction_23-happyReduction_23 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	happyIn8-		 (TokKeyword KwRecord happy_var_1-	)}--happyReduce_24 = happySpecReduce_1  2# happyReduction_24-happyReduction_24 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> -	happyIn8-		 (TokKeyword KwConstructor happy_var_1-	)}--happyReduce_25 = happySpecReduce_1  2# happyReduction_25-happyReduction_25 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> -	happyIn8-		 (TokKeyword KwField happy_var_1-	)}--happyReduce_26 = happySpecReduce_1  2# happyReduction_26-happyReduction_26 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfix happy_var_1-	)}--happyReduce_27 = happySpecReduce_1  2# happyReduction_27-happyReduction_27 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixL happy_var_1-	)}--happyReduce_28 = happySpecReduce_1  2# happyReduction_28-happyReduction_28 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	happyIn8-		 (TokKeyword KwInfixR happy_var_1-	)}--happyReduce_29 = happySpecReduce_1  2# happyReduction_29-happyReduction_29 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	happyIn8-		 (TokKeyword KwMutual happy_var_1-	)}--happyReduce_30 = happySpecReduce_1  2# happyReduction_30-happyReduction_30 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	happyIn8-		 (TokKeyword KwAbstract happy_var_1-	)}--happyReduce_31 = happySpecReduce_1  2# happyReduction_31-happyReduction_31 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	happyIn8-		 (TokKeyword KwPrivate happy_var_1-	)}--happyReduce_32 = happySpecReduce_1  2# happyReduction_32-happyReduction_32 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn8-		 (TokKeyword KwProp happy_var_1-	)}--happyReduce_33 = happySpecReduce_1  2# happyReduction_33-happyReduction_33 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn8-		 (TokKeyword KwSet happy_var_1-	)}--happyReduce_34 = happySpecReduce_1  2# happyReduction_34-happyReduction_34 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> -	happyIn8-		 (TokKeyword KwForall happy_var_1-	)}--happyReduce_35 = happySpecReduce_1  2# happyReduction_35-happyReduction_35 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> -	happyIn8-		 (TokKeyword KwSyntax happy_var_1-	)}--happyReduce_36 = happySpecReduce_1  2# happyReduction_36-happyReduction_36 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> -	happyIn8-		 (TokKeyword KwOPTIONS happy_var_1-	)}--happyReduce_37 = happySpecReduce_1  2# happyReduction_37-happyReduction_37 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> -	happyIn8-		 (TokKeyword KwBUILTIN happy_var_1-	)}--happyReduce_38 = happySpecReduce_1  2# happyReduction_38-happyReduction_38 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> -	happyIn8-		 (TokKeyword KwIMPORT happy_var_1-	)}--happyReduce_39 = happySpecReduce_1  2# happyReduction_39-happyReduction_39 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED happy_var_1-	)}--happyReduce_40 = happySpecReduce_1  2# happyReduction_40-happyReduction_40 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_DATA happy_var_1-	)}--happyReduce_41 = happySpecReduce_1  2# happyReduction_41-happyReduction_41 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_TYPE happy_var_1-	)}--happyReduce_42 = happySpecReduce_1  2# happyReduction_42-happyReduction_42 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> -	happyIn8-		 (TokKeyword KwCOMPILED_EPIC happy_var_1-	)}--happyReduce_43 = happySpecReduce_1  2# happyReduction_43-happyReduction_43 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> -	happyIn8-		 (TokKeyword KwIMPOSSIBLE happy_var_1-	)}--happyReduce_44 = happySpecReduce_1  2# happyReduction_44-happyReduction_44 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> -	happyIn8-		 (TokKeyword KwETA happy_var_1-	)}--happyReduce_45 = happySpecReduce_1  2# happyReduction_45-happyReduction_45 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	happyIn8-		 (TokKeyword KwQuoteGoal happy_var_1-	)}--happyReduce_46 = happySpecReduce_1  2# happyReduction_46-happyReduction_46 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn8-		 (TokKeyword KwQuote happy_var_1-	)}--happyReduce_47 = happySpecReduce_1  2# happyReduction_47-happyReduction_47 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn8-		 (TokSetN happy_var_1-	)}--happyReduce_48 = happySpecReduce_1  2# happyReduction_48-happyReduction_48 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> -	happyIn8-		 (TokTeX happy_var_1-	)}--happyReduce_49 = happySpecReduce_1  2# happyReduction_49-happyReduction_49 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> -	happyIn8-		 (TokComment happy_var_1-	)}--happyReduce_50 = happySpecReduce_1  2# happyReduction_50-happyReduction_50 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	happyIn8-		 (TokSymbol SymEllipsis happy_var_1-	)}--happyReduce_51 = happySpecReduce_1  2# happyReduction_51-happyReduction_51 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	happyIn8-		 (TokSymbol SymDot happy_var_1-	)}--happyReduce_52 = happySpecReduce_1  2# happyReduction_52-happyReduction_52 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymSemi happy_var_1-	)}--happyReduce_53 = happySpecReduce_1  2# happyReduction_53-happyReduction_53 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> -	happyIn8-		 (TokSymbol SymColon happy_var_1-	)}--happyReduce_54 = happySpecReduce_1  2# happyReduction_54-happyReduction_54 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> -	happyIn8-		 (TokSymbol SymEqual happy_var_1-	)}--happyReduce_55 = happySpecReduce_1  2# happyReduction_55-happyReduction_55 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn8-		 (TokSymbol SymUnderscore happy_var_1-	)}--happyReduce_56 = happySpecReduce_1  2# happyReduction_56-happyReduction_56 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn8-		 (TokSymbol SymQuestionMark happy_var_1-	)}--happyReduce_57 = happySpecReduce_1  2# happyReduction_57-happyReduction_57 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> -	happyIn8-		 (TokSymbol SymArrow happy_var_1-	)}--happyReduce_58 = happySpecReduce_1  2# happyReduction_58-happyReduction_58 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	happyIn8-		 (TokSymbol SymLambda happy_var_1-	)}--happyReduce_59 = happySpecReduce_1  2# happyReduction_59-happyReduction_59 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> -	happyIn8-		 (TokSymbol SymAs happy_var_1-	)}--happyReduce_60 = happySpecReduce_1  2# happyReduction_60-happyReduction_60 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> -	happyIn8-		 (TokSymbol SymBar happy_var_1-	)}--happyReduce_61 = happySpecReduce_1  2# happyReduction_61-happyReduction_61 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenParen happy_var_1-	)}--happyReduce_62 = happySpecReduce_1  2# happyReduction_62-happyReduction_62 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseParen happy_var_1-	)}--happyReduce_63 = happySpecReduce_1  2# happyReduction_63-happyReduction_63 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenBrace happy_var_1-	)}--happyReduce_64 = happySpecReduce_1  2# happyReduction_64-happyReduction_64 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseBrace happy_var_1-	)}--happyReduce_65 = happySpecReduce_1  2# happyReduction_65-happyReduction_65 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenVirtualBrace happy_var_1-	)}--happyReduce_66 = happySpecReduce_1  2# happyReduction_66-happyReduction_66 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> -	happyIn8-		 (TokSymbol SymCloseVirtualBrace happy_var_1-	)}--happyReduce_67 = happySpecReduce_1  2# happyReduction_67-happyReduction_67 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> -	happyIn8-		 (TokSymbol SymVirtualSemi happy_var_1-	)}--happyReduce_68 = happySpecReduce_1  2# happyReduction_68-happyReduction_68 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymOpenPragma happy_var_1-	)}--happyReduce_69 = happySpecReduce_1  2# happyReduction_69-happyReduction_69 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> -	happyIn8-		 (TokSymbol SymClosePragma happy_var_1-	)}--happyReduce_70 = happySpecReduce_1  2# happyReduction_70-happyReduction_70 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn8-		 (TokId happy_var_1-	)}--happyReduce_71 = happySpecReduce_1  2# happyReduction_71-happyReduction_71 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	happyIn8-		 (TokQId happy_var_1-	)}--happyReduce_72 = happySpecReduce_1  2# happyReduction_72-happyReduction_72 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	happyIn8-		 (TokString happy_var_1-	)}--happyReduce_73 = happySpecReduce_1  2# happyReduction_73-happyReduction_73 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn8-		 (TokLiteral happy_var_1-	)}--happyReduce_74 = happySpecReduce_0  3# happyReduction_74-happyReduction_74  =  happyIn9-		 (()-	)--happyReduce_75 = happySpecReduce_2  3# happyReduction_75-happyReduction_75 happy_x_2-	happy_x_1-	 =  happyIn9-		 (()-	)--happyReduce_76 = happySpecReduce_2  4# happyReduction_76-happyReduction_76 happy_x_2-	happy_x_1-	 =  case happyOut11 happy_x_1 of { happy_var_1 -> -	happyIn10-		 (happy_var_1-	)}--happyReduce_77 = happySpecReduce_1  5# happyReduction_77-happyReduction_77 happy_x_1-	 =  case happyOut96 happy_x_1 of { happy_var_1 -> -	happyIn11-		 (([], happy_var_1)-	)}--happyReduce_78 = happySpecReduce_3  5# happyReduction_78-happyReduction_78 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut99 happy_x_2 of { happy_var_2 -> -	case happyOut11 happy_x_3 of { happy_var_3 -> -	happyIn11-		 (let (ps,m) = happy_var_3 in (happy_var_2 : ps, m)-	)}}--happyReduce_79 = happySpecReduce_1  6# happyReduction_79-happyReduction_79 happy_x_1-	 =  happyIn12-		 (()-	)--happyReduce_80 = happyMonadReduce 1# 6# happyReduction_80-happyReduction_80 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (( popContext)-	) (\r -> happyReturn (happyIn12 r))--happyReduce_81 = happySpecReduce_1  7# happyReduction_81-happyReduction_81 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> -	happyIn13-		 (happy_var_1-	)}--happyReduce_82 = happySpecReduce_2  7# happyReduction_82-happyReduction_82 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_2 of { (TokSymbol SymVirtualSemi happy_var_2) -> -	happyIn13-		 (happy_var_2-	)}--happyReduce_83 = happyMonadReduce 0# 8# happyReduction_83-happyReduction_83 (happyRest) tk-	 = happyThen (( pushLexState imp_dir)-	) (\r -> happyReturn (happyIn14 r))--happyReduce_84 = happyMonadReduce 1# 9# happyReduction_84-happyReduction_84 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	( case happy_var_1 of {-		     LitInt _ n	-> return $ fromIntegral n;-		     _		-> fail $ "Expected integer"-		   })}-	) (\r -> happyReturn (happyIn15 r))--happyReduce_85 = happyMonadReduce 1# 10# happyReduction_85-happyReduction_85 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	( mkName happy_var_1)}-	) (\r -> happyReturn (happyIn16 r))--happyReduce_86 = happySpecReduce_2  11# happyReduction_86-happyReduction_86 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut17 happy_x_2 of { happy_var_2 -> -	happyIn17-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_87 = happySpecReduce_1  11# happyReduction_87-happyReduction_87 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn17-		 ([happy_var_1]-	)}--happyReduce_88 = happySpecReduce_2  12# happyReduction_88-happyReduction_88 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn18-		 (Arg NotHidden Irrelevant happy_var_2-	)}--happyReduce_89 = happySpecReduce_1  12# happyReduction_89-happyReduction_89 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn18-		 (defaultArg happy_var_1-	)}--happyReduce_90 = happySpecReduce_2  13# happyReduction_90-happyReduction_90 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn19-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_91 = happySpecReduce_1  13# happyReduction_91-happyReduction_91 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn19-		 ([happy_var_1]-	)}--happyReduce_92 = happySpecReduce_2  14# happyReduction_92-happyReduction_92 happy_x_2-	happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	case happyOut20 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_93 = happySpecReduce_1  14# happyReduction_93-happyReduction_93 happy_x_1-	 =  case happyOut18 happy_x_1 of { happy_var_1 -> -	happyIn20-		 ([happy_var_1]-	)}--happyReduce_94 = happyReduce 4# 14# happyReduction_94-happyReduction_94 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut19 happy_x_2 of { happy_var_2 -> -	case happyOut20 happy_x_4 of { happy_var_4 -> -	happyIn20-		 (map hide happy_var_2 ++ happy_var_4-	) `HappyStk` happyRest}}--happyReduce_95 = happySpecReduce_3  14# happyReduction_95-happyReduction_95 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_2 of { happy_var_2 -> -	happyIn20-		 (map hide happy_var_2-	)}--happyReduce_96 = happyReduce 5# 14# happyReduction_96-happyReduction_96 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut17 happy_x_3 of { happy_var_3 -> -	case happyOut20 happy_x_5 of { happy_var_5 -> -	happyIn20-		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5-	) `HappyStk` happyRest}}--happyReduce_97 = happyReduce 4# 14# happyReduction_97-happyReduction_97 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut17 happy_x_3 of { happy_var_3 -> -	happyIn20-		 (map (Arg Hidden Irrelevant) happy_var_3-	) `HappyStk` happyRest}--happyReduce_98 = happyMonadReduce 1# 15# happyReduction_98-happyReduction_98 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> -	( mkQName happy_var_1)}-	) (\r -> happyReturn (happyIn21 r))--happyReduce_99 = happySpecReduce_1  15# happyReduction_99-happyReduction_99 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn21-		 (QName happy_var_1-	)}--happyReduce_100 = happySpecReduce_1  16# happyReduction_100-happyReduction_100 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn22-		 (happy_var_1-	)}--happyReduce_101 = happySpecReduce_1  17# happyReduction_101-happyReduction_101 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn23-		 (happy_var_1-	)}--happyReduce_102 = happySpecReduce_1  17# happyReduction_102-happyReduction_102 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn23-		 (Name (getRange happy_var_1) [Hole]-	)}--happyReduce_103 = happySpecReduce_2  18# happyReduction_103-happyReduction_103 happy_x_2-	happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	case happyOut24 happy_x_2 of { happy_var_2 -> -	happyIn24-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_104 = happySpecReduce_1  18# happyReduction_104-happyReduction_104 happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	happyIn24-		 ([happy_var_1]-	)}--happyReduce_105 = happyMonadReduce 1# 19# happyReduction_105-happyReduction_105 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> -	(-    let getName (Ident (QName x)) = Just x-	getName (Underscore r _)  = Just (Name r [Hole])-	getName _		  = Nothing-    in-    case partition isJust $ map getName happy_var_1 of-	(good, []) -> return $ map fromJust good-	_	   -> fail $ "expected sequence of bound identifiers")}-	) (\r -> happyReturn (happyIn25 r))--happyReduce_106 = happySpecReduce_0  20# happyReduction_106-happyReduction_106  =  happyIn26-		 ([]-	)--happyReduce_107 = happySpecReduce_2  20# happyReduction_107-happyReduction_107 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	case happyOut26 happy_x_2 of { happy_var_2 -> -	happyIn26-		 (snd happy_var_1 : happy_var_2-	)}}--happyReduce_108 = happyMonadReduce 1# 21# happyReduction_108-happyReduction_108 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> -	( fmap QName (mkName happy_var_1))}-	) (\r -> happyReturn (happyIn27 r))--happyReduce_109 = happySpecReduce_2  22# happyReduction_109-happyReduction_109 happy_x_2-	happy_x_1-	 =  case happyOut38 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_2 of { happy_var_2 -> -	happyIn28-		 (Pi happy_var_1 happy_var_2-	)}}--happyReduce_110 = happySpecReduce_3  22# happyReduction_110-happyReduction_110 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut48 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn28-		 (forallPi happy_var_2 happy_var_3-	)}}--happyReduce_111 = happySpecReduce_3  22# happyReduction_111-happyReduction_111 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn28-		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3-	)}}--happyReduce_112 = happySpecReduce_1  22# happyReduction_112-happyReduction_112 happy_x_1-	 =  case happyOut29 happy_x_1 of { happy_var_1 -> -	happyIn28-		 (happy_var_1-	)}--happyReduce_113 = happyMonadReduce 1# 23# happyReduction_113-happyReduction_113 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> -	( case happy_var_1 of-		      { [e]    -> return e-		      ; e : es -> return $ WithApp (fuseRange e es) e es-		      ; []     -> fail "impossible: empty with expressions"-		      })}-	) (\r -> happyReturn (happyIn29 r))--happyReduce_114 = happySpecReduce_3  24# happyReduction_114-happyReduction_114 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut33 happy_x_1 of { happy_var_1 -> -	case happyOut30 happy_x_3 of { happy_var_3 -> -	happyIn30-		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3-	)}}--happyReduce_115 = happySpecReduce_1  24# happyReduction_115-happyReduction_115 happy_x_1-	 =  case happyOut31 happy_x_1 of { happy_var_1 -> -	happyIn30-		 ([RawApp (getRange happy_var_1) happy_var_1]-	)}--happyReduce_116 = happySpecReduce_1  25# happyReduction_116-happyReduction_116 happy_x_1-	 =  case happyOut32 happy_x_1 of { happy_var_1 -> -	happyIn31-		 ([happy_var_1]-	)}--happyReduce_117 = happySpecReduce_2  25# happyReduction_117-happyReduction_117 happy_x_2-	happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut31 happy_x_2 of { happy_var_2 -> -	happyIn31-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_118 = happySpecReduce_3  26# happyReduction_118-happyReduction_118 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut45 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn32-		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3-	)}}}--happyReduce_119 = happySpecReduce_2  26# happyReduction_119-happyReduction_119 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> -	case happyOut46 happy_x_2 of { happy_var_2 -> -	happyIn32-		 (let (bs, h) = happy_var_2; r = fuseRange happy_var_1 bs in-                                     if null bs then AbsurdLam r h else-                                     Lam r bs (AbsurdLam r h)-	)}}--happyReduce_120 = happyReduce 4# 26# happyReduction_120-happyReduction_120 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> -	case happyOut118 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_4 of { happy_var_4 -> -	happyIn32-		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_121 = happySpecReduce_1  26# happyReduction_121-happyReduction_121 happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	happyIn32-		 (happy_var_1-	)}--happyReduce_122 = happyReduce 4# 26# happyReduction_122-happyReduction_122 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_4 of { happy_var_4 -> -	happyIn32-		 (QuoteGoal (getRange (happy_var_1,happy_var_4)) happy_var_2 happy_var_4-	) `HappyStk` happyRest}}}--happyReduce_123 = happySpecReduce_1  27# happyReduction_123-happyReduction_123 happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	happyIn33-		 ([happy_var_1]-	)}--happyReduce_124 = happySpecReduce_2  27# happyReduction_124-happyReduction_124 happy_x_2-	happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut33 happy_x_2 of { happy_var_2 -> -	happyIn33-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_125 = happySpecReduce_1  28# happyReduction_125-happyReduction_125 happy_x_1-	 =  case happyOut21 happy_x_1 of { happy_var_1 -> -	happyIn34-		 (Ident happy_var_1-	)}--happyReduce_126 = happySpecReduce_1  28# happyReduction_126-happyReduction_126 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> -	happyIn34-		 (Lit happy_var_1-	)}--happyReduce_127 = happySpecReduce_1  28# happyReduction_127-happyReduction_127 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> -	happyIn34-		 (QuestionMark (getRange happy_var_1) Nothing-	)}--happyReduce_128 = happySpecReduce_1  28# happyReduction_128-happyReduction_128 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> -	happyIn34-		 (Underscore (getRange happy_var_1) Nothing-	)}--happyReduce_129 = happySpecReduce_1  28# happyReduction_129-happyReduction_129 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> -	happyIn34-		 (Prop (getRange happy_var_1)-	)}--happyReduce_130 = happySpecReduce_1  28# happyReduction_130-happyReduction_130 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> -	happyIn34-		 (Set (getRange happy_var_1)-	)}--happyReduce_131 = happySpecReduce_1  28# happyReduction_131-happyReduction_131 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> -	happyIn34-		 (Quote (getRange happy_var_1)-	)}--happyReduce_132 = happySpecReduce_1  28# happyReduction_132-happyReduction_132 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> -	happyIn34-		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)-	)}--happyReduce_133 = happySpecReduce_3  28# happyReduction_133-happyReduction_133 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut28 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn34-		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)-	)}}}--happyReduce_134 = happyReduce 5# 28# happyReduction_134-happyReduction_134 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> -	happyIn34-		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_135 = happySpecReduce_3  28# happyReduction_135-happyReduction_135 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut28 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn34-		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2-	)}}}--happyReduce_136 = happySpecReduce_2  28# happyReduction_136-happyReduction_136 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> -	happyIn34-		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r-	)}}--happyReduce_137 = happySpecReduce_2  28# happyReduction_137-happyReduction_137 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> -	happyIn34-		 (Absurd (fuseRange happy_var_1 happy_var_2)-	)}}--happyReduce_138 = happySpecReduce_3  28# happyReduction_138-happyReduction_138 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut34 happy_x_3 of { happy_var_3 -> -	happyIn34-		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3-	)}}--happyReduce_139 = happySpecReduce_2  28# happyReduction_139-happyReduction_139 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> -	case happyOut34 happy_x_2 of { happy_var_2 -> -	happyIn34-		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_140 = happyReduce 4# 28# happyReduction_140-happyReduction_140 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut35 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> -	happyIn34-		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_141 = happySpecReduce_0  29# happyReduction_141-happyReduction_141  =  happyIn35-		 ([]-	)--happyReduce_142 = happySpecReduce_1  29# happyReduction_142-happyReduction_142 happy_x_1-	 =  case happyOut36 happy_x_1 of { happy_var_1 -> -	happyIn35-		 (happy_var_1-	)}--happyReduce_143 = happySpecReduce_1  30# happyReduction_143-happyReduction_143 happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	happyIn36-		 ([happy_var_1]-	)}--happyReduce_144 = happySpecReduce_3  30# happyReduction_144-happyReduction_144 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut37 happy_x_1 of { happy_var_1 -> -	case happyOut36 happy_x_3 of { happy_var_3 -> -	happyIn36-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_145 = happySpecReduce_3  31# happyReduction_145-happyReduction_145 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn37-		 ((happy_var_1, happy_var_3)-	)}}--happyReduce_146 = happySpecReduce_2  32# happyReduction_146-happyReduction_146 happy_x_2-	happy_x_1-	 =  case happyOut39 happy_x_1 of { happy_var_1 -> -	happyIn38-		 (happy_var_1-	)}--happyReduce_147 = happySpecReduce_1  33# happyReduction_147-happyReduction_147 happy_x_1-	 =  case happyOut40 happy_x_1 of { happy_var_1 -> -	happyIn39-		 ({-TeleBind-} happy_var_1-	)}--happyReduce_148 = happySpecReduce_2  34# happyReduction_148-happyReduction_148 happy_x_2-	happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	case happyOut40 happy_x_2 of { happy_var_2 -> -	happyIn40-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_149 = happySpecReduce_1  34# happyReduction_149-happyReduction_149 happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	happyIn40-		 ([happy_var_1]-	)}--happyReduce_150 = happySpecReduce_3  35# happyReduction_150-happyReduction_150 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> -	case happyOut42 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> -	happyIn41-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg NotHidden Relevant happy_var_2)-	)}}}--happyReduce_151 = happySpecReduce_3  35# happyReduction_151-happyReduction_151 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> -	case happyOut42 happy_x_2 of { happy_var_2 -> -	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> -	happyIn41-		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Hidden    Relevant happy_var_2)-	)}}}--happyReduce_152 = happySpecReduce_1  36# happyReduction_152-happyReduction_152 happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	happyIn42-		 ([happy_var_1]-	)}--happyReduce_153 = happySpecReduce_3  36# happyReduction_153-happyReduction_153 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut44 happy_x_1 of { happy_var_1 -> -	case happyOut43 happy_x_3 of { happy_var_3 -> -	happyIn42-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_154 = happySpecReduce_1  37# happyReduction_154-happyReduction_154 happy_x_1-	 =  case happyOut42 happy_x_1 of { happy_var_1 -> -	happyIn43-		 (happy_var_1-	)}--happyReduce_155 = happySpecReduce_3  37# happyReduction_155-happyReduction_155 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_1 of { happy_var_1 -> -	case happyOut43 happy_x_3 of { happy_var_3 -> -	happyIn43-		 (TNoBind happy_var_1 : happy_var_3-	)}}--happyReduce_156 = happySpecReduce_1  37# happyReduction_156-happyReduction_156 happy_x_1-	 =  case happyOut28 happy_x_1 of { happy_var_1 -> -	happyIn43-		 ([TNoBind happy_var_1]-	)}--happyReduce_157 = happySpecReduce_3  38# happyReduction_157-happyReduction_157 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn44-		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3-	)}}--happyReduce_158 = happyMonadReduce 2# 39# happyReduction_158-happyReduction_158 (happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> -	(-      case last happy_var_1 of-        Left _  -> parseError "Absurd lambda cannot have a body."-        _       -> return [ b | Right b <- happy_var_1 ])}-	) (\r -> happyReturn (happyIn45 r))--happyReduce_159 = happyMonadReduce 1# 40# happyReduction_159-happyReduction_159 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut47 happy_x_1 of { happy_var_1 -> -	(-    case last happy_var_1 of-      Right _ -> parseError "Missing body for lambda"-      Left h  -> return ([ b | Right b <- init happy_var_1], h))}-	) (\r -> happyReturn (happyIn46 r))--happyReduce_160 = happySpecReduce_2  41# happyReduction_160-happyReduction_160 happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	case happyOut47 happy_x_2 of { happy_var_2 -> -	happyIn47-		 (map Right happy_var_1 ++ happy_var_2-	)}}--happyReduce_161 = happySpecReduce_2  41# happyReduction_161-happyReduction_161 happy_x_2-	happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	case happyOut47 happy_x_2 of { happy_var_2 -> -	happyIn47-		 (Right (DomainFull happy_var_1) : happy_var_2-	)}}--happyReduce_162 = happySpecReduce_1  41# happyReduction_162-happyReduction_162 happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	happyIn47-		 (map Right happy_var_1-	)}--happyReduce_163 = happySpecReduce_1  41# happyReduction_163-happyReduction_163 happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	happyIn47-		 ([Right $ DomainFull happy_var_1]-	)}--happyReduce_164 = happySpecReduce_2  41# happyReduction_164-happyReduction_164 happy_x_2-	happy_x_1-	 =  happyIn47-		 ([Left NotHidden]-	)--happyReduce_165 = happySpecReduce_2  41# happyReduction_165-happyReduction_165 happy_x_2-	happy_x_1-	 =  happyIn47-		 ([Left Hidden]-	)--happyReduce_166 = happySpecReduce_2  42# happyReduction_166-happyReduction_166 happy_x_2-	happy_x_1-	 =  case happyOut49 happy_x_1 of { happy_var_1 -> -	happyIn48-		 (happy_var_1-	)}--happyReduce_167 = happySpecReduce_2  43# happyReduction_167-happyReduction_167 happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	case happyOut49 happy_x_2 of { happy_var_2 -> -	happyIn49-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_168 = happySpecReduce_2  43# happyReduction_168-happyReduction_168 happy_x_2-	happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	case happyOut49 happy_x_2 of { happy_var_2 -> -	happyIn49-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_169 = happySpecReduce_1  43# happyReduction_169-happyReduction_169 happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	happyIn49-		 (happy_var_1-	)}--happyReduce_170 = happySpecReduce_1  43# happyReduction_170-happyReduction_170 happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	happyIn49-		 ([DomainFull happy_var_1]-	)}--happyReduce_171 = happySpecReduce_2  44# happyReduction_171-happyReduction_171 happy_x_2-	happy_x_1-	 =  case happyOut51 happy_x_1 of { happy_var_1 -> -	case happyOut50 happy_x_2 of { happy_var_2 -> -	happyIn50-		 (happy_var_1 ++ happy_var_2-	)}}--happyReduce_172 = happySpecReduce_2  44# happyReduction_172-happyReduction_172 happy_x_2-	happy_x_1-	 =  case happyOut41 happy_x_1 of { happy_var_1 -> -	case happyOut50 happy_x_2 of { happy_var_2 -> -	happyIn50-		 (DomainFull happy_var_1 : happy_var_2-	)}}--happyReduce_173 = happySpecReduce_0  44# happyReduction_173-happyReduction_173  =  happyIn50-		 ([]-	)--happyReduce_174 = happySpecReduce_1  45# happyReduction_174-happyReduction_174 happy_x_1-	 =  case happyOut23 happy_x_1 of { happy_var_1 -> -	happyIn51-		 ([DomainFree NotHidden $ mkBoundName_ happy_var_1]-	)}--happyReduce_175 = happySpecReduce_3  45# happyReduction_175-happyReduction_175 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut25 happy_x_2 of { happy_var_2 -> -	happyIn51-		 (map (DomainFree Hidden . mkBoundName_) happy_var_2-	)}--happyReduce_176 = happySpecReduce_1  46# happyReduction_176-happyReduction_176 happy_x_1-	 =  case happyOut53 happy_x_1 of { happy_var_1 -> -	happyIn52-		 ((Nothing, happy_var_1)-	)}--happyReduce_177 = happyMonadReduce 3# 46# happyReduction_177-happyReduction_177 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut53 happy_x_3 of { happy_var_3 -> -	( isName "as" happy_var_1 >>-                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}-	) (\r -> happyReturn (happyIn52 r))--happyReduce_178 = happyMonadReduce 1# 47# happyReduction_178-happyReduction_178 (happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut54 happy_x_1 of { happy_var_1 -> -	( verifyImportDirective happy_var_1)}-	) (\r -> happyReturn (happyIn53 r))--happyReduce_179 = happySpecReduce_2  48# happyReduction_179-happyReduction_179 happy_x_2-	happy_x_1-	 =  case happyOut55 happy_x_2 of { happy_var_2 -> -	happyIn54-		 (happy_var_2 { publicOpen = True }-	)}--happyReduce_180 = happySpecReduce_1  48# happyReduction_180-happyReduction_180 happy_x_1-	 =  case happyOut55 happy_x_1 of { happy_var_1 -> -	happyIn54-		 (happy_var_1-	)}--happyReduce_181 = happySpecReduce_2  49# happyReduction_181-happyReduction_181 happy_x_2-	happy_x_1-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> -	case happyOut57 happy_x_2 of { happy_var_2 -> -	happyIn55-		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False-	)}}--happyReduce_182 = happySpecReduce_1  49# happyReduction_182-happyReduction_182 happy_x_1-	 =  case happyOut57 happy_x_1 of { happy_var_1 -> -	happyIn55-		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False-	)}--happyReduce_183 = happySpecReduce_1  49# happyReduction_183-happyReduction_183 happy_x_1-	 =  case happyOut56 happy_x_1 of { happy_var_1 -> -	happyIn55-		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False-	)}--happyReduce_184 = happySpecReduce_0  49# happyReduction_184-happyReduction_184  =  happyIn55-		 (ImportDirective noRange (Hiding []) [] False-	)--happyReduce_185 = happyReduce 4# 50# happyReduction_185-happyReduction_185 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> -	case happyOut62 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn56-		 ((Using happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_186 = happyReduce 4# 50# happyReduction_186-happyReduction_186 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> -	case happyOut63 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn56-		 ((Hiding happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_187 = happyReduce 4# 51# happyReduction_187-happyReduction_187 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> -	happyIn57-		 ((happy_var_3 , fuseRange happy_var_1 happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_188 = happySpecReduce_3  52# happyReduction_188-happyReduction_188 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> -	case happyOut58 happy_x_3 of { happy_var_3 -> -	happyIn58-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_189 = happySpecReduce_1  52# happyReduction_189-happyReduction_189 happy_x_1-	 =  case happyOut59 happy_x_1 of { happy_var_1 -> -	happyIn58-		 ([happy_var_1]-	)}--happyReduce_190 = happySpecReduce_3  53# happyReduction_190-happyReduction_190 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut60 happy_x_1 of { happy_var_1 -> -	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> -	case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn59-		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)-	)}}}--happyReduce_191 = happySpecReduce_2  54# happyReduction_191-happyReduction_191 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn60-		 (ImportedName happy_var_2-	)}--happyReduce_192 = happySpecReduce_3  54# happyReduction_192-happyReduction_192 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_3 of { happy_var_3 -> -	happyIn60-		 (ImportedModule happy_var_3-	)}--happyReduce_193 = happySpecReduce_1  55# happyReduction_193-happyReduction_193 happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	happyIn61-		 (ImportedName happy_var_1-	)}--happyReduce_194 = happySpecReduce_2  55# happyReduction_194-happyReduction_194 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn61-		 (ImportedModule happy_var_2-	)}--happyReduce_195 = happySpecReduce_0  56# happyReduction_195-happyReduction_195  =  happyIn62-		 ([]-	)--happyReduce_196 = happySpecReduce_1  56# happyReduction_196-happyReduction_196 happy_x_1-	 =  case happyOut63 happy_x_1 of { happy_var_1 -> -	happyIn62-		 (happy_var_1-	)}--happyReduce_197 = happySpecReduce_1  57# happyReduction_197-happyReduction_197 happy_x_1-	 =  case happyOut61 happy_x_1 of { happy_var_1 -> -	happyIn63-		 ([happy_var_1]-	)}--happyReduce_198 = happySpecReduce_3  57# happyReduction_198-happyReduction_198 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut61 happy_x_1 of { happy_var_1 -> -	case happyOut63 happy_x_3 of { happy_var_3 -> -	happyIn63-		 (happy_var_1 : happy_var_3-	)}}--happyReduce_199 = happyMonadReduce 3# 58# happyReduction_199-happyReduction_199 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut29 happy_x_1 of { happy_var_1 -> -	case happyOut67 happy_x_2 of { happy_var_2 -> -	case happyOut66 happy_x_3 of { happy_var_3 -> -	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}-	) (\r -> happyReturn (happyIn64 r))--happyReduce_200 = happyReduce 4# 58# happyReduction_200-happyReduction_200 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> -	case happyOut65 happy_x_2 of { happy_var_2 -> -	case happyOut67 happy_x_3 of { happy_var_3 -> -	case happyOut66 happy_x_4 of { happy_var_4 -> -	happyIn64-		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4-	) `HappyStk` happyRest}}}}--happyReduce_201 = happySpecReduce_0  59# happyReduction_201-happyReduction_201  =  happyIn65-		 ([]-	)--happyReduce_202 = happyMonadReduce 3# 59# happyReduction_202-happyReduction_202 (happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut33 happy_x_2 of { happy_var_2 -> -	case happyOut65 happy_x_3 of { happy_var_3 -> -	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->-		   return (p : happy_var_3))}}-	) (\r -> happyReturn (happyIn65 r))--happyReduce_203 = happySpecReduce_0  60# happyReduction_203-happyReduction_203  =  happyIn66-		 ([]-	)--happyReduce_204 = happySpecReduce_2  60# happyReduction_204-happyReduction_204 happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_2 of { happy_var_2 -> -	happyIn66-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_205 = happySpecReduce_0  61# happyReduction_205-happyReduction_205  =  happyIn67-		 ([]-	)--happyReduce_206 = happySpecReduce_2  61# happyReduction_206-happyReduction_206 happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_2 of { happy_var_2 -> -	happyIn67-		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }-	)}--happyReduce_207 = happySpecReduce_0  62# happyReduction_207-happyReduction_207  =  happyIn68-		 (NoWhere-	)--happyReduce_208 = happySpecReduce_2  62# happyReduction_208-happyReduction_208 happy_x_2-	happy_x_1-	 =  case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn68-		 (AnyWhere happy_var_2-	)}--happyReduce_209 = happyReduce 4# 62# happyReduction_209-happyReduction_209 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut118 happy_x_4 of { happy_var_4 -> -	happyIn68-		 (SomeWhere happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_210 = happySpecReduce_1  63# happyReduction_210-happyReduction_210 happy_x_1-	 =  case happyOut71 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_211 = happySpecReduce_1  63# happyReduction_211-happyReduction_211 happy_x_1-	 =  case happyOut80 happy_x_1 of { happy_var_1 -> -	happyIn69-		 (happy_var_1-	)}--happyReduce_212 = happySpecReduce_1  63# happyReduction_212-happyReduction_212 happy_x_1-	 =  case happyOut74 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_213 = happySpecReduce_1  63# happyReduction_213-happyReduction_213 happy_x_1-	 =  case happyOut76 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_214 = happySpecReduce_1  63# happyReduction_214-happyReduction_214 happy_x_1-	 =  case happyOut77 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_215 = happySpecReduce_1  63# happyReduction_215-happyReduction_215 happy_x_1-	 =  case happyOut79 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_216 = happySpecReduce_1  63# happyReduction_216-happyReduction_216 happy_x_1-	 =  case happyOut81 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_217 = happySpecReduce_1  63# happyReduction_217-happyReduction_217 happy_x_1-	 =  case happyOut82 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_218 = happySpecReduce_1  63# happyReduction_218-happyReduction_218 happy_x_1-	 =  case happyOut83 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_219 = happySpecReduce_1  63# happyReduction_219-happyReduction_219 happy_x_1-	 =  case happyOut84 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_220 = happySpecReduce_1  63# happyReduction_220-happyReduction_220 happy_x_1-	 =  case happyOut85 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_221 = happySpecReduce_1  63# happyReduction_221-happyReduction_221 happy_x_1-	 =  case happyOut91 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_222 = happySpecReduce_1  63# happyReduction_222-happyReduction_222 happy_x_1-	 =  case happyOut94 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_223 = happySpecReduce_1  63# happyReduction_223-happyReduction_223 happy_x_1-	 =  case happyOut93 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_224 = happySpecReduce_1  63# happyReduction_224-happyReduction_224 happy_x_1-	 =  case happyOut95 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_225 = happySpecReduce_1  63# happyReduction_225-happyReduction_225 happy_x_1-	 =  case happyOut98 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_226 = happySpecReduce_1  63# happyReduction_226-happyReduction_226 happy_x_1-	 =  case happyOut86 happy_x_1 of { happy_var_1 -> -	happyIn69-		 ([happy_var_1]-	)}--happyReduce_227 = happySpecReduce_3  64# happyReduction_227-happyReduction_227 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut17 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn70-		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1-	)}}--happyReduce_228 = happyReduce 4# 65# happyReduction_228-happyReduction_228 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut28 happy_x_4 of { happy_var_4 -> -	happyIn71-		 (TypeSig Irrelevant happy_var_2 happy_var_4-	) `HappyStk` happyRest}}--happyReduce_229 = happySpecReduce_3  65# happyReduction_229-happyReduction_229 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn71-		 (TypeSig Relevant happy_var_1 happy_var_3-	)}}--happyReduce_230 = happySpecReduce_3  66# happyReduction_230-happyReduction_230 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut19 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn72-		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1-	)}}--happyReduce_231 = happySpecReduce_3  67# happyReduction_231-happyReduction_231 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut20 happy_x_1 of { happy_var_1 -> -	case happyOut28 happy_x_3 of { happy_var_3 -> -	happyIn73-		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1-	)}}--happyReduce_232 = happySpecReduce_3  68# happyReduction_232-happyReduction_232 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut64 happy_x_1 of { happy_var_1 -> -	case happyOut75 happy_x_2 of { happy_var_2 -> -	case happyOut68 happy_x_3 of { happy_var_3 -> -	happyIn74-		 (FunClause happy_var_1 happy_var_2 happy_var_3-	)}}}--happyReduce_233 = happySpecReduce_2  69# happyReduction_233-happyReduction_233 happy_x_2-	happy_x_1-	 =  case happyOut28 happy_x_2 of { happy_var_2 -> -	happyIn75-		 (RHS happy_var_2-	)}--happyReduce_234 = happySpecReduce_0  69# happyReduction_234-happyReduction_234  =  happyIn75-		 (AbsurdRHS-	)--happyReduce_235 = happyReduce 7# 70# happyReduction_235-happyReduction_235 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOut28 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut116 happy_x_7 of { happy_var_7 -> -	happyIn76-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_236 = happyReduce 7# 70# happyReduction_236-happyReduction_236 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOut28 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut116 happy_x_7 of { happy_var_7 -> -	happyIn76-		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 (map addType happy_var_3) happy_var_5 happy_var_7-	) `HappyStk` happyRest}}}}}}--happyReduce_237 = happyReduce 7# 71# happyReduction_237-happyReduction_237 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOut28 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> -	case happyOut117 happy_x_7 of { happy_var_7 -> -	happyIn77-		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) (map addType happy_var_3) happy_var_5 (snd happy_var_7)-	) `HappyStk` happyRest}}}}}}--happyReduce_238 = happySpecReduce_2  72# happyReduction_238-happyReduction_238 happy_x_2-	happy_x_1-	 =  case happyOut16 happy_x_2 of { happy_var_2 -> -	happyIn78-		 (happy_var_2-	)}--happyReduce_239 = happySpecReduce_3  73# happyReduction_239-happyReduction_239 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn79-		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_240 = happySpecReduce_3  73# happyReduction_240-happyReduction_240 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn79-		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_241 = happySpecReduce_3  73# happyReduction_241-happyReduction_241 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> -	case happyOut15 happy_x_2 of { happy_var_2 -> -	case happyOut24 happy_x_3 of { happy_var_3 -> -	happyIn79-		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3-	)}}}--happyReduce_242 = happySpecReduce_2  74# happyReduction_242-happyReduction_242 happy_x_2-	happy_x_1-	 =  case happyOut114 happy_x_2 of { happy_var_2 -> -	happyIn80-		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2-	)}--happyReduce_243 = happySpecReduce_2  75# happyReduction_243-happyReduction_243 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> -	case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn81-		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_244 = happySpecReduce_2  76# happyReduction_244-happyReduction_244 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> -	case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn82-		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_245 = happySpecReduce_2  77# happyReduction_245-happyReduction_245 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> -	case happyOut118 happy_x_2 of { happy_var_2 -> -	happyIn83-		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_246 = happySpecReduce_2  78# happyReduction_246-happyReduction_246 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> -	case happyOut112 happy_x_2 of { happy_var_2 -> -	happyIn84-		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_247 = happySpecReduce_2  79# happyReduction_247-happyReduction_247 happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> -	case happyOut110 happy_x_2 of { happy_var_2 -> -	happyIn85-		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2-	)}}--happyReduce_248 = happyMonadReduce 5# 80# happyReduction_248-happyReduction_248 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut88 happy_x_3 of { happy_var_3 -> -	case happyOut87 happy_x_5 of { happy_var_5 -> -	(-  case happy_var_2 of-    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of-      Left err -> parseError $ "malformed syntax declaration: " ++ err-      Right n -> return $ Syntax happy_var_2 n-    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}-	) (\r -> happyReturn (happyIn86 r))--happyReduce_249 = happySpecReduce_1  81# happyReduction_249-happyReduction_249 happy_x_1-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> -	happyIn87-		 ([happy_var_1]-	)}--happyReduce_250 = happySpecReduce_2  81# happyReduction_250-happyReduction_250 happy_x_2-	happy_x_1-	 =  case happyOut87 happy_x_1 of { happy_var_1 -> -	case happyOut90 happy_x_2 of { happy_var_2 -> -	happyIn87-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_251 = happySpecReduce_1  82# happyReduction_251-happyReduction_251 happy_x_1-	 =  case happyOut89 happy_x_1 of { happy_var_1 -> -	happyIn88-		 ([happy_var_1]-	)}--happyReduce_252 = happySpecReduce_2  82# happyReduction_252-happyReduction_252 happy_x_2-	happy_x_1-	 =  case happyOut88 happy_x_1 of { happy_var_1 -> -	case happyOut89 happy_x_2 of { happy_var_2 -> -	happyIn88-		 (happy_var_1 ++ [happy_var_2]-	)}}--happyReduce_253 = happySpecReduce_1  83# happyReduction_253-happyReduction_253 happy_x_1-	 =  case happyOut90 happy_x_1 of { happy_var_1 -> -	happyIn89-		 (ExprHole happy_var_1-	)}--happyReduce_254 = happyReduce 6# 83# happyReduction_254-happyReduction_254 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut90 happy_x_3 of { happy_var_3 -> -	case happyOut90 happy_x_5 of { happy_var_5 -> -	happyIn89-		 (LambdaHole happy_var_3 happy_var_5-	) `HappyStk` happyRest}}--happyReduce_255 = happySpecReduce_1  84# happyReduction_255-happyReduction_255 happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> -	happyIn90-		 (snd happy_var_1-	)}--happyReduce_256 = happyReduce 4# 85# happyReduction_256-happyReduction_256 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut92 happy_x_3 of { happy_var_3 -> -	case happyOut53 happy_x_4 of { happy_var_4 -> -	happyIn91-		 (let-    { m   = happy_var_2-    ; es  = happy_var_3-    ; dir = happy_var_4-    ; r   = getRange (happy_var_1, m, es, dir)-    } in-    case es of-    { []  -> Open r m dir-    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2) []-                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir-                       ]-    }-	) `HappyStk` happyRest}}}}--happyReduce_257 = happySpecReduce_0  86# happyReduction_257-happyReduction_257  =  happyIn92-		 ([]-	)--happyReduce_258 = happySpecReduce_2  86# happyReduction_258-happyReduction_258 happy_x_2-	happy_x_1-	 =  case happyOut34 happy_x_1 of { happy_var_1 -> -	case happyOut92 happy_x_2 of { happy_var_2 -> -	happyIn92-		 (happy_var_1 : happy_var_2-	)}}--happyReduce_259 = happyReduce 6# 87# happyReduction_259-happyReduction_259 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOut28 happy_x_5 of { happy_var_5 -> -	case happyOut53 happy_x_6 of { happy_var_6 -> -	happyIn93-		 (ModuleMacro (getRange (happy_var_1, happy_var_5, happy_var_6)) happy_var_2 (map addType happy_var_3) happy_var_5 DontOpen happy_var_6-	) `HappyStk` happyRest}}}}}--happyReduce_260 = happyReduce 7# 87# happyReduction_260-happyReduction_260 (happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut16 happy_x_3 of { happy_var_3 -> -	case happyOut50 happy_x_4 of { happy_var_4 -> -	case happyOut28 happy_x_6 of { happy_var_6 -> -	case happyOut53 happy_x_7 of { happy_var_7 -> -	happyIn93-		 (ModuleMacro (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_3 (map addType happy_var_4) happy_var_6 DoOpen happy_var_7-	) `HappyStk` happyRest}}}}}--happyReduce_261 = happySpecReduce_3  88# happyReduction_261-happyReduction_261 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut52 happy_x_3 of { happy_var_3 -> -	happyIn94-		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)-	)}}}--happyReduce_262 = happyReduce 4# 88# happyReduction_262-happyReduction_262 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> -	case happyOut22 happy_x_3 of { happy_var_3 -> -	case happyOut52 happy_x_4 of { happy_var_4 -> -	happyIn94-		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)-	) `HappyStk` happyRest}}}--happyReduce_263 = happyReduce 5# 89# happyReduction_263-happyReduction_263 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut16 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut119 happy_x_5 of { happy_var_5 -> -	happyIn95-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_264 = happySpecReduce_2  90# happyReduction_264-happyReduction_264 happy_x_2-	happy_x_1-	 =  case happyOut97 happy_x_2 of { happy_var_2 -> -	happyIn96-		 ([happy_var_2]-	)}--happyReduce_265 = happySpecReduce_3  90# happyReduction_265-happyReduction_265 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut94 happy_x_2 of { happy_var_2 -> -	case happyOut96 happy_x_3 of { happy_var_3 -> -	happyIn96-		 (happy_var_2 : happy_var_3-	)}}--happyReduce_266 = happySpecReduce_3  90# happyReduction_266-happyReduction_266 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOut91 happy_x_2 of { happy_var_2 -> -	case happyOut96 happy_x_3 of { happy_var_3 -> -	happyIn96-		 (happy_var_2 : happy_var_3-	)}}--happyReduce_267 = happyReduce 5# 91# happyReduction_267-happyReduction_267 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> -	case happyOut22 happy_x_2 of { happy_var_2 -> -	case happyOut50 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> -	case happyOut119 happy_x_5 of { happy_var_5 -> -	happyIn97-		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_268 = happySpecReduce_1  92# happyReduction_268-happyReduction_268 happy_x_1-	 =  case happyOut100 happy_x_1 of { happy_var_1 -> -	happyIn98-		 (Pragma happy_var_1-	)}--happyReduce_269 = happySpecReduce_1  93# happyReduction_269-happyReduction_269 happy_x_1-	 =  case happyOut101 happy_x_1 of { happy_var_1 -> -	happyIn99-		 (happy_var_1-	)}--happyReduce_270 = happySpecReduce_1  94# happyReduction_270-happyReduction_270 happy_x_1-	 =  case happyOut102 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_271 = happySpecReduce_1  94# happyReduction_271-happyReduction_271 happy_x_1-	 =  case happyOut103 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_272 = happySpecReduce_1  94# happyReduction_272-happyReduction_272 happy_x_1-	 =  case happyOut105 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_273 = happySpecReduce_1  94# happyReduction_273-happyReduction_273 happy_x_1-	 =  case happyOut104 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_274 = happySpecReduce_1  94# happyReduction_274-happyReduction_274 happy_x_1-	 =  case happyOut106 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_275 = happySpecReduce_1  94# happyReduction_275-happyReduction_275 happy_x_1-	 =  case happyOut108 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_276 = happySpecReduce_1  94# happyReduction_276-happyReduction_276 happy_x_1-	 =  case happyOut109 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_277 = happySpecReduce_1  94# happyReduction_277-happyReduction_277 happy_x_1-	 =  case happyOut107 happy_x_1 of { happy_var_1 -> -	happyIn100-		 (happy_var_1-	)}--happyReduce_278 = happyReduce 4# 95# happyReduction_278-happyReduction_278 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut26 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn101-		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_279 = happyReduce 5# 96# happyReduction_279-happyReduction_279 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOut27 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn102-		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_280 = happyReduce 5# 97# happyReduction_280-happyReduction_280 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn103-		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_281 = happyReduce 5# 98# happyReduction_281-happyReduction_281 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn104-		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_282 = happyReduce 6# 99# happyReduction_282-happyReduction_282 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> -	case happyOut26 happy_x_5 of { happy_var_5 -> -	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> -	happyIn105-		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5-	) `HappyStk` happyRest}}}}}--happyReduce_283 = happyReduce 5# 100# happyReduction_283-happyReduction_283 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOut26 happy_x_4 of { happy_var_4 -> -	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> -	happyIn106-		 (CompiledEpicPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)-	) `HappyStk` happyRest}}}}--happyReduce_284 = happyReduce 4# 101# happyReduction_284-happyReduction_284 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOut27 happy_x_3 of { happy_var_3 -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	happyIn107-		 (EtaPragma (fuseRange happy_var_1 happy_var_4) happy_var_3-	) `HappyStk` happyRest}}}--happyReduce_285 = happyMonadReduce 4# 102# happyReduction_285-happyReduction_285 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest) tk-	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> -	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> -	( let s = snd happy_var_3 in-       if validHaskellModuleName s-       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s-       else parseError $ "Malformed module name: " ++ s ++ ".")}}}-	) (\r -> happyReturn (happyIn108 r))--happyReduce_286 = happySpecReduce_3  103# happyReduction_286-happyReduction_286 happy_x_3-	happy_x_2-	happy_x_1-	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> -	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> -	happyIn109-		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)-	)}}--happyReduce_287 = happyReduce 5# 104# happyReduction_287-happyReduction_287 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut111 happy_x_3 of { happy_var_3 -> -	happyIn110-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_288 = happyReduce 4# 105# happyReduction_288-happyReduction_288 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut111 happy_x_1 of { happy_var_1 -> -	case happyOut70 happy_x_4 of { happy_var_4 -> -	happyIn111-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_289 = happySpecReduce_2  105# happyReduction_289-happyReduction_289 happy_x_2-	happy_x_1-	 =  case happyOut70 happy_x_2 of { happy_var_2 -> -	happyIn111-		 (reverse happy_var_2-	)}--happyReduce_290 = happyReduce 5# 106# happyReduction_290-happyReduction_290 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut113 happy_x_3 of { happy_var_3 -> -	happyIn112-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_291 = happyReduce 4# 107# happyReduction_291-happyReduction_291 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut113 happy_x_1 of { happy_var_1 -> -	case happyOut72 happy_x_4 of { happy_var_4 -> -	happyIn113-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_292 = happySpecReduce_2  107# happyReduction_292-happyReduction_292 happy_x_2-	happy_x_1-	 =  case happyOut72 happy_x_2 of { happy_var_2 -> -	happyIn113-		 (reverse happy_var_2-	)}--happyReduce_293 = happyReduce 5# 108# happyReduction_293-happyReduction_293 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut115 happy_x_3 of { happy_var_3 -> -	happyIn114-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_294 = happyReduce 4# 109# happyReduction_294-happyReduction_294 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut115 happy_x_1 of { happy_var_1 -> -	case happyOut73 happy_x_4 of { happy_var_4 -> -	happyIn115-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_295 = happySpecReduce_2  109# happyReduction_295-happyReduction_295 happy_x_2-	happy_x_1-	 =  case happyOut73 happy_x_2 of { happy_var_2 -> -	happyIn115-		 (reverse happy_var_2-	)}--happyReduce_296 = happyReduce 4# 110# happyReduction_296-happyReduction_296 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn116-		 ([]-	) `HappyStk` happyRest--happyReduce_297 = happySpecReduce_1  110# happyReduction_297-happyReduction_297 happy_x_1-	 =  case happyOut110 happy_x_1 of { happy_var_1 -> -	happyIn116-		 (happy_var_1-	)}--happyReduce_298 = happyReduce 4# 111# happyReduction_298-happyReduction_298 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn117-		 ((Nothing, [])-	) `HappyStk` happyRest--happyReduce_299 = happyReduce 6# 111# happyReduction_299-happyReduction_299 (happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut78 happy_x_4 of { happy_var_4 -> -	happyIn117-		 ((Just happy_var_4, [])-	) `HappyStk` happyRest}--happyReduce_300 = happyReduce 8# 111# happyReduction_300-happyReduction_300 (happy_x_8 `HappyStk`-	happy_x_7 `HappyStk`-	happy_x_6 `HappyStk`-	happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut78 happy_x_4 of { happy_var_4 -> -	case happyOut120 happy_x_6 of { happy_var_6 -> -	happyIn117-		 ((Just happy_var_4, reverse happy_var_6)-	) `HappyStk` happyRest}}--happyReduce_301 = happyReduce 5# 111# happyReduction_301-happyReduction_301 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut120 happy_x_3 of { happy_var_3 -> -	happyIn117-		 ((Nothing, reverse happy_var_3)-	) `HappyStk` happyRest}--happyReduce_302 = happyReduce 5# 112# happyReduction_302-happyReduction_302 (happy_x_5 `HappyStk`-	happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut120 happy_x_3 of { happy_var_3 -> -	happyIn118-		 (reverse happy_var_3-	) `HappyStk` happyRest}--happyReduce_303 = happyReduce 4# 113# happyReduction_303-happyReduction_303 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = happyIn119-		 ([]-	) `HappyStk` happyRest--happyReduce_304 = happySpecReduce_1  113# happyReduction_304-happyReduction_304 happy_x_1-	 =  case happyOut118 happy_x_1 of { happy_var_1 -> -	happyIn119-		 (happy_var_1-	)}--happyReduce_305 = happyReduce 4# 114# happyReduction_305-happyReduction_305 (happy_x_4 `HappyStk`-	happy_x_3 `HappyStk`-	happy_x_2 `HappyStk`-	happy_x_1 `HappyStk`-	happyRest)-	 = case happyOut120 happy_x_1 of { happy_var_1 -> -	case happyOut69 happy_x_4 of { happy_var_4 -> -	happyIn120-		 (reverse happy_var_4 ++ happy_var_1-	) `HappyStk` happyRest}}--happyReduce_306 = happySpecReduce_2  114# happyReduction_306-happyReduction_306 happy_x_2-	happy_x_1-	 =  case happyOut69 happy_x_2 of { happy_var_2 -> -	happyIn120-		 (reverse happy_var_2-	)}--happyNewToken action sts stk-	= lexer(\tk -> -	let cont i = happyDoAction i tk action sts stk in-	case tk of {-	TokEOF -> happyDoAction 69# tk action sts stk;-	TokKeyword KwLet happy_dollar_dollar -> cont 1#;-	TokKeyword KwIn happy_dollar_dollar -> cont 2#;-	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;-	TokKeyword KwWith happy_dollar_dollar -> cont 4#;-	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;-	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;-	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;-	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;-	TokKeyword KwImport happy_dollar_dollar -> cont 9#;-	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;-	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;-	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;-	TokKeyword KwTo happy_dollar_dollar -> cont 13#;-	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;-	TokKeyword KwModule happy_dollar_dollar -> cont 15#;-	TokKeyword KwData happy_dollar_dollar -> cont 16#;-	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;-	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;-	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;-	TokKeyword KwField happy_dollar_dollar -> cont 20#;-	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;-	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;-	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;-	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;-	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;-	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;-	TokKeyword KwProp happy_dollar_dollar -> cont 27#;-	TokKeyword KwSet happy_dollar_dollar -> cont 28#;-	TokKeyword KwForall happy_dollar_dollar -> cont 29#;-	TokKeyword KwSyntax happy_dollar_dollar -> cont 30#;-	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 31#;-	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 32#;-	TokKeyword KwIMPORT happy_dollar_dollar -> cont 33#;-	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 34#;-	TokKeyword KwETA happy_dollar_dollar -> cont 35#;-	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 36#;-	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 37#;-	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 38#;-	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 39#;-	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 40#;-	TokKeyword KwQuote happy_dollar_dollar -> cont 41#;-	TokSetN happy_dollar_dollar -> cont 42#;-	TokTeX happy_dollar_dollar -> cont 43#;-	TokComment happy_dollar_dollar -> cont 44#;-	TokSymbol SymEllipsis happy_dollar_dollar -> cont 45#;-	TokSymbol SymDot happy_dollar_dollar -> cont 46#;-	TokSymbol SymSemi happy_dollar_dollar -> cont 47#;-	TokSymbol SymColon happy_dollar_dollar -> cont 48#;-	TokSymbol SymEqual happy_dollar_dollar -> cont 49#;-	TokSymbol SymUnderscore happy_dollar_dollar -> cont 50#;-	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 51#;-	TokSymbol SymArrow happy_dollar_dollar -> cont 52#;-	TokSymbol SymLambda happy_dollar_dollar -> cont 53#;-	TokSymbol SymAs happy_dollar_dollar -> cont 54#;-	TokSymbol SymBar happy_dollar_dollar -> cont 55#;-	TokSymbol SymOpenParen happy_dollar_dollar -> cont 56#;-	TokSymbol SymCloseParen happy_dollar_dollar -> cont 57#;-	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 58#;-	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 59#;-	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 60#;-	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 61#;-	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 62#;-	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 63#;-	TokSymbol SymClosePragma happy_dollar_dollar -> cont 64#;-	TokId happy_dollar_dollar -> cont 65#;-	TokQId happy_dollar_dollar -> cont 66#;-	TokString happy_dollar_dollar -> cont 67#;-	TokLiteral happy_dollar_dollar -> cont 68#;-	_ -> happyError' tk-	})--happyError_ tk = happyError' tk--happyThen :: () => Parser a -> (a -> Parser b) -> Parser b-happyThen = (>>=)-happyReturn :: () => a -> Parser a-happyReturn = (return)-happyThen1 = happyThen-happyReturn1 :: () => a -> Parser a-happyReturn1 = happyReturn-happyError' :: () => (Token) -> Parser a-happyError' tk = (\token -> happyError) tk--tokensParser = happySomeParser where-  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))--exprParser = happySomeParser where-  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut28 x))--moduleParser = happySomeParser where-  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut10 x))--happySeq = happyDontSeq---{---------------------------------------------------------------------------    Parsers- --------------------------------------------------------------------------}---- | Parse the token stream. Used by the TeX compiler.-tokensParser :: Parser [Token]---- | Parse an expression. Could be used in interactions.-exprParser :: Parser Expr---- | Parse a module.-moduleParser :: Parser Module---{---------------------------------------------------------------------------    Happy stuff- --------------------------------------------------------------------------}---- | Required by Happy.-happyError :: Parser a-happyError = parseError "Parse error"---{---------------------------------------------------------------------------    Utility functions- --------------------------------------------------------------------------}---- | Create a name from a string.--mkName :: (Interval, String) -> Parser Name-mkName (i, s) = do-    let xs = parts s-    mapM_ isValidId xs-    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"-    return $ Name (getRange i) xs-    where-        parts :: String -> [NamePart]-        parts ""        = []-        parts ('_' : s) = Hole : parts s-        parts s         = Id x : parts s'-          where (x, s') = break (== '_') s--	isValidId Hole   = return ()-	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of-	    ParseOk _ (TokId _) -> return ()-	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"--	-- we know that there are no two Ids in a row-	alternating (Hole : Hole : _) = False-	alternating (_ : xs)	      = alternating xs-	alternating []		      = True---- | Create a qualified name from a list of strings-mkQName :: [(Interval, String)] -> Parser QName-mkQName ss = do-    xs <- mapM mkName ss-    return $ foldr Qual (QName $ last xs) (init xs)---- | Match a particular name.-isName :: String -> (Interval, String) -> Parser ()-isName s (_,s')-    | s == s'	= return ()-    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'---- | Build a forall pi (forall x y z -> ...)-forallPi :: [LamBinding] -> Expr -> Expr-forallPi bs e = Pi (map addType bs) e---- | Converts lambda bindings to typed bindings.-addType :: LamBinding -> TypedBindings-addType (DomainFull b)	 = b-addType (DomainFree h x) = TypedBindings r $ Arg h Relevant [TBind r [x] $ Underscore r Nothing]-  where r = getRange x---- | Check that an import directive doesn't contain repeated names-verifyImportDirective :: ImportDirective -> Parser ImportDirective-verifyImportDirective i =-    case filter ((>1) . length)-	 $ group-	 $ sort xs-    of-	[]  -> return i-	yss -> let Just pos = rStart $ getRange $ head $ concat yss in-               parseErrorAt pos $-		"repeated name" ++ s ++ " in import directive: " ++-		concat (intersperse ", " $ map (show . head) yss)-	    where-		s = case yss of-			[_] -> ""-			_   -> "s"-    where-	xs = names (usingOrHiding i) ++ map renFrom (renaming i)-	names (Using xs)    = xs-	names (Hiding xs)   = xs---- | Breaks up a string into substrings. Returns every maximal--- subsequence of zero or more characters distinct from @'.'@.------ > splitOnDots ""         == [""]--- > splitOnDots "foo.bar"  == ["foo", "bar"]--- > splitOnDots ".foo.bar" == ["", "foo", "bar"]--- > splitOnDots "foo.bar." == ["foo", "bar", ""]--- > splitOnDots "foo..bar" == ["foo", "", "bar"]-splitOnDots :: String -> [String]-splitOnDots ""        = [""]-splitOnDots ('.' : s) = [] : splitOnDots s-splitOnDots (c   : s) = case splitOnDots s of-  p : ps -> (c : p) : ps--prop_splitOnDots = and-  [ splitOnDots ""         == [""]-  , splitOnDots "foo.bar"  == ["foo", "bar"]-  , splitOnDots ".foo.bar" == ["", "foo", "bar"]-  , splitOnDots "foo.bar." == ["foo", "bar", ""]-  , splitOnDots "foo..bar" == ["foo", "", "bar"]-  ]---- | Returns 'True' iff the name is a valid Haskell (hierarchical)--- module name.-validHaskellModuleName :: String -> Bool-validHaskellModuleName = all ok . splitOnDots-  where-  -- Checks if a dot-less module name is well-formed.-  ok :: String -> Bool-  ok []      = False-  ok (c : s) =-    isUpper c &&-    all (\c -> isLower c || c == '_' ||-               isUpper c ||-               generalCategory c == DecimalNumber ||-               c == '\'')-        s--{---------------------------------------------------------------------------    Patterns- --------------------------------------------------------------------------}---- | Turn an expression into a left hand side.-exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)-exprToLHS e = case e of-  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es-  _		 -> LHS <$> exprToPattern e <*> return []---- | Turn an expression into a pattern. Fails if the expression is not a---   valid pattern.-exprToPattern :: Expr -> Parser Pattern-exprToPattern e =-    case e of-	Ident x			-> return $ IdentP x-	App _ e1 e2		-> AppP <$> exprToPattern e1-					<*> T.mapM (T.mapM exprToPattern) e2-	Paren r e		-> ParenP r-					<$> exprToPattern e-	Underscore r _		-> return $ WildP r-	Absurd r		-> return $ AbsurdP r-	As r x e		-> AsP r x <$> exprToPattern e-	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e-	Dot r e			-> return $ DotP r e-	Lit l			-> return $ LitP l-	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e-	RawApp r es		-> RawAppP r <$> mapM exprToPattern es-	OpApp r x es		-> OpAppP r x <$> mapM exprToPattern es-	_			->-          let Just pos = rStart $ getRange e in-          parseErrorAt pos $ "Not a valid pattern: " ++ show e--{---------------------------------------------------------------------------    Tests- --------------------------------------------------------------------------}---- | Test suite.-tests :: IO Bool-tests = runTests "Agda.Syntax.Parser.Parser"-  [ quickCheck' prop_splitOnDots-  ]-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}-{-# LINE 1 "<built-in>" #-}-{-# LINE 1 "<command-line>" #-}-{-# LINE 1 "templates/GenericTemplate.hs" #-}--- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp --{-# LINE 30 "templates/GenericTemplate.hs" #-}---data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList------{-# LINE 51 "templates/GenericTemplate.hs" #-}--{-# LINE 61 "templates/GenericTemplate.hs" #-}--{-# LINE 70 "templates/GenericTemplate.hs" #-}--infixr 9 `HappyStk`-data HappyStk a = HappyStk a (HappyStk a)---------------------------------------------------------------------------------- starting the parse--happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll---------------------------------------------------------------------------------- Accepting the parse---- If the current token is 0#, it means we've just accepted a partial--- parse (a %partial parser).  We must ignore the saved token on the top of--- the stack in this case.-happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =-	happyReturn1 ans-happyAccept j tk st sts (HappyStk ans _) = -	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)---------------------------------------------------------------------------------- Arrays only: do the next action----happyDoAction i tk st-	= {- nothing -}---	  case action of-		0#		  -> {- nothing -}-				     happyFail i tk st-		-1# 	  -> {- nothing -}-				     happyAccept i tk st-		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}--				     (happyReduceArr Happy_Data_Array.! rule) i tk st-				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))-		n		  -> {- nothing -}---				     happyShift new_state i tk st-				     where !(new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))-   where !(off)    = indexShortOffAddr happyActOffsets st-         !(off_i)  = (off Happy_GHC_Exts.+# i)-	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))-			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)-			else False-         !(action)-          | check     = indexShortOffAddr happyTable off_i-          | otherwise = indexShortOffAddr happyDefActions st--{-# LINE 130 "templates/GenericTemplate.hs" #-}---indexShortOffAddr (HappyA# arr) off =-	Happy_GHC_Exts.narrow16Int# i-  where-	!i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)-	!high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))-	!low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))-	!off' = off Happy_GHC_Exts.*# 2#------data HappyAddr = HappyA# Happy_GHC_Exts.Addr#------------------------------------------------------------------------------------- HappyState data type (not arrays)--{-# LINE 163 "templates/GenericTemplate.hs" #-}---------------------------------------------------------------------------------- Shifting a token--happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =-     let !(i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in---     trace "shifting the error token" $-     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)--happyShift new_state i tk st sts stk =-     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)---- happyReduce is specialised for the common cases.--happySpecReduce_0 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_0 nt fn j tk st@((action)) sts stk-     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)--happySpecReduce_1 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')-     = let r = fn v1 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_2 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')-     = let r = fn v1 v2 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happySpecReduce_3 i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')-     = let r = fn v1 v2 v3 in-       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))--happyReduce k i fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyReduce k nt fn j tk st sts stk-     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of-	 sts1@((HappyCons (st1@(action)) (_))) ->-        	let r = fn stk in  -- it doesn't hurt to always seq here...-       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)--happyMonadReduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonadReduce k nt fn j tk st sts stk =-        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))-       where !(sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--happyMonad2Reduce k nt fn 0# tk st sts stk-     = happyFail 0# tk st sts stk-happyMonad2Reduce k nt fn j tk st sts stk =-       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))-       where !(sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))-             drop_stk = happyDropStk k stk--             !(off) = indexShortOffAddr happyGotoOffsets st1-             !(off_i) = (off Happy_GHC_Exts.+# nt)-             !(new_state) = indexShortOffAddr happyTable off_i-----happyDrop 0# l = l-happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t--happyDropStk 0# l = l-happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs---------------------------------------------------------------------------------- Moving to a new state after a reduction---happyGoto nt j tk st = -   {- nothing -}-   happyDoAction j tk new_state-   where !(off) = indexShortOffAddr happyGotoOffsets st-         !(off_i) = (off Happy_GHC_Exts.+# nt)-         !(new_state) = indexShortOffAddr happyTable off_i------------------------------------------------------------------------------------- Error recovery (0# is the error token)---- parse error if we are in recovery and we fail again-happyFail  0# tk old_st _ stk =---	trace "failing" $ -    	happyError_ tk--{-  We don't need state discarding for our restricted implementation of-    "error".  In fact, it can cause some bogus parses, so I've disabled it-    for now --SDM---- discard a state-happyFail  0# tk old_st (HappyCons ((action)) (sts)) -						(saved_tok `HappyStk` _ `HappyStk` stk) =---	trace ("discarding state, depth " ++ show (length stk))  $-	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))--}---- Enter error recovery: generate an error token,---                       save the old token and carry on.-happyFail  i tk (action) sts stk =---      trace "entering error recovery" $-	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)---- Internal happy errors:-+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -fglasgow-exts -cpp #-}+{-# OPTIONS_GHC -fno-warn-incomplete-patterns+                -fno-warn-deprecated-flags #-}+{-# LANGUAGE BangPatterns #-}+{-| The parser is generated by Happy (<http://www.haskell.org/happy>).+-}+module Agda.Syntax.Parser.Parser (+      moduleParser+    , exprParser+    , tokensParser+    , tests+    ) where++import Control.Arrow+import Control.Monad+import Control.Monad.State+import Data.Char+import Data.List+import Data.Maybe+import qualified Data.Traversable as T++import Agda.Syntax.Position hiding (tests)+import Agda.Syntax.Parser.Monad+import Agda.Syntax.Parser.Lexer+import Agda.Syntax.Parser.Tokens+import Agda.Syntax.Concrete+import Agda.Syntax.Concrete.Name+import Agda.Syntax.Concrete.Pretty+import Agda.Syntax.Common+import Agda.Syntax.Fixity+import Agda.Syntax.Notation+import Agda.Syntax.Literal++import Agda.Utils.Monad+import Agda.Utils.QuickCheck+import Agda.Utils.TestHelpers+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.6++newtype HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70 = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn6 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: ([Token]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Token])+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: (([Pragma], [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Pragma], [Declaration]))+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: t10 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t10+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: t11 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t11+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: t12 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t12+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (()) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (())+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (Integer) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Integer)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Range) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Range)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Arg Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Arg Name)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: ([Arg Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Name])+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyIn21 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn21 #-}+happyOut21 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)+happyOut21 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut21 #-}+happyIn22 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn22 #-}+happyOut22 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)+happyOut22 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut22 #-}+happyIn23 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn23 #-}+happyOut23 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)+happyOut23 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut23 #-}+happyIn24 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn24 #-}+happyOut24 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])+happyOut24 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut24 #-}+happyIn25 :: ([Name]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn25 #-}+happyOut25 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Name])+happyOut25 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut25 #-}+happyIn26 :: (Either [Name] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn26 #-}+happyOut26 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Name] [Expr])+happyOut26 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut26 #-}+happyIn27 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn27 #-}+happyOut27 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])+happyOut27 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut27 #-}+happyIn28 :: (QName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn28 #-}+happyOut28 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (QName)+happyOut28 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut28 #-}+happyIn29 :: (Expr) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn29 #-}+happyOut29 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Expr)+happyOut29 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut29 #-}+happyIn30 :: t30 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn30 #-}+happyOut30 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t30+happyOut30 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut30 #-}+happyIn31 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn31 #-}+happyOut31 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut31 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut31 #-}+happyIn32 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn32 #-}+happyOut32 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut32 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut32 #-}+happyIn33 :: t33 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn33 #-}+happyOut33 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t33+happyOut33 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut33 #-}+happyIn34 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn34 #-}+happyOut34 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut34 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut34 #-}+happyIn35 :: t35 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn35 #-}+happyOut35 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t35+happyOut35 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut35 #-}+happyIn36 :: t36 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn36 #-}+happyOut36 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t36+happyOut36 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut36 #-}+happyIn37 :: t37 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn37 #-}+happyOut37 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t37+happyOut37 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut37 #-}+happyIn38 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn38 #-}+happyOut38 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])+happyOut38 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut38 #-}+happyIn39 :: ([(Name, Expr)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn39 #-}+happyOut39 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(Name, Expr)])+happyOut39 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut39 #-}+happyIn40 :: ((Name, Expr)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn40 #-}+happyOut40 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Name, Expr))+happyOut40 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut40 #-}+happyIn41 :: t41 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn41 #-}+happyOut41 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t41+happyOut41 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut41 #-}+happyIn42 :: t42 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn42 #-}+happyOut42 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t42+happyOut42 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut42 #-}+happyIn43 :: ([TypedBindings]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn43 #-}+happyOut43 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings])+happyOut43 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut43 #-}+happyIn44 :: (TypedBindings) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn44 #-}+happyOut44 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBindings)+happyOut44 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut44 #-}+happyIn45 :: (TypedBinding) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn45 #-}+happyOut45 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (TypedBinding)+happyOut45 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut45 #-}+happyIn46 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn46 #-}+happyOut46 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])+happyOut46 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut46 #-}+happyIn47 :: (Either ([LamBinding], Hiding) [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn47 #-}+happyOut47 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either ([LamBinding], Hiding) [Expr])+happyOut47 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut47 #-}+happyIn48 :: ([Either Hiding LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn48 #-}+happyOut48 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Either Hiding LamBinding])+happyOut48 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut48 #-}+happyIn49 :: (Either [Either Hiding LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn49 #-}+happyOut49 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [Either Hiding LamBinding] [Expr])+happyOut49 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut49 #-}+happyIn50 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn50 #-}+happyOut50 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))+happyOut50 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut50 #-}+happyIn51 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn51 #-}+happyOut51 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))+happyOut51 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut51 #-}+happyIn52 :: ((LHS,RHS,WhereClause)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn52 #-}+happyOut52 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((LHS,RHS,WhereClause))+happyOut52 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut52 #-}+happyIn53 :: ([(LHS,RHS,WhereClause)]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn53 #-}+happyOut53 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([(LHS,RHS,WhereClause)])+happyOut53 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut53 #-}+happyIn54 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn54 #-}+happyOut54 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])+happyOut54 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut54 #-}+happyIn55 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn55 #-}+happyOut55 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])+happyOut55 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut55 #-}+happyIn56 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn56 #-}+happyOut56 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])+happyOut56 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut56 #-}+happyIn57 :: ([LamBinding]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn57 #-}+happyOut57 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([LamBinding])+happyOut57 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut57 #-}+happyIn58 :: (Either [LamBinding] [Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn58 #-}+happyOut58 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Either [LamBinding] [Expr])+happyOut58 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut58 #-}+happyIn59 :: ((Maybe AsName, ImportDirective)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn59 #-}+happyOut59 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe AsName, ImportDirective))+happyOut59 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut59 #-}+happyIn60 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn60 #-}+happyOut60 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)+happyOut60 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut60 #-}+happyIn61 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn61 #-}+happyOut61 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)+happyOut61 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut61 #-}+happyIn62 :: (ImportDirective) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn62 #-}+happyOut62 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportDirective)+happyOut62 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut62 #-}+happyIn63 :: ((UsingOrHiding , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn63 #-}+happyOut63 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((UsingOrHiding , Range))+happyOut63 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut63 #-}+happyIn64 :: (([Renaming] , Range)) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn64 #-}+happyOut64 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (([Renaming] , Range))+happyOut64 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut64 #-}+happyIn65 :: ([Renaming]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn65 #-}+happyOut65 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Renaming])+happyOut65 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut65 #-}+happyIn66 :: (Renaming) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn66 #-}+happyOut66 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Renaming)+happyOut66 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut66 #-}+happyIn67 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn67 #-}+happyOut67 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)+happyOut67 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut67 #-}+happyIn68 :: (ImportedName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn68 #-}+happyOut68 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (ImportedName)+happyOut68 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut68 #-}+happyIn69 :: ([ImportedName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn69 #-}+happyOut69 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([ImportedName])+happyOut69 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut69 #-}+happyIn70 :: t70 -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn70 #-}+happyOut70 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> t70+happyOut70 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut70 #-}+happyIn71 :: (LHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn71 #-}+happyOut71 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (LHS)+happyOut71 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut71 #-}+happyIn72 :: ([Pattern]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn72 #-}+happyOut72 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Pattern])+happyOut72 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut72 #-}+happyIn73 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn73 #-}+happyOut73 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut73 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut73 #-}+happyIn74 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn74 #-}+happyOut74 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut74 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut74 #-}+happyIn75 :: (WhereClause) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn75 #-}+happyOut75 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (WhereClause)+happyOut75 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut75 #-}+happyIn76 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn76 #-}+happyOut76 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut76 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut76 #-}+happyIn77 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn77 #-}+happyOut77 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut77 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut77 #-}+happyIn78 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn78 #-}+happyOut78 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut78 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut78 #-}+happyIn79 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn79 #-}+happyOut79 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut79 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut79 #-}+happyIn80 :: ([Arg Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn80 #-}+happyOut80 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg Declaration])+happyOut80 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut80 #-}+happyIn81 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn81 #-}+happyOut81 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut81 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut81 #-}+happyIn82 :: (RHS) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn82 #-}+happyOut82 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (RHS)+happyOut82 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut82 #-}+happyIn83 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn83 #-}+happyOut83 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut83 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut83 #-}+happyIn84 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn84 #-}+happyOut84 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut84 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut84 #-}+happyIn85 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn85 #-}+happyOut85 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut85 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut85 #-}+happyIn86 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn86 #-}+happyOut86 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut86 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut86 #-}+happyIn87 :: (Name) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn87 #-}+happyOut87 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Name)+happyOut87 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut87 #-}+happyIn88 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn88 #-}+happyOut88 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut88 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut88 #-}+happyIn89 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn89 #-}+happyOut89 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut89 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut89 #-}+happyIn90 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn90 #-}+happyOut90 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut90 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut90 #-}+happyIn91 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn91 #-}+happyOut91 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut91 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut91 #-}+happyIn92 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn92 #-}+happyOut92 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut92 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut92 #-}+happyIn93 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn93 #-}+happyOut93 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut93 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut93 #-}+happyIn94 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn94 #-}+happyOut94 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut94 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut94 #-}+happyIn95 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn95 #-}+happyOut95 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut95 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut95 #-}+happyIn96 :: ([String]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn96 #-}+happyOut96 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([String])+happyOut96 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut96 #-}+happyIn97 :: ([HoleName]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn97 #-}+happyOut97 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([HoleName])+happyOut97 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut97 #-}+happyIn98 :: (HoleName) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn98 #-}+happyOut98 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (HoleName)+happyOut98 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut98 #-}+happyIn99 :: (String) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn99 #-}+happyOut99 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (String)+happyOut99 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut99 #-}+happyIn100 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn100 #-}+happyOut100 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut100 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut100 #-}+happyIn101 :: ([Expr]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn101 #-}+happyOut101 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Expr])+happyOut101 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut101 #-}+happyIn102 :: ([TypedBindings] -> Parser ModuleApplication) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn102 #-}+happyOut102 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypedBindings] -> Parser ModuleApplication)+happyOut102 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut102 #-}+happyIn103 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn103 #-}+happyOut103 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut103 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut103 #-}+happyIn104 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn104 #-}+happyOut104 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut104 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut104 #-}+happyIn105 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn105 #-}+happyOut105 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut105 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut105 #-}+happyIn106 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn106 #-}+happyOut106 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut106 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut106 #-}+happyIn107 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn107 #-}+happyOut107 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut107 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut107 #-}+happyIn108 :: (Declaration) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn108 #-}+happyOut108 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Declaration)+happyOut108 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut108 #-}+happyIn109 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn109 #-}+happyOut109 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut109 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut109 #-}+happyIn110 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn110 #-}+happyOut110 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut110 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut110 #-}+happyIn111 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn111 #-}+happyOut111 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut111 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut111 #-}+happyIn112 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn112 #-}+happyOut112 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut112 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut112 #-}+happyIn113 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn113 #-}+happyOut113 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut113 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut113 #-}+happyIn114 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn114 #-}+happyOut114 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut114 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut114 #-}+happyIn115 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn115 #-}+happyOut115 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut115 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut115 #-}+happyIn116 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn116 #-}+happyOut116 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut116 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut116 #-}+happyIn117 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn117 #-}+happyOut117 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut117 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut117 #-}+happyIn118 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn118 #-}+happyOut118 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut118 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut118 #-}+happyIn119 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn119 #-}+happyOut119 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut119 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut119 #-}+happyIn120 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn120 #-}+happyOut120 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut120 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut120 #-}+happyIn121 :: (Pragma) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn121 #-}+happyOut121 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Pragma)+happyOut121 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut121 #-}+happyIn122 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn122 #-}+happyOut122 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])+happyOut122 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut122 #-}+happyIn123 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn123 #-}+happyOut123 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])+happyOut123 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut123 #-}+happyIn124 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn124 #-}+happyOut124 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])+happyOut124 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut124 #-}+happyIn125 :: ([TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn125 #-}+happyOut125 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([TypeSignature])+happyOut125 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut125 #-}+happyIn126 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn126 #-}+happyOut126 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])+happyOut126 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut126 #-}+happyIn127 :: ([Arg TypeSignature]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn127 #-}+happyOut127 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Arg TypeSignature])+happyOut127 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut127 #-}+happyIn128 :: ([Constructor]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn128 #-}+happyOut128 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Constructor])+happyOut128 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut128 #-}+happyIn129 :: ((Maybe Name, [Declaration])) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn129 #-}+happyOut129 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ((Maybe Name, [Declaration]))+happyOut129 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut129 #-}+happyIn130 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn130 #-}+happyOut130 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut130 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut130 #-}+happyIn131 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn131 #-}+happyOut131 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut131 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut131 #-}+happyIn132 :: ([Declaration]) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyIn132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn132 #-}+happyOut132 :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> ([Declaration])+happyOut132 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut132 #-}+happyInTok :: (Token) -> (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70)+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn t10 t11 t12 t30 t33 t35 t36 t37 t41 t42 t70) -> (Token)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\x00\x00\xd9\x05\x1f\x00\x00\x00\xb8\x02\x34\x05\x00\x00\x4d\x02\x4d\x02\x00\x00\x00\x00\x1f\x00\x00\x00\x58\x00\xc7\x03\xc7\x03\x59\x05\x3a\x05\x00\x00\x2a\x05\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x00\x00\x00\x00\x00\xa8\x05\x81\x05\x35\x05\x00\x00\xff\x00\x2c\x05\x9a\x07\x00\x00\x00\x00\x66\x07\x2b\x05\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x02\x73\x07\x00\x00\x00\x00\x3f\x07\xaa\x04\x90\x03\x77\x04\x00\x00\x00\x00\x00\x00\x24\x05\xe5\x00\x38\x05\x00\x00\x27\x05\xd4\x01\x25\x05\x00\x00\xe1\x00\x00\x00\x69\x01\x69\x01\x00\x00\x23\x05\x26\x05\x1c\x05\x00\x00\x00\x00\x00\x00\xa4\x01\x81\x05\x00\x00\x20\x05\x00\x00\x18\x07\x39\x01\x6c\x02\x20\x02\x00\x00\x89\x06\x50\x05\x58\x06\x00\x00\x4c\x07\x50\x04\x90\x03\x1d\x04\xb0\x06\xb0\x06\xb0\x06\x4e\x05\xf1\x06\x29\x05\x1f\x05\xf1\x06\x00\x00\xb0\x06\xb0\x06\xb0\x06\x11\x05\xf6\x03\x90\x03\x06\x05\x4a\x05\x03\x03\x00\x00\x60\x01\xb0\x06\xb0\x06\x00\x00\x00\x00\x00\x00\x00\x00\xc3\x03\x29\x05\xb0\x06\x4c\x07\x03\x05\x00\x00\x00\x00\xf1\x06\x35\x00\x25\x07\xc7\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\x00\xfe\x06\x36\x02\x5d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x36\x05\x00\x00\x02\x05\x01\x05\xff\x04\x71\x03\xee\x04\xf1\x06\x31\x05\xf1\x06\xec\x04\xe7\x04\x00\x00\x00\x00\xed\x04\x00\x00\x00\x00\xb0\x06\xb0\x06\xb0\x06\xb0\x06\xd2\x01\x22\x05\xeb\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\x00\xdc\x04\xda\x04\x9f\x00\xc9\x04\xc9\x04\xc9\x04\xd7\x06\xd8\x04\xcc\x04\xcc\x04\xcc\x04\xd2\x04\xd2\x04\xd2\x04\xc4\x04\xc6\x04\xa7\x01\xc7\x0c\x29\x05\xbe\x04\xb8\x04\x00\x00\xbc\x04\xb0\x04\xb4\x04\xcf\xff\x00\x00\x00\x00\x00\x00\x00\x00\x29\x05\xa8\x04\x69\x01\xb1\x04\xa4\x04\x69\x01\x9c\x04\xca\x00\xac\x04\x00\x00\x73\x00\xe8\xff\xa7\x04\xa6\x04\xa5\x04\x00\x00\xb0\x06\xb0\x06\x00\x00\xb0\x06\xb0\x06\xca\x06\xa2\x04\xca\x06\x31\x06\xf8\x04\x00\x06\x00\x00\x00\x00\xa0\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\xd1\x04\xd1\x04\x91\x04\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x91\x00\xcf\xff\x64\x00\xcf\xff\xb0\x06\x00\x00\x00\x00\x00\x00\xb0\x06\xd1\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x75\x04\x86\x04\x00\x00\xd1\x04\x00\x00\x7e\x04\x7a\x04\x7c\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\x74\x04\xcc\x00\xb5\x04\xa7\x01\xc5\x00\x00\x00\x00\x00\x00\x00\x6e\x00\x00\x00\x6e\x00\x6e\x00\x00\x00\xce\x04\xaa\x03\xaf\x06\xaf\x06\xaf\x06\x6d\x04\x00\x00\x6d\x04\x00\x00\xed\xff\x00\x00\x03\x03\x00\x00\x00\x00\xdf\x00\xd1\x04\xae\x04\xd1\x04\xd1\x04\x00\x00\x00\x00\x00\x00\x70\x04\x00\x00\x36\x02\x00\x00\xa1\x04\x14\x00\x14\x00\x00\x00\x69\x01\x00\x00\x00\x00\x00\x00\x36\x02\x00\x00\x6b\x04\x6f\x04\x00\x00\x5f\x04\x6e\x04\x5e\x04\x60\x04\x69\x04\x8d\x04\x00\x00\x00\x00\x00\x00\x00\x00\x6d\x02\x00\x00\x00\x00\x00\x00\xd1\x04\x00\x00\x00\x00\x59\x04\x4f\x04\x00\x00\x00\x00\xed\xff\x61\x04\x00\x00\x59\x00\x4d\x04\x4d\x04\x5b\x04\x00\x00\x59\x00\xaf\x06\x7f\x00\xac\x00\x9c\x00\x09\x00\xce\x04\x57\x04\x00\x00\x59\x00\x0e\x01\xc9\x01\xed\xff\xed\xff\x6e\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\x00\x00\x51\x04\x00\x00\x45\x04\xa7\x01\x6a\x04\xd1\x04\x39\x04\x00\x00\x20\x04\x20\x04\x20\x04\x1f\x04\x1a\x04\x38\x04\x00\x00\x32\x04\x16\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x04\x00\x00\x00\x00\x12\x04\x13\x04\x11\x04\x0f\x04\x0c\x04\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x04\x00\x00\x0a\x04\x00\x00\x0b\x04\x49\x01\x00\x00\x04\x04\x04\x04\x04\x04\x04\x04\x00\x00\xce\x04\xd1\x04\x00\x00\x02\x04\xd1\x04\x01\x04\xd1\x04\x01\x04\xd1\x04\x00\x04\xc7\x03\x06\x04\x00\x00\xf3\x03\xd1\x04\x00\x00\x00\x00\xed\xff\xd1\x04\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\xe9\x03\xe9\x03\x27\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x03\x00\x00\x00\x00\x00\x00\x00\x00\xc7\x03\x3c\x01\x36\x02\x00\x00\x24\x04\x00\x00\x00\x00\x13\x00\x23\x04\x00\x00\x22\x04\x00\x00\x21\x02\x00\x00\x00\x00\xdd\x03\x49\x01\xd2\x03\x49\x01\xce\x04\xce\x04\xc2\x03\x00\x00\xcd\x03\x00\x00\x00\x00\x00\x00\xbc\x03\x00\x00\x00\x00\x00\x00\xb7\x03\x00\x00\x00\x00\x00\x00\xce\x04\xce\x04\xce\x04\xce\x04\x00\x00\x59\x00\x59\x00\xab\x03\xb5\x03\xa5\x03\x00\x00\xa5\x03\x00\x00\x00\x00\x2a\x03\x36\x02\x00\x00\x00\x00\x49\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x00\xac\x03\x00\x00\x59\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\xbf\x03\xc0\x0c\x1a\x00\xe5\x03\xd8\x03\x00\x00\x00\x00\x01\x03\xc2\x02\x00\x00\x00\x00\x2e\x00\x00\x00\x81\x02\x68\x02\x1c\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x03\xa8\x0c\x00\x00\x00\x00\x8b\x03\x5b\x03\xf4\x00\x00\x00\x00\x00\x17\x05\xcb\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x05\x00\x00\x00\x00\x1d\x02\x7d\x08\x19\x08\x64\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x03\xba\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x05\x90\x0c\x00\x00\x00\x00\x00\x00\x70\x05\x00\x00\x0d\x01\x22\x00\x00\x00\x51\x0a\xb3\x08\xdb\x07\x00\x00\x40\x05\x4b\x08\xfa\x07\x32\x08\x3a\x0a\x23\x0a\x0c\x0a\x00\x00\xb8\x07\x78\x0c\x00\x00\x76\x06\x00\x00\xf5\x09\xde\x09\xc7\x09\x00\x00\x60\x0c\x68\x0a\xf3\x00\x00\x00\x42\x01\x00\x00\x00\x00\xb0\x09\x99\x09\x00\x00\x00\x00\x00\x00\x00\x00\x48\x0c\x30\x0c\x65\x03\x0f\x05\xb9\x03\x00\x00\x00\x00\x1e\x06\x44\x0a\xdc\x00\xae\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc6\x07\x8d\x00\x7b\x08\x68\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x92\x03\x00\x00\x00\x00\x00\x00\x00\x00\x18\x03\xaf\x03\xc6\x05\x00\x00\x6e\x05\x00\x00\x86\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x04\x82\x09\x6b\x09\x54\x09\x00\x00\x5c\x03\x4d\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x03\x1c\x03\xf4\x02\x43\x01\x57\x03\x4a\x03\x3f\x03\xda\x00\xc7\x02\x2f\x03\x24\x03\x22\x03\xac\x02\x9a\x02\x92\x02\xae\x02\x70\x02\xe8\x04\x00\x00\x18\x0c\x00\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x9d\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x9b\x02\x00\x00\x00\x00\x94\x02\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x02\x75\x02\x00\x00\x00\x00\x00\x00\x00\x00\x3d\x09\x26\x09\x00\x00\x0f\x09\xf8\x08\xff\x02\x00\x00\x69\x02\xe1\x08\x9c\x08\xca\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x0b\x00\x00\x00\x00\xd0\x0b\xb8\x0b\x00\x00\x00\x00\x6e\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\x02\x00\x00\x59\x02\x58\x04\x00\x00\x00\x00\x00\x00\xfe\x03\xa0\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x00\x00\x88\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x3d\x02\x28\x02\x19\x02\x17\x02\xf6\x01\xf3\x01\x00\x00\xba\x01\xb2\x01\xaa\x02\x00\x00\x00\x00\x00\x00\xd9\x01\x00\x00\x95\x01\x6e\x01\x00\x00\x16\x00\x97\x04\x3d\x04\xe3\x03\xb0\x03\xf0\x01\x00\x00\x1c\x00\x00\x00\xfd\xff\x00\x00\xad\x01\x00\x00\x00\x00\xaf\x01\x70\x0b\xb3\x01\x58\x0b\x40\x0b\x00\x00\x00\x00\x00\x00\x2d\x03\x00\x00\xba\x07\x00\x00\xce\x00\xc0\x00\xf9\xff\x00\x00\xd1\x01\x00\x00\x00\x00\x00\x00\x9f\x06\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x01\x00\x00\xd7\x01\x00\x00\x00\x00\x00\x00\xc6\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x28\x0b\x00\x00\x00\x00\x48\x01\xb6\x01\x00\x00\x00\x00\x64\x03\x00\x00\x00\x00\x9e\x03\xb1\x01\x6d\x03\x00\x00\x00\x00\x87\x03\x5a\x02\x00\x00\x00\x00\x00\x00\x00\x00\x34\x04\x00\x00\x00\x00\x80\x03\x00\x00\xb1\x01\x2c\x03\x89\x02\x08\x01\x00\x00\x00\x00\x00\x00\xfd\x02\x00\x00\x00\x00\x00\x00\x00\x00\x76\x01\x47\x01\x3b\x01\x10\x0b\x00\x00\x00\x00\x7e\x01\x79\x01\x6d\x01\x00\x00\x67\x01\x00\x00\x00\x00\x00\x00\x5f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x14\x01\x00\x00\x00\x00\x4e\x01\x00\x00\x19\x03\xa6\x02\x98\x02\x66\x02\x00\x00\x28\x00\xf8\x0a\x00\x00\xd9\x00\xe0\x0a\x7d\x01\xc8\x0a\x73\x01\xb0\x0a\xcd\x01\x67\x00\x00\x00\x00\x00\x32\x00\x98\x0a\x00\x00\x00\x00\xbf\x00\x80\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x01\x1a\x01\xc9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x85\x00\x75\x06\x00\x00\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\xa8\x00\xf0\x03\xbd\x03\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xeb\xff\x00\x00\x00\x00\x00\x00\x8a\x03\x41\x03\x35\x03\x04\x00\x00\x00\x1e\x02\xd3\x01\x31\x00\xb1\xff\x28\x01\x00\x00\x12\x01\x00\x00\x00\x00\x68\x0a\x1d\x06\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd7\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xfc\xff\x00\x00\xae\xff\x00\x00\x00\x00\xad\xff\xbb\xfe\x00\x00\xb6\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x6e\xff\x00\x00\x7f\xff\x7e\xff\x7c\xff\x7b\xff\x00\x00\x5b\xff\x5a\xff\x75\xff\x00\x00\x00\x00\x53\xff\x51\xff\x00\x00\x00\x00\x6a\xff\x69\xff\x00\x00\x00\x00\x68\xff\x67\xff\x66\xff\x65\xff\x00\x00\x00\x00\x6b\xff\x6c\xff\x00\x00\x00\x00\x00\x00\x00\x00\xa5\xff\x8e\xff\x6d\xff\x00\x00\x8d\xff\x00\x00\x87\xff\x00\x00\x86\xff\x00\x00\x6f\xff\x8d\xff\x60\xff\x00\x00\x00\x00\xa2\xff\x00\x00\x00\x00\x00\x00\x61\xff\x8b\xff\x26\xff\x3a\xff\x00\x00\x77\xff\x00\x00\x45\xff\x42\xff\x3b\xff\x00\x00\x00\x00\x8a\xff\x00\x00\x00\x00\x00\x00\x5e\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\xff\x00\x00\x00\x00\x2c\xff\x27\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x59\xff\x00\x00\x00\x00\x52\xff\x00\x00\x00\x00\x00\x00\x54\xff\x82\xff\x7a\xff\x72\xff\x00\x00\x00\x00\x00\x00\x00\x00\x85\xff\x8d\xff\x8c\xff\x28\xff\x15\xff\xc4\xfe\x00\x00\xac\xff\xba\xfe\xb9\xfe\xfb\xff\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf5\xff\xf4\xff\xf3\xff\xf2\xff\xf1\xff\xf0\xff\xef\xff\xee\xff\xed\xff\xec\xff\xeb\xff\xea\xff\xe9\xff\xe8\xff\xe7\xff\xe6\xff\xe5\xff\xe4\xff\xe3\xff\xe2\xff\xe1\xff\xe0\xff\xdf\xff\xde\xff\xdd\xff\xdc\xff\xdb\xff\xda\xff\xd9\xff\xd2\xff\xd1\xff\xd8\xff\xd7\xff\xd6\xff\xd5\xff\xd4\xff\xd3\xff\xd0\xff\xcf\xff\xce\xff\xcd\xff\xcc\xff\xcb\xff\xca\xff\xc9\xff\xc8\xff\xc7\xff\xc6\xff\xc5\xff\xc4\xff\xc3\xff\xc2\xff\xc1\xff\xc0\xff\xbf\xff\xbe\xff\xbd\xff\xbc\xff\xbb\xff\xba\xff\xb9\xff\xb8\xff\xb7\xff\xb6\xff\xb5\xff\xb4\xff\xb3\xff\xb2\xff\xb1\xff\xb0\xff\xaf\xff\x15\xff\xc4\xfe\x15\xff\x00\x00\xbe\xfe\x1d\xff\x1b\xff\x19\xff\x16\xff\x17\xff\x00\x00\x00\x00\x00\x00\x15\xff\x00\x00\x28\xff\x00\x00\x28\xff\x00\x00\x85\xff\x5f\xff\x7d\xff\x00\x00\x80\xff\x86\xff\x75\xff\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\xe1\xfe\x8d\xfe\xfb\xfe\xf9\xfe\xf8\xfe\xf7\xfe\xf6\xfe\xf5\xfe\xf4\xfe\xfa\xfe\xf3\xfe\xf2\xfe\xf1\xfe\xf0\xfe\xef\xfe\xe9\xfe\xee\xfe\xec\xfe\xed\xfe\xeb\xfe\xea\xfe\xb7\xfe\xb5\xfe\xb4\xfe\xb2\xfe\xb3\xfe\xb1\xfe\xb0\xfe\xaf\xfe\xac\xfe\xae\xfe\xad\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\xff\x57\xff\x59\xff\x87\xff\x00\x00\x2e\xff\x2f\xff\x81\xff\x2d\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x35\xff\x00\x00\x30\xff\x00\x00\x00\x00\x38\xff\x37\xff\x39\xff\x25\xff\x00\x00\x00\x00\x24\xff\x00\x00\x00\x00\x41\xff\x3d\xff\x42\xff\x00\x00\x00\x00\x00\x00\x46\xff\x79\xff\x3c\xff\x4a\xff\x62\xff\xa1\xff\x49\xff\x64\xff\x00\x00\x48\xff\x71\xff\x00\x00\x00\x00\x00\x00\x47\xff\x00\x00\x3f\xff\x3e\xff\x40\xff\x44\xff\x43\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\xff\x78\xff\xa8\xff\x00\x00\x00\x00\x50\xff\x4e\xff\x4f\xff\x4d\xff\x4b\xff\x4c\xff\x74\xff\x22\xff\x23\xff\x00\x00\x00\x00\x5d\xff\x00\x00\x76\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\xff\x00\xff\x00\x00\x00\x00\xd1\xfe\xd2\xfe\xd3\xfe\x00\x00\xa6\xff\x00\x00\x00\x00\xd4\xfe\x00\x00\x28\xff\x28\xff\x28\xff\x28\xff\x00\x00\xcf\xfe\x00\x00\xd0\xfe\x00\x00\x91\xfe\x00\x00\xaa\xff\xab\xff\xfe\xfe\x00\x00\x02\xff\x00\x00\x00\x00\x84\xff\xab\xfe\x2a\xff\x00\x00\x29\xff\x15\xff\x1a\xff\xa7\xff\x00\x00\x0a\xff\x18\xff\x00\x00\xc6\xfe\xc3\xfe\xbd\xfe\x15\xff\x0c\xff\x08\xff\x00\x00\x09\xff\x00\x00\x00\x00\x00\x00\x00\x00\x10\xff\x00\x00\xa7\xff\x1c\xff\x8f\xfe\xb8\xfe\x00\x00\xe6\xfe\xff\xfe\x06\xff\x00\x00\xe2\xfe\xe3\xfe\x00\x00\x00\x00\x8e\xfe\x9f\xff\x9d\xff\x00\x00\x9b\xfe\x00\x00\x00\x00\xa3\xff\x00\x00\x9e\xfe\x00\x00\x28\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9b\xff\x00\x00\x98\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xff\xd7\xfe\xd6\xfe\xd5\xfe\x00\x00\xcb\xfe\xc9\xfe\x00\x00\xc7\xfe\x04\xff\x73\xff\x02\xff\x00\x00\x00\x00\x83\xff\x85\xff\x85\xff\x85\xff\x00\x00\x85\xff\x00\x00\xa1\xfe\x00\x00\x00\x00\x55\xff\x56\xff\x5c\xff\x36\xff\x35\xff\x34\xff\x33\xff\x31\xff\x32\xff\x20\xff\x21\xff\x1e\xff\x1f\xff\x63\xff\x70\xff\x00\x00\xa2\xfe\xa3\xfe\x00\x00\x85\xff\x00\x00\x00\x00\x00\x00\xa4\xfe\xe7\xfe\x05\xff\x03\xff\x00\x00\xca\xfe\x00\x00\x89\xff\x00\x00\x00\x00\xa0\xff\x00\x00\x00\x00\x00\x00\x00\x00\x9a\xfe\x00\x00\x00\x00\x9c\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\xfe\x00\x00\x00\x00\xa4\xff\x9d\xfe\x00\x00\x00\x00\x9e\xff\x00\x00\xfd\xfe\x01\xff\x90\xfe\x00\x00\x00\x00\xa7\xff\x12\xff\x0e\xff\x13\xff\x0b\xff\x14\xff\x00\x00\xc5\xfe\x07\xff\x11\xff\x0f\xff\x0d\xff\x00\x00\xe5\xfe\x9c\xfe\xe8\xfe\x9f\xfe\x00\x00\xc4\xfe\x15\xff\xbc\xfe\xdc\xfe\x96\xfe\xde\xfe\x00\x00\x00\x00\xdd\xfe\xd9\xfe\xda\xfe\x00\x00\xe4\xfe\x99\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x99\xff\x97\xff\xce\xfe\xcd\xfe\x00\x00\xa5\xfe\xa6\xfe\xa8\xfe\x00\x00\xa9\xfe\xaa\xfe\xa7\xfe\x00\x00\xcc\xfe\x98\xff\x9a\xff\x93\xff\x95\xff\x8f\xff\x91\xff\x95\xfe\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\xfe\x00\x00\xc0\xfe\xc1\xfe\x00\x00\x15\xff\xfc\xfe\xbf\xfe\x00\x00\xe0\xfe\xdf\xfe\xdb\xfe\xd8\xfe\x92\xfe\x94\xfe\x00\x00\x92\xff\x90\xff\x96\xff\x94\xff\x00\x00\xc8\xfe\x00\x00\xc2\xfe\x93\xfe"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x05\x00\x09\x00\x05\x00\x35\x00\x09\x00\x09\x00\x09\x00\x0a\x00\x0c\x00\x0d\x00\x0f\x00\x03\x00\x09\x00\x0b\x00\x40\x00\x0c\x00\x42\x00\x0e\x00\x00\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x34\x00\x03\x00\x04\x00\x09\x00\x33\x00\x09\x00\x0c\x00\x0f\x00\x0e\x00\x09\x00\x0a\x00\x08\x00\x09\x00\x09\x00\x42\x00\x09\x00\x7b\x00\x45\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x04\x00\x11\x00\x0c\x00\x48\x00\x0e\x00\x3e\x00\x3f\x00\x40\x00\x09\x00\x09\x00\x0a\x00\x41\x00\x35\x00\x0a\x00\x0b\x00\x0c\x00\x46\x00\x0e\x00\x48\x00\x47\x00\x49\x00\x4b\x00\x5d\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x3e\x00\x44\x00\x40\x00\x00\x00\x5e\x00\x48\x00\x48\x00\x61\x00\x62\x00\x63\x00\x4a\x00\x09\x00\x66\x00\x47\x00\x68\x00\x46\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x05\x00\x4a\x00\x75\x00\x77\x00\x09\x00\x0f\x00\x10\x00\x5e\x00\x47\x00\x7e\x00\x0f\x00\x62\x00\x48\x00\x64\x00\x65\x00\x60\x00\x67\x00\x03\x00\x69\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5e\x00\x34\x00\x09\x00\x79\x00\x62\x00\x75\x00\x64\x00\x65\x00\x0f\x00\x67\x00\x09\x00\x69\x00\x09\x00\x35\x00\x05\x00\x06\x00\x0f\x00\x44\x00\x45\x00\x03\x00\x48\x00\x49\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x42\x00\x34\x00\x09\x00\x5d\x00\x1d\x00\x1e\x00\x1f\x00\x41\x00\x0f\x00\x03\x00\x21\x00\x22\x00\x46\x00\x0b\x00\x48\x00\x36\x00\x48\x00\x4b\x00\x45\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x0b\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x60\x00\x09\x00\x09\x00\x5e\x00\x0c\x00\x0d\x00\x61\x00\x62\x00\x63\x00\x07\x00\x35\x00\x66\x00\x42\x00\x68\x00\x07\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x35\x00\x03\x00\x09\x00\x5f\x00\x09\x00\x0f\x00\x48\x00\x49\x00\x0f\x00\x7e\x00\x0f\x00\x5f\x00\x7c\x00\x0f\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x1e\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x3e\x00\x35\x00\x40\x00\x35\x00\x3d\x00\x0f\x00\x3b\x00\x3c\x00\x3d\x00\x3b\x00\x49\x00\x3b\x00\x3c\x00\x3d\x00\x42\x00\x48\x00\x20\x00\x21\x00\x22\x00\x09\x00\x1e\x00\x20\x00\x21\x00\x22\x00\x09\x00\x36\x00\x41\x00\x11\x00\x12\x00\x36\x00\x3b\x00\x46\x00\x11\x00\x48\x00\x3b\x00\x36\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x3d\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x32\x00\x33\x00\x48\x00\x39\x00\x5e\x00\x09\x00\x3c\x00\x61\x00\x62\x00\x63\x00\x5f\x00\x3d\x00\x66\x00\x3f\x00\x68\x00\x41\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x3f\x00\x12\x00\x41\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x7b\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x0b\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x5d\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x15\x00\x5a\x00\x33\x00\x37\x00\x5d\x00\x39\x00\x37\x00\x38\x00\x16\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x15\x00\x41\x00\x43\x00\x11\x00\x12\x00\x48\x00\x15\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x40\x00\x48\x00\x42\x00\x7a\x00\x4b\x00\x15\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x15\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x74\x00\x3d\x00\x09\x00\x3f\x00\x5e\x00\x41\x00\x7a\x00\x61\x00\x62\x00\x63\x00\x11\x00\x12\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x09\x00\x09\x00\x42\x00\x12\x00\x09\x00\x09\x00\x0f\x00\x0f\x00\x10\x00\x09\x00\x7e\x00\x0f\x00\x1b\x00\x1c\x00\x7c\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x07\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x05\x00\x06\x00\x33\x00\x37\x00\x0b\x00\x39\x00\x37\x00\x38\x00\x09\x00\x3d\x00\x09\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x74\x00\x41\x00\x09\x00\x11\x00\x12\x00\x48\x00\x7a\x00\x41\x00\x48\x00\x49\x00\x74\x00\x4b\x00\x46\x00\x45\x00\x48\x00\x43\x00\x7a\x00\x4b\x00\x09\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x44\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x35\x00\x3f\x00\x16\x00\x41\x00\x5e\x00\x16\x00\x3b\x00\x61\x00\x62\x00\x63\x00\x48\x00\x3e\x00\x66\x00\x40\x00\x68\x00\x42\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x00\x00\x01\x00\x05\x00\x06\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x16\x00\x11\x00\x16\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x16\x00\x1e\x00\x0a\x00\x0b\x00\x0c\x00\x26\x00\x0e\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x7c\x00\x7d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x16\x00\x33\x00\x08\x00\x09\x00\x37\x00\x37\x00\x38\x00\x16\x00\x3a\x00\x0f\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0b\x00\x44\x00\x0b\x00\x46\x00\x48\x00\x48\x00\x49\x00\x11\x00\x4b\x00\x00\x00\x01\x00\x09\x00\x0a\x00\x09\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x10\x00\x0b\x00\x11\x00\x06\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x26\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x09\x00\x1e\x00\x32\x00\x33\x00\x34\x00\x26\x00\x0f\x00\x10\x00\x09\x00\x2a\x00\x06\x00\x0c\x00\x0d\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x0b\x00\x33\x00\x09\x00\x0a\x00\x37\x00\x37\x00\x38\x00\x0b\x00\x3a\x00\x0b\x00\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x09\x00\x0a\x00\x44\x00\x42\x00\x46\x00\x48\x00\x48\x00\x49\x00\x09\x00\x4b\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x01\x00\x5b\x00\x5c\x00\x5d\x00\x09\x00\x06\x00\x07\x00\x08\x00\x09\x00\x3d\x00\x7c\x00\x3f\x00\x11\x00\x41\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x7c\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x5e\x00\x1e\x00\x09\x00\x0a\x00\x62\x00\x26\x00\x64\x00\x65\x00\x7c\x00\x2a\x00\x08\x00\x01\x00\x08\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x33\x00\x34\x00\x31\x00\x09\x00\x33\x00\x08\x00\x0c\x00\x0d\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x09\x00\x78\x00\x3d\x00\x0c\x00\x3f\x00\x0e\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x09\x00\x46\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x38\x00\x39\x00\x3a\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x5c\x00\x5d\x00\x31\x00\x32\x00\x33\x00\x01\x00\x5e\x00\x09\x00\x37\x00\x38\x00\x62\x00\x3a\x00\x64\x00\x65\x00\x3d\x00\x74\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x09\x00\x09\x00\x12\x00\x0c\x00\x0d\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x09\x00\x0a\x00\x1b\x00\x1c\x00\x1d\x00\x0a\x00\x0b\x00\x0c\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x05\x00\x06\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x06\x00\x31\x00\x32\x00\x33\x00\x01\x00\x76\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x4c\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x44\x00\x09\x00\x12\x00\x05\x00\x06\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x7c\x00\x7d\x00\x1b\x00\x1c\x00\x1d\x00\x05\x00\x06\x00\x25\x00\x26\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x09\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x00\x00\x01\x00\x11\x00\x32\x00\x33\x00\x01\x00\x0b\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x3a\x00\x3d\x00\x15\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x0b\x00\x09\x00\x12\x00\x26\x00\x7c\x00\x48\x00\x49\x00\x02\x00\x4b\x00\x32\x00\x33\x00\x1b\x00\x1c\x00\x1d\x00\x37\x00\x32\x00\x33\x00\x34\x00\x3b\x00\x01\x00\x3d\x00\x43\x00\x3f\x00\x3e\x00\x41\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x43\x00\x09\x00\x37\x00\x38\x00\x0c\x00\x3a\x00\x0e\x00\x48\x00\x3d\x00\x43\x00\x3f\x00\x47\x00\x41\x00\x42\x00\x39\x00\x09\x00\x12\x00\x26\x00\x48\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x48\x00\x49\x00\x1b\x00\x1c\x00\x1d\x00\x42\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x03\x00\x03\x00\x03\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x03\x00\x3d\x00\x3e\x00\x3f\x00\x0f\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x36\x00\x09\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x0e\x00\x43\x00\x43\x00\x43\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x42\x00\x11\x00\x32\x00\x33\x00\x01\x00\x48\x00\x47\x00\x37\x00\x38\x00\x47\x00\x3a\x00\x47\x00\x47\x00\x3d\x00\x47\x00\x3f\x00\x4a\x00\x41\x00\x42\x00\x4a\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x4a\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x04\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x47\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x47\x00\x47\x00\x3c\x00\x32\x00\x33\x00\x2c\x00\x2d\x00\x2e\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3a\x00\x35\x00\x3d\x00\x3e\x00\x3f\x00\x35\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x48\x00\x35\x00\x48\x00\x48\x00\x49\x00\x0d\x00\x4b\x00\x43\x00\x34\x00\x3e\x00\x34\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x48\x00\x48\x00\x11\x00\x32\x00\x33\x00\x01\x00\x3e\x00\x3e\x00\x37\x00\x38\x00\x0f\x00\x3a\x00\x04\x00\x43\x00\x3d\x00\x48\x00\x3f\x00\x42\x00\x41\x00\x42\x00\x05\x00\x09\x00\x12\x00\x26\x00\x4a\x00\x48\x00\x49\x00\x0f\x00\x4b\x00\x47\x00\x4a\x00\x1b\x00\x1c\x00\x1d\x00\x4a\x00\x32\x00\x33\x00\x34\x00\x1a\x00\x1b\x00\x48\x00\x1d\x00\x1e\x00\x1f\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x3e\x00\x39\x00\x32\x00\x33\x00\x39\x00\x39\x00\x39\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x39\x00\x42\x00\x3d\x00\x3e\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x1d\x00\x3e\x00\x34\x00\x09\x00\x48\x00\x49\x00\x36\x00\x4b\x00\x42\x00\x0f\x00\x48\x00\x01\x00\x42\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x32\x00\x33\x00\x3c\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x48\x00\x3f\x00\x3d\x00\x41\x00\x3f\x00\x48\x00\x41\x00\x1b\x00\x1c\x00\x43\x00\x48\x00\x4b\x00\x09\x00\x48\x00\x49\x00\x43\x00\x4b\x00\x43\x00\x0f\x00\x43\x00\x09\x00\x36\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x05\x00\x11\x00\x3c\x00\x01\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x4a\x00\x3a\x00\x47\x00\x03\x00\x3d\x00\x48\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x3d\x00\x26\x00\x3d\x00\x3d\x00\x48\x00\x49\x00\x0c\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\x30\x00\x31\x00\x09\x00\x33\x00\x34\x00\x02\x00\x4a\x00\x48\x00\x0f\x00\x02\x00\x01\x00\x41\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x39\x00\x39\x00\x3e\x00\x32\x00\x33\x00\x1d\x00\x1e\x00\x1f\x00\x37\x00\x38\x00\x12\x00\x3a\x00\x3e\x00\x42\x00\x3d\x00\x42\x00\x3f\x00\x42\x00\x41\x00\x1b\x00\x1c\x00\x35\x00\x39\x00\x43\x00\x4c\x00\x48\x00\x49\x00\x48\x00\x4b\x00\x3b\x00\x4c\x00\x09\x00\x1f\x00\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\x4c\x00\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\x40\x00\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\x09\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\x11\x00\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\x12\x00\x26\x00\xff\xff\x26\x00\xff\xff\x48\x00\x49\x00\x2a\x00\x4b\x00\x1b\x00\x1c\x00\x1d\x00\xff\xff\x32\x00\x33\x00\x34\x00\x33\x00\x34\x00\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\x32\x00\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\x01\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\x3a\x00\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x42\x00\x12\x00\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x1b\x00\x1c\x00\xff\xff\x31\x00\xff\xff\x33\x00\x34\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x01\x00\xff\xff\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\xff\xff\x3d\x00\x3e\x00\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\xff\xff\x32\x00\x33\x00\x33\x00\xff\xff\xff\xff\x37\x00\x37\x00\x38\x00\x12\x00\x3a\x00\xff\xff\x3d\x00\x3d\x00\x3f\x00\x3f\x00\x41\x00\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\x48\x00\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\x33\x00\x41\x00\xff\xff\xff\xff\x37\x00\x38\x00\x12\x00\xff\xff\x48\x00\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\x1b\x00\x1c\x00\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\xff\xff\x4b\x00\xff\xff\xff\xff\x09\x00\xff\xff\xff\xff\xff\xff\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x11\x00\xff\xff\xff\xff\xff\xff\x33\x00\xff\xff\xff\xff\xff\xff\x37\x00\x38\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\x3f\x00\xff\xff\x41\x00\xff\xff\xff\xff\x26\x00\xff\xff\xff\xff\xff\xff\x48\x00\x49\x00\x09\x00\x4b\x00\xff\xff\xff\xff\xff\xff\x31\x00\x0f\x00\x33\x00\x34\x00\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\x2c\x00\x2d\x00\x0f\x00\x2f\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\x09\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\xff\xff\xff\xff\xff\xff\x13\x00\x14\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\xff\xff\xff\xff\x13\x00\x14\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x1a\x00\x1b\x00\xff\xff\x1d\x00\x1e\x00\x1f\x00\x09\x00\xff\xff\x0b\x00\xff\xff\xff\xff\xff\xff\x0f\x00\x27\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\x09\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x0f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\xff\xff\xff\xff\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x6d\x02\xad\x01\x73\x02\x53\x01\xeb\x00\xc5\x01\xcb\x01\xcc\x01\xc6\x01\xc7\x01\x12\x00\x1f\x02\xc5\x01\x8a\x02\x42\x00\xd4\x01\x43\x00\x83\x02\x97\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x62\x01\x05\x00\x06\x00\xc5\x01\xcb\x01\xad\x01\xd4\x01\xb2\x01\xd5\x01\xcb\x01\xcc\x01\x0e\x00\x0f\x00\x79\x00\x63\x01\x46\x00\x7e\x02\x64\x01\x10\x00\x7a\x00\x47\x02\xc5\x01\x7f\x00\x3b\x01\xd4\x01\x33\x00\xd5\x01\xae\x01\xaf\x01\xb0\x01\x7f\x02\xcb\x01\xcc\x01\xed\x00\x20\x02\xd9\x00\xda\x00\xdb\x00\xee\x00\xdc\x00\xef\x00\xcd\x01\xc8\x01\xf0\x00\x87\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6e\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xae\x01\x98\x01\x3d\x02\x97\x01\xfd\x00\x33\x00\x33\x00\xfe\x00\xff\x00\x00\x01\xd6\x01\x7f\x00\x01\x01\xcd\x01\x02\x01\x11\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x79\x00\x32\x02\x54\x02\xce\x01\xc9\x01\xeb\x00\x7a\x00\x47\x02\x07\x00\x45\x02\x6f\x02\x12\x00\x08\x00\xdd\x00\x09\x00\x0a\x00\x78\x02\x0b\x00\x25\x02\x0c\x00\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x07\x00\x62\x01\x11\x00\xd7\x01\x08\x00\xce\x01\x09\x00\x0a\x00\x12\x00\x0b\x00\x11\x00\x0c\x00\x21\x01\x53\x01\x8b\x02\x95\x01\x12\x00\x98\x01\x64\x01\x21\x02\x33\x00\x34\x00\x19\x00\x1a\x00\xcf\x00\x52\x00\xff\x01\x62\x01\x7f\x00\x66\x02\x19\x00\x1a\x00\xcf\x00\xed\x00\x90\x01\x23\x02\xf5\x01\x24\x01\xee\x00\x69\x02\xef\x00\x26\x02\x33\x00\xf0\x00\x64\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x6b\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x53\x01\x48\x02\xc5\x01\xad\x01\xfd\x00\xc6\x01\xc7\x01\xfe\x00\xff\x00\x00\x01\xb3\x01\x22\x02\x01\x01\x01\x02\x02\x01\xb3\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x24\x02\xc3\x01\x8b\x01\x76\x02\x11\x00\x12\x00\x33\x00\x34\x00\x12\x00\x0d\x01\x12\x00\xaa\x01\x79\x02\xc4\x01\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x21\x01\x66\x00\x19\x00\x1a\x00\xcf\x00\x21\x01\x11\x00\xae\x01\x86\xff\xb2\x01\xe9\x01\xe4\x01\x12\x00\x3e\x02\xb5\x01\xb6\x01\x78\x00\x43\x02\xb4\x01\xb5\x01\xb6\x01\x86\xff\xe5\x01\x6f\x01\x23\x01\x24\x01\x46\x00\x66\x00\x22\x01\x23\x01\x24\x01\x46\x00\x50\x01\xed\x00\xdc\x01\x12\x02\x54\x01\x78\x00\xee\x00\x3e\x01\xef\x00\x78\x00\x12\x02\xf0\x00\x3f\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe4\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x2b\x00\x6e\x00\xe5\x01\x76\x00\xfd\x00\x40\x02\x77\x00\xfe\x00\xff\x00\x00\x01\xd0\x00\x64\x00\x01\x01\x6f\x00\x02\x01\x70\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x19\x02\x22\x00\x1a\x02\x11\x00\x12\x00\x7a\x00\x7d\x00\x51\x02\x89\x02\x12\x00\x23\x00\x24\x00\x59\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x5d\x02\x73\x00\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x27\xff\x27\xff\x61\x02\x5b\x02\x57\x00\x27\xff\x5c\x02\x27\xff\x2d\x00\x2e\x00\x03\x02\x27\xff\x46\x00\x27\xff\x68\x00\x27\xff\x78\x02\x06\x02\x75\x00\x0d\x02\xdc\x01\xdd\x01\x27\xff\x08\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xee\x00\x42\x00\xef\x00\x43\x00\x7c\x02\xf0\x00\x09\x02\xf1\x00\xf2\x00\xf3\x00\xf4\x00\x0a\x02\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x4b\x02\xe9\x00\x46\x00\xea\x00\xfd\x00\xeb\x00\x7d\x02\xfe\x00\xff\x00\x00\x01\xdc\x01\xde\x01\x01\x01\x42\x00\x02\x01\x43\x00\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\xeb\x00\x79\x00\x0e\x02\x22\x00\x15\x02\x11\x00\x12\x00\x7a\x00\xce\x00\x2f\x02\x0d\x01\x12\x00\x23\x00\x24\x00\x30\x02\xec\x00\x15\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x33\x02\xe5\x01\x19\x00\x1a\x00\xe6\x01\x27\x00\x28\x00\x29\x00\x2a\x00\x50\x00\x51\x00\x80\x02\x95\x01\x57\x00\x52\x00\xac\x01\x41\xff\x2d\x00\x2e\x00\x37\x02\x45\x01\x46\x00\x46\x01\x68\x00\x47\x01\x69\x00\x4b\x02\x75\x00\x39\x02\xdc\x01\xdf\x01\x33\x00\x4c\x02\xed\x00\x33\x00\x34\x00\x4b\x02\x35\x00\xc4\x01\xc1\x01\xef\x00\xbe\x01\x4f\x02\xf0\x00\xcf\x01\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xe7\x01\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\x9d\x01\x17\x02\xe9\x01\x18\x02\xfd\x00\xeb\x01\x78\x00\xfe\x00\xff\x00\x00\x01\x33\x00\x7c\xff\x01\x01\x7c\xff\x02\x01\x7c\xff\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x01\x0b\x01\x0c\x01\x97\x01\x21\x00\x81\x02\x82\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7b\x00\xec\x01\x47\x00\xed\x01\x12\x01\x13\x01\x14\x01\x15\x01\x71\x02\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\xee\x01\x1d\x01\xd9\x00\xda\x00\xdb\x00\x48\x00\xdc\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\xb9\x01\x49\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x4d\x00\x4e\x00\x1e\x01\xef\x01\x1f\x01\x0e\x00\x0f\x00\x52\x00\x2d\x00\x2e\x00\xf0\x01\x2f\x00\x10\x00\xe9\x00\x68\x00\x3d\x01\x69\x00\x3e\x01\x75\x00\x46\x00\xfd\x01\x98\x01\xff\x01\x20\x01\x33\x00\x33\x00\x34\x00\x47\x00\x35\x00\x97\x01\x21\x00\xcb\x01\x55\x02\x79\x00\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x7a\x00\x7c\x00\x01\x02\x47\x00\x60\x01\x12\x01\x13\x01\x14\x01\x15\x01\xdd\x00\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x79\x00\x1d\x01\x26\x02\xdf\x00\x62\x00\x41\x01\x7a\x00\x7d\x00\xc5\x01\x5a\x01\x64\x01\xc6\x01\x13\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\x67\x01\x1f\x01\xcb\x01\x56\x02\x52\x00\x2d\x00\x2e\x00\x6a\x01\x2f\x00\x6d\x01\x5b\x00\x68\x00\x40\x01\x69\x00\x41\x01\x75\x00\xcb\x01\x57\x02\x98\x01\x7f\x01\x20\x01\x33\x00\x33\x00\x34\x00\x81\x01\x35\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\x21\x00\xe0\x01\xe1\x01\xe2\x01\x46\x00\x0f\x01\x10\x01\x11\x01\x0f\x00\x5b\x00\x82\x01\x5c\x00\x47\x00\x5d\x00\x12\x01\x13\x01\x14\x01\x15\x01\x83\x01\x16\x01\x17\x01\x18\x01\x19\x01\x1a\x01\x1b\x01\x1c\x01\x23\x00\x24\x00\x07\x00\x1d\x01\xcb\x01\x58\x02\x08\x00\x41\x01\x80\x00\x0a\x00\x84\x01\x5b\x01\x85\x01\x21\x00\x87\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\x01\x62\x00\x1e\x01\xc5\x01\x1f\x01\x88\x01\xc6\x01\x14\x02\x2d\x00\x2e\x00\x22\x00\x2f\x00\xc5\x01\x89\x01\x68\x00\xd4\x01\x69\x00\x84\x02\x75\x00\x23\x00\x24\x00\x25\x00\x8c\x01\x20\x01\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x85\x02\xa3\x01\xd6\x00\xd7\x00\x8d\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x10\x02\xe2\x01\x7c\x02\x2b\x00\x2c\x00\x21\x00\x07\x00\x8e\x01\x2d\x00\x2e\x00\x08\x00\x2f\x00\x81\x00\x0a\x00\x30\x00\x90\x01\x31\x00\x42\x00\x32\x00\x43\x00\xc5\x01\x11\x00\x22\x00\xc6\x01\x2e\x02\x33\x00\x34\x00\x12\x00\x35\x00\xcb\x01\x2a\x02\x23\x00\x24\x00\x25\x00\xd9\x00\xda\x00\xdb\x00\xe3\x00\x16\x00\x17\x00\xe4\x00\x19\x00\x1a\x00\x1b\x00\x1a\x02\x1b\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x27\x02\x28\x02\xa9\x01\x2b\x00\x2c\x00\x21\x00\x92\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x86\x02\x98\x01\x30\x00\x9d\x01\x31\x00\x42\x00\x32\x00\x43\x00\x9a\x01\x11\x00\x22\x00\x2b\x02\x2c\x02\x33\x00\x34\x00\x12\x00\x35\x00\xb9\x01\xba\x01\x23\x00\x24\x00\x25\x00\x94\x01\x95\x01\x6c\x00\x1f\x00\x72\x00\x17\x00\x73\x00\x19\x00\x1a\x00\x1b\x00\xa2\x01\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x35\x00\x04\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x4d\x01\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x67\x02\xa7\x01\x30\x00\xe0\x00\x31\x00\x42\x00\x32\x00\x43\x00\x4e\x01\x5d\x00\x22\x00\xdd\x00\x6a\x00\x33\x00\x34\x00\x82\x00\x35\x00\x50\x00\x51\x00\x23\x00\x24\x00\x25\x00\x52\x00\xd0\x01\xdf\x00\x62\x00\x78\x00\x04\x00\x64\x00\x4e\x02\x65\x00\x89\x02\x66\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x53\x02\xc5\x01\x2d\x00\x2e\x00\xd4\x01\x2f\x00\x68\x02\xe5\x01\x30\x00\x6c\x00\x31\x00\x65\x02\x32\x00\x3d\x00\x66\x02\x11\x00\x22\x00\xdd\x00\xe5\x01\x33\x00\x34\x00\x12\x00\x35\x00\x33\x00\x34\x00\x23\x00\x24\x00\x25\x00\x6b\x02\xd1\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x6d\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x72\x02\x73\x02\x75\x02\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfb\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\x42\x02\x30\x00\x46\x00\x31\x00\xb8\x01\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x47\x02\xc5\x01\x33\x00\x34\x00\xd4\x01\x35\x00\x1d\x02\xbc\x01\x4e\x02\x53\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x5b\x02\x47\x00\x2b\x00\x2c\x00\x21\x00\xe5\x01\x5f\x02\x2d\x00\x2e\x00\x60\x02\x2f\x00\x61\x02\x63\x02\x30\x00\x64\x02\x31\x00\xe2\x00\x32\x00\x3d\x00\xeb\x01\x11\x00\x22\x00\xdd\x00\xe2\x00\x33\x00\x34\x00\x12\x00\x35\x00\x08\x02\xe2\x00\x23\x00\x24\x00\x25\x00\xc0\x01\xd2\x01\xdf\x00\x62\x00\xf8\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\x21\x00\x05\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x06\x02\x0c\x02\x81\x01\x2b\x00\x2c\x00\xf9\x01\xfa\x01\xfc\x01\x2d\x00\x2e\x00\x22\x00\x2f\x00\x10\x02\x1d\x02\x30\x00\x46\x00\x31\x00\x2a\x02\x32\x00\x23\x00\x24\x00\x25\x00\x33\x00\x2e\x02\x33\x00\x33\x00\x34\x00\x35\x02\x35\x00\x6c\x00\x36\x02\x37\x02\x3c\x02\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x33\x00\x33\x00\x47\x00\x2b\x00\x2c\x00\x21\x00\x39\x02\x3b\x02\x2d\x00\x2e\x00\xb8\x01\x2f\x00\xc0\x01\xbc\x01\x30\x00\x33\x00\x31\x00\xf7\x01\x32\x00\x3d\x00\x9c\x01\x11\x00\x22\x00\xdd\x00\xeb\x01\x33\x00\x34\x00\x12\x00\x35\x00\xf2\x01\xf3\x01\x23\x00\x24\x00\x25\x00\xf4\x01\xd3\x01\xdf\x00\x62\x00\x72\x00\x17\x00\x33\x00\x19\x00\x1a\x00\xe7\x00\x21\x00\x03\x02\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x43\xff\x67\x01\x44\xff\x2b\x00\x2c\x00\x40\xff\x3e\xff\x3f\xff\x2d\x00\x2e\x00\x22\x00\x2f\x00\x66\x01\x69\x01\x30\x00\x46\x00\x31\x00\x6c\x01\x32\x00\x23\x00\x24\x00\x25\x00\x6a\x01\x71\x01\x7e\x01\x33\x00\x34\x00\x73\x01\x35\x00\x6f\x01\x12\x00\x33\x00\x21\x00\x72\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\xd9\x01\xda\x01\x81\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x33\x00\xdb\x01\x30\x00\xdc\x01\x31\x00\x33\x00\x32\x00\x23\x00\x24\x00\x6c\x00\x33\x00\x87\x01\x11\x00\x33\x00\x34\x00\x8b\x01\x35\x00\x92\x01\x12\x00\x94\x01\x46\x00\x9a\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x9c\x01\x47\x00\x77\x00\x21\x00\x57\x00\x19\x00\x1a\x00\xe2\x00\x2d\x00\x2e\x00\xe2\x00\x2f\x00\x9f\x01\xa1\x01\x68\x00\x33\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xa5\x01\x5e\x00\xa6\x01\xa7\x01\x33\x00\x34\x00\xdb\x00\x35\x00\x23\x00\x24\x00\x25\x00\x5f\x00\x60\x00\x11\x00\x61\x00\x62\x00\x21\x01\xe2\x00\x33\x00\x12\x00\x2d\x01\x21\x00\x26\x01\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2a\x01\x48\x01\x4b\x01\x2b\x00\x2c\x00\x19\x00\x1a\x00\x55\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x4c\x01\x4d\x01\x30\x00\x51\x01\x31\x00\x52\x01\x32\x00\x23\x00\x24\x00\x53\x01\x71\x00\x6c\x00\xff\xff\x33\x00\x34\x00\x33\x00\x35\x00\x78\x00\xff\xff\x46\x00\x79\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\xff\xff\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x42\x00\x75\x00\x43\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x42\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\x9f\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x46\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x47\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x73\xff\x2f\x00\x00\x00\x73\xff\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x00\x00\x22\x00\xdd\x00\x00\x00\x41\x01\x00\x00\x33\x00\x34\x00\x49\x01\x35\x00\x23\x00\x24\x00\x25\x00\x00\x00\xa1\x01\xdf\x00\x62\x00\x43\x01\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x2c\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\x32\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x58\x01\x22\x00\xdd\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x00\x00\xde\x00\xdf\x00\x62\x00\x7a\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x5a\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x21\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x39\x01\x22\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x23\x00\x24\x00\x00\x00\x28\x01\x00\x00\x61\x00\x62\x00\x75\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x21\x00\x00\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x00\x00\x68\x00\x3b\x01\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x3c\x02\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x00\x00\x50\x00\x51\x00\x57\x00\x00\x00\x00\x00\x52\x00\x2d\x00\x2e\x00\x22\x00\x2f\x00\x00\x00\x64\x00\x68\x00\x65\x00\x69\x00\x66\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x33\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x45\x01\x00\x00\x46\x01\x57\x00\x47\x01\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\xd2\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x53\x00\x00\x00\x54\x00\x57\x00\x55\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x75\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x50\x00\x51\x00\x00\x00\x00\x00\x00\x00\x52\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x00\x00\x64\x00\x00\x00\x65\x00\x57\x00\x66\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x22\x00\x00\x00\x33\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x23\x00\x24\x00\x00\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x00\x00\x35\x00\x00\x00\x00\x00\x46\x00\x00\x00\x00\x00\x00\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x47\x00\x00\x00\x00\x00\x00\x00\x57\x00\x00\x00\x00\x00\x00\x00\x2d\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x00\x00\x5e\x00\x00\x00\x00\x00\x00\x00\x33\x00\x34\x00\x11\x00\x35\x00\x00\x00\x00\x00\x00\x00\x2b\x01\x12\x00\x61\x00\x62\x00\x00\x00\x37\x00\x26\x01\xb8\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x33\x01\x17\x00\x34\x01\x19\x00\x1a\x00\x1b\x00\xab\x01\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x00\x00\x3b\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x35\x01\x36\x01\x12\x00\x37\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x31\x01\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x3f\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x40\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x30\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x36\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x32\x01\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x11\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x3b\x00\x12\x00\x00\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x3a\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x44\x00\x11\x00\x00\x00\x58\x01\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x27\x01\x38\x00\xa9\x01\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x39\x01\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x5c\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x5d\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x5e\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x5f\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x30\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x31\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x32\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x26\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x3b\x00\x00\x00\x00\x00\x27\x01\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x40\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2d\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2e\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x11\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x2f\x01\x00\x00\x00\x00\x37\x00\x38\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe6\x00\x17\x00\x00\x00\x19\x00\x1a\x00\xe7\x00\x3d\x00\x00\x00\x3e\x00\x00\x00\x00\x00\x00\x00\x12\x00\x44\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\x3f\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x42\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x44\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4e\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x02\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbc\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf4\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x55\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe5\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x36\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2a\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x01\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x71\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x11\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x75\x01\x76\x01\x77\x01\x78\x01\x79\x01\x7a\x01\x7b\x01\x7c\x01\x7d\x01\x7e\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (3, 370) [+	(3 , happyReduce_3),+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41),+	(42 , happyReduce_42),+	(43 , happyReduce_43),+	(44 , happyReduce_44),+	(45 , happyReduce_45),+	(46 , happyReduce_46),+	(47 , happyReduce_47),+	(48 , happyReduce_48),+	(49 , happyReduce_49),+	(50 , happyReduce_50),+	(51 , happyReduce_51),+	(52 , happyReduce_52),+	(53 , happyReduce_53),+	(54 , happyReduce_54),+	(55 , happyReduce_55),+	(56 , happyReduce_56),+	(57 , happyReduce_57),+	(58 , happyReduce_58),+	(59 , happyReduce_59),+	(60 , happyReduce_60),+	(61 , happyReduce_61),+	(62 , happyReduce_62),+	(63 , happyReduce_63),+	(64 , happyReduce_64),+	(65 , happyReduce_65),+	(66 , happyReduce_66),+	(67 , happyReduce_67),+	(68 , happyReduce_68),+	(69 , happyReduce_69),+	(70 , happyReduce_70),+	(71 , happyReduce_71),+	(72 , happyReduce_72),+	(73 , happyReduce_73),+	(74 , happyReduce_74),+	(75 , happyReduce_75),+	(76 , happyReduce_76),+	(77 , happyReduce_77),+	(78 , happyReduce_78),+	(79 , happyReduce_79),+	(80 , happyReduce_80),+	(81 , happyReduce_81),+	(82 , happyReduce_82),+	(83 , happyReduce_83),+	(84 , happyReduce_84),+	(85 , happyReduce_85),+	(86 , happyReduce_86),+	(87 , happyReduce_87),+	(88 , happyReduce_88),+	(89 , happyReduce_89),+	(90 , happyReduce_90),+	(91 , happyReduce_91),+	(92 , happyReduce_92),+	(93 , happyReduce_93),+	(94 , happyReduce_94),+	(95 , happyReduce_95),+	(96 , happyReduce_96),+	(97 , happyReduce_97),+	(98 , happyReduce_98),+	(99 , happyReduce_99),+	(100 , happyReduce_100),+	(101 , happyReduce_101),+	(102 , happyReduce_102),+	(103 , happyReduce_103),+	(104 , happyReduce_104),+	(105 , happyReduce_105),+	(106 , happyReduce_106),+	(107 , happyReduce_107),+	(108 , happyReduce_108),+	(109 , happyReduce_109),+	(110 , happyReduce_110),+	(111 , happyReduce_111),+	(112 , happyReduce_112),+	(113 , happyReduce_113),+	(114 , happyReduce_114),+	(115 , happyReduce_115),+	(116 , happyReduce_116),+	(117 , happyReduce_117),+	(118 , happyReduce_118),+	(119 , happyReduce_119),+	(120 , happyReduce_120),+	(121 , happyReduce_121),+	(122 , happyReduce_122),+	(123 , happyReduce_123),+	(124 , happyReduce_124),+	(125 , happyReduce_125),+	(126 , happyReduce_126),+	(127 , happyReduce_127),+	(128 , happyReduce_128),+	(129 , happyReduce_129),+	(130 , happyReduce_130),+	(131 , happyReduce_131),+	(132 , happyReduce_132),+	(133 , happyReduce_133),+	(134 , happyReduce_134),+	(135 , happyReduce_135),+	(136 , happyReduce_136),+	(137 , happyReduce_137),+	(138 , happyReduce_138),+	(139 , happyReduce_139),+	(140 , happyReduce_140),+	(141 , happyReduce_141),+	(142 , happyReduce_142),+	(143 , happyReduce_143),+	(144 , happyReduce_144),+	(145 , happyReduce_145),+	(146 , happyReduce_146),+	(147 , happyReduce_147),+	(148 , happyReduce_148),+	(149 , happyReduce_149),+	(150 , happyReduce_150),+	(151 , happyReduce_151),+	(152 , happyReduce_152),+	(153 , happyReduce_153),+	(154 , happyReduce_154),+	(155 , happyReduce_155),+	(156 , happyReduce_156),+	(157 , happyReduce_157),+	(158 , happyReduce_158),+	(159 , happyReduce_159),+	(160 , happyReduce_160),+	(161 , happyReduce_161),+	(162 , happyReduce_162),+	(163 , happyReduce_163),+	(164 , happyReduce_164),+	(165 , happyReduce_165),+	(166 , happyReduce_166),+	(167 , happyReduce_167),+	(168 , happyReduce_168),+	(169 , happyReduce_169),+	(170 , happyReduce_170),+	(171 , happyReduce_171),+	(172 , happyReduce_172),+	(173 , happyReduce_173),+	(174 , happyReduce_174),+	(175 , happyReduce_175),+	(176 , happyReduce_176),+	(177 , happyReduce_177),+	(178 , happyReduce_178),+	(179 , happyReduce_179),+	(180 , happyReduce_180),+	(181 , happyReduce_181),+	(182 , happyReduce_182),+	(183 , happyReduce_183),+	(184 , happyReduce_184),+	(185 , happyReduce_185),+	(186 , happyReduce_186),+	(187 , happyReduce_187),+	(188 , happyReduce_188),+	(189 , happyReduce_189),+	(190 , happyReduce_190),+	(191 , happyReduce_191),+	(192 , happyReduce_192),+	(193 , happyReduce_193),+	(194 , happyReduce_194),+	(195 , happyReduce_195),+	(196 , happyReduce_196),+	(197 , happyReduce_197),+	(198 , happyReduce_198),+	(199 , happyReduce_199),+	(200 , happyReduce_200),+	(201 , happyReduce_201),+	(202 , happyReduce_202),+	(203 , happyReduce_203),+	(204 , happyReduce_204),+	(205 , happyReduce_205),+	(206 , happyReduce_206),+	(207 , happyReduce_207),+	(208 , happyReduce_208),+	(209 , happyReduce_209),+	(210 , happyReduce_210),+	(211 , happyReduce_211),+	(212 , happyReduce_212),+	(213 , happyReduce_213),+	(214 , happyReduce_214),+	(215 , happyReduce_215),+	(216 , happyReduce_216),+	(217 , happyReduce_217),+	(218 , happyReduce_218),+	(219 , happyReduce_219),+	(220 , happyReduce_220),+	(221 , happyReduce_221),+	(222 , happyReduce_222),+	(223 , happyReduce_223),+	(224 , happyReduce_224),+	(225 , happyReduce_225),+	(226 , happyReduce_226),+	(227 , happyReduce_227),+	(228 , happyReduce_228),+	(229 , happyReduce_229),+	(230 , happyReduce_230),+	(231 , happyReduce_231),+	(232 , happyReduce_232),+	(233 , happyReduce_233),+	(234 , happyReduce_234),+	(235 , happyReduce_235),+	(236 , happyReduce_236),+	(237 , happyReduce_237),+	(238 , happyReduce_238),+	(239 , happyReduce_239),+	(240 , happyReduce_240),+	(241 , happyReduce_241),+	(242 , happyReduce_242),+	(243 , happyReduce_243),+	(244 , happyReduce_244),+	(245 , happyReduce_245),+	(246 , happyReduce_246),+	(247 , happyReduce_247),+	(248 , happyReduce_248),+	(249 , happyReduce_249),+	(250 , happyReduce_250),+	(251 , happyReduce_251),+	(252 , happyReduce_252),+	(253 , happyReduce_253),+	(254 , happyReduce_254),+	(255 , happyReduce_255),+	(256 , happyReduce_256),+	(257 , happyReduce_257),+	(258 , happyReduce_258),+	(259 , happyReduce_259),+	(260 , happyReduce_260),+	(261 , happyReduce_261),+	(262 , happyReduce_262),+	(263 , happyReduce_263),+	(264 , happyReduce_264),+	(265 , happyReduce_265),+	(266 , happyReduce_266),+	(267 , happyReduce_267),+	(268 , happyReduce_268),+	(269 , happyReduce_269),+	(270 , happyReduce_270),+	(271 , happyReduce_271),+	(272 , happyReduce_272),+	(273 , happyReduce_273),+	(274 , happyReduce_274),+	(275 , happyReduce_275),+	(276 , happyReduce_276),+	(277 , happyReduce_277),+	(278 , happyReduce_278),+	(279 , happyReduce_279),+	(280 , happyReduce_280),+	(281 , happyReduce_281),+	(282 , happyReduce_282),+	(283 , happyReduce_283),+	(284 , happyReduce_284),+	(285 , happyReduce_285),+	(286 , happyReduce_286),+	(287 , happyReduce_287),+	(288 , happyReduce_288),+	(289 , happyReduce_289),+	(290 , happyReduce_290),+	(291 , happyReduce_291),+	(292 , happyReduce_292),+	(293 , happyReduce_293),+	(294 , happyReduce_294),+	(295 , happyReduce_295),+	(296 , happyReduce_296),+	(297 , happyReduce_297),+	(298 , happyReduce_298),+	(299 , happyReduce_299),+	(300 , happyReduce_300),+	(301 , happyReduce_301),+	(302 , happyReduce_302),+	(303 , happyReduce_303),+	(304 , happyReduce_304),+	(305 , happyReduce_305),+	(306 , happyReduce_306),+	(307 , happyReduce_307),+	(308 , happyReduce_308),+	(309 , happyReduce_309),+	(310 , happyReduce_310),+	(311 , happyReduce_311),+	(312 , happyReduce_312),+	(313 , happyReduce_313),+	(314 , happyReduce_314),+	(315 , happyReduce_315),+	(316 , happyReduce_316),+	(317 , happyReduce_317),+	(318 , happyReduce_318),+	(319 , happyReduce_319),+	(320 , happyReduce_320),+	(321 , happyReduce_321),+	(322 , happyReduce_322),+	(323 , happyReduce_323),+	(324 , happyReduce_324),+	(325 , happyReduce_325),+	(326 , happyReduce_326),+	(327 , happyReduce_327),+	(328 , happyReduce_328),+	(329 , happyReduce_329),+	(330 , happyReduce_330),+	(331 , happyReduce_331),+	(332 , happyReduce_332),+	(333 , happyReduce_333),+	(334 , happyReduce_334),+	(335 , happyReduce_335),+	(336 , happyReduce_336),+	(337 , happyReduce_337),+	(338 , happyReduce_338),+	(339 , happyReduce_339),+	(340 , happyReduce_340),+	(341 , happyReduce_341),+	(342 , happyReduce_342),+	(343 , happyReduce_343),+	(344 , happyReduce_344),+	(345 , happyReduce_345),+	(346 , happyReduce_346),+	(347 , happyReduce_347),+	(348 , happyReduce_348),+	(349 , happyReduce_349),+	(350 , happyReduce_350),+	(351 , happyReduce_351),+	(352 , happyReduce_352),+	(353 , happyReduce_353),+	(354 , happyReduce_354),+	(355 , happyReduce_355),+	(356 , happyReduce_356),+	(357 , happyReduce_357),+	(358 , happyReduce_358),+	(359 , happyReduce_359),+	(360 , happyReduce_360),+	(361 , happyReduce_361),+	(362 , happyReduce_362),+	(363 , happyReduce_363),+	(364 , happyReduce_364),+	(365 , happyReduce_365),+	(366 , happyReduce_366),+	(367 , happyReduce_367),+	(368 , happyReduce_368),+	(369 , happyReduce_369),+	(370 , happyReduce_370)+	]++happy_n_terms = 77 :: Int+happy_n_nonterms = 127 :: Int++happyReduce_3 = happySpecReduce_1  0# happyReduction_3+happyReduction_3 happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (reverse happy_var_1+	)}++happyReduce_4 = happySpecReduce_2  1# happyReduction_4+happyReduction_4 happy_x_2+	happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	case happyOut8 happy_x_2 of { happy_var_2 -> +	happyIn7+		 (happy_var_2 : happy_var_1+	)}}++happyReduce_5 = happySpecReduce_0  1# happyReduction_5+happyReduction_5  =  happyIn7+		 ([]+	)++happyReduce_6 = happySpecReduce_1  2# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> +	happyIn8+		 (TokKeyword KwLet happy_var_1+	)}++happyReduce_7 = happySpecReduce_1  2# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIn happy_var_1) -> +	happyIn8+		 (TokKeyword KwIn happy_var_1+	)}++happyReduce_8 = happySpecReduce_1  2# happyReduction_8+happyReduction_8 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWhere happy_var_1) -> +	happyIn8+		 (TokKeyword KwWhere happy_var_1+	)}++happyReduce_9 = happySpecReduce_1  2# happyReduction_9+happyReduction_9 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwWith happy_var_1) -> +	happyIn8+		 (TokKeyword KwWith happy_var_1+	)}++happyReduce_10 = happySpecReduce_1  2# happyReduction_10+happyReduction_10 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRewrite happy_var_1) -> +	happyIn8+		 (TokKeyword KwRewrite happy_var_1+	)}++happyReduce_11 = happySpecReduce_1  2# happyReduction_11+happyReduction_11 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPostulate happy_var_1+	)}++happyReduce_12 = happySpecReduce_1  2# happyReduction_12+happyReduction_12 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrimitive happy_var_1+	)}++happyReduce_13 = happySpecReduce_1  2# happyReduction_13+happyReduction_13 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	happyIn8+		 (TokKeyword KwOpen happy_var_1+	)}++happyReduce_14 = happySpecReduce_1  2# happyReduction_14+happyReduction_14 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> +	happyIn8+		 (TokKeyword KwImport happy_var_1+	)}++happyReduce_15 = happySpecReduce_1  2# happyReduction_15+happyReduction_15 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> +	happyIn8+		 (TokKeyword KwUsing happy_var_1+	)}++happyReduce_16 = happySpecReduce_1  2# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> +	happyIn8+		 (TokKeyword KwHiding happy_var_1+	)}++happyReduce_17 = happySpecReduce_1  2# happyReduction_17+happyReduction_17 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> +	happyIn8+		 (TokKeyword KwRenaming happy_var_1+	)}++happyReduce_18 = happySpecReduce_1  2# happyReduction_18+happyReduction_18 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwTo happy_var_1) -> +	happyIn8+		 (TokKeyword KwTo happy_var_1+	)}++happyReduce_19 = happySpecReduce_1  2# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPublic happy_var_1) -> +	happyIn8+		 (TokKeyword KwPublic happy_var_1+	)}++happyReduce_20 = happySpecReduce_1  2# happyReduction_20+happyReduction_20 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	happyIn8+		 (TokKeyword KwModule happy_var_1+	)}++happyReduce_21 = happySpecReduce_1  2# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	happyIn8+		 (TokKeyword KwData happy_var_1+	)}++happyReduce_22 = happySpecReduce_1  2# happyReduction_22+happyReduction_22 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	happyIn8+		 (TokKeyword KwCoData happy_var_1+	)}++happyReduce_23 = happySpecReduce_1  2# happyReduction_23+happyReduction_23 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	happyIn8+		 (TokKeyword KwRecord happy_var_1+	)}++happyReduce_24 = happySpecReduce_1  2# happyReduction_24+happyReduction_24 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwConstructor happy_var_1) -> +	happyIn8+		 (TokKeyword KwConstructor happy_var_1+	)}++happyReduce_25 = happySpecReduce_1  2# happyReduction_25+happyReduction_25 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwField happy_var_1) -> +	happyIn8+		 (TokKeyword KwField happy_var_1+	)}++happyReduce_26 = happySpecReduce_1  2# happyReduction_26+happyReduction_26 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfix happy_var_1+	)}++happyReduce_27 = happySpecReduce_1  2# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixL happy_var_1+	)}++happyReduce_28 = happySpecReduce_1  2# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> +	happyIn8+		 (TokKeyword KwInfixR happy_var_1+	)}++happyReduce_29 = happySpecReduce_1  2# happyReduction_29+happyReduction_29 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	happyIn8+		 (TokKeyword KwMutual happy_var_1+	)}++happyReduce_30 = happySpecReduce_1  2# happyReduction_30+happyReduction_30 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	happyIn8+		 (TokKeyword KwAbstract happy_var_1+	)}++happyReduce_31 = happySpecReduce_1  2# happyReduction_31+happyReduction_31 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	happyIn8+		 (TokKeyword KwPrivate happy_var_1+	)}++happyReduce_32 = happySpecReduce_1  2# happyReduction_32+happyReduction_32 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn8+		 (TokKeyword KwProp happy_var_1+	)}++happyReduce_33 = happySpecReduce_1  2# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn8+		 (TokKeyword KwSet happy_var_1+	)}++happyReduce_34 = happySpecReduce_1  2# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwForall happy_var_1) -> +	happyIn8+		 (TokKeyword KwForall happy_var_1+	)}++happyReduce_35 = happySpecReduce_1  2# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSyntax happy_var_1) -> +	happyIn8+		 (TokKeyword KwSyntax happy_var_1+	)}++happyReduce_36 = happySpecReduce_1  2# happyReduction_36+happyReduction_36 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwOPTIONS happy_var_1) -> +	happyIn8+		 (TokKeyword KwOPTIONS happy_var_1+	)}++happyReduce_37 = happySpecReduce_1  2# happyReduction_37+happyReduction_37 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwBUILTIN happy_var_1) -> +	happyIn8+		 (TokKeyword KwBUILTIN happy_var_1+	)}++happyReduce_38 = happySpecReduce_1  2# happyReduction_38+happyReduction_38 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPORT happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPORT happy_var_1+	)}++happyReduce_39 = happySpecReduce_1  2# happyReduction_39+happyReduction_39 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED happy_var_1+	)}++happyReduce_40 = happySpecReduce_1  2# happyReduction_40+happyReduction_40 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_DATA happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_DATA happy_var_1+	)}++happyReduce_41 = happySpecReduce_1  2# happyReduction_41+happyReduction_41 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_TYPE happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_TYPE happy_var_1+	)}++happyReduce_42 = happySpecReduce_1  2# happyReduction_42+happyReduction_42 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_EPIC happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_EPIC happy_var_1+	)}++happyReduce_43 = happySpecReduce_1  2# happyReduction_43+happyReduction_43 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwCOMPILED_JS happy_var_1) -> +	happyIn8+		 (TokKeyword KwCOMPILED_JS happy_var_1+	)}++happyReduce_44 = happySpecReduce_1  2# happyReduction_44+happyReduction_44 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSTATIC happy_var_1) -> +	happyIn8+		 (TokKeyword KwSTATIC happy_var_1+	)}++happyReduce_45 = happySpecReduce_1  2# happyReduction_45+happyReduction_45 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwIMPOSSIBLE happy_var_1) -> +	happyIn8+		 (TokKeyword KwIMPOSSIBLE happy_var_1+	)}++happyReduce_46 = happySpecReduce_1  2# happyReduction_46+happyReduction_46 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwETA happy_var_1) -> +	happyIn8+		 (TokKeyword KwETA happy_var_1+	)}++happyReduce_47 = happySpecReduce_1  2# happyReduction_47+happyReduction_47 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuoteGoal happy_var_1+	)}++happyReduce_48 = happySpecReduce_1  2# happyReduction_48+happyReduction_48 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuote happy_var_1+	)}++happyReduce_49 = happySpecReduce_1  2# happyReduction_49+happyReduction_49 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> +	happyIn8+		 (TokKeyword KwQuoteTerm happy_var_1+	)}++happyReduce_50 = happySpecReduce_1  2# happyReduction_50+happyReduction_50 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> +	happyIn8+		 (TokKeyword KwUnquote happy_var_1+	)}++happyReduce_51 = happySpecReduce_1  2# happyReduction_51+happyReduction_51 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn8+		 (TokSetN happy_var_1+	)}++happyReduce_52 = happySpecReduce_1  2# happyReduction_52+happyReduction_52 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokTeX happy_var_1) -> +	happyIn8+		 (TokTeX happy_var_1+	)}++happyReduce_53 = happySpecReduce_1  2# happyReduction_53+happyReduction_53 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokComment happy_var_1) -> +	happyIn8+		 (TokComment happy_var_1+	)}++happyReduce_54 = happySpecReduce_1  2# happyReduction_54+happyReduction_54 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> +	happyIn8+		 (TokSymbol SymEllipsis happy_var_1+	)}++happyReduce_55 = happySpecReduce_1  2# happyReduction_55+happyReduction_55 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> +	happyIn8+		 (TokSymbol SymDotDot happy_var_1+	)}++happyReduce_56 = happySpecReduce_1  2# happyReduction_56+happyReduction_56 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	happyIn8+		 (TokSymbol SymDot happy_var_1+	)}++happyReduce_57 = happySpecReduce_1  2# happyReduction_57+happyReduction_57 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymSemi happy_var_1+	)}++happyReduce_58 = happySpecReduce_1  2# happyReduction_58+happyReduction_58 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymColon happy_var_1) -> +	happyIn8+		 (TokSymbol SymColon happy_var_1+	)}++happyReduce_59 = happySpecReduce_1  2# happyReduction_59+happyReduction_59 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymEqual happy_var_1) -> +	happyIn8+		 (TokSymbol SymEqual happy_var_1+	)}++happyReduce_60 = happySpecReduce_1  2# happyReduction_60+happyReduction_60 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn8+		 (TokSymbol SymUnderscore happy_var_1+	)}++happyReduce_61 = happySpecReduce_1  2# happyReduction_61+happyReduction_61 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn8+		 (TokSymbol SymQuestionMark happy_var_1+	)}++happyReduce_62 = happySpecReduce_1  2# happyReduction_62+happyReduction_62 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymArrow happy_var_1) -> +	happyIn8+		 (TokSymbol SymArrow happy_var_1+	)}++happyReduce_63 = happySpecReduce_1  2# happyReduction_63+happyReduction_63 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	happyIn8+		 (TokSymbol SymLambda happy_var_1+	)}++happyReduce_64 = happySpecReduce_1  2# happyReduction_64+happyReduction_64 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymAs happy_var_1) -> +	happyIn8+		 (TokSymbol SymAs happy_var_1+	)}++happyReduce_65 = happySpecReduce_1  2# happyReduction_65+happyReduction_65 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymBar happy_var_1) -> +	happyIn8+		 (TokSymbol SymBar happy_var_1+	)}++happyReduce_66 = happySpecReduce_1  2# happyReduction_66+happyReduction_66 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenParen happy_var_1+	)}++happyReduce_67 = happySpecReduce_1  2# happyReduction_67+happyReduction_67 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseParen happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseParen happy_var_1+	)}++happyReduce_68 = happySpecReduce_1  2# happyReduction_68+happyReduction_68 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymDoubleOpenBrace happy_var_1+	)}++happyReduce_69 = happySpecReduce_1  2# happyReduction_69+happyReduction_69 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymDoubleCloseBrace happy_var_1+	)}++happyReduce_70 = happySpecReduce_1  2# happyReduction_70+happyReduction_70 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenBrace happy_var_1+	)}++happyReduce_71 = happySpecReduce_1  2# happyReduction_71+happyReduction_71 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseBrace happy_var_1+	)}++happyReduce_72 = happySpecReduce_1  2# happyReduction_72+happyReduction_72 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenVirtualBrace happy_var_1+	)}++happyReduce_73 = happySpecReduce_1  2# happyReduction_73+happyReduction_73 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymCloseVirtualBrace happy_var_1) -> +	happyIn8+		 (TokSymbol SymCloseVirtualBrace happy_var_1+	)}++happyReduce_74 = happySpecReduce_1  2# happyReduction_74+happyReduction_74 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> +	happyIn8+		 (TokSymbol SymVirtualSemi happy_var_1+	)}++happyReduce_75 = happySpecReduce_1  2# happyReduction_75+happyReduction_75 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymOpenPragma happy_var_1+	)}++happyReduce_76 = happySpecReduce_1  2# happyReduction_76+happyReduction_76 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymClosePragma happy_var_1) -> +	happyIn8+		 (TokSymbol SymClosePragma happy_var_1+	)}++happyReduce_77 = happySpecReduce_1  2# happyReduction_77+happyReduction_77 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn8+		 (TokId happy_var_1+	)}++happyReduce_78 = happySpecReduce_1  2# happyReduction_78+happyReduction_78 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	happyIn8+		 (TokQId happy_var_1+	)}++happyReduce_79 = happySpecReduce_1  2# happyReduction_79+happyReduction_79 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	happyIn8+		 (TokString happy_var_1+	)}++happyReduce_80 = happySpecReduce_1  2# happyReduction_80+happyReduction_80 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn8+		 (TokLiteral happy_var_1+	)}++happyReduce_81 = happySpecReduce_1  3# happyReduction_81+happyReduction_81 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn9+		 (happy_var_1+	)}++happyReduce_82 = happySpecReduce_1  4# happyReduction_82+happyReduction_82 happy_x_1+	 =  case happyOut106 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (([], happy_var_1)+	)}++happyReduce_83 = happySpecReduce_2  4# happyReduction_83+happyReduction_83 happy_x_2+	happy_x_1+	 =  case happyOut109 happy_x_1 of { happy_var_1 -> +	case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn10+		 (let (ps,m) = happy_var_2 in (happy_var_1 : ps, m)+	)}}++happyReduce_84 = happySpecReduce_1  5# happyReduction_84+happyReduction_84 happy_x_1+	 =  happyIn11+		 (()+	)++happyReduce_85 = happyMonadReduce 1# 5# happyReduction_85+happyReduction_85 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (( popContext)+	) (\r -> happyReturn (happyIn11 r))++happyReduce_86 = happySpecReduce_1  6# happyReduction_86+happyReduction_86 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymSemi happy_var_1) -> +	happyIn12+		 (happy_var_1+	)}++happyReduce_87 = happySpecReduce_1  6# happyReduction_87+happyReduction_87 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymVirtualSemi happy_var_1) -> +	happyIn12+		 (happy_var_1+	)}++happyReduce_88 = happyMonadReduce 0# 7# happyReduction_88+happyReduction_88 (happyRest) tk+	 = happyThen (( pushLexState imp_dir)+	) (\r -> happyReturn (happyIn13 r))++happyReduce_89 = happyMonadReduce 1# 8# happyReduction_89+happyReduction_89 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	( case happy_var_1 of {+		     LitInt _ n	-> return n;+		     _		-> fail $ "Expected integer"+		   })}+	) (\r -> happyReturn (happyIn14 r))++happyReduce_90 = happyMonadReduce 1# 9# happyReduction_90+happyReduction_90 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	( mkName happy_var_1)}+	) (\r -> happyReturn (happyIn15 r))++happyReduce_91 = happySpecReduce_2  10# happyReduction_91+happyReduction_91 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_92 = happySpecReduce_1  10# happyReduction_92+happyReduction_92 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn16+		 ([happy_var_1]+	)}++happyReduce_93 = happySpecReduce_1  11# happyReduction_93+happyReduction_93 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleCloseBrace happy_var_1) -> +	happyIn17+		 (getRange happy_var_1+	)}++happyReduce_94 = happyMonadReduce 2# 11# happyReduction_94+happyReduction_94 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymCloseBrace happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> +	(+      if posPos (fromJust (rEnd (getRange happy_var_2))) -+	 posPos (fromJust (rStart (getRange happy_var_1))) > 2+      then parseErrorAt (fromJust (rStart (getRange happy_var_2)))+	 "Expecting '}}', found separated '}'s."+      else return $ fuseRange (getRange happy_var_1) (getRange (happy_var_2)))}}+	) (\r -> happyReturn (happyIn17 r))++happyReduce_95 = happySpecReduce_2  12# happyReduction_95+happyReduction_95 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn18+		 (Arg NotHidden Irrelevant happy_var_2+	)}++happyReduce_96 = happySpecReduce_1  12# happyReduction_96+happyReduction_96 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (defaultArg happy_var_1+	)}++happyReduce_97 = happySpecReduce_2  13# happyReduction_97+happyReduction_97 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_98 = happySpecReduce_1  13# happyReduction_98+happyReduction_98 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn19+		 ([happy_var_1]+	)}++happyReduce_99 = happySpecReduce_2  14# happyReduction_99+happyReduction_99 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_100 = happySpecReduce_1  14# happyReduction_100+happyReduction_100 happy_x_1+	 =  case happyOut18 happy_x_1 of { happy_var_1 -> +	happyIn20+		 ([happy_var_1]+	)}++happyReduce_101 = happyReduce 4# 14# happyReduction_101+happyReduction_101 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut19 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_4 of { happy_var_4 -> +	happyIn20+		 (map makeInstance happy_var_2 ++ happy_var_4+	) `HappyStk` happyRest}}++happyReduce_102 = happySpecReduce_3  14# happyReduction_102+happyReduction_102 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (map makeInstance happy_var_2+	)}++happyReduce_103 = happyReduce 4# 14# happyReduction_103+happyReduction_103 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut19 happy_x_2 of { happy_var_2 -> +	case happyOut20 happy_x_4 of { happy_var_4 -> +	happyIn20+		 (map hide happy_var_2 ++ happy_var_4+	) `HappyStk` happyRest}}++happyReduce_104 = happySpecReduce_3  14# happyReduction_104+happyReduction_104 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (map hide happy_var_2+	)}++happyReduce_105 = happyReduce 5# 14# happyReduction_105+happyReduction_105 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_106 = happyReduce 4# 14# happyReduction_106+happyReduction_106 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Hidden Irrelevant) happy_var_3+	) `HappyStk` happyRest}++happyReduce_107 = happyReduce 5# 14# happyReduction_107+happyReduction_107 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Instance Irrelevant) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_108 = happyReduce 4# 14# happyReduction_108+happyReduction_108 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Instance Irrelevant) happy_var_3+	) `HappyStk` happyRest}++happyReduce_109 = happyReduce 5# 14# happyReduction_109+happyReduction_109 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Hidden NonStrict) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_110 = happyReduce 4# 14# happyReduction_110+happyReduction_110 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Hidden NonStrict) happy_var_3+	) `HappyStk` happyRest}++happyReduce_111 = happyReduce 5# 14# happyReduction_111+happyReduction_111 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	case happyOut20 happy_x_5 of { happy_var_5 -> +	happyIn20+		 (map (Arg Instance NonStrict) happy_var_3 ++ happy_var_5+	) `HappyStk` happyRest}}++happyReduce_112 = happyReduce 4# 14# happyReduction_112+happyReduction_112 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_3 of { happy_var_3 -> +	happyIn20+		 (map (Arg Instance NonStrict) happy_var_3+	) `HappyStk` happyRest}++happyReduce_113 = happyMonadReduce 1# 15# happyReduction_113+happyReduction_113 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokQId happy_var_1) -> +	( mkQName happy_var_1)}+	) (\r -> happyReturn (happyIn21 r))++happyReduce_114 = happySpecReduce_1  15# happyReduction_114+happyReduction_114 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn21+		 (QName happy_var_1+	)}++happyReduce_115 = happySpecReduce_1  16# happyReduction_115+happyReduction_115 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn22+		 (happy_var_1+	)}++happyReduce_116 = happySpecReduce_1  17# happyReduction_116+happyReduction_116 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn23+		 (happy_var_1+	)}++happyReduce_117 = happySpecReduce_1  17# happyReduction_117+happyReduction_117 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn23+		 (Name (getRange happy_var_1) [Hole]+	)}++happyReduce_118 = happySpecReduce_2  18# happyReduction_118+happyReduction_118 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	case happyOut24 happy_x_2 of { happy_var_2 -> +	happyIn24+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_119 = happySpecReduce_1  18# happyReduction_119+happyReduction_119 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn24+		 ([happy_var_1]+	)}++happyReduce_120 = happySpecReduce_1  19# happyReduction_120+happyReduction_120 happy_x_1+	 =  case happyOut26 happy_x_1 of { happy_var_1 -> +	happyIn25+		 (case happy_var_1 of+      Left ns -> ns+      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"+	)}++happyReduce_121 = happyMonadReduce 1# 20# happyReduction_121+happyReduction_121 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> +	(+    let getName (Ident (QName x)) = Just x+	getName (Underscore r _)  = Just (Name r [Hole])+	getName _		  = Nothing++        containsAbsurd (Absurd _) = True+        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (Paren _ expr)    = containsAbsurd expr+        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs+        containsAbsurd _          = False+    in+    if isJust $ find containsAbsurd happy_var_1 then return $ Right happy_var_1 else+    case partition isJust $ map getName happy_var_1 of+	(good, []) -> return $ Left $ map fromJust good+	_	   -> fail $ "expected sequence of bound identifiers")}+	) (\r -> happyReturn (happyIn26 r))++happyReduce_122 = happySpecReduce_0  21# happyReduction_122+happyReduction_122  =  happyIn27+		 ([]+	)++happyReduce_123 = happySpecReduce_2  21# happyReduction_123+happyReduction_123 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	case happyOut27 happy_x_2 of { happy_var_2 -> +	happyIn27+		 (snd happy_var_1 : happy_var_2+	)}}++happyReduce_124 = happyMonadReduce 1# 22# happyReduction_124+happyReduction_124 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokString happy_var_1) -> +	( fmap QName (mkName happy_var_1))}+	) (\r -> happyReturn (happyIn28 r))++happyReduce_125 = happySpecReduce_2  23# happyReduction_125+happyReduction_125 happy_x_2+	happy_x_1+	 =  case happyOut41 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn29+		 (Pi happy_var_1 happy_var_2+	)}}++happyReduce_126 = happySpecReduce_3  23# happyReduction_126+happyReduction_126 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut54 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn29+		 (forallPi happy_var_2 happy_var_3+	)}}++happyReduce_127 = happySpecReduce_3  23# happyReduction_127+happyReduction_127 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn29+		 (Fun (fuseRange happy_var_1 happy_var_3) (RawApp (getRange happy_var_1) happy_var_1) happy_var_3+	)}}++happyReduce_128 = happySpecReduce_1  23# happyReduction_128+happyReduction_128 happy_x_1+	 =  case happyOut30 happy_x_1 of { happy_var_1 -> +	happyIn29+		 (happy_var_1+	)}++happyReduce_129 = happyMonadReduce 1# 24# happyReduction_129+happyReduction_129 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut31 happy_x_1 of { happy_var_1 -> +	( case happy_var_1 of+		      { [e]    -> return e+		      ; e : es -> return $ WithApp (fuseRange e es) e es+		      ; []     -> fail "impossible: empty with expressions"+		      })}+	) (\r -> happyReturn (happyIn30 r))++happyReduce_130 = happySpecReduce_3  25# happyReduction_130+happyReduction_130 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut31 happy_x_3 of { happy_var_3 -> +	happyIn31+		 (RawApp (getRange happy_var_1) happy_var_1 :  happy_var_3+	)}}++happyReduce_131 = happySpecReduce_1  25# happyReduction_131+happyReduction_131 happy_x_1+	 =  case happyOut32 happy_x_1 of { happy_var_1 -> +	happyIn31+		 ([RawApp (getRange happy_var_1) happy_var_1]+	)}++happyReduce_132 = happySpecReduce_1  26# happyReduction_132+happyReduction_132 happy_x_1+	 =  case happyOut33 happy_x_1 of { happy_var_1 -> +	happyIn32+		 ([happy_var_1]+	)}++happyReduce_133 = happySpecReduce_2  26# happyReduction_133+happyReduction_133 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut32 happy_x_2 of { happy_var_2 -> +	happyIn32+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_134 = happySpecReduce_3  27# happyReduction_134+happyReduction_134 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut46 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn33+		 (Lam (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3+	)}}}++happyReduce_135 = happyReduce 4# 27# happyReduction_135+happyReduction_135 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut53 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn33+		 (ExtendedLam (fuseRange happy_var_1 (fuseRange happy_var_2 happy_var_4)) (reverse happy_var_3)+	) `HappyStk` happyRest}}}}++happyReduce_136 = happyMonadReduce 2# 27# happyReduction_136+happyReduction_136 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymLambda happy_var_1) -> +	case happyOut47 happy_x_2 of { happy_var_2 -> +	( case happy_var_2 of+                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else+                                                       return $ Lam r bs (AbsurdLam r h)+                                                         where r = fuseRange happy_var_1 bs+    				       Right es -> do -- it is of the form @\ { p1 ... () }@+                                                     p <- exprToLHS (RawApp (getRange es) es);+                                                     return $ ExtendedLam (fuseRange happy_var_1 es)+                                                                     [(p [] [], AbsurdRHS, NoWhere)])}}+	) (\r -> happyReturn (happyIn33 r))++happyReduce_137 = happyReduce 4# 27# happyReduction_137+happyReduction_137 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwLet happy_var_1) -> +	case happyOut130 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn33+		 (Let (fuseRange happy_var_1 happy_var_4) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_138 = happySpecReduce_1  27# happyReduction_138+happyReduction_138 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn33+		 (happy_var_1+	)}++happyReduce_139 = happyReduce 4# 27# happyReduction_139+happyReduction_139 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwQuoteGoal happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn33+		 (QuoteGoal (getRange (happy_var_1,happy_var_4)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}++happyReduce_140 = happySpecReduce_1  28# happyReduction_140+happyReduction_140 happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	happyIn34+		 ([happy_var_1]+	)}++happyReduce_141 = happySpecReduce_2  28# happyReduction_141+happyReduction_141 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut34 happy_x_2 of { happy_var_2 -> +	happyIn34+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_142 = happySpecReduce_3  29# happyReduction_142+happyReduction_142 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn35+		 (HiddenArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)+	)}}}++happyReduce_143 = happyReduce 5# 29# happyReduction_143+happyReduction_143 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> +	happyIn35+		 (HiddenArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_144 = happySpecReduce_2  29# happyReduction_144+happyReduction_144 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseBrace happy_var_2) -> +	happyIn35+		 (let r = fuseRange happy_var_1 happy_var_2 in HiddenArg r $ unnamed $ Absurd r+	)}}++happyReduce_145 = happySpecReduce_1  30# happyReduction_145+happyReduction_145 happy_x_1+	 =  case happyOut21 happy_x_1 of { happy_var_1 -> +	happyIn36+		 (Ident happy_var_1+	)}++happyReduce_146 = happySpecReduce_1  30# happyReduction_146+happyReduction_146 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokLiteral happy_var_1) -> +	happyIn36+		 (Lit happy_var_1+	)}++happyReduce_147 = happySpecReduce_1  30# happyReduction_147+happyReduction_147 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymQuestionMark happy_var_1) -> +	happyIn36+		 (QuestionMark (getRange happy_var_1) Nothing+	)}++happyReduce_148 = happySpecReduce_1  30# happyReduction_148+happyReduction_148 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymUnderscore happy_var_1) -> +	happyIn36+		 (Underscore (getRange happy_var_1) Nothing+	)}++happyReduce_149 = happySpecReduce_1  30# happyReduction_149+happyReduction_149 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwProp happy_var_1) -> +	happyIn36+		 (Prop (getRange happy_var_1)+	)}++happyReduce_150 = happySpecReduce_1  30# happyReduction_150+happyReduction_150 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwSet happy_var_1) -> +	happyIn36+		 (Set (getRange happy_var_1)+	)}++happyReduce_151 = happySpecReduce_1  30# happyReduction_151+happyReduction_151 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuote happy_var_1) -> +	happyIn36+		 (Quote (getRange happy_var_1)+	)}++happyReduce_152 = happySpecReduce_1  30# happyReduction_152+happyReduction_152 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwQuoteTerm happy_var_1) -> +	happyIn36+		 (QuoteTerm (getRange happy_var_1)+	)}++happyReduce_153 = happySpecReduce_1  30# happyReduction_153+happyReduction_153 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwUnquote happy_var_1) -> +	happyIn36+		 (Unquote (getRange happy_var_1)+	)}++happyReduce_154 = happySpecReduce_1  30# happyReduction_154+happyReduction_154 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSetN happy_var_1) -> +	happyIn36+		 (SetN (getRange (fst happy_var_1)) (snd happy_var_1)+	)}++happyReduce_155 = happySpecReduce_3  30# happyReduction_155+happyReduction_155 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	happyIn36+		 (InstanceArg (fuseRange happy_var_1 happy_var_3) (unnamed happy_var_2)+	)}}}++happyReduce_156 = happyReduce 5# 30# happyReduction_156+happyReduction_156 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	case happyOut17 happy_x_5 of { happy_var_5 -> +	happyIn36+		 (InstanceArg (fuseRange happy_var_1 happy_var_5) (named (show happy_var_2) happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_157 = happySpecReduce_3  30# happyReduction_157+happyReduction_157 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut29 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn36+		 (Paren (fuseRange happy_var_1 happy_var_3) happy_var_2+	)}}}++happyReduce_158 = happySpecReduce_2  30# happyReduction_158+happyReduction_158 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOutTok happy_x_2 of { (TokSymbol SymCloseParen happy_var_2) -> +	happyIn36+		 (Absurd (fuseRange happy_var_1 happy_var_2)+	)}}++happyReduce_159 = happySpecReduce_2  30# happyReduction_159+happyReduction_159 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut17 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (let r = fuseRange happy_var_1 happy_var_2 in InstanceArg r $ unnamed $ Absurd r+	)}}++happyReduce_160 = happySpecReduce_3  30# happyReduction_160+happyReduction_160 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut37 happy_x_3 of { happy_var_3 -> +	happyIn36+		 (As (fuseRange happy_var_1 happy_var_3) happy_var_1 happy_var_3+	)}}++happyReduce_161 = happySpecReduce_2  30# happyReduction_161+happyReduction_161 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	case happyOut37 happy_x_2 of { happy_var_2 -> +	happyIn36+		 (Dot (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_162 = happyReduce 4# 30# happyReduction_162+happyReduction_162 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut38 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn36+		 (Rec (getRange (happy_var_1,happy_var_4)) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_163 = happyReduce 5# 30# happyReduction_163+happyReduction_163 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut36 happy_x_2 of { happy_var_2 -> +	case happyOut38 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymCloseBrace happy_var_5) -> +	happyIn36+		 (RecUpdate (getRange (happy_var_1,happy_var_5)) happy_var_2 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_164 = happySpecReduce_1  31# happyReduction_164+happyReduction_164 happy_x_1+	 =  case happyOut35 happy_x_1 of { happy_var_1 -> +	happyIn37+		 (happy_var_1+	)}++happyReduce_165 = happySpecReduce_1  31# happyReduction_165+happyReduction_165 happy_x_1+	 =  case happyOut36 happy_x_1 of { happy_var_1 -> +	happyIn37+		 (happy_var_1+	)}++happyReduce_166 = happySpecReduce_0  32# happyReduction_166+happyReduction_166  =  happyIn38+		 ([]+	)++happyReduce_167 = happySpecReduce_1  32# happyReduction_167+happyReduction_167 happy_x_1+	 =  case happyOut39 happy_x_1 of { happy_var_1 -> +	happyIn38+		 (happy_var_1+	)}++happyReduce_168 = happySpecReduce_1  33# happyReduction_168+happyReduction_168 happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	happyIn39+		 ([happy_var_1]+	)}++happyReduce_169 = happySpecReduce_3  33# happyReduction_169+happyReduction_169 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut40 happy_x_1 of { happy_var_1 -> +	case happyOut39 happy_x_3 of { happy_var_3 -> +	happyIn39+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_170 = happySpecReduce_3  34# happyReduction_170+happyReduction_170 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn40+		 ((happy_var_1, happy_var_3)+	)}}++happyReduce_171 = happySpecReduce_2  35# happyReduction_171+happyReduction_171 happy_x_2+	happy_x_1+	 =  case happyOut42 happy_x_1 of { happy_var_1 -> +	happyIn41+		 (happy_var_1+	)}++happyReduce_172 = happySpecReduce_1  36# happyReduction_172+happyReduction_172 happy_x_1+	 =  case happyOut43 happy_x_1 of { happy_var_1 -> +	happyIn42+		 ({-TeleBind-} happy_var_1+	)}++happyReduce_173 = happySpecReduce_2  37# happyReduction_173+happyReduction_173 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut43 happy_x_2 of { happy_var_2 -> +	happyIn43+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_174 = happySpecReduce_1  37# happyReduction_174+happyReduction_174 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn43+		 ([happy_var_1]+	)}++happyReduce_175 = happyReduce 4# 38# happyReduction_175+happyReduction_175 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         Irrelevant happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_176 = happyReduce 4# 38# happyReduction_176+happyReduction_176 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            Irrelevant happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_177 = happyReduce 4# 38# happyReduction_177+happyReduction_177 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymDot happy_var_1) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Irrelevant happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_178 = happyReduce 4# 38# happyReduction_178+happyReduction_178 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenParen happy_var_2) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg NotHidden         NonStrict happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_179 = happyReduce 4# 38# happyReduction_179+happyReduction_179 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_2 of { (TokSymbol SymOpenBrace happy_var_2) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseBrace happy_var_4) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_2 happy_var_4) (Arg Hidden            NonStrict happy_var_3)+	) `HappyStk` happyRest}}}++happyReduce_180 = happyReduce 4# 38# happyReduction_180+happyReduction_180 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymDotDot happy_var_1) -> +	case happyOut45 happy_x_3 of { happy_var_3 -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance NonStrict happy_var_3)+	) `HappyStk` happyRest}}++happyReduce_181 = happySpecReduce_3  38# happyReduction_181+happyReduction_181 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenParen happy_var_1) -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseParen happy_var_3) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg NotHidden         Relevant happy_var_2)+	)}}}++happyReduce_182 = happySpecReduce_3  38# happyReduction_182+happyReduction_182 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymDoubleOpenBrace happy_var_1) -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	case happyOut17 happy_x_3 of { happy_var_3 -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Instance Relevant happy_var_2)+	)}}}++happyReduce_183 = happySpecReduce_3  38# happyReduction_183+happyReduction_183 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenBrace happy_var_1) -> +	case happyOut45 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymCloseBrace happy_var_3) -> +	happyIn44+		 (TypedBindings (fuseRange happy_var_1 happy_var_3) (Arg Hidden            Relevant happy_var_2)+	)}}}++happyReduce_184 = happySpecReduce_3  39# happyReduction_184+happyReduction_184 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn45+		 (TBind (fuseRange happy_var_1 happy_var_3) (map mkBoundName_ happy_var_1) happy_var_3+	)}}++happyReduce_185 = happyMonadReduce 2# 40# happyReduction_185+happyReduction_185 (happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut48 happy_x_1 of { happy_var_1 -> +	(+      case reverse happy_var_1 of+        Left _ : _ -> parseError "Absurd lambda cannot have a body."+	_ : _      -> return [ b | Right b <- happy_var_1 ]+        []         -> parsePanic "Empty LamBinds")}+	) (\r -> happyReturn (happyIn46 r))++happyReduce_186 = happyMonadReduce 1# 41# happyReduction_186+happyReduction_186 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut49 happy_x_1 of { happy_var_1 -> +	(+    case happy_var_1 of+      Left lb -> case reverse lb of+                   Right _ : _ -> parseError "Missing body for lambda"+                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)+                   _           -> parsePanic "Empty LamBindsAbsurd"+      Right es -> return $ Right es)}+	) (\r -> happyReturn (happyIn47 r))++happyReduce_187 = happySpecReduce_2  42# happyReduction_187+happyReduction_187 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn48+		 (map Right happy_var_1 ++ happy_var_2+	)}}++happyReduce_188 = happySpecReduce_2  42# happyReduction_188+happyReduction_188 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn48+		 (Right (DomainFull happy_var_1) : happy_var_2+	)}}++happyReduce_189 = happySpecReduce_1  42# happyReduction_189+happyReduction_189 happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	happyIn48+		 (map Right happy_var_1+	)}++happyReduce_190 = happySpecReduce_1  42# happyReduction_190+happyReduction_190 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn48+		 ([Right $ DomainFull happy_var_1]+	)}++happyReduce_191 = happySpecReduce_2  42# happyReduction_191+happyReduction_191 happy_x_2+	happy_x_1+	 =  happyIn48+		 ([Left NotHidden]+	)++happyReduce_192 = happySpecReduce_2  42# happyReduction_192+happyReduction_192 happy_x_2+	happy_x_1+	 =  happyIn48+		 ([Left Hidden]+	)++happyReduce_193 = happySpecReduce_2  42# happyReduction_193+happyReduction_193 happy_x_2+	happy_x_1+	 =  happyIn48+		 ([Left Instance]+	)++happyReduce_194 = happySpecReduce_2  43# happyReduction_194+happyReduction_194 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (Left $ map Right happy_var_1 ++ happy_var_2+	)}}++happyReduce_195 = happySpecReduce_2  43# happyReduction_195+happyReduction_195 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut48 happy_x_2 of { happy_var_2 -> +	happyIn49+		 (Left $ Right (DomainFull happy_var_1) : happy_var_2+	)}}++happyReduce_196 = happySpecReduce_1  43# happyReduction_196+happyReduction_196 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (case happy_var_1 of+                                    Left lb -> Left $ map Right lb+                                    Right es -> Right es+	)}++happyReduce_197 = happySpecReduce_1  43# happyReduction_197+happyReduction_197 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn49+		 (Left [Right $ DomainFull happy_var_1]+	)}++happyReduce_198 = happySpecReduce_2  43# happyReduction_198+happyReduction_198 happy_x_2+	happy_x_1+	 =  happyIn49+		 (Left [Left NotHidden]+	)++happyReduce_199 = happySpecReduce_2  43# happyReduction_199+happyReduction_199 happy_x_2+	happy_x_1+	 =  happyIn49+		 (Left [Left Hidden]+	)++happyReduce_200 = happySpecReduce_2  43# happyReduction_200+happyReduction_200 happy_x_2+	happy_x_1+	 =  happyIn49+		 (Left [Left Instance]+	)++happyReduce_201 = happyMonadReduce 3# 44# happyReduction_201+happyReduction_201 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut34 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	( do+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1) ;+      return (p [] [], RHS happy_var_3, NoWhere))}}+	) (\r -> happyReturn (happyIn50 r))++happyReduce_202 = happyMonadReduce 1# 45# happyReduction_202+happyReduction_202 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut32 happy_x_1 of { happy_var_1 -> +	( do+      p <- exprToLHS (RawApp (getRange happy_var_1) happy_var_1);+      return (p [] [], AbsurdRHS, NoWhere))}+	) (\r -> happyReturn (happyIn51 r))++happyReduce_203 = happySpecReduce_1  46# happyReduction_203+happyReduction_203 happy_x_1+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> +	happyIn52+		 (happy_var_1+	)}++happyReduce_204 = happySpecReduce_1  46# happyReduction_204+happyReduction_204 happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	happyIn52+		 (happy_var_1+	)}++happyReduce_205 = happySpecReduce_3  47# happyReduction_205+happyReduction_205 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut53 happy_x_1 of { happy_var_1 -> +	case happyOut52 happy_x_3 of { happy_var_3 -> +	happyIn53+		 (happy_var_3 : happy_var_1+	)}}++happyReduce_206 = happySpecReduce_3  47# happyReduction_206+happyReduction_206 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut51 happy_x_1 of { happy_var_1 -> +	case happyOut52 happy_x_3 of { happy_var_3 -> +	happyIn53+		 ([happy_var_3, happy_var_1]+	)}}++happyReduce_207 = happySpecReduce_1  47# happyReduction_207+happyReduction_207 happy_x_1+	 =  case happyOut50 happy_x_1 of { happy_var_1 -> +	happyIn53+		 ([happy_var_1]+	)}++happyReduce_208 = happySpecReduce_2  48# happyReduction_208+happyReduction_208 happy_x_2+	happy_x_1+	 =  case happyOut55 happy_x_1 of { happy_var_1 -> +	happyIn54+		 (happy_var_1+	)}++happyReduce_209 = happySpecReduce_2  49# happyReduction_209+happyReduction_209 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	case happyOut55 happy_x_2 of { happy_var_2 -> +	happyIn55+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_210 = happySpecReduce_2  49# happyReduction_210+happyReduction_210 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut55 happy_x_2 of { happy_var_2 -> +	happyIn55+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_211 = happySpecReduce_1  49# happyReduction_211+happyReduction_211 happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	happyIn55+		 (happy_var_1+	)}++happyReduce_212 = happySpecReduce_1  49# happyReduction_212+happyReduction_212 happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	happyIn55+		 ([DomainFull happy_var_1]+	)}++happyReduce_213 = happySpecReduce_2  50# happyReduction_213+happyReduction_213 happy_x_2+	happy_x_1+	 =  case happyOut57 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_214 = happySpecReduce_2  50# happyReduction_214+happyReduction_214 happy_x_2+	happy_x_1+	 =  case happyOut44 happy_x_1 of { happy_var_1 -> +	case happyOut56 happy_x_2 of { happy_var_2 -> +	happyIn56+		 (DomainFull happy_var_1 : happy_var_2+	)}}++happyReduce_215 = happySpecReduce_0  50# happyReduction_215+happyReduction_215  =  happyIn56+		 ([]+	)++happyReduce_216 = happySpecReduce_1  51# happyReduction_216+happyReduction_216 happy_x_1+	 =  case happyOut58 happy_x_1 of { happy_var_1 -> +	happyIn57+		 (case happy_var_1 of+                             Left lbs -> lbs+                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"+	)}++happyReduce_217 = happySpecReduce_1  52# happyReduction_217+happyReduction_217 happy_x_1+	 =  case happyOut23 happy_x_1 of { happy_var_1 -> +	happyIn58+		 (Left [DomainFree NotHidden Relevant $ mkBoundName_ happy_var_1]+	)}++happyReduce_218 = happySpecReduce_2  52# happyReduction_218+happyReduction_218 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (Left [DomainFree NotHidden Irrelevant $ mkBoundName_ happy_var_2]+	)}++happyReduce_219 = happySpecReduce_2  52# happyReduction_219+happyReduction_219 happy_x_2+	happy_x_1+	 =  case happyOut23 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (Left [DomainFree NotHidden NonStrict $ mkBoundName_ happy_var_2]+	)}++happyReduce_220 = happySpecReduce_3  52# happyReduction_220+happyReduction_220 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut26 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right happy_var_2+	)}++happyReduce_221 = happySpecReduce_3  52# happyReduction_221+happyReduction_221 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut25 happy_x_2 of { happy_var_2 -> +	happyIn58+		 (Left $ map (DomainFree Instance Relevant . mkBoundName_) happy_var_2+	)}++happyReduce_222 = happyReduce 4# 52# happyReduction_222+happyReduction_222 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn58+		 (Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_223 = happyReduce 4# 52# happyReduction_223+happyReduction_223 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn58+		 (Left $ map (DomainFree Instance Irrelevant . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_224 = happyReduce 4# 52# happyReduction_224+happyReduction_224 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn58+		 (Left $ map (DomainFree Hidden NonStrict . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_225 = happyReduce 4# 52# happyReduction_225+happyReduction_225 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut25 happy_x_3 of { happy_var_3 -> +	happyIn58+		 (Left $ map (DomainFree Instance NonStrict . mkBoundName_) happy_var_3+	) `HappyStk` happyRest}++happyReduce_226 = happySpecReduce_1  53# happyReduction_226+happyReduction_226 happy_x_1+	 =  case happyOut60 happy_x_1 of { happy_var_1 -> +	happyIn59+		 ((Nothing, happy_var_1)+	)}++happyReduce_227 = happyMonadReduce 3# 53# happyReduction_227+happyReduction_227 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut60 happy_x_3 of { happy_var_3 -> +	( isName "as" happy_var_1 >>+                               return (Just (AsName happy_var_2 (getRange (fst happy_var_1))), happy_var_3))}}}+	) (\r -> happyReturn (happyIn59 r))++happyReduce_228 = happyMonadReduce 1# 54# happyReduction_228+happyReduction_228 (happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut61 happy_x_1 of { happy_var_1 -> +	( verifyImportDirective happy_var_1)}+	) (\r -> happyReturn (happyIn60 r))++happyReduce_229 = happySpecReduce_2  55# happyReduction_229+happyReduction_229 happy_x_2+	happy_x_1+	 =  case happyOut62 happy_x_2 of { happy_var_2 -> +	happyIn61+		 (happy_var_2 { publicOpen = True }+	)}++happyReduce_230 = happySpecReduce_1  55# happyReduction_230+happyReduction_230 happy_x_1+	 =  case happyOut62 happy_x_1 of { happy_var_1 -> +	happyIn61+		 (happy_var_1+	)}++happyReduce_231 = happySpecReduce_2  56# happyReduction_231+happyReduction_231 happy_x_2+	happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	case happyOut64 happy_x_2 of { happy_var_2 -> +	happyIn62+		 (ImportDirective (fuseRange (snd happy_var_1) (snd happy_var_2)) (fst happy_var_1) (fst happy_var_2) False+	)}}++happyReduce_232 = happySpecReduce_1  56# happyReduction_232+happyReduction_232 happy_x_1+	 =  case happyOut64 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (ImportDirective (getRange (snd happy_var_1)) (Hiding []) (fst happy_var_1) False+	)}++happyReduce_233 = happySpecReduce_1  56# happyReduction_233+happyReduction_233 happy_x_1+	 =  case happyOut63 happy_x_1 of { happy_var_1 -> +	happyIn62+		 (ImportDirective (getRange (snd happy_var_1)) (fst happy_var_1) [] False+	)}++happyReduce_234 = happySpecReduce_0  56# happyReduction_234+happyReduction_234  =  happyIn62+		 (ImportDirective noRange (Hiding []) [] False+	)++happyReduce_235 = happyReduce 4# 57# happyReduction_235+happyReduction_235 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwUsing happy_var_1) -> +	case happyOut69 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn63+		 ((Using happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_236 = happyReduce 4# 57# happyReduction_236+happyReduction_236 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwHiding happy_var_1) -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn63+		 ((Hiding happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_237 = happyReduce 4# 58# happyReduction_237+happyReduction_237 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRenaming happy_var_1) -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymCloseParen happy_var_4) -> +	happyIn64+		 ((happy_var_3 , fuseRange happy_var_1 happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_238 = happySpecReduce_3  59# happyReduction_238+happyReduction_238 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	case happyOut65 happy_x_3 of { happy_var_3 -> +	happyIn65+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_239 = happySpecReduce_1  59# happyReduction_239+happyReduction_239 happy_x_1+	 =  case happyOut66 happy_x_1 of { happy_var_1 -> +	happyIn65+		 ([happy_var_1]+	)}++happyReduce_240 = happySpecReduce_3  60# happyReduction_240+happyReduction_240 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut67 happy_x_1 of { happy_var_1 -> +	case happyOutTok happy_x_2 of { (TokKeyword KwTo happy_var_2) -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn66+		 (Renaming happy_var_1 happy_var_3 (getRange happy_var_2)+	)}}}++happyReduce_241 = happySpecReduce_2  61# happyReduction_241+happyReduction_241 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn67+		 (ImportedName happy_var_2+	)}++happyReduce_242 = happySpecReduce_3  61# happyReduction_242+happyReduction_242 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn67+		 (ImportedModule happy_var_3+	)}++happyReduce_243 = happySpecReduce_1  62# happyReduction_243+happyReduction_243 happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	happyIn68+		 (ImportedName happy_var_1+	)}++happyReduce_244 = happySpecReduce_2  62# happyReduction_244+happyReduction_244 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn68+		 (ImportedModule happy_var_2+	)}++happyReduce_245 = happySpecReduce_0  63# happyReduction_245+happyReduction_245  =  happyIn69+		 ([]+	)++happyReduce_246 = happySpecReduce_1  63# happyReduction_246+happyReduction_246 happy_x_1+	 =  case happyOut70 happy_x_1 of { happy_var_1 -> +	happyIn69+		 (happy_var_1+	)}++happyReduce_247 = happySpecReduce_1  64# happyReduction_247+happyReduction_247 happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	happyIn70+		 ([happy_var_1]+	)}++happyReduce_248 = happySpecReduce_3  64# happyReduction_248+happyReduction_248 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut68 happy_x_1 of { happy_var_1 -> +	case happyOut70 happy_x_3 of { happy_var_3 -> +	happyIn70+		 (happy_var_1 : happy_var_3+	)}}++happyReduce_249 = happyMonadReduce 3# 65# happyReduction_249+happyReduction_249 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut30 happy_x_1 of { happy_var_1 -> +	case happyOut74 happy_x_2 of { happy_var_2 -> +	case happyOut73 happy_x_3 of { happy_var_3 -> +	( exprToLHS happy_var_1 >>= \p -> return (p happy_var_2 happy_var_3))}}}+	) (\r -> happyReturn (happyIn71 r))++happyReduce_250 = happyReduce 4# 65# happyReduction_250+happyReduction_250 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymEllipsis happy_var_1) -> +	case happyOut72 happy_x_2 of { happy_var_2 -> +	case happyOut74 happy_x_3 of { happy_var_3 -> +	case happyOut73 happy_x_4 of { happy_var_4 -> +	happyIn71+		 (Ellipsis (fuseRange happy_var_1 happy_var_3) happy_var_2 happy_var_3 happy_var_4+	) `HappyStk` happyRest}}}}++happyReduce_251 = happySpecReduce_0  66# happyReduction_251+happyReduction_251  =  happyIn72+		 ([]+	)++happyReduce_252 = happyMonadReduce 3# 66# happyReduction_252+happyReduction_252 (happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut34 happy_x_2 of { happy_var_2 -> +	case happyOut72 happy_x_3 of { happy_var_3 -> +	( exprToPattern (RawApp (getRange happy_var_2) happy_var_2) >>= \p ->+		   return (p : happy_var_3))}}+	) (\r -> happyReturn (happyIn72 r))++happyReduce_253 = happySpecReduce_0  67# happyReduction_253+happyReduction_253  =  happyIn73+		 ([]+	)++happyReduce_254 = happySpecReduce_2  67# happyReduction_254+happyReduction_254 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn73+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_255 = happySpecReduce_0  68# happyReduction_255+happyReduction_255  =  happyIn74+		 ([]+	)++happyReduce_256 = happySpecReduce_2  68# happyReduction_256+happyReduction_256 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn74+		 (case happy_var_2 of { WithApp _ e es -> e : es; e -> [e] }+	)}++happyReduce_257 = happySpecReduce_0  69# happyReduction_257+happyReduction_257  =  happyIn75+		 (NoWhere+	)++happyReduce_258 = happySpecReduce_2  69# happyReduction_258+happyReduction_258 happy_x_2+	happy_x_1+	 =  case happyOut130 happy_x_2 of { happy_var_2 -> +	happyIn75+		 (AnyWhere happy_var_2+	)}++happyReduce_259 = happyReduce 4# 69# happyReduction_259+happyReduction_259 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut130 happy_x_4 of { happy_var_4 -> +	happyIn75+		 (SomeWhere happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_260 = happySpecReduce_1  70# happyReduction_260+happyReduction_260 happy_x_1+	 =  case happyOut78 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_261 = happySpecReduce_1  70# happyReduction_261+happyReduction_261 happy_x_1+	 =  case happyOut89 happy_x_1 of { happy_var_1 -> +	happyIn76+		 (happy_var_1+	)}++happyReduce_262 = happySpecReduce_1  70# happyReduction_262+happyReduction_262 happy_x_1+	 =  case happyOut81 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_263 = happySpecReduce_1  70# happyReduction_263+happyReduction_263 happy_x_1+	 =  case happyOut83 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_264 = happySpecReduce_1  70# happyReduction_264+happyReduction_264 happy_x_1+	 =  case happyOut84 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_265 = happySpecReduce_1  70# happyReduction_265+happyReduction_265 happy_x_1+	 =  case happyOut85 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_266 = happySpecReduce_1  70# happyReduction_266+happyReduction_266 happy_x_1+	 =  case happyOut86 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_267 = happySpecReduce_1  70# happyReduction_267+happyReduction_267 happy_x_1+	 =  case happyOut88 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_268 = happySpecReduce_1  70# happyReduction_268+happyReduction_268 happy_x_1+	 =  case happyOut90 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_269 = happySpecReduce_1  70# happyReduction_269+happyReduction_269 happy_x_1+	 =  case happyOut91 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_270 = happySpecReduce_1  70# happyReduction_270+happyReduction_270 happy_x_1+	 =  case happyOut92 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_271 = happySpecReduce_1  70# happyReduction_271+happyReduction_271 happy_x_1+	 =  case happyOut93 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_272 = happySpecReduce_1  70# happyReduction_272+happyReduction_272 happy_x_1+	 =  case happyOut94 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_273 = happySpecReduce_1  70# happyReduction_273+happyReduction_273 happy_x_1+	 =  case happyOut100 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_274 = happySpecReduce_1  70# happyReduction_274+happyReduction_274 happy_x_1+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_275 = happySpecReduce_1  70# happyReduction_275+happyReduction_275 happy_x_1+	 =  case happyOut103 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_276 = happySpecReduce_1  70# happyReduction_276+happyReduction_276 happy_x_1+	 =  case happyOut105 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_277 = happySpecReduce_1  70# happyReduction_277+happyReduction_277 happy_x_1+	 =  case happyOut108 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_278 = happySpecReduce_1  70# happyReduction_278+happyReduction_278 happy_x_1+	 =  case happyOut95 happy_x_1 of { happy_var_1 -> +	happyIn76+		 ([happy_var_1]+	)}++happyReduce_279 = happySpecReduce_3  71# happyReduction_279+happyReduction_279 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn77+		 (map (flip (TypeSig Relevant) happy_var_3) happy_var_1+	)}}++happyReduce_280 = happyReduce 4# 72# happyReduction_280+happyReduction_280 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut29 happy_x_4 of { happy_var_4 -> +	happyIn78+		 (TypeSig Irrelevant happy_var_2 happy_var_4+	) `HappyStk` happyRest}}++happyReduce_281 = happySpecReduce_3  72# happyReduction_281+happyReduction_281 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn78+		 (TypeSig Relevant happy_var_1 happy_var_3+	)}}++happyReduce_282 = happySpecReduce_3  73# happyReduction_282+happyReduction_282 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn79+		 (map (\ (Arg _ rel x) -> TypeSig rel x happy_var_3) happy_var_1+	)}}++happyReduce_283 = happySpecReduce_3  74# happyReduction_283+happyReduction_283 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut20 happy_x_1 of { happy_var_1 -> +	case happyOut29 happy_x_3 of { happy_var_3 -> +	happyIn80+		 (map (fmap (flip (TypeSig Relevant) happy_var_3)) happy_var_1+	)}}++happyReduce_284 = happySpecReduce_3  75# happyReduction_284+happyReduction_284 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut71 happy_x_1 of { happy_var_1 -> +	case happyOut82 happy_x_2 of { happy_var_2 -> +	case happyOut75 happy_x_3 of { happy_var_3 -> +	happyIn81+		 (FunClause happy_var_1 happy_var_2 happy_var_3+	)}}}++happyReduce_285 = happySpecReduce_2  76# happyReduction_285+happyReduction_285 happy_x_2+	happy_x_1+	 =  case happyOut29 happy_x_2 of { happy_var_2 -> +	happyIn82+		 (RHS happy_var_2+	)}++happyReduce_286 = happySpecReduce_0  76# happyReduction_286+happyReduction_286  =  happyIn82+		 (AbsurdRHS+	)++happyReduce_287 = happyReduce 7# 77# happyReduction_287+happyReduction_287 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut128 happy_x_7 of { happy_var_7 -> +	happyIn83+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) Inductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+	) `HappyStk` happyRest}}}}}}++happyReduce_288 = happyReduce 7# 77# happyReduction_288+happyReduction_288 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut128 happy_x_7 of { happy_var_7 -> +	happyIn83+		 (Data (getRange (happy_var_1, happy_var_6, happy_var_7)) CoInductive happy_var_2 happy_var_3 (Just happy_var_5) happy_var_7+	) `HappyStk` happyRest}}}}}}++happyReduce_289 = happyReduce 5# 77# happyReduction_289+happyReduction_289 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut128 happy_x_5 of { happy_var_5 -> +	happyIn83+		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) Inductive happy_var_2 happy_var_3 Nothing happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_290 = happyReduce 5# 77# happyReduction_290+happyReduction_290 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwCoData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut128 happy_x_5 of { happy_var_5 -> +	happyIn83+		 (Data (getRange (happy_var_1, happy_var_4, happy_var_5)) CoInductive happy_var_2 happy_var_3 Nothing happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_291 = happyReduce 5# 78# happyReduction_291+happyReduction_291 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwData happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	happyIn84+		 (DataSig (fuseRange happy_var_1 happy_var_5) Inductive happy_var_2 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}}++happyReduce_292 = happyReduce 7# 79# happyReduction_292+happyReduction_292 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokKeyword KwWhere happy_var_6) -> +	case happyOut129 happy_x_7 of { happy_var_7 -> +	happyIn85+		 (Record (getRange (happy_var_1, happy_var_6, happy_var_7)) happy_var_2 (fst happy_var_7) happy_var_3 (Just happy_var_5) (snd happy_var_7)+	) `HappyStk` happyRest}}}}}}++happyReduce_293 = happyReduce 5# 79# happyReduction_293+happyReduction_293 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut129 happy_x_5 of { happy_var_5 -> +	happyIn85+		 (Record (getRange (happy_var_1, happy_var_4, happy_var_5)) happy_var_2 (fst happy_var_5) happy_var_3 Nothing (snd happy_var_5)+	) `HappyStk` happyRest}}}}}++happyReduce_294 = happyReduce 5# 80# happyReduction_294+happyReduction_294 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwRecord happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut29 happy_x_5 of { happy_var_5 -> +	happyIn86+		 (RecordSig (fuseRange happy_var_1 happy_var_5) happy_var_2 happy_var_3 happy_var_5+	) `HappyStk` happyRest}}}}++happyReduce_295 = happySpecReduce_2  81# happyReduction_295+happyReduction_295 happy_x_2+	happy_x_1+	 =  case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn87+		 (happy_var_2+	)}++happyReduce_296 = happySpecReduce_3  82# happyReduction_296+happyReduction_296 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfix happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn88+		 (Infix (NonAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_297 = happySpecReduce_3  82# happyReduction_297+happyReduction_297 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixL happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn88+		 (Infix (LeftAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_298 = happySpecReduce_3  82# happyReduction_298+happyReduction_298 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwInfixR happy_var_1) -> +	case happyOut14 happy_x_2 of { happy_var_2 -> +	case happyOut24 happy_x_3 of { happy_var_3 -> +	happyIn88+		 (Infix (RightAssoc (fuseRange happy_var_1 happy_var_3) happy_var_2) happy_var_3+	)}}}++happyReduce_299 = happySpecReduce_2  83# happyReduction_299+happyReduction_299 happy_x_2+	happy_x_1+	 =  case happyOut126 happy_x_2 of { happy_var_2 -> +	happyIn89+		 (let toField (Arg h rel (TypeSig _ x t)) = Field x (Arg h rel t) in map toField happy_var_2+	)}++happyReduce_300 = happySpecReduce_2  84# happyReduction_300+happyReduction_300 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwMutual happy_var_1) -> +	case happyOut130 happy_x_2 of { happy_var_2 -> +	happyIn90+		 (Mutual (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_301 = happySpecReduce_2  85# happyReduction_301+happyReduction_301 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwAbstract happy_var_1) -> +	case happyOut130 happy_x_2 of { happy_var_2 -> +	happyIn91+		 (Abstract (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_302 = happySpecReduce_2  86# happyReduction_302+happyReduction_302 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrivate happy_var_1) -> +	case happyOut130 happy_x_2 of { happy_var_2 -> +	happyIn92+		 (Private (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_303 = happySpecReduce_2  87# happyReduction_303+happyReduction_303 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPostulate happy_var_1) -> +	case happyOut124 happy_x_2 of { happy_var_2 -> +	happyIn93+		 (Postulate (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_304 = happySpecReduce_2  88# happyReduction_304+happyReduction_304 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwPrimitive happy_var_1) -> +	case happyOut122 happy_x_2 of { happy_var_2 -> +	happyIn94+		 (Primitive (fuseRange happy_var_1 happy_var_2) happy_var_2+	)}}++happyReduce_305 = happyMonadReduce 5# 89# happyReduction_305+happyReduction_305 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut97 happy_x_3 of { happy_var_3 -> +	case happyOut96 happy_x_5 of { happy_var_5 -> +	(+  case happy_var_2 of+    Name _ [_] -> case mkNotation happy_var_3 happy_var_5 of+      Left err -> parseError $ "malformed syntax declaration: " ++ err+      Right n -> return $ Syntax happy_var_2 n+    _ -> parseError "syntax declarations are allowed only for simple names (without holes)")}}}+	) (\r -> happyReturn (happyIn95 r))++happyReduce_306 = happySpecReduce_1  90# happyReduction_306+happyReduction_306 happy_x_1+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> +	happyIn96+		 ([happy_var_1]+	)}++happyReduce_307 = happySpecReduce_2  90# happyReduction_307+happyReduction_307 happy_x_2+	happy_x_1+	 =  case happyOut96 happy_x_1 of { happy_var_1 -> +	case happyOut99 happy_x_2 of { happy_var_2 -> +	happyIn96+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_308 = happySpecReduce_1  91# happyReduction_308+happyReduction_308 happy_x_1+	 =  case happyOut98 happy_x_1 of { happy_var_1 -> +	happyIn97+		 ([happy_var_1]+	)}++happyReduce_309 = happySpecReduce_2  91# happyReduction_309+happyReduction_309 happy_x_2+	happy_x_1+	 =  case happyOut97 happy_x_1 of { happy_var_1 -> +	case happyOut98 happy_x_2 of { happy_var_2 -> +	happyIn97+		 (happy_var_1 ++ [happy_var_2]+	)}}++happyReduce_310 = happySpecReduce_1  92# happyReduction_310+happyReduction_310 happy_x_1+	 =  case happyOut99 happy_x_1 of { happy_var_1 -> +	happyIn98+		 (ExprHole happy_var_1+	)}++happyReduce_311 = happyReduce 6# 92# happyReduction_311+happyReduction_311 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut99 happy_x_3 of { happy_var_3 -> +	case happyOut99 happy_x_5 of { happy_var_5 -> +	happyIn98+		 (LambdaHole happy_var_3 happy_var_5+	) `HappyStk` happyRest}}++happyReduce_312 = happySpecReduce_1  93# happyReduction_312+happyReduction_312 happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokId happy_var_1) -> +	happyIn99+		 (snd happy_var_1+	)}++happyReduce_313 = happyReduce 4# 94# happyReduction_313+happyReduction_313 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut101 happy_x_3 of { happy_var_3 -> +	case happyOut60 happy_x_4 of { happy_var_4 -> +	happyIn100+		 (let+    { m   = happy_var_2+    ; es  = happy_var_3+    ; dir = happy_var_4+    ; r   = getRange (happy_var_1, m, es, dir)+    } in+    case es of+    { []  -> Open r m dir+	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)+			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))+			     DoOpen dir+                       ]+    }+	) `HappyStk` happyRest}}}}++happyReduce_314 = happyReduce 6# 94# happyReduction_314+happyReduction_314 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOutTok happy_x_3 of { (TokSymbol SymDoubleOpenBrace happy_var_3) -> +	case happyOutTok happy_x_4 of { (TokSymbol SymEllipsis happy_var_4) -> +	case happyOut60 happy_x_6 of { happy_var_6 -> +	happyIn100+		 (let r = getRange (happy_var_1, happy_var_2, happy_var_3, happy_var_4) in+    Private r [ ModuleMacro r (noName $ beginningOf $ getRange happy_var_2)+    	      	(RecordModuleIFS r happy_var_2) DoOpen happy_var_6+        ]+	) `HappyStk` happyRest}}}}}++happyReduce_315 = happySpecReduce_0  95# happyReduction_315+happyReduction_315  =  happyIn101+		 ([]+	)++happyReduce_316 = happySpecReduce_2  95# happyReduction_316+happyReduction_316 happy_x_2+	happy_x_1+	 =  case happyOut37 happy_x_1 of { happy_var_1 -> +	case happyOut101 happy_x_2 of { happy_var_2 -> +	happyIn101+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_317 = happyReduce 4# 96# happyReduction_317+happyReduction_317 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut17 happy_x_4 of { happy_var_4 -> +	happyIn102+		 ((\ts ->+		    if null ts then return $ RecordModuleIFS (getRange (happy_var_1, happy_var_4)) happy_var_1+		    else parseError "No bindings allowed for record module with non-canonical implicits" )+	) `HappyStk` happyRest}}++happyReduce_318 = happySpecReduce_2  96# happyReduction_318+happyReduction_318 happy_x_2+	happy_x_1+	 =  case happyOut22 happy_x_1 of { happy_var_1 -> +	case happyOut101 happy_x_2 of { happy_var_2 -> +	happyIn102+		 ((\ts -> return $ SectionApp (getRange (happy_var_1, happy_var_2)) ts (RawApp (fuseRange happy_var_1 happy_var_2) (Ident happy_var_1 : happy_var_2)) )+	)}}++happyReduce_319 = happyMonadReduce 6# 97# happyReduction_319+happyReduction_319 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOut102 happy_x_5 of { happy_var_5 -> +	case happyOut60 happy_x_6 of { happy_var_6 -> +	( do {ma <- happy_var_5 (map addType happy_var_3); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_6)) happy_var_2 ma DontOpen happy_var_6 })}}}}}+	) (\r -> happyReturn (happyIn103 r))++happyReduce_320 = happyMonadReduce 7# 97# happyReduction_320+happyReduction_320 (happy_x_7 `HappyStk`+	happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	case happyOut56 happy_x_4 of { happy_var_4 -> +	case happyOut102 happy_x_6 of { happy_var_6 -> +	case happyOut60 happy_x_7 of { happy_var_7 -> +	( do {ma <- happy_var_6 (map addType happy_var_4); return $ ModuleMacro (getRange (happy_var_1, ma, happy_var_7)) happy_var_3 ma DoOpen happy_var_7 })}}}}}+	) (\r -> happyReturn (happyIn103 r))++happyReduce_321 = happySpecReduce_3  98# happyReduction_321+happyReduction_321 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokKeyword KwImport happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut59 happy_x_3 of { happy_var_3 -> +	happyIn104+		 (Import (getRange (happy_var_1,happy_var_2,snd happy_var_3)) happy_var_2 (fst happy_var_3) DontOpen (snd happy_var_3)+	)}}}++happyReduce_322 = happyReduce 4# 98# happyReduction_322+happyReduction_322 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwOpen happy_var_1) -> +	case happyOut22 happy_x_3 of { happy_var_3 -> +	case happyOut59 happy_x_4 of { happy_var_4 -> +	happyIn104+		 (Import (getRange (happy_var_1,happy_var_3,snd happy_var_4)) happy_var_3 (fst happy_var_4) DoOpen (snd happy_var_4)+	) `HappyStk` happyRest}}}++happyReduce_323 = happyReduce 5# 99# happyReduction_323+happyReduction_323 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut131 happy_x_5 of { happy_var_5 -> +	happyIn105+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) (QName happy_var_2) (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_324 = happySpecReduce_1  100# happyReduction_324+happyReduction_324 happy_x_1+	 =  case happyOut107 happy_x_1 of { happy_var_1 -> +	happyIn106+		 ([happy_var_1]+	)}++happyReduce_325 = happySpecReduce_2  100# happyReduction_325+happyReduction_325 happy_x_2+	happy_x_1+	 =  case happyOut104 happy_x_1 of { happy_var_1 -> +	case happyOut106 happy_x_2 of { happy_var_2 -> +	happyIn106+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_326 = happySpecReduce_2  100# happyReduction_326+happyReduction_326 happy_x_2+	happy_x_1+	 =  case happyOut100 happy_x_1 of { happy_var_1 -> +	case happyOut106 happy_x_2 of { happy_var_2 -> +	happyIn106+		 (happy_var_1 : happy_var_2+	)}}++happyReduce_327 = happyReduce 5# 101# happyReduction_327+happyReduction_327 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokKeyword KwModule happy_var_1) -> +	case happyOut22 happy_x_2 of { happy_var_2 -> +	case happyOut56 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokKeyword KwWhere happy_var_4) -> +	case happyOut131 happy_x_5 of { happy_var_5 -> +	happyIn107+		 (Module (getRange (happy_var_1,happy_var_4,happy_var_5)) happy_var_2 (map addType happy_var_3) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_328 = happySpecReduce_1  102# happyReduction_328+happyReduction_328 happy_x_1+	 =  case happyOut110 happy_x_1 of { happy_var_1 -> +	happyIn108+		 (Pragma happy_var_1+	)}++happyReduce_329 = happySpecReduce_1  103# happyReduction_329+happyReduction_329 happy_x_1+	 =  case happyOut111 happy_x_1 of { happy_var_1 -> +	happyIn109+		 (happy_var_1+	)}++happyReduce_330 = happySpecReduce_1  104# happyReduction_330+happyReduction_330 happy_x_1+	 =  case happyOut112 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_331 = happySpecReduce_1  104# happyReduction_331+happyReduction_331 happy_x_1+	 =  case happyOut113 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_332 = happySpecReduce_1  104# happyReduction_332+happyReduction_332 happy_x_1+	 =  case happyOut115 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_333 = happySpecReduce_1  104# happyReduction_333+happyReduction_333 happy_x_1+	 =  case happyOut114 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_334 = happySpecReduce_1  104# happyReduction_334+happyReduction_334 happy_x_1+	 =  case happyOut116 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_335 = happySpecReduce_1  104# happyReduction_335+happyReduction_335 happy_x_1+	 =  case happyOut117 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_336 = happySpecReduce_1  104# happyReduction_336+happyReduction_336 happy_x_1+	 =  case happyOut118 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_337 = happySpecReduce_1  104# happyReduction_337+happyReduction_337 happy_x_1+	 =  case happyOut120 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_338 = happySpecReduce_1  104# happyReduction_338+happyReduction_338 happy_x_1+	 =  case happyOut121 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_339 = happySpecReduce_1  104# happyReduction_339+happyReduction_339 happy_x_1+	 =  case happyOut119 happy_x_1 of { happy_var_1 -> +	happyIn110+		 (happy_var_1+	)}++happyReduce_340 = happyReduce 4# 105# happyReduction_340+happyReduction_340 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut27 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn111+		 (OptionsPragma (fuseRange happy_var_1 happy_var_4) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_341 = happyReduce 5# 106# happyReduction_341+happyReduction_341 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> +	case happyOut28 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn112+		 (BuiltinPragma (fuseRange happy_var_1 happy_var_5) (snd happy_var_3) (Ident happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_342 = happyReduce 5# 107# happyReduction_342+happyReduction_342 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn113+		 (CompiledPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_343 = happyReduce 5# 108# happyReduction_343+happyReduction_343 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn114+		 (CompiledTypePragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_344 = happyReduce 6# 109# happyReduction_344+happyReduction_344 (happy_x_6 `HappyStk`+	happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokString happy_var_4) -> +	case happyOut27 happy_x_5 of { happy_var_5 -> +	case happyOutTok happy_x_6 of { (TokSymbol SymClosePragma happy_var_6) -> +	happyIn115+		 (CompiledDataPragma (fuseRange happy_var_1 happy_var_6) happy_var_3 (snd happy_var_4) happy_var_5+	) `HappyStk` happyRest}}}}}++happyReduce_345 = happyReduce 5# 110# happyReduction_345+happyReduction_345 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn116+		 (CompiledEpicPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_346 = happyReduce 5# 111# happyReduction_346+happyReduction_346 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOut27 happy_x_4 of { happy_var_4 -> +	case happyOutTok happy_x_5 of { (TokSymbol SymClosePragma happy_var_5) -> +	happyIn117+		 (CompiledJSPragma (fuseRange happy_var_1 happy_var_5) happy_var_3 (unwords happy_var_4)+	) `HappyStk` happyRest}}}}++happyReduce_347 = happyReduce 4# 112# happyReduction_347+happyReduction_347 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn118+		 (StaticPragma (fuseRange happy_var_1 happy_var_4) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_348 = happyReduce 4# 113# happyReduction_348+happyReduction_348 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOut28 happy_x_3 of { happy_var_3 -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	happyIn119+		 (EtaPragma (fuseRange happy_var_1 happy_var_4) happy_var_3+	) `HappyStk` happyRest}}}++happyReduce_349 = happyMonadReduce 4# 114# happyReduction_349+happyReduction_349 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest) tk+	 = happyThen (case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_3 of { (TokString happy_var_3) -> +	case happyOutTok happy_x_4 of { (TokSymbol SymClosePragma happy_var_4) -> +	( let s = snd happy_var_3 in+       if validHaskellModuleName s+       then return $ ImportPragma (fuseRange happy_var_1 happy_var_4) s+       else parseError $ "Malformed module name: " ++ s ++ ".")}}}+	) (\r -> happyReturn (happyIn120 r))++happyReduce_350 = happySpecReduce_3  115# happyReduction_350+happyReduction_350 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { (TokSymbol SymOpenPragma happy_var_1) -> +	case happyOutTok happy_x_3 of { (TokSymbol SymClosePragma happy_var_3) -> +	happyIn121+		 (ImpossiblePragma (fuseRange happy_var_1 happy_var_3)+	)}}++happyReduce_351 = happySpecReduce_3  116# happyReduction_351+happyReduction_351 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_2 of { happy_var_2 -> +	happyIn122+		 (reverse happy_var_2+	)}++happyReduce_352 = happySpecReduce_3  117# happyReduction_352+happyReduction_352 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut123 happy_x_1 of { happy_var_1 -> +	case happyOut77 happy_x_3 of { happy_var_3 -> +	happyIn123+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_353 = happySpecReduce_1  117# happyReduction_353+happyReduction_353 happy_x_1+	 =  case happyOut77 happy_x_1 of { happy_var_1 -> +	happyIn123+		 (reverse happy_var_1+	)}++happyReduce_354 = happySpecReduce_3  118# happyReduction_354+happyReduction_354 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_2 of { happy_var_2 -> +	happyIn124+		 (reverse happy_var_2+	)}++happyReduce_355 = happySpecReduce_3  119# happyReduction_355+happyReduction_355 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut125 happy_x_1 of { happy_var_1 -> +	case happyOut79 happy_x_3 of { happy_var_3 -> +	happyIn125+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_356 = happySpecReduce_1  119# happyReduction_356+happyReduction_356 happy_x_1+	 =  case happyOut79 happy_x_1 of { happy_var_1 -> +	happyIn125+		 (reverse happy_var_1+	)}++happyReduce_357 = happySpecReduce_3  120# happyReduction_357+happyReduction_357 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_2 of { happy_var_2 -> +	happyIn126+		 (reverse happy_var_2+	)}++happyReduce_358 = happySpecReduce_3  121# happyReduction_358+happyReduction_358 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut127 happy_x_1 of { happy_var_1 -> +	case happyOut80 happy_x_3 of { happy_var_3 -> +	happyIn127+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_359 = happySpecReduce_1  121# happyReduction_359+happyReduction_359 happy_x_1+	 =  case happyOut80 happy_x_1 of { happy_var_1 -> +	happyIn127+		 (reverse happy_var_1+	)}++happyReduce_360 = happySpecReduce_2  122# happyReduction_360+happyReduction_360 happy_x_2+	happy_x_1+	 =  happyIn128+		 ([]+	)++happyReduce_361 = happySpecReduce_1  122# happyReduction_361+happyReduction_361 happy_x_1+	 =  case happyOut122 happy_x_1 of { happy_var_1 -> +	happyIn128+		 (happy_var_1+	)}++happyReduce_362 = happySpecReduce_2  123# happyReduction_362+happyReduction_362 happy_x_2+	happy_x_1+	 =  happyIn129+		 ((Nothing, [])+	)++happyReduce_363 = happySpecReduce_3  123# happyReduction_363+happyReduction_363 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut87 happy_x_2 of { happy_var_2 -> +	happyIn129+		 ((Just happy_var_2, [])+	)}++happyReduce_364 = happyReduce 5# 123# happyReduction_364+happyReduction_364 (happy_x_5 `HappyStk`+	happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut87 happy_x_2 of { happy_var_2 -> +	case happyOut132 happy_x_4 of { happy_var_4 -> +	happyIn129+		 ((Just happy_var_2, reverse happy_var_4)+	) `HappyStk` happyRest}}++happyReduce_365 = happySpecReduce_3  123# happyReduction_365+happyReduction_365 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut132 happy_x_2 of { happy_var_2 -> +	happyIn129+		 ((Nothing, reverse happy_var_2)+	)}++happyReduce_366 = happySpecReduce_3  124# happyReduction_366+happyReduction_366 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut132 happy_x_2 of { happy_var_2 -> +	happyIn130+		 (reverse happy_var_2+	)}++happyReduce_367 = happySpecReduce_2  125# happyReduction_367+happyReduction_367 happy_x_2+	happy_x_1+	 =  happyIn131+		 ([]+	)++happyReduce_368 = happySpecReduce_1  125# happyReduction_368+happyReduction_368 happy_x_1+	 =  case happyOut130 happy_x_1 of { happy_var_1 -> +	happyIn131+		 (happy_var_1+	)}++happyReduce_369 = happySpecReduce_3  126# happyReduction_369+happyReduction_369 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut132 happy_x_1 of { happy_var_1 -> +	case happyOut76 happy_x_3 of { happy_var_3 -> +	happyIn132+		 (reverse happy_var_3 ++ happy_var_1+	)}}++happyReduce_370 = happySpecReduce_1  126# happyReduction_370+happyReduction_370 happy_x_1+	 =  case happyOut76 happy_x_1 of { happy_var_1 -> +	happyIn132+		 (reverse happy_var_1+	)}++happyNewToken action sts stk+	= lexer(\tk -> +	let cont i = happyDoAction i tk action sts stk in+	case tk of {+	TokEOF -> happyDoAction 76# tk action sts stk;+	TokKeyword KwLet happy_dollar_dollar -> cont 1#;+	TokKeyword KwIn happy_dollar_dollar -> cont 2#;+	TokKeyword KwWhere happy_dollar_dollar -> cont 3#;+	TokKeyword KwWith happy_dollar_dollar -> cont 4#;+	TokKeyword KwRewrite happy_dollar_dollar -> cont 5#;+	TokKeyword KwPostulate happy_dollar_dollar -> cont 6#;+	TokKeyword KwPrimitive happy_dollar_dollar -> cont 7#;+	TokKeyword KwOpen happy_dollar_dollar -> cont 8#;+	TokKeyword KwImport happy_dollar_dollar -> cont 9#;+	TokKeyword KwUsing happy_dollar_dollar -> cont 10#;+	TokKeyword KwHiding happy_dollar_dollar -> cont 11#;+	TokKeyword KwRenaming happy_dollar_dollar -> cont 12#;+	TokKeyword KwTo happy_dollar_dollar -> cont 13#;+	TokKeyword KwPublic happy_dollar_dollar -> cont 14#;+	TokKeyword KwModule happy_dollar_dollar -> cont 15#;+	TokKeyword KwData happy_dollar_dollar -> cont 16#;+	TokKeyword KwCoData happy_dollar_dollar -> cont 17#;+	TokKeyword KwRecord happy_dollar_dollar -> cont 18#;+	TokKeyword KwConstructor happy_dollar_dollar -> cont 19#;+	TokKeyword KwField happy_dollar_dollar -> cont 20#;+	TokKeyword KwInfix happy_dollar_dollar -> cont 21#;+	TokKeyword KwInfixL happy_dollar_dollar -> cont 22#;+	TokKeyword KwInfixR happy_dollar_dollar -> cont 23#;+	TokKeyword KwMutual happy_dollar_dollar -> cont 24#;+	TokKeyword KwAbstract happy_dollar_dollar -> cont 25#;+	TokKeyword KwPrivate happy_dollar_dollar -> cont 26#;+	TokKeyword KwProp happy_dollar_dollar -> cont 27#;+	TokKeyword KwSet happy_dollar_dollar -> cont 28#;+	TokKeyword KwForall happy_dollar_dollar -> cont 29#;+	TokKeyword KwSyntax happy_dollar_dollar -> cont 30#;+	TokKeyword KwOPTIONS happy_dollar_dollar -> cont 31#;+	TokKeyword KwBUILTIN happy_dollar_dollar -> cont 32#;+	TokKeyword KwIMPORT happy_dollar_dollar -> cont 33#;+	TokKeyword KwIMPOSSIBLE happy_dollar_dollar -> cont 34#;+	TokKeyword KwETA happy_dollar_dollar -> cont 35#;+	TokKeyword KwCOMPILED happy_dollar_dollar -> cont 36#;+	TokKeyword KwCOMPILED_DATA happy_dollar_dollar -> cont 37#;+	TokKeyword KwCOMPILED_TYPE happy_dollar_dollar -> cont 38#;+	TokKeyword KwCOMPILED_EPIC happy_dollar_dollar -> cont 39#;+	TokKeyword KwCOMPILED_JS happy_dollar_dollar -> cont 40#;+	TokKeyword KwSTATIC happy_dollar_dollar -> cont 41#;+	TokKeyword KwQuoteGoal happy_dollar_dollar -> cont 42#;+	TokKeyword KwQuote happy_dollar_dollar -> cont 43#;+	TokKeyword KwQuoteTerm happy_dollar_dollar -> cont 44#;+	TokKeyword KwUnquote happy_dollar_dollar -> cont 45#;+	TokSetN happy_dollar_dollar -> cont 46#;+	TokTeX happy_dollar_dollar -> cont 47#;+	TokComment happy_dollar_dollar -> cont 48#;+	TokSymbol SymEllipsis happy_dollar_dollar -> cont 49#;+	TokSymbol SymDotDot happy_dollar_dollar -> cont 50#;+	TokSymbol SymDot happy_dollar_dollar -> cont 51#;+	TokSymbol SymSemi happy_dollar_dollar -> cont 52#;+	TokSymbol SymColon happy_dollar_dollar -> cont 53#;+	TokSymbol SymEqual happy_dollar_dollar -> cont 54#;+	TokSymbol SymUnderscore happy_dollar_dollar -> cont 55#;+	TokSymbol SymQuestionMark happy_dollar_dollar -> cont 56#;+	TokSymbol SymArrow happy_dollar_dollar -> cont 57#;+	TokSymbol SymLambda happy_dollar_dollar -> cont 58#;+	TokSymbol SymAs happy_dollar_dollar -> cont 59#;+	TokSymbol SymBar happy_dollar_dollar -> cont 60#;+	TokSymbol SymOpenParen happy_dollar_dollar -> cont 61#;+	TokSymbol SymCloseParen happy_dollar_dollar -> cont 62#;+	TokSymbol SymDoubleOpenBrace happy_dollar_dollar -> cont 63#;+	TokSymbol SymDoubleCloseBrace happy_dollar_dollar -> cont 64#;+	TokSymbol SymOpenBrace happy_dollar_dollar -> cont 65#;+	TokSymbol SymCloseBrace happy_dollar_dollar -> cont 66#;+	TokSymbol SymOpenVirtualBrace happy_dollar_dollar -> cont 67#;+	TokSymbol SymCloseVirtualBrace happy_dollar_dollar -> cont 68#;+	TokSymbol SymVirtualSemi happy_dollar_dollar -> cont 69#;+	TokSymbol SymOpenPragma happy_dollar_dollar -> cont 70#;+	TokSymbol SymClosePragma happy_dollar_dollar -> cont 71#;+	TokId happy_dollar_dollar -> cont 72#;+	TokQId happy_dollar_dollar -> cont 73#;+	TokString happy_dollar_dollar -> cont 74#;+	TokLiteral happy_dollar_dollar -> cont 75#;+	_ -> happyError' tk+	})++happyError_ tk = happyError' tk++happyThen :: () => Parser a -> (a -> Parser b) -> Parser b+happyThen = (>>=)+happyReturn :: () => a -> Parser a+happyReturn = (return)+happyThen1 = happyThen+happyReturn1 :: () => a -> Parser a+happyReturn1 = happyReturn+happyError' :: () => (Token) -> Parser a+happyError' tk = (\token -> happyError) tk++tokensParser = happySomeParser where+  happySomeParser = happyThen (happyParse 0#) (\x -> happyReturn (happyOut6 x))++exprParser = happySomeParser where+  happySomeParser = happyThen (happyParse 1#) (\x -> happyReturn (happyOut29 x))++moduleParser = happySomeParser where+  happySomeParser = happyThen (happyParse 2#) (\x -> happyReturn (happyOut9 x))++happySeq = happyDontSeq+++{--------------------------------------------------------------------------+    Parsers+ --------------------------------------------------------------------------}++-- | Parse the token stream. Used by the TeX compiler.+tokensParser :: Parser [Token]++-- | Parse an expression. Could be used in interactions.+exprParser :: Parser Expr++-- | Parse a module.+moduleParser :: Parser Module+++{--------------------------------------------------------------------------+    Happy stuff+ --------------------------------------------------------------------------}++-- | Required by Happy.+happyError :: Parser a+happyError = parseError "Parse error"+++{--------------------------------------------------------------------------+    Utility functions+ --------------------------------------------------------------------------}++-- | Create a name from a string.++mkName :: (Interval, String) -> Parser Name+mkName (i, s) = do+    let xs = parts s+    mapM_ isValidId xs+    unless (alternating xs) $ fail $ "a name cannot contain two consecutive underscores"+    return $ Name (getRange i) xs+    where+        parts :: String -> [NamePart]+        parts ""        = []+        parts ('_' : s) = Hole : parts s+        parts s         = Id x : parts s'+          where (x, s') = break (== '_') s++	isValidId Hole   = return ()+	isValidId (Id x) = case parse defaultParseFlags [0] (lexer return) x of+	    ParseOk _ (TokId _) -> return ()+	    _			-> fail $ "in the name " ++ s ++ ", the part " ++ x ++ " is not valid"++	-- we know that there are no two Ids in a row+	alternating (Hole : Hole : _) = False+	alternating (_ : xs)	      = alternating xs+	alternating []		      = True++-- | Create a qualified name from a list of strings+mkQName :: [(Interval, String)] -> Parser QName+mkQName ss = do+    xs <- mapM mkName ss+    return $ foldr Qual (QName $ last xs) (init xs)++-- | Match a particular name.+isName :: String -> (Interval, String) -> Parser ()+isName s (_,s')+    | s == s'	= return ()+    | otherwise	= fail $ "expected " ++ s ++ ", found " ++ s'++-- | Build a forall pi (forall x y z -> ...)+forallPi :: [LamBinding] -> Expr -> Expr+forallPi bs e = Pi (map addType bs) e++-- | Converts lambda bindings to typed bindings.+addType :: LamBinding -> TypedBindings+addType (DomainFull b)	 = b+addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing+  where r = getRange x++-- | Check that an import directive doesn't contain repeated names+verifyImportDirective :: ImportDirective -> Parser ImportDirective+verifyImportDirective i =+    case filter ((>1) . length)+	 $ group+	 $ sort xs+    of+	[]  -> return i+	yss -> let Just pos = rStart $ getRange $ head $ concat yss in+               parseErrorAt pos $+		"repeated name" ++ s ++ " in import directive: " +++		concat (intersperse ", " $ map (show . head) yss)+	    where+		s = case yss of+			[_] -> ""+			_   -> "s"+    where+	xs = names (usingOrHiding i) ++ map renFrom (renaming i)+	names (Using xs)    = xs+	names (Hiding xs)   = xs++-- | Breaks up a string into substrings. Returns every maximal+-- subsequence of zero or more characters distinct from @'.'@.+--+-- > splitOnDots ""         == [""]+-- > splitOnDots "foo.bar"  == ["foo", "bar"]+-- > splitOnDots ".foo.bar" == ["", "foo", "bar"]+-- > splitOnDots "foo.bar." == ["foo", "bar", ""]+-- > splitOnDots "foo..bar" == ["foo", "", "bar"]+splitOnDots :: String -> [String]+splitOnDots ""        = [""]+splitOnDots ('.' : s) = [] : splitOnDots s+splitOnDots (c   : s) = case splitOnDots s of+  p : ps -> (c : p) : ps++prop_splitOnDots = and+  [ splitOnDots ""         == [""]+  , splitOnDots "foo.bar"  == ["foo", "bar"]+  , splitOnDots ".foo.bar" == ["", "foo", "bar"]+  , splitOnDots "foo.bar." == ["foo", "bar", ""]+  , splitOnDots "foo..bar" == ["foo", "", "bar"]+  ]++-- | Returns 'True' iff the name is a valid Haskell (hierarchical)+-- module name.+validHaskellModuleName :: String -> Bool+validHaskellModuleName = all ok . splitOnDots+  where+  -- Checks if a dot-less module name is well-formed.+  ok :: String -> Bool+  ok []      = False+  ok (c : s) =+    isUpper c &&+    all (\c -> isLower c || c == '_' ||+               isUpper c ||+               generalCategory c == DecimalNumber ||+               c == '\'')+        s++{--------------------------------------------------------------------------+    Patterns+ --------------------------------------------------------------------------}++-- | Turn an expression into a left hand side.+exprToLHS :: Expr -> Parser ([Expr] -> [Expr] -> LHS)+exprToLHS e = case e of+  WithApp r e es -> LHS <$> exprToPattern e <*> mapM exprToPattern es+  _		 -> LHS <$> exprToPattern e <*> return []++-- | Turn an expression into a pattern. Fails if the expression is not a+--   valid pattern.+exprToPattern :: Expr -> Parser Pattern+exprToPattern e =+    case e of+	Ident x			-> return $ IdentP x+	App _ e1 e2		-> AppP <$> exprToPattern e1+					<*> T.mapM (T.mapM exprToPattern) e2+	Paren r e		-> ParenP r+					<$> exprToPattern e+	Underscore r _		-> return $ WildP r+	Absurd r		-> return $ AbsurdP r+	As r x e		-> AsP r x <$> exprToPattern e+	Dot r (HiddenArg _ e)	-> return $ HiddenP r $ fmap (DotP r) e+	Dot r e			-> return $ DotP r e+	Lit l			-> return $ LitP l+	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e+	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e+	RawApp r es		-> RawAppP r <$> mapM exprToPattern es+	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es+	_			->+          let Just pos = rStart $ getRange e in+          parseErrorAt pos $ "Not a valid pattern: " ++ show e++opAppExprToPattern :: OpApp Expr -> Parser Pattern+opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"+opAppExprToPattern (Ordinary e) = exprToPattern e++parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."++{--------------------------------------------------------------------------+    Tests+ --------------------------------------------------------------------------}++-- | Test suite.+tests :: IO Bool+tests = runTests "Agda.Syntax.Parser.Parser"+  [ quickCheck' prop_splitOnDots+  ]+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 30 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 51 "templates/GenericTemplate.hs" #-}++{-# LINE 61 "templates/GenericTemplate.hs" #-}++{-# LINE 70 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+	happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+	= {- nothing -}+++	  case action of+		0#		  -> {- nothing -}+				     happyFail i tk st+		-1# 	  -> {- nothing -}+				     happyAccept i tk st+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++				     (happyReduceArr Happy_Data_Array.! rule) i tk st+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where (off)    = indexShortOffAddr happyActOffsets st+         (off_i)  = (off Happy_GHC_Exts.+# i)+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)+			else False+         (action)+          | check     = indexShortOffAddr happyTable off_i+          | otherwise = indexShortOffAddr happyDefActions st++{-# LINE 130 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+	Happy_GHC_Exts.narrow16Int# i+  where+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+        off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 163 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+	 sts1@((HappyCons (st1@(action)) (_))) ->+        	let r = fn stk in  -- it doesn't hurt to always seq here...+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++             (off) = indexShortOffAddr happyGotoOffsets st1+             (off_i) = (off Happy_GHC_Exts.+# nt)+             (new_state) = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where (off) = indexShortOffAddr happyGotoOffsets st+         (off_i) = (off Happy_GHC_Exts.+# nt)+         (new_state) = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail  0# tk old_st _ stk =+--	trace "failing" $ +    	happyError_ tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +						(saved_tok `HappyStk` _ `HappyStk` stk) =+--	trace ("discarding state, depth " ++ show (length stk))  $+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail  i tk (action) sts stk =+--      trace "entering error recovery" $+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a notHappyAtAll = error "Internal Happy error\n"  -----------------------------------------------------------------------------
+ doc/release-notes/2-3-0.txt view
@@ -0,0 +1,1005 @@+------------------------------------------------------------------------+-- Release notes for Agda 2 version 2.3.0+------------------------------------------------------------------------++Important changes since 2.2.10:++Language+========++* New more liberal syntax for mutually recursive definitions.++  It is no longer necessary to use the 'mutual' keyword to define+  mutually recursive functions or datatypes. Instead, it is enough to+  declare things before they are used. Instead of++    mutual+      f : A+      f = a[f, g]++      g : B[f]+      g = b[f, g]++  you can now write++    f : A+    g : B[f]+    f = a[f, g]+    g = b[f, g].++  With the new style you have more freedom in choosing the order in+  which things are type checked (previously type signatures were+  always checked before definitions). Furthermore you can mix+  arbitrary declarations, such as modules and postulates, with+  mutually recursive definitions.++  For data types and records the following new syntax is used to+  separate the declaration from the definition:++    -- Declaration.+    data Vec (A : Set) : Nat → Set  -- Note the absence of 'where'.++    -- Definition.+    data Vec A where+      []   : Vec A zero+      _::_ : {n : Nat} → A → Vec A n → Vec A (suc n)++    -- Declaration.+    record Sigma (A : Set) (B : A → Set) : Set++    -- Definition.+    record Sigma A B where+      constructor _,_+      field fst : A+            snd : B fst++  When making separated declarations/definitions private or abstract+  you should attach the 'private' keyword to the declaration and the+  'abstract' keyword to the definition. For instance, a private,+  abstract function can be defined as++    private+      f : A+    abstract+      f = e++  Finally it may be worth noting that the old style of mutually+  recursive definitions is still supported (it basically desugars into+  the new style).++* Pattern matching lambdas.++  Anonymous pattern matching functions can be defined using the syntax++    \ { p11 .. p1n -> e1 ; ... ; pm1 .. pmn -> em }++  (where, as usual, \ and -> can be replaced by λ and →). Internally+  this is translated into a function definition of the following form:++    .extlam p11 .. p1n = e1+    ...+    .extlam pm1 .. pmn = em++  This means that anonymous pattern matching functions are generative.+  For instance, refl will not be accepted as an inhabitant of the type++    (λ { true → true ; false → false }) ≡+    (λ { true → true ; false → false }),++  because this is equivalent to extlam1 ≡ extlam2 for some distinct+  fresh names extlam1 and extlam2.++  Currently the 'where' and 'with' constructions are not allowed in+  (the top-level clauses of) anonymous pattern matching functions.++  Examples:++    and : Bool → Bool → Bool+    and = λ { true x → x ; false _ → false }++    xor : Bool → Bool → Bool+    xor = λ { true  true  → false+            ; false false → false+            ; _     _     → true+            }++    fst : {A : Set} {B : A → Set} → Σ A B → A+    fst = λ { (a , b) → a }++    snd : {A : Set} {B : A → Set} (p : Σ A B) → B (fst p)+    snd = λ { (a , b) → b }++* Record update syntax.++  Assume that we have a record type and a corresponding value:++    record MyRecord : Set where+      field+        a b c : ℕ++    old : MyRecord+    old = record { a = 1; b = 2; c = 3 }++  Then we can update (some of) the record value's fields in the+  following way:++    new : MyRecord+    new = record old { a = 0; c = 5 }++  Here new normalises to record { a = 0; b = 2; c = 5 }. Any+  expression yielding a value of type MyRecord can be used instead of+  old.++  Record updating is not allowed to change types: the resulting value+  must have the same type as the original one, including the record+  parameters. Thus, the type of a record update can be inferred if the type+  of the original record can be inferred.++  The record update syntax is expanded before type checking. When the+  expression++    record old { upd-fields }++  is checked against a record type R, it is expanded to++    let r = old in record { new-fields },++  where old is required to have type R and new-fields is defined as+  follows: for each field x in R,++    - if x = e is contained in upd-fields then x = e is included in+      new-fields, and otherwise+    - if x is an explicit field then x = R.x r is included in+      new-fields, and+    - if x is an implicit or instance field, then it is omitted from+      new-fields.++  (Instance arguments are explained below.) The reason for treating+  implicit and instance fields specially is to allow code like the+  following:++    record R : Set where+      field+        {length} : ℕ+        vec      : Vec ℕ length+        -- More fields…++    xs : R+    xs = record { vec = 0 ∷ 1 ∷ 2 ∷ [] }++    ys = record xs { vec = 0 ∷ [] }++  Without the special treatment the last expression would need to+  include a new binding for length (for instance "length = _").++* Record patterns which do not contain data type patterns, but which+  do contain dot patterns, are no longer rejected.++* When the --without-K flag is used literals are now treated as+  constructors.++* Under-applied functions can now reduce.++  Consider the following definition:++    id : {A : Set} → A → A+    id x = x++  Previously the expression id would not reduce. This has been changed+  so that it now reduces to λ x → x. Usually this makes little+  difference, but it can be important in conjunction with 'with'. See+  issue 365 for an example.++* Unused AgdaLight legacy syntax (x y : A; z v : B) for telescopes has+  been removed.++Universe polymorphism+---------------------++* Universe polymorphism is now enabled by default.+  Use --no-universe-polymorphism to disable it.++* Universe levels are no longer defined as a data type.++  The basic level combinators can be introduced in the following way:++  postulate+    Level : Set+    zero  : Level+    suc   : Level → Level+    max   : Level → Level → Level++  {-# BUILTIN LEVEL     Level #-}+  {-# BUILTIN LEVELZERO zero  #-}+  {-# BUILTIN LEVELSUC  suc   #-}+  {-# BUILTIN LEVELMAX  max   #-}++* The BUILTIN equality is now required to be universe-polymorphic.++* trustMe is now universe-polymorphic.++Meta-variables and unification+------------------------------++* Unsolved meta-variables are now frozen after every mutual block.+  This means that they cannot be instantiated by subsequent code. For+  instance,++    one : Nat+    one = _++    bla : one ≡ suc zero+    bla = refl++  leads to an error now, whereas previously it lead to the+  instantiation of _ with "suc zero". If you want to make use of the+  old behaviour, put the two definitions in a mutual block.++  All meta-variables are unfrozen during interactive editing, so that+  the user can fill holes interactively. Note that type-checking of+  interactively given terms is not perfect: Agda sometimes refuses to+  load a file, even though no complaints were raised during the+  interactive construction of the file. This is because certain checks+  (for instance, positivity) are only invoked when a file is loaded.++* Record types can now be inferred.++  If there is a unique known record type with fields matching the+  fields in a record expression, then the type of the expression will+  be inferred to be the record type applied to unknown parameters.++  If there is no known record type with the given fields the type+  checker will give an error instead of producing lots of unsolved+  meta-variables.++  Note that "known record type" refers to any record type in any+  imported module, not just types which are in scope.++* The occurrence checker distinguishes rigid and strongly rigid+  occurrences [Reed, LFMTP 2009; Abel & Pientka, TLCA 2011].++  The completeness checker now accepts the following code:++    h : (n : Nat) → n ≡ suc n → Nat+    h n ()++  Internally this generates a constraint _n = suc _n where the+  meta-variable _n occurs strongly rigidly, i.e. on a constructor path+  from the root, in its own defining term tree. This is never+  solvable.++  Weakly rigid recursive occurrences may have a solution [Jason Reed's+  PhD thesis, page 106]:++    test : (k : Nat) →+           let X : (Nat → Nat) → Nat+               X = _+           in+           (f : Nat → Nat) → X f ≡ suc (f (X (λ x → k)))+    test k f = refl++  The constraint _X k f = suc (f (_X k (λ x → k))) has the solution+  _X k f = suc (f (suc k)), despite the recursive occurrence of _X.+  Here _X is not strongly rigid, because it occurs under the bound+  variable f. Previously Agda rejected this code; now it instead+  complains about an unsolved meta-variable.++* Equation constraints involving the same meta-variable in the head+  now trigger pruning [Pientka, PhD, Sec. 3.1.2; Abel & Pientka, TLCA+  2011]. Example:++    same : let X : A → A → A → A × A+               X = _+           in {x y z : A} → X x y y ≡ (x , y)+                          × X x x y ≡ X x y y+    same = refl , refl++  The second equation implies that X cannot depend on its second+  argument. After pruning the first equation is linear and can be+  solved.++* Instance arguments.++  A new type of hidden function arguments has been added: instance+  arguments. This new feature is based on influences from Scala's+  implicits and Agda's existing implicit arguments.++  Plain implicit arguments are marked by single braces: {…}. Instance+  arguments are instead marked by double braces: {{…}}. Example:++    postulate+      A : Set+      B : A → Set+      a : A+      f : {{a : A}} → B a++  Instead of the double braces you can use the symbols ⦃ and ⦄, but+  these symbols must in many cases be surrounded by whitespace. (If+  you are using Emacs and the Agda input method, then you can conjure+  up the symbols by typing "\{{" and "\}}", respectively.)++  Instance arguments behave as ordinary implicit arguments, except for+  one important aspect: resolution of arguments which are not provided+  explicitly. For instance, consider the following code:++    test = f++  Here Agda will notice that f's instance argument was not provided+  explicitly, and try to infer it. All definitions in scope at f's+  call site, as well as all variables in the context, are considered.+  If exactly one of these names has the required type (A), then the+  instance argument will be instantiated to this name.++  This feature can be used as an alternative to Haskell type classes.+  If we define++    record Eq (A : Set) : Set where+      field equal : A → A → Bool,++  then we can define the following projection:++    equal : {A : Set} {{eq : Eq A}} → A → A → Bool+    equal {{eq}} = Eq.equal eq++  Now consider the following expression:++    equal false false ∨ equal 3 4++  If the following Eq "instances" for Bool and ℕ are in scope, and no+  others, then the expression is accepted:++    eq-Bool : Eq Bool+    eq-Bool = record { equal = … }++    eq-ℕ : Eq ℕ+    eq-ℕ = record { equal = … }++  A shorthand notation is provided to avoid the need to define+  projection functions manually:++    module Eq-with-implicits = Eq {{...}}++  This notation creates a variant of Eq's record module, where the+  main Eq argument is an instance argument instead of an explicit one.+  It is equivalent to the following definition:++    module Eq-with-implicits {A : Set} {{eq : Eq A}} = Eq eq++  Note that the short-hand notation allows you to avoid naming the+  "-with-implicits" module:++    open Eq {{...}}+++  Instance argument resolution is not recursive. As an example,+  consider the following "parametrised instance":++    eq-List : {A : Set} → Eq A → Eq (List A)+    eq-List {A} eq = record { equal = eq-List-A }+      where+      eq-List-A : List A → List A → Bool+      eq-List-A []       []       = true+      eq-List-A (a ∷ as) (b ∷ bs) = equal a b ∧ eq-List-A as bs+      eq-List-A _        _        = false++  Assume that the only Eq instances in scope are eq-List and eq-ℕ.+  Then the following code does not type-check:++    test = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])++  However, we can make the code work by constructing a suitable+  instance manually:++    test′ = equal (1 ∷ 2 ∷ []) (3 ∷ 4 ∷ [])+      where eq-List-ℕ = eq-List eq-ℕ++  By restricting the "instance search" to be non-recursive we avoid+  introducing a new, compile-time-only evaluation model to Agda.++  For more information about instance arguments, see Devriese &+  Piessens [ICFP 2011]. Some examples are also available in the+  examples/instance-arguments subdirectory of the Agda distribution.++Irrelevance+-----------++* Dependent irrelevant function types.++  Some examples illustrating the syntax of dependent irrelevant+  function types:++    .(x y : A) → B    .{x y z : A} → B+    ∀ x .y → B        ∀ x .{y} {z} .v → B++  The declaration++    f : .(x : A) → B[x]+    f x = t[x]++  requires that x is irrelevant both in t[x] and in B[x]. This is+  possible if, for instance, B[x] = B′ x, with B′ : .A → Set.++  Dependent irrelevance allows us to define the eliminator for the+  Squash type:++    record Squash (A : Set) : Set where+      constructor squash+      field+        .proof : A++    elim-Squash : {A : Set} (P : Squash A → Set)+                  (ih : .(a : A) → P (squash a)) →+                  (a⁻ : Squash A) → P a⁻+    elim-Squash P ih (squash a) = ih a++  Note that this would not type-check with+  (ih : (a : A) -> P (squash a)).++* Records with only irrelevant fields.++  The following now works:++    record IsEquivalence {A : Set} (_≈_ : A → A → Set) : Set where+      field+        .refl  : Reflexive _≈_+        .sym   : Symmetric _≈_+        .trans : Transitive _≈_++    record Setoid : Set₁ where+      infix 4 _≈_+      field+        Carrier        : Set+        _≈_            : Carrier → Carrier → Set+        .isEquivalence : IsEquivalence _≈_++      open IsEquivalence isEquivalence public++  Previously Agda complained about the application+  IsEquivalence isEquivalence, because isEquivalence is irrelevant and+  the IsEquivalence module expected a relevant argument. Now, when+  record modules are generated for records consisting solely of+  irrelevant arguments, the record parameter is made irrelevant:++    module IsEquivalence {A : Set} {_≈_ : A → A → Set}+                         .(r : IsEquivalence {A = A} _≈_) where+      …++* Irrelevant things are no longer erased internally. This means that+  they are printed as ordinary terms, not as "_" as before.++* The new flag --experimental-irrelevance enables irrelevant universe+  levels and matching on irrelevant data when only one constructor is+  available. These features are very experimental and likely to change+  or disappear.++Reflection+----------++* The reflection API has been extended to mirror features like+  irrelevance, instance arguments and universe polymorphism, and to+  give (limited) access to definitions. For completeness all the+  builtins and primitives are listed below:++    -- Names.++    postulate Name : Set++    {-# BUILTIN QNAME Name #-}++    primitive+      -- Equality of names.+      primQNameEquality : Name → Name → Bool++    -- Is the argument visible (explicit), hidden (implicit), or an+    -- instance argument?++    data Visibility : Set where+      visible hidden instance : Visibility++    {-# BUILTIN HIDING   Visibility #-}+    {-# BUILTIN VISIBLE  visible    #-}+    {-# BUILTIN HIDDEN   hidden     #-}+    {-# BUILTIN INSTANCE instance   #-}++    -- Arguments can be relevant or irrelevant.++    data Relevance : Set where+      relevant irrelevant : Relevance++    {-# BUILTIN RELEVANCE  Relevance  #-}+    {-# BUILTIN RELEVANT   relevant   #-}+    {-# BUILTIN IRRELEVANT irrelevant #-}++    -- Arguments.++    data Arg A : Set where+      arg : (v : Visibility) (r : Relevance) (x : A) → Arg A++    {-# BUILTIN ARG    Arg #-}+    {-# BUILTIN ARGARG arg #-}++    -- Terms.++    mutual+      data Term : Set where+        -- Variable applied to arguments.+        var     : (x : ℕ) (args : List (Arg Term)) → Term+        -- Constructor applied to arguments.+        con     : (c : Name) (args : List (Arg Term)) → Term+        -- Identifier applied to arguments.+        def     : (f : Name) (args : List (Arg Term)) → Term+        -- Different kinds of λ-abstraction.+        lam     : (v : Visibility) (t : Term) → Term+        -- Pi-type.+        pi      : (t₁ : Arg Type) (t₂ : Type) → Term+        -- A sort.+        sort    : Sort → Term+        -- Anything else.+        unknown : Term++      data Type : Set where+        el : (s : Sort) (t : Term) → Type++      data Sort : Set where+        -- A Set of a given (possibly neutral) level.+        set     : (t : Term) → Sort+        -- A Set of a given concrete level.+        lit     : (n : ℕ) → Sort+        -- Anything else.+        unknown : Sort++    {-# BUILTIN AGDASORT            Sort    #-}+    {-# BUILTIN AGDATYPE            Type    #-}+    {-# BUILTIN AGDATERM            Term    #-}+    {-# BUILTIN AGDATERMVAR         var     #-}+    {-# BUILTIN AGDATERMCON         con     #-}+    {-# BUILTIN AGDATERMDEF         def     #-}+    {-# BUILTIN AGDATERMLAM         lam     #-}+    {-# BUILTIN AGDATERMPI          pi      #-}+    {-# BUILTIN AGDATERMSORT        sort    #-}+    {-# BUILTIN AGDATERMUNSUPPORTED unknown #-}+    {-# BUILTIN AGDATYPEEL          el      #-}+    {-# BUILTIN AGDASORTSET         set     #-}+    {-# BUILTIN AGDASORTLIT         lit     #-}+    {-# BUILTIN AGDASORTUNSUPPORTED unknown #-}++    postulate+      -- Function definition.+      Function  : Set+      -- Data type definition.+      Data-type : Set+      -- Record type definition.+      Record    : Set++    {-# BUILTIN AGDAFUNDEF    Function  #-}+    {-# BUILTIN AGDADATADEF   Data-type #-}+    {-# BUILTIN AGDARECORDDEF Record    #-}++    -- Definitions.++    data Definition : Set where+      function     : Function  → Definition+      data-type    : Data-type → Definition+      record′      : Record    → Definition+      constructor′ : Definition+      axiom        : Definition+      primitive′   : Definition++    {-# BUILTIN AGDADEFINITION                Definition   #-}+    {-# BUILTIN AGDADEFINITIONFUNDEF          function     #-}+    {-# BUILTIN AGDADEFINITIONDATADEF         data-type    #-}+    {-# BUILTIN AGDADEFINITIONRECORDDEF       record′      #-}+    {-# BUILTIN AGDADEFINITIONDATACONSTRUCTOR constructor′ #-}+    {-# BUILTIN AGDADEFINITIONPOSTULATE       axiom        #-}+    {-# BUILTIN AGDADEFINITIONPRIMITIVE       primitive′   #-}++    primitive+      -- The type of the thing with the given name.+      primQNameType        : Name → Type+      -- The definition of the thing with the given name.+      primQNameDefinition  : Name → Definition+      -- The constructors of the given data type.+      primDataConstructors : Data-type → List Name++  As an example the expression++    primQNameType (quote zero)++  is definitionally equal to++    el (lit 0) (def (quote ℕ) [])++  (if zero is a constructor of the data type ℕ).++* New keyword: unquote.++  The construction "unquote t" converts a representation of an Agda term+  to actual Agda code in the following way:++  1. The argument t must have type Term (see the reflection API above).++  2. The argument is normalised.++  3. The entire construction is replaced by the normal form, which is+     treated as syntax written by the user and type-checked in the+     usual way.++  Examples:++    test : unquote (def (quote ℕ) []) ≡ ℕ+    test = refl++    id : (A : Set) → A → A+    id = unquote (lam visible (lam visible (var 0 [])))++    id-ok : id ≡ (λ A (x : A) → x)+    id-ok = refl++* New keyword: quoteTerm.++  The construction "quoteTerm t" is similar to "quote n", but whereas+  quote is restricted to names n, quoteTerm accepts terms t. The+  construction is handled in the following way:++  1. The type of t is inferred. The term t must be type-correct.++  2. The term t is normalised.++  3. The construction is replaced by the Term representation (see the+     reflection API above) of the normal form. Any unsolved metavariables+     in the term are represented by the "unknown" term constructor.++  Examples:++    test₁ : quoteTerm (λ {A : Set} (x : A) → x) ≡+            lam hidden (lam visible (var 0 []))+    test₁ = refl++    -- Local variables are represented as de Bruijn indices.+    test₂ : (λ {A : Set} (x : A) → quoteTerm x) ≡ (λ x → var 0 [])+    test₂ = refl++    -- Terms are normalised before being quoted.+    test₃ : quoteTerm (0 + 0) ≡ con (quote zero) []+    test₃ = refl++Compiler backends+=================++MAlonzo+-------++* The MAlonzo backend's FFI now handles universe polymorphism in a+  better way.++  The translation of Agda types and kinds into Haskell now supports+  universe-polymorphic postulates. The core changes are that the+  translation of function types has been changed from++    T[[ Pi (x : A) B ]] =+      if A has a Haskell kind then+        forall x. () -> T[[ B ]]+      else if x in fv B then+        undef+      else+        T[[ A ]] -> T[[ B ]]++  into++    T[[ Pi (x : A) B ]] =+      if x in fv B then+        forall x. T[[ A ]] -> T[[ B ]]  -- Note: T[[A]] not Unit.+      else+        T[[ A ]] -> T[[ B ]],++  and that the translation of constants (postulates, constructors and+  literals) has been changed from++    T[[ k As ]] =+      if COMPILED_TYPE k T then+        T T[[ As ]]+      else+        undef++  into++    T[[ k As ]] =+      if COMPILED_TYPE k T then+        T T[[ As ]]+      else if COMPILED k E then+        ()+      else+        undef.++  For instance, assuming a Haskell definition++    type AgdaIO a b = IO b,++  we can set up universe-polymorphic IO in the following way:++    postulate+      IO     : ∀ {ℓ} → Set ℓ → Set ℓ+      return : ∀ {a} {A : Set a} → A → IO A+      _>>=_  : ∀ {a b} {A : Set a} {B : Set b} →+               IO A → (A → IO B) → IO B++    {-# COMPILED_TYPE IO AgdaIO              #-}+    {-# COMPILED return  (\_ _ -> return)    #-}+    {-# COMPILED _>>=_   (\_ _ _ _ -> (>>=)) #-}++  This is accepted because (assuming that the universe level type is+  translated to the Haskell unit type "()")++    (\_ _ -> return)+      : forall a. () -> forall b. () -> b -> AgdaIO a b+      = T [[ ∀ {a} {A : Set a} → A → IO A ]]++  and++    (\_ _ _ _ -> (>>=))+      : forall a. () -> forall b. () ->+          forall c. () -> forall d. () ->+            AgdaIO a c -> (c -> AgdaIO b d) -> AgdaIO b d+      = T [[ ∀ {a b} {A : Set a} {B : Set b} →+               IO A → (A → IO B) → IO B ]].++Epic+----++* New Epic backend pragma: STATIC.++  In the Epic backend, functions marked with the STATIC pragma will be+  normalised before compilation. Example usage:++    {-# STATIC power #-}++    power : ℕ → ℕ → ℕ+    power 0       x = 1+    power 1       x = x+    power (suc n) x = power n x * x++  Occurrences of "power 4 x" will be replaced by "((x * x) * x) * x".++* Some new optimisations have been implemented in the Epic backend:++  - Removal of unused arguments.++  A worker/wrapper transformation is performed so that unused+  arguments can be removed by Epic's inliner. For instance, the map+  function is transformed in the following way:++    map_wrap : (A B : Set) → (A → B) → List A → List B+    map_wrap A B f xs = map_work f xs++    map_work f []       = []+    map_work f (x ∷ xs) = f x ∷ map_work f xs++  If map_wrap is inlined (which it will be in any saturated call),+  then A and B disappear in the generated code.++  Unused arguments are found using abstract interpretation. The bodies+  of all functions in a module are inspected to decide which variables+  are used. The behaviour of postulates is approximated based on their+  types. Consider return, for instance:++    postulate return : {A : Set} → A → IO A++  The first argument of return can be removed, because it is of type+  Set and thus cannot affect the outcome of a program at runtime.++  - Injection detection.++  At runtime many functions may turn out to be inefficient variants of+  the identity function. This is especially true after forcing.+  Injection detection replaces some of these functions with more+  efficient versions. Example:++    inject : {n : ℕ} → Fin n → Fin (1 + n)+    inject {suc n} zero    = zero+    inject {suc n} (suc i) = suc (inject {n} i)++  Forcing removes the Fin constructors' ℕ arguments, so this function+  is an inefficient identity function that can be replaced by the+  following one:++    inject {_} x = x++  To actually find this function, we make the induction hypothesis+  that inject is an identity function in its second argument and look+  at the branches of the function to decide if this holds.++  Injection detection also works over data type barriers. Example:++    forget : {A : Set} {n : ℕ} → Vec A n → List A+    forget []       = []+    forget (x ∷ xs) = x ∷ forget xs++  Given that the constructor tags (in the compiled Epic code) for+  Vec.[] and List.[] are the same, and that the tags for Vec._∷_ and+  List._∷_ are also the same, this is also an identity function. We+  can hence replace the definition with the following one:++    forget {_} xs = xs++  To get this to apply as often as possible, constructor tags are+  chosen /after/ injection detection has been run, in a way to make as+  many functions as possible injections.++  Constructor tags are chosen once per source file, so it may be+  advantageous to define conversion functions like forget in the same+  module as one of the data types. For instance, if Vec.agda imports+  List.agda, then the forget function should be put in Vec.agda to+  ensure that vectors and lists get the same tags (unless some other+  injection function, which puts different constraints on the tags, is+  prioritised).++  - Smashing.++  This optimisation finds types whose values are inferable at runtime:++    * A data type with only one constructor where all fields are+      inferable is itself inferable.+    * Set ℓ is inferable (as it has no runtime representation).++  A function returning an inferable data type can be smashed, which+  means that it is replaced by a function which simply returns the+  inferred value.++  An important example of an inferable type is the usual propositional+  equality type (_≡_). Any function returning a propositional equality+  can simply return the reflexivity constructor directly without+  computing anything.++  This optimisation makes more arguments unused. It also makes the+  Epic code size smaller, which in turn speeds up compilation.++JavaScript+----------++* ECMAScript compiler backend.++  A new compiler backend is being implemented, targetting ECMAScript+  (also known as JavaScript), with the goal of allowing Agda programs+  to be run in browsers or other ECMAScript environments.++  The backend is still at an experimental stage: the core language is+  implemented, but many features are still missing.++  The ECMAScript compiler can be invoked from the command line using+  the flag --js:++    agda --js --compile-dir=<DIR> <FILE>.agda++  Each source <FILE>.agda is compiled into an ECMAScript target+  <DIR>/jAgda.<TOP-LEVEL MODULE NAME>.js. The compiler can also be+  invoked using the Emacs mode (the variable agda2-backend controls+  which backend is used).++  Note that ECMAScript is a strict rather than lazy language. Since+  Agda programs are total, this should not impact program semantics,+  but it may impact their space or time usage.++  ECMAScript does not support algebraic datatypes or pattern-matching.+  These features are translated to a use of the visitor pattern. For+  instance, the standard library's List data type and null function+  are translated into the following code:++    exports["List"] = {};+    exports["List"]["[]"] = function (x0) {+        return x0["[]"]();+      };+    exports["List"]["_∷_"] = function (x0) {+        return function (x1) {+          return function (x2) {+            return x2["_∷_"](x0, x1);+          };+        };+      };++    exports["null"] = function (x0) {+        return function (x1) {+          return function (x2) {+            return x2({+              "[]": function () {+                return jAgda_Data_Bool["Bool"]["true"];+              },+              "_∷_": function (x3, x4) {+                return jAgda_Data_Bool["Bool"]["false"];+              }+            });+          };+        };+      };++  Agda records are translated to ECMAScript objects, preserving field+  names.++  Top-level Agda modules are translated to ECMAScript modules,+  following the common.js module specification. A top-level Agda+  module "Foo.Bar" is translated to an ECMAScript module+  "jAgda.Foo.Bar".++  The ECMAScript compiler does not compile to Haskell, so the pragmas+  related to the Haskell FFI (IMPORT, COMPILED_DATA and COMPILED) are+  not used by the ECMAScript backend. Instead, there is a COMPILED_JS+  pragma which may be applied to any declaration. For postulates,+  primitives, functions and values, it gives the ECMAScript code to be+  emitted by the compiler. For data types, it gives a function which+  is applied to a value of that type, and a visitor object. For+  instance, a binding of natural numbers to ECMAScript integers+  (ignoring overflow errors) is:++    data ℕ : Set where+      zero : ℕ+      suc  : ℕ → ℕ++    {-# COMPILED_JS ℕ function (x,v) {+        if (x < 1) { return v.zero(); } else { return v.suc(x-1); }+      } #-}+    {-# COMPILED_JS zero 0 #-}+    {-# COMPILED_JS suc function (x) { return x+1; } #-}++    _+_ : ℕ → ℕ → ℕ+    zero  + n = n+    suc m + n = suc (m + n)++    {-# COMPILED_JS _+_ function (x) { return function (y) {+                          return x+y; };+      } #-}++  To allow FFI code to be optimised, the ECMAScript in a COMPILED_JS+  declaration is parsed, using a simple parser that recognises a pure+  functional subset of ECMAScript, consisting of functions, function+  applications, return, if-statements, if-expressions,+  side-effect-free binary operators (no precedence, left associative),+  side-effect-free prefix operators, objects (where all member names+  are quoted), field accesses, and string and integer literals.+  Modules may be imported using the require("<module-id>") syntax: any+  impure code, or code outside the supported fragment, can be placed+  in a module and imported.++Tools+=====++* New flag --safe, which can be used to type-check untrusted code.++  This flag disables postulates, primTrustMe, and "unsafe" OPTION+  pragmas, some of which are known to make Agda inconsistent.++  Rejected pragmas:++    --allow-unsolved-metas+    --experimental-irrelevance+    --guardedness-preserving-type-construtors+    --injective-type-constructors+    --no-coverage-check+    --no-positivity-check+    --no-termination-check+    --sized-types+    --type-in-type++  Note that, at the moment, it is not possible to define the universe+  level or coinduction primitives when --safe is used (because they+  must be introduced as postulates). This can be worked around by+  type-checking trusted files in a first pass, without using --safe,+  and then using --safe in a second pass. Modules which have already+  been type-checked are not re-type-checked just because --safe is+  used.++* Dependency graphs.++  The new flag --dependency-graph=FILE can be used to generate a DOT+  file containing a module dependency graph. The generated file (FILE)+  can be rendered using a tool like dot.++* The --no-unreachable-check flag has been removed.++* Projection functions are highlighted as functions instead of as+  fields. Field names (in record definitions and record values) are+  still highlighted as fields.++* Support for jumping to positions mentioned in the information+  buffer has been added.++* The "make install" command no longer installs Agda globally (by+  default).
src/data/EpicInclude/AgdaPrelude.e view
@@ -2,11 +2,12 @@  -- IO +{- %inline putStr (x:String) -> Unit =-    foreign Unit "putStr" (x:String)+    foreign Unit "wputStr" (x:String)  putStrLn (x:String) -> Unit =-    putStr(append(x,"\n"))+    putStr(primStringAppend(x,"\n"))  readStr () -> String =     foreign String "readStr" ()@@ -19,85 +20,172 @@  printInt (x:Int) -> Unit =     foreign Unit "printInt" (x:Int)+-}  ioreturn (a : Any, u : Unit) -> Any = a-iobind (x : Any, f : Any, u : Unit) -> Any = f (x (u), u)+iobind (x : Any, f : Any, u : Unit) -> Any = %effect (let v : Any = %effect (x(u)) in f (v, u))  -- String operations -append (x:String, y:String) -> String =-    foreign String "append" (x:String, y:String)+-- data String = Con 0 | Con 1 (Char*) String -length (x:String) -> String =-    foreign Int "strlen" (x:String)+freadStr (stream : Ptr) -> Data =+    let isEof : Bool = foreign Int "feof" (stream : Ptr)+     in if isEof then Con 0 ()+                 else let str : String = %effect(foreign String "freadStrChunk" (stream : Ptr))+                       in Con 1 ( str , freadStr (stream)) -index (x:String, i:Int) -> Char =-    foreign Int "strIndex" (x:String, i:Int)+readStr (u : Unit) -> Data =+    let isEof : Bool = foreign Int "eofstdin" ()+     in if isEof then Con 0 ()+                 else let str : String = %effect(foreign String "readStrChunk" ())+                       in Con 1 ( str , readStr (u)) +primStringAppend (xs : Data, ys : Data) -> Data = case xs of+  { Con 0 ()                        -> ys+  | Con 1 (x : String, rest : Data) -> Con 1 (x, primStringAppend (rest, ys))+  }++length (xs : Data) -> Int = case xs of+  { Con 0 () -> 0+  | Con 1 (x : String, rest : Data) -> strlen(x) + length(rest)+  }++charAt (xs : Data, i : Int) -> Int = case xs of+  { Con 0 () -> error "index: out of bounds!"+  | Con 1 (x : String, rest : Data) -> +    let len : Int = strlen(x)+     in (if i < len then foreign Int "strIndex" (x : String, i : Int)+                    else charAt (rest, i - len))+  }++mkString (xs : Data) -> String = case xs of+  { Con 0 () -> ""+  | Con 1 (s : String , rest : Data) -> +    let rs : String = mkString (rest) in+    {-let rsLen : Int = strlen (rs) in+    if rsLen == 0 then s else-} foreign String "append" (s : String, rs : String)+  }++frString( xs : String) -> Data = Con 1 (xs , Con 0 ())++primStringEquality (xs : Data, ys : Data) -> Bool =+    foreign Int "eqString" (mkString(xs) : String, mkString(ys) : String)++charToString (c : Int) -> Data = +    Con 1 (charToStr(c), Con 0 ())+charToStr (c : Int) -> String = +    foreign String "charToStr" (c : Int)++strlen (s : String) -> Int = foreign Int "strlen" (s : String)++-- TODO: toList/fromList could be made slightly more efficient.++primStringToListS (xs : String) -> Data = %effect(+    let result : Data = primNil ()     in+    let i      : Int  = strlen (xs) - 1 in+    %while (i >= 0,+       let ! result = primCons (foreign Int "strIndex" (xs : String, i : Int), result) in+       let ! i      = i - 1 in+       unit) ;+    result)++primStringToList (xs : Data) -> Data = case xs of+  { Con 0 () -> primNil ()+  | Con 1 (str : String, rest : Data) -> primListAppend(primStringToListS(str), primStringToList(rest))+  }++map (f : Any, l : Any) -> Any = case l of+  { Con 0 () -> Con 0 ()+  | Con 1 (x : Any, xs : Any) -> Con 1 (f (x), map (f, xs))+  }++primStringFromList (l : Data) -> String = map (charToStr, l)+++strCons(i : Int , s : String) -> String =+   foreign String "strCons" (i : Int, s : String)++-- Lists++primNil () -> Data = Con 0 ()++primCons(x : Any , xs : Data) -> Data = Con 1 (x, xs)++listElim (op : Any, z : Any, xs : Data) -> Any = case xs of+  { Con 0 () -> z+  | Con 1 (y : Any, ys : Data) -> op (y, listElim(op, z, ys))+  }++primListAppend (xs : Data, ys : Data) -> Data = listElim(primCons, ys, xs) -- Big number arithmetic  subBig (x:BigInt, y:BigInt) -> BigInt =-   foreign BigInt "subBigInt" (x:BigInt, y:BigInt)+   foreign BigInt "subBig" (x:BigInt, y:BigInt)  gtBig (x:BigInt, y:BigInt) -> Bool =-   foreign Int "gtBigInt" (x:BigInt, y:BigInt)+   foreign Int "gtBig" (x:BigInt, y:BigInt)  leBig (x:BigInt, y:BigInt) -> Bool =-   foreign Int "leBigInt" (x:BigInt, y:BigInt)+   foreign Int "leBig" (x:BigInt, y:BigInt)  geBig (x:BigInt, y:BigInt) -> Bool =-   foreign Int "geBigInt" (x:BigInt, y:BigInt)+   foreign Int "geBig" (x:BigInt, y:BigInt)  printBig (x:BigInt) -> Unit =-   foreign Unit "printBigInt" (x:BigInt)+   foreign Unit "printBig" (x:BigInt) -bigIntToStr (x:BigInt) -> String =-    foreign String "bigIntToStr" (x:BigInt)+bigToStr (x:BigInt) -> Data =+    frString(foreign String "bigToStr" (x:BigInt)) -strToBigInt (x:String) -> Int =-    foreign String "strToBigInt" (x:String)+strToBig (x : Data) -> Any = foreign BigInt "strToBig" (mkString(x) : String) +-- strToBig (x:String) -> Any =+--    foreign Any "strToBig" (x:String)++bigToInt (x : BigInt) -> Int =+    foreign Int "bigToInt" (x : BigInt)+ -- Unit  %inline primUnit() -> Unit = unit  -- Nats -primNatPlus (x:BigInt, y:BigInt) -> BigInt =-   foreign BigInt "addBigInt" (x:BigInt, y:BigInt)+primNatPlus (x:Any, y:Any) -> Any =+   foreign Any "addBig" (x:Any, y:Any) -primNatTimes (x:BigInt, y:BigInt) -> BigInt =-   foreign BigInt "mulBigInt" (x:BigInt, y:BigInt)+primNatTimes (x:Any, y:Any) -> Any =+   foreign Any "mulBig" (x:Any, y:Any) -primZero() -> BigInt = 0L+%inline primNatMinus(x : Any, y : Any) -> Any = atLeastZeroBig(subBig(x, y)) -primSuc (n : BigInt) -> BigInt = primNatPlus(n, 1L) -primPred(n : BigInt) -> BigInt = subBig(n, 1L) -%inline absBig (x : BigInt) -> BigInt = +primZero() -> Any = foreign BigInt "bigZero" ()+primOne() -> Any  = foreign BigInt "bigOne" ()++primSuc (n : Any) -> Any = primNatPlus(n, primOne())++primPred(n : Any) -> Any = subBig(n, primOne())++%inline atLeastZeroBig (x : Any) -> Any =    if primNatLess(x, primZero)       then primZero      else x -%inline primNatMinus(x : BigInt, y : BigInt) -> BigInt = absBig(subBig(x, y))+primNatModSucAux(k : BigInt, m : BigInt, n : BigInt, j : BigInt) -> BigInt =+    foreign BigInt "modBig" (n : BigInt, m : BigInt) --- readInt () -> Int = foreign Int "readInt" () + primNatEquality (x:BigInt, y:BigInt) -> Bool =-    foreign Int "eqBigInt" (x:BigInt, y:BigInt)+    foreign Int "eqBig" (x:BigInt, y:BigInt)  primNatLess (x:BigInt, y:BigInt) -> Bool =-    foreign Int "ltBigInt" (x:BigInt, y:BigInt)+    foreign Int "ltBig" (x:BigInt, y:BigInt) --- Strings --- Cannot call foreign "append" directly, for some reason-%inline primStringAppend (x : String, y : String) -> String = append(x, y)--primStringEquality (x : String, y : String) -> Bool =-    foreign Int "eqString" (x : String, y : String)- -- Bools  %inline primTrue  () -> Bool = true@@ -109,9 +197,33 @@ printChar (x:Int) -> Unit =     foreign Unit "printCharRep" (x:Int) -init () -> Unit =-    foreign Unit "init" ()+%inline primCharEquality (c1 : Int, c2 : Int) -> Bool = c1 == c2 +primCharToNat (c : Int) -> BigInt = foreign BigInt "NEWBIGINTVALI" (c : Int)+++-- Floats+floatToStr (x : Float) -> String =+    foreign String "floatToStr" (x : Float)++strToFloat (s : String) -> Float =+    foreign Float "strToFloat" (s : String)+ -- Coinduction  primSharp (u1 : Any, u2 : Any, x : Any) -> Data = Con 0 (x)++-- RUNTIME++init () -> Unit =+    foreign Unit "init" ()+    +-- Levels++primLevelMax  (x : Any, y : Any) -> Any = 0L -- error "primLevelMax"+primLevelZero () -> Any = 0L -- error "primLevelZero"+primLevelSuc  (x : Any) -> Any = primSuc(x) -- error "primLevelSuc"++-- TrustMe++primTrustMe (a : Unit, x : Any, y : Any) -> Any = Con 0 ()
src/data/EpicInclude/stdagda.c view
@@ -6,17 +6,28 @@ #include <sys/time.h> #include <locale.h> //#include "closure.h"-#include "stdfuns.h" + #define _UNICODE #define UNICODE +void wputStr(char* s) { wprintf(L"%s",s); }+ int eqString(char *x, char *y) {     return strcmp(x, y) == 0; } +VAL bigZeroRep;+VAL bigOneRep;++VAL bigZero() { return bigZeroRep;}+VAL bigOne() {return bigOneRep;}+ void init(void) {   setlocale(LC_CTYPE, "");++  bigZeroRep = NEWBIGINTVALI(0);+  bigOneRep  = NEWBIGINTVALI(1); }  void printCharRep(int c) {@@ -24,21 +35,61 @@   wprintf(L"%lc", c); } -int bigToInt(mpz_t* n) {-  return (int) mpz_get_si(*n);+int bigToInt(VAL n) {+  return (int) mpz_get_si(*(GETBIGINT(n))); } -mpz_t* intToBig(int n) {-  mpz_t* answer = EMALLOC(sizeof(mpz_t));-  mpz_init(*answer);-  mpz_set_si(*answer, (signed long int)n);-  return answer; +VAL intToBig(int n) {+  return NEWBIGINTVALI(n); }  -VAL getArgBig(mpz_t* num) {+VAL getArgBig(VAL num) {   return evm_getArg(bigToInt(num)); } -mpz_t* numArgsBig(void) { -  return intToBig(epic_numArgs());+VAL numArgsBig(void) { +  return NEWBIGINTVALI(epic_numArgs());+}++char* charToStr(int x)+{+    char* buf = EMALLOC(2*sizeof(char));+    buf[0] = (char)x; buf[1] = '\0';+    return buf;+}++int eof() { return EOF; }++int charAtBig(char* str, VAL n)+{+    return (int)str[bigToInt(n)];+}++int charAt(char* str, int n) { return (int)str[n]; }++#define STRING_BUFFER_SIZE 1024++int eofstdin() { return feof(stdin);}++char* readStrChunk() { return freadStrChunk(stdin); }++char* freadStrChunk(FILE* f) {+  char* in = EMALLOC(sizeof(char)*STRING_BUFFER_SIZE);+  fgets(in,STRING_BUFFER_SIZE,f);+  return in;+}++void** newArray(VAL size)+{+  return EMALLOC(sizeof(void*)*bigToInt(size));+}++void* arrayIndex(void** array, VAL i)+{+  return array[bigToInt(i)];+}++void setArrayIndex(void** array, VAL i, void* val)+{+  array[bigToInt(i)] = val; }
src/data/EpicInclude/stdagda.h view
@@ -11,11 +11,31 @@ #include <gc/gc.h> #include <gmp.h> #include <stdio.h>+#include "stdfuns.h" void init(void); int eqString(char *x, char *y); void printCharRep(int c); -char* getArgv(mpz_t* n);-mpz_t* getArgc(void);+void wputStr(char* s);++int bigToInt(VAL n);+VAL intToBig(int n);++VAL getArgBig(VAL num);++VAL numArgsBig(void);++FILE* getStdin (void);+FILE* getStdout(void);+++char* charToStr(int x);+int charAt(char* str, int n);+int charAtBig(char* str, VAL n);++int eof();++char* freadStrChunk(FILE* f);+// void* freadStrChunk(void* h);  #endif
src/data/emacs-mode/agda-input.el view
@@ -41,6 +41,13 @@             (list (string c))))    (string-to-list s))) +(defun agda-input-character-range (from to)+  "A string consisting of the characters from FROM to TO."+  (let (seq)+    (dotimes (i (1+ (- to from)))+      (setq seq (cons (+ from i) seq)))+    (concat (nreverse seq))))+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Functions used to tweak translation pairs @@ -383,6 +390,9 @@   ("d-|"  . ("↧"))  ("dd-" . ("↡"))   ("ud-|" . ("↨")) +  ("l->" . ("↢"))+  ("r->" . ("↣"))+   ("dz" . ("↯"))    ;; Ellipsis.@@ -468,8 +478,8 @@    ;; Parentheses. -  ("(" . ,(agda-input-to-string-list "([{⁅⁽₍〈⎴⟦⟨⟪〈《「『【〔〖〚︵︷︹︻︽︿﹁﹃﹙﹛﹝([{「"))-  (")" . ,(agda-input-to-string-list ")]}⁆⁾₎〉⎵⟧⟩⟫〉》」』】〕〗〛︶︸︺︼︾﹀﹂﹄﹚﹜﹞)]}」"))+  ("(" . ,(agda-input-to-string-list "([{⁅⁽₍〈⎴⟅⟦⟨⟪⦃〈《「『【〔〖〚︵︷︹︻︽︿﹁﹃﹙﹛﹝([{「"))+  (")" . ,(agda-input-to-string-list ")]}⁆⁾₎〉⎵⟆⟧⟩⟫⦄〉》」』】〕〗〛︶︸︺︼︾﹀﹂﹄﹚﹜﹞)]}」"))    ("[[" . ("⟦"))   ("]]" . ("⟧"))@@ -477,7 +487,15 @@   (">"  . ("⟩"))   ("<<" . ("⟪"))   (">>" . ("⟫"))+  ("{{" . ("⦃"))+  ("}}" . ("⦄")) +  ("(b" . ("⟅"))+  (")b" . ("⟆"))++  ("lbag" . ("⟅"))+  ("rbag" . ("⟆"))+   ;; Primes.    ("'" . ,(agda-input-to-string-list "′″‴⁗"))@@ -519,6 +537,29 @@                                                ⍉⍊⍋⍌⍍⍎⍏⍐⍑⍒⍓⍔⍕⍖⍗⍘⍙⍚⍛                                                ⍜⍝⍞⍟⍠⍡⍢⍣⍤⍥⍦⍧⍨⍩⍪⍫⍬⍭⍮                                                ⍯⍰⍱⍲⍳⍴⍵⍶⍷⍸⍹⍺⎕"))++  ;; Some combining characters.+  ;;+  ;; The following combining characters also have (other)+  ;; translations:+  ;; ̀ ́ ̂ ̃ ̄ ̆ ̇ ̈ ̋ ̌ ̣ ̧ ̱++  ("^--" . ,(agda-input-to-string-list"̅̿"))+  ("_--" . ,(agda-input-to-string-list"̲̳"))+  ("^~"  . ,(agda-input-to-string-list"̃͌"))+  ("_~"  .  (                         "̰"))+  ("^."  . ,(agda-input-to-string-list"̇̈⃛⃜"))+  ("_."  . ,(agda-input-to-string-list"̣̤"))+  ("^l"  . ,(agda-input-to-string-list"⃖⃐⃔"))+  ("^l-" .  (                         "⃖"))+  ("^r"  . ,(agda-input-to-string-list"⃗⃑⃕"))+  ("^r-" .  (                         "⃗"))+  ("^lr" .  (                         "⃡"))+  ("_lr" .  (                         "͍"))+  ("^^"  . ,(agda-input-to-string-list"̂̑͆"))+  ("_^"  . ,(agda-input-to-string-list"̭̯̪"))+  ("^v"  . ,(agda-input-to-string-list"̌̆"))+  ("_v"  . ,(agda-input-to-string-list"̬̮̺"))    ;; Shorter forms of many greek letters plus ƛ. 
src/data/emacs-mode/agda2-highlight.el view
@@ -356,12 +356,14 @@   (font-lock-mode 0)   (setq annotation-bindings agda2-highlight-faces)) -(defun agda2-highlight-load (file)-  "Load syntax highlighting information from FILE."+(defun agda2-highlight-load (file &optional keep)+  "Load syntax highlighting information from FILE.+Old syntax highlighting information is first removed, unless KEEP+is non-nil."   (let ((coding-system-for-read 'utf-8)         ;; Ignore read-only status, otherwise this function may fail.         (inhibit-read-only t))-    (annotation-load-file file (lambda (anns) t)+    (annotation-load-file file (lambda (anns) (not keep))                           "Click mouse-2 to jump to definition")))  (defun agda2-highlight-clear nil
src/data/emacs-mode/agda2-mode.el view
@@ -10,7 +10,7 @@  ;;; Code: -(defvar agda2-version "2.2.10"+(defvar agda2-version "2.3.0"   "The version of the Agda mode. Note that, by default, the same version of the underlying Haskell library is used (see `agda2-ghci-options').")@@ -89,7 +89,8 @@   "MAlonzo"   "The backend which is used to compile Agda programs."   :type '(choice (const "MAlonzo")-                 (const "Epic"))+                 (const "Epic")+                 (const "JS"))   :group 'agda2)  (defcustom agda2-ghci-options@@ -626,6 +627,22 @@     (goto-char p1))   (agda2-load)) +(defun agda2-make-case-action-extendlam (newcls)+  "Replace definition of extended lambda with new clauses NEWCLS and reload."+  (agda2-forget-all-goals);; we reload later anyway.+  (let* ((p (+ (re-search-backward "\\({[^!]\\)\\|;") 1))+         cl)+    (goto-char p)+    (delete-region p (- (re-search-forward "\\([^!]}\\)\\|;") 1))+    (goto-char p)+    (insert "  ")+    (goto-char (+ p 1))+    (while (setq cl (pop newcls))+      (insert cl)+      (if newcls (insert " ; ")))+    (goto-char p))+  (agda2-load))+ (defun agda2-status-action (status)   "Display the string STATUS in the current buffer's mode line. \(precondition: the current buffer has to use the Agda mode as the@@ -641,6 +658,24 @@     (insert text)     (set-syntax-table agda2-mode-syntax-table)     (set-input-method "Agda")++    ;; Support for jumping to positions mentioned in the text.+    (set (make-local-variable 'compilation-error-regexp-alist)+         '(("\\([\\\\/][^[:space:]]*\\):\\([0-9]+\\),\\([0-9]+\\)-\\(\\([0-9]+\\),\\)?\\([0-9]+\\)"+            1 (2 . 5) (3 . 6))))+    ;; No support for recompilation. An attempt to recompile via the+    ;; info buffer (using "g") will (most likely) lead to a (dynamic)+    ;; type error. (The default is to run "make -k".)+    (set (make-local-variable 'compile-command)+         'agda2-does-not-support-compilation-via-the-compilation-minor-mode)+    (compilation-minor-mode 1)++    ;; The info buffer is read-only. Compilation minor mode introduces+    ;; the keybindings "g" (recompile) and "q" (bury the buffer), and+    ;; these keybindings can make it rather awkward to edit the info+    ;; buffer. To avoid surprises we make the buffer read-only.+    (setq buffer-read-only t)+     (goto-char (point-min))     (put-text-property 0 (length name) 'face '(:weight bold) name)     (setq mode-line-buffer-identification name)@@ -849,6 +884,10 @@                     (agda2-string-quote highlighting)))       (delete-file highlighting)))) +(defun agda2-literate-p ()+  "Is the current buffer a literate Agda buffer?"+  (equal (file-name-extension (buffer-name)) "lagda"))+ (defun agda2-goals-action (goals)   "Annotates the goals in the current buffer with text properties. GOALS is a list of the buffer's goal numbers, in the order in@@ -858,9 +897,10 @@ ways."   (agda2-forget-all-goals)   (agda2-let-      (stk+      ((literate (agda2-literate-p))+       stk        top)-      ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--" nil t))+      ((delims() (re-search-forward "[?]\\|[{][-!]\\|[-!][}]\\|--\\|\\\\begin{code}\\|\\\\end{code}" nil t))        (is-lone-questionmark ()           (save-excursion             (save-match-data@@ -869,24 +909,33 @@                  "\\(.[{(]\\|.\\s \\)[?]\\(\\s \\|[)};]\\|$\\)"))))        (make(p)  (agda2-make-goal p (point) (pop goals)))        (inside-comment() (and stk (null     (car stk))))-       (inside-goal()    (and stk (integerp (car stk)))))+       (inside-goal()    (and stk (integerp (car stk))))+       (outside-code()   (and stk (eq (car stk) 'outside)))+       (inside-code()    (not (outside-code))))     (save-excursion+      ;; In literate mode we should start out in the "outside of code"+      ;; state.+      (if literate (push 'outside stk))       (goto-char (point-min))       (while (and goals (delims))         (labels ((c (s) (equal s (match-string 0))))           (cond-           ((c "--") (when (not stk)              (end-of-line)))-           ((c "{-") (when (not (inside-goal))    (push nil           stk)))-           ((c "{!") (when (not (inside-comment)) (push (- (point) 2) stk)))-           ((c "-}") (when (inside-comment) (pop stk)))-           ((c "!}") (when (inside-goal)-                       (setq top (pop stk))-                       (unless stk (make top))))-           ((c "?")  (progn-                       (when (and (not stk) (is-lone-questionmark))-                         (delete-char -1)-                         (insert "{!!}")-                         (make (- (point) 4)))))))))))+           ((c "\\begin{code}") (when (outside-code)               (pop stk)))+           ((c "\\end{code}")   (when (not stk)                    (push 'outside stk)))+           ((c "--")            (when (not stk)                    (end-of-line)))+           ((c "{-")            (when (and (inside-code)+                                           (not (inside-goal)))    (push nil           stk)))+           ((c "-}")            (when (inside-comment)             (pop stk)))+           ((c "{!")            (when (and (inside-code)+                                           (not (inside-comment))) (push (- (point) 2) stk)))+           ((c "!}")            (when (inside-goal)+                                  (setq top (pop stk))+                                  (unless stk (make top))))+           ((c "?")             (progn+                                  (when (and (not stk) (is-lone-questionmark))+                                    (delete-char -1)+                                    (insert "{!!}")+                                    (make (- (point) 4)))))))))))  (defun agda2-make-goal (p q n)   "Make a goal with number N at <P>{!...!}<Q>.  Assume the region is clean."@@ -982,12 +1031,14 @@     (append (format "\\x%x\\&" (encode-char c 'ucs)) nil)))  (defun agda2-string-quote (s)-  "Convert string S into a string representing it in Haskell syntax.-Escape newlines, double quotes, etc.. in the string S, add-surrounding double quotes, and convert non-ASCII characters to the \\xNNNN-notation used in Haskell strings."-  (let ((pp-escape-newlines t))-    (mapconcat 'agda2-char-quote (pp-to-string s) "")))+  "Format S as a Haskell string literal.+Removes any text properties, escapes newlines, double quotes,+etc., adds surrounding double quotes, and converts non-ASCII+characters to the \\xNNNN notation used in Haskell strings."+  (let ((pp-escape-newlines t)+        (s2 (copy-sequence s)))+    (set-text-properties 0 (length s2) nil s2)+    (mapconcat 'agda2-char-quote (pp-to-string s2) "")))  (defun agda2-list-quote (strings)   "Convert a list of STRINGS into a string representing it in Haskell syntax."
src/data/emacs-mode/annotation.el view
@@ -82,7 +82,7 @@   (incf start annotations-offset)   (incf end annotations-offset)   (when (and (<= (point-min) start)-             (<= start end)+             (< start end)              (<= end (point-max)))     (let ((faces (delq nil                        (mapcar (lambda (ann)@@ -104,9 +104,16 @@         (add-to-list 'props 'mouse-face)         (add-to-list 'props 'help-echo))       (when props-        (add-text-properties start end-                             `(annotation-annotated   t-                               annotation-annotations ,props))))))+        (let ((pos start)+              mid)+          (while (< pos end)+            (setq mid (next-single-property-change pos+                         'annotation-annotations nil end))+            (let* ((old-props (get-text-property pos 'annotation-annotations))+                   (all-props (union old-props props)))+              (add-text-properties pos mid+                 `(annotation-annotated t annotation-annotations ,all-props))+              (setq pos mid))))))))  (defmacro annotation-preserve-mod-p-and-undo (&rest code)   "Run CODE preserving both the undo data and the modification bit."
src/full/Agda/Auto/Auto.hs view
@@ -31,7 +31,6 @@ import Agda.Syntax.Common import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Translation.AbstractToConcrete (abstractToConcrete, abstractToConcrete_, makeEnv, runAbsToCon, toConcrete)-import Agda.Interaction.Monad import Agda.Interaction.BasicOps hiding (refine) import Agda.Interaction.MakeCase (findClause) import Agda.TypeChecking.Reduce (normalise)@@ -116,10 +115,10 @@                         if listmode then do                         nsol' <- readIORef nsol-                        when (nsol' <= 10) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> modifyIORef sols (trms :)+                        when (nsol' <= 10) $ runErrorT (mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons)) >>= \trms -> case trms of {Left{} -> writeIORef nsol $! nsol' + 1; Right trms -> modifyIORef sols (trms :)}                        else do                         nsol' <- readIORef nsol-                        when (nsol' == 1) $ mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons) >>= \trms -> writeIORef sols [trms]+                        when (nsol' == 1) $ runErrorT (mapM (\(m, _, _, _) -> frommy (Meta m)) (Map.elems tccons)) >>= \trms -> case trms of {Left{} -> writeIORef nsol $! nsol' + 1; Right trms -> writeIORef sols [trms]}                ticks <- liftIO $ newIORef 0                let exsearch initprop recinfo defdfv = liftIO $ System.Timeout.timeout (timeout * 1000000) (                     let r d = do@@ -296,19 +295,22 @@                     in r 0)                  case sols of                   Just (cls : _) -> withInteractionId ii $ do-                   cls' <- liftIO $ mapM frommyClause cls-                   cls'' <- mapM (\(I.Clause _ tel perm ps body) ->-                     withCurrentModule (AN.qnameModule def) $ do-                      -- Normalise the dot patterns-                      ps <- addCtxTel tel $ normalise ps-                      body <- etaContractBody body-                      liftM modifyAbstractClause $ inContext [] $ reify $ NamedClause def $ I.Clause noRange tel perm ps body-                    ) cls'-                   pcs <- withInteractionId ii $ mapM prettyA cls''-                   ticks <- liftIO $ readIORef ticks+                   cls' <- liftIO $ runErrorT (mapM frommyClause cls)+                   case cls' of+                    Left{} -> dispmsg "No solution found"+                    Right cls' -> do+                     cls'' <- mapM (\(I.Clause _ tel perm ps body) ->+                       withCurrentModule (AN.qnameModule def) $ do+                        -- Normalise the dot patterns+                        ps <- addCtxTel tel $ normalise ps+                        body <- etaContractBody body+                        liftM modifyAbstractClause $ inContext [] $ reify $ NamedClause def $ I.Clause noRange tel perm ps body+                      ) cls'+                     pcs <- withInteractionId ii $ mapM prettyA cls''+                     ticks <- liftIO $ readIORef ticks  -                   return (Right $ Left (map (insertAbsurdPattern . PP.renderStyle (PP.style { PP.mode = PP.OneLineMode })) pcs), Nothing)+                     return (Right $ Left (map (insertAbsurdPattern . PP.renderStyle (PP.style { PP.mode = PP.OneLineMode })) pcs), Nothing)                    Just [] -> dispmsg "No solution found" -- case not possible at the moment because case split doesnt care about search exhaustiveness                   Nothing -> dispmsg $ "No solution found at time out (" ++ show timeout ++ "s)"
src/full/Agda/Auto/CaseSplit.hs view
@@ -181,7 +181,7 @@                          if elem scrut mblkvar then costCaseSplitLow else (if scrut < length ctx - nscrutavoid && nothid then costCaseSplitHigh else costCaseSplitVeryHigh)                   nothid = let HI hid _ = ctx !! scrut-                          in case hid of {Hidden -> False; NotHidden -> True}+                          in case hid of {Hidden -> False; Instance -> False; NotHidden -> True}                sols <- rc (depth - cost) (length ctx - 1 - scrut) ctx2 tt2 pats2
src/full/Agda/Auto/Convert.hs view
@@ -5,6 +5,7 @@ import Agda.Utils.Impossible #include "../undefined.h" +import Control.Applicative hiding (getConst, Const(..)) import Data.IORef import Data.Map (Map) import qualified Data.Map as Map@@ -21,11 +22,13 @@ import Agda.TypeChecking.Monad.Signature (getConstInfo, getDefFreeVars, getImportedSignature) import Agda.Utils.Permutation (Permutation(Perm), idP, permute, takeP) import Agda.Interaction.BasicOps (rewrite, Rewrite(..))+import Agda.TypeChecking.Level (reallyUnLevelView) import Agda.TypeChecking.Monad.Base (mvJudgement, mvPermutation, getMetaInfo, ctxEntry, envContext, clEnv, Judgement(HasType)) import Agda.TypeChecking.Monad.MetaVars (lookupMeta, withMetaInfo) import Agda.TypeChecking.Monad.Context (getContextArgs)-import Agda.TypeChecking.Monad.Constraints (lookupConstraint, getConstraints)+import Agda.TypeChecking.Monad.Constraints (getAllConstraints) import Agda.TypeChecking.Substitute (piApply, raise)+import qualified Agda.TypeChecking.Substitute as I (absBody) import Agda.TypeChecking.Reduce (Normalise, normalise, instantiate) import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Primitive (constructorForm)@@ -81,12 +84,11 @@      typ <- lift $ norm typ      typ' <- tomyType typ      let clausesToDef clauses = do-           let clauses' = map I.translatedClause clauses-           clauses'' <- tomyClauses clauses'-           let narg = case clauses' of+           clauses' <- tomyClauses clauses+           let narg = case clauses of                         [] -> 0                         I.Clause {I.clausePats = xs} : _ -> length xs-           return (Def narg clauses'' Nothing Nothing, [])+           return (Def narg clauses' Nothing Nothing, [])      (cont, projfcns2) <- case defn of       MB.Axiom {} -> return (Postulate, [])       MB.Function {MB.funClauses = clauses} -> clausesToDef clauses@@ -96,10 +98,11 @@        cons2 <- mapM (\con -> getConst True con TMAll) cons        return (Datatype cons2 [], [])       MB.Record {MB.recFields = fields, MB.recTel = tel} -> do -- the value of recPars seems unreliable or don't know what it signifies-       let pars n (I.El _ (I.Pi it (I.Abs _ typ))) = C.Arg (C.argHiding it) (C.argRelevance it) (I.Var n []) : pars (n - 1) typ+       let pars n (I.El _ (I.Pi it typ)) = C.Arg (C.argHiding it) (C.argRelevance it) (I.Var n []) : pars (n - 1) (I.unAbs typ)            pars _ (I.El _ _) = []            contyp npar I.EmptyTel = I.El (I.mkType 0 {- arbitrary -}) (I.Def cn (pars (npar - 1) typ))            contyp npar (I.ExtendTel it (I.Abs v tel)) = I.El (I.mkType 0 {- arbitrary -}) (I.Pi it (I.Abs v (contyp (npar + 1) tel)))+           contyp npar (I.ExtendTel it I.NoAbs{})     = __IMPOSSIBLE__        contyp' <- tomyType $ contyp 0 tel        cc <- lift $ liftIO $ readIORef c        let Datatype [con] [] = cdcont cc@@ -240,10 +243,10 @@  getEqs :: MB.TCM [(Bool, I.Term, I.Term)] getEqs = do- eqs <- getConstraints+ eqs <- getAllConstraints  let r = mapM (\eqc -> do           neqc <- norm eqc-          case MB.clValue neqc of+          case MB.clValue $ MB.theConstraint neqc of            MB.ValueCmp ineq _ i e -> do             ei <- etaContract i             ee <- etaContract e@@ -252,9 +255,7 @@             I.El _ ei <- etaContract i             I.El _ ee <- etaContract e             return [(tomyIneq ineq, ee, ei)]-           MB.Guarded (MB.UnBlock _) cs -> do-            eqs' <- r cs-            return $ concat eqs'+           MB.Guarded (MB.UnBlock _) pid -> return []            _ -> return []          )  eqs' <- r eqs@@ -285,7 +286,7 @@   def <- lift $ getConstInfo n   cc <- lift $ liftIO $ readIORef c   let Just npar = fst $ cdorigin cc-  return $ PatConApp c (replicate (fromIntegral npar) PatExp ++ pats')+  return $ PatConApp c (replicate npar PatExp ++ pats')  I.LitP _ -> throwError $ strMsg "Auto: Literals in patterns are not supported"  tomyBody (I.Body t) = do@@ -297,11 +298,7 @@  return $ case res of   Nothing -> Nothing   Just (b', i) -> Just (b', i + 1)-tomyBody (I.NoBind b) = do- res <- tomyBody b- return $ case res of-  Nothing -> Nothing-  Just (b', i) -> Just (weaken i b', i + 1)+tomyBody (I.Bind (I.NoAbs _ b)) = tomyBody b tomyBody I.NoBody = return Nothing  weaken :: Int -> MExp O -> MExp O@@ -350,14 +347,15 @@ tomyExp (I.Var v as) = do  as' <- tomyExps as  return $ NotM $ App Nothing (NotM OKVal) (Var $ fromIntegral v) as'-tomyExp (I.Lam hid (I.Abs name b)) = do- b' <- tomyExp b- return $ NotM $ Lam (cnvh hid) (Abs (Id name) b')+tomyExp (I.Lam hid b) = do+ b' <- tomyExp (I.absBody b)+ return $ NotM $ Lam (cnvh hid) (Abs (Id $ I.absName b) b') tomyExp t@(I.Lit{}) = do  t <- lift $ constructorForm t  case t of   I.Lit{} -> throwError $ strMsg "Auto: Literals in terms are not supported"   _ -> tomyExp t+tomyExp (I.Level l) = tomyExp =<< lift (reallyUnLevelView l) tomyExp (I.Def name as) = do  c <- getConst False name TMAll  as' <- tomyExps as@@ -369,16 +367,13 @@  cc <- lift $ liftIO $ readIORef c  let Just npar = fst $ cdorigin cc  return $ NotM $ App Nothing (NotM OKVal) (Const c) (foldl (\x _ -> NotM $ ALConPar x) as' [1..npar])-tomyExp (I.Pi (C.Arg hid _ x) (I.Abs name y)) = do+tomyExp (I.Pi (C.Arg hid _ x) b) = do+ let y    = I.absBody b+     name = I.absName b  x' <- tomyType x  y' <- tomyType y  return $ NotM $ Pi Nothing (cnvh hid) (Agda.TypeChecking.Free.freeIn 0 y) x' (Abs (Id name) y')-tomyExp (I.Fun (C.Arg hid _ x) y) = do- x' <- tomyType x- y' <- tomyType y- return $ NotM $ Pi Nothing (cnvh hid) False x' (Abs NoId (weaken 0 y'))-tomyExp (I.Sort (I.Type (I.Lit (I.LitLevel _ l)))) = return $ NotM $ Sort $ Set $ fromIntegral l-tomyExp (I.Sort (I.MetaS _ _)) = throwError $ strMsg "Auto: Searching for a type of arbitrary set level is not supported"+tomyExp (I.Sort (I.Type (I.Max [I.ClosedLevel l]))) = return $ NotM $ Sort $ Set $ fromIntegral l tomyExp (I.Sort _) = return $ NotM $ Sort UnknownSort tomyExp t@I.MetaV{} = do  t <- lift $ instantiate t@@ -392,7 +387,7 @@    m <- getMeta mid    return $ Meta m   _ -> tomyExp t-tomyExp (I.DontCare) = return $ NotM $ dontCare+tomyExp (I.DontCare _) = return $ NotM $ dontCare  tomyExps [] = return $ NotM ALNil tomyExps (C.Arg hid _ a : as) = do@@ -410,45 +405,57 @@  fmExp :: I.MetaId -> I.Term -> Bool fmExp m (I.Var _ as) = fmExps m as-fmExp m (I.Lam _ (I.Abs _ b)) = fmExp m b+fmExp m (I.Lam _ b) = fmExp m (I.unAbs b) fmExp m (I.Lit _) = False+fmExp m (I.Level (I.Max as)) = any (fmLevel m) as fmExp m (I.Def _ as) = fmExps m as fmExp m (I.Con _ as) = fmExps m as-fmExp m (I.Pi x (I.Abs _ y)) = fmType m (C.unArg x) || fmType m y-fmExp m (I.Fun x y) = fmType m (C.unArg x) || fmType m y+fmExp m (I.Pi x y)  = fmType m (C.unArg x) || fmType m (I.unAbs y) fmExp m (I.Sort _) = False fmExp m (I.MetaV mid _) = mid == m-fmExp m (I.DontCare) = False+fmExp m (I.DontCare _) = False  fmExps m [] = False fmExps m (a : as) = fmExp m (C.unArg a) || fmExps m as +fmLevel :: I.MetaId -> I.PlusLevel -> Bool+fmLevel m I.ClosedLevel{} = False+fmLevel m (I.Plus _ l) = case l of+  I.MetaLevel m' _   -> m == m'+  I.NeutralLevel v   -> fmExp m v+  I.BlockedLevel _ v -> fmExp m v+  I.UnreducedLevel v -> fmExp m v+ -- ---------------------------------------------  cnvh C.NotHidden = NotHidden+cnvh C.Instance = Instance cnvh C.Hidden = Hidden icnvh NotHidden = C.NotHidden+icnvh Instance = C.Instance icnvh Hidden = C.Hidden  -- ---------------------------------------------  frommy = frommyExp +frommyType :: MExp O -> ErrorT String IO I.Type frommyType e = do  e' <- frommyExp e  return $ I.El (I.mkType 0) e'  -- 0 is arbitrary, sort not read by Agda when reifying-frommyExp :: MExp O -> IO I.Term++frommyExp :: MExp O -> ErrorT String IO I.Term frommyExp (Meta m) = do- bind <- readIORef $ mbind m+ bind <- lift $ readIORef $ mbind m  case bind of-  Nothing -> __IMPOSSIBLE__+  Nothing -> throwError "meta not bound"   Just e -> frommyExp (NotM e) frommyExp (NotM e) =  case e of   App _ _ (Var v) as ->    frommyExps 0 as (I.Var (fromIntegral v) [])   App _ _ (Const c) as -> do-   cdef <- readIORef c+   cdef <- lift $ readIORef c    let (iscon, name) = cdorigin cdef        (ndrop, h) = case iscon of {Just n -> (n, I.Con); Nothing -> (0, I.Def)}    frommyExps ndrop as (h name [])@@ -463,18 +470,17 @@   Sort (Set l) ->    return $ I.Sort (I.mkType (fromIntegral l))   Sort Type -> __IMPOSSIBLE__-  Sort UnknownSort -> return I.DontCare-  -- Sort UnknownSort -> return $ I.Sort (I.mkType 0) -- hoping that it's thrown away+  Sort UnknownSort -> return $ I.Sort (I.mkType 0) -- hoping that it's thrown away    AbsurdLambda hid ->    return $ I.Lam (icnvh hid) (I.Abs abslamvarname (I.Var 0 []))  -frommyExps :: Nat -> MArgList O -> I.Term -> IO I.Term+frommyExps :: Nat -> MArgList O -> I.Term -> ErrorT String IO I.Term frommyExps ndrop (Meta m) trm = do- bind <- readIORef $ mbind m+ bind <- lift $ readIORef $ mbind m  case bind of-  Nothing -> __IMPOSSIBLE__+  Nothing -> throwError "meta not bound"   Just e -> frommyExps ndrop (NotM e) trm frommyExps ndrop (NotM as) trm =  case as of@@ -485,11 +491,11 @@    frommyExps ndrop xs (addend (C.Arg (icnvh hid) C.Relevant x') trm)    ALProj eas idx hid xs -> do-   idx <- expandbind idx-   let c = case idx of-            NotM c -> c-            Meta{} -> __IMPOSSIBLE__-   cdef <- readIORef c+   idx <- lift $ expandbind idx+   c <- case idx of+            NotM c -> return c+            Meta{} -> throwError "meta not bound"+   cdef <- lift $ readIORef c    let name = snd $ cdorigin cdef    trm2 <- frommyExps 0 eas (I.Def name [])    frommyExps 0 xs (addend (C.Arg (icnvh hid) C.Relevant trm) trm2)@@ -510,9 +516,10 @@ modifyAbstractExpr = f  where   f (A.App i e1 (C.Arg h r (C.Named n e2))) = A.App i (f e1) (C.Arg h r (C.Named n (f e2)))-  f (A.Lam i (A.DomainFree h n) _) | show n == abslamvarname = A.AbsurdLam i h+  f (A.Lam i (A.DomainFree h rel n) _) | show n == abslamvarname = A.AbsurdLam i h   f (A.Lam i b e) = A.Lam i b (f e)   f (A.Rec i xs) = A.Rec i (map (\(n, e) -> (n, f e)) xs)+  f (A.RecUpdate i e xs) = A.RecUpdate i (f e) (map (\(n, e) -> (n, f e)) xs)   f (A.ScopedExpr i e) = A.ScopedExpr i (f e)   f e = e @@ -539,7 +546,7 @@         (ns', ps') <- cnvps ns ps         cc <- liftIO $ readIORef c2         let Just npar = fst $ cdorigin cc-        return (ns', HI hid (CSPatConApp c2 (replicate (fromIntegral npar) (HI Hidden CSOmittedArg) ++ ps')))+        return (ns', HI hid (CSPatConApp c2 (replicate npar (HI Hidden CSOmittedArg) ++ ps')))        I.DotP t -> do         (t2, _) <- runStateT (tomyExp t) (S {sConsts = (cmap, []), sMetas = initMapS, sEqs = initMapS, sCurMeta = Nothing, sMainMeta = mainm})         return (ns, HI hid (CSPatExp t2))@@ -548,7 +555,7 @@  return (reverse names, pats)  -frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> IO I.Clause+frommyClause :: (CSCtx O, [CSPat O], Maybe (MExp O)) -> ErrorT String IO I.Clause frommyClause (ids, pats, mrhs) = do  let ctel [] = return I.EmptyTel      ctel (HI hid (mid, t) : ctx) = do@@ -570,7 +577,7 @@        --CSPatVar v -> return (length ids + nv - 1 - v : perm, nv)        CSPatVar v -> return ((length ids - 1 - v, nv) : perm, nv + 1)        CSPatConApp c ps -> do-        cdef <- readIORef c+        cdef <- lift $ readIORef c         let (Just ndrop, _) = cdorigin cdef         getperms ndrop ps perm nv        CSPatExp e -> return (perm, nv + 1)@@ -593,7 +600,7 @@       p' <- case p of        CSPatVar v -> return (I.VarP $ let HI _ (Id n, _) = ids !! v in n)        CSPatConApp c ps -> do-        cdef <- readIORef c+        cdef <- lift $ readIORef c         let (Just ndrop, name) = cdorigin cdef         ps' <- cnvps ndrop ps         return (I.ConP name Nothing ps')@@ -612,7 +619,7 @@                r n = I.Bind $ I.Abs "h" $ r (n - 1)                e'' = r ({-length ids + -}nv)            return e''- return $ I.Clause SP.noRange tel (Perm (fromIntegral $ nv{- + length ids-}) (map fromIntegral perm)) ps body+ return $ I.Clause SP.noRange tel (Perm (nv{- + length ids-}) perm) ps body  contains_constructor :: [CSPat O] -> Bool contains_constructor = any f@@ -625,8 +632,8 @@ etaContractBody :: I.ClauseBody -> MB.TCM I.ClauseBody etaContractBody (I.NoBody) = return I.NoBody etaContractBody (I.Body b) = etaContract b >>= \b -> return (I.Body b)-etaContractBody (I.NoBind b) = etaContractBody b >>= \b -> return (I.NoBind b) etaContractBody (I.Bind (I.Abs id b)) = etaContractBody b >>= \b -> return (I.Bind (I.Abs id b))+etaContractBody (I.Bind (I.NoAbs x b))  = I.Bind . I.NoAbs x <$> etaContractBody b   -- ---------------------------------@@ -672,18 +679,16 @@   let res = do         def <- Map.elems $ MB.sigDefinitions sig         MB.Function{MB.funClauses = cs} <- [MB.theDef def]-        c <- map I.translatedClause cs+        c <- cs         unless (peelbinds False findMeta $ I.clauseBody c) []         return (MB.defName def, c, peelbinds __IMPOSSIBLE__ toplevel $ I.clauseBody c)   return $ case res of     [] -> Nothing-    [r] -> Just r-    _ -> __IMPOSSIBLE__+    r:_ -> Just r   -- TODO: with pattern matching lambdas we might get more than one hit, which to choose?   where     peelbinds d f = r      where r b = case b of                   I.Bind b -> r $ I.absBody b-                  I.NoBind b -> r b                   I.NoBody -> d                   I.Body e -> f e     findMeta e =@@ -691,13 +696,13 @@       I.Var _ as -> findMetas as       I.Lam _ b -> findMeta (I.absBody b)       I.Lit{} -> False+      I.Level (I.Max as) -> any (fmLevel m) as       I.Def _ as -> findMetas as       I.Con _ as -> findMetas as-      I.Pi it ot -> findMetat (C.unArg it) || findMetat (I.absBody ot)-      I.Fun it ot -> findMetat (C.unArg it) || findMetat ot+      I.Pi it ot -> findMetat (C.unArg it) || findMetat (I.unAbs ot)       I.Sort{} -> False       I.MetaV m' _  -> m == m'-      I.DontCare -> False+      I.DontCare _ -> False     findMetas = any (findMeta . C.unArg)     findMetat (I.El _ e) = findMeta e     toplevel e =@@ -718,8 +723,8 @@    case ft 0 0 Just ctyp ttyp of     Just n -> Just (n, narg)     Nothing -> case ctyp of-     I.El _ (I.Pi _ ot) -> tr (narg + 1) (na + 1) (I.absBody ot)-     I.El _ (I.Fun _ ot) -> tr (narg + 1) na ot+     I.El _ (I.Pi _ (I.Abs _ ot)) -> tr (narg + 1) (na + 1) ot+     I.El _ (I.Pi _ (I.NoAbs _ ot)) -> tr (narg + 1) na ot      _ -> Nothing    where     ft nl n c (I.El _ e1) (I.El _ e2) = f nl n c e1 e2@@ -739,9 +744,6 @@       (I.Def n1 as1, I.Def n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2       (I.Con n1 as1, I.Con n2 as2) | n1 == n2 -> fs nl (n + 1) c as1 as2       (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (I.absBody ot2)) it1 it2-      (I.Fun (C.Arg hid1 rel1 it1) ot1, I.Fun (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft nl n c ot1 ot2) it1 it2-      (I.Fun (C.Arg hid1 rel1 it1) ot1, I.Pi (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (raise 1 ot1) (I.absBody ot2)) it1 it2-      (I.Pi (C.Arg hid1 rel1 it1) ot1, I.Fun (C.Arg hid2 rel2 it2) ot2) | hid1 == hid2 -> ft nl n (\n -> ft (nl + 1) n c (I.absBody ot1) (raise 1 ot2)) it1 it2       (I.Sort{}, I.Sort{}) -> c n -- sloppy       _ -> Nothing     fs nl n c es1 es2 = case (es1, es2) of
src/full/Agda/Auto/Syntax.hs view
@@ -49,6 +49,7 @@   data FMode = Hidden+           | Instance            | NotHidden  deriving Eq 
src/full/Agda/Compiler/Epic/AuxAST.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | Intermediate abstract syntax tree used in the compiler. Pretty close to --   Epic syntax. module Agda.Compiler.Epic.AuxAST where@@ -7,9 +8,11 @@  import Agda.Syntax.Abstract.Name -type Var = String-type Tag = Int+import Agda.Compiler.Epic.Interface +#include "../../undefined.h"+import Agda.Utils.Impossible+ type Comment  = String type Inline   = Bool @@ -17,12 +20,14 @@   = Fun       { funInline  :: Inline       , funName    :: Var+      , funQName   :: Maybe QName       , funComment :: Comment       , funArgs    :: [Var]       , funExpr    :: Expr       }   | EpicFun       { funName     :: Var+      , funQName    :: Maybe QName       , funComment  :: Comment       , funEpicCode :: String --EpicCode       }@@ -35,6 +40,7 @@   | LFloat  Double   deriving (Show, Ord, Eq) + data Expr   = Var Var   | Lit Lit@@ -55,11 +61,58 @@   | Default {brExpr :: Expr}   deriving (Show, Ord, Eq) +getBrVars :: Branch -> [Var]+getBrVars (Branch {brVars = vs}) = vs+getBrVars _                      = []++--------------------------------------------------------------------------------+-- * Some smart constructors++-- | Smart constructor for let expressions to avoid unneceessary lets+lett :: Var -> Expr -> Expr -> Expr+lett v (Var v') e' = subst v v' e'+lett v e        e' = if v `elem` fv e' then Let v e e' else e'++-- | Some things are pointless to make lazy+lazy :: Expr -> Expr+lazy (Lazy e) = Lazy e+lazy (Lit l)  = Lit l+lazy UNIT     = UNIT+lazy x        = Lazy x++-- | If casing on the same expression in a sub-expression, we know what branch to+--   pick+casee :: Expr -> [Branch] -> Expr+casee x brs = Case x [br{brExpr = casingE br (brExpr br)} | br <- brs]+  where+    casingE br expr = let rec = casingE br in case expr of+      Var v -> Var v+      Lit l -> Lit l+      Lam v e -> Lam v (rec e)+      Con t n es -> Con t n (map rec es)+      App v es   -> App v (map rec es)+      Case e brs | expr == e -> case filter (sameCon br) brs of+        []  -> Case (rec e) [b {brExpr = rec (brExpr b)} | b <- brs]+        [b] -> substs (getBrVars br `zip` getBrVars b) (brExpr b)+        _   -> __IMPOSSIBLE__+                 | otherwise -> Case (rec e) [b {brExpr = rec (brExpr b)} | b <- brs]+      If e1 e2 e3 -> If (rec e1) (rec e2) (rec e3)+      Let v e1 e2 -> Let v (rec e1) (rec e2)+      Lazy e      -> Lazy (rec e)+      UNIT        -> UNIT+      IMPOSSIBLE  -> IMPOSSIBLE+    sameCon (Branch {brTag = t1}) (Branch {brTag = t2}) = t1 == t2+    sameCon (BrInt  {brInt = i1}) (BrInt  {brInt = i2}) = i1 == i2+    sameCon _                     _                     = False+ -- | Smart constructor for applications to avoid empty applications apps :: Var -> [Expr] -> Expr apps v [] = Var v apps v as = App v as +--------------------------------------------------------------------------------+-- * Substitution+ -- | Substitution subst :: Var  -- ^ Substitute this ...       -> Var  -- ^ with this ...@@ -83,6 +136,9 @@     UNIT       -> UNIT     IMPOSSIBLE -> IMPOSSIBLE +substs :: [(Var, Var)] -> Expr -> Expr+substs ss e = foldr (uncurry subst) e ss+ substBranch :: Var -> Var -> Branch -> Branch substBranch x e br = br { brExpr = subst x e (brExpr br) } @@ -109,9 +165,3 @@       Branch _ _ vs e -> fv' e S.\\ S.fromList vs       BrInt _ e       -> fv' e       Default e       -> fv' e---- | Filter a list using a list of Bools specifying what to keep.-pairwiseFilter :: [Bool] -> [a] -> [a]-pairwiseFilter (True :bs) (a:as) = a : pairwiseFilter bs as-pairwiseFilter (False:bs) (_:as) = pairwiseFilter bs as-pairwiseFilter _           _     = []
+ src/full/Agda/Compiler/Epic/CaseOpts.hs view
@@ -0,0 +1,42 @@+-- | Perform simple optimisations based on case-laws+module Agda.Compiler.Epic.CaseOpts where++import Control.Applicative+import Control.Monad++import Agda.TypeChecking.Monad++import Agda.Compiler.Epic.AuxAST+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface++caseOpts :: [Fun] -> Compile TCM [Fun]+caseOpts = mapM  $ \ def -> case def of+  Fun{} -> do+    e' <- caseOptsExpr (funExpr def)+    return def { funExpr = e' }+  _     -> return def++-- | Run the case-opts on an expression+caseOptsExpr :: Expr -> Compile TCM Expr+caseOptsExpr expr = case expr of+  Var v       -> return $ Var v+  Lit l       -> return $ Lit l+  Lam v e     -> Lam v <$> caseOptsExpr e+  Con c n es  -> Con c n <$> mapM caseOptsExpr es+  App v es    -> apps v <$> mapM caseOptsExpr es+  -- If there is only one constructor branch, perform a projection to get the result+  Case e [Branch {brVars = vs, brExpr = eorg}] -> do+      e' <- caseOptsExpr eorg+      bindExpr e $ \var ->+        return $ foldr (\(v, n) -> lett v $ App "proj" [Lit (LInt n), Var var]) e'+               $ zip vs [0..]+  -- If there is only a default branch, the case is not necessary+  Case e [Default{brExpr = e'}] -> caseOptsExpr e'+  Case e brs  -> Case <$> caseOptsExpr e <*> (mapM (\br -> do e' <- caseOptsExpr (brExpr br)+                                                              return br {brExpr = e'}) brs)+  If a b c    -> If <$> caseOptsExpr a <*> caseOptsExpr b <*> caseOptsExpr c+  Let v e1 e2 -> Let v <$> caseOptsExpr e1 <*> caseOptsExpr e2+  Lazy e      -> Lazy <$> caseOptsExpr e+  UNIT        -> return UNIT+  IMPOSSIBLE  -> return IMPOSSIBLE
src/full/Agda/Compiler/Epic/CompileState.hs view
@@ -6,57 +6,69 @@  import Control.Applicative import Control.Monad.State+import Data.List import Data.Map(Map) import qualified Data.Map as M import Data.Maybe+import Data.Monoid import Data.Set(Set) import qualified Data.Set as S -import Agda.Compiler.Epic.AuxAST+import Agda.Compiler.Epic.AuxAST as AuxAST+import Agda.Compiler.Epic.Interface+import Agda.Interaction.Options import Agda.Syntax.Internal+import Agda.Syntax.Concrete(TopLevelModuleName) import Agda.Syntax.Common-import Agda.TypeChecking.Monad (MonadTCM, internalError, defType, theDef, getConstInfo)-import qualified Agda.TypeChecking.Monad as M+import Agda.TypeChecking.Monad (TCM, internalError, defType, theDef, getConstInfo, sigDefinitions, stImports, stPersistentOptions, stPersistent)+import qualified Agda.TypeChecking.Monad as TM import Agda.TypeChecking.Reduce  #include "../../undefined.h" import Agda.Utils.Impossible+import Agda.Utils.Monad -type IrrFilter = [Bool]  -- | Stuff we need in our compiler data CompileState = CompileState-    { dataDecls     :: Map QName Tag-    , nameSupply    :: [Var]-    , definitions   :: Set Var-    , defDelayed    :: Map QName Bool-    , conPars       :: Map QName Int-    , mainName      :: Maybe QName-    , irrFilters    :: Map QName IrrFilter+    { nameSupply      :: [Var]+    , compiledModules :: Map TopLevelModuleName (EInterface, Set FilePath)+    , curModule       :: EInterface+    , importedModules :: EInterface+    , curFun          :: String     } deriving Show  -- | The initial (empty) state initCompileState :: CompileState initCompileState = CompileState-    { dataDecls     = M.empty-    , nameSupply    = map (('h':) . show) [0 :: Integer ..]-    , definitions   = S.fromList primTopBindings-    , defDelayed    = M.empty-    , conPars       = M.empty-    , mainName      = Nothing-    , irrFilters    = M.empty+    { nameSupply        = map (('h':) . show) [0 :: Integer ..]+    , compiledModules   = M.empty+    , curModule         = mempty+    , importedModules   = mempty+    , curFun            = undefined     }-  where-    -- | For the lambda-lifter not to lift known primitive functions.-    primTopBindings :: [Var]-    primTopBindings = ["primNatCaseZD", "primNatCaseZS", "primBoolCase", "primUnit", "primSharp"]  -- | Compiler monad type Compile = StateT CompileState -epicError :: MonadTCM m => String -> Compile m a+-- | When normal errors are not enough+epicError :: String -> Compile TCM a epicError = lift . internalError +-- | Modify the state of the current module's Epic Interface+modifyEI :: (EInterface -> EInterface) -> Compile TCM ()+modifyEI f = modify $ \s -> s {curModule = f (curModule s)}++-- | Get the state of the current module's Epic Interface+getsEI :: (EInterface -> a) -> Compile TCM a+getsEI f = gets (f . curModule)++-- | Returns the type of a definition given its name+getType :: QName -> Compile TCM Type+getType q = do+    map <- lift (gets (sigDefinitions . stImports))+    return $ maybe __IMPOSSIBLE__ defType (M.lookup q map)+ -- | Create a name which can be used in Epic code from a QName. unqname :: QName -> Var unqname qn = case nameId $ qnameName qn of@@ -65,70 +77,138 @@  -- * State modifiers -getDelayed :: MonadTCM m => QName -> Compile m Bool-getDelayed q = fromMaybe False <$> gets (M.lookup q . defDelayed)+resetNameSupply :: Compile TCM ()+resetNameSupply = modify $ \s -> s {nameSupply = nameSupply initCompileState} -putDelayed :: Monad m => QName -> Bool -> Compile m ()-putDelayed q d = modify $ \s -> s {defDelayed = M.insert q d (defDelayed s)}+getDelayed :: QName -> Compile TCM Bool+getDelayed q = lookInterface (M.lookup q . defDelayed) (return False) -newName :: Monad m => Compile m Var+putDelayed :: QName -> Bool -> Compile TCM ()+putDelayed q d = modifyEI $ \s -> s {defDelayed = M.insert q d (defDelayed s)}++newName :: Compile TCM Var newName = do     n:ns <- gets nameSupply     modify $ \s -> s { nameSupply = ns}     return n --- | Add a data declaration by giving a list of its constructors.---   Tags will be created and saved.-addDataDecl :: Monad m => [QName] -> Compile m ()-addDataDecl ts = modify-    $ \s -> s { dataDecls = M.union (M.fromList $ zip ts [0..]) (dataDecls s)}+putConstrTag :: QName -> Tag -> Compile TCM ()+putConstrTag q t = modifyEI $ \s -> s { constrTags = M.insert q t $ constrTags s } -getConstrTag :: Monad m => QName -> Compile m Tag-getConstrTag con = gets $ fromMaybe __IMPOSSIBLE__-                        . M.lookup con-                        . dataDecls+assignConstrTag :: QName -> Compile TCM Tag+assignConstrTag constr = assignConstrTag' constr [] -addDefName :: Monad m => QName -> Compile m ()+assignConstrTag' :: QName -> [QName] -> Compile TCM Tag+assignConstrTag' constr constrs = do+    constrs <- concat <$> mapM ((getDataCon =<<) . getConData) (constr : constrs)+    tags    <- catMaybes <$> mapM getConstrTag' constrs+    let tag =  head $ map Tag [0..] \\ tags+    putConstrTag constr tag+    return tag++getConData :: QName -> Compile TCM QName+getConData con = do+    lmap <- lift (gets (TM.sigDefinitions . TM.stImports))+    case M.lookup con lmap of+        Just def -> case theDef def of+            c@(TM.Constructor{}) -> return $ TM.conData c+            _                 -> __IMPOSSIBLE__+        Nothing -> __IMPOSSIBLE__++getDataCon :: QName -> Compile TCM [QName]+getDataCon con = do+    lmap <- lift (gets (TM.sigDefinitions . TM.stImports))+    case M.lookup con lmap of+        Just def -> case theDef def of+            d@(TM.Datatype{}) -> return $ TM.dataCons d+            r@(TM.Record{})   -> return [ TM.recCon r]+            _                 -> __IMPOSSIBLE__+        Nothing -> __IMPOSSIBLE__++getConstrTag :: QName -> Compile TCM Tag+getConstrTag con = lookInterface (M.lookup con . constrTags)+                                 (assignConstrTag con)++getConstrTag' :: QName -> Compile TCM (Maybe Tag)+getConstrTag' con = do+    cur <- gets curModule+    case M.lookup con (constrTags cur) of+        Just x -> return (Just x)+        Nothing -> do+            imps <- gets importedModules+            return $ M.lookup con (constrTags imps)++addDefName :: QName -> Compile TCM () addDefName q = do-    modify $ \s -> s {definitions = S.insert (unqname q) $ definitions s }-    when ("main" == show (qnameName q)) (putMain q) -- hax+    modifyEI $ \s -> s {definitions = S.insert (unqname q) $ definitions s } -topBindings :: Monad m => Compile m (Set Var)-topBindings = gets definitions+topBindings :: Compile TCM (Set Var)+topBindings = S.union <$> gets (definitions . importedModules) <*> gets (definitions . curModule) -getConPar :: MonadTCM m => QName -> Compile m Int-getConPar n = fromMaybe __IMPOSSIBLE__ <$> M.lookup n <$> gets conPars+getConArity :: QName -> Compile TCM Int+getConArity n = lookInterface (M.lookup n . conArity) __IMPOSSIBLE__ -putConPar :: Monad m => QName -> Int -> Compile m ()-putConPar n p = modify $ \s -> s { conPars = M.insert n p (conPars s) }+putConArity :: QName -> Int -> Compile TCM ()+putConArity n p = modifyEI $ \s -> s { conArity = M.insert n p (conArity s) } -putMain :: Monad m => QName -> Compile m ()-putMain m = modify $ \s -> s { mainName = Just m }+putMain :: QName -> Compile TCM ()+putMain m = modifyEI $ \s -> s { mainName = Just m } -getMain :: MonadTCM m => Compile m Var-getMain = maybe (epicError "Where is main? :(") (return . unqname) =<< gets mainName+getMain :: Compile TCM Var+getMain = maybe (epicError "Where is main? :(") (return . unqname) =<< getsEI mainName -getIrrFilter :: Monad m => QName -> Compile m IrrFilter-getIrrFilter q = gets $ fromMaybe __IMPOSSIBLE__-                      . M.lookup q-                      . irrFilters+lookInterface :: (EInterface -> Maybe a) -> Compile TCM a -> Compile TCM a+lookInterface f def = do+    cur <- gets curModule+    case f cur of+        Just x -> return x+        Nothing -> do+            imps <- gets importedModules+            case f imps of+                Nothing -> def+                Just x  -> return x -putIrrFilter :: Monad m => QName -> IrrFilter -> Compile m ()-putIrrFilter n f = modify $ \s -> s {irrFilters = M.insert n f $ irrFilters s}+constrInScope :: QName -> Compile TCM Bool+constrInScope name = do+    cur <- gets curModule+    case M.lookup name (constrTags cur) of+        Just x -> return True+        Nothing -> do+            imps <- gets importedModules+            case M.lookup name (constrTags imps) of+                Nothing -> return False+                Just x  -> return True +getForcedArgs :: QName -> Compile TCM ForcedArgs+getForcedArgs q = lookInterface (M.lookup q . forcedArgs) __IMPOSSIBLE__++putForcedArgs :: QName -> ForcedArgs -> Compile TCM ()+putForcedArgs n f = do+  b <- lift $ gets (optForcing . stPersistentOptions . stPersistent)+  let f' | b = f+         | otherwise = replicate (length f) NotForced+  modifyEI $ \s -> s {forcedArgs = M.insert n f' $ forcedArgs s}+ replaceAt :: Int -- ^ replace at           -> [a] -- ^ to replace           -> [a] -- ^ replace with           -> [a] -- ^ result? replaceAt n xs inserts = let (as, _:bs) = splitAt n xs in as ++ inserts ++ bs - -- | Copy pasted from MAlonzo, HAHA!!! --   Move somewhere else!-constructorArity :: (MonadTCM tcm, Num a) => QName -> tcm a+constructorArity :: Num a => QName -> TCM a constructorArity q = do   def <- getConstInfo q   a <- normalise $ defType def   case theDef def of-    M.Constructor{ M.conPars = np } -> return . fromIntegral $ arity a - np+    TM.Constructor{ TM.conPars = np } -> return . fromIntegral $ arity a - np     _ -> internalError $ "constructorArity: non constructor: " ++ show q++-- | Bind an expression to a fresh variable name+bindExpr :: Expr -> (Var -> Compile TCM Expr) -> Compile TCM Expr+bindExpr expr f = case expr of+  AuxAST.Var v -> f v+  _     -> do+      v <- newName+      lett v expr <$> f v
src/full/Agda/Compiler/Epic/Compiler.hs view
@@ -6,100 +6,189 @@ import Control.Monad import Control.Monad.Reader import Control.Monad.State+import qualified Data.ByteString.Lazy as BS import qualified Data.Map as M+import Data.Set(Set)+import qualified Data.Set as S import Data.Maybe+import Data.Monoid+import qualified Language.Haskell.Exts.Syntax as Haskell import System.Directory import System.Exit import System.FilePath hiding (normalise) import System.Process hiding (env)  import Paths_Agda+import Agda.Compiler.MAlonzo.Pretty -- TODO: Move shared code to Compiler.*+import Agda.Compiler.MAlonzo.Primitives (checkTypeOfMain) import Agda.Interaction.FindFile import Agda.Interaction.Options+import Agda.Interaction.Imports import qualified Agda.Syntax.Concrete.Name as CN import Agda.Syntax.Internal hiding (Term(..)) import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Serialise import Agda.Utils.FileName -import Agda.Compiler.Epic.CompileState hiding (conPars)-import qualified Agda.Compiler.Epic.ConstructorIrrelevancy as CIrr+import qualified Agda.TypeChecking.Pretty as P++import Agda.Compiler.Epic.CompileState+import qualified Agda.Compiler.Epic.CaseOpts     as COpts+import qualified Agda.Compiler.Epic.ForceConstrs as ForceC import Agda.Compiler.Epic.Epic-import qualified Agda.Compiler.Epic.Erasure as Eras-import qualified Agda.Compiler.Epic.FromAgda as FAgda-import qualified Agda.Compiler.Epic.LambdaLift as LL-import qualified Agda.Compiler.Epic.Primitive  as Prim+import Agda.Compiler.Epic.Interface+import qualified Agda.Compiler.Epic.Erasure      as Eras+import qualified Agda.Compiler.Epic.FromAgda     as FAgda+import qualified Agda.Compiler.Epic.Forcing      as Forcing+import qualified Agda.Compiler.Epic.Injection    as ID+import qualified Agda.Compiler.Epic.NatDetection as ND+import qualified Agda.Compiler.Epic.Primitive    as Prim+import qualified Agda.Compiler.Epic.Smashing     as Smash  #include "../../undefined.h" import Agda.Utils.Impossible --- | Compile an interface into an Epic/a.out program---   /actually this is not true, we compile everything so we don't even look at---   the Interface. This may change in the future.+compilePrelude :: Compile TCM ()+compilePrelude = do+    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir+    pwd <- liftIO $ getCurrentDirectory+    liftIO $ setCurrentDirectory dataDir+    let prelude = "AgdaPrelude"+    uptodate <- liftIO $ (prelude <.> "ei") `isNewerThan` (prelude <.> "e")+    when (not uptodate) $ callEpic False [ "-c" , prelude <.> "e" ]+    liftIO $ setCurrentDirectory pwd++-- | Compile an interface into an executable using Epic compilerMain :: Interface -> TCM () compilerMain inter = do     epic_exist <- liftIO $ rawSystem "ghc-pkg" ["-v0", "field", "epic", "id"]     case epic_exist of         ExitSuccess -> flip evalStateT initCompileState $ do+            compilePrelude             setEpicDir inter-            initialAnalysis-            code <- compileModule =<< lift (gets stImports)-            case code of-                Nothing -> __IMPOSSIBLE__-                Just c  -> runEpic (iModuleName inter) c+            (_, imports) <- compileModule inter+            main <- getMain+            runEpicMain main (S.toList imports) (iModuleName inter)+         ExitFailure _ -> internalError $ unlines            [ "Agda cannot find the Epic compiler."            , "This can perhaps be fixed by running `cabal install epic'."            , "See the README for more information."            ] +outFile :: CN.TopLevelModuleName -> Compile TCM FilePath+outFile mod = do+  let (dir, fn) = splitFileName . foldl1 (</>) $ CN.moduleNameParts mod+      fp  | dir == "./"  = "src" </> fn+          | otherwise = "src" </> dir </> fn+  liftIO $ createDirectoryIfMissing True ("src" </> dir)+  return $ fp+  where+  repldot c = map (\c' -> if c' == '.' then c else c') +readEInterface :: FilePath -> Compile TCM EInterface+readEInterface file = fromMaybe __IMPOSSIBLE__+                   <$> lift (decode =<< liftTCM (liftIO (BS.readFile file)))++compileModule :: Interface -> Compile TCM (EInterface, Set FilePath)+compileModule i = do+    cm <- gets compiledModules+    let moduleName = toTopLevelModuleName $ iModuleName i+    file  <- outFile moduleName+    case M.lookup moduleName cm of+        Just eifs -> return eifs+        Nothing  -> do+            imports <- map miInterface . catMaybes+                                      <$> mapM (lift . getVisitedModule . toTopLevelModuleName)+                                               (iImportedModules i)+            (ifaces, limps) <- mapAndUnzipM compileModule imports+            let imps = S.unions limps+            modify $ \s -> s { importedModules = importedModules s `mappend` mconcat ifaces }+            ifile <- maybe __IMPOSSIBLE__ filePath <$> lift (findInterfaceFile moduleName)+            let eifFile = file <.> "aei"+            uptodate <- liftIO $ isNewerThan eifFile ifile+            (eif, imps') <- case uptodate of+                True  -> do+                    lift $ reportSLn "" 1 $+                        show (iModuleName i) ++ " : no compilation is needed."+                    eif <- readEInterface eifFile+                    modify $ \s -> s { curModule = eif }+                    return (eif, S.insert file imps)+                False -> do+                    lift $ reportSLn "" 1 $+                        "Compiling: " ++ show (iModuleName i)+                    resetNameSupply+                    initialAnalysis i+                    let defns = M.toList $ sigDefinitions $ iSignature i+                    -- Epic cannot parse files with no definitions+                    if (not $ null defns) then do+                        code <- compileDefns defns+                        runEpic file (S.toList imps) code+                        eif <- gets curModule+                        lift $ do+                            bif <- encode eif+                            liftIO $ BS.writeFile eifFile bif+                        return (eif, S.insert file imps)+                     else+                        flip (,) imps <$> gets curModule+            modify $ \s -> s { compiledModules = (M.insert moduleName (eif, imps') (compiledModules s))}+            return (eif, imps')+ -- | Before running the compiler, we need to store some things in the state, --   namely constructor tags, constructor irrelevancies and the delayed field --   in functions (for coinduction).-initialAnalysis :: MonadTCM m => Compile m ()-initialAnalysis = do-  defs <- M.toList <$> lift (gets (sigDefinitions . stImports))+initialAnalysis :: Interface -> Compile TCM ()+initialAnalysis inter = do+  Prim.initialPrims+  modify $ \s -> s {curModule = mempty}+  let defs = M.toList $ sigDefinitions $ iSignature inter   forM_ defs $ \(q, def) -> do     addDefName q     case theDef def of       d@(Datatype {}) -> do-        addDataDecl $ dataCons d+        saker <- ND.isNatish q d+        case saker of+            Just (_, [zer, suc]) -> do+                putConstrTag zer (PrimTag "primZero")+                putConstrTag suc (PrimTag "primSuc")+            _ -> return ()       Constructor {conPars = np} -> do-        putIrrFilter q . drop (fromIntegral np) . CIrr.irrFilter $ defType def-        putConPar q =<< lift (constructorArity q)-      r@(Record{}) -> do-        addDataDecl [recCon r]+        putForcedArgs q . drop (fromIntegral np) . ForceC.makeForcedArgs $ defType def+        putConArity q =<< lift (constructorArity q)       f@(Function{}) -> do+        when ("main" == show (qnameName q)) $ do+            -- lift $ liftTCM $ checkTypeOfMain q (defType def)+            putMain q         putDelayed q $ case funDelayed f of           Delayed -> True           NotDelayed -> False+      a@(Axiom {}) -> do+        case defEpicDef def of+          Nothing -> putDelayed q True+          _       -> return ()       _ -> return () +idPrint s m x = do+  -- liftIO $ putStrLn s+  m x+ -- | Perform the chain of compilation stages, from definitions to epic code-compileDefns :: MonadTCM m => [(QName, Definition)] -> Compile m (Maybe EpicCode)+compileDefns :: [(QName, Definition)] -> Compile TCM EpicCode compileDefns defs = do     -- We need to handle sharp (coinduction) differently, so we get it here.     msharp <- lift $ getBuiltin' builtinSharp-    emits   <- FAgda.fromAgda msharp defs-               >>= Prim.primitivise-               >>= irr -- CIrr.constrIrr-               >>= Eras.erasure-               >>= LL.lambdaLift-    if null emits-       then return Nothing-       else return . return . unlines . map prettyEpicFun $ emits-  where-    irr ds = do-        f <- lift $ gets (optForcing . stPersistentOptions)-        if f then CIrr.constrIrr ds-             else return ds---- | Compile all definitions from a signature-compileModule :: MonadTCM m => Signature -> Compile m (Maybe EpicCode)-compileModule sig = do-    let defs = M.toList $ sigDefinitions sig-    compileDefns defs+    emits   <- return defs+               >>= idPrint "findInjection" ID.findInjection+               >>= idPrint "fromAgda"   (FAgda.fromAgda msharp)+               >>= idPrint "forcing"     Forcing.remForced+               >>= idPrint "irr"         ForceC.forceConstrs+               >>= idPrint "primitivise" Prim.primitivise+               >>= idPrint "smash"       Smash.smash'em+               >>= idPrint "erasure"     Eras.erasure+               >>= idPrint "caseOpts"    COpts.caseOpts+               >>= idPrint "done" return+    unlines <$> mapM prettyEpicFun emits  -- | Change the current directory to Epic folder, create it if it doesn't already --   exist.@@ -107,7 +196,8 @@ setEpicDir mainI = do     let tm = toTopLevelModuleName $ iModuleName mainI     f <- lift $ findFile tm-    compileDir' <- lift $ gets (fromMaybe (filePath $ CN.projectRoot f tm) . optCompileDir . stPersistentOptions)+    compileDir' <- lift $ gets (fromMaybe (filePath $ CN.projectRoot f tm) .+                                  optCompileDir . stPersistentOptions . stPersistent)     compileDir <- liftIO $ canonicalizePath compileDir'     liftIO $ setCurrentDirectory compileDir     liftIO $ createDirectoryIfMissing False "Epic"@@ -117,30 +207,59 @@ -- -- The program is written to the file @../m@, where m is the last -- component of the given module name.-runEpic :: MonadTCM m => ModuleName -> EpicCode -> Compile m ()-runEpic m code = do-    nam <- getMain-    epicflags <- optEpicFlags <$> lift commandLineOptions-    let code' = "include \"AgdaPrelude.e\"\n" ++ code ++ "main() -> Unit = init() ; " ++ nam ++ "(unit)"-    dataDir <- liftIO getDataDir-    curDir  <- liftIO getCurrentDirectory-    liftIO $ copyFile (dataDir </> "EpicInclude" </> "AgdaPrelude" <.> "e")-                      (curDir </> "AgdaPrelude" <.> "e")-    liftIO $ writeFile ("main" <.> "e") code'+runEpic :: FilePath -> [FilePath] -> EpicCode -> Compile TCM ()+runEpic fp imports code = do+    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir+    let imports' = unlines ["include \"" ++ imp ++ "\""+                           | imp <- (dataDir </> "AgdaPrelude.ei")+                                    : map (<.> "ei") imports]+        code'    = imports' ++ code+    liftIO $ writeFile (fp <.> "e") code'+    callEpic True $+        [ "-c", fp <.> "e" ] +-- | Create the Epic main file, which calls the Agda main function+runEpicMain :: Var -> [FilePath] -> ModuleName -> Compile TCM ()+runEpicMain mainName imports m = do+    dataDir <- (</> "EpicInclude") <$> liftIO getDataDir+    let imports' = (dataDir </> "AgdaPrelude") : imports+    let code = unlines ["include \"" ++ imp <.> "ei" ++ "\""+                       | imp <- imports'+                       ] ++ "main() -> Unit = init() ; " ++ mainName ++ "(unit)"+    liftIO $ writeFile ("main" <.> "e") code     let outputName  = case mnameToList m of           [] -> __IMPOSSIBLE__           ms -> last ms-        epic        = "epic"+    callEpic'  $ \epic ->+        [ "main" <.> "e"+        , "-o", ".." </> show outputName+        ]+        ++ epic ++ map (<.> "o") imports'++-- | Call epic, with a given set of flags, if the |Bool| is True then include+-- the command line flags at the end+callEpic :: Bool -> [String] -> Compile TCM ()+callEpic incEFlags flags = callEpic' $ \epicFlags ->+  flags ++ if incEFlags then epicFlags else []++-- | Call epic with a given set of flags, the argument function receives the flags given+-- at the command line+callEpic' :: ([String] -> [String]) -> Compile TCM ()+callEpic' flags = do+    epicFlags <- optEpicFlags <$> lift commandLineOptions+    dataDir   <- (</> "EpicInclude") <$> liftIO getDataDir+    let epic        = "epic"         epicCommand =           [ "-keepc"-          , "-checking", "0"+          -- , "-g"+          -- , "-checking", "0"           -- , "-trace"-          , "-i", dataDir </> "EpicInclude" </> "stdagda" <.> "c"-          , "main" <.> "e"-          , "-o", ".." </> show outputName-          ] ++ epicflags+          , "-i", dataDir </> "stdagda" <.> "c"+          ] ++ flags epicFlags     lift $ reportSLn "" 1 $       "calling: " ++ unwords (epic : epicCommand)-    _ <- liftIO $ rawSystem epic epicCommand-    return ()+    res <- liftIO $ system (unwords (epic : epicCommand))+                  -- rawSystem epic epicCommand+    case res of+        ExitSuccess   -> return ()+        ExitFailure i -> epicError $ "Epic returned " ++ show res ++ ", which should not happen. Please report this as a bug."
− src/full/Agda/Compiler/Epic/ConstructorIrrelevancy.hs
@@ -1,67 +0,0 @@--- | Remove forced (irrelevant) arguments from constructors.-module Agda.Compiler.Epic.ConstructorIrrelevancy where--import Control.Applicative--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState--import Agda.Syntax.Common-import qualified Agda.Syntax.Internal as T-import Agda.TypeChecking.Monad.Base (MonadTCM)----- | Check which arguments are forced and create an IrrFilter-irrFilter :: T.Type -> IrrFilter-irrFilter (T.El _ term) = case term of-    T.Pi  arg ab  -> isRel arg : irrFilter (T.absBody ab)-    T.Fun arg typ -> isRel arg : irrFilter typ-    _ -> []-  where-    isRel :: Arg T.Type -> Bool-    isRel arg = case argRelevance arg of-      Relevant   -> True-      Irrelevant -> False-      Forced     -> False -- It can be inferred---- | Remove irrelevant arguments from constructors and branches-constrIrr :: MonadTCM m => [Fun] -> Compile m [Fun]-constrIrr fs = mapM irrFun fs--irrFun :: MonadTCM m => Fun -> Compile m Fun-irrFun (Fun inline name comment args expr) =-    Fun inline name comment args <$> irrExpr expr-irrFun e@(EpicFun{}) = return e---- | Remove all arguments to constructors that we don't need to store in an---   expression.-irrExpr :: MonadTCM m => Expr -> Compile m Expr-irrExpr expr = case expr of-    Var v        -> return $ Var v-    Lit l        -> return $ Lit l-    Lam v e      -> Lam v <$> irrExpr e-    Con tag q es -> do-        -- We only need to apply the relevant arguments-        irrFilt <- getIrrFilter q-        return $ Con tag q $ pairwiseFilter irrFilt es-    App v es     -> App v <$> mapM irrExpr es-    Case e bs    -> Case <$> irrExpr e <*> mapM irrBranch bs-    Let v e e'   -> Let v <$> irrExpr e <*> irrExpr e'-    If a b c     -> If <$> irrExpr a <*> irrExpr b <*> irrExpr c-    Lazy e       -> Lazy <$> irrExpr e-    UNIT         -> return expr-    IMPOSSIBLE   -> return expr---- | Remove all the arguments that doesn't need to be stored in the constructor---   For the branch-irrBranch :: MonadTCM m => Branch -> Compile m Branch-irrBranch br = case br of-    Branch  tag name vars e -> do-        ir <- getIrrFilter name-        let vs = pairwiseFilter ir vars-            -- The removed arguments are substituted for unit-            subs = pairwiseFilter (map not ir) vars-            e'   = foldr (\x ex -> subst x "primUnit" ex) e subs-        Branch tag name vs <$> irrExpr e'-    BrInt i e -> BrInt i <$> irrExpr e-    Default e -> Default <$> irrExpr e
src/full/Agda/Compiler/Epic/Epic.hs view
@@ -3,15 +3,28 @@ -- | Pretty-print the AuxAST to valid Epic code. module Agda.Compiler.Epic.Epic   ( prettyEpicFun+  , prettyEpic   ) where +import Control.Monad.State+ import Data.Char import Data.List +import Data.Map (Map)+import qualified Data.Map as M++import Agda.TypeChecking.Monad+import Agda.TypeChecking.Pretty (prettyTCM)+import Agda.TypeChecking.Reduce+ #include "../../undefined.h" import Agda.Utils.Impossible + import Agda.Compiler.Epic.AuxAST+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface  -- * Some auxilliary pretty-printer functions (<+>) :: String -> String -> String@@ -25,6 +38,10 @@ many :: [String] -> String many vs = paren $ intercalate ", " vs +many' :: [String] -> String+many' [] = ""+many' vs = paren $ intercalate ", " vs+ paren :: String -> String paren s = "(" <+> s <+> ")" @@ -33,46 +50,60 @@  -- * Pretty-printer -- | Print a function to an Epic string-prettyEpicFun :: Fun -> String-prettyEpicFun (Fun inline name comment vars e) =-    "--" <+> comment $$-    (if inline then "%inline " else "") ++ name-    <+> many (map typVar vars) <+> "-> Any" <+> "=" <+> prettyEpic e-prettyEpicFun (EpicFun name comment def) =+prettyEpicFun :: MonadTCM m => Fun -> Compile m String+prettyEpicFun (Fun inline name mqname comment vars e) = do+    {-+    defs <- lift (gets (sigDefinitions . stImports))+    typ <- case mqname >>= flip M.lookup defs of+      Nothing -> return "-"+      Just def -> do+        doc <- lift $ prettyTCM =<< normalise (defType def)+        return $ show doc+    -}+    return $+      "--" <+> comment $$+      -- unlines (map ("-- " <+>) (lines typ)) $$+      (if inline then "%inline " else "") ++ name+        <+> many (map typVar vars) <+> "-> Any" <+> "=" <+> prettyEpic e++prettyEpicFun (EpicFun name _mqname comment def) = return $     "--" <+> comment $$-    "%inline" <+> name <+> def+    {-"%inline" <+> -} name <+> def  -- | Print expression to Epic expression prettyEpic :: Expr -> String prettyEpic expr = case expr of     Var v -> v     Lit l -> prettyEpicLit l-    Lam _ _ -> __IMPOSSIBLE__ -- We have lambda lifted away all λs-    Con t q args -> curly (show q) <+> paren ("Con" <+> show t <+> many (map prettyEpic args))+    Lam x e -> paren $ "\\" <+> typVar x <+> "." <+> paren (prettyEpic e)-- __IMPOSSIBLE__ -- We have lambda lifted away all λs+    Con (Tag t) q args -> curly (show q) <+> paren ("Con" <+> show t <+> many (map prettyEpic args))     If a b c -> "if" <+> prettyEpic a <+> "then" <+> prettyEpic b <+> "else" <+> prettyEpic c-    Let v e e' -> "let" <+> typVar v <+> "=" <+> prettyEpic e <+> "in" <+> prettyEpic e'-    App v es -> v <+> many (map prettyEpic es)+    Let v e e' -> "let" <+> typVar v <+> "=" <+> prettyEpic (id e) <+> "in" <+> prettyEpic e'+    App "proj" (Lit (LInt n) : e : es) -> paren (prettyEpic e <+> "!" <+> show n) <+> many' (map prettyEpic es)+    App v es -> v <+> many' (map (prettyEpic . id) es)     Case e brs -> "case" <+> prettyEpic e <+> "of {"                <+> intercalate "\n | " (map prettyEpicBr brs) <+> "}"     Lazy e -> "lazy" <+> paren (prettyEpic e)     UNIT -> "unit"     IMPOSSIBLE -> "impossible"+    _ -> __IMPOSSIBLE__  prettyEpicBr :: Branch -> String prettyEpicBr br = case br of-    Branch c q vs e ->+    Branch (Tag c) q vs e ->        curly (show q)  <+>        "Con" <+> show c        <+> many (map typVar vs)        <+> "->" <+> prettyEpic e     BrInt n e       ->  show n <+> "->" <+> prettyEpic e     Default e       -> "Default ->" <+> prettyEpic e+    _ -> __IMPOSSIBLE__  prettyEpicLit :: Lit -> String prettyEpicLit l = case l of     LInt n    -> show n ++ "L"     LChar c   -> show (ord c)-    LString s -> show s+    LString s -> "Con 1" <+> many [show s, "Con 0 ()"]     LFloat f  -> show f  typVar :: Var -> String
src/full/Agda/Compiler/Epic/Erasure.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | Some arguments to functions (types in particular) will not be used in the --   body. Wouldn't it be useful if these wasn't passed around at all? --   Fear not, we here perform some analysis and try to remove as many of these@@ -18,65 +19,76 @@  import Agda.Compiler.Epic.AuxAST import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface -import Agda.TypeChecking.Monad.Base (MonadTCM)+import Agda.TypeChecking.Monad.Base (TCM)+import qualified Agda.Syntax.Internal as SI+import qualified Agda.Syntax.Common   as SC+import Agda.TypeChecking.Monad (MonadTCM, reportSDoc)+import Agda.TypeChecking.Pretty as P -data Relevancy-  = Irr-  | Rel-  | DontKnow-  deriving (Eq, Ord, Show)+#include "../../undefined.h"+import Agda.Utils.Impossible -isIrr :: Relevancy -> Bool+isIrr :: Relevance -> Bool isIrr Irr      = True isIrr Rel      = False-isIrr DontKnow = True -isRel :: Relevancy -> Bool+isRel :: Relevance -> Bool isRel = not . isIrr --- | Irrelevancy "and"-(&&-) :: Relevancy -> Relevancy -> Relevancy-Rel      &&- _        = Rel-_        &&- Rel      = Rel-DontKnow &&- a        = a-a        &&- DontKnow = a-Irr      &&- Irr      = Irr -- If both arguments are irrelevant, then surely we-                            -- have something irrelevant.+-- | Relevance "or"+(||-) :: Relevance -> Relevance -> Relevance+Irr      ||- b      = b+_        ||- _      = Rel+infixr 2 ||- +-- | Relevance "and"+(&&-) :: Relevance -> Relevance -> Relevance+Rel      &&- b      = b+_        &&- _      = Irr+infixr 3 &&-+ data ErasureState = ErasureState-  { relevancies :: Map Var [Relevancy]+  { relevancies :: Map Var [Relevance]   , funs        :: Map Var Fun   }  type Erasure = StateT ErasureState  -- | Try to find as many unused variables as possible-erasure :: MonadTCM m => [Fun] -> Compile m [Fun]+erasure :: [Fun] -> Compile TCM [Fun] erasure fs = do-    rels <- flip evalStateT (ErasureState M.empty M.empty) $ do+    orgRel <- gets (relevantArgs . importedModules)+    (rels, erasureState) <- flip runStateT (ErasureState orgRel M.empty) $ do         mapM_ initiate fs         fu <- gets funs-        M.mapKeys (fromJust . flip M.lookup fu) <$> step-    fmap concat $ mapM (\f -> check f (M.lookup f rels)) fs+        M.mapKeys (fromMaybe __IMPOSSIBLE__ . flip M.lookup fu) <$> step 1+    modifyEI $ \s -> s { relevantArgs = M.mapKeys funName rels }+    concat <$> mapM (\f -> map (rem (relevancies erasureState)) <$> check f (M.lookup f rels)) fs   where++    rem rels f@Fun{} = f { funExpr = removeUnused rels (funExpr f) }+    rem _    f       = f     -- | Perform the worker//wrapper transform-    check :: MonadTCM m => Fun -> Maybe [Relevancy] -> Compile m [Fun]+    check :: Fun -> Maybe [Relevance] -> Compile TCM [Fun]     -- If the function is already marked as to inline we don't need to create a     -- new function. Also If all arguments are relevant there is nothing to do.-    check f (Just rs) | any isIrr rs && not (funInline f) = do-        f' <- newName+    check f@Fun{} (Just rs) | any isIrr rs && not (funInline f) = do+        f' <- (funName f ++) <$> newName         let args' = pairwiseFilter (map isRel rs) (funArgs f)             subs  = pairwiseFilter (map isIrr rs) (funArgs f)             e'    = foldr (\v e -> subst v "primUnit" e) (funExpr f) subs         return [ Fun { funInline  = True                      , funName    = funName f+                     , funQName   = funQName f                      , funComment = funComment f                      , funArgs    = funArgs f                      , funExpr    = App f' $ map Var args'                      }                , Fun { funInline  = False                      , funName    = f'+                     , funQName   = Nothing                      , funComment = funComment f ++ " [ERASED]"                      , funArgs    = args'                      , funExpr    = e'@@ -84,20 +96,63 @@                ]     check f _ = return [f] --- | Initiate a function's relevancies (all DontKnow)-initiate :: Monad m => Fun -> Erasure m ()-initiate f@(Fun _ name _ args _) =-    modify $ \s -> s { relevancies = M.insert name (replicate (length args) DontKnow) (relevancies s)+removeUnused :: Map Var [Relevance] -> Expr -> Expr+removeUnused rels t = let rem = removeUnused rels+                       in case t of+    Var _         -> t+    Lit _         -> t+    Lam v e       -> Lam v (rem e)+    Con tag qn es -> Con tag qn (map rem es)+    App v es      -> case M.lookup v rels of+       Just re -> App v $ zipWith (\r x -> if isIrr r then UNIT else rem x)+                                  (re ++ repeat Rel) es+       Nothing    -> App v $ map rem es+    Case e brs    -> Case (rem e) (map (\br -> br {brExpr = rem $ brExpr br}) brs)+    If a b c      -> If (rem a) (rem b) (rem c)+    Let v e1 e2   -> lett v (rem e1) (rem e2)+    Lazy e        -> lazy (rem e)+    UNIT          -> t+    IMPOSSIBLE    -> t++-- | Initiate a function's relevancies+initiate :: Fun -> Erasure (Compile TCM) ()+initiate f@(Fun _ name mqname _ args _) = do+    let rels = replicate (length args) Irr+    modify $ \s -> s { relevancies = M.insert name rels (relevancies s)                      , funs        = M.insert name f (funs s)                      }-initiate (EpicFun {})            = return ()+initiate f@(EpicFun {funName = name, funQName = mqname}) = case mqname of+    Just qn -> do+        ty <- lift $ getType qn+        let rels = initialRels ty Rel+        return ()+        modify $ \s -> s { relevancies = M.insert name rels (relevancies s)+                         , funs        = M.insert name f (funs s)+                         }+    Nothing -> return () +initialRels :: SI.Type -> Relevance -> [Relevance]+initialRels ty rel =+    case SI.unEl ty of+        SI.Pi  a b -> mkRel a : initialRels (SI.unAbs b) rel+        _       -> []+  where+    mkRel :: SC.Arg SI.Type -> Relevance+    mkRel a | ignoreForced (SC.argRelevance a) = Irr+    mkRel a = case SI.unEl (SC.unArg a) of+       SI.Sort _ -> Irr+       _         -> rel++ignoreForced :: SC.Relevance -> Bool+ignoreForced SC.Relevant = False+ignoreForced _           = True+ -- | Calculate if a variable is relevant in an expression-relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevancy+relevant :: (Functor m, Monad m) => Var -> Expr -> Erasure m Relevance relevant var expr = case expr of     Var v  | v == var  -> return Rel            | otherwise -> return Irr-    Lit _l       -> return Irr+    Lit _l      -> return Irr     Lam _ e     -> relevant var e     Con _ _ es  -> relevants var es     App v es | v == var  -> return Rel@@ -106,28 +161,55 @@                 mvrs <- gets (M.lookup v . relevancies)                 case mvrs of                   Nothing  -> relevants var es-                  Just vrs -> relevants var-                            $ pairwiseFilter (map isRel vrs ++ repeat True {- Needs ETA expansion -}) es-    Case e brs  -> (&&-) <$> relevant var e  <*> relevants var (map brExpr brs)+                  Just vrs ->+                      relevants var+                        $ map snd+                        $ filter ((==) Rel . fst)+                        $ zip (vrs ++ repeat Rel) es+                      -- foldr (||-) Irr <$> zipWith (&&-) (vrs ++ repeat Rel) <$> mapM (relevant var) es+    -- {-+    Case e [br@Branch{}] -> do+        cvars <- foldr (||-) Irr <$> mapM (flip relevant $ brExpr br) (brVars br)+        vare  <- relevant var e+        varbr <- relevant var (brExpr br)+        return ((vare &&- cvars) ||- varbr)+    -- -}+    Case e brs  -> (||-) <$> relevant var e  <*> relevants var (map brExpr brs)     If a b c    -> relevants var [a,b,c]-    Let _ e1 e2 -> (&&-) <$> relevant var e1 <*> relevant var e2+    Let x e1 e2 -> (||-) <$> ((&&-) <$> relevant var e1 <*> relevant x e2) <*> relevant var e2     Lazy e      -> relevant var e     UNIT        -> return Irr     IMPOSSIBLE  -> return Irr   where-    relevants :: (Functor m, Monad m) => Var -> [Expr] -> Erasure m Relevancy-    relevants v es = foldM (\x y -> return $ x &&- y) Irr =<< mapM (relevant v) es+    relevants :: (Functor m, Monad m) => Var -> [Expr] -> Erasure m Relevance+    relevants v [] = return Irr+    relevants v (e : es) = do+      r <- relevant v e+      case r of+        Rel -> return r+        _   -> relevants v es+    -- relevants v es = return . foldr (\x y -> x ||- y) Irr =<< mapM (relevant v) es --- | Try to find a fixpoint for all the functions relevancy.-step :: (Monad m, Functor m) => Erasure m (Map Var [Relevancy])-step = do+-- | Try to find a fixpoint for all the functions relevance.+step :: Integer -> Erasure (Compile TCM) (Map Var [Relevance])+step nrOfLoops = do     s  <- get-    rels <- forM (M.toList (relevancies s)) $ \(v, _) -> do-               let f = fromJust $ M.lookup v (funs s)-               (,) v <$> mapM (flip relevant (funExpr f)) (funArgs f)-    let relsm = M.fromList rels+    newRels <- (M.fromList <$>) $ forM (M.toList (funs s)) $ \(v, f) -> ((,) v <$>) $ do+               let funRels = fromMaybe __IMPOSSIBLE__ $ M.lookup v (relevancies s)+               case f of+                  EpicFun{} -> return funRels+                  Fun{} -> do+                     forM (zip (funArgs f) (funRels ++ repeat Rel)) $ \ (x, rel) -> case rel of+                        Rel -> return Rel+                        Irr -> do+                          lift $ lift $ reportSDoc "epic.erasure" 10 $ P.text "running erasure:" P.<+> (P.text . show) (funQName f)+                          relevant x (funExpr f)+    let relsm = newRels `M.union` relevancies s     if relevancies s == relsm-       then return relsm+       then return newRels        else do-           put s {relevancies = relsm}-           step+         put s {relevancies = relsm}+         step (nrOfLoops + 1)++diff :: (Ord k, Eq a) => Map k a -> Map k a -> [(k,(a,a))]+diff m1 m2 = catMaybes $ zipWith (\(k, x) (_, y) -> if x == y then Nothing else Just (k, (x, y))) (M.toList m1) (M.toList m2)
+ src/full/Agda/Compiler/Epic/ForceConstrs.hs view
@@ -0,0 +1,75 @@+-- | Remove forced arguments from constructors.+{-# LANGUAGE CPP #-}+module Agda.Compiler.Epic.ForceConstrs where++import Control.Applicative+import Control.Monad.Trans++import Agda.Compiler.Epic.AuxAST+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface++import qualified Agda.Syntax.Common   as S+import qualified Agda.Syntax.Internal as T+import Agda.TypeChecking.Monad (TCM, reportSDoc)+import Agda.TypeChecking.Pretty++#include "../../undefined.h"+import Agda.Utils.Impossible++-- | Check which arguments are forced+makeForcedArgs :: T.Type -> ForcedArgs+makeForcedArgs (T.El _ term) = case term of+    T.Pi  arg ab  -> isRel arg : makeForcedArgs (T.unAbs ab)+    _ -> []+  where+    isRel :: S.Arg T.Type -> Forced+    isRel arg = case S.argRelevance arg of+      S.Relevant   -> NotForced+      S.Irrelevant -> Forced+      S.NonStrict  -> Forced -- can never be executed+      S.Forced     -> Forced -- It can be inferred++-- | Remove forced arguments from constructors and branches+forceConstrs :: [Fun] -> Compile TCM [Fun]+forceConstrs fs = mapM forceFun fs++forceFun :: Fun -> Compile TCM Fun+forceFun e@(EpicFun{}) = return e+forceFun (Fun inline name qname comment args expr) =+    Fun inline name qname comment args <$> forceExpr expr+  where+    -- | Remove all arguments to constructors that we don't need to store in an+    --   expression.+    forceExpr :: Expr -> Compile TCM Expr+    forceExpr expr = case expr of+        Var v        -> return $ Var v+        Lit l        -> return $ Lit l+        Lam v e      -> Lam v <$> forceExpr e+        Con tag q es -> do+            -- We only need to apply the non-forced arguments+            forcArgs <- getForcedArgs q+            return $ Con tag q $ notForced forcArgs es+        App v es     -> App v <$> mapM forceExpr es+        Case e bs    -> Case <$> forceExpr e <*> mapM forceBranch bs+        Let v e e'   -> lett v <$> forceExpr e <*> forceExpr e'+        If a b c     -> If <$> forceExpr a <*> forceExpr b <*> forceExpr c+        Lazy e       -> Lazy <$> forceExpr e+        UNIT         -> return expr+        IMPOSSIBLE   -> return expr++    -- | Remove all the arguments that don't need to be stored in the constructor+    --   For the branch+    forceBranch :: Branch -> Compile TCM Branch+    forceBranch br = case br of+        Branch  tag name vars e -> do+            ir <- getForcedArgs name+            let vs = notForced ir vars+                subs = forced ir vars++            e'' <- if all (`notElem` fv e) subs+                  then return e+                  else __IMPOSSIBLE__ -- If so, the removal of forced args has gone wrong+            Branch tag name vs <$> forceExpr e''+        BrInt i e -> BrInt i <$> forceExpr e+        Default e -> Default <$> forceExpr e
src/full/Agda/Compiler/Epic/Forcing.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, ScopedTypeVariables #-} module Agda.Compiler.Epic.Forcing where  import Control.Applicative@@ -6,96 +6,66 @@ import Control.Monad import Control.Monad.State import Control.Monad.Trans-import Data.List++import Data.Char+import Data.List hiding (sort) import qualified Data.Map as M import Data.Maybe  import Agda.Syntax.Common-import Agda.Syntax.Internal-import Agda.TypeChecking.CompiledClause+import qualified Agda.Syntax.Internal as SI+import Agda.Syntax.Literal+import Agda.Syntax.Position(noRange)+import Agda.Syntax.Internal(Tele(..), Telescope, Term, Abs(..), unAbs, absName, Type, Args, QName, unEl) import Agda.TypeChecking.Monad import Agda.TypeChecking.Rules.LHS.Unify-import Agda.TypeChecking.Substitute-import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Rules.LHS.Instantiate+import Agda.TypeChecking.Substitute (raiseFrom, raise, substs, apply, TelV(..))+import qualified Agda.TypeChecking.Substitute as S+import Agda.TypeChecking.Pretty as P import Agda.TypeChecking.Reduce import Agda.TypeChecking.Telescope import Agda.Utils.List+import Agda.Utils.Monad+import Agda.Utils.Permutation import Agda.Utils.Size -import Agda.Compiler.Epic.CompileState hiding (conPars)-import Agda.Compiler.Epic.AuxAST(pairwiseFilter)+import Agda.Compiler.Epic.AuxAST+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Epic+import Agda.Compiler.Epic.Interface+import qualified Agda.Compiler.Epic.FromAgda as FA  #include "../../undefined.h" import Agda.Utils.Impossible --- | Replace the uses of forced variables in a CompiledClauses with the function---   arguments that they correspond to.---   Note that this works on CompiledClauses where the term's variable indexes---   have been reversed, which means that the case variables match the variables---   in the term.-removeForced :: MonadTCM m => CompiledClauses -> Type -> Compile m CompiledClauses-removeForced cc typ = do-  TelV tele _ <- lift $ telView typ-  remForced cc tele --- | Returns the type of a constructor given its name-constrType :: MonadTCM m => QName -> Compile m Type-constrType q = do-    map <- lift (gets (sigDefinitions . stImports))-    return $ maybe __IMPOSSIBLE__ defType (M.lookup q map)+-- | Returns how many parameters a datatype has+dataParameters :: QName -> Compile TCM Nat+dataParameters = lift . dataParametersTCM  -- | Returns how many parameters a datatype has-dataParameters :: MonadTCM m => QName -> Compile m Nat-dataParameters name = do-    m <- lift (gets (sigDefinitions . stImports))+dataParametersTCM :: QName -> TCM Nat+dataParametersTCM name = do+    m <- (gets (sigDefinitions . stImports))     return $ maybe __IMPOSSIBLE__ (defnPars . theDef) (M.lookup name m)   where     defnPars :: Defn -> Nat     defnPars (Datatype {dataPars = p}) = p     defnPars (Record   {recPars  = p}) = p-    defnPars _                         = 0 -- Not so sure about this.---- | Is variable n used in a CompiledClause?-isIn :: MonadTCM m => Nat -> CompiledClauses -> Compile m Bool-n `isIn` Case i brs | n == fromIntegral i = return True-                    | otherwise = n `isInCase` (fromIntegral i, brs)-n `isIn` Done _ t = return $ n `isInTerm` t-n `isIn` Fail     = return $ False--isInCase :: MonadTCM m => Nat -> (Nat, Case CompiledClauses) -> Compile m Bool-n `isInCase` (i, Branches { conBranches    = cbrs-                          , litBranches    = lbrs-                          , catchAllBranch = cabr}) = do-    cbrs' <- (or <$>) $ forM (M.toList cbrs) $ \ (constr, cc) -> do-        if i < n-          then do-            par <- fromIntegral <$> getConPar constr-            (n + par - 1) `isIn` cc-          else n `isIn` cc--    lbrs' <- (or <$>) $ forM (M.toList lbrs) $ \ (_, cc) ->-        (if i < n-           then (n - 1)-           else n) `isIn` cc--    cabr' <- case cabr of-        Nothing -> return False-        Just cc -> n `isIn` cc-    return (cbrs' || lbrs' || cabr')+    defnPars d                         = 0 -- error (show d) -- __IMPOSSIBLE__ -- Not so sure about this. +report n s = do+  lift $ reportSDoc "epic.forcing" n s -isInTerm :: Nat -> Term -> Bool-n `isInTerm` term = let recs = any (isInTerm n . unArg) in case term of-   Var i as -> i == n || recs as-   Lam _ ab -> (n+1) `isInTerm` absBody ab-   Lit _    -> False-   Def _ as -> recs as-   Con _ as -> recs as-   Pi a b   -> n `isInTerm` unEl (unArg a) || (n+1) `isInTerm` unEl (absBody b)-   Fun a b  -> n `isInTerm` unEl (unArg a) || n `isInTerm` unEl b-   Sort sor -> False -- ?-   MetaV meta as -> False -- can't occur?-   DontCare -> False+piApplyM' :: Type -> Args -> TCM Type+piApplyM' t as = do+ {- reportSDoc "" 10 $ vcat+    [ text "piApplyM'"+    , text "type: " <+> prettyTCM t+    , text "args: " <+> prettyTCM as+    ]-}+  piApplyM t as  {- | insertTele i xs t tele@@ -112,287 +82,228 @@ we raise the type since we have added xs' new bindings before Gamma, and as can only bind to Gamma. -}-insertTele :: MonadTCM m-            => Int        -- ^ ABS `pos` in tele+insertTele ::(QName, Args) -> Int        -- ^ ABS `pos` in tele             -> Maybe Type -- ^ If Just, it is the type to insert patterns from                           --   is nothing if we only want to delete a binding.             -> Term       -- ^ Term to replace at pos             -> Telescope  -- ^ The telescope `tele` where everything is at-            -> Compile m ( Telescope-                         , ( Type-                           , Type+            -> Compile TCM ( Telescope -- Resulting telescope+                           , ( Telescope+                             , Type -- The type at pos in tele+                             , Type -- The return Type of the inserted type+                             )                            )-                         )-                -- ^ Returns (resulting telescope, the type at pos in tele, the-                --   return type of the inserted type).-insertTele 0 ins term (ExtendTel t to) = do+insertTele x 0 ins term (ExtendTel t to) = do     t' <- lift $ normalise t-    let Def st arg = unEl . unArg $ t'+    report 12 $ vcat+      [ text "t' :" <+> prettyTCM t'+      , text "term:" <+> prettyTCM term+      , text "to:"   <+> prettyTCM (unAbs to)+      ]+    (st, arg) <- case SI.unEl . unArg $ t' of+            SI.Def st arg -> return (st, arg)+            s          -> do+              report 10 $ vcat+                [ text "ERROR!!!"+                , text "found: " <+> (text . show) s+                , text "ins"     <+> (prettyTCM . fromMaybe __IMPOSSIBLE__) ins+                ]+              return x     -- Apply the parameters of the type of t     -- Because: parameters occurs in the type of constructors but are not bound by it.     pars <- dataParameters st-    TelV ctele ctyp <- lift $ telView $ maybe (unArg t')-                            (`apply` take (fromIntegral pars) arg) ins+    report 10 $ text "apply in insertTele"+    TelV ctele ctyp <- lift $ telView =<< maybe (return $ unArg t')+                            (`piApplyM'` take (fromIntegral pars) arg) ins      () <- if length (take (fromIntegral pars) arg) == fromIntegral pars         then return ()         else __IMPOSSIBLE__     -- we deal with absBody to directly since we remove t-    return ( ctele +:+  (subst term $ raiseFrom 1 (size ctele) (absBody to))-           , (raise (size ctele) $ unArg t , ctyp)+    return ( ctele +:+  (S.subst term $ S.raiseFrom 1 (size ctele) (unAbs to))+           , (ctele, S.raise (size ctele) $ unArg t , ctyp)            )   where     -- Append the telescope, we raise since we add a new binding and all the previous     -- bindings need to be preserved     (+:+) :: Telescope -> Telescope -> Telescope     EmptyTel       +:+ t2 = t2-    ExtendTel t t1 +:+ t2 = ExtendTel t t1 {absBody = absBody t1 +:+ {-raise 1-} t2 }+    ExtendTel t t1 +:+ t2 = ExtendTel t (Abs (absName t1) $ unAbs t1 +:+ {-raise 1-} t2 ) -- This case is impossible since we are trying to split a variable outside the tele-insertTele n ins term EmptyTel = __IMPOSSIBLE__-insertTele n ins term (ExtendTel x xs) = do-    (xs', typ) <- insertTele (n - 1) ins term (absBody xs)-    return (ExtendTel x xs {absBody = xs'} , typ)+insertTele x n ins term EmptyTel = __IMPOSSIBLE__+insertTele er n ins term (ExtendTel x xs) = do+    (xs', typ) <- insertTele er (n - 1) ins term (unAbs xs)+    return (ExtendTel x $ Abs (absName xs) xs' , typ) -mkCon c n = Con c [ defaultArg $ Var (fromIntegral i) [] | i <- [n - 1, n - 2 .. 0] ]+mkCon c n = SI.Con c [ defaultArg $ SI.Var (fromIntegral i) [] | i <- [n - 1, n - 2 .. 0] ] -unifyI :: MonadTCM m => Telescope -> [Nat] -> Type -> Args -> Args -> Compile m [Maybe Term]+unifyI :: Telescope -> [Nat] -> Type -> Args -> Args -> Compile TCM [Maybe Term] unifyI tele flex typ a1 a2 = lift $ addCtxTel tele $ unifyIndices_ flex typ a1 a2  takeTele 0 _ = EmptyTel-takeTele n (ExtendTel t ts) = ExtendTel t ts {absBody = takeTele (n-1) (absBody ts) }+takeTele n (ExtendTel t ts) = ExtendTel t $ Abs (absName ts) $ takeTele (n-1) (unAbs ts) takeTele _ _ = __IMPOSSIBLE__ --- | Remove forced variables cased on in the current top-level case in the CompiledClauses-remForced :: MonadTCM m-     => CompiledClauses -- ^ Remove cases on forced variables in this-     -> Telescope       -- ^ The current context we are in-     -> Compile m CompiledClauses-remForced ccOrig tele = case ccOrig of-    Case n brs -> do-        -- Get all constructor branches-        cbs <- forM (M.toList $ conBranches brs) $ \(constr, cc) -> do-            par             <- getConPar  constr-            typ             <- constrType constr-            -- Update tele with the telescope from the constructor's type-            (tele', (ntyp, ctyp))   <- insertTele n (Just typ) (mkCon constr par) tele-            ntyp <- lift $ reduce ntyp-            ctyp <- lift $ reduce ctyp-            notForced       <- getIrrFilter constr-            -- Get the variables that are forced, relative to the position after constr-            forcedVars <- filterM ((`isIn` cc) . (flip subtract (fromIntegral $ n + par - 1)))-                        $ pairwiseFilter (map not notForced)-                        $ map fromIntegral [par-1,par-2..0]-            if null forcedVars-                then (,) constr <$> remForced cc tele'-                else do+-- | Main function for removing pattern matching on forced variables+remForced :: [Fun] -> Compile TCM [Fun]+remForced fs = do+    defs <- lift (gets (sigDefinitions . stImports))+    forM fs $ \f -> case f of+        Fun{} -> case funQName f >>= flip M.lookup defs of+            Nothing -> __IMPOSSIBLE__+            Just def -> do+                TelV tele _ <- lift $ telView (defType def)+                report 10 $ vcat+                  [ text "compiling fun" <+> (text . show) (funQName f)+                  ]+                e <- forcedExpr (funArgs f) tele (funExpr f)+                report 10 $ vcat+                  [ text "compilied fun" <+> (text . show) (funQName f)+                  , text "before:" <+> (text . prettyEpic) (funExpr f)+                  , text "after:" <+> (text . prettyEpic) e+                  ]+                return $ f { funExpr = e}+        EpicFun{} -> return f++-- | For a given expression, in a certain telescope (the list of Var) is a mapping+-- of variable name to the telescope.+forcedExpr :: [Var] -> Telescope -> Expr -> Compile TCM Expr+forcedExpr vars tele expr = case expr of+    Var _ -> return expr+    Lit _ -> return expr+    Lam x e -> Lam x <$> rec e -- necessary?+    Con t q es -> Con t q <$> mapM rec es+    App v es -> App v <$> mapM rec es+    If a b c -> If <$> rec a <*> rec b <*> rec c+    Let v e1 e2 -> Let v <$> rec e1 <*> rec e2+    Lazy e -> Lazy <$> rec e+    UNIT   -> return expr+    IMPOSSIBLE -> return expr+    Case v@(Var x) brs -> do+        let n = fromMaybe __IMPOSSIBLE__ $ elemIndex x vars+        (Case v <$>) . forM brs $ \ br -> case br of+            BrInt i e -> do+              (tele'', _) <-  insertTele __IMPOSSIBLE__ n Nothing (SI.Lit (LitChar noRange (chr i))) tele+              BrInt i <$> forcedExpr (replaceAt n vars []) tele'' e++            Default e -> Default <$> rec e+            Branch t constr as e -> do+                typ <- getType constr+                forc <- getForcedArgs constr+                (tele'', (_, ntyp, ctyp)) <- insertTele __IMPOSSIBLE__ n (Just typ)+                                                        (mkCon constr (length as)) tele+                ntyp <- lift $ reduce ntyp+                ctyp <- lift $ reduce ctyp++                if null (forced forc as)+                  then Branch t constr as <$> forcedExpr (replaceAt n vars as) tele'' e+                  else do+                    -- unify the telescope type with the return type of the constructor                     unif <- case (unEl ntyp, unEl ctyp) of-                        (Def st a1, Def st' a2) | st == st' -> do+                        (SI.Def st a1, SI.Def st' a2) | st == st' -> do                             typPars <- fromIntegral <$> dataParameters st-                            setType <- constrType st-                            {--                                We are splitting on C xs-                                we know that C : ts -> T ss ; for some T-                                we also know from tele that we are splitting on T as-                                we want to unify ss with as, but not taking into account-                                the Data parameters to T.-                            -}-                            unifyI (takeTele (n + par) tele')-                                   (map fromIntegral [0 .. n + par]) -- Don't unify the constructor arguments+                            setType <- getType st+                            report 10 $ vcat+                              [ text "ntyp:" <+> prettyTCM ntyp+                              , text "ctyp:" <+> prettyTCM ctyp+                              ]+                            unifyI (takeTele (n + length as) tele'')+                                   (map fromIntegral $ [0 .. n + length as])                                    (setType `apply` take typPars a1)                                    (drop typPars a1)                                    (drop typPars a2)-                        x -> __IMPOSSIBLE__-                    -- we calculate the new tpos from n (the old one) by adding-                    -- how many more bindings we have-                    (,) constr <$> replaceForced (fromIntegral $ n + par, tele')-                                                 forcedVars-                                                 (cc, unif)--        lbs <- forM (M.toList $ litBranches brs) $ \(lit, cc) -> do-            -- We have one less binding-            (newTele, _) <- insertTele n Nothing (Lit lit) tele-            (,) lit <$>  remForced cc newTele--        cabs <- case catchAllBranch brs of-            Nothing -> return Nothing-            Just cc -> Just <$> remForced cc tele--        return $ Case n brs { conBranches = M.fromList cbs-                            , litBranches = M.fromList lbs-                            , catchAllBranch = cabs }--    Done n t   -> return $ Done n t-    Fail       -> return Fail--data FoldState = FoldState-  { clauseToFix  :: CompiledClauses-  , clausesAbove :: CompiledClauses -> CompiledClauses-  , unification  :: [Maybe Term]-  , theTelescope :: Telescope-  , telePos      :: Nat-  } deriving Show---- Some utility functions--foldM' :: Monad m => a -> [b] -> (a -> b -> m a) -> m a-foldM' z xs f = foldM f z xs--lift2 :: (MonadTrans t, Monad (t1 m), MonadTrans t1, Monad m) => m a -> t (t1 m) a-lift2 = lift . lift--modifyM :: (MonadState a m) => (a -> m a) -> m ()-modifyM f = get >>= f >>= put -- (>>= put) . (get >>=)---- | replaceForced (tpos, tele) forcedVars (cc, unification)---   For each forceVar dig out the corresponding case and continue to remForced.-replaceForced :: MonadTCM m-              => (Nat, Telescope) -> [Nat] -> (CompiledClauses, [Maybe Term])-              -> Compile m CompiledClauses-replaceForced (telPos, tele) forcedVars (cc, unif) = do-    let origSt = FoldState-                  { clauseToFix  = cc-                  , clausesAbove = id-                  , unification  = unif-                  , theTelescope = tele-                  , telePos      = telPos-                  }-    st <- flip execStateT origSt $ forM forcedVars $ \ forcedVar -> do-        unif <- gets unification-        let (caseVar, caseTerm) = findPosition forcedVar unif-        telPos <- gets telePos-        termToBranch (telPos - caseVar - 1) caseTerm forcedVar-    clausesAbove st <$> remForced (clauseToFix st) (theTelescope st)+                        _ -> __IMPOSSIBLE__+                    let+                        lower = map (raise (-1)) . drop 1+                        isOk t = case t of+                          SI.Var n xs | n >= 0 -> all (isOk . unArg) xs+                          SI.Con _ xs -> all (isOk . unArg) xs+                          SI.Def f xs -> all (isOk . unArg) xs+                          _ -> error $ show t+                        subT 0 tel = let ss = [fromMaybe (SI.Var n []) t+                                              | (n , t) <- zip [0..] (unif ++ repeat Nothing)]+                                      in (S.substs ss tel, lower ss)+                        subT n (ExtendTel a t) = let+                               (tb' , ss) = subT (n - 1) (unAbs t)+                               a' | all isOk (take 100 ss) = S.substs ss a+                                  | True    = __IMPOSSIBLE__+                            in (ExtendTel a $ Abs (absName t) tb', lower ss)+                        subT _ _ = __IMPOSSIBLE__+                        (tele'''', _) = subT (n + length as) tele''+                    report 10 $ nest 2 $ vcat+                      [ text "remforced"+                      , text "tele=" <+> prettyTCM tele''+                      , text "tele'=" <+> prettyTCM tele''''+                      , text "unif=" <+> (text . show) unif+                      , text "forced=" <+> (text . show) (forced forc as)+                      , text "constr" <+> prettyTCM constr+                      ]+                    -- replace all forced variables found using the unification+                    Branch t constr as <$>+                        replaceForced (replaceAt n vars as, reverse $ take n vars ++ as)+                                      (tele'''') (forced forc as) unif e+    _ -> __IMPOSSIBLE__   where-    {--      In this function the following de Bruijn is:-        forcedVar : Relative-        caseVar : Absolute-        telePos : Absolute-    -}-    termToBranch :: MonadTCM m => Nat -> Term -> Nat -> StateT FoldState (Compile m) ()-    termToBranch caseVar caseTerm forcedVar = case caseTerm of-        Var i _ | i == forcedVar -> do-            telPos <- gets telePos-            let sub = [0..telPos - forcedVar - 2] ++ [caseVar] ++ [telPos - forcedVar..]-            modifyM $ \ st -> do-                newClauseToFix <- substCC sub (clauseToFix st)-                return st-                    { clauseToFix = newClauseToFix-                    , unification = substs (map (flip Var []) sub) (unification st)-                    }-                -- This is impossible since we have already looked and it should-                -- be the correct Var-                | otherwise -> __IMPOSSIBLE__-        Con c args -> do-            telPos <- gets telePos-            let (nextCaseVarInCon, nextCaseTerm) = findPosition forcedVar (map (Just . unArg) args)-                nextCaseVar = nextCaseVarInCon + caseVar-                newBinds    = fromIntegral $ length args - 1-                -- we have added newBinds new bindings and removed one before telePos-                nextTelePos = telPos + newBinds-            ctyp <- lift (constrType c)--            modifyM $ \ st -> do-                (newTele , _) <- lift $ insertTele (fromIntegral caseVar) (Just ctyp)-                                        (mkCon c (length args)) (theTelescope st)-                -- We have to update the unifications-list so that we don't try-                -- to dig out the same again later.-                let newUnif = raiseFrom (telPos - caseVar) newBinds $-                        replaceAt (fromIntegral $ telPos - caseVar - 1)-                                  (unification st)-                                  (reverse $ map (Just . unArg) args)-                                  -- The variables in the unification-list is-                                  -- relative so we need to reverse the args-                                  -- so they get in the right place.-                return st-                    { clauseToFix  = raiseFromCC caseVar newBinds-                                                 (substCCBody caseVar-                                                 (Con c $ map (defaultArg . flip Var [])-                                                              [caseVar .. caseVar + newBinds])-                                                 (clauseToFix st))-                    , theTelescope = newTele-                    , unification  = newUnif-                    , telePos      = nextTelePos-                    }-            st <- get-            termToBranch nextCaseVar nextCaseTerm forcedVar-            modify $ \ st -> st-                { clausesAbove = Case (fromIntegral caseVar) . conCase c . (clausesAbove st)-                }-        _ -> __IMPOSSIBLE__+    rec = forcedExpr vars tele --- Note: Absolute positions-raiseFromCC :: Nat -> Nat -> CompiledClauses -> CompiledClauses-raiseFromCC from add  cc = case cc of-    Case n (Branches cbr lbr cabr) -> Case (fromIntegral $ raiseN from add (fromIntegral n)) $-                                           Branches (M.map rec cbr)-                                                    (M.map rec lbr)-                                                    (fmap  rec cabr)-    Done i t -> Done (i + fromIntegral add) $ raiseFrom from add t-    Fail     -> Fail+-- | replace the forcedVar with pattern matching from the outside.+replaceForced :: ([Var],[Var]) -> Telescope -> [Var] -> [Maybe SI.Term] -> Expr -> Compile TCM Expr+replaceForced (vars,_) tele [] _ e = forcedExpr vars tele e+replaceForced (vars,uvars) tele (fvar : fvars) unif e = do+    let n = fromMaybe __IMPOSSIBLE__ $ elemIndex fvar uvars+    mpos <- findPosition (fromIntegral n) unif+    case mpos of+        Nothing -> case unif !! n of+            Nothing | fvar `notElem` fv e ->+              replaceForced (vars, uvars) tele fvars unif e+            Nothing -> do+              report 10 $ vcat+                [ text "failure comming!"+                , text "unif" <+> (text . show) unif+                , text "n" <+> (text . show) n+                , text "fvar" <+> (text fvar)+                , text "fv" <+> (text . show) (fv e)+                ]+              __IMPOSSIBLE__+            Just t  -> do+                v <- newName+                te <- FA.substTerm uvars t+                subst fvar v <$> replaceForced (vars, uvars)+                                               tele fvars unif (Let v te e)+        Just (pos , term) -> do+            (build, v) <- buildTerm (uvars !! fromInteger pos) (fromIntegral n) term+            build . subst fvar v <$> replaceForced (vars, uvars) tele fvars unif+                                     e   where-    rec = raiseFromCC from add-    raiseN :: Nat -> Nat -> Nat -> Nat-    raiseN from add n | from <= n = n + add-                      | otherwise = n+    sub fvar v = map $ \x -> if x == fvar then v else x --- | Substitute with the Substitution, this will adjust with the new bindings in the---   CompiledClauses-substCC :: MonadTCM m => [Nat] -> CompiledClauses -> StateT FoldState (Compile m) CompiledClauses-substCC ss cc = case cc of-    Done i t -> do-        return $ Done i (substs (map (flip Var []) ({-reverse $ take i -} ss)) t)-    Fail     -> return Fail-    Case n brs -> do-        {--          In a Case split, if we should change n to m, then all the binders in-          this pattern should also change from being based on n to be based on m.-        -}-        cbs <- forM (M.toList $ conBranches brs) $ \ (c, br) -> do-            nargs <- lift2 $ constructorArity c-            let delta = (ss !! n) - fi n-                ss'   = take n ss-                      ++ [fi n + delta .. fi n + delta + nargs - 1]-                      ++ map (+ (nargs - 1)) (drop (n+1) ss)-            (,) c <$> substCC ss' br+-- | Given a term containg the forced var, dig out the variable by inserting+-- the proper case-expressions.+buildTerm :: Var -> Nat -> Term -> Compile TCM (Expr -> Expr, Var)+buildTerm var idx (SI.Var i _) | idx == i = return (id, var)+buildTerm var idx (SI.Con c args) = do+    vs <- replicateM (length args) newName+    (pos , arg) <- fromMaybe __IMPOSSIBLE__ <$> findPosition idx (map (Just . unArg) args)+    (fun' , v) <- buildTerm (vs !! fromInteger pos) idx arg+    tag <- getConstrTag c+    let fun e = casee (Var var) [Branch tag c vs e]+    return (fun . fun' , v)+buildTerm _ _ _ = __IMPOSSIBLE__ -        lbs <- forM (M.toList $ litBranches brs) $ \ (l, br) -> do-            -- We have one less binder here-            (,) l <$> substCC (replaceAt n ss []) br -        cabs <- case catchAllBranch brs of-            Nothing -> return Nothing-            Just br -> Just <$> substCC ss br--        return $ Case (fromIntegral (ss !! n))-                  Branches { conBranches    = M.fromList cbs-                           , litBranches    = M.fromList lbs-                           , catchAllBranch = cabs-                           }-  where-    fi = fromIntegral---- | Substitute variable n for term t in the body of cc-substCCBody :: Nat -> Term -> CompiledClauses -> CompiledClauses-substCCBody n t cc = substsCCBody (vs [0..n - 1] ++ [t] ++ vs [n + 1..]) cc-  where vs = map (flip Var [])---- | Perform a substitution in the body of cc-substsCCBody :: [Term] -> CompiledClauses -> CompiledClauses-substsCCBody ss cc = case cc of-    Case n brs -> Case n (substsCCBody ss <$> brs)-    Done i t -> Done i (substs ss t)-    Fail     -> Fail- -- | Find the location where a certain Variable index is by searching the constructors --   aswell. i.e find a term that can be transformed into a pattern that contains the --   same value the index. This fails if no such term is present.-findPosition :: Nat -> [Maybe Term] -> (Nat, Term)-findPosition var ts = let Just n = findIndex (maybe False pred) ts-                       in (fromIntegral n , fromJust $ ts !! n)+findPosition :: Nat -> [Maybe SI.Term] -> Compile TCM (Maybe (Nat, SI.Term))+findPosition var ts = (listToMaybe . catMaybes <$>) . forM (zip [0..] ts) $ \ (n, mt) -> do+    ifM (maybe (return False) pred mt)+        (return (Just (n, fromMaybe __IMPOSSIBLE__ mt)))+        (return Nothing)   where-    pred :: Term -> Bool+    pred :: Term -> Compile TCM Bool     pred t = case t of-      Var i _ | var == i -> True-      Con _ args         -> any (pred . unArg) args-      _                  -> False+      SI.Var i _ | var == i -> return True+      SI.Con c args         -> do+          forc <- getForcedArgs c+          or <$> mapM (pred . unArg) (notForced forc args)+      _                  -> return False
src/full/Agda/Compiler/Epic/FromAgda.hs view
@@ -18,78 +18,94 @@ import qualified Agda.Syntax.Literal  as TL import qualified Agda.TypeChecking.CompiledClause as CC import Agda.TypeChecking.Monad+import Agda.TypeChecking.Level (reallyUnLevelView) import qualified Agda.TypeChecking.Substitute as S+import Agda.TypeChecking.Pretty  import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState hiding (conPars)-import Agda.Compiler.Epic.Forcing+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface+import Agda.Compiler.Epic.Static +import Agda.Compiler.Epic.Epic+ #include "../../undefined.h" import Agda.Utils.Impossible  -- | Convert from Agda's internal representation to our auxiliary AST.-fromAgda :: MonadTCM m => Maybe T.Term -> [(QName, Definition)] -> Compile m [Fun]+fromAgda :: Maybe T.Term -> [(QName, Definition)] -> Compile TCM [Fun] fromAgda msharp defs = catMaybes <$> mapM (translateDefn msharp) defs  -- | Translate an Agda definition to an Epic function where applicable-translateDefn :: MonadTCM m => Maybe T.Term -> (QName, Definition) -> Compile m (Maybe Fun)-translateDefn msharp (n, defini) = let n' = unqname n in case theDef defini of+translateDefn :: Maybe T.Term -> (QName, Definition) -> Compile TCM (Maybe Fun)+translateDefn msharp (n, defini) =+  let n' = unqname n+      epDef = compiledEpic $ defCompiledRep defini+  in case theDef defini of     d@(Datatype {}) -> do -- become functions returning unit         vars <- replicateM (fromIntegral $ dataPars d + dataIxs d) newName-        return . return $ Fun True n' ("datatype: " ++ show n) vars UNIT+        return . return $ Fun True n' (Just n) ("datatype: " ++ show n) vars UNIT     f@(Function{}) -> do-        irrF <- gets irrFilters-        let len   = length . clausePats . translatedClause . head .  funClauses $ f+        let projArgs = maybe 0 (pred . snd) (funProjection f)+        ccs  <- reverseCCBody projArgs <$> normaliseStatic (funCompiled f)+        let len   = (+ projArgs) . length . clausePats . head .  funClauses $ f             toEta = fromIntegral (arity (defType defini)) - len-            ccs   = reverseCCBody $ funCompiled f-        forcing <- lift $ gets (optForcing . stPersistentOptions)-        funComp <- if forcing-                    then removeForced ccs (defType defini)-                    else return ccs-        return <$> (etaExpand toEta =<< compileClauses n len funComp)+        -- forcing <- lift $ gets (optForcing . stPersistentOptions)+        lift $ reportSDoc "epic.fromagda" 5 $ text "compiling fun:" <+> prettyTCM n+        lift $ reportSDoc "epic.fromagda" 5 $ text "len:" <+> (text . show) len+        lift $ reportSDoc "epic.fromagda" 5 $ text "pats:" <+> (text . show) (clausePats+                    $ head $ funClauses f)+        modify $ \s -> s {curFun = show n}+        lift $ reportSDoc "epic.fromagda" 5 $ text "ccs: " <+> (text . show) ccs+        res <- return <$> (etaExpand toEta =<< compileClauses n len ccs)+        pres <- case res of+          Nothing -> return Nothing+          Just  c -> return <$> prettyEpicFun c+        lift $ reportSDoc "" 5 $ text $ show pres -- (fmap prettyEpicFun res)+        return res     Constructor{} -> do -- become functions returning a constructor with their tag         arit <- lift $ constructorArity n         tag   <- getConstrTag n         -- Sharp has to use the primSharp function from AgdaPrelude.e         case msharp of-          Just (T.Def sharp []) | sharp == n -> return <$> mkFun n' "primSharp" 3+          Just (T.Def sharp []) | sharp == n -> return <$> mkFun n n' "primSharp" 3           _    -> return <$> mkCon n tag arit     r@(Record{}) -> do         vars <- replicateM (fromIntegral $ recPars r) newName-        return . return $ Fun True n' ("record: " ++ show n) vars UNIT+        return . return $ Fun True n' (Just n) ("record: " ++ show n) vars UNIT     a@(Axiom{}) -> do -- Axioms get their code from COMPILED_EPIC pragmas-        case axEpDef a of-            Nothing -> return . return $ EpicFun n' ("AXIOM_UNDEFINED: " ++ show n)+        case epDef of+            Nothing -> return . return $ EpicFun n' (Just n) ("AXIOM_UNDEFINED: " ++ show n)                 $ "() -> Any = lazy(error \"Axiom " ++ show n ++ " used but has no computation\")"-            Just x  -> return . return $ EpicFun n' ("COMPILED_EPIC: " ++ show n) x+            Just x  -> return . return $ EpicFun n' (Just n) ("COMPILED_EPIC: " ++ show n) x     p@(Primitive{}) -> do -- Primitives use primitive functions from AgdaPrelude.e of the same name.                           -- Hopefully they are defined!       let ar = fromIntegral $ arity $ defType defini-      return <$> mkFun n' (primName p) ar+      return <$> mkFun n n' (primName p) ar   where-    mkFun = mkFunGen apps ("primitive: " ++)+    mkFun q = mkFunGen q apps ("primitive: " ++)     mkCon q tag ari = do         let name = unqname q-        mkFunGen (flip Con q) (const $ "constructor: " ++ show q) name tag ari-    mkFunGen :: Monad m-            => (name -> [Expr] -> Expr) -- ^ combinator+        mkFunGen q (flip Con q) (const $ "constructor: " ++ show q) name tag ari+    mkFunGen :: QName                    -- ^ Original name+            -> (name -> [Expr] -> Expr) -- ^ combinator             -> (name -> String)         -- ^ make comment             -> Var                      -- ^ Name of the function             -> name                     -- ^ Primitive function name             -> Int                      -- ^ Arity ofthe function-            -> Compile m Fun            -- ^ Result?-    mkFunGen comb sh name primname arit = do+            -> Compile TCM Fun            -- ^ Result?+    mkFunGen qn comb sh name primname arit = do         vars <- replicateM arit newName-        return $ Fun True name (sh primname) vars (comb primname (map Var vars))+        return $ Fun True name (Just qn) (sh primname) vars (comb primname (map Var vars)) -    etaExpand :: MonadTCM m => Int -> Fun -> Compile m Fun-    etaExpand num fun = do-        names <- replicateM num newName+    etaExpand :: Int -> Fun -> Compile TCM Fun+    etaExpand num fun = return fun -- do+{-        names <- replicateM num newName         return $ fun             { funExpr = funExpr fun @@ names             , funArgs = funArgs fun ++ names             }-+-}     (@@) :: Expr -> [Var] -> Expr     e @@ [] = e     e @@ vs = let ts = map Var vs in case e of@@ -101,7 +117,7 @@       App var es       -> App var (es ++ ts)       Case expr bs     -> Case expr (map (flip appBranch vs) bs)       If ea eb ec      -> If ea (eb @@ vs) (ec @@ vs)-      Let var el e'    -> Let var el (e' @@ vs)+      Let var el e'    -> lett var el (e' @@ vs)       Lazy e'          -> Lazy (e' @@ vs)       Lit _lit         -> IMPOSSIBLE -- Right?       UNIT             -> IMPOSSIBLE@@ -110,12 +126,14 @@     appBranch :: Branch -> [Var] -> Branch     appBranch b vs = b {brExpr = brExpr b @@ vs} -reverseCCBody :: CC.CompiledClauses -> CC.CompiledClauses-reverseCCBody cc = case cc of-    CC.Case n (CC.Branches cbr lbr cabr) -> CC.Case n $ CC.Branches (M.map reverseCCBody cbr)-                                                        (M.map reverseCCBody lbr)-                                                        (fmap  reverseCCBody cabr)-    CC.Done i t -> CC.Done i (S.substs (map (flip T.Var []) (reverse $ take i [0..])) t)+reverseCCBody :: Int -> CC.CompiledClauses -> CC.CompiledClauses+reverseCCBody c cc = case cc of+    CC.Case n (CC.Branches cbr lbr cabr) -> CC.Case (c+n)+        $ CC.Branches (M.map (reverseCCBody c) cbr)+          (M.map (reverseCCBody c) lbr)+          (fmap  (reverseCCBody c) cabr)+    CC.Done i t -> CC.Done i (S.substs (map (flip T.Var [])+                               (reverse $ take (length i) [fromIntegral c..])) t)     CC.Fail     -> CC.Fail  -- | Translate from Agda's desugared pattern matching (CompiledClauses) to our AuxAST.@@ -148,31 +166,30 @@ --   we have to add the catchAllBranch to each inner case (here we are calling --   it omniDefault). To avoid code duplication it is first bound by a let --   expression.-compileClauses :: MonadTCM m-               => QName+compileClauses :: QName                -> Int -- ^ Number of arguments in the definition-               -> CC.CompiledClauses -> Compile m Fun+               -> CC.CompiledClauses -> Compile TCM Fun compileClauses name nargs c = do     let n' = unqname name     vars <- replicateM nargs newName     e    <- compileClauses' vars Nothing c-    return $ Fun False n' ("function: " ++ show name) vars e+    return $ Fun False n' (Just name) ("function: " ++ show name) vars e   where-    compileClauses' :: MonadTCM m => [Var] -> Maybe Var -> CC.CompiledClauses -> Compile m Expr+    compileClauses' :: [Var] -> Maybe Var -> CC.CompiledClauses -> Compile TCM Expr     compileClauses' env omniDefault cc = case cc of         CC.Case n nc -> case length env <= n of            True -> __IMPOSSIBLE__            False -> case CC.catchAllBranch nc of             Nothing -> Case (Var (env !! n)) <$> compileCase env omniDefault n nc             Just de -> do-                var <- newName                 def <- compileClauses' env omniDefault de-                Let var (Lazy def) . Case (Var (env !! n)) <$> compileCase env (Just var) n nc+                bindExpr (lazy def) $ \ var ->+                  Case (Var (env !! n)) <$> compileCase env (Just var) n nc         CC.Done _ t -> substTerm ({- reverse -} env) t         CC.Fail     -> return IMPOSSIBLE -    compileCase :: MonadTCM m => [Var] -> Maybe Var -> Int -> CC.Case CC.CompiledClauses-                -> Compile m [Branch]+    compileCase :: [Var] -> Maybe Var -> Int -> CC.Case CC.CompiledClauses+                -> Compile TCM [Branch]     compileCase env omniDefault casedvar nc = do         cb <- if M.null (CC.conBranches nc)            -- Lit branch@@ -180,12 +197,13 @@                cc' <- compileClauses' (replaceAt casedvar env []) omniDefault cc                case l of                    TL.LitChar _ cha -> return $ BrInt (ord cha) cc'-                   _ -> __IMPOSSIBLE__ -- TODO: Handle other literals+                   -- TODO: Handle other literals+                   _ -> epicError $ "case on literal not supported: " ++ show l            -- Con branch            else forM (M.toList (CC.conBranches nc)) $ \(b, cc) -> do-               par  <- getConPar b+               arit  <- getConArity b                tag  <- getConstrTag b-               vars <- replicateM par newName+               vars <- replicateM arit newName                cc'  <- compileClauses' (replaceAt casedvar env vars) omniDefault cc                return $ Branch tag b vars cc' @@ -197,19 +215,27 @@ -- | Translate the actual Agda terms, with an environment of all the bound variables --   from patternmatching. Agda terms are in de Bruijn so we just check the new --   names in the position.-substTerm :: MonadTCM m => [Var] -> T.Term -> Compile m Expr+substTerm :: [Var] -> T.Term -> Compile TCM Expr substTerm env term = case term of     T.Var ind args -> case length env <= fromIntegral ind of         True  -> __IMPOSSIBLE__         False -> apps (env !! fromIntegral ind) <$> mapM (substTerm env . unArg) args-    T.Lam _ te -> do+    T.Lam _ (Abs _ te) -> do        name <- newName-       Lam name <$> substTerm (name : env) (absBody te)+       Lam name <$> substTerm (name : env) te+    T.Lam _ (NoAbs _ te) -> do+       name <- newName+       Lam name <$> substTerm env te     T.Lit l -> Lit <$> substLit l+    T.Level l -> substTerm env =<< lift (reallyUnLevelView l)     T.Def q args -> do       let name = unqname q       del <- getDelayed q-      f <- apps name <$> mapM (substTerm env . unArg) args+      def <- theDef <$> lift (getConstInfo q)+      let nr = case def of+                Function{funProjection = Just (_ , x)} -> pred x+                _ -> 0+      f <- apps name . (replicate nr UNIT ++) <$> mapM (substTerm env . unArg) args       return $ case del of         True  -> Lazy f         False -> f@@ -217,16 +243,14 @@         let con = unqname q         apps con <$> mapM (substTerm env . unArg) args     T.Pi _ _ -> return UNIT-    T.Fun _ _ -> return UNIT     T.Sort _  -> return UNIT     T.MetaV _ _ -> return UNIT-    T.DontCare  -> return UNIT+    T.DontCare _ -> return UNIT  -- | Translate Agda literals to our AUX definition-substLit :: MonadTCM m => TL.Literal -> Compile m Lit+substLit :: TL.Literal -> Compile TCM Lit substLit lit = case lit of   TL.LitInt    _ i -> return $ LInt i-  TL.LitLevel  _ i -> return $ LInt i   TL.LitString _ s -> return $ LString s   TL.LitChar   _ c -> return $ LChar c   TL.LitFloat  _ f -> return $ LFloat f
+ src/full/Agda/Compiler/Epic/Injection.hs view
@@ -0,0 +1,323 @@+{-# LANGUAGE CPP, TypeOperators, PatternGuards #-}+module Agda.Compiler.Epic.Injection where++import Control.Monad.State++import Data.Function+import Data.Ix+import Data.List+import Data.Map(Map)+import qualified Data.Map as M+import Data.Maybe+import Data.Set(Set)+import qualified Data.Set as S++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Literal+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Monad hiding ((!!!))+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.Utils.Monad+import Agda.Utils.Size++import Agda.Compiler.Epic.CompileState+import qualified Agda.Compiler.Epic.FromAgda as FA+import Agda.Compiler.Epic.Interface as Interface++#include "../../undefined.h"+import Agda.Utils.Impossible++-- | Find potentially injective functions, solve constraints to fix some constructor+--   tags and make functions whose constraints are fulfilled injections+findInjection :: [(QName, Definition)] -> Compile TCM [(QName, Definition)]+findInjection defs = do+    funs <- forM defs $ \(name, def) -> case theDef def of+        f@(Function{}) -> isInjective name (funClauses f)+        _              -> return Nothing+    newNames <- M.keys <$> gets (Interface.conArity . curModule)+    injFuns <- solve newNames (catMaybes funs)+    defs' <- forM defs $ \(q, def) -> case q `isIn` injFuns of+        Nothing -> return (q, def)+        Just inj@(InjectiveFun var arity) -> case theDef def of+            f@(Function{})   -> do+                modifyEI $ \s -> s { injectiveFuns = M.insert q inj (injectiveFuns s) }+                let ns = replicate (fromIntegral arity) (Arg NotHidden Relevant "")+                return $ (,) q $ def {theDef = f { funCompiled = Done ns+                                                                      (Var (arity - var - 1) []) } }+            _                -> __IMPOSSIBLE__++    lift $ reportSLn "epic.injection" 10 $ "injfuns: " ++ show injFuns+    return defs'+  where+    q `isIn` funs = case filter (\(nam, _) -> q == nam) funs of+        []   -> Nothing+        (_,x):_  -> Just x++replaceFunCC :: QName -> CompiledClauses -> Compile TCM ()+replaceFunCC name cc = do+    lift $ modify $ \s ->+        s { stSignature = (stSignature s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stSignature s)) }+          , stImports   = (stImports   s) { sigDefinitions = M.adjust replaceDef name (sigDefinitions (stImports   s)) }+          }+  where+    replaceDef :: Definition -> Definition+    replaceDef def = case theDef def of+        f@(Function{}) -> def {theDef = f { funCompiled = cc } }+        x                -> __IMPOSSIBLE__++-- | If the pairs of constructor names have the same tags, the function is+--   injective. If Nothing, the function is not injective.+type InjConstraints = Maybe [(QName,QName)]+++isInjective :: QName    -- ^ Name of the function being tested+            -> [Clause] -- ^ The function's clauses+            -> Compile TCM (Maybe ((QName, InjectiveFun)+                                  , [(QName, QName)] -- These construtors should have the same name+                                  ))+isInjective nam []  = return Nothing+isInjective nam cls@(cl : _) = do+    let total = genericLength . clausePats $ cl+    (listToMaybe . catMaybes <$>) . forM [0 .. total - 1] $ \i -> do+        cli <- forM cls $ \ cl -> isInjectiveHere nam i  cl+        let cli' = catMaybes cli+        return $ if length cli == length cli'+             then Just ((nam, InjectiveFun (fromIntegral i) (fromIntegral total)), concat cli')+             else Nothing++remAbs :: ClauseBody -> Term+remAbs b = case b of+    Body t     -> t+    Bind ab    -> remAbs $ absBody ab+    NoBody     -> __IMPOSSIBLE__++isNoBody :: ClauseBody -> Bool+isNoBody b = case b of+    Body t     -> False+    Bind ab    -> isNoBody $ absBody ab+    NoBody     -> True++patternToTerm :: Nat -> Pattern -> Term+patternToTerm n p = case p of+    VarP v          -> Var n []+    DotP t          -> t+    ConP c typ args -> Con c $ zipWith (\ arg t -> arg {unArg = t}) args+                             $ snd+                             $ foldr (\ arg (n, ts) -> (n + nrBinds arg, patternToTerm n arg : ts))+                                     (n , [])+                             $ map unArg args+    LitP l          -> Lit l++nrBinds :: Num i => Pattern -> i+nrBinds p = case p of+    VarP v          -> 1+    DotP t          -> 0+    ConP c typ args -> sum $ map (nrBinds . unArg) args+    LitP l          -> 0++substForDot :: [Arg Pattern] -> Substitution+substForDot ps = map (flip Var []) (makeSubst 0 0 $ reverse $ calcDots ps)+  where+    makeSubst i accum [] = [i + accum ..]+    makeSubst i accum (True  : ps) = makeSubst i (accum +1) ps+    makeSubst i accum (False : ps) = i + accum : makeSubst (i+1) accum ps++    calcDots = concatMap calcDots' . map unArg+    calcDots' p = case p of+        VarP v          -> [False]+        DotP t          -> [True]+        ConP c typ args -> calcDots args+        LitP l          -> [False]++isInjectiveHere :: QName  -- ^ Name of the function being tested+                -> Int    -- ^ The current argument+                -> Clause+                -> Compile TCM InjConstraints+isInjectiveHere nam idx Clause {clauseBody = body} | isNoBody body = return emptyC+isInjectiveHere nam idx clause = do+    let t    = patternToTerm idxR $ unArg $ clausePats clause !! idx+        t'   = substs (substForDot $ clausePats clause) t+        idxR = sum . map (nrBinds . unArg) . genericDrop (idx + 1) $ clausePats clause+        body = remAbs $ clauseBody clause+    body' <- lift $ reduce body+    injFs <- gets (injectiveFuns . importedModules)+    res <- (t' <: body') (M.insert nam (InjectiveFun (fromIntegral idx)+                                                     (genericLength (clausePats clause))) injFs)+    lift $ reportSDoc "epic.injection" 20 $ vcat+      [ text "isInjective:" <+> text (show nam)+      , text "at Index   :" <+> text (show idx)+      , nest 2 $ vcat+          [ text "clause     :" <+> text (show clause)+          , text "t          :" <+> prettyTCM t+          , text "idxR       :" <+> (text . show) idxR+          , text "body'      :" <+> (text . show) body'+          ]+      , text "res      :" <+> text (show res)+      ]+    return res++litToCon :: Literal -> TCM Term+litToCon l = case l of+    LitInt   r n | n > 0     -> do+        inner <- litToCon (LitInt r (n - 1))+        suc   <- primSuc+        return $ suc `apply` [defaultArg inner]+                 | otherwise -> primZero+--    LitLevel _ n -> -- Does not really matter+    lit          -> return $ Lit lit++litCon :: Literal -> Bool+litCon (LitInt _ _) = True+litCon _          = False++insertAt :: (Nat,Term) -> Term -> Term+insertAt (index, ins) = substs [if i == index then ins else Var i [] | i <- [0 .. ]]+++solve :: [QName] -> [((QName, InjectiveFun), [(QName,QName)])] -> Compile TCM [(QName, InjectiveFun)]+solve newNames xs = do+    -- Only primitive lists should be in the current module at this point,+    -- but we still want them+    conGraph <- M.union <$> gets (constrTags . curModule) <*> gets (constrTags . importedModules)+    (funs, mconstr) <- ($ xs) $ flip foldM ([] , Just $ initialTags conGraph newNames) $ \ (xs , prev) (fun , con) -> do+         m <- foldM solvable prev con+         return $ case m of+            Nothing -> (xs, prev)+            Just next -> (fun : xs, m)+    case mconstr of+        Nothing -> __IMPOSSIBLE__+        Just constr -> updateTags constr+    return funs+  where+    solvable :: Maybe Tags -> (QName, QName)+             -> Compile TCM (Maybe Tags)+    solvable Nothing _          = return Nothing+    solvable (Just st) (c1, c2) = unify c1 c2 st++    updateTags :: Tags -> Compile TCM ()+    updateTags tags = do+        let (hasTags, eqs) = M.partition isTag (constrGroup tags)+            isTag (IsTag _) = True+            isTag _         = False+        forM (M.toList hasTags) $ \ (c, tagged) -> case tagged of+            IsTag tag -> putCon c tag+            _         -> __IMPOSSIBLE__+        case M.toList eqs of+            (c, Same n) : _ -> do+                let grp = eqGroups tags !!! n+                tag <- assignConstrTag' c (S.toList grp)+                updateTags . fromMaybe __IMPOSSIBLE__ =<< setTag n tag tags { constrGroup = eqs }+            _              -> return ()+    putCon :: QName -> Tag -> Compile TCM ()+    putCon con tag = do+        m <- gets (constrTags . importedModules)+        case M.lookup con m of+            Nothing -> putConstrTag con tag+            Just _  -> return () -- old++emptyC :: InjConstraints+emptyC = Just []++addConstraint :: QName -> QName -> InjConstraints -> InjConstraints+addConstraint q1 q2 Nothing   = Nothing+addConstraint q1 q2 (Just xs) = Just (if q1 == q2 then xs else (q1,q2) : xs)++unionConstraints :: [InjConstraints] -> InjConstraints+unionConstraints [] = Just []+unionConstraints (Nothing : _) = Nothing+unionConstraints (Just c : cs) = do+    cs' <- unionConstraints cs+    return (c ++ cs')++-- | Are two terms injectible?+--   Precondition: t1 is normalised, t2 is in WHNF+-- When reducing t2, it may become a literal, which makes this not work in some cases...+(<:) :: Term -> Term -> (QName :-> InjectiveFun) -> Compile TCM InjConstraints+(Lit l        <:  t1)          injs | litCon l = do+    l' <- lift $ litToCon l+    (l' <: t1) injs+(t1 <: Lit l)                  injs | litCon l = do+    l' <- lift $ litToCon l+    (t1 <: l') injs+(t1           <: Def n2 args2) injs | Just (InjectiveFun argn arit) <- M.lookup n2 injs =+    if genericLength args2 /= arit+        then return Nothing+        else do+            arg <- lift $ reduce $ unArg $ args2 !! fromIntegral argn+            (t1 <: arg) injs+-- (Var n1 []    <: Var n2 [])    nam idx = return $ if n1 == n2 then emptyC else Nothing+(Var n1 args1 <: Var n2 args2) injs | n1 == n2 && length args1 == length args2 = do+    args1' <- map unArg <$> mapM (lift . reduce) args1+    args2' <- map unArg <$> mapM (lift . reduce) args2+    unionConstraints <$> zipWithM (\a b -> (a <: b) injs) args1' args2'+(Def q1 args1 <: Def q2 args2) injs | q1 == q2 && length args1 == length args2 = do+    args1' <- map unArg <$> mapM (lift . reduce) args1+    args2' <- map unArg <$> mapM (lift . reduce) args2+    unionConstraints <$> zipWithM (\a b -> (a <: b) injs) args1' args2'+(Con c1 args1 <: Con c2 args2) injs = do+    args1' <- map unArg <$> flip notForced args1 <$> getForcedArgs c1+    args2' <- map unArg <$> (mapM (lift . reduce) =<< flip notForced args2 <$> getForcedArgs c2)+    if length args1' == length args2'+        then addConstraint c1 c2 <$> unionConstraints <$> zipWithM (\a b -> (a <: b) injs) args1' args2'+        else return Nothing+(_            <: _) _ = return Nothing++data TagEq+    = Same Int+    | IsTag Tag+  deriving Eq++data Tags = Tags+    { eqGroups    :: Int :-> Set QName+    , constrGroup :: QName :-> TagEq+    }++initialTags :: Map QName Tag -> [QName] -> Tags+initialTags setTags newNames = Tags+    { eqGroups    = M.fromList $ zip [0..] (map S.singleton newNames)+    , constrGroup = M.map IsTag setTags `M.union` M.fromList (zip newNames (map Same [0..]))+    }++unify :: QName -> QName -> Tags -> Compile TCM (Maybe Tags)+unify c1 c2 ts = do+    let g1 = constrGroup ts !!! c1+        g2 = constrGroup ts !!! c2+    case (g1, g2) of+        (Same n1, Same n2)   | n1 == n2 -> return $ Just ts+        (IsTag t1, IsTag t2) | t1 == t2 -> return $ Just ts+        (Same n1, Same n2)   -> mergeGroups n1 n2 ts+        (Same n1, IsTag t2)  -> setTag n1 t2 ts+        (IsTag t1 , Same n2) -> setTag n2 t1 ts+        _                    -> return $ Nothing++setTag :: Int -> Tag -> Tags -> Compile TCM (Maybe Tags)+setTag gid tag ts = return $ Just $ ts+    { constrGroup = foldr (\c -> M.insert c (IsTag tag)) (constrGroup ts) (S.toList $ eqGroups ts !!! gid)}++mergeGroups :: Int -> Int -> Tags -> Compile TCM (Maybe Tags)+mergeGroups n1 n2 ts = do+    let g1s = eqGroups ts !!! n1+        g2s = eqGroups ts !!! n2+        gs  = S.union g1s g2s+    ifM (not . and <$> sequence [unifiable e1 e2 | e1 <- S.toList g1s, e2 <- S.toList g2s])+        (return Nothing) $+        return $ Just $ ts+            { eqGroups    = M.delete n2 $ M.insert n1 gs (eqGroups ts)+            , constrGroup = M.fromList [(e2, Same n1) | e2 <- S.toList g2s] `M.union` constrGroup ts+            }++unifiable :: QName -> QName -> Compile TCM Bool+unifiable c1 c2 = do+    d1 <- getConData c1+    d2 <- getConData c2+    return $ d1 /= d2++(!!!) :: Ord k => k :-> v -> k -> v+m !!!  k = case M.lookup k m of+    Nothing -> __IMPOSSIBLE__+    Just x  -> x
+ src/full/Agda/Compiler/Epic/Interface.hs view
@@ -0,0 +1,87 @@+{-# LANGUAGE DeriveDataTypeable #-}+-- | Epic interface data structure, which is serialisable and stored for each+--   compiled file+module Agda.Compiler.Epic.Interface where++import Control.Monad++import Data.Function+import qualified Data.Map as M+import Data.Map(Map)+import Data.Monoid+import qualified Data.Set as S+import Data.Set(Set)+import Data.Typeable++import Agda.Syntax.Common (Nat)+import Agda.Syntax.Internal++type Var       = String+data Tag       = Tag Int+               | PrimTag Var+  deriving (Show, Eq, Ord, Typeable)++data Forced = NotForced | Forced+  deriving (Show, Typeable, Eq)++-- | Filter a list using a list of Bools specifying what to keep.+pairwiseFilter :: [Bool] -> [a] -> [a]+pairwiseFilter (True :bs) (a:as) = a : pairwiseFilter bs as+pairwiseFilter (False:bs) (_:as) = pairwiseFilter bs as+pairwiseFilter _           _     = []++notForced :: ForcedArgs -> [a] -> [a]+notForced = pairwiseFilter . map (== NotForced)++forced :: ForcedArgs -> [a] -> [a]+forced = pairwiseFilter . map (== Forced)++data Relevance+  = Irr+  | Rel+  deriving (Eq, Ord, Show, Typeable)++type ForcedArgs   = [Forced]+type RelevantArgs = [Relevance]++data InjectiveFun = InjectiveFun+  { injArg     :: Nat+  , injArity   :: Nat+  }+  deriving (Show, Typeable, Eq)++data EInterface = EInterface+    { constrTags    :: Map QName Tag+    , definitions   :: Set Var+    , defDelayed    :: Map QName Bool+    , conArity      :: Map QName Int+    , mainName      :: Maybe QName+    , relevantArgs  :: Map Var   RelevantArgs+    , forcedArgs    :: Map QName ForcedArgs+    , injectiveFuns :: Map QName InjectiveFun+    } deriving (Typeable, Show)++instance Monoid EInterface where+  mempty = EInterface+      { constrTags    = mempty+      , definitions   = mempty+      , defDelayed    = mempty+      , conArity      = mempty+      , mainName      = Nothing+      , relevantArgs  = mempty+      , forcedArgs    = mempty+      , injectiveFuns = mempty+      }+  mappend x y = EInterface+      { constrTags    = comb constrTags+      , definitions   = comb definitions+      , defDelayed    = comb defDelayed+      , conArity      = comb conArity+      , mainName      = mainName x `mplus` mainName y+      , relevantArgs  = comb relevantArgs+      , forcedArgs    = comb forcedArgs+      , injectiveFuns = comb injectiveFuns+      }+    where+      comb :: Monoid a => (EInterface -> a) -> a+      comb f = (mappend `on` f) x y
− src/full/Agda/Compiler/Epic/LambdaLift.hs
@@ -1,60 +0,0 @@--- | Lift lambda expressions to top level definitions (Epic does not support---   lambdas).-module Agda.Compiler.Epic.LambdaLift where--import Control.Applicative-import Control.Monad.Trans-import Control.Monad.Writer-import qualified Data.Set as S--import Agda.Compiler.Epic.AuxAST-import Agda.Compiler.Epic.CompileState--import Agda.TypeChecking.Monad.Base (MonadTCM)---- | LL makes it possible to emit new functions when we encounter a lambda-type LL = WriterT [Fun]---- | lambda lift all the functions-lambdaLift :: MonadTCM m => [Fun] -> Compile m [Fun]-lambdaLift fs = do-  concat <$> sequence-    [do (f', lifts) <- runWriterT (lambdaLiftFun f)-        return $ f' : lifts-    | f <- fs]---- | λ lift a function, this is in a LL (Writer monad)-lambdaLiftFun :: MonadTCM m => Fun -> LL (Compile m) Fun-lambdaLiftFun (Fun i name c vs e) = Fun i name c vs <$> lambdaLiftExpr e-lambdaLiftFun f@(EpicFun _ _ _)   = return f---- | λ lift an expression, put all the new definitions in the writer monad-lambdaLiftExpr :: MonadTCM m => Expr -> LL (Compile m) Expr-lambdaLiftExpr expr = case expr of-    Var _    -> return expr-    Lit _    -> return expr-    e1@(Lam _ _) -> do-      -- This is the only difficult case, get a group of lambda binders,-      -- lambda lift the body of it, and create a new supercombinator from-      -- this.-      let (vs, e2) = collectLam e1-      topBinding <- lift topBindings-      let vs' = filter (`S.notMember` topBinding) $ fv e1-      e3 <- lambdaLiftExpr e2-      name <- lift newName-      tell [Fun True name "lambda" (vs' ++ vs) e3]-      return $ apps name (map Var vs')-    Con c n es -> Con c n <$> mapM lambdaLiftExpr es-    App v es -> App v <$> mapM lambdaLiftExpr es-    Case e brs -> Case <$> lambdaLiftExpr e-                       <*> mapM (\br -> do lle <- lambdaLiftExpr $ brExpr br; return br {brExpr = lle}) brs-    If a b c   -> If <$> lambdaLiftExpr a <*> lambdaLiftExpr b <*> lambdaLiftExpr c-    Let v e e' -> Let v <$> lambdaLiftExpr e <*> lambdaLiftExpr e'-    Lazy e     -> Lazy <$> lambdaLiftExpr e-    UNIT       -> return UNIT-    IMPOSSIBLE -> return IMPOSSIBLE-  where-    -- | Collect all the variables in a group of lambdas-    collectLam :: Expr -> ([Var], Expr)-    collectLam (Lam v e) = let (vs, e') = collectLam e in (v:vs, e')-    collectLam e         = ([], e)
src/full/Agda/Compiler/Epic/NatDetection.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- | Detect if a datatype could be represented as a primitive integer. --   If it has one constructor with no arguments and one with a recursive --   argument this is true. This is done using IrrFilters which filter out@@ -14,49 +15,61 @@  import Agda.TypeChecking.Monad import Agda.Syntax.Internal+import Agda.TypeChecking.Substitute import Agda.Syntax.Common -import Agda.Compiler.Epic.CompileState hiding (conPars)+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface +#include "../../undefined.h"+import Agda.Utils.Impossible+ -- | Get a list of all the datatypes that look like nats. The [QName] is on the --   form [zeroConstr, sucConstr]-getNatish :: MonadTCM m => Compile m [(IrrFilter,[QName])]+getNatish :: Compile TCM [(ForcedArgs, [QName])] getNatish = do   sig <- lift (gets (sigDefinitions . stImports))   let defs = M.toList sig   fmap catMaybes $ forM defs $ \(q, def) ->     case theDef def of-      d@(Datatype {}) -> do -- A datatype ...-          case dataCons d of-              constrs | length constrs == 2 -> do -- with two constructors ...-                  z <- zip constrs <$> mapM getIrrFilter constrs-                  case sortBy (compare `on` nrRel . snd) z of-                    [(cz,fz), (cs,fs)] -> do-                      let ts = defType $ sig M.! cs-                          nr = fromIntegral $ dataPars d-                      return $ do-                       guard (nrRel fz == 0) -- where one constructor has zero arguments ...-                       guard (nrRel fs == 1) -- and the other one one argument ...-                       guard (isRec ((fromJust $ elemIndex True fs) + nr) ts q) -- which is recursive.-                       return (fs, [cz, cs]) -- It's natish!-                    _ -> return Nothing-              _       -> return Nothing+      d@(Datatype {}) -> isNatish q d+       _ -> return Nothing +isNatish :: QName -> Defn -> Compile TCM (Maybe (ForcedArgs, [QName]))+isNatish q d = do -- A datatype ...+    case dataCons d of+        constrs | length constrs == 2 -> do -- with two constructors ...+            b <- and <$> mapM constrInScope constrs+            if b+              then do+                z <- zip constrs <$> mapM getForcedArgs constrs+                case sortBy (compare `on` nrRel . snd) z of+                  [(cz,fz), (cs,fs)] -> do+                    sig <- lift (gets (sigDefinitions . stImports))+                    let ts = defType $ sig M.! cs+                        nr = fromIntegral $ dataPars d+                    return $ do+                     guard (nrRel fz == 0) -- where one constructor has zero arguments ...+                     guard (nrRel fs == 1) -- and the other one one argument ...+                     guard (isRec ((fromMaybe __IMPOSSIBLE__ $ elemIndex NotForced fs) + nr) ts q) -- which is recursive.+                     return (fs, [cz, cs]) -- It's natish!+                  _ -> return Nothing+              else return Nothing+        _       -> return Nothing+ -- | Count the number of relevant arguments-nrRel :: IrrFilter -> Integer-nrRel = sum . map (const 1) . filter id+nrRel :: ForcedArgs -> Integer+nrRel = sum . map (const 1) . filter (== NotForced)  -- | Check if argument n is recursive isRec :: Int -> Type -> QName -> Bool isRec 0 (El _ t) dat = case t of-    Fun arg _ -> argIsDef (unArg arg) dat     Pi  arg _ -> argIsDef (unArg arg) dat-    _       -> False+    _         -> False isRec n (El _ t) dat = case t of-    Pi  _ ab  -> isRec (n - 1) (absBody ab) dat-    Fun _ typ -> isRec (n - 1) typ           dat-    _           -> False+    Pi  _ ab  -> isRec (n - 1) (unAbs ab) dat+    _         -> False  argIsDef :: Type -> QName -> Bool argIsDef (El _ t) dat = case t of
src/full/Agda/Compiler/Epic/Primitive.hs view
@@ -18,6 +18,7 @@  import Agda.Compiler.Epic.AuxAST import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface import Agda.Compiler.Epic.NatDetection  #include "../../undefined.h"@@ -30,87 +31,96 @@   , translateCase :: Expr -> [Branch] -> Expr   } +prZero, prSuc, prTrue, prFalse, prPred, prNatEquality :: Var+prZero  = "primZero"+prSuc   = "primSuc"+prTrue  = "primTrue"+prFalse = "primFalse"+prPred  = "primPred"+prNatEquality = "primNatEquality"+ -- | Change constructors and cases on builtins and natish datatypes to use --   primitive data-primitivise :: MonadTCM m => [Fun] -> Compile m [Fun]+primitivise :: [Fun] -> Compile TCM [Fun] primitivise funs = do     ptfs   <- getBuiltins     natish <- getNatish-    lists  <- primLists-    (++ lists) <$> mapM (primFun $ ptfs ++ map (uncurry natPrimTF) natish) funs+    mapM (primFun $ ptfs ++ map (uncurry natPrimTF) natish) funs --- | Create primitive functions if list constructors are marked as builtins-primLists :: MonadTCM m => Compile m [Fun]-primLists = do-    mnil  <- lift $ getBuiltin' builtinNil-    mcons <- lift $ getBuiltin' builtinCons-    case (mnil, mcons) of-      (Just (T.Con nil []), Just (T.Con cons [])) -> do-          [nilT, consT] <- mapM getConstrTag [nil, cons]-          let fun s n = Fun-                   { funInline  = True-                   , funName    = "prim" ++ s-                   , funComment = "BUILTIN " ++ s-                   , funArgs    = []-                   , funExpr    = Var (unqname n)-                   }-          return [ fun "Nil" nil-                 , fun "Cons" cons-                 , Fun-                    { funInline  = False-                    , funName    = "primListElim"-                    , funComment = "Eliminator for Lists"-                    , funArgs    = ["op" , "z" , "xs"]-                    , funExpr    = Case (Var "xs")-                        [ Branch nilT nil [] $ Var "z"-                        , Branch consT cons ["y", "ys"] $-                            App "op" [ Var "y"-                                     , App "primListElim" [ Var "op"-                                                          , Var "z"-                                                          , Var "ys"-                                                          ]-                                     ]-                        ]-                    }-                 ]-      _                     -> return []+-- | Map primitive constructors to primitive tags+initialPrims :: Compile TCM () -- [Fun]+initialPrims = do+  -- TODO: Natishness is calculated here and could be stored so it does not have+  --       to be recalculated in primitivise+  natish <- getNatish+  -- This has to be done because injection detection may otherwise flag injections+  -- between non-primitive and primitive datatypes in the wrong way+  sequence_ [zipWithM_ putConstrTag [zc, sc] (prim [prZero, prSuc])+            | (_, [zc, sc]) <- natish]+  sequence_+    [ [builtinNil, builtinCons]           ~> tags [0, 1]+    , [builtinZero, builtinSuc  ]         ~> prim [prZero, prSuc]+    , [builtinLevelZero, builtinLevelSuc] ~> prim [prZero, prSuc]+    , [builtinTrue, builtinFalse]         ~> prim [prTrue, prFalse]+    , [builtinRefl]                       ~> tags [0]+    ]+  where+    prim = map PrimTag+    tags = map Tag+    constrs ~> tags = do+        builtins  <- lift $ mapM getBuiltin' constrs+        if all isJust builtins+           then do+                let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins+                -- b <- and <$>  mapM constrInScope names+                -- if b then return $ Just (transf names) else return Nothing+                zipWithM_ putConstrTag names tags+           else return ()+ -- | Build transforms using the names of builtins-getBuiltins :: MonadTCM m => Compile m [PrimTransform]+getBuiltins :: Compile TCM [PrimTransform] getBuiltins =     catMaybes <$> sequence-      [ [builtinZero, builtinSuc  ]         ~> natPrimTF [True]-       -- ? is this ok to have [True]-      , [builtinLevelZero, builtinLevelSuc] ~> natPrimTF [True]+      [ [builtinZero, builtinSuc  ]         ~> natPrimTF [NotForced]+       -- ? is this ok to have [NotForced]+      , [builtinLevelZero, builtinLevelSuc] ~> natPrimTF [NotForced]       , [builtinTrue, builtinFalse]         ~> boolPrimTF       ]   where     constrs ~> transf = do-        builtins <- lift $ mapM getBuiltin' constrs+        builtins  <- lift $ mapM getBuiltin' constrs         if all isJust builtins-           then return $ Just (transf (map (defName . fromMaybe __IMPOSSIBLE__) builtins))+           then do+                let names = map (defName . fromMaybe __IMPOSSIBLE__) builtins+                b <- and <$>  mapM constrInScope names+                if b then return $ Just (transf names) else return Nothing            else return Nothing-    defName (T.Def q []) = q-    defName (T.Con q []) = q-    defName _            = __IMPOSSIBLE__ +defName (T.Def q []) = q+defName (T.Con q []) = q+defName _            = __IMPOSSIBLE__++head'' (x:xs) e = x+head'' _      e = e+ -- | Translation to primitive integer functions-natPrimTF :: IrrFilter -> [QName] -> PrimTransform+natPrimTF :: ForcedArgs -> [QName] -> PrimTransform natPrimTF filt [zero, suc] = PrimTF-  { mapCon = M.fromList [(zero, "primZero"), (suc, "primSuc")]+  { mapCon = M.fromList [(zero, prZero), (suc, prSuc)]   , translateCase = \ce brs -> case brs of         -- Assuming only the first two branches are relevant when casing on Nats-        (Branch _ n vs e:Branch _ _n' vs' e':_) ->+        (Branch _ n vs e:Branch _ _n' vs'' e'':_) ->             if n == zero-               then primNatCaseZS ce e  (head (pairwiseFilter filt vs')) e'-               else primNatCaseZS ce e' (head (pairwiseFilter filt vs )) e-        (Branch _ n vs e:Default e':_) ->+               then primNatCaseZS ce e  (head'' vs'' __IMPOSSIBLE__) e''+               else primNatCaseZS ce e'' (head'' vs __IMPOSSIBLE__) e+        (Branch _ n vs e:Default e'':_) ->             if n == zero-               then primNatCaseZD ce e e' -- zero-               else primNatCaseZS ce e' (head (pairwiseFilter filt vs )) e -- suc+               then primNatCaseZD ce e e'' -- zero+               else primNatCaseZS ce e'' (head'' vs __IMPOSSIBLE__) e -- suc         [ Branch _ n vs e ] ->             if n == zero               then e-              else Let (head (pairwiseFilter filt vs)) (App "primPred" [ce]) e+              else lett (head'' vs __IMPOSSIBLE__) (App prPred [ce]) e         _ -> __IMPOSSIBLE__   } natPrimTF _ _ = __IMPOSSIBLE__@@ -122,19 +132,19 @@               -> Expr -- ^ Expression used for suc branch               -> Expr -- ^ Result? primNatCaseZS n zeroBr v sucBr =-    If (App "primNatEquality" [n, Var "primZero"]) zeroBr (Let v (App "primPred" [n]) sucBr)+    If (App prNatEquality [n, Var prZero]) zeroBr (lett v (App prPred [n]) sucBr)  -- | Corresponds to a case with a zero and default branch primNatCaseZD :: Expr -- ^ Expression that is cased on               -> Expr -- ^ Zero branch               -> Expr -- ^ Default branch               -> Expr -- ^ Result?-primNatCaseZD n zeroBr defBr = If (App "primNatEquality" [n, Var "primZero"]) zeroBr defBr+primNatCaseZD n zeroBr defBr = If (App prNatEquality [n, Var prZero]) zeroBr defBr  -- | Translation to primitive bool functions boolPrimTF :: [QName] -> PrimTransform boolPrimTF [true, false] = PrimTF-  { mapCon = M.fromList [(true, "primTrue"), (false, "primFalse")]+  { mapCon = M.fromList [(true, prTrue), (false, prFalse)]   , translateCase = \ce brs ->     case brs of         (Branch _ n _vs e:b':_) ->@@ -146,22 +156,22 @@ boolPrimTF _ = __IMPOSSIBLE__  -- | Change all the primitives in the function using the PrimTransform-primFun :: MonadTCM m => [PrimTransform] -> Fun -> Compile m Fun-primFun ptfs (Fun i n c args e) =-    Fun i n c args <$> primExpr ptfs e+primFun :: [PrimTransform] -> Fun -> Compile TCM Fun+primFun ptfs (Fun i n qn c args e) =+    Fun i n qn c args <$> primExpr ptfs e primFun _ e@(EpicFun {}) = return e   -- | Change all the primitives in an expression using PrimTransform-primExpr :: MonadTCM m => [PrimTransform] -> Expr -> Compile m Expr+primExpr :: [PrimTransform] -> Expr -> Compile TCM Expr primExpr prim ex = case ex of     Var{}    -> return ex     Lit{}    -> return ex     Lam v e1 -> Lam v <$> primExpr prim e1     Con c n es -> case testCon prim n of         Just pn -> do-            filt <- getIrrFilter n-            apps pn <$> mapM (primExpr prim) (pairwiseFilter filt es)+            filt <- getForcedArgs n+            apps pn <$> mapM (primExpr prim) es         Nothing -> Con c n <$> mapM (primExpr prim) es     App v es   -> App v <$> mapM (primExpr prim) es     Case e brs -> case testBranch prim brs of@@ -195,7 +205,7 @@         Default _       -> Nothing      -- | Change all primitives in a branch-    primBranch :: MonadTCM m => Branch -> Compile m Branch+    primBranch :: Branch -> Compile TCM Branch     primBranch br = do         e' <- primExpr prim (brExpr br)         return br {brExpr = e'}
+ src/full/Agda/Compiler/Epic/Smashing.hs view
@@ -0,0 +1,135 @@+{-# LANGUAGE CPP #-}+-- | Smash functions which return something that can be inferred+--   (something of a type with only one element)++module Agda.Compiler.Epic.Smashing where++import Control.Arrow((&&&))+import Control.Monad+import Control.Monad.State+import Control.Monad.Trans++import Data.List+import qualified Data.Map as M+import Data.Map (Map)+import Data.Maybe++import qualified Data.Set as S+import Data.Set (Set)++import Agda.Syntax.Common+import Agda.Syntax.Internal as SI+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Rules.LHS.Unify++import Agda.Compiler.Epic.AuxAST as AA+import Agda.Compiler.Epic.CompileState+import Agda.Compiler.Epic.Interface++import Agda.Utils.Monad+import Agda.Utils.Size++#include "../../undefined.h"+import Agda.Utils.Impossible++defnPars :: Integral n => Defn -> n+defnPars (Record      {recPars = p}) = fromIntegral p+defnPars (Constructor {conPars = p}) = fromIntegral p+defnPars d                           = 0++-- | Main function, smash as much as possible+smash'em :: [Fun] -> Compile TCM [Fun]+smash'em funs = do+    defs <- lift (gets (sigDefinitions . stImports))+    funs' <- forM funs $ \f -> case f of+      AA.Fun{} -> case funQName f >>= flip M.lookup defs of+          Nothing -> do+              lift $ reportSDoc "epic.smashing" 10 $ vcat+                [ (text . show) f <+> text " was not found"]+              return f++          Just def -> do+              lift $ reportSLn "epic.smashing" 10 $ "running on:" ++ (show (funQName f))+              minfered <- smashable (length (funArgs f) + defnPars (theDef def)) (defType def)+              case minfered of+                  Just infered -> do+                      lift $ reportSDoc "smashing" 5 $ vcat+                        [ prettyTCM (defName def) <+> text "is smashable"]+                      return f { funExpr = infered+                               , funInline = True+                               , funComment = funComment f ++ " [SMASHED]"+                               }+                  Nothing -> return f+      _ -> do+        lift $ reportSLn "epic.smashing" 10 $ "smashing!"+        return f+    return funs'++(+++) :: Telescope -> Telescope -> Telescope+xs +++ ys = unflattenTel names $ map (raise (size ys)) (flattenTel xs) ++ flattenTel ys+  where names = teleNames xs ++ teleNames ys++-- | Can a datatype be inferred? If so, return the only possible value.+inferable :: Set QName -> QName -> [Arg Term] ->  Compile TCM (Maybe Expr)+inferable visited dat args | dat `S.member` visited = return Nothing+inferable visited dat args = do+  lift $ reportSLn "epic.smashing" 10 $ "  inferring:" ++ (show dat)+  defs <- lift (gets (sigDefinitions . stImports))+  let def = fromMaybe __IMPOSSIBLE__ $ M.lookup dat defs+  case theDef def of+      d@Datatype{} -> do+          case dataCons d of+            [c] -> inferableArgs c (dataPars d)+            _   -> return Nothing+      r@Record{}   -> inferableArgs (recCon r) (recPars r)+      f@Function{} -> do+        term <- lift $ normalise $ Def dat args+        inferableTerm visited' term+      d -> do+        lift $ reportSLn "epic.smashing" 10 $ "  failed (inferable): " ++ (show d)+        return Nothing+  where+    inferableArgs c pars = do+        defs <- lift (gets (sigDefinitions . stImports))+        let def = fromMaybe __IMPOSSIBLE__ $ M.lookup c defs+        forc <- getForcedArgs c+        TelV tel _ <- lift $ telView (defType def `apply` genericTake pars args)+        tag <- getConstrTag c+        lift $ reportSDoc "epic.smashing" 10 $ nest 2 $ vcat+          [ text "inferableArgs!"+          , text "tele" <+> prettyTCM tel+          , text "constr:" <+> prettyTCM c+          ]+        (AA.Con tag c <$>) <$> sequence <$> forM (notForced forc $ flattenTel tel) (inferableTerm visited' . unEl . unArg)+    visited' = S.insert dat visited++inferableTerm visited t = case t of+    Def q as     -> inferable visited q as+    Pi _   b    -> (AA.Lam "_" <$>) <$> inferableTerm visited (unEl $ unAbs b)+    Sort {}     -> return . return $ AA.UNIT+    t           -> do+      lift $ reportSLn "epic.smashing" 10 $ "  failed to infer: " ++ show t+      return Nothing++-- | Find the only possible value for a certain type. If we fail return Nothing+smashable :: Int -> Type -> Compile TCM (Maybe Expr)+smashable origArity typ = do+    defs <- lift (gets (sigDefinitions . stImports))+    TelV tele retType <- lift $ telView typ+    retType' <- return retType -- lift $ reduce retType++    inf <- inferableTerm S.empty (unEl retType')+    lift $ reportSDoc "epic.smashing" 10 $ nest 2 $ vcat+      [ text "Result is"+      , text "inf: " <+> (text . show) inf+      , text "type: " <+> prettyTCM retType'+      ]+    return $ buildLambda (size tele - origArity) <$> inf++buildLambda :: (Ord n, Num n) => n -> Expr -> Expr+buildLambda n e | n <= 0    = e+buildLambda n e | otherwise = AA.Lam "_" (buildLambda (n - 1) e)
+ src/full/Agda/Compiler/Epic/Static.hs view
@@ -0,0 +1,101 @@+-- | Find the places where the builtin static is used and do some normalisation+--   there.++{-# LANGUAGE CPP #-}++module Agda.Compiler.Epic.Static where++import Control.Applicative+import Control.Monad+import Control.Monad.State+import Control.Monad.Trans++import qualified Data.Map as M++import Agda.Syntax.Common+import Agda.Syntax.Internal++import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Monad.Options+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Pretty++import Agda.Utils.Monad++import Agda.Compiler.Epic.CompileState++#include "../../undefined.h"+import Agda.Utils.Impossible++normaliseStatic :: CompiledClauses -> Compile TCM CompiledClauses+normaliseStatic = evaluateCC++evaluateCC :: CompiledClauses -> Compile TCM CompiledClauses+evaluateCC ccs = case ccs of+    Case n brs -> do+        cbrs <- forM (M.toList $ conBranches brs) $ \(c, cc) -> (,) c <$> evaluateCC cc+        lbrs <- forM (M.toList $ litBranches brs) $ \(l, cc) -> (,) l <$> evaluateCC cc+        cab <- case catchAllBranch brs of+            Nothing -> return Nothing+            Just cc -> Just <$> evaluateCC cc+        return $ Case n Branches+            { conBranches    = M.fromList cbrs+            , litBranches    = M.fromList lbrs+            , catchAllBranch = cab+            }+    Done n t   -> Done n <$> evaluateTerm t+    Fail       -> return Fail++etaExpand :: Term -> Compile TCM Term+etaExpand def@(Def n ts) = do+    defs <- lift (gets (sigDefinitions . stImports))+    let f   = maybe __IMPOSSIBLE__ theDef (M.lookup n defs)+        len = length . clausePats . head .  funClauses $ f+        toEta :: Num a => a+        toEta = fromIntegral $ len - length ts+        term  = raise toEta def `apply` [ defaultArg $ Var i [] | i <- [toEta - 1, toEta - 2 .. 0]]+    return $ foldr (\ v t -> Lam NotHidden (Abs v t)) term $ replicate toEta "staticVar"+etaExpand x = return x++evaluateTerm :: Term -> Compile TCM Term+evaluateTerm term = case term of+    Var x as     -> Var x <$>  evaluateTerms as+    Lam h ab     -> do+      ab' <- evaluateTerm (unAbs ab)+      return $ Lam h $ Abs (absName ab) ab'+    Lit l        -> return $ Lit l+    Def n ts -> do+        ifM (not <$> isStatic n)+            (Def n <$> evaluateTerms ts) $ do+                feta <- return term -- etaExpand term+                f <- lift $ normalise feta+                lift $ reportSDoc "epic.static" 10 $ vcat+                  [ text "STATIC pragma fired"+                  , nest 2 $ vcat+                    [ text "before :" <+> prettyTCM term+                    , text "after  :" <+> prettyTCM f+                    ]+                  ]+                return f+    Con c args   -> Con c <$> evaluateTerms args+    Pi  arg abs  -> return $ Pi  arg abs+    Sort s       -> return $ Sort s+    MetaV i args -> return $ MetaV i args+    Level l      -> return $ Level l+    DontCare i   -> return $ DontCare i+  where+    evaluateTerms :: Args -> Compile TCM Args+    evaluateTerms as = forM as $ \x -> do+      y <- evaluateTerm (unArg x)+      return x { unArg = y }++    isStatic :: QName -> Compile TCM Bool+    isStatic q = do+      defs <- lift (gets (sigDefinitions . stImports))+      return $ case fmap theDef $ M.lookup q defs of+          Nothing -> False+          Just (f@Function{}) -> funStatic f+          Just _              -> False
src/full/Agda/Compiler/HaskellTypes.hs view
@@ -33,6 +33,9 @@ hsFun :: HaskellKind -> HaskellKind -> HaskellKind hsFun a b = "(" ++ a ++ " -> " ++ b ++ ")" +hsUnit :: HaskellType+hsUnit = "()"+ hsVar :: Name -> HaskellType hsVar x = "x" ++ concatMap encode (show x)   where@@ -50,40 +53,44 @@ hsForall :: String -> HaskellType -> HaskellType hsForall x a = "(forall " ++ x ++ ". " ++ a ++ ")" -notAHaskellKind :: MonadTCM tcm => Type -> tcm a+notAHaskellKind :: Type -> TCM a notAHaskellKind a = do   err <- fsep $ pwords "The type" ++ [prettyTCM a] ++                 pwords "cannot be translated to a Haskell kind."   typeError $ GenericError $ show err -notAHaskellType :: MonadTCM tcm => Type -> tcm a+notAHaskellType :: Type -> TCM a notAHaskellType a = do   err <- fsep $ pwords "The type" ++ [prettyTCM a] ++                 pwords "cannot be translated to a Haskell type."   typeError $ GenericError $ show err -getHsType :: MonadTCM tcm => QName -> tcm HaskellType+getHsType :: QName -> TCM HaskellType getHsType x = do-  d <- theDef <$> getConstInfo x+  d <- compiledHaskell . defCompiledRep <$> getConstInfo x   case d of-    Axiom{ axHsDef = Just (HsType t) } -> return t-    Datatype{ dataHsType = Just t }    -> return t-    _                                  -> notAHaskellType (El Prop $ Def x [])+    Just (HsType t)   -> return t+    Just (HsDefn t c) -> return hsUnit+    _                 -> notAHaskellType (El Prop $ Def x []) -getHsVar :: MonadTCM tcm => Nat -> tcm HaskellCode+getHsVar :: Nat -> TCM HaskellCode getHsVar i = hsVar <$> nameOfBV i  isHaskellKind :: Type -> TCM Bool isHaskellKind a =   (const True <$> haskellKind a) `catchError` \_ -> return False -haskellKind :: MonadTCM tcm => Type -> tcm HaskellKind+haskellKind :: Type -> TCM HaskellKind haskellKind a = do   a <- reduce a   case unEl a of     Sort _  -> return hsStar     Pi a b  -> hsKFun <$> haskellKind (unArg a) <*> underAbstraction a b haskellKind-    Fun a b -> hsKFun <$> haskellKind (unArg a) <*> haskellKind b+    Def d _ -> do+      d <- compiledHaskell . defCompiledRep <$> getConstInfo d+      case d of+        Just (HsType t) -> return hsStar+        _               -> notAHaskellKind a     _       -> notAHaskellKind a  -- | Note that @Inf a b@, where @Inf@ is the INFINITY builtin, is@@ -93,13 +100,14 @@ -- Note that if @haskellType@ supported universe polymorphism then the -- special treatment of INFINITY might not be needed. -haskellType :: MonadTCM tcm => Type -> tcm HaskellType+haskellType :: Type -> TCM HaskellType haskellType = liftTCM . fromType   where     fromArgs = mapM (fromTerm . unArg)     fromType = fromTerm . unEl     fromTerm v = do       v   <- reduce v+      reportSLn "compile.haskell.type" 50 $ "toHaskellType " ++ show v       kit <- liftTCM coinductionKit       let err = notAHaskellType (El Prop v)       case v of@@ -109,21 +117,16 @@             [a, b] -> fromTerm (unArg b)             _      -> err         Def d args -> hsApp <$> getHsType d <*> fromArgs args-        Fun a b    -> hsFun <$> fromType (unArg a) <*> fromType b         Pi a b ->-          ifM (isHaskellKind $ unArg a)-          (underAbstraction a b $ \b -> do-              x <- getHsVar 0-              b <- fromType b-              return $ hsForall x $ hsFun "()" b-          )-          (if 0 `freeIn` absBody b-           then err-           else hsFun <$> fromType (unArg a) <*> fromType (absApp b __IMPOSSIBLE__)-          )-        Con{}      -> err+          if isBinderUsed b+          then underAbstraction a b $ \b ->+            hsForall <$> getHsVar 0 <*>+              (hsFun <$> fromType (unArg a) <*> fromType b)+          else hsFun <$> fromType (unArg a) <*> fromType (absApp b __IMPOSSIBLE__)+        Con c args -> hsApp <$> getHsType c <*> fromArgs args         Lam{}      -> err-        Lit{}      -> err-        Sort{}     -> err+        Level{}    -> return hsUnit+        Lit{}      -> return hsUnit+        Sort{}     -> return hsUnit         MetaV{}    -> err-        DontCare   -> err+        DontCare{} -> err
+ src/full/Agda/Compiler/JS/Case.hs view
@@ -0,0 +1,127 @@+{-# LANGUAGE CPP #-}++module Agda.Compiler.JS.Case where++import Prelude hiding ( null )+import Data.Map ( Map, empty, null, mapWithKey, fromListWith, unionWith )+import Data.List ( genericLength, genericTake, intercalate )++import Agda.Syntax.Common ( Nat )+import Agda.Utils.Impossible ( Impossible(Impossible), throwImpossible )++import Agda.Compiler.JS.Pretty ( Pretty, pretty, pretties )+import Agda.Compiler.JS.Syntax+  ( Exp(Undefined,Local,Lambda,Object,Apply,Lookup),+    LocalId(LocalId), MemberId )+import Agda.Compiler.JS.Substitution ( shiftFrom )++#include "../../undefined.h"++-- ECMAScript doesn't support pattern-mathching case, so+-- we translate to a visitor pattern.  We use a decision-tree+-- translation, as that seems to fit visitor objects better.++data Case = Case { pats :: [Patt], body :: Exp }+  deriving (Show)++instance Pretty Case where+  pretty n i (Case ps e) =+    intercalate " " (pretties n i ps) ++ " -> " ++ pretty (n + numVars ps) i e++-- Not handling literal patterns yet+-- Note that all patterns introduce binders, in depth-first prefix order,+-- for example Tagged l [ VarPatt , VarPatt ] should be thought+-- of as "x2 @ l (x1, x0)".++data Patt =+  VarPatt |+  Tagged Tag [Patt]+  deriving (Show)++instance Pretty Patt where+  pretty n i VarPatt = "x"+  pretty n i (Tagged (Tag l _ _) ps) =+    "(" ++ intercalate " " (pretty n i l : pretties n i ps) ++ ")"++-- With each tag, we record its name, and the names of the+-- other constructors of the datatype (e.g. we'd represent+-- zero as Tag "zero" ["suc","zero"]).  We also record the+-- the function which accepts a visitor (by default Apply,+-- but can be over-ridden by the FFI).++data Tag = Tag MemberId [MemberId] (Exp -> [Exp] ->  Exp)++instance Show Tag where+  show (Tag i is _) = show i++-- Number of bound variables in a pattern++numVars :: [Patt] -> Nat+numVars = sum . map numVars'++numVars' :: Patt -> Nat+numVars' (VarPatt)     = 1+numVars' (Tagged l ps) = 1 + numVars ps++-- Compile a case statement to a function+-- in lambda n cs, n is the number of parameters++lambda :: [Case] -> Exp+lambda []     = Undefined+lambda (c:cs) = lambda' 0 0 (genericLength (pats c)) (c:cs)++-- In lambda' l m n cs,+-- l is the number of free variables,+-- m is the number of already read parameters, with m <= l, and+-- n is the number of unread parameters.+-- Each case should be of the form (Case ps e) where ps has length m+n.+-- e can have (l - m + #bv ps) variables free.+-- lambda' l m n cs can have l variables free.++lambda' :: Nat -> Nat -> Nat -> [Case] -> Exp+lambda' l m n []       = Undefined+lambda' l 0 0 (c : cs) = body c+lambda' l 0 n cs       = Lambda 1 (lambda' (l+1) 1 (n-1) cs)+lambda' l m n cs       =+  case null ts of+    True -> lambda' l (m-1) n (map pop cs)+    False -> visit cs (Local (LocalId (m-1))) [Object (mapWithKey (match l (m-1) n cs) ts)]+  where+    ts = tags cs++-- Pop cases++pop :: Case -> Case+pop (Case (VarPatt : ps) e) = (Case ps e)+pop _                       = __IMPOSSIBLE__++-- Cases which match a given tag/arity++match :: Nat -> Nat -> Nat -> [Case] -> MemberId -> Nat -> Exp+match l m n cs t x = Lambda x (lambda' (l + x) (m + x) n (concat (map (refine t x) cs)))++-- Refine a case statement by a given tag/arity++refine :: MemberId -> Nat -> Case -> [Case]+refine t x (Case (VarPatt : qs) e) =+  [Case (genericTake x (repeat VarPatt) ++ qs) (shiftFrom (numVars qs) x e)]+refine t x (Case (Tagged (Tag u _ _) ps : qs) e) | t == u =+  [Case (ps ++ qs) e]+refine _ _ _ = []++-- Extract the visit function++visit :: [Case] -> Exp -> [Exp] -> Exp+visit (Case (Tagged (Tag _ _ v) _ : _) _ : _ ) = v+visit (Case (VarPatt              : _) _ : cs) = visit cs+visit _                                        = Apply++-- Extract the list of possible tags, and their arity.++tags :: [Case] -> Map MemberId Nat+tags = foldl (unionWith max) empty . map tag++tag :: Case -> Map MemberId Nat+tag (Case (Tagged (Tag t us _) ps : qs) e) =+  fromListWith max ((t, genericLength ps) : [ (u, 0) | u <- us ])+tag _ = empty
+ src/full/Agda/Compiler/JS/Compiler.hs view
@@ -0,0 +1,448 @@+{-# LANGUAGE CPP #-}++module Agda.Compiler.JS.Compiler where++import Prelude hiding ( null, writeFile )+import Control.Monad.Reader ( liftIO )+import Control.Monad.State ( get, put )+import Data.List ( intercalate, map, filter, isPrefixOf, concat, genericDrop, genericLength )+import Data.Set ( Set, empty, null, insert, difference, delete )+import Data.Map ( Map, fold, singleton, fromList, toList, toAscList, insertWith, elems )+import System.Directory ( createDirectoryIfMissing )+import System.FilePath ( pathSeparator, splitFileName, (</>) )++import Agda.Interaction.FindFile ( findFile, findInterfaceFile )+import Agda.Interaction.Imports ( isNewerThan )+import Agda.Interaction.Options ( optCompileDir )+import Agda.Syntax.Common ( Nat, Arg, unArg )+import Agda.Syntax.Concrete.Name ( projectRoot )+import Agda.Syntax.Abstract.Name+  ( ModuleName(MName), QName(QName),+    mnameToList, qnameName, qnameModule, isInModule, nameId )+import Agda.Syntax.Internal+  ( Name, Args, Type,+    Clause(Clause), Pattern(VarP,DotP,LitP,ConP), Abs(Abs),+    ClauseBody(Body,NoBody,Bind),+    Term(Var,Lam,Lit,Level,Def,Con,Pi,Sort,MetaV,DontCare),+    toTopLevelModuleName, clausePats, clauseBody, arity, unEl, unAbs )+import Agda.TypeChecking.Substitute ( absBody )+import Agda.Syntax.Literal ( Literal(LitInt,LitFloat,LitString,LitChar,LitQName) )+import Agda.TypeChecking.Level ( reallyUnLevelView )+import Agda.TypeChecking.Monad+  ( TCM, Definition(Defn), Definitions, Interface,+    JSCode, Defn(Record,Datatype,Constructor,Primitive,Function,Axiom),+    iModuleName, iImportedModules, theDef, getConstInfo, typeOfConst,+    ignoreAbstractMode, miInterface, getVisitedModules,+    defName, defType, funClauses, funProjection,+    dataPars, dataIxs, dataClause, dataCons,+    conPars, conData, conSrcCon,+    recClause, recCon, recFields, recPars, recNamedCon,+    primClauses, defJSDef )+import Agda.TypeChecking.Monad.Options ( setCommandLineOptions, commandLineOptions, reportSLn )+import Agda.TypeChecking.Reduce ( instantiateFull, normalise )+import Agda.Utils.FileName ( filePath )+import Agda.Utils.Function ( iterate' )+import Agda.Utils.Monad ( (<$>), (<*>), bracket, ifM )+import Agda.Utils.IO.UTF8 ( writeFile )+import Agda.Utils.Impossible ( Impossible(Impossible), throwImpossible )+import Agda.Compiler.MAlonzo.Misc ( curDefs, curIF, curMName, setInterface )+import Agda.Compiler.MAlonzo.Primitives ( repl )++import Agda.Compiler.JS.Syntax+  ( Exp(Self,Local,Global,Undefined,String,Char,Integer,Double,Lambda,Object,Apply,Lookup),+    LocalId(LocalId), GlobalId(GlobalId), MemberId(MemberId), Export(Export), Module(Module),+    modName, expName, uses )+import Agda.Compiler.JS.Substitution+  ( curriedLambda, curriedApply, fix, emp, object, subst, apply )+import Agda.Compiler.JS.Case ( Tag(Tag), Case(Case), Patt(VarPatt,Tagged), lambda )+import Agda.Compiler.JS.Pretty ( pretty )++#include "../../undefined.h"++--------------------------------------------------+-- Entry point into the compiler+--------------------------------------------------++compilerMain :: Interface -> TCM ()+compilerMain mainI =+  -- Preserve the state (the compiler modifies the state).+  bracket get put $ \_ -> do++    -- Compute the output directory.+    opts <- commandLineOptions+    compileDir <- case optCompileDir opts of+      Just dir -> return dir+      Nothing  -> do+        -- The default output directory is the project root.+        let tm = toTopLevelModuleName $ iModuleName mainI+        f <- findFile tm+        return $ filePath $ projectRoot f tm+    setCommandLineOptions $+      opts { optCompileDir = Just compileDir }++    ignoreAbstractMode $ do+      mapM_ (compile . miInterface) =<< (elems <$> getVisitedModules)++compile :: Interface -> TCM ()+compile i = do+  setInterface i+  ifM uptodate noComp $ (yesComp >>) $ do+    writeModule =<< curModule+  where+  uptodate = liftIO =<< (isNewerThan <$> outFile_ <*> ifile)+  ifile    = maybe __IMPOSSIBLE__ filePath <$>+               (findInterfaceFile . toTopLevelModuleName =<< curMName)+  noComp   = reportSLn "" 1 . (++ " : no compilation is needed.").show =<< curMName+  yesComp  = reportSLn "" 1 . (`repl` "Compiling <<0>> in <<1>> to <<2>>") =<<+             sequence [show <$> curMName, ifile, outFile_] :: TCM ()++--------------------------------------------------+-- Naming+--------------------------------------------------++prefix  = "jAgda"++jsMod :: ModuleName -> GlobalId+jsMod m = GlobalId (prefix : map show (mnameToList m))++jsFileName :: GlobalId -> String+jsFileName (GlobalId ms) = intercalate "." ms ++ ".js"++jsMember :: Name -> MemberId+jsMember n =+  -- Anonymous fields are used for where clauses,+  -- and they're all given the concrete name "_",+  -- so we disambiguate them using their name id.+  case show n of+    "_" -> MemberId ("_" ++ show (nameId n))+    l   -> MemberId l++-- Rather annoyingly, the anonymous construtor of a record R in module M+-- is given the name M.recCon, but a named constructor C+-- is given the name M.R.C, sigh. This causes a lot of hoop-jumping+-- in the map from Agda names to JS names, which we patch by renaming+-- anonymous constructors to M.R.record.++global' :: QName -> TCM (Exp,[MemberId])+global' q = do+  i <- iModuleName <$> curIF+  is <- filter (isInModule q) <$> map (iModuleName . miInterface) <$> elems <$> getVisitedModules+  case is of+    [] -> __IMPOSSIBLE__+    _ -> let+        seg = maximum (map (length . mnameToList) is)+        ms = mnameToList (qnameModule q)+        m = MName (take seg ms)+        ls = map jsMember (drop seg ms ++ [qnameName q])+      in case (m == i) of+        True -> return (Self, ls)+        False -> return (Global (jsMod m), ls)++global :: QName -> TCM (Exp,[MemberId])+global q = do+  d <- getConstInfo q+  case d of+    Defn { theDef = Constructor { conData = p } } -> do+      e <- getConstInfo p+      case e of+        Defn { theDef = Record { recNamedCon = False } } -> do+          (m,ls) <- global' p+          return (m, ls ++ [MemberId "record"])+        _ -> global' (defName d)+    _ -> global' (defName d)++-- Reorder a list of exports to ensure def-before-use.+-- Note that this can diverge in the case when there is no such reordering.++reorder :: [Export] -> [Export]+reorder = reorder' empty++reorder' :: Set [MemberId] -> [Export] -> [Export]+reorder' defs [] = []+reorder' defs (e : es) =+  let us = uses e `difference` defs in+  case null us of+    True -> e : (reorder' (insert (expName e) defs) es)+    False -> reorder' defs (insertAfter us e es)++insertAfter :: Set [MemberId] -> Export -> [Export] -> [Export]+insertAfter us e []                 = [e]+insertAfter us e (f:fs) | null us   = e : f : fs+insertAfter us e (f:fs) | otherwise = f : insertAfter (delete (expName f) us) e fs++--------------------------------------------------+-- Main compiling clauses+--------------------------------------------------++curModule :: TCM Module+curModule = do+  m <- (jsMod <$> curMName)+  is <- map jsMod <$> (iImportedModules <$> curIF)+  es <- mapM definition =<< (toList <$> curDefs)+  return (Module m (reorder es))++definition :: (QName,Definition) -> TCM Export+definition (q,d) = do+  (_,ls) <- global q+  d <- instantiateFull d+  e <- defn q ls (defType d) (defJSDef d) (theDef d)+  return (Export ls e)++defn :: QName -> [MemberId] -> Type -> Maybe JSCode -> Defn -> TCM Exp+defn q ls t (Just e) Axiom =+  return e+defn q ls t Nothing Axiom = do+  t <- normalise t+  s <- isSingleton t+  case s of+    -- Inline and eta-expand postulates of singleton type+    Just e ->+      return (curriedLambda (arity t) e)+    -- Everything else we leave undefined+    Nothing ->+      return Undefined+defn q ls t (Just e) (Function {}) =+  return e+defn q ls t Nothing (Function { funProjection = proj, funClauses = cls }) = do+  t <- normalise t+  s <- isSingleton t+  cs <- mapM clause cls+  case s of+    -- Inline and eta-expand expressions of singleton type+    Just e ->+      return (curriedLambda (arity t) e)+    Nothing -> case proj of+      Just (p,i) -> do+        d <- getConstInfo p+        case theDef d of+          -- For projections from records we use a field lookup+          Record { recFields = flds } | q `elem` map unArg flds ->+            return (curriedLambda (numPars cls)+              (Lookup (Local (LocalId 0)) (last ls)))+          _ ->+            -- For anything else we generate code, after adding (i-1) dummy lambdas+            return (dummyLambda (i-1) (lambda cs))+      Nothing ->+        return (lambda cs)+defn q ls t (Just e) (Primitive {}) =+  return e+defn q ls t _ (Primitive {}) =+  return Undefined+defn q ls t _ (Datatype {}) =+  return emp+defn q ls t (Just e) (Constructor {}) =+  return e+defn q ls t _ (Constructor { conData = p, conPars = nc }) = do+  np <- return (arity t - nc)+  d <- getConstInfo p+  case theDef d of+    Record { recFields = flds } ->+      return (curriedLambda np (Object (fromList+        ( (last ls , Lambda 1+             (Apply (Lookup (Local (LocalId 0)) (last ls))+               [ Local (LocalId (np - i)) | i <- [0 .. np-1] ]))+        : (zip [ jsMember (qnameName (unArg fld)) | fld <- flds ]+             [ Local (LocalId (np - i)) | i <- [1 .. np] ])))))+    _ ->+      return (curriedLambda (np + 1)+        (Apply (Lookup (Local (LocalId 0)) (last ls))+          [ Local (LocalId (np - i)) | i <- [0 .. np-1] ]))+defn q ls t _ (Record {}) =+  return emp++-- Number of params in a function declaration++numPars :: [Clause] -> Nat+numPars []      = 0+numPars (c : _) = genericLength (clausePats c)++-- One clause in a function definition++clause :: Clause -> TCM Case+clause c = do+  ps <- mapM (pattern . unArg) (clausePats c)+  (av,bv,es) <- return (mapping (map unArg (clausePats c)))+  e <- body (clauseBody c)+  return (Case ps (subst av es e))++-- Mapping from Agda variables to JS variables in a pattern.+-- If mapping ps = (av,bv,es) then av is the number of Agda variables,+-- bv is the number of JS variables, and es is a list of expressions,+-- where es[i] is the JS variable corresponding to Agda variable i.++mapping :: [Pattern] -> (Nat,Nat,[Exp])+mapping = foldr mapping' (0,0,[])++mapping' :: Pattern -> (Nat,Nat,[Exp]) -> (Nat,Nat,[Exp])+mapping' (VarP _)      (av,bv,es) = (av+1, bv+1, Local (LocalId bv) : es)+mapping' (DotP _)      (av,bv,es) = (av+1, bv+1, Local (LocalId bv) : es)+mapping' (ConP _ _ ps) (av,bv,es) = (av',bv'+1,es') where+  (av',bv',es') = foldr mapping' (av,bv,es) (map unArg ps)+mapping' (LitP _)      (av,bv,es) = (av, bv+1, es)++-- Not doing literal patterns yet++pattern :: Pattern -> TCM Patt+pattern (ConP q _ ps) = do+  l <- tag q+  ps <- mapM (pattern . unArg) ps+  return (Tagged l ps)+pattern _             = return VarPatt++tag :: QName -> TCM Tag+tag q = do+  l <- visitorName q+  c <- getConstInfo q+  case theDef c of+    (Constructor { conData = p }) -> do+      d <- getConstInfo p+      case (defJSDef d, theDef d) of+        (Just e, Datatype { dataCons = qs }) -> do+          ls <- mapM visitorName qs+          return (Tag l ls (\ x xs -> apply e (x:xs)))+        (Nothing, Datatype { dataCons = qs }) -> do+          ls <- mapM visitorName qs+          return (Tag l ls Apply)+        (Just e, Record {}) -> do+          return (Tag l [l] (\ x xs -> apply e (x:xs)))+        (Nothing, Record {}) -> do+          return (Tag l [l] Apply)+        _ -> __IMPOSSIBLE__+    _ -> __IMPOSSIBLE__++visitorName :: QName -> TCM MemberId+visitorName q = do (m,ls) <- global q; return (last ls)++body :: ClauseBody -> TCM Exp+body (Body e) = term e+body (Bind b) = body (unAbs b)+body (NoBody) = return Undefined++term :: Term -> TCM Exp+term (Var   i as)         = do+  e <- return (Local (LocalId i))+  es <- args Nothing as+  return (curriedApply e es)+term (Lam   _ at)         = Lambda 1 <$> term (absBody at)+term (Lit   l)            = return (literal l)+term (Level l)            = term =<< reallyUnLevelView l+term (Def q as) = do+  d <- getConstInfo q+  case theDef d of+    -- Datatypes and records are erased+    Datatype {} -> return (String "*")+    Record {} -> return (String "*")+    _ -> case defJSDef d of+      -- Inline functions with an FFI definition+      Just e -> do+        es <- args (defProjection d) as+        return (curriedApply e es)+      Nothing -> do+        t <- normalise (defType d)+        s <- isSingleton t+        case s of+          -- Inline and eta-expand singleton types+          Just e ->+            return (curriedLambda (arity t) e)+          -- Everything else we leave non-inline+          Nothing -> do+            e <- qname q+            es <- args (defProjection d) as+            return (curriedApply e es)+term (Con q as) = do+  d <- getConstInfo q+  case defJSDef d of+    -- Inline functions with an FFI definition+    Just e -> do+      es <- args Nothing as+      return (curriedApply e es)+    -- Everything else we leave non-inline+    Nothing -> do+      e <- qname q+      es <- args Nothing as+      return (curriedApply e es)+term (Pi    _ _)          = return (String "*")+term (Sort  _)            = return (String "*")+term (MetaV _ _)          = return (Undefined)+term (DontCare _)         = return (Undefined)++-- Check to see if a type is a singleton, and if so, return its only+-- member.  Singleton types are of the form T1 -> ... -> Tn -> T where+-- T is either a record with no fields, a datatype with one+-- no-argument constructor, a datatype with no constructors,+-- or (since this is a type-erasing translation) Set.++isSingleton :: Type -> TCM (Maybe Exp)+isSingleton t = case unEl t of+  Pi _ b         -> isSingleton (unAbs b)+  Sort _         -> return (Just (String "*"))+  Def q as       -> do+    d <- getConstInfo q+    case (theDef d) of+      Datatype { dataPars = np, dataCons = [] } ->+        return (Just Undefined)+      Datatype { dataPars = np, dataCons = [p] } -> do+        c <- getConstInfo p+        case (arity (defType c) == np) of+          True -> Just <$> qname p+          False -> return (Nothing)+      Record { recCon = p, recFields = [] } ->+        Just <$> qname p+      _ -> return (Nothing)+  _              -> return (Nothing)++defProjection :: Definition -> Maybe (QName, Int)+defProjection Defn { theDef = Function { funProjection = p } } = p+defProjection _                                                = Nothing++args :: Maybe(QName, Int) -> Args -> TCM [Exp]+args Nothing as =+  mapM (term . unArg) as+args (Just (q,i)) as = do+  es <- mapM (term . unArg) as+  return (replicate (i-1) Undefined ++ es)++qname :: QName -> TCM Exp+qname q = do+  (e,ls) <- global q+  return (foldl Lookup e ls)++literal :: Literal -> Exp+literal (LitInt    _ x) = Integer x+literal (LitFloat  _ x) = Double  x+literal (LitString _ x) = String  x+literal (LitChar   _ x) = Char    x+literal (LitQName  _ x) = String  (show x)++dummyLambda :: Int -> Exp -> Exp+dummyLambda n = iterate' n (Lambda 0)++--------------------------------------------------+-- Writing out an ECMAScript module+--------------------------------------------------++writeModule :: Module -> TCM ()+writeModule m = do+  out <- outFile (modName m)+  liftIO (writeFile out (pretty 0 0 m))++compileDir :: TCM FilePath+compileDir = do+  mdir <- optCompileDir <$> commandLineOptions+  case mdir of+    Just dir -> return dir+    Nothing  -> __IMPOSSIBLE__++outFile :: GlobalId -> TCM FilePath+outFile m = do+  mdir <- compileDir+  let (fdir, fn) = splitFileName (jsFileName m)+  let dir = mdir </> fdir+      fp  = dir </> fn+  liftIO $ createDirectoryIfMissing True dir+  return fp++outFile_ :: TCM FilePath+outFile_ = do+  m <- curMName+  outFile (jsMod m)
+ src/full/Agda/Compiler/JS/Parser.hs view
@@ -0,0 +1,187 @@+module Agda.Compiler.JS.Parser where++-- This is a simple parser for the ECMAScript FFI, which parses a+-- subset of ECMAscript expressions. We do this so that we can+-- optimize code that contains FFI expressions, for example+-- {-# COMPILED_JS _+_ function (x) { return function (y) { return x+y; }; } #-}+-- will generate ECMAScript "1 + 2" from Agda "1 + 2".++import Prelude hiding ( exp, lookup )+import Control.Monad.Identity ( Identity )+import Data.List ( genericLength )+import Data.Char ( isSpace, isLetter, isAlphaNum, isDigit )+import Data.Map ( Map, fromList, union, empty )+import qualified Data.Map as M+import qualified Data.Map as M++import Agda.Utils.ReadP+  ( ReadP, (+++), (<++), between, chainl1, char, choice, look, many, many1,+    munch, munch1, parse', pfail, satisfy, sepBy, string, skipSpaces )++import Agda.Syntax.Common ( Nat )+import Agda.Compiler.JS.Syntax+  ( LocalId(LocalId), GlobalId(GlobalId), MemberId(MemberId),+    Exp(Self,Local,Global,Undefined,String,Integer,Lambda,Apply,Object,Lookup,If,BinOp,PreOp,Const) )++type Parser = ReadP Char++identifier :: Parser String+identifier = do+  c <- satisfy isLetter+  cs <- munch isAlphaNum+  skipSpaces+  return (c : cs)++wordBoundary :: Parser ()+wordBoundary = do+  cs <- look+  case cs of+    (c:_) | isAlphaNum c -> pfail+    _                    -> return ()++token :: String -> Parser ()+token s = string s >> wordBoundary >> skipSpaces++punct :: Char -> Parser ()+punct c = char c >> skipSpaces++parened :: Parser a -> Parser a+parened = between (punct '(')  (punct ')')++braced :: Parser a -> Parser a+braced = between (punct '{')  (punct '}')++bracketed :: Parser a -> Parser a+bracketed = between (punct '[')  (punct ']')++quoted :: Parser a -> Parser a+quoted = between (char '"') (punct '"')++stringLit :: Parser Exp+stringLit = do s <- stringStr; return (String s)++stringStr :: Parser String+stringStr = quoted (many stringChr)++stringChr :: Parser Char+stringChr = satisfy (`notElem` "\\\"") +++ escChr++-- Not handling all escape sequences+escChr :: Parser Char+escChr = char '\\' >> (+  (char 'n' >> return '\n') ++++  (char 'r' >> return '\r') ++++  (char 't' >> return '\t') ++++  (char '"' >> return '"') ++++  (char '\\' >> return '\\')+ )++-- Not handling all integer constants+intLit :: Parser Exp+intLit = do s <- munch1 isDigit; skipSpaces; return (Integer (read s))++undef :: Parser Exp+undef = token "undefined" >> return Undefined++localid :: (Map String Nat) -> Parser Exp+localid m = do+  s <- identifier+  case M.lookup s m of+    Nothing -> return (Const s)+    Just i -> return (Local (LocalId i))++globalid :: Parser Exp+globalid = do+  token "require"+  i <- parened (quoted (sepBy (munch1 isAlphaNum) (char '.')))+  return (Global (GlobalId i))++preop :: Parser String+preop = do+  op <- choice (map string [ "+", "-", "!" ])+  skipSpaces+  return op++binop :: Parser String+binop = do+  op <- choice (map string [+      "<", ">", "<=", ">=", "==", "===", "<<", ">>",+      "<<<", ">>>", "!=", "!==", "+", "-", "*", "%", "/",+      "&", "&&", "|", "||", "^"+    ])+  skipSpaces+  return op++field :: (Map String Nat) -> Parser (MemberId,Exp)+field m = do+  l <- stringStr+  punct ':'+  e <- exp m+  return (MemberId l, e)++object :: (Map String Nat) -> Parser Exp+object m = do+  o <- braced (sepBy (field m) (punct ','))+  return (Object (fromList o))++function :: (Map String Nat) -> Parser Exp+function m = do+  token "function"+  xs <- parened (sepBy identifier (punct ','))+  n <- return (genericLength xs)+  m' <- return (union (fromList (zip xs [n-1,n-2..0])) (M.map (+n) m))+  e <- bracedBlock m'+  return (Lambda n e)++bracedBlock :: (Map String Nat) -> Parser Exp+bracedBlock m = braced (returnBlock m +++ ifBlock m +++ bracedBlock m)++returnBlock :: (Map String Nat) -> Parser Exp+returnBlock m = between (token "return") (punct ';') (exp m)++ifBlock :: (Map String Nat) -> Parser Exp+ifBlock m = do+  token "if"+  e <- parened (exp m)+  f <- bracedBlock m+  token "else"+  g <- (ifBlock m +++ bracedBlock m)+  return (If e f g)++exp0 :: (Map String Nat) -> Parser Exp+exp0 m = function m <++ undef <++ globalid <++ localid m <+++         object m <++ stringLit <++ intLit <++ parened (exp m)++exp1 :: (Map String Nat) -> Parser Exp+exp1 m =+  (do op <- preop; e <- exp1 m; return (PreOp op e)) <+++  (exp0 m)++exp2 :: (Map String Nat) -> Parser Exp+exp2 m = exp1 m >>= exp2' m++-- Not handling operator fixity or precedence+exp2' :: (Map String Nat) -> Exp -> Parser Exp+exp2' m e =+  (do es <- parened (sepBy (exp m) (punct ',')); exp2' m (Apply e es)) <+++  (do i <- bracketed stringStr; exp2' m (Lookup e (MemberId i))) <+++  (do punct '.'; i <- identifier; exp2' m (Lookup e (MemberId i))) <+++  (do op <- binop; f <- exp0 m; exp2' m (BinOp e op f)) <+++  (return e)++exp3 :: (Map String Nat) -> Parser Exp+exp3 m = exp2 m >>= exp3' m++exp3' :: (Map String Nat) -> Exp -> Parser Exp+exp3' m e =+  (do punct '?'; f <- exp2 m; punct ':'; g <- exp2 m; return (If e f g)) <+++  (return e)++exp :: (Map String Nat) -> Parser Exp+exp = exp3++topLevel :: Parser Exp+topLevel = skipSpaces >> exp empty++parse :: String -> Either Exp String+parse = parse' topLevel
+ src/full/Agda/Compiler/JS/Pretty.hs view
@@ -0,0 +1,118 @@+module Agda.Compiler.JS.Pretty where++import Prelude hiding ( null )+import Data.List ( intercalate )+import Data.Set ( Set, toList, singleton, insert, member )+import Data.Map ( Map, toAscList, empty, null )++import Agda.Syntax.Common ( Nat )++import Agda.Compiler.JS.Syntax+  ( Exp(Self,Local,Global,Undefined,String,Char,Integer,Double,Lambda,Object,Apply,Lookup,If,BinOp,PreOp,Const),+    LocalId(LocalId), GlobalId(GlobalId), MemberId(MemberId), Module(Module), Export(Export),+    globals )++-- Pretty-print a lambda-calculus expression as ECMAScript.++-- Since ECMAScript is C-like rather than Haskell-like, it's easier to+-- do the pretty-printing directly than use the Pretty library, which+-- assumes Haskell-like indentation.++br :: Int -> String+br i = "\n" ++ take (2*i) (repeat ' ')++unescape :: Char -> String+unescape '"'      = "\\\""+unescape '\\'     = "\\\\"+unescape '\n'     = "\\n"+unescape '\r'     = "\\r"+unescape '\x2028' = "\\u2028"+unescape '\x2029' = "\\u2029"+unescape c        = [c]++unescapes :: String -> String+unescapes s = concat (map unescape s)++-- pretty n i e pretty-prints e, under n levels of de Bruijn binding,+-- with i levels of indentation.++class Pretty a where+    pretty :: Nat -> Int -> a -> String++instance (Pretty a, Pretty b) => Pretty (a,b) where+  pretty n i (x,y) = pretty n i x ++ ": " ++ pretty n (i+1) y++-- Pretty-print collections++class Pretties a where+    pretties :: Nat -> Int -> a -> [String]++instance Pretty a => Pretties [a] where+  pretties n i = map (pretty n i)++instance (Pretty a, Pretty b) => Pretties (Map a b) where+  pretties n i o = pretties n i (toAscList o)++-- Pretty print identifiers++instance Pretty LocalId where+  pretty n i (LocalId x) = "x" ++ show (n - x - 1)++instance Pretty GlobalId where+  pretty n i (GlobalId m) = intercalate "_" m++instance Pretty MemberId where+  pretty n i (MemberId s) = "\"" ++ unescapes s ++ "\""++-- Pretty print expressions++instance Pretty Exp where+  pretty n i (Self)                 = "exports"+  pretty n i (Local x)              = pretty n i x+  pretty n i (Global m)             = pretty n i m+  pretty n i (Undefined)            = "undefined"+  pretty n i (String s)             = "\"" ++ unescapes s ++ "\""+  pretty n i (Char c)               = "\"" ++ unescape c ++ "\""+  pretty n i (Integer x)            = show x+  pretty n i (Double x)             = show x+  pretty n i (Lambda x e)           =+    "function (" +++      intercalate ", " (pretties (n+x) i (map LocalId [x-1, x-2 .. 0])) +++    ") " ++ block (n+x) i e+  pretty n i (Object o) | null o    = "{}"+  pretty n i (Object o) | otherwise =+    "{" ++ br (i+1) ++ intercalate ("," ++ br (i+1)) (pretties n i o) ++ br i ++ "}"+  pretty n i (Apply f es)           = pretty n i f ++ "(" ++ intercalate ", " (pretties n i es) ++ ")"+  pretty n i (Lookup e l)           = pretty n i e ++ "[" ++ pretty n i l ++ "]"+  pretty n i (If e f g)             =+    "(" ++ pretty n i e ++ "? " ++ pretty n i f ++ ": " ++ pretty n i g ++ ")"+  pretty n i (PreOp op e)           = "(" ++ op ++ " " ++ pretty n i e ++ ")"+  pretty n i (BinOp e op f)         = "(" ++ pretty n i e ++ " " ++ op ++ " " ++ pretty n i f ++ ")"+  pretty n i (Const c)              = c++block :: Nat -> Int -> Exp -> String+block n i (If e f g) = "{" ++ br (i+1) ++ block' n (i+1) (If e f g) ++ br i ++ "}"+block n i e          = "{" ++ br (i+1) ++ "return " ++ pretty n (i+1) e ++ ";" ++ br i ++ "}"++block' :: Nat -> Int -> Exp -> String+block' n i (If e f g) = "if (" ++ pretty n i e ++ ") " ++ block n i f ++ " else " ++ block' n i g+block' n i e          = block n i e++modname :: GlobalId -> String+modname (GlobalId ms) = "\"" ++ intercalate "." ms ++ "\""++exports :: Nat -> Int -> Set [MemberId] -> [Export] -> String+exports n i lss [] = ""+exports n i lss (Export ls e : es) | member (init ls) lss =+  "exports[" ++ intercalate "][" (pretties n i ls) ++ "] = " ++ pretty n (i+1) e ++ ";" ++ br i +++  exports n i (insert ls lss) es+exports n i lss (Export ls e : es) | otherwise =+  exports n i lss (Export (init ls) (Object empty) : Export ls e : es)++instance Pretty Module where+  pretty n i (Module m es) =+    "define([" ++ intercalate "," ("\"exports\"" : map modname js) ++ "]," +++    "function(" ++ intercalate "," ("exports" : pretties n i js) ++ ") {" ++ br (i+1) +++    exports n (i+1) (singleton []) es +++    "});" ++ br i+      where js = toList (globals es)
+ src/full/Agda/Compiler/JS/Substitution.hs view
@@ -0,0 +1,124 @@+module Agda.Compiler.JS.Substitution where++import Prelude hiding ( map, lookup )+import Data.Generics ( Data, Typeable )+import Data.Map ( Map, empty, toList, unionWith, singleton, findWithDefault )+import qualified Data.Map as M ( map )+import Data.Map ( Map )+import Data.List ( genericIndex )+import qualified Data.List as L ( map )++import Agda.Syntax.Common ( Nat )+import Agda.Compiler.JS.Syntax+  ( Exp(Self,Undefined,Local,Lambda,Object,Apply,Lookup,If,BinOp,PreOp),+    MemberId, LocalId(LocalId), GlobalId(GlobalId) )+import Agda.Utils.Function ( iterate' )++-- Map for expressions++map :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp+map m f (Local i)       = f m i+map m f (Lambda i e)    = Lambda i (map (m + i) f e)+map m f (Object o)      = Object (M.map (map m f) o)+map m f (Apply e es)    = Apply (map m f e) (L.map (map m f) es)+map m f (Lookup e l)    = Lookup (map m f e) l+map m f (If e e' e'')   = If (map m f e) (map m f e') (map m f e'')+map m f (PreOp op e)    = PreOp op (map m f e)+map m f (BinOp e op e') = BinOp (map m f e) op (map m f e')+map m f e               = e++-- Shifting++shift :: Nat -> Exp -> Exp+shift = shiftFrom 0++shiftFrom :: Nat -> Nat -> Exp -> Exp+shiftFrom m 0 e = e+shiftFrom m n e = map m (shifter n) e++shifter :: Nat -> Nat -> LocalId -> Exp+shifter n m (LocalId i) | i < m     = Local (LocalId i)+shifter n m (LocalId i) | otherwise = Local (LocalId (i + n))++-- Substitution++subst :: Nat -> [Exp] -> Exp -> Exp+subst 0 es e = e+subst n es e = map 0 (substituter n es) e++substituter :: Nat -> [Exp] -> Nat -> LocalId -> Exp+substituter n es m (LocalId i) | i < m       = Local (LocalId i)+substituter n es m (LocalId i) | (i - m) < n = shift m (genericIndex (es ++ repeat Undefined) (n - (i + 1 - m)))+substituter n es m (LocalId i) | otherwise   = Local (LocalId (i - n))++-- A variant on substitution which performs beta-reduction++map' :: Nat -> (Nat -> LocalId -> Exp) -> Exp -> Exp+map' m f (Local i)       = f m i+map' m f (Lambda i e)    = Lambda i (map' (m + i) f e)+map' m f (Object o)      = Object (M.map (map' m f) o)+map' m f (Apply e es)    = apply (map' m f e) (L.map (map' m f) es)+map' m f (Lookup e l)    = lookup (map' m f e) l+map' m f (If e e' e'')   = If (map' m f e) (map' m f e') (map' m f e'')+map' m f (PreOp op e)    = PreOp op (map' m f e)+map' m f (BinOp e op e') = BinOp (map' m f e) op (map' m f e')+map' m f e               = e++subst' :: Nat -> [Exp] -> Exp -> Exp+subst' 0 es e = e+subst' n es e = map' 0 (substituter n es) e++-- Beta-reducing application and field access++apply :: Exp -> [Exp] -> Exp+apply (Lambda i e) es = subst' i es e+apply e            es = Apply e es++lookup :: Exp -> MemberId -> Exp+lookup (Object o) l = findWithDefault Undefined l o+lookup e          l = Lookup e l++-- Replace any top-level occurrences of self+-- (needed because JS is a cbv language, so any top-level+-- recursions would evaluate before the module has been defined,+-- e.g. exports = { x: 1, y: exports.x } results in an exception,+-- as exports is undefined at the point that exports.x is evaluated),++self :: Exp -> Exp -> Exp+self e (Self)         = e+self e (Object o)     = Object (M.map (self e) o)+self e (Apply f es)   = case (self e f) of+  (Lambda n g) -> self e (subst' n es g)+  g            -> Apply g (L.map (self e) es)+self e (Lookup f l)   = lookup (self e f) l+self e (If f g h)     = If (self e f) (self e g) (self e h)+self e (BinOp f op g) = BinOp (self e f) op (self e g)+self e (PreOp op f)   = PreOp op (self e f)+self e f              = f++-- Find the fixed point of an expression, with no top-level occurrences+-- of self.++fix :: Exp -> Exp+fix f = e where e = self e f++-- Some helper functions++curriedApply :: Exp -> [Exp] -> Exp+curriedApply = foldl (\ f e -> apply f [e])++curriedLambda :: Nat -> Exp -> Exp+curriedLambda n = iterate' n (Lambda 1)++emp :: Exp+emp = Object (empty)++union :: Exp -> Exp -> Exp+union (Object o) (Object p) = Object (unionWith union o p)+union e          f          = e++vine :: [MemberId] -> Exp -> Exp+vine ls e = foldr (\ l e -> Object (singleton l e)) e ls++object :: [([MemberId],Exp)] -> Exp+object = foldr (\ (ls,e) -> (union (vine ls e))) emp
+ src/full/Agda/Compiler/JS/Syntax.hs view
@@ -0,0 +1,110 @@+{-# LANGUAGE DeriveDataTypeable+  #-}+module Agda.Compiler.JS.Syntax where++import Data.Generics ( Data, Typeable )+import Data.Map ( Map, fold )+import Data.Set ( Set, empty, singleton, union )++import Agda.Syntax.Common ( Nat )++-- An untyped lambda calculus with records,+-- and a special self-binder for recursive declarations++data Exp =+  Self |+  Local LocalId |+  Global GlobalId |+  Undefined |+  String String |+  Char Char |+  Integer Integer |+  Double Double |+  Lambda Nat Exp |+  Object (Map MemberId Exp) |+  Apply Exp [Exp] |+  Lookup Exp MemberId |+  If Exp Exp Exp |+  BinOp Exp String Exp |+  PreOp String Exp |+  Const String+  deriving (Typeable, Data, Show)++-- Local identifiers are named by De Bruijn indices.+-- Global identifiers are named by string lists.+-- Object members are named by strings.++newtype LocalId = LocalId Nat+  deriving (Typeable, Data, Eq, Ord, Show)++newtype GlobalId = GlobalId [String]+  deriving (Typeable, Data, Eq, Ord, Show)++newtype MemberId = MemberId String+  deriving (Typeable, Data, Eq, Ord, Show)++-- The top-level compilation unit is a module, which names+-- the GId of its exports, and a list of definitions++data Export = Export { expName :: [MemberId], defn :: Exp }+  deriving (Typeable, Data, Show)++data Module = Module { modName :: GlobalId, exports :: [Export] }+  deriving (Typeable, Data, Show)++-- Note that modules are allowed to be recursive, via the Self expression,+-- which is bound to the exported module.++-- Top-level uses of the form exports.l1....lN.++class Uses a where+  uses :: a -> Set [MemberId]++instance Uses a => Uses [a] where+  uses = foldr (union . uses) empty++instance Uses a => Uses (Map k a) where+  uses = fold (union . uses) empty++instance Uses Exp where+  uses (Object o)     = fold (union . uses) empty o+  uses (Apply e es)   = foldr (union . uses) (uses e) es+  uses (Lookup e l)   = uses' e [l] where+      uses' Self         ls = singleton ls+      uses' (Lookup e l) ls = uses' e (l : ls)+      uses' e            ls = uses e+  uses (If e f g)     = uses e `union` uses f `union` uses g+  uses (BinOp e op f) = uses e `union` uses f+  uses (PreOp op e)   = uses e+  uses e              = empty++instance Uses Export where+  uses (Export ls e) = uses e++-- All global ids++class Globals a where+  globals :: a -> Set GlobalId++instance Globals a => Globals [a] where+  globals = foldr (union . globals) empty++instance Globals a => Globals (Map k a) where+  globals = fold (union . globals) empty++instance Globals Exp where+  globals (Global i) = singleton i+  globals (Lambda n e) = globals e+  globals (Object o) = globals o+  globals (Apply e es) = globals e `union` globals es+  globals (Lookup e l) = globals e+  globals (If e f g) = globals e `union` globals f `union` globals g+  globals (BinOp e op f) = globals e `union` globals f+  globals (PreOp op e) = globals e+  globals _ = empty++instance Globals Export where+  globals (Export ls e) = globals e++instance Globals Module where+  globals (Module m es) = globals es
src/full/Agda/Compiler/MAlonzo/Compiler.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards #-}  module Agda.Compiler.MAlonzo.Compiler where @@ -26,7 +26,6 @@ import Agda.Compiler.MAlonzo.Primitives import Agda.Interaction.FindFile import Agda.Interaction.Imports-import Agda.Interaction.Monad import Agda.Interaction.Options import Agda.Syntax.Common import qualified Agda.Syntax.Concrete.Name as CN@@ -37,6 +36,8 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Rules.Builtin.Coinduction import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Level (reallyUnLevelView) import Agda.Utils.FileName import Agda.Utils.Monad import qualified Agda.Utils.IO.Locale as LocIO@@ -116,8 +117,8 @@ -- @ --   type Infinity a b = b -----   sharp :: forall a. () -> forall b. () -> b -> b---   sharp _ _ x = x+--   sharp :: a -> a+--   sharp x = x -- --   flat :: forall a. () -> forall b. () -> b -> b --   flat _ _ x = x@@ -125,12 +126,16 @@  definition :: Maybe CoinductionKit -> Definition -> TCM [HS.Decl] -- ignore irrelevant definitions-definition kit (Defn Forced     _ _  _ _ _) = __IMPOSSIBLE__-definition kit (Defn Irrelevant _ _  _ _ _) = return []-definition kit (Defn Relevant   q ty _ _ d) = do+definition kit (Defn Forced     _ _  _ _ _ _) = __IMPOSSIBLE__+definition kit (Defn NonStrict  _ _  _ _ _ _) = __IMPOSSIBLE__+definition kit (Defn Irrelevant _ _  _ _ _ _) = return []+definition kit (Defn Relevant   q ty _ _ compiled d) = do   checkTypeOfMain q ty   (infodecl q :) <$> case d of +    _ | Just (HsDefn ty hs) <- compiledHaskell compiled ->+      return $ fbWithType ty (fakeExp hs)+     -- Special treatment of coinductive builtins.     Datatype{} | Just q == (nameOfInf <$> kit) -> do       let infT = unqhname "T" q@@ -151,9 +156,9 @@           x     = ihname "x" 0       return $         [ HS.TypeSig dummy [sharp] $ fakeType $-            "forall a. () -> forall b. () -> b -> b"+            "forall a. a -> a"         , HS.FunBind [HS.Match dummy sharp-                               [HS.PWildCard, HS.PWildCard, HS.PVar x]+                               [HS.PVar x]                                Nothing                                (HS.UnGuardedRhs (HS.Var (HS.UnQual x)))                                (HS.BDecls [])]@@ -171,30 +176,29 @@                                (HS.BDecls [])]         ] -    Axiom{ axHsDef = Just (HsDefn ty hs) } -> return $ fbWithType ty (fakeExp hs)     Axiom{}                                -> return $ fb axiomErr     Function{ funClauses =        cls } -> function cls     Primitive{ primClauses = Just cls } -> function cls     Primitive{ primClauses = Nothing, primName = s } -> fb <$> primBody s-    Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs, dataHsType = Just ty } -> do+    Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs }+      | Just (HsType ty) <- compiledHaskell compiled -> do       ccs <- concat <$> mapM checkConstructorType cs       cov <- checkCover q ty np cs       return $ tvaldecl q (dataInduction d) 0 (np + ni) [] (Just __IMPOSSIBLE__) ++ ccs ++ cov-    Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs, dataHsType = Nothing } -> do+    Datatype{ dataPars = np, dataIxs = ni, dataClause = cl, dataCons = cs } -> do       (ars, cds) <- unzip <$> mapM condecl cs       return $ tvaldecl q (dataInduction d) (maximum (np:ars) - np) (np + ni) cds cl     Constructor{} -> return []     Record{ recClause = cl, recCon = c, recFields = flds } -> do       let noFields = genericLength flds-      ar <- arity <$> normalise ty+      let ar = arity ty       cd <- snd <$> condecl c --       cd <- case c of --         Nothing -> return $ cdecl q noFields --         Just c  -> snd <$> condecl c       return $ tvaldecl q Inductive noFields ar [cd] cl   where-  function cls = mkwhere <$> mapM (clause q)-                                  (tag 0 $ L.map translatedClause cls)+  function cls = mkwhere <$> mapM (clause q) (tag 0 cls)   tag _ []       = []   tag i [cl]     = (i, True , cl): []   tag i (cl:cls) = (i, False, cl): tag (i + 1) cls@@ -210,7 +214,7 @@  checkConstructorType :: QName -> TCM [HS.Decl] checkConstructorType q = do-  Constructor{ conHsCode = Just (ty, hs) } <- theDef <$> getConstInfo q+  Just (HsDefn ty hs) <- compiledHaskell . defCompiledRep <$> getConstInfo q   return [ HS.TypeSig dummy [unqhname "check" q] $ fakeType ty          , HS.FunBind [HS.Match dummy (unqhname "check" q) [] Nothing                                 (HS.UnGuardedRhs $ fakeExp hs) (HS.BDecls [])]@@ -220,8 +224,8 @@ checkCover q ty n cs = do   let tvs = [ "a" ++ show i | i <- [1..n] ]       makeClause c = do-        a <- constructorArity c-        Just (_, hsc) <- conHsCode . theDef <$> getConstInfo c+        (a, _) <- conArityAndPars c+        Just (HsDefn _ hsc) <- compiledHaskell . defCompiledRep <$> getConstInfo c         let pat = HS.PApp (HS.UnQual $ HS.Ident hsc) $ genericReplicate a HS.PWildCard         return $ HS.Alt dummy pat (HS.UnGuardedAlt $ HS.Tuple []) (HS.BDecls [])   cs <- mapM makeClause cs@@ -235,13 +239,13 @@          ]  -- | Move somewhere else!-constructorArity :: MonadTCM tcm => QName -> tcm Nat-constructorArity q = do+conArityAndPars :: QName -> TCM (Nat, Nat)+conArityAndPars q = do   def <- getConstInfo q-  a <- normalise $ defType def-  case theDef def of-    Constructor{ conPars = np } -> return $ arity a - np-    _ -> fail $ "constructorArity: non constructor: " ++ show q+  TelV tel _ <- telViewM $ defType def+  let Constructor{ conPars = np } = theDef def+      n = genericLength (telToList tel)+  return (n - np, np)  clause :: QName -> (Nat, Bool, Clause) -> TCM HS.Decl clause q (i, isLast, Clause{ clausePats = ps, clauseBody = b }) =@@ -251,14 +255,15 @@        | isLast                 = []        | otherwise              = [match (L.map HS.PVar cvs) crhs]   cvs  = L.map (ihname "v") [0 .. genericLength ps - 1]-  crhs = hsCast$ foldl HS.App (hsVarUQ $ dsubname q (i + 1)) (L.map hsVarUQ cvs)-  failrhs = rtmError $ "incomplete pattern matching: " ++ show q+  crhs = hsCast$ L.foldl HS.App (hsVarUQ $ dsubname q (i + 1)) (L.map hsVarUQ cvs)+  failrhs = rtmIncompleteMatch q  -- Andreas, 2011-11-16 call to RTE instead of inlined error+--  failrhs = rtmError $ "incomplete pattern matching: " ++ show q   match hps rhs = HS.Match dummy (dsubname q i) hps Nothing                            (HS.UnGuardedRhs rhs) (HS.BDecls [])-  bvars (Body _)          _ = []-  bvars (Bind (Abs _ b')) n = HS.PVar (ihname "v" n) : bvars b' (n + 1)-  bvars (NoBind      b' ) n = HS.PWildCard           : bvars b' n -- WHY NOT: bvars b' n  -- PRODDUCES head [] exception-  bvars NoBody            _ = repeat HS.PWildCard -- ?+  bvars (Body _)           _ = []+  bvars (Bind (Abs _ b'))  n = HS.PVar (ihname "v" n) : bvars b' (n + 1)+  bvars (Bind (NoAbs _ b)) n = HS.PWildCard : bvars b n+  bvars NoBody             _ = repeat HS.PWildCard -- ?    isCon (Arg _ _ ConP{}) = True   isCon _                = False@@ -304,9 +309,9 @@  clausebody :: ClauseBody -> TCM HS.Exp clausebody b0 = runReaderT (go b0) 0 where-  go (Body   tm       ) = hsCast <$> term tm-  go (Bind   (Abs _ b)) = local (1+) $ go b-  go (NoBind b        ) = go b+  go (Body tm       )   = hsCast <$> term tm+  go (Bind (Abs _ b))   = local (1+) $ go b+  go (Bind (NoAbs _ b)) = go b   go NoBody             = return $ rtmError $ "Impossible Clause Body"  -- | Extract Agda term to Haskell expression.@@ -320,12 +325,16 @@                               local (1+) (term $ absBody at)   Lit   l    -> lift $ literal l   Def   q as -> (`apps` as) . HS.Var =<< lift (xhqn "d" q)-  Con   q as -> (`apps` as) . HS.Con =<< lift (conhqn q)+  Con   q as -> do+    kit <- lift coinductionKit+    if Just q == (nameOfSharp <$> kit)+      then (`apps` as) . HS.Var =<< lift (xhqn "d" q)+      else (`apps` as) . HS.Con =<< lift (conhqn q)+  Level l    -> term =<< lift (reallyUnLevelView l)   Pi    _ _  -> return HS.unit_con-  Fun   _ _  -> return HS.unit_con   Sort  _    -> return HS.unit_con   MetaV _ _  -> mazerror "hit MetaV"-  DontCare   -> return $ rtmError $ "hit DontCare"+  DontCare _ -> return $ rtmError $ "hit DontCare"   where apps =  foldM (\h a -> HS.App h <$> term' a)  -- | Irrelevant arguments are replaced by Haskells' ().@@ -338,24 +347,32 @@   LitInt    _ _   -> do toN <- bltQual "NATURAL" mazIntegerToNat                         return $ HS.Var toN `HS.App` typed "Integer"   LitFloat  _ _   -> return $ typed "Double"+  LitQName  _ x   -> litqname x   _               -> return $ l'   where l'    = HS.Lit $ hslit l         typed = HS.ExpTypeSig dummy l' . HS.TyCon . rtmQual  hslit :: Literal -> HS.Literal hslit l = case l of LitInt    _ x -> HS.Int    x-                    LitLevel  _ x -> HS.Int    x                     LitFloat  _ x -> HS.Frac   (toRational x)                     LitString _ x -> HS.String x                     LitChar   _ x -> HS.Char   x-                    LitQName  _ x -> HS.String (show x)+                    LitQName  _ x -> __IMPOSSIBLE__ +litqname :: QName -> TCM HS.Exp+litqname x = return $+  HS.Con (HS.Qual mazRTE $ HS.Ident "QName") `HS.App`+  HS.Lit (HS.Int n) `HS.App`+  HS.Lit (HS.Int m) `HS.App`+  (rtmError "primQNameType: not implemented") `HS.App`+  (rtmError "primQNameDefinition: not implemented")+  where+    NameId n m = nameId $ qnameName x+ condecl :: QName -> TCM (Nat, HS.ConDecl)-condecl q = getConstInfo q >>= \d -> case d of-  Defn _ _ ty _ _ (Constructor {conPars = np}) -> do-    ar <- arity <$> normalise ty-    return $ (ar, cdecl q (ar - np))-  _ -> mazerror $ "condecl:" ++ gshow' (q, d)+condecl q = do+  (ar, np) <- conArityAndPars q+  return $ (ar + np, cdecl q ar)  cdecl :: QName -> Nat -> HS.ConDecl cdecl q n = HS.ConDecl (unqhname "C" q)@@ -438,6 +455,14 @@   , "{-# INLINE [1] mazCoerce #-}"   , "mazCoerce = Unsafe.Coerce.unsafeCoerce"   , "{-# RULES \"coerce-id\" forall (x :: a) . mazCoerce x = x #-}"+  , ""+  , "-- Builtin QNames, the third field is for the type."+  , "data QName a b = QName { nameId, moduleId :: Integer, qnameType :: a, qnameDefinition :: b }"+  , "instance Eq (QName a b) where"+  , "  QName a b _ _ == QName c d _ _ = (a, b) == (c, d)"+  , ""+  , "mazIncompleteMatch :: String -> a"+  , "mazIncompleteMatch s = error (\"MAlonzo Runtime Error: incomplete pattern matching: \" ++ s)"   ]   where     parse = HS.parseWithMode
src/full/Agda/Compiler/MAlonzo/Misc.hs view
@@ -14,7 +14,6 @@ import System.Time  import Agda.Interaction.Imports-import Agda.Interaction.Monad import Agda.Syntax.Common import qualified Agda.Syntax.Concrete.Name as C import Agda.Syntax.Internal@@ -116,10 +115,12 @@ -- always use the original name for a constructor even when it's redefined. conhqn :: QName -> TCM HS.QName conhqn q = do-    cq   <- canonicalName q-    defn <- theDef <$> getConstInfo cq-    case defn of Constructor{conHsCode = Just (_, hs)} -> return $ HS.UnQual $ HS.Ident hs-                 _                                     -> xhqn "C" cq+    cq  <- canonicalName q+    def <- getConstInfo cq+    hsr <- compiledHaskell . defCompiledRep <$> getConstInfo cq+    case (compiledHaskell (defCompiledRep def), theDef def) of+      (Just (HsDefn _ hs), Constructor{}) -> return $ HS.UnQual $ HS.Ident hs+      _                                   -> xhqn "C" cq  -- qualify name s by the module of builtin b bltQual :: String -> String -> TCM HS.QName@@ -144,6 +145,11 @@ mazerror msg = error $ mazstr ++ ": " ++ msg -- mazCoerce = HS.Var $ HS.Qual unsafeCoerceMod (HS.Ident "unsafeCoerce") mazCoerce = HS.Var $ HS.Qual mazRTE $ HS.Ident "mazCoerce"++-- Andreas, 2011-11-16: error incomplete match now RTE-call+mazIncompleteMatch = HS.Var $ HS.Qual mazRTE $ HS.Ident "mazIncompleteMatch"+rtmIncompleteMatch :: QName -> HS.Exp+rtmIncompleteMatch q = mazIncompleteMatch `HS.App` hsVarUQ (unqhname "name" q)  mazRTE :: HS.ModuleName mazRTE = HS.ModuleName "MAlonzo.RTE"
src/full/Agda/Compiler/MAlonzo/Primitives.hs view
@@ -24,7 +24,7 @@ checkTypeOfMain q ty   | show (qnameName q) /= "main" = return ()   | otherwise = do-    Def io [] <- primIO+    Def io _ <- primIO     ty <- normalise ty     case unEl ty of       Def d _ | d == io -> return ()@@ -183,14 +183,18 @@   , "primStringEquality" |-> rel "(==)" "String"   , "primShowString"     |-> return "(show :: String -> String)" -  -- QNames-  , "primQNameEquality" |-> rel "(==)" "String"+  -- Reflection+  , "primQNameEquality"   |-> rel "(==)" "MAlonzo.RTE.QName () ()"+  , "primQNameType"       |-> return "MAlonzo.RTE.qnameType"+  , "primQNameDefinition" |-> return "MAlonzo.RTE.qnameDefinition" +  , "primDataConstructors" |-> return "(error \"primDataConstructors: not implemented\")"+   -- Trust me   , ("primTrustMe"       , Right <$> do        refl <- primRefl        flip runReaderT 0 $-         term $ lam "A" (lam "x" (lam "y" refl)))+         term $ lam "a" (lam "A" (lam "x" (lam "y" refl))))   ]   where   x |-> s = (x, Left <$> s)@@ -226,18 +230,19 @@  pconName :: String -> TCM String pconName s = toS =<< getBuiltin s where-  toS (Con q _)         = prettyPrint <$> conhqn q-  toS (Lam _ (Abs _ t)) = toS t+  toS (Con q _) = prettyPrint <$> conhqn q+  toS (Lam _ t) = toS (unAbs t)   toS _ = mazerror $ "pconName" ++ s  hasCompiledData :: [String] -> TCM Bool hasCompiledData (s:_) = toB =<< getBuiltin s where   toB (Con q _)         = do     def <- getConstInfo =<< ignoreAbstractMode (canonicalName q)-    return $ case theDef def of Constructor{conHsCode = Just _} -> True-                                _                               -> False-  toB (Lam _ (Abs _ t)) = toB t-  toB _                 = return False+    return $ case compiledHaskell $ defCompiledRep def of+      Just{}  -> True+      Nothing -> False+  toB (Lam _ t) = toB (unAbs t)+  toB _         = return False hasCompiledData _    = return False  
src/full/Agda/Interaction/BasicOps.hs view
@@ -1,13 +1,10 @@ {-# LANGUAGE CPP, MultiParamTypeClasses, FlexibleInstances,-             UndecidableInstances+             UndecidableInstances, DeriveFunctor   #-}  module Agda.Interaction.BasicOps where-{- TODO: The operations in this module should return Expr and not String,-         for this we need to write a translator from Internal to Abstract syntax.--} -+import Control.Applicative import Control.Monad.Error import Control.Monad.Reader import Control.Monad.State@@ -16,8 +13,6 @@ import Data.List import Data.Maybe -import Agda.Interaction.Monad- import qualified Agda.Syntax.Concrete as C -- ToDo: Remove with instance of ToConcrete import Agda.Syntax.Position import Agda.Syntax.Abstract as A hiding (Open)@@ -42,9 +37,12 @@ import Agda.TypeChecking.EtaContract (etaContract) import Agda.TypeChecking.Coverage import Agda.TypeChecking.Records+import Agda.TypeChecking.Irrelevance (wakeIrrelevantVars) import Agda.TypeChecking.Pretty (prettyTCM)+import Agda.TypeChecking.Eliminators (unElim) import qualified Agda.TypeChecking.Pretty as TP +import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Pretty import Agda.Utils.Permutation@@ -71,7 +69,7 @@     concreteToAbstract (clScope mi) e  giveExpr :: MetaId -> Expr -> TCM Expr--- When translater from internal to abstract is given, this function might return+-- When translator from internal to abstract is given, this function might return -- the expression returned by the type checker. giveExpr mi e =     do  mv <- lookupMeta mi@@ -84,11 +82,10 @@ 		    let t' = t `piApply` ctx 		    v	<- checkExpr e t' 		    case mvInstantiation mv of-			InstV v' ->-			  addConstraints =<< equalTerm t' v (v' `apply` ctx)+			InstV v' -> equalTerm t' v (v' `apply` ctx) 			_	 -> updateMeta mi v 		    reify v-		 IsSort _ -> __IMPOSSIBLE__+		 IsSort{} -> __IMPOSSIBLE__  give :: InteractionId -> Maybe Range -> Expr -> TCM (Expr,[InteractionId]) give ii mr e = liftTCM $ do@@ -115,8 +112,6 @@   refine :: InteractionId -> Maybe Range -> Expr -> TCM (Expr,[InteractionId])--- If constants has a fixed arity, then it might be better to do--- exact refinement. refine ii mr e =     do  mi <- lookupInteractionId ii         mv <- lookupMeta mi@@ -139,47 +134,10 @@                  --ToDo: The position of metaVar is not correct                  --ToDo: The fixity of metavars is not correct -- fixed? MT -{--refineExact :: InteractionId -> Maybe Range -> Expr -> TCM (Expr,[InteractionId])-refineExact ii mr e =-    do  mi <- lookupInteractionId ii-        mv <- lookupMeta mi-        let range = maybe (getRange mv) id mr-        let scope = M.getMetaScope mv-        (_,t) <- withMetaInfo (getMetaInfo mv) $ inferExpr e-        let arityt = arity t--        tryRefine 10 range scope e-  where tryRefine :: Int -> Range -> ScopeInfo -> Expr -> TCM (Expr,[InteractionId])-        tryRefine nrOfMetas r scope e = try nrOfMetas e-           where try 0 e = throwError (strMsg "Can not refine")-                 try n e = give ii (Just r) e `catchError` (\_ -> try (n-1) (appMeta e))-                 appMeta :: Expr -> Expr-                 appMeta e =-                      let metaVar = QuestionMark $ Agda.Syntax.Info.MetaInfo {Agda.Syntax.Info.metaRange = r,-                                                 Agda.Syntax.Info.metaScope = scope}-                      in App (ExprRange $ r) NotHidden e metaVar-                 --ToDo: The position of metaVar is not correct------abstract :: InteractionId -> Maybe Range -> TCM (Expr,[InteractionId])-abstract ii mr---refineExact :: InteractionId -> Expr -> TCM (Expr,[InteractionId])-refineExact ii e =-    do--}-- {-| Evaluate the given expression in the current environment -} evalInCurrent :: Expr -> TCM Expr evalInCurrent e =-    do  t <- newTypeMeta_-	v <- checkExpr e t+    do  (v, t) <- inferExpr e 	v' <- {- etaContract =<< -} normalise v 	reify v' @@ -201,68 +159,62 @@ rewrite Normalised   t = {- etaContract =<< -} normalise t  -data OutputForm a b+data OutputForm a b = OutputForm ProblemId (OutputConstraint a b)+  deriving (Functor)++data OutputConstraint a b       = OfType b a | CmpInType Comparison a b b-                   | CmpTerms [Polarity] a [b] [b]+                   | CmpElim [Polarity] a [b] [b]       | JustType b | CmpTypes Comparison b b                    | CmpLevels Comparison b b                    | CmpTeles Comparison b b       | JustSort b | CmpSorts Comparison b b-      | Guard (OutputForm a b) [OutputForm a b]+      | Guard (OutputConstraint a b) ProblemId       | Assign b a | TypedAssign b a a-      | IsEmptyType a+      | IsEmptyType a | FindInScopeOF b+  deriving (Functor) --- | A subset of 'OutputForm'.+-- | A subset of 'OutputConstraint'. -data OutputForm' a b = OfType' { ofName :: b-                               , ofExpr :: a-                               }+data OutputConstraint' a b = OfType' { ofName :: b+                                     , ofExpr :: a+                                     }  outputFormId :: OutputForm a b -> b-outputFormId o = case o of-  OfType i _           -> i-  CmpInType _ _ i _    -> i-  CmpTerms _ _ (i:_) _ -> i-  CmpTerms _ _ [] _    -> __IMPOSSIBLE__-  JustType i           -> i-  CmpLevels _ i _      -> i-  CmpTypes _ i _       -> i-  CmpTeles _ i _       -> i-  JustSort i           -> i-  CmpSorts _ i _       -> i-  Guard o _            -> outputFormId o-  Assign i _           -> i-  TypedAssign i _ _    -> i-  IsEmptyType _        -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints+outputFormId (OutputForm _ o) = out o+  where+    out o = case o of+      OfType i _           -> i+      CmpInType _ _ i _    -> i+      CmpElim _ _ (i:_) _  -> i+      CmpElim _ _ [] _     -> __IMPOSSIBLE__+      JustType i           -> i+      CmpLevels _ i _      -> i+      CmpTypes _ i _       -> i+      CmpTeles _ i _       -> i+      JustSort i           -> i+      CmpSorts _ i _       -> i+      Guard o _            -> out o+      Assign i _           -> i+      TypedAssign i _ _    -> i+      IsEmptyType _        -> __IMPOSSIBLE__   -- Should never be used on IsEmpty constraints+      FindInScopeOF _      -> __IMPOSSIBLE__ -instance Functor (OutputForm a) where-    fmap f (OfType e t)           = OfType (f e) t-    fmap f (JustType e)           = JustType (f e)-    fmap f (JustSort e)           = JustSort (f e)-    fmap f (CmpInType cmp t e e') = CmpInType cmp t (f e) (f e')-    fmap f (CmpTerms cmp t e e')  = CmpTerms cmp t (map f e) (map f e')-    fmap f (CmpTypes cmp e e')    = CmpTypes cmp (f e) (f e')-    fmap f (CmpLevels cmp e e')   = CmpLevels cmp (f e) (f e')-    fmap f (CmpTeles cmp e e')    = CmpTeles cmp (f e) (f e')-    fmap f (CmpSorts cmp e e')    = CmpSorts cmp (f e) (f e')-    fmap f (Guard o os)           = Guard (fmap f o) (fmap (fmap f) os)-    fmap f (Assign m e)           = Assign (f m) e-    fmap f (TypedAssign m e a)    = TypedAssign (f m) e a-    fmap f (IsEmptyType a)        = IsEmptyType a+instance Reify ProblemConstraint (Closure (OutputForm Expr Expr)) where+  reify (PConstr pid cl) = enterClosure cl $ \c -> buildClosure =<< (OutputForm pid <$> reify c) -instance Reify Constraint (OutputForm Expr Expr) where+instance Reify Constraint (OutputConstraint Expr Expr) where     reify (ValueCmp cmp t u v)   = CmpInType cmp <$> reify t <*> reify u <*> reify v-    reify (ArgsCmp cmp t u v)    = CmpTerms cmp <$> reify t-                                                <*> mapM (reify . unArg) u-                                                <*> mapM (reify . unArg) v+    reify (ElimCmp cmp t v es1 es2) =+      CmpElim cmp <$> reify t <*> reify es1+                              <*> reify es2     reify (LevelCmp cmp t t')    = CmpLevels cmp <$> reify t <*> reify t'     reify (TypeCmp cmp t t')     = CmpTypes cmp <$> reify t <*> reify t'-    reify (TelCmp  cmp t t')     = CmpTeles cmp <$> (ETel <$> reify t) <*> (ETel <$> reify t')+    reify (TelCmp a b cmp t t')  = CmpTeles cmp <$> (ETel <$> reify t) <*> (ETel <$> reify t')     reify (SortCmp cmp s s')     = CmpSorts cmp <$> reify s <*> reify s'-    reify (Guarded c cs) = do+    reify (Guarded c pid) = do 	o  <- reify c-	os <- mapM (withConstraint reify) cs-	return $ Guard o os+	return $ Guard o pid     reify (UnBlock m) = do         mi <- mvInstantiation <$> lookupMeta m         case mi of@@ -275,8 +227,12 @@             m' <- reify (MetaV m [])             return $ TypedAssign m' e a           Open{}  -> __IMPOSSIBLE__+          OpenIFS{}  -> __IMPOSSIBLE__           InstS{} -> __IMPOSSIBLE__           InstV{} -> __IMPOSSIBLE__+    reify (FindInScope m) = do+      m' <- reify (MetaV m [])+      return $ FindInScopeOF m' -- IFSTODO     reify (IsEmpty a) = IsEmptyType <$> reify a  showComparison :: Comparison -> String@@ -284,30 +240,39 @@ showComparison CmpLeq = " =< "  instance (Show a,Show b) => Show (OutputForm a b) where+  show (OutputForm 0   c) = show c+  show (OutputForm pid c) = "[" ++ show pid ++ "] " ++ show c++instance (Show a,Show b) => Show (OutputConstraint a b) where     show (OfType e t)           = show e ++ " : " ++ show t     show (JustType e)           = "Type " ++ show e     show (JustSort e)           = "Sort " ++ show e     show (CmpInType cmp t e e') = show e ++ showComparison cmp ++ show e' ++ " : " ++ show t-    show (CmpTerms cmp t e e')  = show e ++ "~~" ++ show e' ++ " : " ++ show t+    show (CmpElim cmp t e e')   = show e ++ " == " ++ show e' ++ " : " ++ show t     show (CmpTypes  cmp t t')   = show t ++ showComparison cmp ++ show t'     show (CmpLevels cmp t t')   = show t ++ showComparison cmp ++ show t'     show (CmpTeles  cmp t t')   = show t ++ showComparison cmp ++ show t'     show (CmpSorts cmp s s')    = show s ++ showComparison cmp ++ show s'-    show (Guard o os)           = show o ++ "  if  " ++ show os+    show (Guard o pid)          = show o ++ " [blocked by problem " ++ show pid ++ "]"     show (Assign m e)           = show m ++ " := " ++ show e-    show (TypedAssign m e a)    = show m ++ " := " ++ show e ++ " : " ++ show a+    show (TypedAssign m e a)    = show m ++ " := " ++ show e ++ " :? " ++ show a     show (IsEmptyType a)        = "Is empty: " ++ show a+    show (FindInScopeOF s)      = "Find in Scope: " ++ show s  instance (ToConcrete a c, ToConcrete b d) =>          ToConcrete (OutputForm a b) (OutputForm c d) where+    toConcrete (OutputForm pid c) = OutputForm pid <$> toConcrete c++instance (ToConcrete a c, ToConcrete b d) =>+         ToConcrete (OutputConstraint a b) (OutputConstraint c d) where     toConcrete (OfType e t) = OfType <$> toConcrete e <*> toConcreteCtx TopCtx t     toConcrete (JustType e) = JustType <$> toConcrete e     toConcrete (JustSort e) = JustSort <$> toConcrete e     toConcrete (CmpInType cmp t e e') =       CmpInType cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx ArgumentCtx e                                                <*> toConcreteCtx ArgumentCtx e'-    toConcrete (CmpTerms cmp t e e') =-      CmpTerms cmp <$> toConcreteCtx TopCtx t <*> mapM toConcrete e <*> mapM toConcrete e'+    toConcrete (CmpElim cmp t e e') =+      CmpElim cmp <$> toConcreteCtx TopCtx t <*> toConcreteCtx TopCtx e <*> toConcreteCtx TopCtx e'     toConcrete (CmpTypes cmp e e') = CmpTypes cmp <$> toConcreteCtx ArgumentCtx e                                                   <*> toConcreteCtx ArgumentCtx e'     toConcrete (CmpLevels cmp e e') = CmpLevels cmp <$> toConcreteCtx ArgumentCtx e@@ -315,17 +280,18 @@     toConcrete (CmpTeles cmp e e') = CmpTeles cmp <$> toConcrete e <*> toConcrete e'     toConcrete (CmpSorts cmp e e') = CmpSorts cmp <$> toConcreteCtx ArgumentCtx e                                                   <*> toConcreteCtx ArgumentCtx e'-    toConcrete (Guard o os) = Guard <$> toConcrete o <*> toConcrete os-    toConcrete (Assign m e) = Assign <$> toConcrete m <*> toConcreteCtx TopCtx e+    toConcrete (Guard o pid) = Guard <$> toConcrete o <*> pure pid+    toConcrete (Assign m e) = noTakenNames $ Assign <$> toConcrete m <*> toConcreteCtx TopCtx e     toConcrete (TypedAssign m e a) = TypedAssign <$> toConcrete m <*> toConcreteCtx TopCtx e                                                                   <*> toConcreteCtx TopCtx a     toConcrete (IsEmptyType a) = IsEmptyType <$> toConcreteCtx TopCtx a+    toConcrete (FindInScopeOF s) = FindInScopeOF <$> toConcrete s -instance (Pretty a, Pretty b) => Pretty (OutputForm' a b) where+instance (Pretty a, Pretty b) => Pretty (OutputConstraint' a b) where   pretty (OfType' e t) = pretty e <+> text ":" <+> pretty t  instance (ToConcrete a c, ToConcrete b d) =>-            ToConcrete (OutputForm' a b) (OutputForm' c d) where+            ToConcrete (OutputConstraint' a b) (OutputConstraint' c d) where   toConcrete (OfType' e t) = OfType' <$> toConcrete e <*> toConcreteCtx TopCtx t  --ToDo: Move somewhere else@@ -334,21 +300,16 @@ instance ToConcrete MetaId C.Expr where     toConcrete (MetaId i) = return $ C.Underscore noRange (Just i) -judgToOutputForm :: Judgement a c -> OutputForm a c+judgToOutputForm :: Judgement a c -> OutputConstraint a c judgToOutputForm (HasType e t) = OfType e t-judgToOutputForm (IsSort s)    = JustSort s----- Printing Operations-getConstraint :: Int -> TCM (OutputForm Expr Expr)-getConstraint ci =-    do  cc <- lookupConstraint ci-        cc <- reduce cc-        withConstraint reify cc-+judgToOutputForm (IsSort  s t) = JustSort s  getConstraints :: TCM [OutputForm C.Expr C.Expr] getConstraints = liftTCM $ do-    cs <- mapM (withConstraint (abstractToConcrete_ <.> reify)) =<< reduce =<< M.getConstraints+    cs <- M.getAllConstraints+    cs <- forM cs $ \c -> do+            cl <- reify c+            enterClosure cl abstractToConcrete_     ss <- mapM toOutputForm =<< getSolvedInteractionPoints     return $ ss ++ cs   where@@ -356,7 +317,7 @@       mv <- getMetaInfo <$> lookupMeta mi       withMetaInfo mv $ do         let m = QuestionMark $ MetaInfo noRange emptyScopeInfo (Just $ fromIntegral ii)-        abstractToConcrete_ $ Assign m e+        abstractToConcrete_ $ OutputForm 0 $ Assign m e  getSolvedInteractionPoints :: TCM [(InteractionId, MetaId, Expr)] getSolvedInteractionPoints = do@@ -373,12 +334,13 @@             unsol = return []         case mvInstantiation mv of           InstV{}                        -> sol (MetaV m args)-          InstS{}                        -> sol (Sort $ MetaS m args)+          InstS{}                        -> sol (Level $ Max [Plus 0 $ MetaLevel m args])           Open{}                         -> unsol+          OpenIFS{}                         -> unsol           BlockedConst{}                 -> unsol           PostponedTypeCheckingProblem{} -> unsol -typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputForm Expr MetaId)+typeOfMetaMI :: Rewrite -> MetaId -> TCM (OutputConstraint Expr MetaId) typeOfMetaMI norm mi =      do mv <- lookupMeta mi 	withMetaInfo (getMetaInfo mv) $@@ -396,20 +358,20 @@           ]         ]       OfType i <$> reify (t `piApply` permute (takeP (size vs) $ mvPermutation mv) vs)-    rewriteJudg mv (IsSort i) = return $ JustSort i+    rewriteJudg mv (IsSort i t) = return $ JustSort i  -typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputForm Expr InteractionId)+typeOfMeta :: Rewrite -> InteractionId -> TCM (OutputConstraint Expr InteractionId) typeOfMeta norm ii =      do mi <- lookupInteractionId ii         out <- typeOfMetaMI norm mi         return $ fmap (\_ -> ii) out -typesOfVisibleMetas :: Rewrite -> TCM [OutputForm Expr InteractionId]+typesOfVisibleMetas :: Rewrite -> TCM [OutputConstraint Expr InteractionId] typesOfVisibleMetas norm =   liftTCM $ mapM (typeOfMeta norm) =<< getInteractionPoints -typesOfHiddenMetas :: Rewrite -> TCM [OutputForm Expr MetaId]+typesOfHiddenMetas :: Rewrite -> TCM [OutputConstraint Expr MetaId] typesOfHiddenMetas norm = liftTCM $ do   is    <- getInteractionMetas   store <- Map.filterWithKey (openAndImplicit is) <$> getMetaStore@@ -421,7 +383,7 @@  -- Gives a list of names and corresponding types. -contextOfMeta :: InteractionId -> Rewrite -> TCM [OutputForm' Expr Name]+contextOfMeta :: InteractionId -> Rewrite -> TCM [OutputConstraint' Expr Name] contextOfMeta ii norm = do   info <- getMetaInfo <$> (lookupMeta =<< lookupInteractionId ii)   let localVars = map ctxEntry . envContext . clEnv $ info@@ -437,10 +399,12 @@           return $ OfType x t'  -{-| Returns the type of the expression in the current environment -}+-- | Returns the type of the expression in the current environment+--   We wake up irrelevant variables just in case the user want to+--   invoke that command in an irrelevant context. typeInCurrent :: Rewrite -> Expr -> TCM Expr typeInCurrent norm e =-    do 	(_,t) <- inferExpr e+    do 	(_,t) <- wakeIrrelevantVars $ inferExpr e         v <- rewrite norm t         reify v @@ -538,7 +502,7 @@ -- of the top-level module.  atTopLevel :: TCM a -> TCM a-atTopLevel m = do+atTopLevel m = inConcreteMode $ do   mCurrent <- stCurrentModule <$> get   case mCurrent of     Nothing      -> typeError $@@ -548,10 +512,13 @@       case r of         Nothing -> __IMPOSSIBLE__         Just mi -> do+          let scope = iInsideScope $ miInterface mi           tel <- lookupSection current           M.withCurrentModule current $-            withScope_ (iInsideScope $ miInterface mi) $-              addCtxTel tel $+            withScope_ scope $+              addContext (zipWith' (fmap . (,))+                                   (map snd $ scopeLocals scope)+                                   (map (fmap snd) $ telToList tel)) $                 m  -- | Returns the contents of the given module.
src/full/Agda/Interaction/CommandLine/CommandLine.hs view
@@ -77,7 +77,7 @@ 		    Just _ -> 			do  go =<< liftTCM (eval $ fromJust ms) 	    `catchError` \e ->-		do  s <- prettyError e+		do  s <- liftTCM $ prettyError e 		    liftIO $ LocIO.putStrLn s 		    loop @@ -133,11 +133,6 @@ loadFile _ _ = liftIO $ LocIO.putStrLn ":load file"  showConstraints :: [String] -> TCM ()-showConstraints [c] =-    do	i  <- readM c-	cc <- normalise =<< lookupConstraint i-	d  <- prettyTCM $ clValue cc-	liftIO $ LocIO.print d showConstraints [] =     do	cs <- BasicOps.getConstraints 	liftIO $ LocIO.putStrLn $ unlines (List.map show cs)@@ -164,8 +159,8 @@         mapM_ (liftIO . LocIO.putStrLn) =<< mapM showII interactionMetas 	mapM_ print' hiddenMetas     where-	showII o = withInteractionId (outputFormId o) $ showA o-	showM  o = withMetaId (outputFormId o) $ showA o+	showII o = withInteractionId (outputFormId $ OutputForm 0 o) $ showA o+	showM  o = withMetaId (outputFormId $ OutputForm 0 o) $ showA o  	metaId (OfType i _) = i 	metaId (JustType i) = i@@ -222,7 +217,7 @@   retryConstraints :: TCM ()-retryConstraints = liftTCM wakeupConstraints+retryConstraints = liftTCM wakeupConstraints_   evalIn :: [String] -> TCM ()@@ -245,9 +240,8 @@ 	return Continue     where 	evalInCurrent e = do-	  t <- newTypeMeta_-	  v <- checkExpr e t-	  v' <- normalise v+	  (v,t) <- inferExpr e+	  v'    <- normalise v 	  return v'  @@ -261,7 +255,7 @@ typeIn :: [String] -> TCM () typeIn s@(_:_:_) =     actOnMeta s $ \i e ->-    do	e1  <- typeInMeta i Normalised e+    do	e1 <- typeInMeta i Normalised e         e2 <- typeInMeta i AsIs e 	liftIO . LocIO.putStrLn =<< showA e1 typeIn _ = liftIO $ LocIO.putStrLn ":typeIn meta expr"
+ src/full/Agda/Interaction/EmacsCommand.hs view
@@ -0,0 +1,45 @@+------------------------------------------------------------------------+-- | Low-level code for instructing Emacs to do things+------------------------------------------------------------------------++{-# LANGUAGE TypeSynonymInstances, FlexibleInstances #-}++module Agda.Interaction.EmacsCommand+  ( Lisp(..)+  , putResponse+  ) where++import qualified Agda.Utils.IO.Locale as LocIO+import Agda.Utils.Pretty++-- | Simple Emacs Lisp expressions.++data Lisp a+  = A a+    -- ^ Atom.+  | Cons (Lisp a) (Lisp a)+    -- Cons cell.+  | L [Lisp a]+    -- ^ List.+  | Q (Lisp a)+    -- Quoted expression.++instance Pretty a => Pretty (Lisp a) where+  pretty (A a )     = pretty a+  pretty (Cons a b) = parens (pretty a <+> text "." <+> pretty b)+  pretty (L xs)     = parens (hsep (map pretty xs))+  pretty (Q x)      = text "'" <> pretty x++instance Pretty String where pretty = text++instance Pretty a => Show (Lisp a) where show = show . pretty++-- | Formats a response command.++response :: Lisp String -> String+response l = show (text "agda2_mode_code" <+> pretty l)++-- | Writes a response command to standard output.++putResponse :: Lisp String -> IO ()+putResponse = LocIO.putStrLn . response
src/full/Agda/Interaction/GhciTop.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, TypeSynonymInstances #-}+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances #-} {-# OPTIONS -fno-cse #-}  module Agda.Interaction.GhciTop@@ -42,7 +42,6 @@ import Agda.Utils.FileName import qualified Agda.Utils.Trie as Trie import Agda.Utils.Tuple-import qualified Agda.Utils.IO.Locale as LocIO import qualified Agda.Utils.IO.UTF8 as UTF8  import Control.Monad.Error@@ -63,8 +62,8 @@ import Agda.TypeChecking.MetaVars import Agda.TypeChecking.Reduce import Agda.TypeChecking.Errors-import Agda.TypeChecking.Serialise (encodeFile) +import Agda.Syntax.Fixity import Agda.Syntax.Position import Agda.Syntax.Parser import qualified Agda.Syntax.Parser.Tokens as T@@ -83,12 +82,12 @@ import Agda.Syntax.Translation.InternalToAbstract import Agda.Syntax.Abstract.Name +import Agda.Interaction.EmacsCommand import Agda.Interaction.Exceptions import Agda.Interaction.FindFile import Agda.Interaction.Options import Agda.Interaction.MakeCase import qualified Agda.Interaction.BasicOps as B-import qualified Agda.Interaction.CommandLine.CommandLine as CL import Agda.Interaction.Highlighting.Emacs import Agda.Interaction.Highlighting.Generate import qualified Agda.Interaction.Imports as Imp@@ -97,6 +96,7 @@  import qualified Agda.Compiler.Epic.Compiler as Epic import qualified Agda.Compiler.MAlonzo.Compiler as MAlonzo+import qualified Agda.Compiler.JS.Compiler as JS  import qualified Agda.Auto.Auto as Auto @@ -173,7 +173,7 @@     Left err -> do       Right doc <- runTCM $ prettyTCM err       putStrLn $ render doc-      return $ undefined+      return __IMPOSSIBLE__ {-   Right (x, s) <- runTCM $ do     put $ theTCState tcs@@ -205,9 +205,7 @@   current <- absolute current    -- Read the state.-  State { theTCState     = st-        , theCurrentFile = f-        } <- readIORef theState+  State { theTCState = st } <- readIORef theState    -- Run the computation.   r <- runTCM $ catchError (do@@ -227,20 +225,31 @@            st <- get            return (Right (x, st))          ) (\e -> do-           s <- prettyError e-           return (Left (s, e))+           pers <- stPersistent <$> get+           s    <- prettyError e+           return (Left (pers, s, e))          ) -  -- Update the state.+  -- Upon success: update the state. Upon failure: update the+  -- persistent state, and, for independent commands, the current+  -- file.   case r of     Right (Right (m, st')) ->       modifyIORef theState $ \s ->-        s { theTCState   = st'+        s { theTCState = st'           }-    _ | isIndependent cmd ->+    Right (Left (pers, _, _)) -> do       modifyIORef theState $ \s ->-        s { theCurrentFile = Nothing }-    _ -> return ()+        s { theTCState = (theTCState s) { stPersistent = pers }+          }+    Left _ -> return ()+  when (isIndependent cmd) $+    case r of+      Right (Right _) -> return ()+      _               ->+        modifyIORef theState $ \s ->+          s { theCurrentFile = Nothing+            }    -- Write out syntax highlighting info.   case highlightingFile of@@ -260,8 +269,8 @@               return ( iHighlighting $ miInterface mi                      , stModuleToSource st'                      )-            Right (Left (s, e)) -> errHi e (Just s)-            Left e              -> errHi e Nothing+            Right (Left (_ , s, e)) -> errHi e (Just s)+            Left e                  -> errHi e Nothing    -- If an error was encountered, display an error message and exit   -- with an error code; otherwise, inform Emacs about the buffer's@@ -271,15 +280,15 @@                              optShowImplicit $ stPragmaOptions st                          }   case r of-    Right (Left (s, e)) -> displayErrorAndExit errStatus (getRange e) s-    Left e              -> displayErrorAndExit errStatus (getRange e) $-                             tcErrString e-    Right (Right _)     -> do+    Right (Left (_, s, e)) -> displayErrorAndExit errStatus (getRange e) s+    Left e                 -> displayErrorAndExit errStatus (getRange e) $+                                tcErrString e+    Right (Right _)        -> do       f <- theCurrentFile <$> readIORef theState       case f of         Just (f, _) | f === current -> do           is <- theInteractionPoints <$> liftIO (readIORef theState)-          liftIO $ LocIO.putStrLn $ response $+          liftIO $ putResponse $             L [A "agda2-goals-action", Q $ L $ List.map showNumIId is]         _ -> return () @@ -315,7 +324,7 @@     -- All options (except for the verbosity setting) are reset when a     -- file is reloaded, including the choice of whether or not to     -- display implicit arguments. (At this point the include-    -- directories have already been reset, so they are preserved.)+    -- directories have already been set, so they are preserved.)     opts <- commandLineOptions     setCommandLineOptions $       defaultOptions { optIncludeDirs   = optIncludeDirs opts@@ -327,9 +336,9 @@                      }      -- Reset the state, preserving options and decoded modules. Note-    -- that Imp.typeCheck resets the decoded modules if the include-    -- directories have changed.-    preserveDecodedModules resetState+    -- that if the include directories have changed, then the decoded+    -- modules are reset when cmd_load' is run by ioTCM.+    resetState      ok <- Imp.typeCheck f @@ -352,7 +361,7 @@  -- | Available backends. -data Backend = MAlonzo | Epic+data Backend = MAlonzo | Epic | JS  -- | @cmd_compile b m includes@ compiles the module in file @m@ using -- the backend @b@, using @includes@ as the include directories.@@ -365,6 +374,7 @@         case b of           MAlonzo -> MAlonzo.compilerMain i           Epic    -> Epic.compilerMain i+          JS      -> JS.compilerMain i         display_info "*Compilation result*"                      "The module was successfully compiled."       Just w ->@@ -388,7 +398,7 @@   hms <- B.typesOfHiddenMetas B.Normalised   if not $ null ims && null hms     then do-      di <- mapM (\i -> B.withInteractionId (B.outputFormId i) (showATop i)) ims+      di <- mapM (\i -> B.withInteractionId (B.outputFormId $ B.OutputForm 0 i) (showATop i)) ims       dh <- mapM showA' hms       display_info "*All Goals*" $ unlines $ di ++ dh       return Nothing@@ -405,7 +415,7 @@     metaId _ = __IMPOSSIBLE__     showA' m = do       r <- getMetaRange (metaId m)-      d <- B.withMetaId (B.outputFormId m) (showATop m)+      d <- B.withMetaId (B.outputFormId $ B.OutputForm 0 m) (showATop m)       return $ d ++ "  [ at " ++ show r ++ " ]"  -- | If the range is 'noRange', then the string comes from the@@ -434,8 +444,7 @@   liftIO $ modifyIORef theState $ \s ->              s { theInteractionPoints =                    replace ii iis (theInteractionPoints s) }-  liftIO $ LocIO.putStrLn $ response $-             L [A "agda2-give-action", showNumIId ii, newtxt]+  liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, newtxt]   command cmd_metas   return Nothing   where@@ -472,7 +481,7 @@     mapM_ (\(ii, s) -> do       liftIO $ modifyIORef theState $ \s ->         s { theInteractionPoints = filter (/= ii) (theInteractionPoints s) }-      liftIO $ LocIO.putStrLn $ response $ L [A "agda2-give-action", showNumIId ii, A $ quote s]+      liftIO $ putResponse $ L [A "agda2-give-action", showNumIId ii, A $ quote s]      ) xs     case msg of      Nothing -> command cmd_metas >> return ()@@ -482,7 +491,7 @@     case msg of      Nothing -> return ()      Just msg -> display_info "*Auto*" msg-    liftIO $ LocIO.putStrLn $ response $+    liftIO $ putResponse $      Cons (A "last")           (L [ A "agda2-make-case-action",                Q $ L $ List.map (A . quote) cs@@ -518,7 +527,7 @@   es  <- mapM (prettyATop . B.ofExpr) ctx   ns  <- mapM (showATop   . B.ofName) ctx   let shuffle = if rev then reverse else id-  return $ align 10 $ shuffle $ zip ns (map (text ":" <+>) es)+  return $ align 10 $ filter (not . null. fst) $ shuffle $ zip ns (map (text ":" <+>) es)  cmd_context :: B.Rewrite -> GoalCommand cmd_context norm ii _ _ = Interaction Dependent $ do@@ -655,15 +664,14 @@  displayStatus :: Status -> IO () displayStatus s =-  LocIO.putStrLn $ response $-    L [A "agda2-status-action", A (quote $ showStatus s)]+  putResponse $ L [A "agda2-status-action", A (quote $ showStatus s)]  -- | @display_info' header content@ displays @content@ (with header -- @header@) in some suitable way.  display_info' :: String -> String -> IO () display_info' bufname content =-  LocIO.putStrLn $ response $+  putResponse $     L [ A "agda2-info-action"       , A (quote bufname)       , A (quote content)@@ -683,23 +691,6 @@ display_infoD :: String -> Doc -> TCM () display_infoD bufname content = display_info bufname (render content) --- | Formats a response command.--response :: Lisp String -> String-response l = show (text "agda2_mode_code" <+> pretty l)--data Lisp a = A a | L [Lisp a] | Q (Lisp a) | Cons (Lisp a) (Lisp a)--instance Pretty a => Pretty (Lisp a) where-  pretty (A a )     = pretty a-  pretty (L xs)     = parens (sep (List.map pretty xs))-  pretty (Q x)      = text "'" <> pretty x-  pretty (Cons a b) = parens (pretty a <+> text "." <+> pretty b)--instance Pretty String where pretty = text--instance Pretty a => Show (Lisp a) where show = show . pretty- showNumIId = A . tail . show  takenNameStr :: TCM [String]@@ -722,21 +713,40 @@  cmd_make_case :: GoalCommand cmd_make_case ii rng s = Interaction Dependent $ do-  cs <- makeCase ii rng s+  (casectxt , cs) <- makeCase ii rng s   B.withInteractionId ii $ do-    pcs <- mapM prettyA cs-    liftIO $ LocIO.putStrLn $ response $+    hidden <- showImplicitArguments+    pcs <- mapM prettyA $ List.map (extlam_dropLLifted casectxt hidden) cs+    liftIO $ putResponse $       Cons (A "last")-           (L [ A "agda2-make-case-action"-              , Q $ L $ List.map (A . quote . render) pcs+           (L [ A (emacscmd casectxt)+              , Q $ L $ List.map (A . quote . (extlam_dropName casectxt) . render) pcs               ])   return Nothing-  where render = renderStyle (style { mode = OneLineMode })+  where+    render = renderStyle (style { mode = OneLineMode })+    emacscmd :: CaseContext -> String+    emacscmd FunctionDef = "agda2-make-case-action"+    emacscmd (ExtendedLambda _ _) = "agda2-make-case-action-extendlam" +    -- Drops pattern added to extended lambda functions when lambda lifting them+    extlam_dropLLifted :: CaseContext -> Bool -> SA.Clause -> SA.Clause+    extlam_dropLLifted FunctionDef _ x = x+    extlam_dropLLifted (ExtendedLambda h nh) hidden (SA.Clause (SA.LHS info name nps ps) rhs decl)+      = let n = if hidden then h else nh+        in+         (SA.Clause (SA.LHS info name (drop n nps) ps) rhs decl)++    -- very dirty hack, string manipulation by dropping the function name+    -- and replacing " = " with " -> "+    extlam_dropName :: CaseContext -> String -> String+    extlam_dropName FunctionDef x = x+    extlam_dropName (ExtendedLambda _ _) x = unwords $ map (\ y -> if y == "=" then "→" else y) $ drop 1 $ words x+ cmd_solveAll :: Interaction cmd_solveAll = Interaction Dependent $ do   out <- getInsts-  liftIO $ LocIO.putStrLn $ response $+  liftIO $ putResponse $     Cons (A "last")          (L [ A "agda2-solveAll-action"             , Q . L $ concatMap prn out@@ -747,7 +757,7 @@     where       lowr (i, m, e) = do         mi <- getMetaInfo <$> lookupMeta m-        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcrete_ e+        e <- withMetaInfo mi $ lowerMeta <$> abstractToConcreteCtx TopCtx e         return (i, e)   prn (ii,e)= [showNumIId ii, A $ quote $ show e] @@ -766,6 +776,7 @@       SC.WithApp r e es	   -> SC.WithApp r (lowerMeta e) (lowerMeta es)       SC.Lam r bs e1       -> SC.Lam r (lowerMeta bs) (go e1)       SC.AbsurdLam r h     -> SC.AbsurdLam r h+      SC.ExtendedLam r cs  -> SC.ExtendedLam r cs       SC.Fun r ae1 e2      -> SC.Fun r (lowerMeta ae1) (go e2)       SC.Pi tb e1          -> SC.Pi (lowerMeta tb) (go e1)       SC.Set _             -> e@@ -782,12 +793,22 @@       SC.RawApp r es	-> SC.RawApp r (lowerMeta es)       SC.OpApp r x es	-> SC.OpApp r x (lowerMeta es)       SC.Rec r fs	-> SC.Rec r (List.map (id -*- lowerMeta) fs)+      SC.RecUpdate r e fs -> SC.RecUpdate r (lowerMeta e) (List.map (id -*- lowerMeta) fs)       SC.HiddenArg r e	-> SC.HiddenArg r (lowerMeta e)+      SC.InstanceArg r e  -> SC.InstanceArg r (lowerMeta e)       SC.QuoteGoal r x e  -> SC.QuoteGoal r x (lowerMeta e)-      SC.Quote r        -> SC.Quote r+      e@SC.Quote{}      -> e+      e@SC.QuoteTerm{}  -> e+      e@SC.Unquote{}    -> e+      SC.DontCare e     -> SC.DontCare (lowerMeta e) +instance LowerMeta (OpApp SC.Expr) where+  lowerMeta (Ordinary e) = Ordinary $ lowerMeta e+  lowerMeta (SyntaxBindingLambda r bs e) = SyntaxBindingLambda r (lowerMeta bs) (lowerMeta e)++ instance LowerMeta SC.LamBinding where-  lowerMeta b@(SC.DomainFree _ _) = b+  lowerMeta b@(SC.DomainFree _ _ _) = b   lowerMeta (SC.DomainFull tb)    = SC.DomainFull (lowerMeta tb)  instance LowerMeta SC.TypedBindings where@@ -801,19 +822,27 @@     lowerMeta (SC.RHS e)    = SC.RHS (lowerMeta e)     lowerMeta  SC.AbsurdRHS = SC.AbsurdRHS +instance LowerMeta (Maybe SC.Expr) where+    lowerMeta (Just e) = Just (lowerMeta e)+    lowerMeta Nothing  = Nothing+ instance LowerMeta SC.Declaration where   lowerMeta = go where     go d = case d of       TypeSig rel n e1              -> TypeSig rel n (lowerMeta e1)       SC.Field n e1                 -> SC.Field n (lowerMeta e1)       FunClause lhs rhs whcl        -> FunClause lhs (lowerMeta rhs) (lowerMeta whcl)+      SC.DataSig r ind n tel e1     -> SC.DataSig r ind n+                                         (lowerMeta tel) (lowerMeta e1)       Data r ind n tel e1 cs        -> Data r ind n                                          (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)+      SC.RecordSig r n tel e1       -> SC.RecordSig r n+                                         (lowerMeta tel) (lowerMeta e1)       SC.Record r n c tel e1 cs     -> SC.Record r n c                                          (lowerMeta tel) (lowerMeta e1) (lowerMeta cs)       Infix _ _                     -> d       Syntax _ _                     -> d-      Mutual r ds                   -> Mutual r (lowerMeta ds)+      SC.Mutual r ds                -> SC.Mutual r (lowerMeta ds)       Abstract r ds                 -> Abstract r (lowerMeta ds)       Private r ds                  -> Private r (lowerMeta ds)       Postulate r sigs              -> Postulate r (lowerMeta sigs)@@ -821,10 +850,14 @@       SC.Open _ _ _                 -> d       SC.Import _ _ _ _ _           -> d       SC.Pragma _                   -> d-      ModuleMacro r n tel e1 op dir -> ModuleMacro r n-                                         (lowerMeta tel) (lowerMeta e1) op dir+      ModuleMacro r n modapp op dir -> ModuleMacro r n+                                         (lowerMeta modapp) op dir       SC.Module r qn tel ds         -> SC.Module r qn (lowerMeta tel) (lowerMeta ds) +instance LowerMeta SC.ModuleApplication where+  lowerMeta (SC.SectionApp r tel e) = SC.SectionApp r (lowerMeta tel) (lowerMeta e)+  lowerMeta (SC.RecordModuleIFS r rec) = SC.RecordModuleIFS r rec+ instance LowerMeta SC.WhereClause where   lowerMeta SC.NoWhere		= SC.NoWhere   lowerMeta (SC.AnyWhere ds)	= SC.AnyWhere $ lowerMeta ds@@ -944,7 +977,7 @@     Nothing                                    -> return ()     Just (Pn { srcFile = Nothing })            -> return ()     Just (Pn { srcFile = Just f, posPos = p }) ->-      LocIO.putStrLn $ response $+      putResponse $         L [ A "annotation-goto"           , Q $ L [A (quote $ filePath f), A ".", A (show p)]           ]
+ src/full/Agda/Interaction/Highlighting/Dot.hs view
@@ -0,0 +1,90 @@+{-# LANGUAGE CPP #-}+module Agda.Interaction.Highlighting.Dot where++import Control.Applicative+import Control.Monad.State++import qualified Data.Map as M+import Data.Map(Map)+import Data.Maybe+import Data.Monoid++import qualified Data.Set as S+import Data.Set (Set)++import System.Directory+import System.FilePath++import qualified Agda.Syntax.Concrete.Name as CN+import Agda.Interaction.FindFile+import Agda.Interaction.Options+import Agda.Syntax.Abstract+import Agda.Syntax.Abstract.Name+import Agda.TypeChecking.Monad++import Agda.Utils.FileName+++#include "../../undefined.h"+import Agda.Utils.Impossible++data DotState = DotState+  { dsModules    :: Map ModuleName String+  , dsNameSupply :: [String]+  , dsConnection :: Set (String, String)+  }++initialDotState :: DotState+initialDotState = DotState+  { dsModules    = mempty+  , dsNameSupply = map (('m':) . show) [0..]+  , dsConnection = mempty+  }++type DotM = StateT DotState TCM++addModule :: ModuleName -> DotM (String, Bool)+addModule m = do+    s <- get+    case M.lookup m (dsModules s) of+        Just r  -> return (r, False)+        Nothing -> do+            let newName:nameSupply = dsNameSupply s+            put s+              { dsModules = M.insert m newName (dsModules s)+              , dsNameSupply = nameSupply+              }+            return (newName, True)+++addConnection :: String -> String -> DotM ()+addConnection m1 m2 = modify $ \s -> s {dsConnection = S.insert (m1,m2) (dsConnection s)}++dottify :: Interface -> DotM String+dottify inter = do+    let curModule = iModuleName inter+    (name, continue) <- addModule curModule+    importsifs <- lift $ map miInterface . catMaybes <$> mapM (getVisitedModule . toTopLevelModuleName) (iImportedModules inter)+    when continue $ do+        imports    <- mapM dottify importsifs+        mapM_ (addConnection name) imports+    return name+++generateDot :: Interface -> TCM ()+generateDot inter = do+    (top, state) <- flip runStateT initialDotState $ do+        dottify inter+    mfile <- optDependencyGraph <$> commandLineOptions+    case mfile of+        Nothing -> __IMPOSSIBLE__+        Just fp -> liftIO $ writeFile fp $ mkDot state+  where+    mkDot :: DotState -> String+    mkDot st = unlines $+        [ "digraph dependencies {"+        ] ++ ["   " ++ repr ++ "[label=\"" ++ show modulename ++ "\"];"+             | (modulename, repr) <- M.toList (dsModules st)]+          ++ ["   " ++ r1 ++ " -> " ++ r2 ++ ";"+             | (r1 , r2) <- S.toList (dsConnection st) ]+          ++ ["}"]
src/full/Agda/Interaction/Highlighting/Emacs.hs view
@@ -10,7 +10,6 @@ import Agda.Interaction.FindFile import Agda.Interaction.Highlighting.Precise import Agda.Interaction.Highlighting.Range-import Agda.Interaction.Highlighting.Generate import Agda.Syntax.Abstract (QName) import Agda.Syntax.Common import qualified Agda.Syntax.Position as P
src/full/Agda/Interaction/Highlighting/Generate.hs view
@@ -37,7 +37,6 @@ import Control.Monad.State import Control.Applicative import Data.Monoid-import Data.Generics import Data.Function import Agda.Utils.Generics import Agda.Utils.FileName@@ -45,7 +44,7 @@ import qualified Data.Map as Map import Data.Maybe import Data.Sequence (Seq, (><))-import Data.List ((\\))+import Data.List ((\\), isPrefixOf) import qualified Data.Sequence as Seq import qualified Data.Foldable as Fold (toList, fold, foldMap) @@ -81,20 +80,17 @@ -- | Generates syntax highlighting information.  generateSyntaxInfo-  :: AbsolutePath           -- ^ The module to highlight.-  -> Maybe TCErr            -- ^ 'Nothing' if the module has been-                            --   successfully type checked (perhaps-                            --   with warnings), otherwise the-                            --   offending error.-                            ---                            --   Precondition: The range of the error-                            --   must match the file name given in the-                            --   previous argument.-  -> CA.TopLevelInfo        -- ^ The abstract syntax of the module.-  -> [([A.QName], [Range])] -- ^ Functions which failed to termination-                            --   check (grouped if they are mutual),-                            --   along with ranges for problematic-                            --   call sites.+  :: AbsolutePath          -- ^ The module to highlight.+  -> Maybe TCErr           -- ^ 'Nothing' if the module has been+                           --   successfully type checked (perhaps+                           --   with warnings), otherwise the+                           --   offending error.+                           --+                           --   Precondition: The range of the error+                           --   must match the file name given in the+                           --   previous argument.+  -> CA.TopLevelInfo       -- ^ The abstract syntax of the module.+  -> [M.TerminationError]  -- ^ Termination checking problems.   -> TCM HighlightingInfo generateSyntaxInfo file mErr top termErrs = do   reportSLn "import.iface.create" 15  $@@ -151,7 +147,6 @@       tokenToFile (T.TokKeyword T.KwForall i)      = aToF Symbol (P.getRange i)       tokenToFile (T.TokKeyword _ i)               = aToF Keyword (P.getRange i)       tokenToFile (T.TokSymbol  _ i)               = aToF Symbol (P.getRange i)-      tokenToFile (T.TokLiteral (L.LitLevel  r _)) = aToF Number r       tokenToFile (T.TokLiteral (L.LitInt    r _)) = aToF Number r       tokenToFile (T.TokLiteral (L.LitFloat  r _)) = aToF Number r       tokenToFile (T.TokLiteral (L.LitString r _)) = aToF String r@@ -169,9 +164,9 @@       where       m            = mempty { otherAspects = [TerminationProblem] }       functionDefs = Fold.foldMap (\x -> several (rToR $ bindingSite x) m) $-                     concatMap fst termErrs-      callSites    = Fold.foldMap (\r -> singleton r m) $-                     concatMap snd termErrs+                     concatMap M.termErrFunctions termErrs+      callSites    = Fold.foldMap (\r -> several (rToR r) m) $+                     concatMap (map M.callInfoRange . M.termErrCalls) termErrs      -- All names mentioned in the syntax tree (not bound variables).     names = everything' (><) (Seq.empty `mkQ`  getName@@ -179,8 +174,10 @@                         decls       where       getName :: A.QName -> Seq A.AmbiguousQName-      getName n = Seq.singleton (A.AmbQ [n])+      getName n | isPrefixOf extendlambdaname $ show $ A.qnameName n = mempty+                | otherwise                                          = Seq.singleton (A.AmbQ [n]) +       getAmbiguous :: A.AmbiguousQName -> Seq A.AmbiguousQName       getAmbiguous = Seq.singleton @@ -228,7 +225,7 @@       getLet A.LetOpen{}           = mempty        getLam :: A.LamBinding -> File-      getLam (A.DomainFree _ x) = bound x+      getLam (A.DomainFree _ _ x) = bound x       getLam (A.DomainFull {})  = mempty        getTyped :: A.TypedBinding -> File@@ -243,7 +240,7 @@                 (mempty { otherAspects = [DottedPattern] })       getPattern _             = mempty -      getFieldDecl :: A.Definition -> File+      getFieldDecl :: A.Declaration -> File       getFieldDecl (A.RecDef _ _ _ _ _ fs) = Fold.foldMap extractField fs         where         extractField (A.ScopedDecl _ ds) = Fold.foldMap extractField ds@@ -288,7 +285,7 @@     Just _  -> return $       -- Traverses the syntax tree and constructs a map from qualified       -- names to name kinds. TODO: Handle open public.-      everything' union (Map.empty `mkQ` getDef `extQ` getDecl) decls+      everything' union (Map.empty `mkQ` getDecl) decls   let merged = Map.union local imported   return (\n -> Map.lookup n merged)   where@@ -305,43 +302,43 @@     dropPostulates k         _ = k    defnToNameKind :: Defn -> NameKind-  defnToNameKind (M.Axiom {})                               = Postulate-  defnToNameKind (M.Function { M.funProjection = Nothing }) = Function-  defnToNameKind (M.Function { M.funProjection = Just _  }) = Field-  defnToNameKind (M.Datatype {})                            = Datatype-  defnToNameKind (M.Record {})                              = Record-  defnToNameKind (M.Constructor { M.conInd = i })           = Constructor i-  defnToNameKind (M.Primitive {})                           = Primitive+  defnToNameKind (M.Axiom {})                     = Postulate+  defnToNameKind (M.Function {})                  = Function+  defnToNameKind (M.Datatype {})                  = Datatype+  defnToNameKind (M.Record {})                    = Record+  defnToNameKind (M.Constructor { M.conInd = i }) = Constructor i+  defnToNameKind (M.Primitive {})                 = Primitive    getAxiomName :: A.Declaration -> A.QName   getAxiomName (A.Axiom _ _ q _) = q   getAxiomName _                 = __IMPOSSIBLE__ -  getDef :: A.Definition -> Map A.QName NameKind-  getDef (A.FunDef  _ q _)       = Map.singleton q Function-  getDef (A.DataDef _ q _ cs)    = Map.singleton q Datatype `union`-                                   (Map.unions $-                                    map (\q -> Map.singleton q (Constructor SC.Inductive)) $-                                    map getAxiomName cs)-  getDef (A.RecDef  _ q c _ _ _) = Map.singleton q Record `union`-                                   case c of-                                     Nothing -> Map.empty-                                     Just (A.Axiom _ _ q _) ->-                                       Map.singleton q (Constructor SC.Inductive)-                                     Just _ -> __IMPOSSIBLE__-  getDef (A.ScopedDef {})        = Map.empty-   getDecl :: A.Declaration -> Map A.QName NameKind   getDecl (A.Axiom _ _ q _)   = Map.singleton q Postulate-  getDecl (A.Field _ q _)     = Map.singleton q Field+  getDecl (A.Field _ q _)     = Map.singleton q Function+    -- Note that the name q can be used both as a field name and as a+    -- projection function. Highlighting of field names is taken care+    -- of by "theRest" above, which does not use NameKinds.   getDecl (A.Primitive _ q _) = Map.singleton q Primitive-  getDecl (A.Definition {})   = Map.empty+  getDecl (A.Mutual {})       = Map.empty   getDecl (A.Section {})      = Map.empty   getDecl (A.Apply {})        = Map.empty   getDecl (A.Import {})       = Map.empty   getDecl (A.Pragma {})       = Map.empty   getDecl (A.ScopedDecl {})   = Map.empty   getDecl (A.Open {})         = Map.empty+  getDecl (A.FunDef  _ q _)       = Map.singleton q Function+  getDecl (A.DataSig _ q _ _)       = Map.singleton q Datatype+  getDecl (A.DataDef _ q _ cs)    = Map.singleton q Datatype `union`+                                   (Map.unions $+                                    map (\q -> Map.singleton q (Constructor SC.Inductive)) $+                                    map getAxiomName cs)+  getDecl (A.RecSig _ q _ _)      = Map.singleton q Record+  getDecl (A.RecDef _ q c _ _ _)  = Map.singleton q Record `union`+                                   case c of+                                     Nothing -> Map.empty+                                     Just q ->+                                       Map.singleton q (Constructor SC.Inductive)  -- | Generates syntax highlighting information for all constructors -- occurring in patterns and expressions in the given declarations.@@ -401,11 +398,10 @@       NotDelayed -> return Seq.empty        Delayed -> do-        clauses <- R.instantiateFull $ map I.originalClause $-                     defClauses def+        clauses <- R.instantiateFull $ defClauses def         case clauses of           [I.Clause{ I.clauseBody = body }] -> case getRHS body of-            Just (I.Def c args) -> do+            Just (I.Con c args) -> do               s <- everything' (liftM2 (><)) query args               return $ Seq.singleton c >< s @@ -418,8 +414,7 @@     where       getRHS (I.Body v)   = Just v       getRHS I.NoBody     = Nothing-      getRHS (I.Bind b)   = getRHS (I.absBody b)-      getRHS (I.NoBind b) = getRHS b+      getRHS (I.Bind b)   = getRHS (I.unAbs b)  -- | Generates syntax highlighting information for unsolved meta -- variables.
src/full/Agda/Interaction/Imports.hs view
@@ -6,6 +6,7 @@  import Prelude hiding (catch) +import Control.Arrow import Control.Monad.Error import Control.Monad.State import qualified Control.Exception as E@@ -52,6 +53,7 @@ import Agda.Utils.Monad import Agda.Utils.IO.Binary import Agda.Utils.Pretty+import Agda.Utils.Fresh  import Agda.Utils.Impossible #include "../undefined.h"@@ -63,7 +65,7 @@ 	builtin = Map.toList $ iBuiltin i 	prim	= [ x | (_,Prim x) <- builtin ] 	bi	= Map.fromList [ (x,Builtin t) | (x,Builtin t) <- builtin ]-    bs <- getBuiltinThings+    bs <- gets stBuiltinThings     reportSLn "import.iface.merge" 10 $ "Merging interface"     reportSLn "import.iface.merge" 20 $       "  Current builtins " ++ show (Map.keys bs) ++ "\n" ++@@ -152,7 +154,7 @@ -- Invariant: The fields are never empty at the same time.  data Warnings = Warnings-  { terminationProblems   :: [([QName], [R.Range])]+  { terminationProblems   :: [TerminationError]     -- ^ Termination checking problems are not reported if     -- 'optTerminationCheck' is 'False'.   , unsolvedMetaVariables :: [Range]@@ -208,7 +210,7 @@   bracket (stPragmaOptions <$> get)           (unless includeStateChanges . setPragmaOptions) $ \_ -> do    -- Forget the pragma options (locally).-   setCommandLineOptions . stPersistentOptions =<< get+   setCommandLineOptions . stPersistentOptions . stPersistent =<< get     alreadyVisited x $ addImportCycleCheck x $ do     file <- findFile x  -- requires source to exist@@ -330,10 +332,12 @@             mf       <- stModuleToSource <$> get             vs       <- getVisitedModules             ds       <- getDecodedModules-            opts     <- stPersistentOptions <$> get+            opts     <- stPersistentOptions . stPersistent <$> get             isig     <- getImportedSignature             ibuiltin <- gets stImportedBuiltins-            -- Every interface is treated in isolation.+            -- Every interface is treated in isolation. Note: Changes+            -- to stDecodedModules are not preserved if an error is+            -- encountered in an imported module.             r <- liftIO $ runTCM $                    withImportPath ms $ do                      setDecodedModules ds@@ -398,9 +402,9 @@  writeInterface :: FilePath -> Interface -> TCM ClockTime writeInterface file i = do-    reportSLn "import.iface.write" 5  $-      "Writing interface file " ++ file ++ "."+    reportSLn "import.iface.write" 5  $ "Writing interface file " ++ file ++ "."     encodeFile file i+    reportSLn "import.iface.write" 5 "Wrote interface file."     liftIO $ getModificationTime file   `catchError` \e -> do     reportSLn "" 1 $@@ -443,14 +447,20 @@     termErrs <- catchError (do       -- Type checking.       checkDecls (topLevelDecls topLevel)+      unfreezeMetas +      -- Count number of metas+      verboseS "profile.metas" 10 $ do+        MetaId n <- fresh+        tickN "metas" n+       -- Termination checking.       termErrs <- ifM (optTerminationCheck <$> pragmaOptions)                       (termDecls $ topLevelDecls topLevel)                       (return [])       mapM_ (\e -> reportSLn "term.warn.no" 2-                     (show (fst e) ++-                      " does NOT pass the termination checker."))+                     (show (termErrFunctions e) +++                      " do(es) NOT pass the termination checker."))             termErrs       return termErrs       ) (\e -> do@@ -476,6 +486,15 @@     whenM (optGenerateVimFile <$> commandLineOptions) $ 	withScope_ (insideScope topLevel) $ generateVimFile $ filePath file +    -- Print stats+    stats <- Map.toList <$> getStatistics+    case stats of+      []      -> return ()+      _       -> reportS "profile" 1 $ unlines $+        [ "Ticks for " ++ show (pretty mname) ] +++        [ "  " ++ s ++ " = " ++ show n+        | (s, n) <- sortBy (compare `on` snd) stats ]+     -- Check if there are unsolved meta-variables...     unsolvedOK    <- optAllowUnsolved <$> pragmaOptions     unsolvedMetas <- List.nub <$> (mapM getMetaRange =<< getOpenMetas)@@ -483,7 +502,7 @@       typeError $ UnsolvedMetas unsolvedMetas      -- ...or unsolved constraints-    unsolvedConstraints <- getConstraints+    unsolvedConstraints <- getAllConstraints     unless (null unsolvedConstraints || unsolvedOK) $       typeError $ UnsolvedConstraints unsolvedConstraints 
src/full/Agda/Interaction/Imports.hs-boot view
@@ -7,4 +7,3 @@ import Data.Map                     ( Map )  scopeCheckImport :: ModuleName -> TCM (ModuleName, Map ModuleName Scope)-
src/full/Agda/Interaction/MakeCase.hs view
@@ -24,6 +24,8 @@ import Agda.TypeChecking.Coverage import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Irrelevance import Agda.TypeChecker  import Agda.Interaction.BasicOps@@ -34,6 +36,8 @@ #include "../undefined.h" import Agda.Utils.Impossible +data CaseContext = FunctionDef | ExtendedLambda Int Int+                 deriving (Eq) -- | Find the clause whose right hand side is the given meta -- BY SEARCHING THE WHOLE SIGNATURE. Returns -- the original clause, before record patterns have been translated@@ -44,13 +48,13 @@ -- thrown away earlier.  (shutter with disgust). -- This code fails for record rhs because they have been eta-expanded, -- so the MVar is gone.-findClause :: MetaId -> TCM (QName, Clause)+findClause :: MetaId -> TCM (CaseContext, QName, Clause) findClause m = do   sig <- getImportedSignature   let res = do         def <- Map.elems $ sigDefinitions sig         Function{funClauses = cs} <- [theDef def]-        c <- map originalClause cs+        c <- cs         unless (rhsIsm $ clauseBody c) []         return (defName def, c)   case res of@@ -62,24 +66,27 @@         ]       reportSDoc "interaction.case" 20 $ vcat $ map (text . show) (Map.elems $ sigDefinitions sig)  -- you asked for it!       typeError $ GenericError "Right hand side must be a single hole when making a case distinction."-    [r] -> return r+    [(n,c)] | isPrefixOf extendlambdaname $ show $ A.qnameName n -> do+                                               Just (h , nh) <- Map.lookup n <$> getExtLambdaTele+                                               return (ExtendedLambda h nh , n , c)+            | otherwise                                          -> return (FunctionDef , n , c)     _   -> __IMPOSSIBLE__   where-    rhsIsm (Bind b)   = rhsIsm $ absBody b-    rhsIsm (NoBind b) = rhsIsm b+    rhsIsm (Bind b)   = rhsIsm $ unAbs b     rhsIsm NoBody     = False     rhsIsm (Body e)   = case e of       MetaV m' _  -> m == m'       _           -> False -makeCase :: InteractionId -> Range -> String -> TCM [A.Clause]+makeCase :: InteractionId -> Range -> String -> TCM (CaseContext , [A.Clause]) makeCase hole rng s = withInteractionId hole $ do   meta        <- lookupInteractionId hole-  (f, clause@(Clause{ clauseTel = tel, clausePerm = perm, clausePats = ps })) <- findClause meta+  (casectxt, f, clause@(Clause{ clauseTel = tel, clausePerm = perm, clausePats = ps })) <- findClause meta   reportSDoc "interaction.case" 10 $ vcat     [ text "splitting clause:"     , nest 2 $ vcat-      [ text "context =" <+> (prettyTCM =<< getContextTelescope)+      [ text "f       =" <+> prettyTCM f+      , text "context =" <+> (prettyTCM =<< getContextTelescope)       , text "tel     =" <+> prettyTCM tel       , text "perm    =" <+> text (show perm)       , text "ps      =" <+> text (show ps)@@ -87,10 +94,10 @@     ]   var         <- deBruijnIndex =<< parseExprIn hole rng s   z           <- splitClauseWithAbs clause var-  case z of+  (case z of     Left err        -> typeError . GenericError . show =<< prettyTCM err-    Right (Left cl) -> (:[]) <$> makeAbsurdClause f cl-    Right (Right c) -> mapM (makeAbstractClause f) c+    Right (Left cl) -> ((:[]) <$> makeAbsurdClause f cl)+    Right (Right c) -> (mapM (makeAbstractClause f) c)) >>= (\ x -> return (casectxt , x))  makeAbsurdClause :: QName -> SplitClause -> TCM A.Clause makeAbsurdClause f (SClause tel perm ps _) = do@@ -121,7 +128,8 @@ deBruijnIndex :: A.Expr -> TCM Nat deBruijnIndex e = do   (v, _) <- -- Andreas, 2010-09-21 allow splitting on irrelevant (record) vars-            Context.wakeIrrelevantVars $+--            Context.wakeIrrelevantVars $+            applyRelevanceToContext Irrelevant $               inferExpr e   case v of     Var n _ -> return n
src/full/Agda/Interaction/Monad.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE TypeSynonymInstances, MultiParamTypeClasses #-}+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances,+             MultiParamTypeClasses #-} module Agda.Interaction.Monad where  import Agda.TypeChecking.Monad
src/full/Agda/Interaction/Options.hs view
@@ -1,3 +1,5 @@+{-# LANGUAGE StandaloneDeriving, DeriveFunctor #-}+ module Agda.Interaction.Options     ( CommandLineOptions(..)     , PragmaOptions(..)@@ -11,6 +13,7 @@     , defaultOptions     , defaultVerbosity     , standardOptions_+    , unsafePragmaOptions     , isLiterate     , mapFlag     , usage@@ -19,7 +22,8 @@  import Control.Monad            ( when ) import Control.Monad.Error	( MonadError(..) )-import Data.List		( isSuffixOf )+import Data.Maybe (isJust)+import Data.List		( isSuffixOf , intercalate ) import System.Console.GetOpt	(getOpt, usageInfo, ArgOrder(ReturnInOrder) 				, OptDescr(..), ArgDescr(..) 				)@@ -38,13 +42,8 @@  -- OptDescr is a Functor -------------------------------------------------- -instance Functor OptDescr where-    fmap f (Option short long arg descr) = Option short long (fmap f arg) descr--instance Functor ArgDescr where-    fmap f (NoArg x)	= NoArg (f x)-    fmap f (ReqArg p s) = ReqArg (f . p) s-    fmap f (OptArg p s) = OptArg (f . p) s+deriving instance Functor OptDescr+deriving instance Functor ArgDescr  type Verbosity = Trie String Int @@ -62,10 +61,12 @@ 	    , optRunTests             :: Bool 	    , optCompile              :: Bool 	    , optEpicCompile          :: Bool+	    , optJSCompile            :: Bool             , optCompileDir           :: Maybe FilePath               -- ^ In the absence of a path the project root is used. 	    , optGenerateVimFile      :: Bool 	    , optGenerateHTML         :: Bool+	    , optDependencyGraph      :: Maybe FilePath 	    , optHTMLDir              :: FilePath 	    , optCSSFile              :: Maybe FilePath 	    , optIgnoreInterfaces     :: Bool@@ -73,7 +74,8 @@             , optGhcFlags             :: [String]             , optPragmaOptions        :: PragmaOptions             , optEpicFlags            :: [String]-	    }+            , optSafe                 :: Bool+            }     deriving Show  -- | Options which can be set in a pragma.@@ -87,13 +89,13 @@   , optTerminationCheck          :: Bool   , optTerminationDepth          :: Int   , optCompletenessCheck         :: Bool-  , optUnreachableCheck          :: Bool   , optUniverseCheck             :: Bool   , optSizedTypes                :: Bool   , optInjectiveTypeConstructors :: Bool   , optGuardingTypeConstructors  :: Bool   , optUniversePolymorphism      :: Bool   , optIrrelevantProjections     :: Bool+  , optExperimentalIrrelevance   :: Bool  -- ^ irrelevant levels, irrelevant data matching   , optWithoutK                  :: Bool   }   deriving Show@@ -124,9 +126,11 @@ 	    , optRunTests             = False 	    , optCompile              = False 	    , optEpicCompile          = False+	    , optJSCompile            = False             , optCompileDir           = Nothing 	    , optGenerateVimFile      = False 	    , optGenerateHTML         = False+	    , optDependencyGraph      = Nothing 	    , optHTMLDir              = defaultHTMLDir 	    , optCSSFile              = Nothing 	    , optIgnoreInterfaces     = False@@ -134,6 +138,7 @@             , optGhcFlags             = []             , optPragmaOptions        = defaultPragmaOptions             , optEpicFlags            = []+            , optSafe                 = False 	    }  defaultPragmaOptions :: PragmaOptions@@ -141,18 +146,18 @@   { optShowImplicit              = False   , optVerbose                   = defaultVerbosity   , optProofIrrelevance          = False+  , optExperimentalIrrelevance   = False   , optIrrelevantProjections     = True   , optAllowUnsolved             = False   , optDisablePositivity         = False   , optTerminationCheck          = True   , optTerminationDepth          = 0    -- this is the cutoff value   , optCompletenessCheck         = True-  , optUnreachableCheck          = True   , optUniverseCheck             = True   , optSizedTypes                = False   , optInjectiveTypeConstructors = False   , optGuardingTypeConstructors  = False-  , optUniversePolymorphism      = False+  , optUniversePolymorphism      = True   , optWithoutK                  = False   } @@ -176,10 +181,12 @@ checkOpts opts   | not (atMostOne [optAllowUnsolved . p, optCompile]) = Left       "Unsolved meta variables are not allowed when compiling.\n"-  | not (atMostOne [optInteractive, optCompile, optEpicCompile]) =+  | not (atMostOne [optInteractive, optCompile, optEpicCompile, optJSCompile]) =       Left "Choose at most one: compiler/interactive mode.\n"   | not (atMostOne [optGenerateHTML, optInteractive]) =       Left "Choose at most one: HTML generator or interactive mode.\n"+  | not (atMostOne [isJust . optDependencyGraph, optInteractive]) =+      Left "Choose at most one: Dependency graph generator or interactive mode.\n"   | not (atMostOne [ optUniversePolymorphism . p                    , not . optUniverseCheck . p                    ]) =@@ -193,6 +200,30 @@    p = optPragmaOptions +-- Check for unsafe pramas. Gives a list of used unsafe flags.++unsafePragmaOptions :: PragmaOptions -> [String]+unsafePragmaOptions opts =+  [ "--allow-unsolved-metas"                     | optAllowUnsolved opts             ] +++  [ "--no-positivity-check"                      | optDisablePositivity opts         ] +++  [ "--no-termination-check"                     | not (optTerminationCheck opts)    ] +++  [ "--no-coverage-check"                        | not (optCompletenessCheck opts)   ] +++  [ "--type-in-type"                             | not (optUniverseCheck opts)       ] +++  [ "--sized-types"                              | optSizedTypes opts                ] +++  [ "--injective-type-constructors"              | optInjectiveTypeConstructors opts ] +++  [ "--guardedness-preserving-type-constructors" | optGuardingTypeConstructors opts  ] +++  [ "--experimental-irrelevance"                 | optExperimentalIrrelevance opts   ]++-- The default pragma options should be considered safe++defaultPragmaOptionsSafe :: IO Bool+defaultPragmaOptionsSafe+    | null unsafe = return True+    | otherwise   = do putStrLn $ "Following pragmas are default but not safe: "+                                  ++ intercalate ", " unsafe+                       return False+  where unsafe = unsafePragmaOptions defaultPragmaOptions+ inputFlag :: FilePath -> Flag CommandLineOptions inputFlag f o =     case optInputFile o of@@ -201,7 +232,9 @@  versionFlag                  o = return $ o { optShowVersion               = True  } helpFlag                     o = return $ o { optShowHelp                  = True  }+safeFlag                     o = return $ o { optSafe                      = True  } proofIrrelevanceFlag         o = return $ o { optProofIrrelevance          = True  }+experimentalIrrelevanceFlag  o = return $ o { optExperimentalIrrelevance   = True  } noIrrelevantProjectionsFlag  o = return $ o { optIrrelevantProjections     = False } ignoreInterfacesFlag         o = return $ o { optIgnoreInterfaces          = True  } allowUnsolvedFlag            o = return $ o { optAllowUnsolved             = True  }@@ -211,12 +244,13 @@ noPositivityFlag             o = return $ o { optDisablePositivity         = True  } dontTerminationCheckFlag     o = return $ o { optTerminationCheck          = False } dontCompletenessCheckFlag    o = return $ o { optCompletenessCheck         = False }-noUnreachableCheckFlag       o = return $ o { optUnreachableCheck          = False }-dontUniverseCheckFlag        o = return $ o { optUniverseCheck             = False }+dontUniverseCheckFlag        o = return $ o { optUniverseCheck             = False+                                            , optUniversePolymorphism      = False } sizedTypes                   o = return $ o { optSizedTypes                = True  } injectiveTypeConstructorFlag o = return $ o { optInjectiveTypeConstructors = True  } guardingTypeConstructorFlag  o = return $ o { optGuardingTypeConstructors  = True  } universePolymorphismFlag     o = return $ o { optUniversePolymorphism      = True  }+noUniversePolymorphismFlag   o = return $ o { optUniversePolymorphism      = False } noForcingFlag                o = return $ o { optForcing                   = False } withoutKFlag                 o = return $ o { optWithoutK                  = True  } @@ -226,11 +260,13 @@ 		                } compileFlag      o = return $ o { optCompile    = True } compileEpicFlag  o = return $ o { optEpicCompile = True}+compileJSFlag    o = return $ o { optJSCompile = True} compileDirFlag f o = return $ o { optCompileDir = Just f } ghcFlag        f o = return $ o { optGhcFlags   = f : optGhcFlags o } epicFlagsFlag  s o = return $ o { optEpicFlags  = optEpicFlags o ++ [s]}  htmlFlag      o = return $ o { optGenerateHTML = True }+dependencyGraphFlag f o = return $ o { optDependencyGraph  = Just f } htmlDirFlag d o = return $ o { optHTMLDir      = d } cssFlag     f o = return $ o { optCSSFile      = Just f } @@ -268,6 +304,7 @@     , Option ['c']  ["compile"] (NoArg compileFlag)                     "compile program using the MAlonzo backend (experimental)"     , Option []     ["epic"] (NoArg compileEpicFlag) "compile program using the Epic backend"+    , Option []     ["js"] (NoArg compileJSFlag) "compile program using the JS backend"     , Option []     ["compile-dir"] (ReqArg compileDirFlag "DIR") 		    ("directory for compiler output (default: the project root)")     , Option []     ["ghc-flag"] (ReqArg ghcFlag "GHC-FLAG")@@ -280,6 +317,8 @@ 		    "generate Vim highlighting files"     , Option []	    ["html"] (NoArg htmlFlag) 		    "generate HTML files with highlighted source code"+    , Option []	    ["dependency-graph"] (ReqArg dependencyGraphFlag "FILE")+		    "generate a Dot file with a module dependency graph"     , Option []	    ["html-dir"] (ReqArg htmlDirFlag "DIR")                     ("directory in which HTML files are placed (default: " ++                      defaultHTMLDir ++ ")")@@ -291,6 +330,8 @@ 		    "look for imports in DIR"     , Option []     ["no-forcing"] (NoArg noForcingFlag)                     "disable the forcing optimisation"+    , Option []     ["safe"] (NoArg safeFlag)+                    "disable postulates, unsafe OPTION pragmas and primTrustMe"     ] ++ map (fmap lift) pragmaOptions   where   lift :: Flag PragmaOptions -> Flag CommandLineOptions@@ -316,20 +357,22 @@ 		    "allow termination checker to count decrease/increase upto N (default N=1)"     , Option []	    ["no-coverage-check"] (NoArg dontCompletenessCheckFlag) 		    "do not warn about possibly incomplete pattern matches"-    , Option []	    ["no-unreachable-check"] (NoArg noUnreachableCheckFlag)-		    "do not warn about unreachable function clauses"     , Option []	    ["type-in-type"] (NoArg dontUniverseCheckFlag) 		    "ignore universe levels (this makes Agda inconsistent)"     , Option []     ["sized-types"] (NoArg sizedTypes)-                    "use sized datatypes"+                    "use sized types (inconsistent with coinduction)"     , Option []     ["injective-type-constructors"] (NoArg injectiveTypeConstructorFlag)                     "enable injective type constructors (makes Agda anti-classical and possibly inconsistent)"     , Option []     ["guardedness-preserving-type-constructors"] (NoArg guardingTypeConstructorFlag)                     "treat type constructors as inductive constructors when checking productivity"+    , Option []     ["no-universe-polymorphism"] (NoArg noUniversePolymorphismFlag)+                    "disable universe polymorphism"     , Option []     ["universe-polymorphism"] (NoArg universePolymorphismFlag)-                    "enable universe polymorphism (experimental feature)"+                    "enable universe polymorphism (default)"     , Option []     ["no-irrelevant-projections"] (NoArg noIrrelevantProjectionsFlag)                     "disable projection of irrelevant record fields"+    , Option []     ["experimental-irrelevance"] (NoArg experimentalIrrelevanceFlag)+                    "enable potentially unsound irrelevance features (irrelevant levels, irrelevant data matching)"     , Option []     ["without-K"] (NoArg withoutKFlag)                     "disable the K rule (maybe)"     ]@@ -405,4 +448,5 @@ tests :: IO Bool tests = runTests "Agda.Interaction.Options"   [ quickCheck' prop_defaultOptions+  , defaultPragmaOptionsSafe   ]
src/full/Agda/Main.hs view
@@ -37,6 +37,7 @@ import Agda.Interaction.Monad import Agda.Interaction.GhciTop ()      -- to make sure it compiles import qualified Agda.Interaction.Imports as Imp+import qualified Agda.Interaction.Highlighting.Dot as Dot import Agda.Interaction.Highlighting.HTML  import Agda.TypeChecker@@ -49,6 +50,7 @@  import Agda.Compiler.MAlonzo.Compiler as MAlonzo import Agda.Compiler.Epic.Compiler as Epic+import Agda.Compiler.JS.Compiler as JS  import Agda.Termination.TermCheck @@ -90,6 +92,7 @@       i       <- optInteractive <$> liftTCM commandLineOptions       compile <- optCompile     <$> liftTCM commandLineOptions       epic    <- optEpicCompile <$> liftTCM commandLineOptions+      js      <- optJSCompile   <$> liftTCM commandLineOptions       when i $ liftIO $ LocIO.putStr splashScreen       let failIfNoInt (Just i) = return i           -- The allowed combinations of command-line@@ -100,6 +103,7 @@           interaction | i         = runIM . interactionLoop                       | compile   = (MAlonzo.compilerMain =<<) . (failIfNoInt =<<)                       | epic      = (Epic.compilerMain    =<<) . (failIfNoInt =<<)+                      | js        = (JS.compilerMain      =<<) . (failIfNoInt =<<)                       | otherwise = (() <$)       interaction $ do         hasFile <- hasInputFile@@ -121,18 +125,11 @@             Just _  -> return Nothing             Nothing -> return $ Just i -          -- Print stats-          stats <- Map.toList <$> getStatistics-          case stats of-            []      -> return ()-            _       -> liftIO $ do-              LocIO.putStrLn "Statistics"-              LocIO.putStrLn "----------"-              mapM_ (\ (s,n) -> LocIO.putStrLn $ s ++ " : " ++ show n) $-                sortBy (\x y -> compare (snd x) (snd y)) stats-           whenM (optGenerateHTML <$> commandLineOptions) $             generateHTML $ iModuleName i++          whenM (isJust . optDependencyGraph <$> commandLineOptions) $+            Dot.generateDot $ i            return result 
src/full/Agda/Syntax/Abstract.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE DeriveDataTypeable, CPP #-}+{-# LANGUAGE DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable, CPP #-} {-| The abstract syntax. This is what you get after desugaring and scope     analysis of the concrete syntax. The type checker works on abstract syntax,     producing internal syntax ("Agda.Syntax.Internal").@@ -21,6 +21,7 @@ import Agda.Syntax.Concrete.Pretty () import Agda.Syntax.Info import Agda.Syntax.Common+import Agda.Syntax.Fixity import Agda.Syntax.Position import Agda.Syntax.Abstract.Name import Agda.Syntax.Literal@@ -42,31 +43,63 @@ 	| WithApp ExprInfo Expr [Expr]	     -- ^ with application         | Lam  ExprInfo LamBinding Expr	     -- ^         | AbsurdLam ExprInfo Hiding+        | ExtendedLam ExprInfo DefInfo QName [Clause]         | Pi   ExprInfo Telescope Expr	     -- ^ 	| Fun  ExprInfo (Arg Expr) Expr	     -- ^ independent function space-        | Set  ExprInfo Nat		     -- ^+        | Set  ExprInfo Nat		     -- ^ Set, Set1, Set2, ...         | Prop ExprInfo			     -- ^         | Let  ExprInfo [LetBinding] Expr    -- ^         | ETel Telescope                     -- ^ only used when printing telescopes 	| Rec  ExprInfo [(C.Name, Expr)]     -- ^ record construction+	| RecUpdate ExprInfo Expr [(C.Name, Expr)]     -- ^ record update 	| ScopedExpr ScopeInfo Expr	     -- ^ scope annotation         | QuoteGoal ExprInfo Name Expr       -- ^         | Quote ExprInfo                     -- ^-        | DontCare                           -- ^ for printing DontCare from Syntax.Internal+        | QuoteTerm ExprInfo                 -- ^+        | Unquote ExprInfo                   -- ^ The splicing construct: unquote ...+        | DontCare Expr                      -- ^ for printing DontCare from Syntax.Internal   deriving (Typeable, Data, Show)  data Declaration 	= Axiom      DefInfo Relevance QName Expr          -- ^ postulate 	| Field      DefInfo QName (Arg Expr)		   -- ^ record field 	| Primitive  DefInfo QName Expr			   -- ^ primitive function-	| Definition DeclInfo [TypeSignature] [Definition] -- ^ a bunch of mutually recursive definitions+	| Mutual     DeclInfo [Declaration]                -- ^ a bunch of mutually recursive definitions 	| Section    ModuleInfo ModuleName [TypedBindings] [Declaration]-	| Apply	     ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName)+	| Apply	     ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName) 	| Import     ModuleInfo ModuleName 	| Pragma     Range	Pragma         | Open       ModuleInfo ModuleName           -- ^ only retained for highlighting purposes+        | FunDef     DefInfo QName [Clause]+        | DataSig    DefInfo QName Telescope Expr -- ^ lone data signature+            -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.+        | DataDef    DefInfo QName [LamBinding] [Constructor]+            -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.+        | RecSig     DefInfo QName Telescope Expr -- ^ lone record signature+        | RecDef     DefInfo QName (Maybe QName) [LamBinding] Expr [Declaration]+            -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,+            --   and the optional name is the constructor's name. 	| ScopedDecl ScopeInfo [Declaration]  -- ^ scope annotation+        deriving (Typeable, Data, Show)++class GetDefInfo a where+  getDefInfo :: a -> Maybe DefInfo++instance GetDefInfo Declaration where+  getDefInfo (Axiom i _ _ _) = Just i+  getDefInfo (Field i _ _) = Just i+  getDefInfo (Primitive i _ _) = Just i+  getDefInfo (ScopedDecl _ (d:_)) = getDefInfo d+  getDefInfo (FunDef i _ _) = Just i+  getDefInfo (DataSig i _ _ _) = Just i+  getDefInfo (DataDef i _ _ _) = Just i+  getDefInfo (RecSig i _ _ _) = Just i+  getDefInfo (RecDef i _ _ _ _ _) = Just i+  getDefInfo _ = Nothing++data ModuleApplication = SectionApp [TypedBindings] ModuleName [NamedArg Expr]+                       | RecordModuleIFS ModuleName   deriving (Typeable, Data, Show)  data Pragma = OptionsPragma [String]@@ -75,38 +108,29 @@             | CompiledTypePragma QName String             | CompiledDataPragma QName String [String]             | CompiledEpicPragma QName String+            | CompiledJSPragma QName String+            | StaticPragma QName             | EtaPragma QName   deriving (Typeable, Data, Show) -data LetBinding = LetBind LetInfo Relevance Name Expr Expr    -- ^ LetBind info name type defn-                | LetApply ModuleInfo ModuleName [TypedBindings] ModuleName [NamedArg Expr] (Map QName QName) (Map ModuleName ModuleName)+data LetBinding = LetBind LetInfo Relevance Name Expr Expr    -- ^ LetBind info rel name type defn+                | LetApply ModuleInfo ModuleName ModuleApplication (Map QName QName) (Map ModuleName ModuleName)                 | LetOpen ModuleInfo ModuleName     -- ^ only for highlighting and abstractToConcrete   deriving (Typeable, Data, Show) --- | A definition without its type signature.-data Definition-	= FunDef     DefInfo QName [Clause]-	| DataDef    DefInfo QName [LamBinding] [Constructor]-	    -- ^ the 'LamBinding's are 'DomainFree' and binds the parameters of the datatype.-	| RecDef     DefInfo QName (Maybe Constructor) [LamBinding] Expr [Declaration]-	    -- ^ The 'Expr' gives the constructor type telescope, @(x1 : A1)..(xn : An) -> Prop@,-            --   and the optional name is the constructor's name.-        | ScopedDef ScopeInfo Definition-  deriving (Typeable, Data, Show)- -- | Only 'Axiom's. type TypeSignature  = Declaration type Constructor    = TypeSignature  -- | A lambda binding is either domain free or typed. data LamBinding-	= DomainFree Hiding Name    -- ^ . @x@ or @{x}@+	= DomainFree Hiding Relevance Name  -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ 	| DomainFull TypedBindings  -- ^ . @(xs:e)@ or @{xs:e}@   deriving (Typeable, Data, Show)  -- | Typed bindings with hiding information.-data TypedBindings = TypedBindings Range (Arg [TypedBinding])-	    -- ^ . @(xs:e;..;ys:e')@ or @{xs:e;..;ys:e'}@+data TypedBindings = TypedBindings Range (Arg TypedBinding)+	    -- ^ . @(xs : e)@ or @{xs : e}@   deriving (Typeable, Data, Show)  -- | A typed binding. Appears in dependent function spaces, typed lambdas, and@@ -148,7 +172,7 @@ 		| AbsurdP PatInfo 		| LitP Literal 		| ImplicitP PatInfo	-- ^ generated at type checking for implicit arguments-  deriving (Typeable, Data, Show)+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Pattern = Pattern' Expr @@ -156,48 +180,9 @@     Instances  --------------------------------------------------------------------------} -instance Functor Pattern' where-    fmap f p = case p of-	VarP x	    -> VarP x-	ConP i c ps -> ConP i c $ (fmap . fmap . fmap . fmap) f ps-	DefP i c ps -> DefP i c $ (fmap . fmap . fmap . fmap) f ps-	LitP l	    -> LitP l-	AsP i x p   -> AsP i x $ fmap f p-	DotP i e    -> DotP i (f e)-	AbsurdP i   -> AbsurdP i-	WildP i	    -> WildP i-	ImplicitP i -> ImplicitP i---- foldr should really take its arguments in a different order!-instance Foldable Pattern' where-    foldr f z p = case p of-	VarP _	    -> z-	ConP _ _ ps -> (foldrF . foldrF . foldrF . foldrF) f ps z-	DefP _ _ ps -> (foldrF . foldrF . foldrF . foldrF) f ps z-	LitP _	    -> z-	AsP _ _ p   -> foldr f z p-	DotP _ e    -> f e z-	AbsurdP _   -> z-	WildP _	    -> z-	ImplicitP _ -> z-	where-	    foldrF f = flip (foldr f)--instance Traversable Pattern' where-    traverse f p = case p of-	VarP x	    -> pure $ VarP x-	ConP i c ps -> ConP i c <$> (traverse . traverse . traverse . traverse) f ps-	DefP i c ps -> DefP i c <$> (traverse . traverse . traverse . traverse) f ps-	LitP l	    -> pure $ LitP l-	AsP i x p   -> AsP i x <$> traverse f p-	DotP i e    -> DotP i <$> f e-	AbsurdP i   -> pure $ AbsurdP i-	WildP i	    -> pure $ WildP i-	ImplicitP i -> pure $ ImplicitP i- instance HasRange LamBinding where-    getRange (DomainFree _ x) = getRange x-    getRange (DomainFull b)   = getRange b+    getRange (DomainFree _ _ x) = getRange x+    getRange (DomainFull b)     = getRange b  instance HasRange TypedBindings where     getRange (TypedBindings r _) = r@@ -217,35 +202,38 @@     getRange (WithApp i _ _)	= getRange i     getRange (Lam i _ _)	= getRange i     getRange (AbsurdLam i _)    = getRange i+    getRange (ExtendedLam i _ _ _)  = getRange i     getRange (Pi i _ _)		= getRange i     getRange (Fun i _ _)	= getRange i     getRange (Set i _)		= getRange i     getRange (Prop i)		= getRange i     getRange (Let i _ _)	= getRange i     getRange (Rec i _)		= getRange i+    getRange (RecUpdate i _ _)  = getRange i     getRange (ETel tel)         = getRange tel     getRange (ScopedExpr _ e)	= getRange e     getRange (QuoteGoal _ _ e)	= getRange e     getRange (Quote i)  	= getRange i-    getRange (DontCare)         = noRange+    getRange (QuoteTerm i)  	= getRange i+    getRange (Unquote i)  	= getRange i+    getRange (DontCare{})       = noRange  instance HasRange Declaration where     getRange (Axiom      i _ _ _       ) = getRange i     getRange (Field      i _ _         ) = getRange i-    getRange (Definition i _ _	       ) = getRange i+    getRange (Mutual     i _           ) = getRange i     getRange (Section    i _ _ _       ) = getRange i-    getRange (Apply	 i _ _ _ _ _ _ ) = getRange i+    getRange (Apply	 i _ _ _ _     ) = getRange i     getRange (Import     i _	       ) = getRange i     getRange (Primitive  i _ _	       ) = getRange i     getRange (Pragma	 i _	       ) = getRange i     getRange (Open       i _           ) = getRange i     getRange (ScopedDecl _ d	       ) = getRange d--instance HasRange Definition where-    getRange (FunDef  i _ _    )   = getRange i-    getRange (DataDef i _ _ _  )   = getRange i-    getRange (RecDef  i _ _ _ _ _) = getRange i-    getRange (ScopedDef _ d)       = getRange d+    getRange (FunDef  i _ _         ) = getRange i+    getRange (DataSig i _ _ _       ) = getRange i+    getRange (DataDef i _ _ _       ) = getRange i+    getRange (RecSig  i _ _ _       ) = getRange i+    getRange (RecDef  i _ _ _ _ _   ) = getRange i  instance HasRange (Pattern' e) where     getRange (VarP x)	   = getRange x@@ -272,12 +260,12 @@  instance HasRange LetBinding where     getRange (LetBind  i _ _ _ _     ) = getRange i-    getRange (LetApply i _ _ _ _ _ _ ) = getRange i+    getRange (LetApply i _ _ _ _     ) = getRange i     getRange (LetOpen  i _           ) = getRange i  instance KillRange LamBinding where-  killRange (DomainFree h x) = killRange1 (DomainFree h) x-  killRange (DomainFull b)   = killRange1 DomainFull b+  killRange (DomainFree h r x) = killRange1 (DomainFree h r) x+  killRange (DomainFull b)     = killRange1 DomainFull b  instance KillRange TypedBindings where   killRange (TypedBindings r b) = TypedBindings (killRange r) (killRange b)@@ -297,17 +285,21 @@   killRange (WithApp i e es) = killRange3 WithApp i e es   killRange (Lam i b e)      = killRange3 Lam i b e   killRange (AbsurdLam i h)  = killRange1 AbsurdLam i h+  killRange (ExtendedLam i name di pes) = killRange4 ExtendedLam i name di pes --(\_ -> ExtendedLam i def {-name di si-}) i pes   killRange (Pi i a b)       = killRange3 Pi i a b   killRange (Fun i a b)      = killRange3 Fun i a b   killRange (Set i n)        = Set (killRange i) n   killRange (Prop i)         = killRange1 Prop i   killRange (Let i ds e)     = killRange3 Let i ds e   killRange (Rec i fs)       = Rec (killRange i) (map (id -*- killRange) fs)+  killRange (RecUpdate i e fs) = RecUpdate (killRange i) (killRange e) (map (id -*- killRange) fs)   killRange (ETel tel)       = killRange1 ETel tel   killRange (ScopedExpr s e) = killRange1 (ScopedExpr s) e   killRange (QuoteGoal i x e)= killRange3 QuoteGoal i x e   killRange (Quote i)        = killRange1 Quote i-  killRange (DontCare)       = DontCare+  killRange (QuoteTerm i)    = killRange1 QuoteTerm i+  killRange (Unquote i)      = killRange1 Unquote i+  killRange (DontCare e)     = DontCare e  instance KillRange Relevance where   killRange rel = rel -- no range to kill@@ -315,22 +307,28 @@ instance KillRange Declaration where   killRange (Axiom      i rel a b     ) = killRange4 Axiom      i rel a b   killRange (Field      i a b         ) = killRange3 Field      i a b-  killRange (Definition i a b         ) = killRange3 Definition i a b+  killRange (Mutual     i a           ) = killRange2 Mutual     i a   killRange (Section    i a b c       ) = killRange4 Section    i a b c-  killRange (Apply      i a b c d e f ) = killRange5 Apply      i a b c d e f+  killRange (Apply      i a b c d     ) = killRange3 Apply      i a b c d    -- the last two arguments of Apply are name maps, so nothing to kill   killRange (Import     i a           ) = killRange2 Import     i a   killRange (Primitive  i a b         ) = killRange3 Primitive  i a b   killRange (Pragma     i a           ) = Pragma (killRange i) a   killRange (Open       i x           ) = killRange2 Open       i x   killRange (ScopedDecl a d           ) = killRange1 (ScopedDecl a) d+  killRange (FunDef  i a b       ) = killRange3 FunDef  i a b+  killRange (DataSig i a b c     ) = killRange3 DataSig i a b c+  killRange (DataDef i a b c     ) = killRange4 DataDef i a b c+  killRange (RecSig  i a b c     ) = killRange4 RecSig  i a b c+  killRange (RecDef  i a b c d e ) = killRange6 RecDef  i a b c d e -instance KillRange Definition where-  killRange (FunDef  i a b    )   = killRange3 FunDef  i a b-  killRange (DataDef i a b c)     = killRange4 DataDef i a b c-  killRange (RecDef  i a b c d e) = killRange6 RecDef  i a b c d e-  killRange (ScopedDef s a)       = killRange1 (ScopedDef s) a+instance KillRange ModuleApplication where+  killRange (SectionApp a b c  ) = killRange3 SectionApp a b c+  killRange (RecordModuleIFS a ) = killRange1 RecordModuleIFS a +instance KillRange x => KillRange (ThingWithFixity x) where+  killRange (ThingWithFixity c f) = ThingWithFixity (killRange c) f+ instance KillRange e => KillRange (Pattern' e) where   killRange (VarP x)      = killRange1 VarP x   killRange (ConP i a b)  = killRange3 ConP i a b@@ -356,7 +354,7 @@  instance KillRange LetBinding where   killRange (LetBind  i rel a b c   ) = killRange5 LetBind  i rel a b c-  killRange (LetApply i a b c d e f ) = killRange5 LetApply i a b c d e f+  killRange (LetApply i a b c d     ) = killRange3 LetApply i a b c d   killRange (LetOpen  i x           ) = killRange2 LetOpen  i x  ------------------------------------------------------------------------@@ -365,32 +363,80 @@  -- | Extracts all the names which are declared in a 'Declaration'. -- This does not include open public or let expressions, but it does--- include local modules and where clauses.+-- include local modules, where clauses and the names of extended+-- lambdas.  allNames :: Declaration -> Seq QName-allNames (Axiom     _ _ q _)   = Seq.singleton q-allNames (Field     _   q _)   = Seq.singleton q-allNames (Primitive _   q _)   = Seq.singleton q-allNames (Definition _ _ defs) = Fold.foldMap allNamesD defs+allNames (Axiom     _ _ q _)      = Seq.singleton q+allNames (Field     _   q _)      = Seq.singleton q+allNames (Primitive _   q _)      = Seq.singleton q+allNames (Mutual     _ defs)      = Fold.foldMap allNames defs+allNames (DataSig _ q _ _)        = Seq.singleton q+allNames (DataDef _ q _ decls)    = q <| Fold.foldMap allNames decls+allNames (RecSig _ q _ _)         = Seq.singleton q+allNames (RecDef _ q c _ _ decls) =+  q <| foldMap Seq.singleton c >< Fold.foldMap allNames decls+allNames (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls   where-  allNamesD :: Definition -> Seq QName-  allNamesD (FunDef _ q cls)         = q <| Fold.foldMap allNamesC cls-  allNamesD (DataDef _ q _ decls)    = q <| Fold.foldMap allNames decls-  allNamesD (ScopedDef _ def)        = allNamesD def-  allNamesD (RecDef _ q c _ _ decls) =-    q <| Fold.foldMap allNames c >< Fold.foldMap allNames decls-   allNamesC :: Clause -> Seq QName   allNamesC (Clause _ rhs decls) = allNamesR rhs ><                                    Fold.foldMap allNames decls    allNamesR :: RHS -> Seq QName-  allNamesR RHS {}                = Seq.empty+  allNamesR (RHS e)               = allNamesE e   allNamesR AbsurdRHS {}          = Seq.empty   allNamesR (WithRHS q _ cls)     = q <| Fold.foldMap allNamesC cls   allNamesR (RewriteRHS qs _ rhs cls) =     Seq.fromList qs >< allNamesR rhs                     >< Fold.foldMap allNames cls++  allNamesE :: Expr -> Seq QName+  allNamesE Var {}                  = Seq.empty+  allNamesE Def {}                  = Seq.empty+  allNamesE Con {}                  = Seq.empty+  allNamesE Lit {}                  = Seq.empty+  allNamesE QuestionMark {}         = Seq.empty+  allNamesE Underscore {}           = Seq.empty+  allNamesE (App _ e1 e2)           = Fold.foldMap allNamesE [e1, namedThing (unArg e2)]+  allNamesE (WithApp _ e es)        = Fold.foldMap allNamesE (e : es)+  allNamesE (Lam _ b e)             = allNamesLam b >< allNamesE e+  allNamesE AbsurdLam {}            = Seq.empty+  allNamesE (ExtendedLam _ _ q cls) = q <| Fold.foldMap allNamesC cls+  allNamesE (Pi _ tel e)            = Fold.foldMap allNamesBinds tel ><+                                                allNamesE e+  allNamesE (Fun _ (Arg _ _ e1) e2) = Fold.foldMap allNamesE [e1, e2]+  allNamesE Set {}                  = Seq.empty+  allNamesE Prop {}                 = Seq.empty+  allNamesE (Let _ lbs e)           = Fold.foldMap allNamesLet lbs ><+                                                allNamesE e+  allNamesE ETel {}                 = __IMPOSSIBLE__+  allNamesE (Rec _ fields)          = Fold.foldMap allNamesE (map snd fields)+  allNamesE (RecUpdate _ e fs)      = allNamesE e >< Fold.foldMap allNamesE (map snd fs)+  allNamesE (ScopedExpr _ e)        = allNamesE e+  allNamesE (QuoteGoal _ _ e)       = allNamesE e+  allNamesE Quote {}                = Seq.empty+  allNamesE QuoteTerm {}            = Seq.empty+  allNamesE Unquote {}              = Seq.empty+  allNamesE DontCare {}             = Seq.empty++  allNamesLam :: LamBinding -> Seq QName+  allNamesLam DomainFree {}      = Seq.empty+  allNamesLam (DomainFull binds) = allNamesBinds binds++  allNamesBinds :: TypedBindings -> Seq QName+  allNamesBinds (TypedBindings _ (Arg _ _ (TBind _ _ e))) = allNamesE e+  allNamesBinds (TypedBindings _ (Arg _ _ (TNoBind e)))   = allNamesE e++  allNamesLet :: LetBinding -> Seq QName+  allNamesLet (LetBind _ _ _ e1 e2)  = Fold.foldMap allNamesE [e1, e2]+  allNamesLet (LetApply _ _ app _ _) = allNamesApp app+  allNamesLet LetOpen {}             = Seq.empty++  allNamesApp :: ModuleApplication -> Seq QName+  allNamesApp (SectionApp bindss _ es) = Fold.foldMap allNamesBinds bindss ><+                                         Fold.foldMap allNamesE (map (namedThing . unArg) es)+  allNamesApp RecordModuleIFS {}       = Seq.empty+ allNames (Section _ _ _ decls) = Fold.foldMap allNames decls allNames Apply {}              = Seq.empty allNames Import {}             = Seq.empty@@ -405,3 +451,26 @@ axiomName :: Declaration -> QName axiomName (Axiom _ _ q _) = q axiomName _             = __IMPOSSIBLE__++-- | Are we in an abstract block?+--+--   In that case some definition is abstract.+class AnyAbstract a where+  anyAbstract :: a -> Bool++instance AnyAbstract a => AnyAbstract [a] where+  anyAbstract = Fold.any anyAbstract++instance AnyAbstract Declaration where+  anyAbstract (Axiom i _ _ _)     = defAbstract i == AbstractDef+  anyAbstract (Field i _ _)       = defAbstract i == AbstractDef+  anyAbstract (Mutual     _ ds)   = anyAbstract ds+  anyAbstract (ScopedDecl _ ds)   = anyAbstract ds+  anyAbstract (Section _ _ _ ds)  = anyAbstract ds+  anyAbstract (FunDef i _ _)       = defAbstract i == AbstractDef+  anyAbstract (DataDef i _ _ _)    = defAbstract i == AbstractDef+  anyAbstract (RecDef i _ _ _ _ _) = defAbstract i == AbstractDef+  anyAbstract (DataSig i _ _ _)    = defAbstract i == AbstractDef+  anyAbstract (RecSig i _ _ _)     = defAbstract i == AbstractDef+  anyAbstract _                    = __IMPOSSIBLE__+
src/full/Agda/Syntax/Abstract/Name.hs view
@@ -123,6 +123,9 @@ qnameToMName :: QName -> ModuleName qnameToMName = mnameFromList . qnameToList +mnameToQName :: ModuleName -> QName+mnameToQName = qnameFromList . mnameToList+ showQNameId :: QName -> String showQNameId q = show ns ++ "@" ++ show m   where
src/full/Agda/Syntax/Abstract/Pretty.hs view
@@ -10,18 +10,18 @@ import Agda.TypeChecking.Monad import Agda.Utils.Pretty -showA :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String+showA :: (Show c, ToConcrete a c) => a -> TCM String showA x = show <$> abstractToConcrete_ x -prettyA :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc+prettyA :: (Pretty c, ToConcrete a c) => a -> TCM Doc prettyA x = pretty <$> abstractToConcrete_ x  -- | Variant of 'showA' which does not insert outermost parentheses. -showATop :: (Show c, ToConcrete a c, MonadTCM tcm) => a -> tcm String+showATop :: (Show c, ToConcrete a c) => a -> TCM String showATop x = show <$> abstractToConcreteCtx TopCtx x  -- | Variant of 'prettyA' which does not insert outermost parentheses. -prettyATop :: (Pretty c, ToConcrete a c, MonadTCM tcm) => a -> tcm Doc+prettyATop :: (Pretty c, ToConcrete a c) => a -> TCM Doc prettyATop x = pretty <$> abstractToConcreteCtx TopCtx x
src/full/Agda/Syntax/Abstract/Views.hs view
@@ -6,41 +6,23 @@ import Agda.Syntax.Abstract import Agda.Syntax.Info -data AppView = Application Head [NamedArg Expr]-	     | NonApplication Expr-		-- ^ TODO: if we allow beta-redexes (which we currently do) there could be one here.---- | @Head@ of an applicative expression.-data Head = HeadVar Name     -- ^ A variable.-	  | HeadDef QName    -- ^ A defined symbol (except constructor).-	  | HeadCon [QName]  -- ^ A constructor which could belong to any of the data types in the list.+data AppView = Application Expr [NamedArg Expr]+	     -- NonApplication Expr+	     --    -- ^ TODO: if we allow beta-redexes (which we currently do) there could be one here.+             -- 2011-08-24, Dominique: removed.. +-- note: everything is an application, possibly of itself to 0 arguments appView :: Expr -> AppView appView e =     case e of-	Var x	       -> Application (HeadVar x) []-	Def x	       -> Application (HeadDef x) []-	Con (AmbQ x)   -> Application (HeadCon x) []-	App i e1 arg   -> apply i (appView e1) arg-	ScopedExpr _ e -> appView e-	_	       -> NonApplication e+      App i e1 arg        -> apply i (appView e1) arg+      ScopedExpr _ e      -> appView e+      _                   -> Application e []     where 	apply i v arg = 	    case v of 		Application hd es -> Application hd $ es ++ [arg]-		NonApplication e  -> NonApplication (App i e arg) -headToExpr :: Head -> Expr-headToExpr (HeadVar x)  = Var x-headToExpr (HeadDef f)  = Def f-headToExpr (HeadCon cs) = Con (AmbQ cs)- unAppView :: AppView -> Expr-unAppView (NonApplication e) = e unAppView (Application h es) =-  foldl (App (ExprRange noRange)) (headToExpr h) es--instance HasRange Head where-    getRange (HeadVar x) = getRange x-    getRange (HeadDef x) = getRange x-    getRange (HeadCon x) = getRange x+  foldl (App (ExprRange noRange)) h es
src/full/Agda/Syntax/Common.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP, FlexibleInstances, DeriveDataTypeable #-}+{-# LANGUAGE CPP, FlexibleInstances, DeriveDataTypeable,+             DeriveFunctor, DeriveFoldable, DeriveTraversable #-}  {-| Some common syntactic entities are defined in this module. -}@@ -20,26 +21,39 @@ data Induction = Inductive | CoInductive   deriving (Typeable, Data, Show, Eq, Ord) -data Hiding  = Hidden | NotHidden+data Hiding  = Hidden | Instance | NotHidden     deriving (Typeable, Data, Show, Eq, Ord)  -- | A function argument can be relevant or irrelevant.+--   See 'Agda.TypeChecking.Irrelevance'. data Relevance   = Relevant    -- ^ the argument is (possibly) relevant at compile-time+  | NonStrict   -- ^ the argument may never flow into evaluation position.+                --   Therefore, it is irrelevant at run-time.+                --   It is treated relevantly during equality checking.   | Irrelevant  -- ^ the argument is irrelevant at compile- and runtime   | Forced      -- ^ the argument can be skipped during equality checking-    deriving (Typeable, Data, Show, Eq, Ord)+    deriving (Typeable, Data, Show, Eq) --- | For comparing @Relevance@ ignoring @Forced@.-ignoreForced :: Relevance -> Relevance-ignoreForced Forced     = Relevant-ignoreForced Relevant   = Relevant-ignoreForced Irrelevant = Irrelevant+instance Ord Relevance where+  (<=) = moreRelevant --- | @Relevance@ from @Bool@.-irrelevant :: Bool -> Relevance-irrelevant True  = Irrelevant-irrelevant False = Relevant+-- | Information ordering.+-- @Relevant `moreRelevant` Forced `moreRelevant` NonStrict `moreRelevant` Irrelevant@+moreRelevant :: Relevance -> Relevance -> Bool+moreRelevant r r' =+  case (r, r') of+    -- top+    (_, Irrelevant) -> True+    (Irrelevant, _) -> False+    -- bottom+    (Relevant, _)   -> True+    (_, Relevant)   -> False+    -- second bottom+    (Forced, _)     -> True+    (_, Forced)     -> False+    -- remaining case+    (NonStrict,NonStrict) -> True  instance KillRange Induction where killRange = id instance KillRange Hiding    where killRange = id@@ -49,11 +63,14 @@   { argHiding    :: Hiding   , argRelevance :: Relevance   , unArg :: e-  } deriving (Typeable, Data, Ord)+  } deriving (Typeable, Data, Ord, Functor, Foldable, Traversable)  instance Eq a => Eq (Arg a) where   Arg h1 _ x1 == Arg h2 _ x2 = (h1, x1) == (h2, x2) +makeInstance :: Arg a -> Arg a+makeInstance a = a { argHiding = Instance }+ hide :: Arg a -> Arg a hide a = a { argHiding = Hidden } @@ -61,15 +78,7 @@ defaultArg = Arg NotHidden Relevant  isHiddenArg :: Arg a -> Bool-isHiddenArg arg = argHiding arg == Hidden--makeIrrelevant :: Arg a -> Arg a-makeIrrelevant a = a { argRelevance = Irrelevant }--makeRelevant :: Arg a -> Arg a-makeRelevant a = if argRelevance a == Irrelevant-                  then a { argRelevance = Relevant }-                  else a+isHiddenArg arg = argHiding arg /= NotHidden  -- | @xs `withArgsFrom` args@ translates @xs@ into a list of 'Arg's, -- using the elements in @args@ to fill in the non-'unArg' fields.@@ -80,15 +89,6 @@ xs `withArgsFrom` args =   zipWith (\x arg -> fmap (const x) arg) xs args -instance Functor Arg where-    fmap f a = a { unArg = f (unArg a) }--instance Foldable Arg where-    foldr f z a = f (unArg a) z--instance Traversable Arg where-    traverse f (Arg h r x) = Arg h r <$> f x- instance HasRange a => HasRange (Arg a) where     getRange = getRange . unArg @@ -103,7 +103,9 @@       where         showH Hidden     s = "{" ++ s ++ "}"         showH NotHidden  s = "(" ++ s ++ ")"+        showH Instance   s = "{{" ++ s ++ "}}"         showR Irrelevant s = "." ++ s+        showR NonStrict  s = "?" ++ s         showR Forced     s = "!" ++ s         showR Relevant   s = "r" ++ s -- Andreas: I want to see it explicitly @@ -111,7 +113,7 @@     Named { nameOf     :: Maybe name 	  , namedThing :: a 	  }-    deriving (Eq, Ord, Typeable, Data)+    deriving (Eq, Ord, Typeable, Data, Functor, Foldable, Traversable)  unnamed :: a -> Named name a unnamed = Named Nothing@@ -119,15 +121,6 @@ named :: name -> a -> Named name a named = Named . Just -instance Functor (Named name) where-    fmap f (Named n x) = Named n $ f x--instance Foldable (Named name) where-    foldr f z (Named _ x) = f x z--instance Traversable (Named name) where-    traverse f (Named n x) = Named n <$> f x- instance HasRange a => HasRange (Named name a) where     getRange = getRange . namedThing @@ -151,6 +144,8 @@  -- | Access modifier. data Access = PrivateAccess | PublicAccess+            | OnlyQualified  -- ^ Visible from outside, but not exported when opening the module+                             --   Used for qualified constructors.     deriving (Typeable, Data, Show, Eq, Ord)  -- | Abstract or concrete
src/full/Agda/Syntax/Concrete.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}+{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor, DeriveTraversable, DeriveFoldable #-}  {-| The concrete syntax is a raw representation of the program text     without any desugaring at all.  This is what the parser produces.@@ -8,6 +8,7 @@ module Agda.Syntax.Concrete     ( -- * Expressions       Expr(..)+    , OpApp(..), fromOrdinary     , module Agda.Syntax.Concrete.Name     , appView, AppView(..)       -- * Bindings@@ -18,6 +19,7 @@     , Telescope -- (..)       -- * Declarations     , Declaration(..)+    , ModuleApplication(..)     , TypeSignature     , Constructor     , Field@@ -29,12 +31,16 @@     , RHS(..), WhereClause(..)     , Pragma(..)     , Module+    , ThingWithFixity(..)     , topLevelModuleName+    -- * Pattern tools+    , patternHead, patternNames     )     where  import Data.Generics (Typeable, Data)-+import Data.Foldable hiding (concatMap)+import Data.Traversable import Agda.Syntax.Position import Agda.Syntax.Common import Agda.Syntax.Fixity@@ -46,6 +52,15 @@ import Agda.Utils.Impossible #include "../undefined.h" +data OpApp e+        = SyntaxBindingLambda !Range [LamBinding] e -- ^ an abstraction inside a special syntax declaration (see Issue 358 why we introduce this).+        | Ordinary e+    deriving (Typeable, Data, Functor)++fromOrdinary :: e -> OpApp e -> e+fromOrdinary d (Ordinary e) = e+fromOrdinary d _            = d+ -- | Concrete expressions. Should represent exactly what the user wrote. data Expr 	= Ident QName			       -- ^ ex: @x@@@ -54,17 +69,20 @@ 	| Underscore !Range (Maybe Nat)	       -- ^ ex: @_@ 	| RawApp !Range [Expr]		       -- ^ before parsing operators 	| App !Range Expr (NamedArg Expr)      -- ^ ex: @e e@, @e {e}@, or @e {x = e}@-	| OpApp !Range Name [Expr]	       -- ^ ex: @e + e@+	| OpApp !Range Name [OpApp Expr]       -- ^ ex: @e + e@         | WithApp !Range Expr [Expr]           -- ^ ex: @e | e1 | .. | en@ 	| HiddenArg !Range (Named String Expr) -- ^ ex: @{e}@ or @{x=e}@+	| InstanceArg !Range (Named String Expr) -- ^ ex: @{{e}}@ or @{{x=e}}@ 	| Lam !Range [LamBinding] Expr	       -- ^ ex: @\\x {y} -> e@ or @\\(x:A){y:B} -> e@         | AbsurdLam !Range Hiding              -- ^ ex: @\\ ()@+        | ExtendedLam !Range [(LHS,RHS,WhereClause)]       -- ^ ex: @\\ { p11 .. p1a -> e1 ; .. ; pn1 .. pnz -> en }@ 	| Fun !Range Expr Expr                 -- ^ ex: @e -> e@ or @.e -> e@ (NYI: @{e} -> e@) 	| Pi Telescope Expr		       -- ^ ex: @(xs:e) -> e@ or @{xs:e} -> e@ 	| Set !Range			       -- ^ ex: @Set@ 	| Prop !Range			       -- ^ ex: @Prop@ 	| SetN !Range Nat		       -- ^ ex: @Set0, Set1, ..@ 	| Rec !Range [(Name, Expr)]	       -- ^ ex: @record {x = a; y = b}@+	| RecUpdate !Range Expr [(Name, Expr)] -- ^ ex: @record e {x = a; y = b}@ 	| Let !Range [Declaration] Expr	       -- ^ ex: @let Ds in e@ 	| Paren !Range Expr		       -- ^ ex: @(e)@ 	| Absurd !Range			       -- ^ ex: @()@ or @{}@, only in patterns@@ -73,6 +91,9 @@         | ETel Telescope                       -- ^ only used for printing telescopes         | QuoteGoal !Range Name Expr           -- ^ ex: @quoteGoal x in e@         | Quote !Range                         -- ^ ex: @quote@, should be applied to a name+        | QuoteTerm !Range                     -- ^ ex: @quoteTerm@, should be applied to a term+        | Unquote !Range                       -- ^ ex: @unquote@, should be applied to a term of type @Term@+        | DontCare Expr                        -- ^ to print irrelevant things     deriving (Typeable, Data)  @@ -83,6 +104,7 @@ 	| RawAppP !Range [Pattern] 	| OpAppP !Range Name [Pattern] 	| HiddenP !Range (Named String Pattern)+	| InstanceP !Range (Named String Pattern) 	| ParenP !Range Pattern 	| WildP !Range 	| AbsurdP !Range@@ -94,15 +116,15 @@  -- | A lambda binding is either domain free or typed. data LamBinding-	= DomainFree Hiding BoundName -- ^ . @x@ or @{x}@-	| DomainFull TypedBindings    -- ^ . @(xs:e,..,ys:e')@ or @{xs:e,..,ys:e'}@+	= DomainFree Hiding Relevance BoundName -- ^ . @x@ or @{x}@ or @.x@ or @.{x}@ or @{.x}@+	| DomainFull TypedBindings              -- ^ . @(xs : e)@ or @{xs : e}@     deriving (Typeable, Data)   -- | A sequence of typed bindings with hiding information. Appears in dependent --   function spaces, typed lambdas, and telescopes.-data TypedBindings = TypedBindings !Range (Arg [TypedBinding])-	-- ^ . @(xs:e;..;ys:e')@ or @{xs:e;..;ys:e'}@+data TypedBindings = TypedBindings !Range (Arg TypedBinding)+	-- ^ . @(xs : e)@ or @{xs : e}@     deriving (Typeable, Data)  @@ -132,7 +154,11 @@     We use fixity information to see which name is actually defined. -}-data LHS = LHS Pattern [Pattern] [RewriteEqn] [WithExpr]+data LHS = LHS { lhsOriginalPattern :: Pattern+               , lhsWithPattern     :: [Pattern]+               , lhsRewriteEqn      :: [RewriteEqn]+               , lhsWithExpr        :: [WithExpr]+               }          -- ^ original pattern, with-patterns, rewrite equations and with-expressions          | Ellipsis Range [Pattern] [RewriteEqn] [WithExpr]          -- ^ new with-patterns, rewrite equations and with-expressions@@ -193,7 +219,7 @@                        -- ^ The range of the \"as\" keyword. Retained                        --   for highlighting purposes.                      }-    deriving (Typeable, Data)+    deriving (Typeable, Data, Show)  {--------------------------------------------------------------------------     Declarations@@ -209,12 +235,15 @@ {-| The representation type of a declaration. The comments indicate     which type in the intended family the constructor targets. -}+ data Declaration 	= TypeSig Relevance Name Expr -- ^ Axioms and functions can be irrelevant.         | Field Name (Arg Expr) -- ^ Record field, can be hidden and/or irrelevant. 	| FunClause LHS RHS WhereClause-	| Data        !Range Induction Name [TypedBindings] Expr [Constructor]-	| Record      !Range Name (Maybe Name) [TypedBindings] Expr [Declaration]+	| DataSig     !Range Induction Name [LamBinding] Expr -- ^ lone data signature in mutual block+	| Data        !Range Induction Name [LamBinding] (Maybe Expr) [Constructor]+	| RecordSig   !Range Name [LamBinding] Expr -- ^ lone record signature in mutual block+	| Record      !Range Name (Maybe Name) [LamBinding] (Maybe Expr) [Declaration]           -- ^ The optional name is a name for the record constructor. 	| Infix Fixity [Name]         | Syntax      Name Notation -- ^ notation declaration for a name@@ -225,11 +254,15 @@ 	| Primitive   !Range [TypeSignature] 	| Open        !Range QName ImportDirective 	| Import      !Range QName (Maybe AsName) OpenShortHand ImportDirective-	| ModuleMacro !Range  Name [TypedBindings] Expr OpenShortHand ImportDirective+	| ModuleMacro !Range  Name ModuleApplication OpenShortHand ImportDirective 	| Module      !Range QName [TypedBindings] [Declaration] 	| Pragma      Pragma     deriving (Typeable, Data) +data ModuleApplication = SectionApp Range [TypedBindings] Expr+                       | RecordModuleIFS Range QName+    deriving (Typeable, Data)+ data OpenShortHand = DoOpen | DontOpen     deriving (Typeable, Data, Show) @@ -241,6 +274,8 @@             | CompiledTypePragma !Range QName String             | CompiledPragma    !Range QName String             | CompiledEpicPragma !Range QName String+            | CompiledJSPragma  !Range QName String+            | StaticPragma      !Range QName             | ImportPragma      !Range String               -- ^ Invariant: The string must be a valid Haskell               -- module name.@@ -282,9 +317,55 @@ appView e = AppView e []  {--------------------------------------------------------------------------+    Patterns+ --------------------------------------------------------------------------}++-- | Get the leftmost symbol in a pattern.+patternHead :: Pattern -> Maybe Name+patternHead p =+  case p of+    IdentP x             -> return $ unqualify x+    AppP p p'            -> patternHead p+    RawAppP _ []         -> __IMPOSSIBLE__+    RawAppP _ (p:_)      -> patternHead p+    OpAppP _ name ps     -> return $ name+    HiddenP _ (namedPat) -> patternHead (namedThing namedPat)+    ParenP _ p           -> patternHead p+    WildP _              -> Nothing+    AbsurdP _            -> Nothing+    AsP _ x p            -> patternHead p+    DotP{}               -> Nothing+    LitP (LitQName _ x)  -> Nothing -- return $ unqualify x -- does not compile+    LitP _               -> Nothing+    InstanceP _ (namedPat) -> patternHead (namedThing namedPat)+++-- | Get all the identifiers in a pattern in left-to-right order.+patternNames :: Pattern -> [Name]+patternNames p =+  case p of+    IdentP x             -> [unqualify x]+    AppP p p'            -> concatMap patternNames [p, namedThing $ unArg p']+    RawAppP _ ps         -> concatMap patternNames  ps+    OpAppP _ name ps     -> name : concatMap patternNames ps+    HiddenP _ (namedPat) -> patternNames (namedThing namedPat)+    ParenP _ p           -> patternNames p+    WildP _              -> []+    AbsurdP _            -> []+    AsP _ x p            -> patternNames p+    DotP{}               -> []+    LitP _               -> []+    InstanceP _ (namedPat) -> patternNames (namedThing namedPat)++{--------------------------------------------------------------------------     Instances  --------------------------------------------------------------------------} +instance HasRange e => HasRange (OpApp e) where+    getRange e = case e of+        Ordinary e -> getRange e+        SyntaxBindingLambda r _ _ -> r+ instance HasRange Expr where     getRange e = 	case e of@@ -298,6 +379,7 @@             WithApp r _ _       -> r 	    Lam r _ _		-> r             AbsurdLam r _       -> r+            ExtendedLam r _       -> r 	    Fun r _ _		-> r 	    Pi b e		-> fuseRange b e 	    Set r		-> r@@ -309,10 +391,15 @@ 	    Dot r _		-> r 	    Absurd r		-> r 	    HiddenArg r _	-> r+	    InstanceArg r _	-> r 	    Rec r _		-> r+	    RecUpdate r _ _	-> r             ETel tel            -> getRange tel             QuoteGoal r _ _     -> r             Quote r             -> r+            QuoteTerm r         -> r+            Unquote r           -> r+            DontCare{}          -> noRange  -- instance HasRange Telescope where --     getRange (TeleBind bs) = getRange bs@@ -326,7 +413,7 @@     getRange (TNoBind e)   = getRange e  instance HasRange LamBinding where-    getRange (DomainFree _ x)	= getRange x+    getRange (DomainFree _ _ x)	= getRange x     getRange (DomainFull b)	= getRange b  instance HasRange BoundName where@@ -337,16 +424,22 @@   getRange (AnyWhere ds)    = getRange ds   getRange (SomeWhere _ ds) = getRange ds +instance HasRange ModuleApplication where+  getRange (SectionApp r _ _) = r+  getRange (RecordModuleIFS r _) = r+ instance HasRange Declaration where     getRange (TypeSig _ x t)	       = fuseRange x t     getRange (Field x t)               = fuseRange x t     getRange (FunClause lhs rhs wh)    = fuseRange lhs rhs `fuseRange` wh+    getRange (DataSig r _ _ _ _)       = r     getRange (Data r _ _ _ _ _)	       = r+    getRange (RecordSig r _ _ _)       = r     getRange (Record r _ _ _ _ _)      = r     getRange (Mutual r _)	       = r     getRange (Abstract r _)	       = r     getRange (Open r _ _)	       = r-    getRange (ModuleMacro r _ _ _ _ _) = r+    getRange (ModuleMacro r _ _ _ _)   = r     getRange (Import r _ _ _ _)	       = r     getRange (Private r _)	       = r     getRange (Postulate r _)	       = r@@ -371,6 +464,8 @@     getRange (CompiledTypePragma r _ _)   = r     getRange (CompiledPragma r _ _)       = r     getRange (CompiledEpicPragma r _ _)   = r+    getRange (CompiledJSPragma r _ _)     = r+    getRange (StaticPragma r _)           = r     getRange (ImportPragma r _)           = r     getRange (ImpossiblePragma r)         = r     getRange (EtaPragma r _)              = r@@ -403,4 +498,5 @@     getRange (AbsurdP r)	= r     getRange (LitP l)		= getRange l     getRange (HiddenP r _)	= r+    getRange (InstanceP r _)	= r     getRange (DotP r _)		= r
src/full/Agda/Syntax/Concrete/Definitions.hs view
@@ -2,7 +2,6 @@  module Agda.Syntax.Concrete.Definitions     ( NiceDeclaration(..)-    , NiceDefinition(..)     , NiceConstructor, NiceTypeSignature     , Clause(..)     , DeclarationException(..)@@ -11,15 +10,19 @@     , notSoNiceDeclarations     ) where +import Control.Arrow ((***), (&&&)) import Control.Applicative- import Data.Generics (Typeable, Data)+import Data.Foldable hiding (concatMap, mapM_, notElem, elem, all) import qualified Data.Map as Map+import Data.Map (Map) import Control.Monad.Error+import Control.Monad.State import Data.List import Data.Maybe-import qualified Data.Traversable as Trav+import Data.Traversable (traverse) +import Debug.Trace (trace) import Agda.Syntax.Concrete import Agda.Syntax.Common import Agda.Syntax.Position@@ -27,10 +30,18 @@ import Agda.Syntax.Notation import Agda.Syntax.Concrete.Pretty import Agda.Utils.Pretty+import Agda.Utils.List (mhead, isSublistOf)+import Agda.Utils.Monad  #include "../../undefined.h" import Agda.Utils.Impossible +import Control.Applicative+import Control.Monad.Error+import Data.Char++import Debug.Trace+ {--------------------------------------------------------------------------     Types  --------------------------------------------------------------------------}@@ -41,78 +52,81 @@     modifiers have been distributed to the individual declarations. -} data NiceDeclaration-	= Axiom Range Fixity' Access IsAbstract Relevance Name Expr+        = Axiom Range Fixity' Access Relevance Name Expr             -- ^ Axioms and functions can be declared irrelevant.         | NiceField Range Fixity' Access IsAbstract Name (Arg Expr)-	| PrimitiveFunction Range Fixity' Access IsAbstract Name Expr-	| NiceDef Range [Declaration] [NiceTypeSignature] [NiceDefinition]-	    -- ^ A bunch of mutually recursive functions\/datatypes.-	    --   The last two lists have the same length. The first list is the-	    --   concrete declarations these definitions came from.-	| NiceModule Range Access IsAbstract QName Telescope [Declaration]-	| NiceModuleMacro Range Access IsAbstract Name Telescope Expr OpenShortHand ImportDirective-	| NiceOpen Range QName ImportDirective-	| NiceImport Range QName (Maybe AsName) OpenShortHand ImportDirective-	| NicePragma Range Pragma-    deriving (Typeable, Data)---- | A definition without its type signature.-data NiceDefinition-	= FunDef  Range [Declaration] Fixity' Access IsAbstract Name [Clause]-	| DataDef Range Fixity' Access IsAbstract Name [LamBinding] [NiceConstructor]-	| RecDef Range Fixity' Access IsAbstract Name (Maybe NiceConstructor) [LamBinding] [NiceDeclaration]-          -- ^ The 'NiceConstructor' has a dummy type field (the-          --   record constructor type has not been computed yet).-    deriving (Typeable, Data)+        | PrimitiveFunction Range Fixity' Access IsAbstract Name Expr+        | NiceMutual Range [NiceDeclaration]+        | NiceModule Range Access IsAbstract QName Telescope [Declaration]+        | NiceModuleMacro Range Access IsAbstract Name ModuleApplication OpenShortHand ImportDirective+        | NiceOpen Range QName ImportDirective+        | NiceImport Range QName (Maybe AsName) OpenShortHand ImportDirective+        | NicePragma Range Pragma+        | NiceRecSig Range Fixity' Access Name [LamBinding] Expr+        | NiceDataSig Range Fixity' Access Name [LamBinding] Expr+        | FunSig Range Fixity' Access Relevance Name Expr+        | FunDef  Range [Declaration] Fixity' IsAbstract Name [Clause] -- ^ block of function clauses (we have seen the type signature before)+        | DataDef Range Fixity' IsAbstract Name [LamBinding] [NiceConstructor]+        | RecDef Range Fixity' IsAbstract Name (Maybe (ThingWithFixity Name)) [LamBinding] [NiceDeclaration]+    deriving (Typeable, Data, Show)  -- | Only 'Axiom's. type NiceConstructor = NiceTypeSignature  -- | Only 'Axiom's.-type NiceTypeSignature	= NiceDeclaration+type NiceTypeSignature  = NiceDeclaration  -- | One clause in a function definition. There is no guarantee that the 'LHS' --   actually declares the 'Name'. We will have to check that later. data Clause = Clause Name LHS RHS WhereClause [Clause]-    deriving (Typeable, Data)+    deriving (Typeable, Data, Show)  -- | The exception type. data DeclarationException-	= MultipleFixityDecls [(Name, [Fixity'])]-	| MissingDefinition Name+        = MultipleFixityDecls [(Name, [Fixity'])]+        | MissingDefinition Name         | MissingWithClauses Name-	| MissingTypeSignature LHS-	| NotAllowedInMutual NiceDeclaration-	| UnknownNamesInFixityDecl [Name]+        | MissingTypeSignature LHS+        | MissingDataSignature Name+        | NotAllowedInMutual NiceDeclaration+        | UnknownNamesInFixityDecl [Name]         | Codata Range-	| DeclarationPanic String+        | DeclarationPanic String+        | UselessPrivate Range+        | UselessAbstract Range+        | AmbiguousFunClauses LHS [Name] -- ^ in a mutual block, a clause could belong to any of the @[Name]@ type signatures     deriving (Typeable)  instance HasRange DeclarationException where-    getRange (MultipleFixityDecls xs)	   = getRange (fst $ head xs)-    getRange (MissingDefinition x)	   = getRange x+    getRange (MultipleFixityDecls xs)      = getRange (fst $ head xs)+    getRange (MissingDefinition x)         = getRange x     getRange (MissingWithClauses x)        = getRange x-    getRange (MissingTypeSignature x)	   = getRange x-    getRange (NotAllowedInMutual x)	   = getRange x+    getRange (MissingTypeSignature x)      = getRange x+    getRange (MissingDataSignature x)      = getRange x+    getRange (AmbiguousFunClauses lhs xs)  = getRange lhs+    getRange (NotAllowedInMutual x)        = getRange x     getRange (UnknownNamesInFixityDecl xs) = getRange . head $ xs     getRange (Codata r)                    = r-    getRange (DeclarationPanic _)	   = noRange+    getRange (DeclarationPanic _)          = noRange+    getRange (UselessPrivate r)            = r+    getRange (UselessAbstract r)           = r  instance HasRange NiceDeclaration where-    getRange (Axiom r _ _ _ _ _ _)	       = r-    getRange (NiceField r _ _ _ _ _)	       = r-    getRange (NiceDef r _ _ _)		       = r-    getRange (NiceModule r _ _ _ _ _)	       = r-    getRange (NiceModuleMacro r _ _ _ _ _ _ _) = r-    getRange (NiceOpen r _ _)		       = r-    getRange (NiceImport r _ _ _ _)	       = r-    getRange (NicePragma r _)		       = r-    getRange (PrimitiveFunction r _ _ _ _ _)   = r--instance HasRange NiceDefinition where-  getRange (FunDef r _ _ _ _ _ _)   = r-  getRange (DataDef r _ _ _ _ _ _)  = r-  getRange (RecDef r _ _ _ _ _ _ _) = r+  getRange (Axiom r _ _ _ _ _)             = r+  getRange (NiceField r _ _ _ _ _)         = r+  getRange (NiceMutual r _)                = r+  getRange (NiceModule r _ _ _ _ _)        = r+  getRange (NiceModuleMacro r _ _ _ _ _ _) = r+  getRange (NiceOpen r _ _)                = r+  getRange (NiceImport r _ _ _ _)          = r+  getRange (NicePragma r _)                = r+  getRange (PrimitiveFunction r _ _ _ _ _) = r+  getRange (FunSig r _ _ _ _ _)            = r+  getRange (FunDef r _ _ _ _ _)            = r+  getRange (DataDef r _ _ _ _ _)           = r+  getRange (RecDef r _ _ _ _ _ _)          = r+  getRange (NiceRecSig r _ _ _ _ _)        = r+  getRange (NiceDataSig r _ _ _ _ _)       = r  instance Error DeclarationException where   noMsg  = strMsg ""@@ -121,30 +135,40 @@ instance Show DeclarationException where   show (MultipleFixityDecls xs) = show $     sep [ fsep $ pwords "Multiple fixity declarations for"-	, vcat $ map f xs-	]+        , vcat $ map f xs+        ]       where-	f (x, fs) = pretty x <> text ":" <+> fsep (map (text . show) fs)+        f (x, fs) = pretty x <> text ":" <+> fsep (map (text . show) fs)   show (MissingDefinition x) = show $ fsep $     pwords "Missing definition for" ++ [pretty x]   show (MissingWithClauses x) = show $ fsep $     pwords "Missing with-clauses for function" ++ [pretty x]   show (MissingTypeSignature x) = show $ fsep $     pwords "Missing type signature for left hand side" ++ [pretty x]+  show (MissingDataSignature x) = show $ fsep $+    pwords "Missing type signature for " ++ [pretty x]+  show (AmbiguousFunClauses lhs xs) = show $ fsep $+    pwords "More than one matching type signature for left hand side" ++ [pretty lhs] +++    pwords "it could belong to any of:" ++ map pretty xs   show (UnknownNamesInFixityDecl xs) = show $ fsep $     pwords "Names out of scope in fixity declarations:" ++ map pretty xs+  show (UselessPrivate _)      = show $ fsep $+    pwords "Using private here has no effect. Move it to the type signatures to make the definitions private."+  show (UselessAbstract _)      = show $ fsep $+    pwords "Using abstract here has no effect. Move it to the definitions to make them abstract."   show (NotAllowedInMutual nd) = show $ fsep $     [text $ decl nd] ++ pwords "are not allowed in mutual blocks"     where-      decl (Axiom{})		 = "Postulates"+      decl (Axiom{})             = "Postulates"       decl (NiceField{})         = "Fields"-      decl (NiceDef{})		 = "Record types"-      decl (NiceModule{})	 = "Modules"+      decl (NiceMutual{})        = "Mutual blocks"+      decl (NiceModule{})        = "Modules"       decl (NiceModuleMacro{})   = "Modules"-      decl (NiceOpen{})		 = "Open declarations"-      decl (NiceImport{})	 = "Import statements"-      decl (NicePragma{})	 = "Pragmas"+      decl (NiceOpen{})          = "Open declarations"+      decl (NiceImport{})        = "Import statements"+      decl (NicePragma{})        = "Pragmas"       decl (PrimitiveFunction{}) = "Primitive declarations"+      decl _ = __IMPOSSIBLE__   show (Codata _) =     "The codata construction has been removed. " ++     "Use the INFINITY builtin instead."@@ -154,304 +178,447 @@     The niceifier  --------------------------------------------------------------------------} -type Nice = Either DeclarationException+data InMutual+  = InMutual    -- ^ we are nicifying a mutual block+  | NotInMutual -- ^ we are nicifying decls not in a mutual block+    deriving (Eq, Show) -runNice :: Nice a -> Either DeclarationException a-runNice = id+data DataRecOrFun = DataName | RecName | FunName+  deriving (Eq, Ord) -niceDeclarations :: [Declaration] -> Nice [NiceDeclaration]-niceDeclarations ds = do-      fixs <- fixities ds-      case Map.keys fixs \\ concatMap declaredNames ds of-	[]  -> nice fixs ds-	xs  -> throwError $ UnknownNamesInFixityDecl xs-    where+data NiceEnv = NiceEnv+  { loneSigs :: [(DataRecOrFun, Name)]   -- ^ lone type signatures that wait for their fun.clauses+  , fixs     :: Map Name Fixity'+  } -	-- If no fixity is given we return the default fixity.-	fixity :: Name -> Map.Map Name Fixity' -> Fixity'-	fixity = Map.findWithDefault defaultFixity'+initNiceEnv :: NiceEnv+initNiceEnv = NiceEnv+  { loneSigs = []+  , fixs     = Map.empty+  } -	-- We forget all fixities in recursive calls. This is because-	-- fixity declarations have to appear at the same level as the-	-- declaration.-	fmapNice x = mapM niceDeclarations x+type Nice = StateT NiceEnv (Either DeclarationException) -	-- Compute the names defined in a declaration-	declaredNames :: Declaration -> [Name]-	declaredNames d = case d of-	  TypeSig _ x _				       -> [x]-          Field x _                                    -> [x]-	  FunClause (LHS p [] _ _) _ _-            | IdentP (QName x) <- noSingletonRawAppP p -> [x]-	  FunClause{}				       -> []-	  Data _ _ x _ _ cs			       -> x : concatMap declaredNames cs-	  Record _ x c _ _ _			       -> x : maybeToList c-	  Infix _ _				       -> []-          Syntax _ _                                   -> []-	  Mutual _ ds				       -> concatMap declaredNames ds-	  Abstract _ ds				       -> concatMap declaredNames ds-	  Private _ ds				       -> concatMap declaredNames ds-	  Postulate _ ds			       -> concatMap declaredNames ds-	  Primitive _ ds			       -> concatMap declaredNames ds-	  Open{}				       -> []-	  Import{}				       -> []-	  ModuleMacro{}				       -> []-	  Module{}				       -> []-	  Pragma{}				       -> []+localState :: Nice a -> Nice a+localState m = bracket get put (const m) -        niceFix fixs ds = do-	  fixs <- plusFixities fixs =<< fixities ds-          nice fixs ds+addLoneSig :: DataRecOrFun -> Name -> Nice ()+addLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = (k, x) : loneSigs niceEnv } -	nice _ []	 = return []-	nice fixs (d:ds) =-	    case d of-		TypeSig rel x t ->-		    -- After a type signature there should follow a bunch of-		    -- clauses.-		    case span (isFunClauseOf x) ds of-			([], _)	    -> throwError $ MissingDefinition x-			(ds0,ds1)   -> do-			  ds1 <- nice fixs ds1-			  d <- mkFunDef rel fixs x (Just t) ds0-                          return $ d : ds1+removeLoneSig :: DataRecOrFun -> Name -> Nice ()+removeLoneSig k x = modify $ \ niceEnv -> niceEnv { loneSigs = delete (k, x) $ loneSigs niceEnv } -		cl@(FunClause lhs@(LHS p [] _ _) _ _)-                  | IdentP (QName x) <- noSingletonRawAppP p-                                  -> do-		      ds <- nice fixs ds-		      d <- mkFunDef Relevant fixs x Nothing [cl] -- fun def without type signature is relevant-                      return $ d : ds-                FunClause lhs _ _ -> throwError $ MissingTypeSignature lhs+hasSig :: DataRecOrFun -> Name -> Nice Bool+hasSig k x = gets $ elem (k, x) . loneSigs -		_   -> liftM2 (++) nds (nice fixs ds)-		    where-			nds = case d of-                            Field x t                     -> return $ niceAxioms fixs [ d ]-			    Data r CoInductive x tel t cs -> throwError (Codata r)-			    Data r Inductive   x tel t cs -> dataOrRec DataDef niceAx r x tel t cs-			    Record r x c tel t cs         -> do-                              let c' = (\c -> niceAxiom fixs (TypeSig Relevant c t)) <$> c -- constructor is always relevant-                              dataOrRec (\x1 x2 x3 x4 x5 -> RecDef x1 x2 x3 x4 x5 c')-                                        (const niceDeclarations) r x tel t cs-			    Mutual r ds -> do-			      d <- mkMutual r [d] =<< niceFix fixs ds-			      return [d]+noLoneSigs :: Nice Bool+noLoneSigs = gets $ null . loneSigs -			    Abstract r ds -> do-			      map mkAbstract <$> niceFix fixs ds+checkLoneSigs :: Nice ()+checkLoneSigs = do+  xs <- gets loneSigs+  case xs of+    []       -> return ()+    (_, x):_ -> throwError $ MissingDefinition x -			    Private _ ds -> do-			      map mkPrivate <$> niceFix fixs ds+getFixity :: Name -> Nice Fixity'+getFixity x = gets $ Map.findWithDefault defaultFixity' x . fixs -			    Postulate _ ds -> return $ niceAxioms fixs ds+runNice :: Nice a -> Either DeclarationException a+runNice nice = nice `evalStateT` initNiceEnv -			    Primitive _ ds -> return $ map toPrim $ niceAxioms fixs ds+data DeclKind = LoneSig DataRecOrFun Name | LoneDef DataRecOrFun Name | OtherDecl -			    Module r x tel ds	-> return-				[ NiceModule r PublicAccess ConcreteDef x tel ds ]+declKind (FunSig _ _ _ _ x _)      = LoneSig FunName x+declKind (NiceRecSig _ _ _ x _ _)  = LoneSig RecName x+declKind (NiceDataSig _ _ _ x _ _) = LoneSig DataName x+declKind (FunDef _ _ _ _ x _)      = LoneDef FunName x+declKind (DataDef _ _ _ x _ _)     = LoneDef DataName x+declKind (RecDef _ _ _ x _ _ _)    = LoneDef RecName x+declKind _                         = OtherDecl -			    ModuleMacro r x tel e op is -> return-				[ NiceModuleMacro r PublicAccess ConcreteDef x tel e op is ]+niceDeclarations :: [Declaration] -> Nice [NiceDeclaration]+niceDeclarations ds = do+  fixs <- fixities ds+  case Map.keys fixs \\ concatMap declaredNames ds of+    []  -> localState $ do+      put $ initNiceEnv { fixs = fixs }+      ds <- nice ds+      checkLoneSigs+      modify $ \s -> s { loneSigs = [] }+      inferMutualBlocks ds+    xs  -> throwError $ UnknownNamesInFixityDecl xs+  where+    -- Compute the names defined in a declaration+    declaredNames :: Declaration -> [Name]+    declaredNames d = case d of+      TypeSig _ x _                                -> [x]+      Field x _                                    -> [x]+      FunClause (LHS p [] _ _) _ _+        | IdentP (QName x) <- removeSingletonRawAppP p -> [x]+      FunClause{}                                  -> []+      DataSig _ _ x _ _                            -> [x]+      Data _ _ x _ _ cs                            -> x : concatMap declaredNames cs+      RecordSig _ x _ _                            -> [x]+      Record _ x c _ _ _                           -> x : foldMap (:[]) c+      Infix _ _                                    -> []+      Syntax _ _                                   -> []+      Mutual _ ds                                  -> concatMap declaredNames ds+      Abstract _ ds                                -> concatMap declaredNames ds+      Private _ ds                                 -> concatMap declaredNames ds+      Postulate _ ds                               -> concatMap declaredNames ds+      Primitive _ ds                               -> concatMap declaredNames ds+      Open{}                                       -> []+      Import{}                                     -> []+      ModuleMacro{}                                -> []+      Module{}                                     -> []+      Pragma{}                                     -> [] -			    Infix _ _		-> return []-			    Syntax _ _		-> return []-			    Open r x is		-> return [NiceOpen r x is]-			    Import r x as op is	-> return [NiceImport r x as op is]+    inferMutualBlocks :: [NiceDeclaration] -> Nice [NiceDeclaration]+    inferMutualBlocks [] = return []+    inferMutualBlocks (d : ds) =+      case declKind d of+        OtherDecl   -> (d :) <$> inferMutualBlocks ds+        LoneDef _ x -> __IMPOSSIBLE__+        LoneSig k x -> do+          addLoneSig k x+          (ds0, ds1) <- untilAllDefined ds+          (NiceMutual (getRange (d : ds0)) (d : ds0) :) <$> inferMutualBlocks ds1+      where+        untilAllDefined ds = do+          done <- noLoneSigs+          if done then return ([], ds) else+            case ds of+              []     -> __IMPOSSIBLE__ <$ checkLoneSigs+              d : ds -> case declKind d of+                LoneSig k x -> addLoneSig    k x >> cons d (untilAllDefined ds)+                LoneDef k x -> removeLoneSig k x >> cons d (untilAllDefined ds)+                OtherDecl   -> cons d (untilAllDefined ds)+          where+            cons d = fmap ((d :) *** id) -			    Pragma p		-> return [NicePragma (getRange p) p]+    nice :: [Declaration] -> Nice [NiceDeclaration]+    nice [] = return []+    nice (d:ds) = do+      case d of+        TypeSig rel x t -> do+           fx <- getFixity x+           -- register x as lone type signature, to recognize clauses later+           addLoneSig FunName x+           ds <- nice ds+           return $ FunSig (getRange d) fx PublicAccess rel x t : ds+        cl@(FunClause lhs _ _) -> do+          xs <- gets $ map snd . filter ((== FunName) . fst) . loneSigs+          -- for each type signature 'x' waiting for clauses, we try+          -- if we have some clauses for 'x'+          fixs <- gets fixs+          case filter (\ (x,(fits,rest)) -> not $ null fits) $+                  map (\ x -> (x, span (couldBeFunClauseOf (Map.lookup x fixs) x) $ d : ds)) xs of+            -- case: clauses match none of the sigs+            -- treat it as a function clause without a type signature+            [] -> case lhs of+              LHS p [] _ _ | IdentP (QName x) <- removeSingletonRawAppP p -> do+                ds <- nice ds+                d  <- mkFunDef Relevant x Nothing [cl] -- fun def without type signature is relevant+                return $ d ++ ds+              _ -> throwError $ MissingTypeSignature lhs+            -- case: clauses match exactly one of the sigs+            [(x,(fits,rest))] -> do+               removeLoneSig FunName x+               cs  <- mkClauses x $ expandEllipsis fits+               ds1 <- nice rest+               fx  <- getFixity x+               d   <- return $ FunDef (getRange fits) fits fx ConcreteDef x cs+               return $ d : ds1+            -- case: clauses match more than one sigs (ambiguity)+            l -> throwError $ AmbiguousFunClauses lhs (map fst l) -- "ambiguous function clause; cannot assign it uniquely to one type signature" -			    FunClause _ _ _	-> __IMPOSSIBLE__-			    TypeSig{}		-> __IMPOSSIBLE__-			  where-			    dataOrRec mkDef niceD r x tel t cs = do-                              ds <- niceD fixs cs-                              return $-                                [ NiceDef r [d]-                                  [ Axiom (fuseRange x t) f PublicAccess ConcreteDef Relevant-                                          x (Pi tel t)-                                  ]-                                  -- Setting the range to the range of t makes sense-                                  -- since the only errors you get at the level of the-                                  -- definitions are the type not ending in a sort.-                                  [ mkDef (getRange t) f PublicAccess ConcreteDef x-                                          (concatMap binding tel)-                                          ds-                                  ]-                                ]-                              where-                                f = fixity x fixs-                                binding (TypedBindings _ (Arg h rel bs)) =-                                    concatMap (bind h) bs-                                bind h (TBind _ xs _) =-                                    map (DomainFree h) xs-                                bind h (TNoBind e) =-                                    [ DomainFree h $ mkBoundName_ (noName (getRange e)) ]+        Field x t                     -> (++) <$> niceAxioms [ d ] <*> nice ds+        DataSig r CoInductive x tel t -> throwError (Codata r)+        Data r CoInductive x tel t cs -> throwError (Codata r)+        DataSig r Inductive   x tel t -> do+          addLoneSig DataName x+          (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel (Just t) Nothing+               <*> nice ds+        Data r Inductive x tel t cs -> do+          t <- defaultTypeSig DataName x t+          (++) <$> dataOrRec DataDef NiceDataSig niceAxioms r x tel t (Just cs)+               <*> nice ds+        RecordSig r x tel t -> do+          addLoneSig RecName x+          fx <- getFixity x+          (NiceRecSig r fx PublicAccess x tel t :) <$> nice ds+        Record r x c tel t cs -> do+          t <- defaultTypeSig RecName x t+          c <- traverse (\c -> ThingWithFixity c <$> getFixity c) c+          (++) <$> dataOrRec (\x1 x2 x3 x4 -> RecDef x1 x2 x3 x4 c) NiceRecSig+                             niceDeclarations r x tel t (Just cs)+               <*> nice ds+        Mutual r ds' ->+          (:) <$> (mkOldMutual r =<< nice ds') <*> nice ds +        Abstract r ds' ->+          (++) <$> (abstractBlock r =<< nice ds') <*> nice ds +        Private r ds' ->+          (++) <$> (privateBlock r =<< nice ds') <*> nice ds -	-- Translate axioms-        niceAx fixs ds = return $ niceAxioms fixs ds+        Postulate _ ds' -> (++) <$> niceAxioms ds' <*> nice ds -	niceAxioms :: Map.Map Name Fixity' -> [TypeSignature] -> [NiceDeclaration]-	niceAxioms fixs ds = map (niceAxiom fixs) ds+        Primitive _ ds' -> (++) <$> (map toPrim <$> niceAxioms ds') <*> nice ds -        niceAxiom :: Map.Map Name Fixity' -> TypeSignature -> NiceDeclaration-        niceAxiom fixs d@(TypeSig rel x t) =-            Axiom (getRange d) (fixity x fixs) PublicAccess ConcreteDef rel x t-        niceAxiom fixs d@(Field x argt) =-            NiceField (getRange d) (fixity x fixs) PublicAccess ConcreteDef x argt-        niceAxiom _ _ = __IMPOSSIBLE__+        Module r x tel ds' ->+          (NiceModule r PublicAccess ConcreteDef x tel ds' :) <$> nice ds -	toPrim :: NiceDeclaration -> NiceDeclaration-	toPrim (Axiom r f a c rel x t) = PrimitiveFunction r f a c x t-	toPrim _		       = __IMPOSSIBLE__+        ModuleMacro r x modapp op is ->+          (NiceModuleMacro r PublicAccess ConcreteDef x modapp op is :)+            <$> nice ds -	-- Create a function definition.-	mkFunDef rel fixs x mt ds0 = do-          cs <- mkClauses x $ expandEllipsis ds0-          return $-	    NiceDef (fuseRange x ds0)-		    (TypeSig rel x t : ds0)-		    [ Axiom (fuseRange x t) f PublicAccess ConcreteDef rel x t ]-		    [ FunDef (getRange ds0) ds0 f PublicAccess ConcreteDef x cs-		    ]-	    where-	      f = fixity x fixs-	      t = case mt of-		    Just t  -> t-		    Nothing -> Underscore (getRange x) Nothing+        Infix _ _           -> nice ds+        Syntax _ _          -> nice ds+        Open r x is         -> (NiceOpen r x is :) <$> nice ds+        Import r x as op is -> (NiceImport r x as op is :) <$> nice ds +        Pragma p            -> (NicePragma (getRange p) p :) <$> nice ds -        expandEllipsis :: [Declaration] -> [Declaration]-        expandEllipsis [] = []-        expandEllipsis (d@(FunClause Ellipsis{} _ _) : ds) =-          d : expandEllipsis ds-        expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _) : ds) =+    -- We could add a default type signature here, but at the moment we can't+    -- infer the type of a record or datatype, so better to just fail here.+    defaultTypeSig k x t@Just{} = return t+    defaultTypeSig k x Nothing  =+      ifM (hasSig k x)+          (Nothing <$ removeLoneSig k x)+          (throwError $ MissingDataSignature x)++    dataOrRec mkDef mkSig niceD r x tel mt mcs = do+      mds <- traverse niceD mcs+      f   <- getFixity x+      return $+         [mkSig (fuseRange x t) f PublicAccess x tel t | Just t <- [mt] ] +++         [mkDef (getRange x) f ConcreteDef x (concatMap dropType tel) ds | Just ds <- [mds] ]+      where+        dropType (DomainFull (TypedBindings r (Arg h rel TNoBind{}))) =+          [DomainFree h rel $ mkBoundName_ $ noName r]+        dropType (DomainFull (TypedBindings r (Arg h rel (TBind _ xs _)))) =+          map (DomainFree h rel) xs+        dropType b@DomainFree{} = [b]++    -- Translate axioms+    niceAxioms :: [TypeSignature] -> Nice [NiceDeclaration]+    niceAxioms ds = mapM niceAxiom ds++    niceAxiom :: TypeSignature -> Nice NiceDeclaration+    niceAxiom d@(TypeSig rel x t) = do+      fx <- getFixity x+      return $ Axiom (getRange d) fx PublicAccess rel x t+    niceAxiom d@(Field x argt) = do+      fx <- getFixity x+      return $ NiceField (getRange d) fx PublicAccess ConcreteDef x argt+    niceAxiom _ = __IMPOSSIBLE__++    toPrim :: NiceDeclaration -> NiceDeclaration+    toPrim (Axiom r f a rel x t) = PrimitiveFunction r f a ConcreteDef x t+    toPrim _                     = __IMPOSSIBLE__++    -- Create a function definition.+    mkFunDef rel x mt ds0 = do+      cs <- mkClauses x $ expandEllipsis ds0+      f  <- getFixity x+      return [ FunSig (fuseRange x t) f PublicAccess rel x t+             , FunDef (getRange ds0) ds0 f ConcreteDef x cs ]+        where+          t = case mt of+                Just t  -> t+                Nothing -> underscore (getRange x)++    underscore r = Underscore r Nothing+++    expandEllipsis :: [Declaration] -> [Declaration]+    expandEllipsis [] = []+    expandEllipsis (d@(FunClause Ellipsis{} _ _) : ds) =+      d : expandEllipsis ds+    expandEllipsis (d@(FunClause lhs@(LHS p ps _ _) _ _) : ds) =+      d : expand p ps ds+      where+        expand _ _ [] = []+        expand p ps (FunClause (Ellipsis _ ps' eqs []) rhs wh : ds) =+          FunClause (LHS p (ps ++ ps') eqs []) rhs wh : expand p ps ds+        expand p ps (FunClause (Ellipsis _ ps' eqs es) rhs wh : ds) =+          FunClause (LHS p (ps ++ ps') eqs es) rhs wh : expand p (ps ++ ps') ds+        expand p ps (d@(FunClause (LHS _ _ _ []) _ _) : ds) =           d : expand p ps ds-          where-            expand _ _ [] = []-            expand p ps (FunClause (Ellipsis _ ps' eqs []) rhs wh : ds) =-              FunClause (LHS p (ps ++ ps') eqs []) rhs wh : expand p ps ds-            expand p ps (FunClause (Ellipsis _ ps' eqs es) rhs wh : ds) =-              FunClause (LHS p (ps ++ ps') eqs es) rhs wh : expand p (ps ++ ps') ds-            expand p ps (d@(FunClause (LHS _ _ _ []) _ _) : ds) =-              d : expand p ps ds-            expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _) : ds) =-              d : expand p ps ds-            expand _ _ (_ : ds) = __IMPOSSIBLE__-        expandEllipsis (_ : ds) = __IMPOSSIBLE__+        expand _ _ (d@(FunClause (LHS p ps _ (_ : _)) _ _) : ds) =+          d : expand p ps ds+        expand _ _ (_ : ds) = __IMPOSSIBLE__+    expandEllipsis (_ : ds) = __IMPOSSIBLE__  -        -- Turn function clauses into nice function clauses.-        mkClauses :: Name -> [Declaration] -> Nice [Clause]-        mkClauses _ [] = return []-        mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh : cs) =-          (Clause x lhs rhs wh [] :) <$> mkClauses x cs-        mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh : cs) = do-          when (null with) $ throwError $ MissingWithClauses x-          wcs <- mkClauses x with-          (Clause x lhs rhs wh wcs :) <$> mkClauses x cs'-          where-            (with, cs') = span subClause cs+    -- Turn function clauses into nice function clauses.+    mkClauses :: Name -> [Declaration] -> Nice [Clause]+    mkClauses _ [] = return []+    mkClauses x (FunClause lhs@(LHS _ _ _ []) rhs wh : cs) =+      (Clause x lhs rhs wh [] :) <$> mkClauses x cs+    mkClauses x (FunClause lhs@(LHS _ ps _ es) rhs wh : cs) = do+      when (null with) $ throwError $ MissingWithClauses x+      wcs <- mkClauses x with+      (Clause x lhs rhs wh wcs :) <$> mkClauses x cs'+      where+        (with, cs') = span subClause cs -            -- A clause is a subclause if the number of with-patterns is-            -- greater or equal to the current number of with-patterns plus the-            -- number of with arguments.-            subClause (FunClause (LHS _ ps' _ _) _ _)      =-              length ps' >= length ps + length es-            subClause (FunClause (Ellipsis _ ps' _ _) _ _) = True-            subClause _                                  = __IMPOSSIBLE__-        mkClauses x (FunClause lhs@Ellipsis{} rhs wh : cs) =-          (Clause x lhs rhs wh [] :) <$> mkClauses x cs   -- Will result in an error later.-        mkClauses _ _ = __IMPOSSIBLE__+        -- A clause is a subclause if the number of with-patterns is+        -- greater or equal to the current number of with-patterns plus the+        -- number of with arguments.+        subClause (FunClause (LHS _ ps' _ _) _ _)      =+          length ps' >= length ps + length es+        subClause (FunClause (Ellipsis _ ps' _ _) _ _) = True+        subClause _                                  = __IMPOSSIBLE__+    mkClauses x (FunClause lhs@Ellipsis{} rhs wh : cs) =+      (Clause x lhs rhs wh [] :) <$> mkClauses x cs   -- Will result in an error later.+    mkClauses _ _ = __IMPOSSIBLE__ -	noSingletonRawAppP (RawAppP _ [p]) = noSingletonRawAppP p-	noSingletonRawAppP p		   = p+    -- for finding clauses for a type sig in mutual blocks+    couldBeFunClauseOf :: Maybe Fixity' -> Name -> Declaration -> Bool+    couldBeFunClauseOf mFixity x (FunClause Ellipsis{} _ _) = True+    couldBeFunClauseOf mFixity x (FunClause (LHS p _ _ _) _ _) =+      let+      pns        = patternNames p+      xStrings   = nameStringParts x+      patStrings = concatMap nameStringParts pns+      in+--          trace ("x = " ++ show x) $+--          trace ("pns = " ++ show pns) $+--          trace ("xStrings = " ++ show xStrings) $+--          trace ("patStrings = " ++ show patStrings) $+--          trace ("mFixity = " ++ show mFixity) $+      case (mhead pns, mFixity) of+        -- first identifier in the patterns is the fun.symbol?+        (Just y, _) | x == y -> True -- trace ("couldBe since y = " ++ show y) $ True+        -- are the parts of x contained in p+        _ | xStrings `isSublistOf` patStrings -> True -- trace ("couldBe since isSublistOf") $ True+        -- looking for a mixfix fun.symb+        (_, Just fix) ->  -- also matches in case of a postfix+           let notStrings = stringParts (theNotation fix)+           in  -- trace ("notStrings = " ++ show notStrings) $+               -- trace ("patStrings = " ++ show patStrings) $+               (not $ null notStrings) && (notStrings `isSublistOf` patStrings)+        -- not a notation, not first id: give up+        _ -> False -- trace ("couldBe not (case default)") $ False+    couldBeFunClauseOf _ _ _ = False -- trace ("couldBe not (fun default)") $ False -        isFunClauseOf x (FunClause Ellipsis{} _ _) = True-	isFunClauseOf x (FunClause (LHS p _ _ _) _ _) = case noSingletonRawAppP p of-	    IdentP (QName q)	-> x == q-	    _			-> True-		-- more complicated lhss must come with type signatures, so we just assume-		-- it's part of the current definition-	isFunClauseOf _ _ = False+    -- @isFunClauseOf@ is for non-mutual blocks where clauses must follow the+    -- type sig immediately+    isFunClauseOf :: Name -> Declaration -> Bool+    isFunClauseOf x (FunClause Ellipsis{} _ _) = True+    isFunClauseOf x (FunClause (LHS p _ _ _) _ _) =+     -- p is the whole left hand side, excluding "with" patterns and clauses+      case removeSingletonRawAppP p of+        IdentP (QName q)    -> x == q+        _                   -> True+            -- more complicated lhss must come with type signatures, so we just assume+            -- it's part of the current definition+    isFunClauseOf _ _ = False -	-- Make a mutual declaration-	mkMutual :: Range -> [Declaration] -> [NiceDeclaration] -> Nice NiceDeclaration-	mkMutual r cs ds = do-            mapM_ checkMutual ds-            setConcrete cs <$> foldM smash (NiceDef r [] [] []) ds-	  where-            setConcrete cs (NiceDef r _ ts ds)  = NiceDef r cs ts ds-            setConcrete cs d		    = __IMPOSSIBLE__+    removeSingletonRawAppP :: Pattern -> Pattern+    removeSingletonRawAppP (RawAppP _ [p]) = removeSingletonRawAppP p+    removeSingletonRawAppP p               = p -            isRecord RecDef{} = True-            isRecord _	  = False+    -- Make an old style mutual block from a list of mutual declarations+    mkOldMutual :: Range -> [NiceDeclaration] -> Nice NiceDeclaration+    mkOldMutual r ds = do+        -- Check that there aren't any missing definitions+        case filter (`notElem` defNames) sigNames of+          []       -> return ()+          (_, x):_ -> throwError $ MissingDefinition x+        -- Check that there are no declarations that aren't allowed in old style mutual blocks+        case [ d | (d, OtherDecl) <- zip ds $ map declKind ds ] of+          []  -> return ()+          d:_ -> throwError $ NotAllowedInMutual d+        return $ NiceMutual r $ sigs ++ other+      where+        -- Pull type signatures to the top+        (sigs, other) = partition isTypeSig ds+        isTypeSig d | LoneSig{} <- declKind d = True+        isTypeSig _ = False -            checkMutual nd@(NiceDef _ _ _ ds)-              | any isRecord ds = throwError $ NotAllowedInMutual nd-              | otherwise       = return ()-            checkMutual d = throwError $ NotAllowedInMutual d+        sigNames = [ (k, x) | LoneSig k x <- map declKind ds ]+        defNames = [ (k, x) | LoneDef k x <- map declKind ds ] -            smash nd@(NiceDef r0 _ ts0 ds0) (NiceDef r1 _ ts1 ds1) =-              return $ NiceDef (fuseRange r0 r1) [] (ts0 ++ ts1) (ds0 ++ ds1)-            smash _ _ = __IMPOSSIBLE__+    abstractBlock _ [] = return []+    abstractBlock r ds+        -- hack to avoid failing on inherited abstract blocks in where clauses+      | r == noRange           = return $ map mkAbstract ds+      | all uselessAbstract ds = throwError $ UselessAbstract r+      | otherwise              = return $ map mkAbstract ds -	-- Make a declaration abstract-	mkAbstract d =-	    case d of-		Axiom r f a _ rel x e		    -> Axiom r f a AbstractDef rel x e-		NiceField r f a _ x e		    -> NiceField r f a AbstractDef x e-		PrimitiveFunction r f a _ x e	    -> PrimitiveFunction r f a AbstractDef x e-		NiceDef r cs ts ds		    -> NiceDef r cs (map mkAbstract ts)-								 (map mkAbstractDef ds)-		NiceModule r a _ x tel ds	    -> NiceModule r a AbstractDef x tel [ Abstract (getRange ds) ds ]-		NiceModuleMacro r a _ x tel e op is -> NiceModuleMacro r a AbstractDef x tel e op is-		NicePragma _ _			    -> d-		NiceOpen _ _ _			    -> d-		NiceImport _ _ _ _ _		    -> d+    uselessAbstract d = case d of+      FunDef{}  -> False+      DataDef{} -> False+      RecDef{}  -> False+      _         -> True -	mkAbstractDef d =-	    case d of-		FunDef r ds f a _ x cs   -> FunDef r ds f a AbstractDef x (map mkAbstractClause cs)-		DataDef r f a _ x ps cs  -> DataDef r f a AbstractDef x ps $ map mkAbstract cs-		RecDef r f a _ x c ps cs -> RecDef r f a AbstractDef x (mkAbstract <$> c) ps $ map mkAbstract cs+    privateBlock _ [] = return []+    privateBlock r ds+      | all uselessPrivate ds = throwError $ UselessPrivate r+      | otherwise             = return $ map mkPrivate ds -	mkAbstractClause (Clause x lhs rhs wh with) =-	    Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with)+    uselessPrivate d = case d of+      FunDef{}  -> True+      DataDef{} -> True+      RecDef{}  -> True+      _         -> False -	mkAbstractWhere  NoWhere	 = NoWhere-	mkAbstractWhere (AnyWhere ds)	 = AnyWhere [Abstract (getRange ds) ds]-	mkAbstractWhere (SomeWhere m ds) = SomeWhere m [Abstract (getRange ds) ds]+    -- Make a declaration abstract+    mkAbstract d =+        case d of+            NiceField r f a _ x e            -> NiceField r f a AbstractDef x e+            PrimitiveFunction r f a _ x e    -> PrimitiveFunction r f a AbstractDef x e+            NiceMutual r ds                  -> NiceMutual r (map mkAbstract ds)+            NiceModuleMacro r a _ x ma op is -> NiceModuleMacro r a AbstractDef x ma op is+            FunDef r ds f _ x cs             -> FunDef r ds f AbstractDef x (map mkAbstractClause cs)+            DataDef r f _ x ps cs            -> DataDef r f AbstractDef x ps $ map mkAbstract cs+            RecDef r f _ x c ps cs           -> RecDef r f AbstractDef x c ps $ map mkAbstract cs+            NiceModule{}                     -> d+            Axiom{}                          -> d+            NicePragma{}                     -> d+            NiceOpen{}                       -> d+            NiceImport{}                     -> d+            FunSig{}                         -> d+            NiceRecSig{}                     -> d+            NiceDataSig{}                    -> d -	-- Make a declaration private-	mkPrivate d =-	    case d of-		Axiom r f _ a rel x e		    -> Axiom r f PrivateAccess a rel x e-		NiceField r f _ a x e		    -> NiceField r f PrivateAccess a x e-		PrimitiveFunction r f _ a x e	    -> PrimitiveFunction r f PrivateAccess a x e-		NiceDef r cs ts ds		    -> NiceDef r cs (map mkPrivate ts)-								    (map mkPrivateDef ds)-		NiceModule r _ a x tel ds	    -> NiceModule r PrivateAccess a x tel ds-		NiceModuleMacro r _ a x tel e op is -> NiceModuleMacro r PrivateAccess a x tel e op is-		NicePragma _ _			    -> d-		NiceOpen _ _ _			    -> d-		NiceImport _ _ _ _ _		    -> d+    mkAbstractClause (Clause x lhs rhs wh with) =+        Clause x lhs rhs (mkAbstractWhere wh) (map mkAbstractClause with) -	mkPrivateDef d =-	    case d of-		FunDef r ds f _ a x cs   -> FunDef r ds f PrivateAccess a x (map mkPrivateClause cs)-		DataDef r f _ a x ps cs  -> DataDef r f PrivateAccess a x ps (map mkPrivate cs)-		RecDef r f _ a x c ps cs -> RecDef r f PrivateAccess a x (mkPrivate <$> c) ps cs+    mkAbstractWhere  NoWhere         = NoWhere+    mkAbstractWhere (AnyWhere ds)    = AnyWhere [Abstract noRange ds]+    mkAbstractWhere (SomeWhere m ds) = SomeWhere m [Abstract noRange ds] -	mkPrivateClause (Clause x lhs rhs wh with) =-	    Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with)+    -- Make a declaration private+    mkPrivate d =+        case d of+            Axiom r f _ rel x e              -> Axiom r f PrivateAccess rel x e+            NiceField r f _ a x e            -> NiceField r f PrivateAccess a x e+            PrimitiveFunction r f _ a x e    -> PrimitiveFunction r f PrivateAccess a x e+            NiceMutual r ds                  -> NiceMutual r (map mkPrivate ds)+            NiceModule r _ a x tel ds        -> NiceModule r PrivateAccess a x tel ds+            NiceModuleMacro r _ a x ma op is -> NiceModuleMacro r PrivateAccess a x ma op is+            FunSig r f _ rel x e           -> FunSig r f PrivateAccess rel x e+            NiceRecSig r f _ x ls t        -> NiceRecSig r f PrivateAccess x ls t+            NiceDataSig r f _ x ls t       -> NiceDataSig r f PrivateAccess x ls t+            NicePragma _ _                   -> d+            NiceOpen _ _ _                   -> d+            NiceImport _ _ _ _ _             -> d+            FunDef{}                         -> d+            DataDef{}                        -> d+            RecDef{}                         -> d -	mkPrivateWhere  NoWhere		= NoWhere-	mkPrivateWhere (AnyWhere ds)	= AnyWhere [Private (getRange ds) ds]-	mkPrivateWhere (SomeWhere m ds) = SomeWhere m [Private (getRange ds) ds]+    mkPrivateClause (Clause x lhs rhs wh with) =+        Clause x lhs rhs (mkPrivateWhere wh) (map mkPrivateClause with) +    mkPrivateWhere  NoWhere         = NoWhere+    mkPrivateWhere (AnyWhere ds)    = AnyWhere [Private (getRange ds) ds]+    mkPrivateWhere (SomeWhere m ds) = SomeWhere m [Private (getRange ds) ds]+ -- | Add more fixities. Throw an exception for multiple fixity declarations. plusFixities :: Map.Map Name Fixity' -> Map.Map Name Fixity' -> Nice (Map.Map Name Fixity') plusFixities m1 m2@@ -464,10 +631,10 @@                     s | s1 == noNotation = s2                       | s2 == noNotation = s1                       | otherwise = __IMPOSSIBLE__- 	  isect	= [decls x | (x,compat) <- Map.assocs (Map.intersectionWith compatible m1 m2), not compat]+          isect = [decls x | (x,compat) <- Map.assocs (Map.intersectionWith compatible m1 m2), not compat] -	  decls x = (x, map (Map.findWithDefault __IMPOSSIBLE__ x) [m1,m2])-				-- cpp doesn't know about primes+          decls x = (x, map (Map.findWithDefault __IMPOSSIBLE__ x) [m1,m2])+                                -- cpp doesn't know about primes           compatible (Fixity' f1 s1) (Fixity' f2 s2) = (f1 == noFixity || f2 == noFixity) &&                                                        (s1 == noNotation || s2 == noNotation) @@ -477,21 +644,31 @@ --   declaration. fixities :: [Declaration] -> Nice (Map.Map Name Fixity') fixities (d:ds) = case d of-  Syntax x syn -> do fs <- fixities ds-                     plusFixities fs (Map.singleton x (Fixity' noFixity syn))-  Infix f xs -> plusFixities (Map.fromList [ (x,Fixity' f noNotation) | x <- xs ]) =<< fixities ds-  _          -> fixities ds+  Syntax x syn   -> plusFixities (Map.singleton x (Fixity' noFixity syn)) =<< fixities ds+  Infix f xs     -> plusFixities (Map.fromList [ (x,Fixity' f noNotation) | x <- xs ]) =<< fixities ds+  Mutual _ ds'   -> fixities (ds' ++ ds)+  Abstract _ ds' -> fixities (ds' ++ ds)+  Private _ ds'  -> fixities (ds' ++ ds)+  _              -> fixities ds fixities [] = return $ Map.empty  notSoNiceDeclarations :: [NiceDeclaration] -> [Declaration] notSoNiceDeclarations = concatMap notNice   where-    notNice (Axiom _ _ _ _ rel x e)               = [TypeSig rel x e]-    notNice (NiceField _ _ _ _ x argt)            = [Field x argt]-    notNice (PrimitiveFunction r _ _ _ x e)       = [Primitive r [TypeSig Relevant x e]]-    notNice (NiceDef _ ds _ _)                    = ds-    notNice (NiceModule r _ _ x tel ds)           = [Module r x tel ds]-    notNice (NiceModuleMacro r _ _ x tel e o dir) = [ModuleMacro r x tel e o dir]-    notNice (NiceOpen r x dir)                    = [Open r x dir]-    notNice (NiceImport r x as o dir)             = [Import r x as o dir]-    notNice (NicePragma _ p)                      = [Pragma p]+    notNice d = case d of+      Axiom _ _ _ rel x e              -> [TypeSig rel x e]+      NiceField _ _ _ _ x argt         -> [Field x argt]+      PrimitiveFunction r _ _ _ x e    -> [Primitive r [TypeSig Relevant x e]]+      NiceMutual _ ds                  -> concatMap notNice ds+      NiceModule r _ _ x tel ds        -> [Module r x tel ds]+      NiceModuleMacro r _ _ x ma o dir -> [ModuleMacro r x ma o dir]+      NiceOpen r x dir                 -> [Open r x dir]+      NiceImport r x as o dir          -> [Import r x as o dir]+      NicePragma _ p                   -> [Pragma p]+      NiceRecSig r _ _ x bs e          -> [RecordSig r x bs e]+      NiceDataSig r _ _ x bs e         -> [DataSig r Inductive x bs e]+      FunSig _ _ _ rel x e             -> [TypeSig rel x e]+      FunDef _ ds _ _ _ _              -> ds+      DataDef r _ _ x bs cs            -> [Data r Inductive x bs Nothing $ concatMap notNice cs]+      RecDef r _ _ x c bs ds           -> [Record r x (unThing <$> c) bs Nothing $ concatMap notNice ds]+        where unThing (ThingWithFixity c _) = c
src/full/Agda/Syntax/Concrete/Name.hs view
@@ -49,6 +49,7 @@ isNoName :: Name -> Bool isNoName (NoName _ _)    = True isNoName (Name _ [Hole]) = True   -- TODO: Track down where these come from+isNoName (Name _ [])     = True isNoName _               = False  -- | Is the name an operator?@@ -60,6 +61,9 @@ nameParts :: Name -> [NamePart] nameParts (Name _ ps)  = ps nameParts (NoName _ _) = [Hole]++nameStringParts :: Name -> [String]+nameStringParts n = [ s | Id s <- nameParts n ]  -- | @qualify A.B x == A.B.x@ qualify :: QName -> Name -> QName
src/full/Agda/Syntax/Concrete/Operators.hs view
@@ -39,10 +39,12 @@ import Agda.TypeChecking.Monad.Base (typeError, TypeError(..)) import Agda.TypeChecking.Monad.State (getScope) import Agda.TypeChecking.Monad.Options+import Agda.TypeChecking.Monad.Statistics  import Agda.Utils.ReadP import Agda.Utils.Monad import Agda.Utils.Tuple+import Agda.Utils.List  import Debug.Trace @@ -80,7 +82,7 @@ localNames = do   defs   <- getDefinedNames [DefName, ConName]   locals <- scopeLocals <$> getScope-  return $ split $ nubBy ((==) `on` fst) $ map localOp locals ++ defs+  return $ split $ uniqBy fst $ map localOp locals ++ defs   where     localOp (x, y) = (x, A.nameFixity y)     split ops = ([ x | Left x <- zs], [ y | Right y <- zs ])@@ -224,35 +226,48 @@         App _ e1 e2     -> AppV e1 e2         OpApp r d es    -> OpAppV d es         HiddenArg _ e   -> HiddenArgV e+        InstanceArg _ e -> InstanceArgV e         Paren _ e       -> ParenV e         Lam _ bs    e   -> LamV bs e+        Underscore{}    -> WildV e         _               -> OtherV e     unExprView e = case e of         LocalV x      -> Ident (QName x)         AppV e1 e2    -> App (fuseRange e1 e2) e1 e2         OpAppV d es   -> OpApp (fuseRange d es) d es         HiddenArgV e  -> HiddenArg (getRange e) e+        InstanceArgV e -> InstanceArg (getRange e) e         ParenV e      -> Paren (getRange e) e         LamV bs e     -> Lam (fuseRange bs e) bs e+        WildV e       -> e         OtherV e      -> e + instance IsExpr Pattern where     exprView e = case e of         IdentP (QName x) -> LocalV x         AppP e1 e2       -> AppV e1 e2-        OpAppP r d es    -> OpAppV d es+        OpAppP r d es    -> OpAppV d (map Ordinary es)         HiddenP _ e      -> HiddenArgV e+        InstanceP _ e    -> InstanceArgV e         ParenP _ e       -> ParenV e+        WildP{}          -> WildV e         _                -> OtherV e     unExprView e = case e of         LocalV x         -> IdentP (QName x)         AppV e1 e2       -> AppP e1 e2-        OpAppV d es      -> OpAppP (fuseRange d es) d es+        OpAppV d es      -> let ess :: [Pattern]+                                ess = (map (fromOrdinary __IMPOSSIBLE__) es)+                            in OpAppP (fuseRange d es) d ess         HiddenArgV e     -> HiddenP (getRange e) e+        InstanceArgV e   -> InstanceP (getRange e) e         ParenV e         -> ParenP (getRange e) e         LamV _ _         -> __IMPOSSIBLE__+        WildV e          -> e         OtherV e         -> e ++ --------------------------------------------------------------------------- -- * Parse functions ---------------------------------------------------------------------------@@ -264,6 +279,7 @@     RawAppP _ ps     -> fullParen' <$> (parsePattern prs =<< parse prs ps)     OpAppP r d ps    -> fullParen' . OpAppP r d <$> mapM (parsePattern prs) ps     HiddenP _ _      -> fail "bad hidden argument"+    InstanceP _ _    -> fail "bad instance argument"     AsP r x p        -> AsP r x <$> parsePattern prs p     DotP r e         -> return $ DotP r e     ParenP r p       -> fullParen' <$> parsePattern prs p@@ -309,6 +325,7 @@             ParenP _ p       -> appView p             RawAppP _ _      -> __IMPOSSIBLE__             HiddenP _ _      -> __IMPOSSIBLE__+            InstanceP _ _    -> __IMPOSSIBLE__             _                -> [p]  parseApplication :: [Expr] -> ScopeM Expr@@ -340,15 +357,18 @@ fullParen' :: IsExpr e => e -> e fullParen' e = case exprView e of     LocalV _     -> e+    WildV _      -> e     OtherV _     -> e     HiddenArgV _ -> e+    InstanceArgV _ -> e     ParenV _     -> e     AppV e1 (Arg h r e2) -> par $ unExprView $ AppV (fullParen' e1) (Arg h r e2')         where             e2' = case h of                 Hidden    -> e2+                Instance  -> e2                 NotHidden -> fullParen' <$> e2-    OpAppV x es -> par $ unExprView $ OpAppV x $ map fullParen' es+    OpAppV x es -> par $ unExprView $ OpAppV x $ map (fmap fullParen') es     LamV bs e -> par $ unExprView $ LamV bs (fullParen e)     where         par = unExprView . ParenV@@ -358,10 +378,12 @@ paren f   e@(OpApp _ op _)     = do fx <- f op; return $ \p -> mparen (opBrackets fx p) e paren _   e@(Lam _ _ _)        = return $ \p -> mparen (lamBrackets p) e paren _   e@(AbsurdLam _ _)    = return $ \p -> mparen (lamBrackets p) e+paren _   e@(ExtendedLam _ _)    = return $ \p -> mparen (lamBrackets p) e paren _   e@(Fun _ _ _)        = return $ \p -> mparen (lamBrackets p) e paren _   e@(Pi _ _)           = return $ \p -> mparen (lamBrackets p) e paren _   e@(Let _ _ _)        = return $ \p -> mparen (lamBrackets p) e paren _   e@(Rec _ _)          = return $ \p -> mparen (appBrackets p) e+paren _   e@(RecUpdate _ _ _)  = return $ \p -> mparen (appBrackets p) e paren _   e@(WithApp _ _ _)    = return $ \p -> mparen (withAppBrackets p) e paren _   e@(Ident _)          = return $ \p -> e paren _   e@(Lit _)            = return $ \p -> e@@ -377,9 +399,12 @@ paren _   e@(ETel _)           = return $ \p -> e paren _   e@(RawApp _ _)       = __IMPOSSIBLE__ paren _   e@(HiddenArg _ _)    = __IMPOSSIBLE__+paren _   e@(InstanceArg _ _)  = __IMPOSSIBLE__ paren _   e@(QuoteGoal _ _ _)  = return $ \p -> mparen (lamBrackets p) e paren _   e@(Quote _)          = return $ \p -> e-+paren _   e@(QuoteTerm _)      = return $ \p -> e+paren _   e@(Unquote _)        = return $ \p -> e+paren _   e@(DontCare _)       = return $ \p -> e  mparen :: Bool -> Expr -> Expr mparen True  e = Paren (getRange e) e
src/full/Agda/Syntax/Concrete/Operators/Parser.hs view
@@ -16,10 +16,12 @@  data ExprView e     = LocalV Name+    | WildV e     | OtherV e     | AppV e (NamedArg e)-    | OpAppV Name [e]+    | OpAppV Name [OpApp e]     | HiddenArgV (Named String e)+    | InstanceArgV (Named String e)     | LamV [LamBinding] e     | ParenV e --    deriving (Show)@@ -112,23 +114,26 @@ -- | Given a name with a syntax spec, and a list of parsed expressions -- fitting it, rebuild the expression. -- Note that this function must not parse any input (as guaranteed by the type)-rebuild :: forall a e. IsExpr e => NewNotation -> Range -> [e] -> ReadP a e+rebuild :: forall symbol e. IsExpr e => NewNotation -> Range -> [e] -> ReadP symbol e rebuild (name,_,syn) r es = do   exprs <- mapM findExprFor [0..lastHole]   return $ unExprView $ OpAppV (setRange r name) exprs   where filledHoles = zip es (filter isAHole syn)         lastHole = maximum [t | Just t <- map holeTarget syn]-        findExprFor :: Int -> ReadP a e-        findExprFor n = case  [ e | (e,NormalHole m) <- filledHoles, m == n] of+        findExprFor :: Int -> ReadP a (OpApp e)+        findExprFor n = case [e | (e,NormalHole m) <- filledHoles, m == n] of                           [] -> fail $ "no expression for hole " ++ show n-                          [x] -> case [ e | (e,BindHole m) <- filledHoles, m == n] of-                                   [] -> return x -- no variable to bind+                          [x] -> case [e | (e,BindHole m) <- filledHoles, m == n] of+                                   [] -> return (Ordinary x) -- no variable to bind                                    vars -> do bs <- mapM rebuildBinding $ map exprView vars-                                              return $ unExprView $ LamV bs x+                                              return $ SyntaxBindingLambda (fuseRange bs x) bs x                           _ -> fail $ "more than one expression for hole " ++ show n  rebuildBinding :: ExprView e -> ReadP a LamBinding-rebuildBinding (LocalV name) = return $ DomainFree NotHidden (mkBoundName_ name)+  -- Andreas, 2011-04-07 put just 'Relevant' here, is this correct?+rebuildBinding (LocalV name) = return $ DomainFree NotHidden Relevant (mkBoundName_ name)+rebuildBinding (WildV e)     =+  return $ DomainFree NotHidden Relevant (mkBoundName_ $ Name noRange [Hole]) rebuildBinding _ = fail "variable name expected"  ($$$) :: (e -> ReadP a e) -> ReadP a e -> ReadP a e@@ -169,20 +174,28 @@ appP :: IsExpr e => ReadP e e -> ReadP e e -> ReadP e e appP top p = do     h  <- p-    es <- many (nothidden +++ hidden)+    es <- many (nothidden +++ hidden +++ instanceH)     return $ foldl app h es     where  	app e arg = unExprView $ AppV e arg  	isHidden (HiddenArgV _) = True-	isHidden _	       = False+	isHidden _	        = False +	isInstance (InstanceArgV _) = True+	isInstance _	            = False+ 	nothidden = Arg NotHidden Relevant . unnamed <$> do 	    e <- p 	    case exprView e of 		HiddenArgV _ -> pfail+		InstanceArgV _ -> pfail 		_	     -> return e++	instanceH = do+	    InstanceArgV e <- exprView <$> satisfy (isInstance . exprView)+	    return $ Arg Instance Relevant e  	hidden = do 	    HiddenArgV e <- exprView <$> satisfy (isHidden . exprView)
src/full/Agda/Syntax/Concrete/Pretty.hs view
@@ -32,12 +32,17 @@   '-':_ -> braces (text " " <> d)   _     -> braces d +-- double braces...+dbraces :: Doc -> Doc+dbraces = braces . braces'+ arrow  = text "\x2192" lambda = text "\x03bb" underscore = text "_"  pHidden :: Pretty a => Hiding -> a -> Doc pHidden Hidden	    = braces' . pretty+pHidden Instance    = dbraces . pretty pHidden NotHidden   = pretty  pRelevance :: Pretty a => Relevance -> a -> Doc@@ -46,6 +51,9 @@ pRelevance Irrelevant a =   let d = pretty a   in  if render d == "_" then d else text "." <> d+pRelevance NonStrict a =+  let d = pretty a+  in  if render d == "_" then d else text ".." <> d  {- UNUSED -- | Use for printing non-dependent function types@@ -53,6 +61,9 @@ prettyWithRelevance a = pRelevance (argRelevance a) a -} +instance Pretty (ThingWithFixity Name) where+    pretty (ThingWithFixity n _) = pretty n+ instance Pretty Name where     pretty = text . show @@ -60,7 +71,6 @@     pretty = text . show  instance Pretty Literal where-    pretty (LitLevel _ n)   = __IMPOSSIBLE__     pretty (LitInt _ n)	    = text $ show n     pretty (LitFloat _ x)   = text $ show x     pretty (LitString _ s)  = text $ showString' s ""@@ -83,11 +93,16 @@   pretty Forced     = empty   pretty Relevant   = empty   pretty Irrelevant = text "."+  pretty NonStrict  = text ".."  instance Pretty Induction where   pretty Inductive = text "data"   pretty CoInductive = text "codata" +instance Pretty (OpApp Expr) where+  pretty (Ordinary e) = pretty e+  pretty (SyntaxBindingLambda r bs e) = pretty (Lam r bs e)+ instance Pretty Expr where     pretty e = 	case e of@@ -115,12 +130,21 @@ 	      pretty e : map ((text "|" <+>) . pretty) es  	    HiddenArg _ e -> braces' $ pretty e+	    InstanceArg _ e -> dbraces $ pretty e 	    Lam _ bs e -> 		sep [ lambda <+> fsep (map pretty bs) <+> arrow 		    , nest 2 $ pretty e 		    ]             AbsurdLam _ NotHidden -> lambda <+> text "()"+            AbsurdLam _ Instance -> lambda <+> text "{{}}"             AbsurdLam _ Hidden -> lambda <+> text "{}"+	    ExtendedLam _ pes ->+		lambda <+> braces (fsep $ punctuate (text ";") (map (\(x,y,z) -> prettyClause x y z) pes))+                   where prettyClause lhs rhs wh = sep [ pretty lhs+                                                       , nest 2 $ pretty' rhs+                                                       ] $$ nest 2 (pretty wh)+                         pretty' (RHS e)   = arrow <+> pretty e+                         pretty' AbsurdRHS = empty 	    Fun _ e1 e2 -> 		sep [ pretty e1 <+> arrow 		    , pretty e2@@ -141,33 +165,41 @@ 	    Dot _ e   -> text "." <> pretty e 	    Absurd _  -> text "()" 	    Rec _ xs  -> sep (-	      [ text "record {" ] ++-	      punctuate (text ";") (map pr xs)) <+> text "}"-	      where-		pr (x, e) = sep [ pretty x <+> text "="-				, nest 2 $ pretty e-				]+	        [ text "record {" ] +++	        punctuate (text ";") (map recPr xs)) <+> text "}"+	    RecUpdate _ e xs ->+	            sep [ text "record" <+> pretty e <+> text "{" ]+	        <+> sep (punctuate (text ";") (map recPr xs))+	        <+> text "}"             ETel []  -> text "()"             ETel tel -> fsep $ map pretty tel             QuoteGoal _ x e -> sep [text "quoteGoal" <+> pretty x <+> text "in",                                     nest 2 $ pretty e]             Quote _ -> text "quote"+            QuoteTerm _ -> text "quoteTerm"+	    Unquote _ -> text "unquote"+            -- Andreas, 2011-10-03 print irrelevant things as .(e)+            DontCare e -> text "." <> parens (pretty e)+	where+	  recPr (x, e) = sep [ pretty x <+> text "=" , nest 2 $ pretty e ]  instance Pretty BoundName where   pretty = pretty . boundName  instance Pretty LamBinding where-    pretty (DomainFree h x) = pHidden h (pretty x)-    pretty (DomainFull b)   = pretty b+    pretty (DomainFree h r x) = pRelevance r $ pHidden h $ pretty x+    pretty (DomainFull b)     = pretty b  instance Pretty TypedBindings where-    pretty (TypedBindings _ (Arg h rel bs)) =-	pRelevance rel $ bracks $ fsep $ punctuate semi $ map pretty bs+    pretty (TypedBindings _ (Arg h rel b)) =+	pRelevance rel $ bracks $ pretty b 	where 	    bracks = case h of 			Hidden	    -> braces'+			Instance    -> dbraces 			NotHidden   -> parens + instance Pretty TypedBinding where     pretty (TNoBind e) = pretty e     pretty (TBind _ xs e) =@@ -176,17 +208,19 @@ 	    ]  smashTel :: Telescope -> Telescope-smashTel (TypedBindings r (Arg h  rel  [TBind r' xs e]) :-          TypedBindings _ (Arg h' rel' [TBind _  ys e']) : tel)+smashTel (TypedBindings r (Arg h  rel  (TBind r' xs e)) :+          TypedBindings _ (Arg h' rel' (TBind _  ys e')) : tel)   | h == h' && rel == rel' && show e == show e' =-    smashTel (TypedBindings r (Arg h rel [TBind r' (xs ++ ys) e]) : tel)+    smashTel (TypedBindings r (Arg h rel (TBind r' (xs ++ ys) e)) : tel) smashTel (b : tel) = b : smashTel tel smashTel [] = [] + instance Pretty RHS where     pretty (RHS e)   = text "=" <+> pretty e     pretty AbsurdRHS = empty +instance Show WhereClause where show = show . pretty instance Pretty WhereClause where   pretty  NoWhere = empty   pretty (AnyWhere [Module _ x [] ds]) | isNoName (unqualify x)@@ -197,6 +231,7 @@ 	 , nest 2 (vcat $ map pretty ds) 	 ] +instance Show LHS where show = show . pretty instance Pretty LHS where   pretty lhs = case lhs of     LHS p ps eqs es  -> pr (pretty p) ps eqs es@@ -215,6 +250,11 @@ instance Pretty [Declaration] where   pretty = vcat . map pretty +instance Show ModuleApplication where show = show . pretty+instance Pretty ModuleApplication where+  pretty (SectionApp _ bs e) = fsep (map pretty bs) <+> text "=" <+> pretty e+  pretty (RecordModuleIFS _ rec) = text "=" <+> pretty rec <+> text "{{...}}"+ instance Pretty Declaration where     pretty d = 	case d of@@ -230,7 +270,7 @@ 		sep [ pretty lhs 		    , nest 2 $ pretty rhs 		    ] $$ nest 2 (pretty wh)-	    Data _ ind x tel e cs ->+	    DataSig _ ind x tel e -> 		sep [ hsep  [ pretty ind 			    , pretty x 			    , fcat (map pretty tel)@@ -238,10 +278,27 @@ 		    , nest 2 $ hsep 			    [ text ":" 			    , pretty e+			    ]+		    ]+	    Data _ ind x tel (Just e) cs ->+		sep [ hsep  [ pretty ind+			    , pretty x+			    , fcat (map pretty tel)+			    ]+		    , nest 2 $ hsep+			    [ text ":"+			    , pretty e 			    , text "where" 			    ] 		    ] $$ nest 2 (vcat $ map pretty cs)-	    Record _ x con tel e cs ->+	    Data _ ind x tel Nothing cs ->+		sep [ hsep  [ pretty ind+			    , pretty x+			    , fcat (map pretty tel)+			    ]+		    , nest 2 $ text "where"+		    ] $$ nest 2 (vcat $ map pretty cs)+	    RecordSig _ x tel e -> 		sep [ hsep  [ text "record" 			    , pretty x 			    , fcat (map pretty tel)@@ -249,12 +306,32 @@ 		    , nest 2 $ hsep 			    [ text ":" 			    , pretty e+			    ]+		    ]+	    Record _ x con tel (Just e) cs ->+		sep [ hsep  [ text "record"+			    , pretty x+			    , fcat (map pretty tel)+			    ]+		    , nest 2 $ hsep+			    [ text ":"+			    , pretty e 			    , text "where" 			    ] 		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])                                               con ++                                         map pretty cs)-	    Infix f xs	->+	    Record _ x con tel Nothing cs ->+		sep [ hsep  [ text "record"+			    , pretty x+			    , fcat (map pretty tel)+			    ]+		    , nest 2 $ text "where"+		    ] $$ nest 2 (vcat $ maybe [] (\c -> [text "constructor" <+> pretty c])+                                              con +++                                        map pretty cs)++            Infix f xs	-> 		pretty f <+> (fsep $ punctuate comma $ map pretty xs)             Syntax n xs -> text "syntax" <+> pretty n <+> text "..." 	    Mutual _ ds	    -> namedBlock "mutual" ds@@ -268,15 +345,19 @@ 		     , fcat (map pretty tel) 		     , text "where" 		     ] $$ nest 2 (vcat $ map pretty ds)-	    ModuleMacro _ x [] e DoOpen i | isNoName x ->+	    ModuleMacro _ x (SectionApp _ [] e) DoOpen i | isNoName x -> 		sep [ pretty DoOpen                     , nest 2 $ pretty e                     , nest 4 $ pretty i                     ]-	    ModuleMacro _ x tel e open i ->+	    ModuleMacro _ x (SectionApp _ tel e) open i -> 		sep [ pretty open <+> text "module" <+> pretty x <+> fcat (map pretty tel) 		    , nest 2 $ text "=" <+> pretty e <+> pretty i 		    ]+	    ModuleMacro _ x (RecordModuleIFS _ rec) open i ->+		sep [ pretty open <+> text "module" <+> pretty x+		    , nest 2 $ text "=" <+> pretty rec <+> text "{{...}}"+		    ] 	    Open _ x i	-> hsep [ text "open", pretty x, pretty i ] 	    Import _ x rn open i   -> 		hsep [ pretty open, text "import", pretty x, as rn, pretty i ]@@ -305,6 +386,10 @@       hsep $ [text "COMPILED_DATA", pretty x] ++ map text (hs : hcs)     pretty (CompiledEpicPragma _ x e) =       hsep [ text "COMPILED_EPIC", pretty x, text e ]+    pretty (CompiledJSPragma _ x e) =+      hsep [ text "COMPILED_JS", pretty x, text e ]+    pretty (StaticPragma _ i) =+      hsep $ [text "STATIC", pretty i]     pretty (ImportPragma _ i) =       hsep $ [text "IMPORT", text i]     pretty (ImpossiblePragma _) =@@ -342,9 +427,10 @@ 		    prOp (Hole : _)  []	      = __IMPOSSIBLE__ 		    prOp (Id x : xs) es       = text x : prOp xs es 		    prOp []	     []       = []-		    prOp []	     (_ : _)  = __IMPOSSIBLE__+		    prOp []	     es       = map pretty es 	    OpAppP _ (NoName _ _) _ -> __IMPOSSIBLE__ 	    HiddenP _ p	       -> braces' $ pretty p+	    InstanceP _ p      -> dbraces $ pretty p 	    ParenP _ p	       -> parens $ pretty p 	    WildP _	       -> underscore 	    AsP _ x p	       -> pretty x <> text "@" <> pretty p
src/full/Agda/Syntax/Fixity.hs view
@@ -1,10 +1,12 @@-{-# LANGUAGE CPP, DeriveDataTypeable #-}+{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}  {-| Definitions for fixity and precedence levels. -} module Agda.Syntax.Fixity where  import Data.Generics (Typeable, Data)+import Data.Foldable+import Data.Traversable  import Agda.Syntax.Position import Agda.Syntax.Common@@ -18,6 +20,7 @@      theNotation :: Notation}   deriving (Typeable, Data, Show, Eq) +data ThingWithFixity x = ThingWithFixity x Fixity' deriving (Functor,Foldable,Traversable,Typeable,Data,Show) -- | All the notation information related to a name. type NewNotation = (Name, Fixity, Notation) @@ -73,6 +76,7 @@ hiddenArgumentCtx :: Hiding -> Precedence hiddenArgumentCtx NotHidden = ArgumentCtx hiddenArgumentCtx Hidden    = TopCtx+hiddenArgumentCtx Instance  = TopCtx  -- | Do we need to bracket an operator application of the given fixity --   in a context with the given precedence.@@ -92,14 +96,18 @@ opBrackets _ WithFunCtx             = False opBrackets _ _			    = True --- | Does a lambda-like thing (lambda, let or pi) need brackets in the given---   context. A peculiar thing with lambdas is that they don't need brackets---   in a right operand context. For instance: @m >>= \x -> m'@ is a valid---   infix application.+-- | Does a lambda-like thing (lambda, let or pi) need brackets in the+-- given context? A peculiar thing with lambdas is that they don't+-- need brackets in certain right operand contexts. However, we insert+-- brackets anyway, for the following reasons:+--+-- * Clarity.+--+-- * Sometimes brackets are needed. Example: @m₁ >>= (λ x → x) >>= m₂@+--   (here @_>>=_@ is left associative). lamBrackets :: Precedence -> Bool-lamBrackets TopCtx		= False-lamBrackets (RightOperandCtx _) = False-lamBrackets _			= True+lamBrackets TopCtx = False+lamBrackets _	   = True  -- | Does a function application need brackets? appBrackets :: Precedence -> Bool
src/full/Agda/Syntax/Internal.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE CPP, DeriveDataTypeable, GeneralizedNewtypeDeriving,+             DeriveFunctor, DeriveFoldable, DeriveTraversable #-}  module Agda.Syntax.Internal     ( module Agda.Syntax.Internal@@ -11,6 +12,7 @@ import Data.Foldable import Data.Traversable import Data.Function+import qualified Data.List as List  import Agda.Syntax.Position import Agda.Syntax.Common@@ -37,50 +39,54 @@ 	  | Def QName Args 	  | Con QName Args 	  | Pi (Arg Type) (Abs Type)-	  | Fun (Arg Type) Type 	  | Sort Sort+          | Level Level 	  | MetaV MetaId Args-          | DontCare               -- ^ nuked irrelevant and other stuff-  deriving (Typeable, Data, Eq, Ord, Show)--- Andreas 2010-09-21: @DontCare@ replaces the hack @Sort Prop@+          | DontCare Term  -- ^ irrelevant stuff+  deriving (Typeable, Data, Show)  data Type = El Sort Term-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Data, Show) -data Sort = Type Term   -- A term of type Level+data Elim = Apply (Arg Term) | Proj QName -- ^ name of a record projection+  deriving (Show)++-- | Top sort (Set\omega).+topSort :: Type+topSort = El Inf (Sort Inf)++data Sort = Type Level 	  | Prop  -- ignore me-	  | Lub Sort Sort-	  | Suc Sort-	  | MetaS MetaId Args           | Inf           | DLub Sort (Abs Sort)             -- ^ if the free variable occurs in the second sort             --   the whole thing should reduce to Inf, otherwise             --   it's the normal Lub-  deriving (Typeable, Data, Eq, Ord, Show)+  deriving (Typeable, Data, Show) +newtype Level = Max [PlusLevel]+  deriving (Show, Typeable, Data)++data PlusLevel = ClosedLevel Integer+               | Plus Integer LevelAtom+  deriving (Show, Typeable, Data)++data LevelAtom = MetaLevel MetaId Args+               | BlockedLevel MetaId Term+               | NeutralLevel Term+               | UnreducedLevel Term+  deriving (Show, Typeable, Data)+ -- | Something where a meta variable may block reduction. data Blocked t = Blocked MetaId t                | NotBlocked t-    deriving (Typeable, Data, Eq, Ord)+    deriving (Typeable, Data, Eq, Ord, Functor, Foldable, Traversable)  instance Show t => Show (Blocked t) where   showsPrec p (Blocked m x) = showParen (p > 0) $     showString "Blocked " . shows m . showString " " . showsPrec 10 x   showsPrec p (NotBlocked x) = showsPrec p x -instance Functor Blocked where-  fmap f (Blocked m t) = Blocked m $ f t-  fmap f (NotBlocked t) = NotBlocked $ f t--instance Foldable Blocked where-  foldr f z (Blocked _ x) = f x z-  foldr f z (NotBlocked x) = f x z--instance Traversable Blocked where-  traverse f (Blocked m t)  = Blocked m <$> f t-  traverse f (NotBlocked t) = NotBlocked <$> f t- instance Applicative Blocked where   pure = notBlocked   Blocked x f  <*> e = Blocked x $ f (ignoreBlocking e)@@ -88,33 +94,59 @@  instance Sized Term where   size v = case v of-    Var _ vs   -> 1 + Prelude.sum (map size vs)-    Def _ vs   -> 1 + Prelude.sum (map size vs)-    Con _ vs   -> 1 + Prelude.sum (map size vs)-    MetaV _ vs -> 1 + Prelude.sum (map size vs)-    Lam _ f    -> 1 + size f-    Lit _      -> 1-    Pi a b     -> 1 + size a + size b-    Fun a b    -> 1 + size a + size b-    Sort s     -> 1-    DontCare   -> 1+    Var _ vs    -> 1 + Prelude.sum (map size vs)+    Def _ vs    -> 1 + Prelude.sum (map size vs)+    Con _ vs    -> 1 + Prelude.sum (map size vs)+    MetaV _ vs  -> 1 + Prelude.sum (map size vs)+    Level l     -> size l+    Lam _ f     -> 1 + size f+    Lit _       -> 1+    Pi a b      -> 1 + size a + size b+    Sort s      -> 1+    DontCare mv -> size mv  instance Sized Type where   size = size . unEl +instance Sized Level where+  size (Max as) = 1 + Prelude.sum (map size as)++instance Sized PlusLevel where+  size (ClosedLevel _) = 1+  size (Plus _ a) = size a++instance Sized LevelAtom where+  size (MetaLevel _ vs) = 1 + Prelude.sum (map size vs)+  size (BlockedLevel _ v) = size v+  size (NeutralLevel v) = size v+  size (UnreducedLevel v) = size v+ instance KillRange Term where   killRange v = case v of-    Var i vs   -> killRange1 (Var i) vs-    Def c vs   -> killRange2 Def c vs-    Con c vs   -> killRange2 Con c vs-    MetaV m vs -> killRange1 (MetaV m) vs-    Lam h f    -> killRange2 Lam h f-    Lit l      -> killRange1 Lit l-    Pi a b     -> killRange2 Pi a b-    Fun a b    -> killRange2 Fun a b-    Sort s     -> killRange1 Sort s-    DontCare   -> DontCare+    Var i vs    -> killRange1 (Var i) vs+    Def c vs    -> killRange2 Def c vs+    Con c vs    -> killRange2 Con c vs+    MetaV m vs  -> killRange1 (MetaV m) vs+    Lam h f     -> killRange2 Lam h f+    Lit l       -> killRange1 Lit l+    Level l     -> killRange1 Level l+    Pi a b      -> killRange2 Pi a b+    Sort s      -> killRange1 Sort s+    DontCare mv -> killRange1 DontCare mv +instance KillRange Level where+  killRange (Max as) = killRange1 Max as++instance KillRange PlusLevel where+  killRange l@ClosedLevel{} = l+  killRange (Plus n l) = killRange1 (Plus n) l++instance KillRange LevelAtom where+  killRange (MetaLevel n as)   = killRange1 (MetaLevel n) as+  killRange (BlockedLevel m v) = killRange1 (BlockedLevel m) v+  killRange (NeutralLevel v)   = killRange1 NeutralLevel v+  killRange (UnreducedLevel v) = killRange1 UnreducedLevel v+ instance KillRange Type where   killRange (El s v) = killRange2 El s v @@ -123,10 +155,7 @@     Prop       -> Prop     Inf        -> Inf     Type a     -> killRange1 Type a-    Suc s      -> killRange1 Suc s-    Lub s1 s2  -> killRange2 Lub s1 s2     DLub s1 s2 -> killRange2 DLub s1 s2-    MetaS x as -> killRange1 (MetaS x) as  instance KillRange a => KillRange (Tele a) where   killRange = fmap killRange@@ -150,82 +179,43 @@ -- | Sequence of types. An argument of the first type is bound in later types --   and so on. data Tele a = EmptyTel-	    | ExtendTel a (Abs (Tele a))-  deriving (Typeable, Data, Show, Eq, Ord)+	    | ExtendTel a (Abs (Tele a))  -- ^ Abs is never NoAbs.+  deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  type Telescope = Tele (Arg Type) -instance Functor Tele where-  fmap f  EmptyTel         = EmptyTel-  fmap f (ExtendTel a tel) = ExtendTel (f a) (fmap (fmap f) tel)- instance Sized (Tele a) where   size  EmptyTel	 = 0   size (ExtendTel _ tel) = 1 + size tel  -- | The body has (at least) one free variable.-data Abs a = Abs { absName :: String-		 , absBody :: a-		 }-  deriving (Typeable, Data)+data Abs a = Abs String a+           | NoAbs String a+  deriving (Typeable, Data, Functor, Foldable, Traversable) -instance Eq a => Eq (Abs a) where-  (==) = (==) `on` absBody+-- | Danger: doesn't shift variables properly+unAbs :: Abs a -> a+unAbs (Abs   _ v) = v+unAbs (NoAbs _ v) = v -instance Ord a => Ord (Abs a) where-  compare = compare `on` absBody+absName :: Abs a -> String+absName (Abs   x _) = x+absName (NoAbs x _) = x  instance Show a => Show (Abs a) where   showsPrec p (Abs x a) = showParen (p > 0) $     showString "Abs " . shows x . showString " " . showsPrec 10 a--instance Functor Abs where-  fmap f (Abs x t) = Abs x $ f t--instance Foldable Abs where-  foldr f z (Abs _ t) = f t z--instance Traversable Abs where-  traverse f (Abs x t) = Abs x <$> f t+  showsPrec p (NoAbs x a) = showParen (p > 0) $+    showString "NoAbs " . shows x . showString " " . showsPrec 10 a  instance Sized a => Sized (Abs a) where-  size = size . absBody--telFromList :: [Arg (String, Type)] -> Telescope-telFromList = foldr (\(Arg h r (x, a)) -> ExtendTel (Arg h r a) . Abs x) EmptyTel--telToList :: Telescope -> [Arg (String, Type)]-telToList EmptyTel = []-telToList (ExtendTel arg (Abs x tel)) = fmap ((,) x) arg : telToList tel+  size = size . unAbs  -- -- Definitions -- --- | Pairs consisting of original and translated clauses.-data Clauses = Clauses-  { maybeOriginalClause :: Maybe Clause-    -- ^ The original clause, before translation of record patterns.-    -- 'Nothing' if the translated clause is identical to the original-    -- one.-  , translatedClause :: Clause-    -- ^ The translated clause.-  }-  deriving (Typeable, Data, Show)---- | The original clause, before translation of record patterns.-originalClause :: Clauses -> Clause-originalClause Clauses{ maybeOriginalClause = Just c } = c-originalClause Clauses{ maybeOriginalClause = Nothing-                      , translatedClause    = c      } = c--instance HasRange Clauses where-  getRange = getRange . translatedClause---- | A clause is a list of patterns and the clause body should @Bind@ or--- @NoBind@ in the order the variables occur in the patterns. The @NoBind@--- constructor is an optimisation to avoid substituting for variables that--- aren't used. (Note: This optimisation has been disabled.)+-- | A clause is a list of patterns and the clause body should @Bind@. -- --  The telescope contains the types of the pattern variables and the --  permutation is how to get from the order the variables occur in@@ -244,9 +234,7 @@   deriving (Typeable, Data, Show) data ClauseBody = Body Term 		| Bind (Abs ClauseBody)-		| NoBind ClauseBody-		| NoBody    -- ^ for absurd clauses.  A @NoBody@ is never-                            -- preceded by any @Bind@ or @NoBind@.+		| NoBody    -- ^ for absurd clauses.   deriving (Typeable, Data, Show)  instance HasRange Clause where@@ -276,35 +264,19 @@  -- | Doesn't do any reduction. arity :: Type -> Nat-arity t =-    case unEl t of-	Pi  _ (Abs _ b) -> 1 + arity b-	Fun _	     b	-> 1 + arity b-	_		-> 0+arity t = case unEl t of+  Pi  _ b -> 1 + arity (unAbs b)+  _       -> 0  -- | Suggest a name for the first argument of a function of the given type. argName :: Type -> String argName = argN . unEl     where 	argN (Pi _ b)  = "." ++ absName b-	argN (Fun _ _) = ".x" 	argN _	  = __IMPOSSIBLE__   ------------------------------------------------------------------------------ * Views------------------------------------------------------------------------------data FunView-	= FunV (Arg Type) Term	-- ^ second arg is the entire type ('Pi' or 'Fun').-	| NoFunV Term--funView :: Term -> FunView-funView t@(Pi  arg _) = FunV arg t-funView t@(Fun arg _) = FunV arg t-funView t	      = NoFunV t----------------------------------------------------------------------------- -- * Smart constructors --------------------------------------------------------------------------- @@ -322,47 +294,31 @@ ignoreBlocking (Blocked _ x) = x ignoreBlocking (NotBlocked x) = x -set0   = set 0-set n  = sort $ mkType n-prop   = sort Prop-sort s = El (sSuc s) $ Sort s+set0      = set 0+set n     = sort $ mkType n+prop      = sort Prop+sort s    = El (sSuc s) $ Sort s+varSort n = Type $ Max [Plus 0 $ NeutralLevel $ Var n []] -mkType n = Type $ Lit $ LitLevel noRange n+-- | Get the next higher sort.+sSuc :: Sort -> Sort+sSuc Prop            = mkType 1+sSuc Inf             = Inf+sSuc (DLub a b)      = DLub (sSuc a) (fmap sSuc b)+sSuc (Type l)        = Type $ levelSuc l -teleLam :: Telescope -> Term -> Term-teleLam  EmptyTel	  t = t-teleLam (ExtendTel u tel) t = Lam (argHiding u) $ flip teleLam t <$> tel+levelSuc (Max []) = Max [ClosedLevel 1]+levelSuc (Max as) = Max $ map inc as+  where inc (ClosedLevel n) = ClosedLevel (n + 1)+        inc (Plus n l)      = Plus (n + 1) l +mkType n = Type $ Max [ClosedLevel n | n > 0]+ getSort :: Type -> Sort getSort (El s _) = s  unEl :: Type -> Term unEl (El _ t) = t---- | Get the next higher sort.-sSuc :: Sort -> Sort-sSuc Prop                      = mkType 1-sSuc (Type (Lit (LitLevel _ n))) = mkType (n + 1)-sSuc Inf                       = Inf-sSuc s                         = Suc s--sLub :: Sort -> Sort -> Sort-sLub (Type (Lit (LitLevel _ 0))) Prop                      = Prop   -- (x:A) -> B prop if A type0, B prop [x:A]-sLub (Type (Lit (LitLevel _ n))) Prop                      = mkType n-sLub Prop (Type (Lit (LitLevel _ n)))                      = mkType n-sLub (Type (Lit (LitLevel _ n))) (Type (Lit (LitLevel _ m))) = mkType $ max n m-sLub (Suc a) (Suc b) = Suc (sLub a b)-sLub (Type (Lit (LitLevel _ n))) (Suc a)-  | n > 0     = sSuc (mkType (n - 1) `sLub` a)-  | otherwise = Suc a-sLub (Suc a) (Type (Lit (LitLevel _ n)))-  | n > 0     = sSuc (a `sLub` mkType (n - 1))-  | otherwise = Suc a-sLub Inf _ = Inf-sLub _ Inf = Inf-sLub s1 s2-    | s1 == s2	= s1-    | otherwise	= Lub s1 s2  impossibleTerm :: String -> Int -> Term impossibleTerm file line = Lit $ LitString noRange $ unlines
src/full/Agda/Syntax/Internal/Generic.hs view
@@ -27,6 +27,11 @@   traverseTermM f = traverse (traverseTermM f)   foldTerm f = foldMap (foldTerm f) +instance TermLike a => TermLike (Maybe a) where+  traverseTerm f = fmap (traverseTerm f)+  traverseTermM f = traverse (traverseTermM f)+  foldTerm f = foldMap (foldTerm f)+ instance (TermLike a, TermLike b) => TermLike (a, b) where   traverseTerm f (x, y) = (traverseTerm f x, traverseTerm f y)   traverseTermM f (x, y) = (,) <$> traverseTermM f x <*> traverseTermM f y@@ -39,40 +44,72 @@  instance TermLike Term where   traverseTerm f t = case t of-    Var i xs -> f $ Var i $ traverseTerm f xs-    Def c xs -> f $ Def c $ traverseTerm f xs-    Con c xs -> f $ Con c $ traverseTerm f xs-    Lam h b  -> f $ Lam h $ traverseTerm f b-    Pi a b   -> f $ uncurry Pi $ traverseTerm f (a, b)-    Fun a b  -> f $ uncurry Fun $ traverseTerm f (a, b)-    MetaV m xs -> f $ MetaV m $ traverseTerm f xs-    Lit _    -> f t-    Sort _   -> f t-    DontCare -> f t+    Var i xs    -> f $ Var i $ traverseTerm f xs+    Def c xs    -> f $ Def c $ traverseTerm f xs+    Con c xs    -> f $ Con c $ traverseTerm f xs+    Lam h b     -> f $ Lam h $ traverseTerm f b+    Pi a b      -> f $ uncurry Pi $ traverseTerm f (a, b)+    MetaV m xs  -> f $ MetaV m $ traverseTerm f xs+    Level l     -> f $ Level $ traverseTerm f l+    Lit _       -> f t+    Sort _      -> f t+    DontCare mv -> f $ DontCare $ traverseTerm f mv    traverseTermM f t = case t of-    Var i xs -> f =<< Var i <$> traverseTermM f xs-    Def c xs -> f =<< Def c <$> traverseTermM f xs-    Con c xs -> f =<< Con c <$> traverseTermM f xs-    Lam h b  -> f =<< Lam h <$> traverseTermM f b-    Pi a b   -> f =<< uncurry Pi <$> traverseTermM f (a, b)-    Fun a b  -> f =<< uncurry Fun <$> traverseTermM f (a, b)-    MetaV m xs -> f =<< MetaV m <$> traverseTermM f xs-    Lit _    -> f t-    Sort _   -> f t-    DontCare -> f t+    Var i xs    -> f =<< Var i <$> traverseTermM f xs+    Def c xs    -> f =<< Def c <$> traverseTermM f xs+    Con c xs    -> f =<< Con c <$> traverseTermM f xs+    Lam h b     -> f =<< Lam h <$> traverseTermM f b+    Pi a b      -> f =<< uncurry Pi <$> traverseTermM f (a, b)+    MetaV m xs  -> f =<< MetaV m <$> traverseTermM f xs+    Level l     -> f =<< Level <$> traverseTermM f l+    Lit _       -> f t+    Sort _      -> f t+    DontCare mv -> f =<< DontCare <$> traverseTermM f mv    foldTerm f t = f t `mappend` case t of-    Var i xs   -> foldTerm f xs-    Def c xs   -> foldTerm f xs-    Con c xs   -> foldTerm f xs-    Lam h b    -> foldTerm f b-    Pi a b     -> foldTerm f (a, b)-    Fun a b    -> foldTerm f (a, b)-    MetaV m xs -> foldTerm f xs-    Lit _      -> mempty-    Sort _     -> mempty-    DontCare   -> mempty+    Var i xs    -> foldTerm f xs+    Def c xs    -> foldTerm f xs+    Con c xs    -> foldTerm f xs+    Lam h b     -> foldTerm f b+    Pi a b      -> foldTerm f (a, b)+    MetaV m xs  -> foldTerm f xs+    Level l     -> foldTerm f l+    Lit _       -> mempty+    Sort _      -> mempty+    DontCare mv -> foldTerm f mv++instance TermLike Level where+  traverseTerm f  (Max as) = Max $ traverseTerm f as+  traverseTermM f (Max as) = Max <$> traverseTermM f as+  foldTerm f      (Max as) = foldTerm f as++instance TermLike PlusLevel where+  traverseTerm f l = case l of+    ClosedLevel{} -> l+    Plus n l      -> Plus n $ traverseTerm f l+  traverseTermM f l = case l of+    ClosedLevel{} -> return l+    Plus n l      -> Plus n <$> traverseTermM f l+  foldTerm f ClosedLevel{} = mempty+  foldTerm f (Plus _ l)    = foldTerm f l++instance TermLike LevelAtom where+  traverseTerm f l = case l of+    MetaLevel m vs   -> MetaLevel m $ traverseTerm f vs+    NeutralLevel v   -> NeutralLevel $ traverseTerm f v+    BlockedLevel m v -> BlockedLevel m $ traverseTerm f v+    UnreducedLevel v -> UnreducedLevel $ traverseTerm f v+  traverseTermM f l = case l of+    MetaLevel m vs   -> MetaLevel m <$> traverseTermM f vs+    NeutralLevel v   -> NeutralLevel <$> traverseTermM f v+    BlockedLevel m v -> BlockedLevel m <$> traverseTermM f v+    UnreducedLevel v -> UnreducedLevel <$> traverseTermM f v+  foldTerm f l = case l of+    MetaLevel m vs   -> foldTerm f vs+    NeutralLevel v   -> foldTerm f v+    BlockedLevel _ v -> foldTerm f v+    UnreducedLevel v -> foldTerm f v  instance TermLike Type where   traverseTerm f (El s t) = El s $ traverseTerm f t
src/full/Agda/Syntax/Literal.hs view
@@ -6,7 +6,6 @@ import Agda.Syntax.Abstract.Name  data Literal = LitInt    Range Integer-             | LitLevel  Range Integer 	     | LitFloat  Range Double 	     | LitString Range String 	     | LitChar   Range Char@@ -14,7 +13,6 @@   deriving (Typeable, Data, Show)  instance Eq Literal where-  LitLevel _ n  == LitLevel _ m  = n == m   LitInt _ n    == LitInt _ m    = n == m   LitFloat _ x  == LitFloat _ y  = x == y   LitString _ s == LitString _ t = s == t@@ -23,13 +21,10 @@   _             == _             = False  instance Ord Literal where-  LitLevel _ n  `compare` LitLevel _ m  = n `compare` m   LitInt _ n    `compare` LitInt _ m    = n `compare` m   LitFloat _ x  `compare` LitFloat _ y  = x `compare` y   LitString _ s `compare` LitString _ t = s `compare` t   LitChar _ c   `compare` LitChar _ d   = c `compare` d-  compare LitLevel{}    _ = LT-  compare _ LitLevel{} = GT   compare LitInt{}    _ = LT   compare _ LitInt{} = GT   compare LitFloat{}  _ = LT@@ -40,7 +35,6 @@   compare _ LitQName{}  = GT  instance HasRange Literal where-  getRange (LitLevel  r _) = r   getRange (LitInt    r _) = r   getRange (LitFloat  r _) = r   getRange (LitString r _) = r@@ -48,7 +42,6 @@   getRange (LitQName  r _) = r  instance SetRange Literal where-  setRange r (LitLevel  _ x) = LitLevel  r x   setRange r (LitInt    _ x) = LitInt    r x   setRange r (LitFloat  _ x) = LitFloat  r x   setRange r (LitString _ x) = LitString r x@@ -56,7 +49,6 @@   setRange r (LitQName  _ x) = LitQName  r x  instance KillRange Literal where-  killRange (LitLevel  r x) = LitLevel  (killRange r) x   killRange (LitInt    r x) = LitInt    (killRange r) x   killRange (LitFloat  r x) = LitFloat  (killRange r) x   killRange (LitString r x) = LitString (killRange r) x
src/full/Agda/Syntax/Notation.hs view
@@ -48,6 +48,10 @@              | IdPart String   deriving (Data, Typeable, Show, Eq) +-- | Get a flat list of identifier parts of a notation.+stringParts :: Notation -> [String]+stringParts gs = [ x | IdPart x <- gs ]+ -- | Target argument position of a part (Nothing if it is not a hole) holeTarget (BindHole n) = Just n holeTarget (NormalHole n) = Just n
src/full/Agda/Syntax/Parser/Alex.hs view
@@ -6,7 +6,7 @@     ( -- * Alex requirements       AlexInput(..)     , alexInputPrevChar-    , alexGetChar+    , alexGetChar, alexGetByte       -- * Lex actions     , LexAction, LexPredicate     , (.&&.), (.||.), not'@@ -16,7 +16,9 @@     )     where +import Control.Arrow import Control.Monad.State+import Data.Word  import Agda.Syntax.Position import Agda.Syntax.Parser.Monad@@ -36,6 +38,8 @@ alexInputPrevChar = lexPrevChar  -- | Lex a character. No surprises.+--+-- This function is used by Alex 2. alexGetChar :: AlexInput -> Maybe (Char, AlexInput) alexGetChar (AlexInput { lexInput = []  }) = Nothing alexGetChar (AlexInput { lexInput = c:s, lexPos = p }) =@@ -45,6 +49,15 @@ 		 , lexPrevChar	= c 		 } 	 )++-- | A variant of 'alexGetChar'.+--+-- This function is used by Alex 3.+alexGetByte :: AlexInput -> Maybe (Word8, AlexInput)+alexGetByte ai =+  -- Note that we ensure that every character presented to Alex fits+  -- in seven bits.+  (fromIntegral . fromEnum *** id) <$> alexGetChar ai  {--------------------------------------------------------------------------     Monad operations
src/full/Agda/Syntax/Parser/LexActions.hs view
@@ -75,6 +75,8 @@ postToken :: Token -> Token postToken (TokId (r, "\x03bb")) = TokSymbol SymLambda r postToken (TokId (r, "\x2192")) = TokSymbol SymArrow r+postToken (TokId (r, "\x2983")) = TokSymbol SymDoubleOpenBrace r+postToken (TokId (r, "\x2984")) = TokSymbol SymDoubleCloseBrace r postToken (TokId (r, "\x2200")) = TokKeyword KwForall r postToken (TokId (r, s))   | set == "Set" && all isSub n = TokSetN (r, readSubscript n)@@ -93,13 +95,13 @@ 	c:s'	-> inp' { lexInput    = s' 			, lexPrevChar = c 			}-	[]	-> __IMPOSSIBLE__+	[]	-> inp' { lexInput = [] }   -- we do get empty tokens moving between states --- | Alex can't handle unicode characters. To solve this we translate all---   Unicode (non-ASCII) identifiers to @z@, all Unicode operator---   characters to @+@, and all whitespace characters (except for @\t@---   and @\n@) to ' '. It is important that there aren't any keywords---   containing @z@, @+@ or @ @.+-- | Alex 2 can't handle unicode characters. To solve this we+--   translate all Unicode (non-ASCII) identifiers to @z@, all Unicode+--   operator characters to @+@, and all whitespace characters (except+--   for @\t@ and @\n@) to ' '. It is important that there aren't any+--   keywords containing @z@, @+@ or @ @. foolAlex :: AlexInput -> AlexInput foolAlex inp = inp { lexInput = map fool $ lexInput inp }     where
src/full/Agda/Syntax/Parser/LexActions.hs-boot view
@@ -27,4 +27,3 @@ followedBy    :: Char -> LexPredicate eof           :: LexPredicate inState       :: LexState -> LexPredicate-
src/full/Agda/Syntax/Parser/Lexer.x view
@@ -1,5 +1,6 @@ { {-# OPTIONS_GHC -fno-warn-deprecated-flags #-}+{-# LANGUAGE BangPatterns #-} {-| The lexer is generated by Alex (<http://www.haskell.org/alex>) and is an     adaptation of GHC's lexer. The main lexing function 'lexer' is called by     the "Agda.Syntax.Parser.Parser" to get the next token from the input.@@ -56,10 +57,11 @@ tokens :-  -- Lexing literate files-<tex>	 $white_nonl* \\ "begin{code}" $white_nonl* $ { end_ }-<tex>	 .* $		            { withInterval TokTeX }-<tex>	 .+		            { withInterval TokTeX }+<tex> $white_nonl* \\ "begin{code}" $white_nonl* $ { end_ }+<tex> .+ / { keepComments } { withInterval TokTeX }+<tex>	 .+		            ; <tex>    \n                         ;+<tex> () / { eof } { end_ } <bol_,layout_>   \\ "end{code}" / { inState code } { begin_ tex }   -- \end{code} should only be recognized if the bottom of the stack is <code>@@ -79,7 +81,9 @@ <pragma_>   "COMPILED_DATA"	{ keyword KwCOMPILED_DATA } <pragma_>   "COMPILED_TYPE"	{ keyword KwCOMPILED_TYPE } <pragma_>   "COMPILED"	        { keyword KwCOMPILED }-<pragma_>   "COMPILED_EPIC" { keyword KwCOMPILED_EPIC }+<pragma_>   "COMPILED_EPIC"     { keyword KwCOMPILED_EPIC }+<pragma_>   "COMPILED_JS"       { keyword KwCOMPILED_JS }+<pragma_>   "STATIC"            { keyword KwSTATIC } <pragma_>   "IMPORT"	        { keyword KwIMPORT } <pragma_>   "IMPOSSIBLE"	{ keyword KwIMPOSSIBLE } <pragma_>   "ETA"               { keyword KwETA }@@ -150,6 +154,8 @@ <0,code> Set @number	{ withInterval' (read . drop 3) TokSetN } <0,code> quoteGoal	{ keyword KwQuoteGoal } <0,code> quote		{ keyword KwQuote }+<0,code> quoteTerm	{ keyword KwQuoteTerm }+<0,code> unquote	{ keyword KwUnquote } <0,code> syntax         { keyword KwSyntax }  -- The parser is responsible to put the lexer in the imp_dir_ state when it@@ -166,6 +172,7 @@  -- Special symbols <0,code> "..."		{ symbol SymEllipsis }+<0,code> ".."		{ symbol SymDotDot } <0,code> "."		{ symbol SymDot } <0,code> ";"		{ symbol SymSemi } <0,code> ":"		{ symbol SymColon }@@ -178,6 +185,14 @@ <0,code> "->"		{ symbol SymArrow } <0,code> "\"		{ symbol SymLambda } <0,code> "@"		{ symbol SymAs }+<0,code> "{{" /[^!]		{ symbol SymDoubleOpenBrace }+-- We don't lex '}}' into a SymDoubleCloseBrace. Instead, we lex it as+-- two SymCloseBrace's. When the parser is looking for a double+-- closing brace, it will also accept two SymCloseBrace's, after+-- verifying that they are immediately next to each other.+-- This trick allows us to keep "record { a = record {}}" working+-- properly.+-- <0,code> "}}"		{ symbol SymDoubleCloseBrace } <0,code> "{"		{ symbol SymOpenBrace }	    -- you can't use braces for layout <0,code> "}"		{ symbol SymCloseBrace } 
src/full/Agda/Syntax/Parser/Parser.y view
@@ -1,6 +1,7 @@ { {-# OPTIONS_GHC -fno-warn-incomplete-patterns                 -fno-warn-deprecated-flags #-}+{-# LANGUAGE BangPatterns #-} {-| The parser is generated by Happy (<http://www.haskell.org/happy>). -} module Agda.Syntax.Parser.Parser (@@ -33,7 +34,6 @@ import Agda.Utils.Monad import Agda.Utils.QuickCheck import Agda.Utils.TestHelpers- }  %name tokensParser Tokens@@ -89,14 +89,19 @@     'COMPILED_DATA' { TokKeyword KwCOMPILED_DATA $$ }     'COMPILED_TYPE' { TokKeyword KwCOMPILED_TYPE $$ }     'COMPILED_EPIC' { TokKeyword KwCOMPILED_EPIC $$ }+    'COMPILED_JS'   { TokKeyword KwCOMPILED_JS $$ }+    'STATIC'        { TokKeyword KwSTATIC $$ }     'quoteGoal'     { TokKeyword KwQuoteGoal $$ }     'quote'         { TokKeyword KwQuote $$ }+    'quoteTerm'     { TokKeyword KwQuoteTerm $$ }+    'unquote'       { TokKeyword KwUnquote $$ }      setN	{ TokSetN $$ }     tex		{ TokTeX $$ }     comment	{ TokComment $$ }      '...'	{ TokSymbol SymEllipsis $$ }+    '..'	{ TokSymbol SymDotDot $$ }     '.'		{ TokSymbol SymDot $$ }     ';'		{ TokSymbol SymSemi $$ }     ':'		{ TokSymbol SymColon $$ }@@ -109,6 +114,8 @@     '|'		{ TokSymbol SymBar $$ }     '('		{ TokSymbol SymOpenParen $$ }     ')'		{ TokSymbol SymCloseParen $$ }+    '{{'	{ TokSymbol SymDoubleOpenBrace $$ }+    '}}'	{ TokSymbol SymDoubleCloseBrace $$ }     '{'		{ TokSymbol SymOpenBrace $$ }     '}'		{ TokSymbol SymCloseBrace $$ }     vopen	{ TokSymbol SymOpenVirtualBrace $$ }@@ -179,16 +186,21 @@     | 'COMPILED_DATA'{ TokKeyword KwCOMPILED_DATA $1 }     | 'COMPILED_TYPE'{ TokKeyword KwCOMPILED_TYPE $1 }     | 'COMPILED_EPIC'{ TokKeyword KwCOMPILED_EPIC $1 }+    | 'COMPILED_JS'  { TokKeyword KwCOMPILED_JS $1 }+    | 'STATIC'       { TokKeyword KwSTATIC $1 }     | 'IMPOSSIBLE'    { TokKeyword KwIMPOSSIBLE $1 }     | 'ETA'           { TokKeyword KwETA $1 }     | 'quoteGoal'     { TokKeyword KwQuoteGoal $1 }     | 'quote'         { TokKeyword KwQuote $1 }+    | 'quoteTerm'     { TokKeyword KwQuoteTerm $1 }+    | 'unquote'       { TokKeyword KwUnquote $1 }      | setN	    { TokSetN $1 }     | tex	    { TokTeX $1 }     | comment	    { TokComment $1 }      | '...'	    { TokSymbol SymEllipsis $1 }+    | '..'	    { TokSymbol SymDotDot $1 }     | '.'	    { TokSymbol SymDot $1 }     | ';'	    { TokSymbol SymSemi $1 }     | ':'	    { TokSymbol SymColon $1 }@@ -201,6 +213,8 @@     | '|'	    { TokSymbol SymBar $1 }     | '('	    { TokSymbol SymOpenParen $1 }     | ')'	    { TokSymbol SymCloseParen $1 }+    | '{{'	    { TokSymbol SymDoubleOpenBrace $1 }+    | '}}'	    { TokSymbol SymDoubleCloseBrace $1 }     | '{'	    { TokSymbol SymOpenBrace $1 }     | '}'	    { TokSymbol SymCloseBrace $1 }     | vopen	    { TokSymbol SymOpenVirtualBrace $1 }@@ -216,22 +230,14 @@     | literal	    { TokLiteral $1 }  {---------------------------------------------------------------------------    TeX- --------------------------------------------------------------------------}--TeX :: { () }-TeX : {- empty -} { () }-    | tex TeX	  { () }--{--------------------------------------------------------------------------     Top level  --------------------------------------------------------------------------}  File :: { ([Pragma], [Declaration]) }-File : File1 TeX  { $1 }+File : File1 { $1 } -File1 : TopLevel		 { ([], $1) }-      | TeX TopLevelPragma File1 { let (ps,m) = $3 in ($2 : ps, m) }+File1 : TopLevel             { ([], $1) }+      | TopLevelPragma File1 { let (ps,m) = $2 in ($1 : ps, m) }   {--------------------------------------------------------------------------@@ -258,8 +264,8 @@ -- brace, so we don't have to distinguish between the two semi colons. You can't -- use a virtual semi colon in a block started by a concrete brace, but this is -- simply because the lexer will not generate virtual semis in this case.-semi : ';'	  { $1 }-     | TeX vsemi  { $2 }+semi : ';'    { $1 }+     | vsemi  { $1 }   -- Enter the 'imp_dir' lex state, where we can parse the keywords 'using',@@ -274,7 +280,7 @@ -- An integer. Used in fixity declarations. Int :: { Integer } Int : literal	{% case $1 of {-		     LitInt _ n	-> return $ fromIntegral n;+		     LitInt _ n	-> return n; 		     _		-> fail $ "Expected integer" 		   } 		}@@ -295,6 +301,23 @@     : Id SpaceIds { $1 : $2 }     | Id	  { [$1] } +-- When looking for a double closed brace, we accept either a single token '}}'+-- (which is what the unicode character "RIGHT WHITE CURLY BRACKET" is+-- postprocessed into in LexActions.hs), but also two consecutive tokens '}'+-- (which a string '}}' is lexed to).  This small hack allows us to keep+-- "record { a = record { }}" working. In the second case, we check that the two+-- tokens '}' are immediately consecutive.+DoubleCloseBrace :: { Range }+DoubleCloseBrace+  : '}}' { getRange $1 }+  | '}' '}' {%+      if posPos (fromJust (rEnd (getRange $2))) -+	 posPos (fromJust (rStart (getRange $1))) > 2+      then parseErrorAt (fromJust (rStart (getRange $2)))+	 "Expecting '}}', found separated '}'s."+      else return $ fuseRange (getRange $1) (getRange ($2))+    }+ {- UNUSED -- Space separated list of one or more identifiers, some of which may -- be surrounded by braces.@@ -302,6 +325,8 @@ HiddenIds     : Id HiddenIds               { defaultArg $1 : $2 }     | Id	                 { [defaultArg $1] }+    | '{{' SpaceIds DoubleCloseBrace HiddenIds { map (Arg Instance Relevant) $2 ++ $4 }+    | '{{' SpaceIds DoubleCloseBrace         { map (Arg Instance Relevant) $2 }     | '{' SpaceIds '}' HiddenIds { map (Arg Hidden Relevant) $2 ++ $4 }     | '{' SpaceIds '}'           { map (Arg Hidden Relevant) $2 } -}@@ -322,12 +347,20 @@ -- be surrounded by braces or dotted. ArgIds :: { [Arg Name] } ArgIds-    : MaybeDottedId ArgIds          { $1 : $2 }-    | MaybeDottedId                 { [$1] }-    | '{' MaybeDottedIds '}' ArgIds { map hide $2 ++ $4 }-    | '{' MaybeDottedIds '}'        { map hide $2 }-    | '.' '{' SpaceIds '}' ArgIds   { map (Arg Hidden Irrelevant) $3 ++ $5 }-    | '.' '{' SpaceIds '}'          { map (Arg Hidden Irrelevant) $3 }+    : MaybeDottedId ArgIds            { $1 : $2 }+    | MaybeDottedId                   { [$1] }+    | '{{' MaybeDottedIds DoubleCloseBrace ArgIds { map makeInstance $2 ++ $4 }+    | '{{' MaybeDottedIds DoubleCloseBrace        { map makeInstance $2 }+    | '{' MaybeDottedIds '}' ArgIds   { map hide $2 ++ $4 }+    | '{' MaybeDottedIds '}'          { map hide $2 }+    | '.' '{' SpaceIds '}' ArgIds     { map (Arg Hidden Irrelevant) $3 ++ $5 }+    | '.' '{' SpaceIds '}'            { map (Arg Hidden Irrelevant) $3 }+    | '.' '{{' SpaceIds DoubleCloseBrace ArgIds   { map (Arg Instance Irrelevant) $3 ++ $5 }+    | '.' '{{' SpaceIds DoubleCloseBrace          { map (Arg Instance Irrelevant) $3 }+    | '..' '{' SpaceIds '}' ArgIds    { map (Arg Hidden NonStrict) $3 ++ $5 }+    | '..' '{' SpaceIds '}'           { map (Arg Hidden NonStrict) $3 }+    | '..' '{{' SpaceIds DoubleCloseBrace ArgIds  { map (Arg Instance NonStrict) $3 ++ $5 }+    | '..' '{{' SpaceIds DoubleCloseBrace         { map (Arg Instance NonStrict) $3 }  QId :: { QName } QId : q_id  {% mkQName $1 }@@ -344,7 +377,16 @@ BId : Id    { $1 }     | '_'   { Name (getRange $1) [Hole] } +{- UNUSED+-- A binding variable. Can be '_'+MaybeDottedBId :: { (Relevance, Name) }+MaybeDottedBId+    : BId        { (Relevant  , $1) }+    | '.' BId    { (Irrelevant, $2) }+    | '..' BId   { (NonStrict, $2) }+-} + -- Space separated list of binding identifiers. Used in fixity -- declarations infixl 100 + - SpaceBIds :: { [Name] }@@ -352,12 +394,34 @@     : BId SpaceBIds { $1 : $2 }     | BId	    { [$1] } +{- DOES PRODUCE REDUCE/REDUCE CONFLICTS! -- Space-separated list of binding identifiers. Used in dependent -- function spaces: (x y z : Nat) -> ... -- (Used to be comma-separated; hence the name) -- QUESTION: Should this be replaced by SpaceBIds above?+--CommaBIds :: { [(Relevance,Name)] } CommaBIds :: { [Name] }-CommaBIds : Application {%+CommaBIds+    : CommaBIds BId { $1 ++ [$2] }  -- SWITCHING DOES NOT HELP+    | BId	    { [$1] }+-}++-- Space-separated list of binding identifiers. Used in dependent+-- function spaces: (x y z : Nat) -> ...+-- (Used to be comma-separated; hence the name)+-- QUESTION: Should this be replaced by SpaceBIds above?+-- Andreas, 2011-04-07 the trick avoids reduce/reduce conflicts+-- when parsing  (x y z : A) -> B+-- at point (x y  it is not clear whether x y is an application or+-- a variable list. We could be parsing (x y z) -> B+-- with ((x y) z) being a type.+CommaBIds :: { [Name] }+CommaBIds : CommaBIdAndAbsurds {+    case $1 of+      Left ns -> ns+      Right _ -> fail $ "expected sequence of bound identifiers, not absurd pattern"+    }+{-     let getName (Ident (QName x)) = Just x 	getName (Underscore r _)  = Just (Name r [Hole]) 	getName _		  = Nothing@@ -365,6 +429,25 @@     case partition isJust $ map getName $1 of 	(good, []) -> return $ map fromJust good 	_	   -> fail $ "expected sequence of bound identifiers"+-}++CommaBIdAndAbsurds :: { Either [Name] [Expr] }+CommaBIdAndAbsurds : Application {%+    let getName (Ident (QName x)) = Just x+	getName (Underscore r _)  = Just (Name r [Hole])+	getName _		  = Nothing++        containsAbsurd (Absurd _) = True+        containsAbsurd (HiddenArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (InstanceArg _ (Named _ e)) = containsAbsurd e+        containsAbsurd (Paren _ expr)    = containsAbsurd expr+        containsAbsurd (RawApp _ exprs)    = any containsAbsurd exprs+        containsAbsurd _          = False+    in+    if isJust $ find containsAbsurd $1 then return $ Right $1 else+    case partition isJust $ map getName $1 of+	(good, []) -> return $ Left $ map fromJust good+	_	   -> fail $ "expected sequence of bound identifiers"     }  @@ -427,9 +510,15 @@ -- Level 2: Lambdas and lets Expr2     : '\\' LamBindings Expr	   { Lam (fuseRange $1 $3) $2 $3 }-    | '\\' AbsurdLamBindings       { let (bs, h) = $2; r = fuseRange $1 bs in-                                     if null bs then AbsurdLam r h else-                                     Lam r bs (AbsurdLam r h)+    | '\\'  '{' LamClauses '}'     { ExtendedLam (fuseRange $1 (fuseRange $2 $4)) (reverse $3) }+    | '\\' AbsurdLamBindings       {% case $2 of+                                       Left (bs, h) -> if null bs then return $ AbsurdLam r h else+                                                       return $ Lam r bs (AbsurdLam r h)+                                                         where r = fuseRange $1 bs+    				       Right es -> do -- it is of the form @\ { p1 ... () }@+                                                     p <- exprToLHS (RawApp (getRange es) es);+                                                     return $ ExtendedLam (fuseRange $1 es)+                                                                     [(p [] [], AbsurdRHS, NoWhere)]                                    }     | 'let' Declarations 'in' Expr { Let (fuseRange $1 $4) $2 $4 }     | Expr3			   { $1 }@@ -441,7 +530,12 @@     | Expr3 Application3 { $1 : $2 }  -- Level 3: Atoms-Expr3+Expr3Curly+    : '{' Expr '}'			{ HiddenArg (fuseRange $1 $3) (unnamed $2) }+    | '{' Id '=' Expr '}'		{ HiddenArg (fuseRange $1 $5) (named (show $2) $4) }+    | '{' '}'				{ let r = fuseRange $1 $2 in HiddenArg r $ unnamed $ Absurd r }++Expr3NoCurly     : QId				{ Ident $1 }     | literal				{ Lit $1 }     | '?'				{ QuestionMark (getRange $1) Nothing }@@ -449,16 +543,22 @@     | 'Prop'				{ Prop (getRange $1) }     | 'Set'				{ Set (getRange $1) }     | 'quote'                           { Quote (getRange $1) }+    | 'quoteTerm'                       { QuoteTerm (getRange $1) }+    | 'unquote'                         { Unquote (getRange $1) }     | setN				{ SetN (getRange (fst $1)) (snd $1) }-    | '{' Expr '}'			{ HiddenArg (fuseRange $1 $3) (unnamed $2) }-    | '{' Id '=' Expr '}'		{ HiddenArg (fuseRange $1 $5) (named (show $2) $4) }+    | '{{' Expr DoubleCloseBrace			{ InstanceArg (fuseRange $1 $3) (unnamed $2) }+    | '{{' Id '=' Expr DoubleCloseBrace		{ InstanceArg (fuseRange $1 $5) (named (show $2) $4) }     | '(' Expr ')'			{ Paren (fuseRange $1 $3) $2 }-    | '{' '}'				{ let r = fuseRange $1 $2 in HiddenArg r $ unnamed $ Absurd r }     | '(' ')'				{ Absurd (fuseRange $1 $2) }+    | '{{' DoubleCloseBrace             { let r = fuseRange $1 $2 in InstanceArg r $ unnamed $ Absurd r }     | Id '@' Expr3			{ As (fuseRange $1 $3) $1 $3 }     | '.' Expr3				{ Dot (fuseRange $1 $2) $2 }     | 'record' '{' FieldAssignments '}' { Rec (getRange ($1,$4)) $3 }+    | 'record' Expr3NoCurly '{' FieldAssignments '}' { RecUpdate (getRange ($1,$5)) $2 $4 } +Expr3+    : Expr3Curly			{ $1 }+    | Expr3NoCurly			{ $1 }  FieldAssignments :: { [(Name, Expr)] } FieldAssignments@@ -490,22 +590,20 @@     | TypedBindings		   { [$1] }  --- A typed binding is either (x1 .. xn:A;..;y1 .. ym:B) or {x1 .. xn:A;..;y1 .. ym:B}.+-- A typed binding is either (x1 .. xn : A) or   {y1 .. ym : B}+-- Andreas, 2011-04-07: or  .(x1 .. xn : A) or  .{y1 .. ym : B}+-- Andreas, 2011-04-27: or ..(x1 .. xn : A) or ..{y1 .. ym : B} TypedBindings :: { TypedBindings } TypedBindings-    : '(' TBinds ')' { TypedBindings (fuseRange $1 $3) (Arg NotHidden Relevant $2) }-    | '{' TBinds '}' { TypedBindings (fuseRange $1 $3) (Arg Hidden    Relevant $2) }----- A semicolon separated list of TypedBindings-TBinds :: { [TypedBinding] }-TBinds : TBind		   { [$1] }-       | TBind ';' TBinds2 { $1 : $3 }--TBinds2 :: { [TypedBinding] }-TBinds2 : TBinds	   { $1 }-	| Expr ';' TBinds2 { TNoBind $1 : $3 }-	| Expr		   { [TNoBind $1] }+    : '.' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         Irrelevant $3) }+    | '.' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            Irrelevant $3) }+    | '.' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance Irrelevant $3) }+    | '..' '(' TBind ')'    { TypedBindings (fuseRange $2 $4) (Arg NotHidden         NonStrict $3) }+    | '..' '{' TBind '}'    { TypedBindings (fuseRange $2 $4) (Arg Hidden            NonStrict $3) }+    | '..' '{{' TBind DoubleCloseBrace  { TypedBindings (fuseRange $1 $3) (Arg Instance NonStrict $3) }+    | '(' TBind ')'        { TypedBindings (fuseRange $1 $3) (Arg NotHidden         Relevant $2) }+    | '{{' TBind DoubleCloseBrace      { TypedBindings (fuseRange $1 $3) (Arg Instance Relevant $2) }+    | '{' TBind '}'        { TypedBindings (fuseRange $1 $3) (Arg Hidden            Relevant $2) }   -- x1 .. xn:A@@ -517,30 +615,79 @@ LamBindings :: { [LamBinding] } LamBindings   : LamBinds '->' {%-      case last $1 of-        Left _  -> parseError "Absurd lambda cannot have a body."-        _       -> return [ b | Right b <- $1 ]+      case reverse $1 of+        Left _ : _ -> parseError "Absurd lambda cannot have a body."+	_ : _      -> return [ b | Right b <- $1 ]+        []         -> parsePanic "Empty LamBinds"       } -AbsurdLamBindings :: { ([LamBinding], Hiding) }+AbsurdLamBindings :: { Either ([LamBinding], Hiding) [Expr] } AbsurdLamBindings-  : LamBinds {%-    case last $1 of-      Right _ -> parseError "Missing body for lambda"-      Left h  -> return ([ b | Right b <- init $1], h)+  : LamBindsAbsurd {%+    case $1 of+      Left lb -> case reverse lb of+                   Right _ : _ -> parseError "Missing body for lambda"+                   Left h  : _ -> return $ Left ([ b | Right b <- init lb], h)+                   _           -> parsePanic "Empty LamBindsAbsurd"+      Right es -> return $ Right es     }  -- absurd lambda is represented by Left hiding LamBinds :: { [Either Hiding LamBinding] } LamBinds-  : DomainFreeBinding LamBinds	{ map Right $1 ++ $2 }-  | TypedBindings LamBinds	{ Right (DomainFull $1) : $2 }-  | DomainFreeBinding		{ map Right $1 }+  : DomainFreeBinding LamBinds  { map Right $1 ++ $2 }+  | TypedBindings LamBinds      { Right (DomainFull $1) : $2 }+  | DomainFreeBinding           { map Right $1 }   | TypedBindings		{ [Right $ DomainFull $1] }   | '(' ')'                     { [Left NotHidden] }   | '{' '}'                     { [Left Hidden] }+  | '{{' DoubleCloseBrace       { [Left Instance] } +-- Like LamBinds, but could also parse an absurd LHS of an extended lambda @{ p1 ... () }@+LamBindsAbsurd :: { Either [Either Hiding LamBinding] [Expr] }+LamBindsAbsurd+  : DomainFreeBinding LamBinds	{ Left $ map Right $1 ++ $2 }+  | TypedBindings LamBinds	{ Left $ Right (DomainFull $1) : $2 }+  | DomainFreeBindingAbsurd   	{ case $1 of+                                    Left lb -> Left $ map Right lb+                                    Right es -> Right es }+  | TypedBindings		{ Left [Right $ DomainFull $1] }+  | '(' ')'                     { Left [Left NotHidden] }+  | '{' '}'                     { Left [Left Hidden] }+  | '{{' DoubleCloseBrace       { Left [Left Instance] } +-- FNF, 2011-05-05: No where clauses in extended lambdas for now+NonAbsurdLamClause :: { (LHS,RHS,WhereClause) }+NonAbsurdLamClause+  : Application3 '->' Expr {% do+      p <- exprToLHS (RawApp (getRange $1) $1) ;+      return (p [] [], RHS $3, NoWhere)+	}++AbsurdLamClause :: { (LHS,RHS,WhereClause) }+AbsurdLamClause+-- FNF, 2011-05-09: By being more liberal here, we avoid shift/reduce and reduce/reduce errors.+-- Later stages such as scope checking will complain if we let something through which we should not+  : Application {% do+      p <- exprToLHS (RawApp (getRange $1) $1);+      return (p [] [], AbsurdRHS, NoWhere)+	}++LamClause :: { (LHS,RHS,WhereClause) }+LamClause+  : NonAbsurdLamClause { $1 }+  | AbsurdLamClause { $1 }++-- Parses all extended lambda clauses except for a single absurd clause, which is taken care of+-- in AbsurdLambda+LamClauses :: { [(LHS,RHS,WhereClause)] }+LamClauses+   : LamClauses semi LamClause { $3 : $1 }+   | AbsurdLamClause semi LamClause { [$3, $1] }+   | NonAbsurdLamClause { [$1] }+--   | {- empty -} { [] }++ ForallBindings :: { [LamBinding] } ForallBindings   : TypedUntypedBindings1 '->' { $1 }@@ -564,10 +711,37 @@ -- A domain free binding is either x or {x1 .. xn} DomainFreeBinding :: { [LamBinding] } DomainFreeBinding-    : BId		{ [DomainFree NotHidden $ mkBoundName_ $1]  }-    | '{' CommaBIds '}' { map (DomainFree Hidden . mkBoundName_) $2 }+  : DomainFreeBindingAbsurd { case $1 of+                             Left lbs -> lbs+                             Right _ -> fail "expected sequence of bound identifiers, not absurd pattern"+                          }+{-    : BId		{ [DomainFree NotHidden Relevant $ mkBoundName_ $1]  }+    | '.' BId		{ [DomainFree NotHidden Irrelevant $ mkBoundName_ $2]  }+    | '..' BId		{ [DomainFree NotHidden NonStrict $ mkBoundName_ $2]  }+    | '{' CommaBIds '}' { map (DomainFree Hidden Relevant . mkBoundName_) $2 }+    | '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance Relevant . mkBoundName_) $2 }+    | '.' '{' CommaBIds '}' { map (DomainFree Hidden Irrelevant . mkBoundName_) $3 }+    | '.' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance Irrelevant . mkBoundName_) $3 }+    | '..' '{' CommaBIds '}' { map (DomainFree Hidden NonStrict . mkBoundName_) $3 }+    | '..' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance NonStrict . mkBoundName_) $3 }+    | '..' '{{' CommaBIds DoubleCloseBrace { map (DomainFree Instance NonStrict . mkBoundName_) $3 }+  -} +-- A domain free binding is either x or {x1 .. xn}+DomainFreeBindingAbsurd :: { Either [LamBinding] [Expr]}+DomainFreeBindingAbsurd+    : BId		{ Left [DomainFree NotHidden Relevant $ mkBoundName_ $1]  }+    | '.' BId		{ Left [DomainFree NotHidden Irrelevant $ mkBoundName_ $2]  }+    | '..' BId		{ Left [DomainFree NotHidden NonStrict $ mkBoundName_ $2]  }+    | '{' CommaBIdAndAbsurds '}'+         { either (Left . map (DomainFree Hidden Relevant . mkBoundName_)) Right $2 }+    | '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree Instance Relevant . mkBoundName_) $2 }+    | '.' '{' CommaBIds '}' { Left $ map (DomainFree Hidden Irrelevant . mkBoundName_) $3 }+    | '.' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree Instance Irrelevant . mkBoundName_) $3 }+    | '..' '{' CommaBIds '}' { Left $ map (DomainFree Hidden NonStrict . mkBoundName_) $3 }+    | '..' '{{' CommaBIds DoubleCloseBrace { Left $ map (DomainFree Instance NonStrict . mkBoundName_) $3 } + {--------------------------------------------------------------------------     Modules and imports  --------------------------------------------------------------------------}@@ -687,7 +861,9 @@     | Fields        { $1   }     | FunClause	    { [$1] }     | Data	    { [$1] }+    | DataSig	    { [$1] }  -- lone data type signature in mutual block     | Record	    { [$1] }+    | RecordSig	    { [$1] }  -- lone record signature in mutual block     | Infix	    { [$1] }     | Mutual	    { [$1] }     | Abstract	    { [$1] }@@ -738,17 +914,35 @@ -- Data declaration. Can be local. Data :: { Declaration } Data : 'data' Id TypedUntypedBindings ':' Expr 'where'-	    Constructors	{ Data (getRange ($1, $6, $7)) Inductive $2 (map addType $3) $5 $7 }+            Constructors	{ Data (getRange ($1, $6, $7)) Inductive $2 $3 (Just $5) $7 }      | 'codata' Id TypedUntypedBindings ':' Expr 'where'-	    Constructors	{ Data (getRange ($1, $6, $7)) CoInductive $2 (map addType $3) $5 $7 }+            Constructors	{ Data (getRange ($1, $6, $7)) CoInductive $2 $3 (Just $5) $7 } +  -- New cases when we already had a DataSig.  Then one can omit the sort.+     | 'data' Id TypedUntypedBindings 'where'+	    Constructors	{ Data (getRange ($1, $4, $5)) Inductive $2 $3 Nothing $5 }+     | 'codata' Id TypedUntypedBindings 'where'+	    Constructors	{ Data (getRange ($1, $4, $5)) CoInductive $2 $3 Nothing $5 } +-- Data type signature. Found in mutual blocks.+DataSig :: { Declaration }+DataSig : 'data' Id TypedUntypedBindings ':' Expr+  { DataSig (fuseRange $1 $5) Inductive $2 $3 $5 }+ -- Record declarations. Record :: { Declaration } Record : 'record' Id TypedUntypedBindings ':' Expr 'where' 	    RecordDeclarations-         { Record (getRange ($1, $6, $7)) $2 (fst $7) (map addType $3) $5 (snd $7) }+         { Record (getRange ($1, $6, $7)) $2 (fst $7) $3 (Just $5) (snd $7) }+       | 'record' Id TypedUntypedBindings 'where'+	    RecordDeclarations+         { Record (getRange ($1, $4, $5)) $2 (fst $5) $3 Nothing (snd $5) } +-- Record type signature. In mutual blocks.+RecordSig :: { Declaration }+RecordSig : 'record' Id TypedUntypedBindings ':' Expr+  { RecordSig (fuseRange $1 $5) $2 $3 $5 }+ -- Declaration of record constructor name. RecordConstructorName :: { Name } RecordConstructorName : 'constructor' Id { $2 }@@ -827,22 +1021,38 @@     } in     case es of     { []  -> Open r m dir-    ; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2) []-                           (RawApp (fuseRange m es) (Ident m : es)) DoOpen dir+	; _   -> Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)+			     (SectionApp (getRange (m , es)) [] (RawApp (fuseRange m es) (Ident m : es)))+			     DoOpen dir                        ]     }   }+  | 'open' ModuleName '{{' '...' DoubleCloseBrace ImportDirective {+    let r = getRange ($1, $2, $3, $4) in+    Private r [ ModuleMacro r (noName $ beginningOf $ getRange $2)+    	      	(RecordModuleIFS r $2) DoOpen $6+        ]+  }  OpenArgs :: { [Expr] } OpenArgs : {- empty -}    { [] }          | Expr3 OpenArgs { $1 : $2 } +ModuleApplication :: { [TypedBindings] -> Parser ModuleApplication }+ModuleApplication : ModuleName '{{' '...' DoubleCloseBrace { (\ts ->+		    if null ts then return $ RecordModuleIFS (getRange ($1, $4)) $1+		    else parseError "No bindings allowed for record module with non-canonical implicits" )+		    }+		  | ModuleName OpenArgs {+		    (\ts -> return $ SectionApp (getRange ($1, $2)) ts (RawApp (fuseRange $1 $2) (Ident $1 : $2)) ) }++ -- Module instantiation ModuleMacro :: { Declaration }-ModuleMacro : 'module' Id TypedUntypedBindings '=' Expr ImportDirective-		    { ModuleMacro (getRange ($1, $5, $6)) $2 (map addType $3) $5 DontOpen $6 }-	    | 'open' 'module' Id TypedUntypedBindings '=' Expr ImportDirective-		    { ModuleMacro (getRange ($1, $6, $7)) $3 (map addType $4) $6 DoOpen $7 }+ModuleMacro : 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective+		    {% do {ma <- $5 (map addType $3); return $ ModuleMacro (getRange ($1, ma, $6)) $2 ma DontOpen $6 } }+	    | 'open' 'module' Id TypedUntypedBindings '=' ModuleApplication ImportDirective+		    {% do {ma <- $6 (map addType $4); return $ ModuleMacro (getRange ($1, ma, $7)) $3 ma DoOpen $7 } }  -- Import Import :: { Declaration }@@ -858,9 +1068,9 @@  -- The top-level consist of a bunch of import and open followed by a top-level module. TopLevel :: { [Declaration] }-TopLevel : TeX TopModule       { [$2] }-	 | TeX Import TopLevel { $2 : $3 }-	 | TeX Open   TopLevel { $2 : $3 }+TopLevel : TopModule       { [$1] }+	 | Import TopLevel { $1 : $2 }+	 | Open   TopLevel { $1 : $2 }  -- The top-level module can have a qualified name. TopModule :: { Declaration }@@ -881,6 +1091,8 @@   | CompiledDataPragma { $1 }   | CompiledTypePragma { $1 }   | CompiledEpicPragma { $1 }+  | CompiledJSPragma   { $1 }+  | StaticPragma       { $1 }   | ImportPragma       { $1 }   | ImpossiblePragma   { $1 }   | RecordEtaPragma    { $1 }@@ -913,7 +1125,16 @@   : '{-#' 'COMPILED_EPIC' PragmaName PragmaStrings '#-}'     { CompiledEpicPragma (fuseRange $1 $5) $3 (unwords $4) } +CompiledJSPragma :: { Pragma }+CompiledJSPragma+  : '{-#' 'COMPILED_JS' PragmaName PragmaStrings '#-}'+    { CompiledJSPragma (fuseRange $1 $5) $3 (unwords $4) } +StaticPragma :: { Pragma }+StaticPragma+  : '{-#' 'STATIC' PragmaName '#-}'+    { StaticPragma (fuseRange $1 $4) $3 }+ RecordEtaPragma :: { Pragma } RecordEtaPragma   : '{-#' 'ETA' PragmaName '#-}'@@ -939,66 +1160,66 @@ -- for every signature. TypeSignatures :: { [TypeSignature] } TypeSignatures-    : TeX vopen TypeSignatures1 TeX close   { reverse $3 }+    : vopen TypeSignatures1 close   { reverse $2 }  -- Inside the layout block. TypeSignatures1 :: { [TypeSignature] } TypeSignatures1-    : TypeSignatures1 semi TeX TypeSigs { reverse $4 ++ $1 }-    | TeX TypeSigs			{ reverse $2 }+    : TypeSignatures1 semi TypeSigs { reverse $3 ++ $1 }+    | TypeSigs                      { reverse $1 }  -- A variant of TypeSignatures which allows the irrelevance annotation (dot). RelTypeSignatures :: { [TypeSignature] } RelTypeSignatures-    : TeX vopen RelTypeSignatures1 TeX close   { reverse $3 }+    : vopen RelTypeSignatures1 close   { reverse $2 }  -- Inside the layout block. RelTypeSignatures1 :: { [TypeSignature] } RelTypeSignatures1-    : RelTypeSignatures1 semi TeX RelTypeSigs { reverse $4 ++ $1 }-    | TeX RelTypeSigs			      { reverse $2 }+    : RelTypeSignatures1 semi RelTypeSigs { reverse $3 ++ $1 }+    | RelTypeSigs                         { reverse $1 }  -- A variant of TypeSignatures which uses ArgTypeSigs instead of -- TypeSigs. ArgTypeSignatures :: { [Arg TypeSignature] } ArgTypeSignatures-    : TeX vopen ArgTypeSignatures1 TeX close   { reverse $3 }+    : vopen ArgTypeSignatures1 close   { reverse $2 }  -- Inside the layout block. ArgTypeSignatures1 :: { [Arg TypeSignature] } ArgTypeSignatures1-    : ArgTypeSignatures1 semi TeX ArgTypeSigs { reverse $4 ++ $1 }-    | TeX ArgTypeSigs		              { reverse $2 }+    : ArgTypeSignatures1 semi ArgTypeSigs { reverse $3 ++ $1 }+    | ArgTypeSigs                         { reverse $1 }  -- Constructors are type signatures. But constructor lists can be empty. Constructors :: { [Constructor] } Constructors-    : TeX vopen TeX close { [] }-    | TypeSignatures	  { $1 }+    : vopen close    { [] }+    | TypeSignatures { $1 }  -- Record declarations, including an optional record constructor name. RecordDeclarations :: { (Maybe Name, [Declaration]) } RecordDeclarations-    : TeX vopen                                              TeX close { (Nothing, []) }-    | TeX vopen TeX RecordConstructorName                    TeX close { (Just $4, []) }-    | TeX vopen TeX RecordConstructorName semi Declarations1 TeX close { (Just $4, reverse $6) }-    | TeX vopen                                Declarations1 TeX close { (Nothing, reverse $3) }+    : vopen                                          close { (Nothing, []) }+    | vopen RecordConstructorName                    close { (Just $2, []) }+    | vopen RecordConstructorName semi Declarations1 close { (Just $2, reverse $4) }+    | vopen                            Declarations1 close { (Nothing, reverse $2) }  -- Arbitrary declarations Declarations :: { [Declaration] } Declarations-    : TeX vopen Declarations1 TeX close { reverse $3 }+    : vopen Declarations1 close { reverse $2 }  -- Arbitrary declarations Declarations0 :: { [Declaration] } Declarations0-    : TeX vopen TeX close  { [] }+    : vopen close  { [] }     | Declarations { $1 }  Declarations1 :: { [Declaration] } Declarations1-    : Declarations1 semi TeX Declaration { reverse $4 ++ $1 }-    | TeX Declaration			 { reverse $2 }+    : Declarations1 semi Declaration { reverse $3 ++ $1 }+    | Declaration                    { reverse $1 }   {@@ -1074,7 +1295,7 @@ -- | Converts lambda bindings to typed bindings. addType :: LamBinding -> TypedBindings addType (DomainFull b)	 = b-addType (DomainFree h x) = TypedBindings r $ Arg h Relevant [TBind r [x] $ Underscore r Nothing]+addType (DomainFree h rel x) = TypedBindings r $ Arg h rel $ TBind r [x] $ Underscore r Nothing   where r = getRange x  -- | Check that an import directive doesn't contain repeated names@@ -1163,11 +1384,18 @@ 	Dot r e			-> return $ DotP r e 	Lit l			-> return $ LitP l 	HiddenArg r e		-> HiddenP r <$> T.mapM exprToPattern e+	InstanceArg r e		-> InstanceP r <$> T.mapM exprToPattern e 	RawApp r es		-> RawAppP r <$> mapM exprToPattern es-	OpApp r x es		-> OpAppP r x <$> mapM exprToPattern es+	OpApp r x es		-> OpAppP r x <$> mapM opAppExprToPattern es 	_			->           let Just pos = rStart $ getRange e in           parseErrorAt pos $ "Not a valid pattern: " ++ show e++opAppExprToPattern :: OpApp Expr -> Parser Pattern+opAppExprToPattern (SyntaxBindingLambda _ _ _) = parseError "syntax binding lambda cannot appear in a pattern"+opAppExprToPattern (Ordinary e) = exprToPattern e++parsePanic s = parseError $ "Internal parser error: " ++ s ++ ". Please report this as a bug."  {--------------------------------------------------------------------------     Tests
src/full/Agda/Syntax/Parser/Tokens.hs view
@@ -18,8 +18,9 @@ 	| KwSet | KwProp | KwForall | KwRecord | KwConstructor | KwField 	| KwHiding | KwUsing | KwRenaming | KwTo | KwPublic 	| KwOPTIONS | KwBUILTIN | KwLINE-        | KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EPIC | KwIMPORT-        | KwIMPOSSIBLE | KwETA | KwQuoteGoal | KwQuote | KwSyntax+	| KwCOMPILED_DATA | KwCOMPILED_TYPE | KwCOMPILED | KwCOMPILED_EPIC | KwCOMPILED_JS+	| KwIMPORT | KwIMPOSSIBLE | KwETA | KwSTATIC+	| KwQuoteGoal | KwQuote | KwQuoteTerm | KwUnquote | KwSyntax     deriving (Eq, Show)  layoutKeywords :: [Keyword]@@ -31,9 +32,10 @@ 	| SymColon | SymArrow | SymEqual | SymLambda 	| SymUnderscore	| SymQuestionMark   | SymAs 	| SymOpenParen	      | SymCloseParen+	| SymDoubleOpenBrace  | SymDoubleCloseBrace 	| SymOpenBrace	      | SymCloseBrace 	| SymOpenVirtualBrace | SymCloseVirtualBrace-	| SymOpenPragma	      | SymClosePragma | SymEllipsis+	| SymOpenPragma	      | SymClosePragma | SymEllipsis | SymDotDot     deriving (Eq, Show)  data Token
src/full/Agda/Syntax/Position.hs view
@@ -305,7 +305,9 @@ fuseIntervals x y = Interval { iStart = head ps, iEnd = last ps }     where ps = sort [iStart x, iStart y, iEnd x, iEnd y] --- | Finds a range which covers the arguments.+-- | @fuseRanges r r'@ unions the ranges @r@ and @r'@.+--+--   Meaning it finds the least range @r0@ that covers @r@ and @r'@. fuseRanges :: Range -> Range -> Range fuseRanges (Range is) (Range js) = Range (helper is js)   where
src/full/Agda/Syntax/Scope/Base.hs view
@@ -1,9 +1,10 @@-{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables #-}+{-# LANGUAGE CPP, DeriveDataTypeable, GADTs, ScopedTypeVariables, TupleSections #-}  {-| This module defines the notion of a scope and operations on scopes. -} module Agda.Syntax.Scope.Base where +import Control.Arrow ((***), (&&&)) import Control.Applicative import Data.Generics (Typeable, Data) import Data.List@@ -20,6 +21,7 @@   (ImportDirective(..), UsingOrHiding(..), ImportedName(..), Renaming(..)) import qualified Agda.Utils.Map as Map import Agda.Utils.Tuple+import Agda.Utils.List  #include "../../undefined.h" import Agda.Utils.Impossible@@ -29,30 +31,27 @@ -- | A scope is a named collection of names partitioned into public and private --   names. data Scope = Scope-      { scopeName     :: A.ModuleName-      , scopeParents  :: [A.ModuleName]-      , scopePrivate  :: NameSpace-      , scopePublic   :: NameSpace-      , scopeImported :: NameSpace -- ^ public opened names-      , scopeImports  :: Map C.QName A.ModuleName+      { scopeName          :: A.ModuleName+      , scopeParents       :: [A.ModuleName]+      , scopeNameSpaces    :: [(NameSpaceId, NameSpace)]+      , scopeImports       :: Map C.QName A.ModuleName       }   deriving (Typeable, Data) -data NameSpaceId = PrivateNS | PublicNS | ImportedNS-  deriving (Typeable, Data, Eq)+data NameSpaceId = PrivateNS | PublicNS | ImportedNS | OnlyQualifiedNS+  deriving (Typeable, Data, Eq, Bounded, Enum)  localNameSpace :: Access -> NameSpaceId localNameSpace PublicAccess  = PublicNS localNameSpace PrivateAccess = PrivateNS+localNameSpace OnlyQualified = OnlyQualifiedNS -importedNameSpace :: Access -> NameSpaceId-importedNameSpace PublicAccess  = ImportedNS-importedNameSpace PrivateAccess = PrivateNS+nameSpaceAccess :: NameSpaceId -> Access+nameSpaceAccess PrivateNS = PrivateAccess+nameSpaceAccess _         = PublicAccess  scopeNameSpace :: NameSpaceId -> Scope -> NameSpace-scopeNameSpace PublicNS   = scopePublic-scopeNameSpace PrivateNS  = scopePrivate-scopeNameSpace ImportedNS = scopeImported+scopeNameSpace ns s = maybe __IMPOSSIBLE__ id $ lookup ns $ scopeNameSpaces s  -- | The complete information about the scope at a particular program point --   includes the scope stack, the local variables, and the context precedence.@@ -92,6 +91,9 @@   NameTag   -> nsNames   ModuleTag -> nsModules +instance KillRange ScopeInfo where+  killRange m = m+ instance InScope AbstractName where   inScopeTag = NameTag @@ -146,13 +148,11 @@ blockOfLines hd ss = hd : map ("  "++) ss  instance Show Scope where-  show (Scope { scopeName = name, scopeParents = parents, scopeImports = imps-              , scopePublic = pub, scopePrivate = pri, scopeImported = imp }) =+  show (scope @ Scope { scopeName = name, scopeParents = parents, scopeImports = imps }) =     unlines $       [ "* scope " ++ show name ] ++ ind (-         blockOfLines "public"   (lines $ show pub)-      ++ blockOfLines "imported" (lines $ show imp)-      ++ blockOfLines "private"  (lines $ show pri)+        concat [ blockOfLines (show nsid) (lines $ show $ scopeNameSpace nsid scope)+               | nsid <- [minBound..maxBound] ]       ++ blockOfLines "imports"  (case Map.keys imps of                                     [] -> []                                     ks -> [ show ks ]@@ -160,6 +160,13 @@       )     where ind = map ("  " ++) +instance Show NameSpaceId where+  show nsid = case nsid of+    PublicNS        -> "public"+    PrivateNS       -> "private"+    ImportedNS      -> "imported"+    OnlyQualifiedNS -> "only-qualified"+ instance Show NameSpace where   show (NameSpace names mods) =     unlines $@@ -185,7 +192,7 @@  -- * Operations on name and module maps. -mergeNames :: InScope a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a+mergeNames :: Eq a => ThingsInScope a -> ThingsInScope a -> ThingsInScope a mergeNames = Map.unionWith union  -- * Operations on name spaces@@ -227,12 +234,10 @@  -- | The empty scope. emptyScope :: Scope-emptyScope = Scope { scopeName	   = noModuleName-                   , scopeParents  = []-		   , scopePublic   = emptyNameSpace-		   , scopePrivate  = emptyNameSpace-                   , scopeImported = emptyNameSpace-                   , scopeImports  = Map.empty+emptyScope = Scope { scopeName	     = noModuleName+                   , scopeParents    = []+		   , scopeNameSpaces = [ (nsid, emptyNameSpace) | nsid <- [minBound..maxBound] ]+                   , scopeImports    = Map.empty 		   }  -- | The empty scope info.@@ -249,10 +254,7 @@ 	    (NameSpaceId -> ModulesInScope -> ModulesInScope) -> 	    Scope -> Scope mapScope fd fm s =-  s { scopePrivate  = mapNS PrivateNS  $ scopePrivate  s-    , scopePublic   = mapNS PublicNS   $ scopePublic   s-    , scopeImported = mapNS ImportedNS $ scopeImported s-    }+  s { scopeNameSpaces = [ (nsid, mapNS nsid ns) | (nsid, ns) <- scopeNameSpaces s ] }   where     mapNS acc = mapNameSpace (fd acc) (fm acc) @@ -263,21 +265,19 @@ mapScope_ fd fm = mapScope (const fd) (const fm)  -- | Map monadic functions over the names and modules in a scope.-mapScopeM :: Monad m =>+mapScopeM :: (Functor m, Monad m) =>   (NameSpaceId -> NamesInScope   -> m NamesInScope  ) ->   (NameSpaceId -> ModulesInScope -> m ModulesInScope) ->   Scope -> m Scope mapScopeM fd fm s = do-  pri <- mapNS PrivateNS  $ scopePrivate  s-  pub <- mapNS PublicNS   $ scopePublic   s-  imp <- mapNS ImportedNS $ scopeImported s-  return $ s { scopePrivate = pri, scopePublic = pub, scopeImported = imp }+  nss <- sequence [ (,) nsid <$> mapNS nsid ns | (nsid, ns) <- scopeNameSpaces s ]+  return $ s { scopeNameSpaces = nss }   where     mapNS acc = mapNameSpaceM (fd acc) (fm acc)  -- | Same as 'mapScopeM' but applies the same function to both the public and --   private name spaces.-mapScopeM_ :: Monad m =>+mapScopeM_ :: (Functor m, Monad m) =>   (NamesInScope   -> m NamesInScope  ) ->   (ModulesInScope -> m ModulesInScope) ->   Scope -> m Scope@@ -289,12 +289,15 @@ 	    (NameSpaceId -> ModulesInScope -> ModulesInScope -> ModulesInScope) -> 	    Scope -> Scope -> Scope zipScope fd fm s1 s2 =-  s1 { scopePrivate  = zipNS PrivateNS  (scopePrivate  s1) (scopePrivate  s2)-     , scopePublic   = zipNS PublicNS   (scopePublic   s1) (scopePublic   s2)-     , scopeImported = zipNS ImportedNS (scopeImported s1) (scopeImported s2)+  s1 { scopeNameSpaces = [ (nsid, zipNS nsid ns1 ns2)+                         | ((nsid, ns1), (nsid', ns2)) <- zipWith' (,) (scopeNameSpaces s1) (scopeNameSpaces s2)+                         , assert (nsid == nsid')+                         ]      , scopeImports  = Map.union (scopeImports s1) (scopeImports s2)      }   where+    assert True  = True+    assert False = __IMPOSSIBLE__     zipNS acc = zipNameSpace (fd acc) (fm acc)  -- | Same as 'zipScope' but applies the same function to both the public and@@ -311,20 +314,25 @@  -- | Return all names in a scope. allNamesInScope :: InScope a => Scope -> ThingsInScope a-allNamesInScope = namesInScope [scopePublic, scopeImported, scopePrivate]+allNamesInScope = namesInScope [minBound..maxBound] +allNamesInScope' :: InScope a => Scope -> ThingsInScope (a, Access)+allNamesInScope' s =+  foldr1 mergeNames [ map (, nameSpaceAccess ns) <$> namesInScope [ns] s+                    | ns <- [minBound..maxBound] ]+ -- | Returns the scope's non-private names. exportedNamesInScope :: InScope a => Scope -> ThingsInScope a-exportedNamesInScope = namesInScope [scopePublic, scopeImported]+exportedNamesInScope = namesInScope [PublicNS, ImportedNS, OnlyQualifiedNS] -namesInScope :: InScope a => [Scope -> NameSpace] -> Scope -> ThingsInScope a-namesInScope fs s =-  foldr1 mergeNames [ inNameSpace (f s) | f <- fs ]+namesInScope :: InScope a => [NameSpaceId] -> Scope -> ThingsInScope a+namesInScope ids s =+  foldr1 mergeNames [ inNameSpace (scopeNameSpace nsid s) | nsid <- ids ]  allThingsInScope :: Scope -> NameSpace-allThingsInScope = thingsInScope [scopePublic, scopeImported, scopePrivate]+allThingsInScope = thingsInScope [minBound..maxBound] -thingsInScope :: [Scope -> NameSpace] -> Scope -> NameSpace+thingsInScope :: [NameSpaceId] -> Scope -> NameSpace thingsInScope fs s =   NameSpace { nsNames   = namesInScope fs s             , nsModules = namesInScope fs s@@ -345,15 +353,13 @@ -- | Move all names in a scope to the given name space (except never move from --   Imported to Public). setScopeAccess :: NameSpaceId -> Scope -> Scope-setScopeAccess a s = s { scopeImported = ns ImportedNS-		       , scopePrivate  = ns PrivateNS-                       , scopePublic   = ns PublicNS+setScopeAccess a s = s { scopeNameSpaces = [ (nsid, ns nsid) | (nsid, _) <- scopeNameSpaces s ] 		       }   where     zero  = emptyNameSpace     one   = allThingsInScope s-    imp   = thingsInScope [scopeImported] s-    noimp = thingsInScope [scopePublic, scopePrivate] s+    imp   = thingsInScope [ImportedNS] s+    noimp = thingsInScope [PublicNS, PrivateNS, OnlyQualifiedNS] s      ns b = case (a, b) of       (PublicNS, PublicNS)   -> noimp@@ -361,12 +367,17 @@       _ | a == b             -> one         | otherwise          -> zero +setNameSpace :: NameSpaceId -> NameSpace -> Scope -> Scope+setNameSpace nsid ns s =+  s { scopeNameSpaces = [ (nsid', if nsid == nsid' then ns else ns')+                        | (nsid', ns') <- scopeNameSpaces s ] }+ -- | Add names to a scope. addNamesToScope :: NameSpaceId -> C.Name -> [AbstractName] -> Scope -> Scope addNamesToScope acc x ys s = mergeScope s s1   where-    s1 = setScopeAccess acc $ emptyScope-	 { scopePublic = emptyNameSpace { nsNames = Map.singleton x ys } }+    s1 = setScopeAccess acc $ setNameSpace PublicNS ns emptyScope+    ns = emptyNameSpace { nsNames = Map.singleton x ys }  -- | Add a name to a scope. addNameToScope :: NameSpaceId -> C.Name -> AbstractName -> Scope -> Scope@@ -376,8 +387,8 @@ addModuleToScope :: NameSpaceId -> C.Name -> AbstractModule -> Scope -> Scope addModuleToScope acc x m s = mergeScope s s1   where-    s1 = setScopeAccess acc $ emptyScope-	 { scopePublic = emptyNameSpace { nsModules = Map.singleton x [m] } }+    s1 = setScopeAccess acc $ setNameSpace PublicNS ns emptyScope+    ns = emptyNameSpace { nsModules = Map.singleton x [m] }  -- | Apply an 'ImportDirective' to a scope. applyImportDirective :: ImportDirective -> Scope -> Scope@@ -431,8 +442,12 @@  -- | Restrict the private name space of a scope restrictPrivate :: Scope -> Scope-restrictPrivate s = s { scopePrivate = emptyNameSpace, scopeImports = Map.empty }+restrictPrivate s = setNameSpace PrivateNS emptyNameSpace $ s { scopeImports = Map.empty } +-- | Remove names that can only be used qualified (when opening a scope)+removeOnlyQualified :: Scope -> Scope+removeOnlyQualified s = setNameSpace OnlyQualifiedNS emptyNameSpace s+ -- | Get the public parts of the public modules of a scope publicModules :: ScopeInfo -> Map A.ModuleName Scope publicModules scope = Map.filterWithKey (\m _ -> reachable m) allMods@@ -460,8 +475,11 @@     current = this : parents  -- | Look up a name in the scope-scopeLookup :: forall a. InScope a => C.QName -> ScopeInfo -> [a]-scopeLookup q scope = nub $ findName q root ++ imports+scopeLookup :: InScope a => C.QName -> ScopeInfo -> [a]+scopeLookup q scope = map fst $ scopeLookup' q scope++scopeLookup' :: forall a. InScope a => C.QName -> ScopeInfo -> [(a, Access)]+scopeLookup' q scope = nubBy ((==) `on` fst) $ findName q root ++ imports   where     this    :: A.ModuleName     this    = scopeCurrent scope@@ -480,30 +498,29 @@       (m, r) <- splitName q       return (C.Qual x m, r) -    imported :: C.QName -> [A.ModuleName]-    imported q = maybe [] (:[]) $ Map.lookup q $ scopeImports root+    imported :: C.QName -> [(A.ModuleName, Access)]+    imported q = maybe [] ((:[]) . (, PublicAccess)) $ Map.lookup q $ scopeImports root -    topImports :: [a]+    topImports :: [(a, Access)]     topImports = case tag of       NameTag   -> []-      ModuleTag -> map AbsModule (imported q)+      ModuleTag -> map (AbsModule *** id) (imported q) -    imports :: [a]+    imports :: [(a, Access)]     imports = topImports ++ do       (m, x) <- splitName q-      m <- imported m-      x <- findName x (restrictPrivate $ moduleScope m)-      return x+      m <- fst <$> imported m+      findName x (restrictPrivate $ moduleScope m)      moduleScope :: A.ModuleName -> Scope     moduleScope name = case Map.lookup name (scopeModules scope) of       Nothing -> __IMPOSSIBLE__       Just s  -> s -    lookupName :: forall a. InScope a => C.Name -> Scope -> [a]-    lookupName x s = maybe [] id $ Map.lookup x (allNamesInScope s)+    lookupName :: forall a. InScope a => C.Name -> Scope -> [(a, Access)]+    lookupName x s = maybe [] id $ Map.lookup x (allNamesInScope' s) -    findName :: forall a. InScope a => C.QName -> Scope -> [a]+    findName :: forall a. InScope a => C.QName -> Scope -> [(a, Access)]     findName (C.QName x)  s = lookupName x s     findName (C.Qual x q) s = do         m <- nub $ mods ++ defs -- record types will appear bot as a mod and a def@@ -511,9 +528,9 @@         findName q (restrictPrivate s')       where         mods, defs :: [ModuleName]-        mods = amodName <$> lookupName x s+        mods = amodName . fst <$> lookupName x s         -- Qualified constructors are qualified by their datatype rather than a module-        defs = mnameFromList . qnameToList . anameName <$> lookupName x s+        defs = mnameFromList . qnameToList . anameName . fst <$> lookupName x s  -- * Inverse look-up 
src/full/Agda/Syntax/Scope/Monad.hs view
@@ -128,15 +128,11 @@ modifyCurrentNameSpace :: NameSpaceId -> (NameSpace -> NameSpace) -> ScopeM () modifyCurrentNameSpace acc f = modifyCurrentScope action   where-    action s = s { scopePublic   = pub $ scopePublic  s-                 , scopePrivate  = pri $ scopePrivate s-                 , scopeImported = imp $ scopeImported s-                 }-    (pub, pri, imp) = case acc of-      PublicNS   -> (f, id, id)-      PrivateNS  -> (id, f, id)-      ImportedNS -> (id, id, f)+    action s = s { scopeNameSpaces = [ (nsid, f' nsid ns) | (nsid, ns) <- scopeNameSpaces s ] } +    f' a | a == acc  = f+         | otherwise = id+ setContextPrecedence :: Precedence -> ScopeM () setContextPrecedence p = modifyScopeInfo $ \s -> s { scopePrecedence = p } @@ -187,7 +183,7 @@ -- * Resolving names  data ResolvedName = VarName A.Name-                  | DefinedName AbstractName+                  | DefinedName Access AbstractName                   | ConstructorName [AbstractName]                   | UnknownName   deriving (Show)@@ -199,13 +195,13 @@   let vars = map (C.QName -*- id) $ scopeLocals scope   case lookup x vars of     Just y  -> return $ VarName $ y { nameConcrete = unqualify x }-    Nothing -> case scopeLookup x scope of+    Nothing -> case scopeLookup' x scope of       [] -> return UnknownName-      ds | all ((==ConName) . anameKind) ds ->+      ds | all ((==ConName) . anameKind . fst) ds ->         return $ ConstructorName-               $ map (\d -> updateConcreteName d $ unqualify x) ds-      [d] -> return $ DefinedName $ updateConcreteName d (unqualify x)-      ds  -> typeError $ AmbiguousName x (map anameName ds)+               $ map (\ (d, _) -> updateConcreteName d $ unqualify x) ds+      [(d, a)] -> return $ DefinedName a $ updateConcreteName d (unqualify x)+      ds  -> typeError $ AmbiguousName x (map (anameName . fst) ds)   where   updateConcreteName :: AbstractName -> C.Name -> AbstractName   updateConcreteName d@(AbsName { anameName = an@(A.QName { qnameName = qn }) }) x =@@ -226,7 +222,7 @@   r <- resolveName x   case r of     VarName y          -> return $ nameFixity y-    DefinedName d      -> return $ nameFixity $ qnameName $ anameName d+    DefinedName _ d    -> return $ nameFixity $ qnameName $ anameName d     ConstructorName ds       | null fs        -> __IMPOSSIBLE__       | allEqual fs    -> return $ head fs@@ -248,7 +244,7 @@ bindName acc kind x y = do   r  <- resolveName (C.QName x)   ys <- case r of-    DefinedName d      -> typeError $ ClashingDefinition (C.QName x) $ anameName d+    DefinedName _ d    -> typeError $ ClashingDefinition (C.QName x) $ anameName d     VarName z          -> typeError $ ClashingDefinition (C.QName x) $ A.qualify (mnameFromList []) z     ConstructorName [] -> __IMPOSSIBLE__     ConstructorName ds@@ -301,14 +297,16 @@     old  = scopeName s      copyM :: NameSpaceId -> ModulesInScope -> WSM ModulesInScope-    copyM ImportedNS ms = return ms-    copyM PrivateNS  _  = return Map.empty-    copyM PublicNS   ms = traverse (mapM $ onMod renMod) ms+    copyM ImportedNS      ms = return ms+    copyM PrivateNS       _  = return Map.empty+    copyM PublicNS        ms = traverse (mapM $ onMod renMod) ms+    copyM OnlyQualifiedNS ms = traverse (mapM $ onMod renMod) ms      copyD :: NameSpaceId -> NamesInScope -> WSM NamesInScope-    copyD ImportedNS ds = return ds-    copyD PrivateNS  _  = return Map.empty-    copyD PublicNS   ds = traverse (mapM $ onName renName) ds+    copyD ImportedNS      ds = return ds+    copyD PrivateNS       _  = return Map.empty+    copyD PublicNS        ds = traverse (mapM $ onName renName) ds+    copyD OnlyQualifiedNS ds = traverse (mapM $ onName renName) ds      onMod f m = do       x <- f $ amodName m@@ -404,7 +402,7 @@   m <- amodName <$> resolveModule cm   let ns = namespace current m   s <- setScopeAccess ns <$>-        (applyImportDirectiveM cm dir . restrictPrivate =<< getNamedScope m)+        (applyImportDirectiveM cm dir . removeOnlyQualified . restrictPrivate =<< getNamedScope m)   checkForClashes (scopeNameSpace ns s)   modifyCurrentScope (`mergeScope` s)   where
src/full/Agda/Syntax/Strict.hs view
@@ -19,16 +19,16 @@  instance Strict Term where     force t = case t of-	Var _ ts   -> force ts-	Def _ ts   -> force ts-	Con _ ts   -> force ts-	Lam _ t    -> force t-	Lit _	   -> 0-	Pi a b	   -> force (a,b)-	Fun a b    -> force (a,b)-	Sort s	   -> force s-	MetaV _ ts -> force ts-        DontCare   -> 0+	Var _ ts    -> force ts+	Def _ ts    -> force ts+	Con _ ts    -> force ts+	Lam _ t     -> force t+	Lit _	    -> 0+        Level l     -> force l+	Pi a b	    -> force (a,b)+	Sort s	    -> force s+	MetaV _ ts  -> force ts+        DontCare mt -> force mt  instance Strict Type where     force (El s t) = force (s,t)@@ -37,16 +37,26 @@     force s = case s of 	Type n     -> force n 	Prop       -> 0-	Lub s1 s2  -> force (s1,s2)-	Suc s      -> force s-	MetaS _ as -> force as         Inf        -> 0         DLub s1 s2 -> force (s1, s2) +instance Strict Level where+  force (Max as) = force as++instance Strict PlusLevel where+  force ClosedLevel{} = 0+  force (Plus _ l) = force l++instance Strict LevelAtom where+  force l = case l of+    MetaLevel _ vs   -> force vs+    NeutralLevel v   -> force v+    BlockedLevel _ v -> force v+    UnreducedLevel v -> force v+ instance Strict ClauseBody where     force (Body t)   = force t     force (Bind b)   = force b-    force (NoBind b) = force b     force  NoBody    = 0  instance Strict C.Expr where@@ -70,8 +80,11 @@ instance Strict a => Strict [a] where     force = sum . map force +instance Strict a => Strict (Maybe a) where+    force = maybe 0 force+ instance Strict a => Strict (Abs a) where-    force = force . absBody+    force = force . unAbs  instance Strict Token where   -- TODO: This is just a dummy instance. Why can't we just use the
src/full/Agda/Syntax/Translation/AbstractToConcrete.hs view
@@ -1,6 +1,5 @@ {-# LANGUAGE CPP, PatternGuards, MultiParamTypeClasses, FunctionalDependencies,-             TypeSynonymInstances, FlexibleInstances, UndecidableInstances,-             OverlappingInstances+             TypeSynonymInstances, FlexibleInstances, UndecidableInstances   #-}  {-| The translation of abstract syntax to concrete syntax has two purposes.@@ -19,7 +18,8 @@     , withScope     , makeEnv     , abstractToConcrete-    , AbsToCon, TypeAndDef, DontTouchMe, Env+    , AbsToCon, DontTouchMe, Env+    , noTakenNames     ) where  import Control.Applicative@@ -43,7 +43,7 @@ import Agda.Syntax.Scope.Base  import Agda.TypeChecking.Monad.State (getScope)-import Agda.TypeChecking.Monad.Base  (MonadTCM)+import Agda.TypeChecking.Monad.Base  (TCM)  import Agda.Utils.Maybe import Agda.Utils.Monad hiding (bracket)@@ -84,12 +84,15 @@ withScope :: ScopeInfo -> AbsToCon a -> AbsToCon a withScope scope = local $ \e -> e { currentScope = scope } +noTakenNames :: AbsToCon a -> AbsToCon a+noTakenNames = local $ \e -> e { takenNames = Set.empty }+ -- The Monad --------------------------------------------------------------  -- | We make the translation monadic for modularity purposes. type AbsToCon = Reader Env -runAbsToCon :: MonadTCM tcm => AbsToCon a -> tcm a+runAbsToCon :: AbsToCon a -> TCM a runAbsToCon m = do   scope <- getScope   return $ runReader m (makeEnv scope)@@ -97,7 +100,7 @@ abstractToConcrete :: ToConcrete a c => Env -> a -> c abstractToConcrete flags a = runReader (toConcrete a) flags -abstractToConcreteCtx :: (MonadTCM tcm, ToConcrete a c) => Precedence -> a -> tcm c+abstractToConcreteCtx :: ToConcrete a c => Precedence -> a -> TCM c abstractToConcreteCtx ctx x = do   scope <- getScope   let scope' = scope { scopePrecedence = ctx }@@ -105,7 +108,7 @@   where     scope = (currentScope defaultEnv) { scopePrecedence = ctx } -abstractToConcrete_ :: (MonadTCM tcm, ToConcrete a c) => a -> tcm c+abstractToConcrete_ :: ToConcrete a c => a -> TCM c abstractToConcrete_ x = do   scope <- getScope   return $ abstractToConcrete (makeEnv scope) x@@ -136,7 +139,9 @@     do  scope <- asks currentScope         case inverseScopeLookupName x scope of             Just y  -> return y-            Nothing -> return $ C.Qual (C.Name noRange [Id ""]) $ qnameToConcrete x+            Nothing+              | show (qnameToConcrete x) == "_" -> return $ qnameToConcrete x+              | otherwise -> return $ C.Qual (C.Name noRange [Id ""]) $ qnameToConcrete x                 -- this is what happens for names that are not in scope (private names)  lookupModule :: A.ModuleName -> AbsToCon C.QName@@ -166,7 +171,9 @@  -- | General bracketing function. bracket' ::    (e -> e)             -- ^ the bracketing function-            -> (Precedence -> Bool) -- ^ do we need brackets+            -> (Precedence -> Bool) -- ^ Should we bracket things+                                    --   which have the given+                                    --   precedence?             -> e -> AbsToCon e bracket' paren needParen e =     do  p <- currentPrecedence@@ -263,6 +270,7 @@  instance ToConcrete a c => ToConcrete (Arg a) (Arg c) where     toConcrete (Arg h@Hidden    r x) = Arg h r <$> toConcreteCtx TopCtx x+    toConcrete (Arg h@Instance  r x) = Arg h r <$> toConcreteCtx TopCtx x     toConcrete (Arg h@NotHidden r x) = Arg h r <$> toConcrete x      bindToConcrete (Arg h r x) ret = bindToConcreteCtx (hiddenArgumentCtx h) x $ ret . Arg h r@@ -327,14 +335,14 @@         bracket lamBrackets         $ case lamView e of             (bs, e) ->-                bindToConcrete bs $ \bs -> do+                bindToConcrete (map makeDomainFree bs) $ \bs -> do                     e  <- toConcreteCtx TopCtx e                     return $ C.Lam (getRange i) bs e         where-            lamView (A.Lam _ b@(A.DomainFree _ _) e) =+            lamView (A.Lam _ b@(A.DomainFree _ _ _) e) =                 case lamView e of                     ([], e)                        -> ([b], e)-                    (bs@(A.DomainFree _ _ : _), e) -> (b:bs, e)+                    (bs@(A.DomainFree _ _ _ : _), e) -> (b:bs, e)                     _                              -> ([b], e)             lamView (A.Lam _ b@(A.DomainFull _) e) =                 case lamView e of@@ -342,7 +350,14 @@                     (bs@(A.DomainFull _ : _), e)   -> (b:bs, e)                     _                              -> ([b], e)             lamView e = ([], e)-+    toConcrete (A.ExtendedLam i di qname cs) = do+          decls <- toConcrete cs+          let removeApp (C.RawAppP r (lam:es)) = C.RawAppP r es+              removeApp (C.AppP p np) = namedThing $ unArg np+              removeApp _ = __IMPOSSIBLE__+          let decl2clause (C.FunClause lhs rhs wh) = (lhs {lhsOriginalPattern = removeApp $ lhsOriginalPattern lhs},rhs,wh)+              decl2clause _ = __IMPOSSIBLE__+          return $ C.ExtendedLam (getRange i) (map decl2clause $ concat decls)     toConcrete (A.Pi _ [] e) = toConcrete e     toConcrete t@(A.Pi i _ _)  = case piTel t of       (tel, e) ->@@ -356,12 +371,14 @@      toConcrete (A.Fun i a b) =         bracket piBrackets-        $ do a' <- toConcreteCtx FunctionSpaceDomainCtx a+        $ do a' <- toConcreteCtx (if irr then DotPatternCtx else FunctionSpaceDomainCtx) a              b' <- toConcreteCtx TopCtx b              return $ C.Fun (getRange i) (addDot a' $ mkArg a') b'         where-            addDot a e = if (argRelevance a == Irrelevant) then Dot (getRange a) e else e+            irr        = argRelevance a == Irrelevant+            addDot a e = if irr then Dot (getRange a) e else e             mkArg (Arg Hidden    r e) = HiddenArg (getRange e) (unnamed e)+            mkArg (Arg Instance  r e) = InstanceArg (getRange e) (unnamed e)             mkArg (Arg NotHidden r e) = e      toConcrete (A.Set i 0)  = return $ C.Set (getRange i)@@ -380,6 +397,13 @@         es <- toConcreteCtx TopCtx es         return $ C.Rec (getRange i) $ zip xs es +    toConcrete (A.RecUpdate i e fs) =+      bracket appBrackets $ do+        let (xs, es) = unzip fs+        e <- toConcrete e+        es <- toConcreteCtx TopCtx es+        return $ C.RecUpdate (getRange i) e $ zip xs es+     toConcrete (A.ETel tel) = do       tel <- toConcrete tel       return $ C.ETel tel@@ -392,14 +416,31 @@             e' <- toConcrete e             return $ C.QuoteGoal (getRange i) x' e'     toConcrete (A.Quote i) = return $ C.Quote (getRange i)+    toConcrete (A.QuoteTerm i) = return $ C.QuoteTerm (getRange i)+    toConcrete (A.Unquote i) = return $ C.Unquote (getRange i) +    -- Andreas, 2010-10-05 print irrelevant things as ordinary things+    toConcrete (A.DontCare e) = toConcrete e+--    toConcrete (A.DontCare e) = C.DontCare <$> toConcreteCtx TopCtx e+{-     -- Andreas, 2010-09-21 abuse C.Underscore to print irrelevant things     toConcrete (A.DontCare) = return $ C.Underscore noRange Nothing+-} +makeDomainFree :: A.LamBinding -> A.LamBinding+makeDomainFree b@(A.DomainFull (A.TypedBindings r (Arg h rel (A.TBind _ [x] t)))) =+  case unScope t of+    A.Underscore MetaInfo{metaNumber = Nothing} -> A.DomainFree h rel x+    _ -> b+  where+    unScope (A.ScopedExpr _ e) = unScope e+    unScope e = e+makeDomainFree b = b+ -- Binder instances -------------------------------------------------------  instance ToConcrete A.LamBinding C.LamBinding where-    bindToConcrete (A.DomainFree h x) ret = bindToConcrete x $ ret . C.DomainFree h . mkBoundName_+    bindToConcrete (A.DomainFree h rel x) ret = bindToConcrete x $ ret . C.DomainFree h rel . mkBoundName_     bindToConcrete (A.DomainFull b)   ret = bindToConcrete b $ ret . C.DomainFull  instance ToConcrete A.TypedBindings C.TypedBindings where@@ -424,18 +465,15 @@                 , C.FunClause (C.LHS (C.IdentP $ C.QName x) [] [] [])                               e C.NoWhere                 ]-    bindToConcrete (LetApply i x tel y es _ _) ret = do+    bindToConcrete (LetApply i x modapp _ _) ret = do       x' <- unqualify <$> toConcrete x-      y' <- toConcrete y-      bindToConcrete tel $ \tel -> do-      es' <- toConcrete es-      let r = fuseRange y' es'+      modapp <- toConcrete modapp+      let r = getRange modapp           open = maybe DontOpen id $ minfoOpenShort i           dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i       -- This is no use since toAbstract LetDefs is in localToAbstract.       local (openModule' x dir id) $-        ret [ C.ModuleMacro (getRange i) x' tel-                  (foldl (C.App r) (C.Ident y') es') open dir ]+        ret [ C.ModuleMacro (getRange i) x' modapp open dir ]     bindToConcrete (LetOpen i x) ret = do       x' <- toConcrete x       let dir = maybe defaultImportDir id $ minfoDirective i@@ -447,12 +485,21 @@ instance ToConcrete AsWhereDecls WhereClause where   bindToConcrete (AsWhereDecls []) ret = ret C.NoWhere   bindToConcrete (AsWhereDecls ds@[Section _ am _ _]) ret = do-    ds' <- toConcrete ds+    ds' <- declsToConcrete ds     cm  <- unqualify <$> lookupModule am     let wh' = (if isNoName cm then AnyWhere else SomeWhere cm) $ ds'     local (openModule' am defaultImportDir id) $ ret wh'-  bindToConcrete (AsWhereDecls ds) ret = ret . AnyWhere =<< toConcrete ds+  bindToConcrete (AsWhereDecls ds) ret =+    ret . AnyWhere =<< declsToConcrete ds +mergeSigAndDef :: [C.Declaration] -> [C.Declaration]+mergeSigAndDef (C.RecordSig _ x bs e : C.Record r y c _ Nothing fs : ds)+  | x == y = C.Record r y c bs (Just e) fs : mergeSigAndDef ds+mergeSigAndDef (C.DataSig _ _ x bs e : C.Data r i y _ Nothing cs : ds)+  | x == y = C.Data r i y bs (Just e) cs : mergeSigAndDef ds+mergeSigAndDef (d : ds) = d : mergeSigAndDef ds+mergeSigAndDef [] = []+ openModule' :: A.ModuleName -> ImportDirective -> (Scope -> Scope) -> Env -> Env openModule' x dir restrict env = env{currentScope = sInfo{scopeModules = mods'}}   where sInfo = currentScope env@@ -467,8 +514,8 @@  -- Declaration instances -------------------------------------------------- -instance ToConcrete [A.Declaration] [C.Declaration] where-    toConcrete ds = concat <$> mapM toConcrete ds+declsToConcrete :: [A.Declaration] -> AbsToCon [C.Declaration]+declsToConcrete ds = mergeSigAndDef . concat <$> toConcrete ds  instance ToConcrete A.RHS (C.RHS, [C.Expr], [C.Expr], [C.Declaration]) where     toConcrete (A.RHS e) = do@@ -477,64 +524,32 @@     toConcrete A.AbsurdRHS = return (C.AbsurdRHS, [], [], [])     toConcrete (A.WithRHS _ es cs) = do       es <- toConcrete es-      cs <- toConcrete cs-      return (C.AbsurdRHS, [], es, concat cs)+      cs <- concat <$> toConcrete cs+      return (C.AbsurdRHS, [], es, cs)     toConcrete (A.RewriteRHS _ eqs rhs wh) = do-      wh <- toConcrete wh+      wh <- declsToConcrete wh       (rhs, eqs', es, whs) <- toConcrete rhs       unless (null eqs')         __IMPOSSIBLE__       eqs <- toConcrete eqs       return (rhs, eqs, es, wh ++ whs) -data TypeAndDef = TypeAndDef A.TypeSignature A.Definition--instance ToConcrete TypeAndDef [C.Declaration] where-  -- We don't do withInfixDecl here. It's done at the declaration level.--  toConcrete (TypeAndDef (ScopedDecl scope [d]) def) =-    withScope scope $ toConcrete (TypeAndDef d def)--  toConcrete (TypeAndDef d (ScopedDef scope def)) =-    withScope scope $ toConcrete (TypeAndDef d def)--  toConcrete (TypeAndDef (Axiom _ rel x t) (FunDef i _ cs)) =-    withAbstractPrivate i $ do-    t'  <- toConcreteCtx TopCtx t-    cs' <- toConcrete cs-    x'  <- unsafeQNameToName <$> toConcrete x-    return $ TypeSig rel x' t' : concat cs'--  toConcrete (TypeAndDef (Axiom _ _ x t) (DataDef i _ bs cs)) =-    withAbstractPrivate i $-    bindToConcrete tel $ \tel' -> do-      t'       <- toConcreteCtx TopCtx t0-      (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)-      return [ C.Data (getRange i) Inductive x' tel' t' cs' ]-    where-      (tel, t0) = mkTel (length bs) t-      mkTel n (ScopedExpr _ t) = mkTel n t-      mkTel 0 t            = ([], t)-      mkTel n (A.Pi _ b t) = (b++) -*- id $ mkTel (n - 1) t-      mkTel _ _            = __IMPOSSIBLE__---      mkTel n t            = error $ "mkTel " ++ show n ++ " " ++ show t+instance ToConcrete (Maybe A.QName) (Maybe C.Name) where+  toConcrete Nothing = return Nothing+  toConcrete (Just x) = do+    x' <- toConcrete (qnameName x)+    return $ Just x' -  toConcrete (TypeAndDef (Axiom _ _ x t) (RecDef  i _ c bs _ cs)) =-    withAbstractPrivate i $-    bindToConcrete tel $ \tel' -> do-      t'       <- toConcreteCtx TopCtx t0-      (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)-      c'       <- Trav.mapM (\d -> unsafeQNameToName <$>-                                     toConcrete (axiomName d)) c-      return [ C.Record (getRange i) x' c' tel' t' cs' ]-    where-      (tel, t0) = mkTel (length bs) t-      mkTel n (A.ScopedExpr _ t) = mkTel n t-      mkTel 0 t                  = ([], t)-      mkTel n (A.Pi _ b t)       = (b++) -*- id $ mkTel (n - 1) t-      mkTel _ _                  = __IMPOSSIBLE__+-- | Helper function used in instance @ToConcrete Definition@.+telToTypedBindingss :: [C.LamBinding] -> [C.TypedBindings]+telToTypedBindingss = map lamBindingToTypedBindings where -  toConcrete _ = __IMPOSSIBLE__+  lamBindingToTypedBindings :: C.LamBinding -> C.TypedBindings+  lamBindingToTypedBindings b =+    case b of+      C.DomainFull t     -> t+      C.DomainFree h r n -> C.TypedBindings noRange $+        Arg h r $ C.TBind noRange [n] $ C.Underscore noRange Nothing  instance ToConcrete (Constr A.Constructor) C.Declaration where   toConcrete (Constr (A.ScopedDecl scope [d])) =@@ -558,9 +573,20 @@           -- no code for it, but GHC 7's completeness checker spotted           -- that the case was not covered. +instance ToConcrete A.ModuleApplication C.ModuleApplication where+  toConcrete (A.SectionApp tel y es) = do+    y  <- toConcrete y+    bindToConcrete tel $ \tel -> do+    es <- toConcrete es+    let r = fuseRange y es+    return $ C.SectionApp r tel (foldl (C.App r) (C.Ident y) es)+  toConcrete (A.RecordModuleIFS rec) = do+    rec <- toConcrete rec+    return $ C.RecordModuleIFS (getRange rec) rec+ instance ToConcrete A.Declaration [C.Declaration] where   toConcrete (ScopedDecl scope ds) =-    withScope scope $ toConcrete ds+    withScope scope (declsToConcrete ds)    toConcrete (Axiom i rel x t) = do     x' <- unsafeQNameToName <$> toConcrete x@@ -584,39 +610,50 @@       return [C.Primitive (getRange i) [C.TypeSig Relevant x' t']]         -- Primitives are always relevant. -  toConcrete (Definition i ts ds) = do-      ixs' <- map (id -*- unsafeQNameToName) <$> toConcrete (map (DontTouchMe -*- id) ixs)-      withInfixDecls ixs' $ do-        ds' <- concat <$> toConcrete (zipWith TypeAndDef ts ds)-        return [mutual (getRange i) ds']-      where-          ixs = map getInfoAndName ts-          is  = map fst ixs-          getInfoAndName (A.Axiom i _ x _)        = (i,x)-          getInfoAndName (A.ScopedDecl scope [d]) = getInfoAndName d-          getInfoAndName _                        = __IMPOSSIBLE__+  toConcrete (A.FunDef i _ cs) =+    withAbstractPrivate i $ concat <$> toConcrete cs -          mutual r [d] = d-          mutual r ds  = C.Mutual r ds+  toConcrete (A.DataSig i x bs t) =+    withAbstractPrivate i $+    bindToConcrete bs $ \tel' -> do+      x' <- unsafeQNameToName <$> toConcrete x+      t' <- toConcreteCtx TopCtx t+      return [ C.DataSig (getRange i) Inductive x' (map C.DomainFull tel') t' ] +  toConcrete (A.DataDef i x bs cs) =+    withAbstractPrivate i $+    bindToConcrete (map makeDomainFree bs) $ \tel' -> do+      (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)+      return [ C.Data (getRange i) Inductive x' tel' Nothing cs' ]++  toConcrete (A.RecSig i x bs t) =+    withAbstractPrivate i $+    bindToConcrete bs $ \tel' -> do+      x' <- unsafeQNameToName <$> toConcrete x+      t' <- toConcreteCtx TopCtx t+      return [ C.RecordSig (getRange i) x' (map C.DomainFull tel') t' ]++  toConcrete (A.RecDef  i x c bs t cs) =+    withAbstractPrivate i $+    bindToConcrete (map makeDomainFree bs) $ \tel' -> do+      (x',cs') <- (unsafeQNameToName -*- id) <$> toConcrete (x, map Constr cs)+      return [ C.Record (getRange i) x' Nothing tel' Nothing cs' ]++  toConcrete (A.Mutual i ds) = declsToConcrete ds+   toConcrete (A.Section i x tel ds) = do     x <- toConcrete x     bindToConcrete tel $ \tel -> do-    ds <- toConcrete ds+    ds <- declsToConcrete ds     return [ C.Module (getRange i) x tel ds ] -  toConcrete (A.Apply i x tel y es _ _) = do+  toConcrete (A.Apply i x modapp _ _) = do     x  <- unsafeQNameToName <$> toConcrete x-    y  <- toConcrete y-    bindToConcrete tel $ \tel -> do-    es <- toConcrete es-    let r = fuseRange y es+    modapp <- toConcrete modapp+    let r = getRange modapp         open = maybe DontOpen id $ minfoOpenShort i         dir  = maybe (ImportDirective r (Hiding []) [] False) id $ minfoDirective i-    return [ C.ModuleMacro (getRange i) x tel-                (foldl (C.App r) (C.Ident y) es) open-                                                 dir-           ]+    return [ C.ModuleMacro (getRange i) x modapp open dir ]    toConcrete (A.Import i x) = do     x <- toConcrete x@@ -652,6 +689,12 @@         A.CompiledEpicPragma x e -> do           x <- toConcrete x           return $ C.CompiledEpicPragma r x e+        A.CompiledJSPragma x e -> do+          x <- toConcrete x+          return $ C.CompiledJSPragma r x e+        A.StaticPragma x -> do+            x <- toConcrete x+            return $ C.StaticPragma r x         A.EtaPragma x -> C.EtaPragma r <$> toConcrete x  -- Left hand sides --------------------------------------------------------@@ -706,17 +749,19 @@  data Hd = HdVar A.Name | HdCon A.QName | HdDef A.QName +cOpApp :: Range -> C.Name -> [C.Expr] -> C.Expr+cOpApp r n es = C.OpApp r n (map Ordinary es)+ tryToRecoverOpApp :: A.Expr -> AbsToCon C.Expr -> AbsToCon C.Expr-tryToRecoverOpApp e def = recoverOpApp bracket C.OpApp view e def+tryToRecoverOpApp e def = recoverOpApp bracket cOpApp view e def   where     view e = case AV.appView e of-      NonApplication _   -> Nothing-      Application h args -> Just (mkHd h, args)--    mkHd (HeadVar x)     = HdVar x-    mkHd (HeadCon (c:_)) = HdCon c-    mkHd (HeadCon [])    = __IMPOSSIBLE__-    mkHd (HeadDef f)     = HdDef f+      --NonApplication _   -> Nothing+      Application (Var x) args -> Just (HdVar x, args)+      Application (Def f) args -> Just (HdDef f, args)+      Application (Con (AmbQ (c:_))) args -> Just (HdCon c, args)+      Application (Con (AmbQ [])) args -> __IMPOSSIBLE__+      _ -> Nothing  tryToRecoverOpAppP :: A.Pattern -> AbsToCon C.Pattern -> AbsToCon C.Pattern tryToRecoverOpAppP p def = recoverOpApp bracketP_ C.OpAppP view p def
src/full/Agda/Syntax/Translation/ConcreteToAbstract.hs view
@@ -39,6 +39,7 @@ import Agda.Syntax.Concrete.Definitions as C import Agda.Syntax.Concrete.Operators import Agda.Syntax.Concrete.Pretty+import Agda.Syntax.Abstract.Pretty import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Scope.Base@@ -46,7 +47,7 @@ import Agda.Syntax.Strict  import Agda.TypeChecking.Monad.Base (TypeError(..), Call(..), typeError,-                                     TCErr(..), TCErr'(..))+                                     TCErr(..), TCErr'(..), extendlambdaname) import Agda.TypeChecking.Monad.Trace (traceCall, traceCallCPS, setCurrentRange) import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Options@@ -72,12 +73,13 @@ notAnExpression e           = typeError $ NotAnExpression e notAValidLetBinding d       = typeError $ NotAValidLetBinding d nothingAppliedToHiddenArg e = typeError $ NothingAppliedToHiddenArg e+nothingAppliedToInstanceArg e = typeError $ NothingAppliedToInstanceArg e  -- Debugging  printLocals :: Int -> String -> ScopeM () printLocals v s = verboseS "scope.top" v $ do-  locals <- scopeLocals <$> getScope+  locals <- getLocalVars   reportSLn "" 0 $ s ++ " " ++ show locals  printScope :: String -> Int -> String -> ScopeM ()@@ -112,12 +114,6 @@   s  <- getScope   return $ ScopedDecl s ds -annotateDefn :: ScopeM A.Definition -> ScopeM A.Definition-annotateDefn m = do-  d <- m-  s <- getScope-  return $ ScopedDef s d- annotateExpr :: ScopeM A.Expr -> ScopeM A.Expr annotateExpr m = do   e <- m@@ -158,19 +154,48 @@     notField _           = True      build (NiceField r f _ _ x (Arg h rel e) : fs) =-        C.Pi [C.TypedBindings r $ Arg h rel [C.TBind r [BName x f] e]] $ build fs+        C.Pi [C.TypedBindings r $ Arg h rel (C.TBind r [BName x f] e)] $ build fs       where r = getRange x     build (d : fs)                     = C.Let noRange (notSoNiceDeclarations [d]) $ build fs     build []                           = C.SetN noRange 0 -- todo: nicer -checkModuleMacro apply r p x tel m args open dir = withLocalVars $ do-    notPublicWithoutOpen open dir+checkModuleApplication (C.SectionApp _ tel e) m0 x dir' =+  withCurrentModule m0 $ do+    (m, args) <- case appView e of+      AppView (Ident m) args -> return (m, args)+      _                      -> notAModuleExpr e      tel' <- toAbstract tel-    (m0,m1,args') <- toAbstract ( NewModuleName x-                                , OldModuleName m-                                , args-                                )+    (m1,args') <- toAbstract (OldModuleName m+                             , args+                             )+    s  <- getNamedScope m1+    -- Drop constructors (OnlyQualified) if there are arguments. The record constructor+    -- isn't properly in the record module, so copying it will lead to badness.+    let noRecConstr | null args = id+                    | otherwise = removeOnlyQualified+    (s', (renM, renD)) <- copyScope m0 . noRecConstr =<< getNamedScope m1+    s' <- applyImportDirectiveM (C.QName x) dir' s'+    modifyCurrentScope $ const s'+    printScope "mod.inst" 20 "copied source module"+    reportSLn "scope.mod.inst" 30 $ "renamings:\n  " ++ show renD ++ "\n  " ++ show renM+    return ((A.SectionApp tel' m1 args'), renD, renM)+checkModuleApplication (C.RecordModuleIFS _ rec) m0 x dir' =+  withCurrentModule m0 $ do+    m1 <- toAbstract $ OldModuleName rec+    s <- getNamedScope m1+    (s', (renM, renD)) <- copyScope m0 s+    s' <- applyImportDirectiveM rec dir' s'+    modifyCurrentScope $ const s'++    printScope "mod.inst" 20 "copied record module"+    return ((A.RecordModuleIFS m1), renD, renM)++checkModuleMacro apply r p x modapp open dir = withLocalVars $ do+    notPublicWithoutOpen open dir++    m0 <- toAbstract (NewModuleName x)+     printScope "mod.inst" 20 "module macro"      -- If we're opening, the import directive is applied to the open,@@ -179,14 +204,7 @@                 DontOpen  -> dir                 DoOpen    -> defaultImportDir -    (renD, renM) <- withCurrentModule m0 $ do-      s  <- getNamedScope m1-      (s', (renM, renD)) <- copyScope m0 =<< getNamedScope m1-      s' <- applyImportDirectiveM (C.QName x) dir' s'-      modifyCurrentScope $ const s'-      printScope "mod.inst" 20 "copied source module"-      reportSLn "scope.mod.inst" 30 $ "renamings:\n  " ++ show renD ++ "\n  " ++ show renM-      return (renD, renM)+    (modapp', renD, renM) <- checkModuleApplication modapp m0 x dir'     bindModule p x m0     printScope "mod.inst.copy.after" 20 "after copying"     case open of@@ -195,7 +213,7 @@     printScope "mod.inst" 20 $ show open     stripNoNames     printScope "mod.inst" 10 $ "after stripping"-    return [ apply info (m0 `withRangesOf` [x]) tel' m1 args' renD renM ]+    return [ apply info (m0 `withRangesOf` [x]) modapp' renD renM ]   where     info = ModuleInfo              { minfoRange  = r@@ -309,7 +327,7 @@     reportSLn "scope.name" 10 $ "resolved " ++ show x ++ ": " ++ show qx     case qx of       VarName x'         -> return $ A.Var x'-      DefinedName d      -> return $ nameExpr d+      DefinedName _ d    -> return $ nameExpr d       ConstructorName ds -> return $ A.Con $ AmbQ (map anameName ds)       UnknownName        -> notInScope x @@ -322,11 +340,11 @@     rx <- resolveName x     z  <- case (rx, x) of       -- TODO: warn about shadowing-      (VarName y,     C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x-      (DefinedName d, C.QName x) | DefName == anameKind d -> return $ Left x-      (UnknownName,   C.QName x)                          -> return $ Left x-      (ConstructorName ds, _)                             -> return $ Right ds-      _                                                   ->+      (VarName y,       C.QName x)                          -> return $ Left x -- typeError $ RepeatedVariableInPattern y x+      (DefinedName _ d, C.QName x) | DefName == anameKind d -> return $ Left x+      (UnknownName,     C.QName x)                          -> return $ Left x+      (ConstructorName ds, _)                               -> return $ Right ds+      _                                                     ->         typeError $ GenericError $           "Cannot pattern match on " ++ show x ++ ", because it is not a constructor"     case z of@@ -344,8 +362,8 @@   toAbstract (OldName x) = do     rx <- resolveName (C.QName x)     case rx of-      DefinedName d -> return $ anameName d-      _             -> __IMPOSSIBLE__+      DefinedName _ d -> return $ anameName d+      _               -> error $ show x ++ " - " ++ show rx  newtype NewModuleName      = NewModuleName      C.Name newtype NewModuleQName     = NewModuleQName     C.QName@@ -389,11 +407,13 @@ -- | Peel off 'C.HiddenArg' and represent it as an 'NamedArg'. mkNamedArg :: C.Expr -> NamedArg C.Expr mkNamedArg (C.HiddenArg _ e) = Arg Hidden    Relevant e+mkNamedArg (C.InstanceArg _ e) = Arg Instance    Relevant e mkNamedArg e                 = Arg NotHidden Relevant $ unnamed e  -- | Peel off 'C.HiddenArg' and represent it as an 'Arg', throwing away any name. mkArg' :: Relevance -> C.Expr -> Arg C.Expr mkArg' r (C.HiddenArg _ e) = Arg Hidden    r $ namedThing e+mkArg' r (C.InstanceArg _ e) = Arg Instance    r $ namedThing e mkArg' r e                 = Arg NotHidden r e  -- | By default, arguments are @Relevant@.@@ -422,6 +442,23 @@         e <- toAbstractCtx prec e         return (e, False) +toAbstractOpArg :: Precedence -> OpApp C.Expr -> ScopeM A.Expr+toAbstractOpArg ctx (Ordinary e) = toAbstractCtx ctx e+toAbstractOpArg ctx (SyntaxBindingLambda r bs e) = toAbstractLam r bs e ctx++toAbstractLam :: Range -> [C.LamBinding] -> C.Expr -> Precedence -> ScopeM A.Expr+toAbstractLam r bs e ctx = do+        localToAbstract (map makeDomainFull bs) $ \bs ->+          case bs of+            b:bs' -> do+              e        <- toAbstractCtx ctx e+              let info = ExprRange r+              return $ A.Lam info b $ foldr mkLam e bs'+              where+                  mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e+            [] -> __IMPOSSIBLE__++ instance ToAbstract C.Expr A.Expr where   toAbstract e =     traceCall (ScopeCheckExpr e) $ annotateExpr $ case e of@@ -480,21 +517,43 @@    -- Malplaced hidden argument       C.HiddenArg _ _ -> nothingAppliedToHiddenArg e+      C.InstanceArg _ _ -> nothingAppliedToInstanceArg e    -- Lambda       C.AbsurdLam r h -> return $ A.AbsurdLam (ExprRange r) h -      e0@(C.Lam r bs e) -> do-        localToAbstract bs $ \bs ->-          case bs of-            b:bs' -> do-              e        <- toAbstractCtx TopCtx e-              let info = ExprRange r-              return $ A.Lam info b $ foldr mkLam e bs'-              where-                  mkLam b e = A.Lam (ExprRange $ fuseRange b e) b e-            [] -> __IMPOSSIBLE__+      C.Lam r bs e -> toAbstractLam r bs e TopCtx +  -- Extended Lambda+      C.ExtendedLam r cs -> do+--        m <- getCurrentModule+        cname <- nextlamname r 0 extendlambdaname+        name  <- freshAbstractName_ cname+        reportSLn "toabstract.extendlambda" 10 $ "new extended lambda name: " ++ show name+        qname <- qualifyName_ name+        bindName PrivateAccess DefName cname qname+        let insertApp (C.RawAppP r es) = C.RawAppP r ((IdentP (C.QName cname)) : es)+            insertApp (C.IdentP q) = C.RawAppP (getRange q) ((IdentP (C.QName cname)) : [C.IdentP q])+            insertApp _ = __IMPOSSIBLE__+            insertHead (C.LHS p wps eqs with) = C.LHS (insertApp p) wps eqs with+            insertHead (C.Ellipsis r wps eqs with) = C.Ellipsis r wps eqs with+        scdef <- toAbstract (C.FunDef r [] defaultFixity' ConcreteDef cname+                               (map (\(lhs,rhs,wh) -> -- wh = NoWhere, see parser for more info+                                      C.Clause cname (insertHead lhs) rhs wh []) cs))+        case scdef of+          (A.ScopedDecl si [A.FunDef di qname' cs]) -> do+            setScope si+            return $ A.ExtendedLam (ExprRange r) di qname' cs+          _ -> __IMPOSSIBLE__+          where+            nextlamname :: Range -> Int -> String -> ScopeM C.Name+            nextlamname r i s = do+              let cname_pre = C.Name r [Id $ s ++ show i]+              rn <- resolveName (C.QName cname_pre)+              case rn of+                UnknownName -> return $ cname_pre+                _           -> nextlamname r (i+1) s+ -- Irrelevant non-dependent function type        C.Fun r e1 e2 -> do@@ -538,6 +597,13 @@         es <- toAbstractCtx TopCtx es         return $ A.Rec (ExprRange r) $ zip xs es +  -- Record update+      C.RecUpdate r e fs -> do+        let (xs, es) = unzip fs+        e <- toAbstract e+        es <- toAbstractCtx TopCtx es+        return $ A.RecUpdate (ExprRange r) e $ zip xs es+   -- Parenthesis       C.Paren _ e -> toAbstractCtx TopCtx e @@ -555,11 +621,21 @@         e' <- toAbstract e         return $ A.QuoteGoal (ExprRange $ getRange e) x' e'       C.Quote r -> return $ A.Quote (ExprRange r)+      C.QuoteTerm r -> return $ A.QuoteTerm (ExprRange r)+      C.Unquote r -> return $ A.Unquote (ExprRange r) +  -- DontCare+      C.DontCare e -> A.DontCare <$> toAbstract e+ instance ToAbstract C.LamBinding A.LamBinding where-  toAbstract (C.DomainFree h x) = A.DomainFree h <$> toAbstract (NewName x)-  toAbstract (C.DomainFull tb)  = A.DomainFull <$> toAbstract tb+  toAbstract (C.DomainFree h rel x) = A.DomainFree h rel <$> toAbstract (NewName x)+  toAbstract (C.DomainFull tb)      = A.DomainFull <$> toAbstract tb +makeDomainFull :: C.LamBinding -> C.LamBinding+makeDomainFull b@C.DomainFull{} = b+makeDomainFull (C.DomainFree h rel x) =+  C.DomainFull $ C.TypedBindings r $ Arg h rel $ C.TBind r [x] $ C.Underscore r Nothing+  where r = getRange x instance ToAbstract C.TypedBindings A.TypedBindings where   toAbstract (C.TypedBindings r bs) = A.TypedBindings r <$> toAbstract bs @@ -581,12 +657,12 @@     -- pushScope m     -- qm <- getCurrentModule     printScope "module" 20 $ "inside module " ++ show x-    ds <- withLocalVars $ do-            tel <- toAbstract tel-            (:[]) . A.Section info (qm `withRangesOfQ` x) tel <$>-              toAbstract ds-    scope <- getScope-    return (scope, ds)+    withLocalVars $ do+      tel   <- toAbstract tel+      ds    <- (:[]) . A.Section info (qm `withRangesOfQ` x) tel <$>+                 toAbstract ds+      scope <- getScope+      return (scope, ds)    -- Binding is done by the caller   printScope "module" 20 $ "after module " ++ show x@@ -619,7 +695,7 @@           return $ TopLevelInfo (ds' ++ ds) scope scope0         _ -> __IMPOSSIBLE__ -+-- | runs Syntax.Concrete.Definitions.niceDeclarations on main module niceDecls :: [C.Declaration] -> ScopeM [NiceDeclaration] niceDecls ds = case runNice $ niceDeclarations ds of   Left e   -> throwError $ TCErr Nothing $ Exception (getRange e) (show e)@@ -632,17 +708,19 @@ newtype LetDef = LetDef NiceDeclaration  instance ToAbstract LetDefs [A.LetBinding] where-    toAbstract (LetDefs ds) =-        concat <$> (toAbstract =<< map LetDef <$> niceDecls ds)+  toAbstract (LetDefs ds) =+    concat <$> (toAbstract =<< map LetDef <$> niceDecls ds)  instance ToAbstract LetDef [A.LetBinding] where     toAbstract (LetDef d) =         case d of-            NiceDef _ c [C.Axiom _ _ _ _ rel x t] [C.FunDef _ _ _ _ _ _ [cl]] ->-                do  e <- letToAbstract cl+            NiceMutual _ d@[C.FunSig _ fx _ rel x t, C.FunDef _ _ _ abstract _ [cl]] ->+                do  when (abstract == AbstractDef) $ do+                      typeError $ GenericError $ "abstract not allowed in let expressions"+                    e <- letToAbstract cl                     t <- toAbstract t-                    x <- toAbstract (NewName x)-                    return [ A.LetBind (LetRange $ getRange c) rel x t e ]+                    x <- toAbstract (NewName $ C.BName x fx)+                    return [ A.LetBind (LetRange $ getRange d) rel x t e ]              -- You can't open public in a let             NiceOpen r x dirs | not (C.publicOpen dirs) -> do@@ -659,9 +737,8 @@                                 m                      ] -            NiceModuleMacro r p a x tel e open dir | not (C.publicOpen dir) -> case appView e of-              AppView (Ident m) args -> checkModuleMacro LetApply r p x tel m args open dir-              _                      -> notAModuleExpr e+            NiceModuleMacro r p a x modapp open dir | not (C.publicOpen dir) ->+              checkModuleMacro LetApply r p x modapp open dir              _   -> notAValidLetBinding d         where@@ -673,83 +750,16 @@             letToAbstract _ = notAValidLetBinding d              -- Named patterns not allowed in let definitions-            lambda e (Arg h r (Named Nothing (A.VarP x))) = return $ A.Lam i (A.DomainFree h x) e+            lambda e (Arg h rel (Named Nothing (A.VarP x))) = return $ A.Lam i (A.DomainFree h rel x) e                 where                     i = ExprRange (fuseRange x e)-            lambda e (Arg h r (Named Nothing (A.WildP i))) =+            lambda e (Arg h rel (Named Nothing (A.WildP i))) =                 do  x <- freshNoName (getRange i)-                    return $ A.Lam i' (A.DomainFree h x) e+                    return $ A.Lam i' (A.DomainFree h rel x) e                 where                     i' = ExprRange (fuseRange i e)             lambda _ _ = notAValidLetBinding d --- instance ToAbstract C.Pragma [A.Pragma]--- moved higher up to reduce the probability of line number change--- in C.ImpossiblePragma  (test/fail/Impossible.agda)---- Only constructor names are bound by definitions.-instance ToAbstract NiceDefinition Definition where--    toAbstract d = annotateDefn $ case d of--    -- Function definitions-      C.FunDef r ds f p a x cs ->-        traceCall (ScopeCheckDefinition d) $ do-          (x',cs') <- toAbstract (OldName x,cs)-          return $ A.FunDef (mkDefInfo x f p a r) x' cs'--    -- Data definitions-      C.DataDef r f p a x pars cons ->-        traceCall (ScopeCheckDefinition d) $-        withLocalVars $ do--          -- Check for duplicate constructors-          do let cs   = map conName cons-                 dups = nub $ cs \\ nub cs-                 bad  = filter (`elem` dups) cs-             unless (distinct cs) $-               setCurrentRange (getRange bad) $-                  typeError $ DuplicateConstructors dups--          pars <- toAbstract pars-          x'   <- toAbstract (OldName x)-          -- Create the module for the qualified constructors-          checkForModuleClash x -- disallow shadowing previously defined modules-          let m = mnameFromList $ qnameToList x'-          createModule m-          bindModule p x m  -- make it a proper module-          cons <- toAbstract (map (ConstrDecl m) cons)-          -- Open the module-          -- openModule_ (C.QName x) defaultImportDir{ publicOpen = True }-          printScope "data" 20 $ "Checked data " ++ show x-          return $ A.DataDef (mkDefInfo x f p a r) x' pars cons-        where-          conName (C.Axiom _ _ _ _ _ c _) = c-          conName _ = __IMPOSSIBLE__--    -- Record definitions (mucho interesting)-      C.RecDef r f p a x c pars fields ->-        traceCall (ScopeCheckDefinition d) $-        withLocalVars $ do-          -- Check that the generated module doesn't clash with a previously-          -- defined module-          checkForModuleClash x-          pars   <- toAbstract pars-          x'     <- toAbstract (OldName x)-          contel <- toAbstract $ recordConstructorType fields-          m0     <- getCurrentModule-          let m = A.qualifyM m0 $ mnameFromList $ (:[]) $ last $ qnameToList x'-          printScope "rec" 15 "before record"-          createModule m-          afields <- withCurrentModule m $ do-            afields <- toAbstract fields-            printScope "rec" 15 "checked fields"-            return afields-          bindModule p x m-          c' <- mapM (toAbstract . ConstrDecl m) c-          printScope "rec" 15 "record complete"-          return $ A.RecDef (mkDefInfo x f p a r) x' c' pars contel afields- -- The only reason why we return a list is that open declarations disappears. -- For every other declaration we get a singleton list. instance ToAbstract NiceDeclaration A.Declaration where@@ -759,11 +769,13 @@     case d of    -- Axiom-    C.Axiom r f p a rel x t -> do+    C.Axiom r f p rel x t -> do+      clo <- commandLineOptions+      when (optSafe clo) (typeError (SafeFlagPostulate x))       t' <- toAbstractCtx TopCtx t       y  <- freshAbstractQName f x       bindName p DefName x y-      return [ A.Axiom (mkDefInfo x f p a r) rel y t' ]+      return [ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' ]    -- Fields     C.NiceField r f p a x t -> do@@ -785,13 +797,93 @@       return [ A.Primitive (mkDefInfo x f p a r) y t' ]    -- Definitions (possibly mutual)-    NiceDef r cs ts ds -> do-      (ts', ds') <- toAbstract (ts, ds)-      return [ Definition (DeclInfo C.noName_ r) ts' ds' ]+    NiceMutual r ds -> do+      ds' <- toAbstract ds+      return [ A.Mutual (DeclInfo C.noName_ r) ds' ]                           -- TODO: what does the info mean here? -  -- TODO: what does an abstract module mean? The syntax doesn't allow it.-    NiceModule r p a (C.QName name) tel ds -> do+    C.NiceRecSig r f a x ls t -> withLocalVars $ do+        let toTypeBinding :: C.LamBinding -> C.TypedBindings+            toTypeBinding b = case makeDomainFull b of+               C.DomainFull b -> b+               _            -> __IMPOSSIBLE__+        ls' <- toAbstract (map toTypeBinding ls)+        x'  <- freshAbstractQName f x+        bindName a DefName x x'+        t' <- toAbstract t+        return [ A.RecSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ]+    C.NiceDataSig r f a x ls t -> withLocalVars $ do+        printScope "scope.data.sig" 20 ("checking DataSig for " ++ show x)+        let toTypeBinding :: C.LamBinding -> C.TypedBindings+            toTypeBinding b = case makeDomainFull b of+               C.DomainFull b -> b+               _            -> __IMPOSSIBLE__+        ls' <- toAbstract (map toTypeBinding ls)+        x'  <- freshAbstractQName f x+        bindName a DefName x x'+        t' <- toAbstract t+        return [ A.DataSig (mkDefInfo x f a ConcreteDef r) x' ls' t' ]+  -- Type signatures+    C.FunSig r f p rel x t -> (:[]) <$> toAbstract (C.Axiom r f p rel x t)+  -- Function definitions+    C.FunDef r ds f a x cs -> do+        printLocals 10 $ "checking def " ++ show x+        (x',cs') <- toAbstract (OldName x,cs)+        return [ A.FunDef (mkDefInfo x f PublicAccess a r) x' cs' ]++  -- Data definitions+    C.DataDef r f a x pars cons -> withLocalVars $ do+        printScope "scope.data.def" 20 ("checking DataDef for " ++ show x)+        -- Check for duplicate constructors+        do let cs   = map conName cons+               dups = nub $ cs \\ nub cs+               bad  = filter (`elem` dups) cs+           unless (distinct cs) $+             setCurrentRange (getRange bad) $+                typeError $ DuplicateConstructors dups++        pars <- toAbstract pars+        DefinedName p ax <- resolveName (C.QName x)+        let x' = anameName ax+        -- Create the module for the qualified constructors+        checkForModuleClash x -- disallow shadowing previously defined modules+        let m = mnameFromList $ qnameToList x'+        createModule m+        bindModule p x m  -- make it a proper module+        cons <- toAbstract (map (ConstrDecl NoRec m a p) cons)+        -- Open the module+        -- openModule_ (C.QName x) defaultImportDir{ publicOpen = True }+        printScope "data" 20 $ "Checked data " ++ show x+        return [ A.DataDef (mkDefInfo x f PublicAccess a r) x' pars cons ]+      where+        conName (C.Axiom _ _ _ _ c _) = c+        conName _ = __IMPOSSIBLE__++  -- Record definitions (mucho interesting)+    C.RecDef r f a x cm pars fields ->+      withLocalVars $ do+        -- Check that the generated module doesn't clash with a previously+        -- defined module+        checkForModuleClash x+        pars   <- toAbstract pars+        DefinedName p ax <- resolveName (C.QName x)+        let x' = anameName ax+        contel <- toAbstract $ recordConstructorType fields+        m0     <- getCurrentModule+        let m = A.qualifyM m0 $ mnameFromList $ (:[]) $ last $ qnameToList x'+        printScope "rec" 15 "before record"+        createModule m+        afields <- withCurrentModule m $ do+          afields <- toAbstract fields+          printScope "rec" 15 "checked fields"+          return afields+        bindModule p x m+        cm' <- mapM (\(ThingWithFixity c f) -> bindConstructorName m c f a p YesRec) cm+        printScope "rec" 15 "record complete"+        return [ A.RecDef (mkDefInfo x f PublicAccess a r) x' cm' pars contel afields ]++    NiceModule r p a (C.QName name) tel ds ->+      traceCall (ScopeCheckDeclaration $ NiceModule r p a (C.QName name) tel []) $ do       aname <- toAbstract (NewModuleName name)       x <- snd <$> scopeCheckModule r (C.QName name) aname tel ds       bindModule p name aname@@ -799,9 +891,8 @@      NiceModule _ _ _ C.Qual{} _ _ -> __IMPOSSIBLE__ -    NiceModuleMacro r p a x tel e open dir -> case appView e of-      AppView (Ident m) args -> checkModuleMacro Apply r p x tel m args open dir-      _                      -> notAModuleExpr e+    NiceModuleMacro r p a x modapp open dir ->+      checkModuleMacro Apply r p x modapp open dir      NiceOpen r x dir -> do       m <- toAbstract (OldModuleName x)@@ -871,26 +962,38 @@                            })                         m ] -data ConstrDecl = ConstrDecl A.ModuleName C.NiceDeclaration +data IsRecordCon = YesRec | NoRec+data ConstrDecl = ConstrDecl IsRecordCon A.ModuleName IsAbstract Access C.NiceDeclaration++bindConstructorName m x f a p rec = do+  -- The abstract name is the qualified one+  y <- withCurrentModule m $ freshAbstractQName f x+  -- Bind it twice, once unqualified and once qualified+  bindName p' ConName x y+  withCurrentModule m $ bindName p'' ConName x y+  return y+  where+    -- An abstract constructor is private (abstract constructor means+    -- abstract datatype, so the constructor should not be exported).+    p' = case a of+           AbstractDef -> PrivateAccess+           _           -> p+    p'' = case (a, rec) of+            (AbstractDef, _) -> PrivateAccess+            (_, YesRec)      -> OnlyQualified   -- record constructors aren't really in the record module+            _                -> PublicAccess+ instance ToAbstract ConstrDecl A.Declaration where-    toAbstract (ConstrDecl m (C.Axiom r f p a rel x t)) = do -- rel==Relevant-        t' <- toAbstractCtx TopCtx t-        -- The abstract name is the qualified one-        y  <- withCurrentModule m $ freshAbstractQName f x-        -- Bind it twice, once unqualified and once qualified-        bindName p' ConName x y-        withCurrentModule m $ bindName p' ConName x y-        printScope "con" 15 "bound constructor"-        return $ A.Axiom (mkDefInfo x f p a r) rel y t'-        where-            -- An abstract constructor is private (abstract constructor means-            -- abstract datatype, so the constructor should not be exported).-            p' = case (a, p) of-                    (AbstractDef, _) -> PrivateAccess-                    (_, p)           -> p+  toAbstract (ConstrDecl rec m a p (C.Axiom r f _ rel x t)) = do -- rel==Relevant+    t' <- toAbstractCtx TopCtx t+    -- The abstract name is the qualified one+    -- Bind it twice, once unqualified and once qualified+    y <- bindConstructorName m x f a p rec+    printScope "con" 15 "bound constructor"+    return $ A.Axiom (mkDefInfo x f p ConcreteDef r) rel y t' -    toAbstract _ = __IMPOSSIBLE__    -- a constructor is always an axiom+  toAbstract _ = __IMPOSSIBLE__    -- a constructor is always an axiom  instance ToAbstract C.Pragma [A.Pragma] where     toAbstract (C.ImpossiblePragma _) = impossibleTest@@ -916,9 +1019,22 @@       e <- toAbstract $ OldQName x       y <- case e of             A.Def x -> return x-            -- A.Con _ -> fail "Use COMPILED_DATA_EPIC for constructors" -- TODO             _       -> __IMPOSSIBLE__       return [ A.CompiledEpicPragma y ep ]+    toAbstract (C.CompiledJSPragma _ x ep) = do+      e <- toAbstract $ OldQName x+      y <- case e of+            A.Def x -> return x+            A.Con (AmbQ [x]) -> return x+            A.Con x -> fail ("COMPILED_JS used on ambiguous name " ++ show x)+            _       -> __IMPOSSIBLE__+      return [ A.CompiledJSPragma y ep ]+    toAbstract (C.StaticPragma _ x) = do+        e <- toAbstract $ OldQName x+        y <- case e of+            A.Def x -> return x+            _       -> __IMPOSSIBLE__+        return [ A.StaticPragma y ]     toAbstract (C.BuiltinPragma _ b e) = do         e <- toAbstract e         return [ A.BuiltinPragma b e ]@@ -975,11 +1091,15 @@                  | RHS' A.Expr                  | RewriteRHS' [A.Expr] AbstractRHS [A.Declaration] +qualifyName_ :: A.Name -> ScopeM A.QName+qualifyName_ x = do+  m <- getCurrentModule+  return $ A.qualify m x+ withFunctionName :: String -> ScopeM A.QName withFunctionName s = do-  m <- getCurrentModule   NameId i _ <- fresh-  A.qualify m <$> freshName_ (s ++ show i)+  qualifyName_ =<< freshName_ (s ++ show i)  instance ToAbstract AbstractRHS A.RHS where   toAbstract AbsurdRHS'            = return A.AbsurdRHS@@ -1022,7 +1142,7 @@         p <- parseLHS (Just top) lhs         printLocals 10 "before lhs:"         let (x, ps) = lhsArgs p-        x    <- toAbstract (OldName x)+        x    <- withLocalVars $ setLocalVars [] >> toAbstract (OldName x)         args <- toAbstract ps         wps  <- toAbstract =<< mapM (parseLHS Nothing) wps         checkPatternLinearity (map (namedThing . unArg) args ++ wps)@@ -1078,6 +1198,7 @@      -- Removed when parsing     toAbstract (HiddenP _ _) = __IMPOSSIBLE__+    toAbstract (InstanceP _ _) = __IMPOSSIBLE__     toAbstract (RawAppP _ _) = __IMPOSSIBLE__      toAbstract p@(C.WildP r)    = return $ A.WildP (PatSource r $ const p)@@ -1100,7 +1221,7 @@  -- | Turn an operator application into abstract syntax. Make sure to record the -- right precedences for the various arguments.-toAbstractOpApp :: C.Name -> [C.Expr] -> ScopeM A.Expr+toAbstractOpApp :: C.Name -> [OpApp C.Expr] -> ScopeM A.Expr toAbstractOpApp op@(C.NoName _ _) es = __IMPOSSIBLE__ toAbstractOpApp op@(C.Name _ _) es = do     f  <- getFixity (C.QName op)@@ -1113,7 +1234,7 @@          left f (IdPart _ : xs) es = inside f xs es         left f (_ : xs) (e : es) = do-            e  <- toAbstractCtx (LeftOperandCtx f) e+            e  <- toAbstractOpArg (LeftOperandCtx f) e             es <- inside f xs es             return (e : es)         left f (_  : _)  [] = __IMPOSSIBLE__@@ -1122,7 +1243,7 @@         inside f [x]          es       = right f x es         inside f (IdPart _ : xs) es       = inside f xs es         inside f (_  : xs) (e : es) = do-            e  <- toAbstractCtx InsideOperandCtx e+            e  <- toAbstractOpArg InsideOperandCtx e             es <- inside f xs es             return (e : es)         inside _ (_ : _) [] = __IMPOSSIBLE__@@ -1130,6 +1251,6 @@          right _ (IdPart _)  [] = return []         right f _          [e] = do-            e <- toAbstractCtx (RightOperandCtx f) e+            e <- toAbstractOpArg (RightOperandCtx f) e             return [e]         right _ _     _  = __IMPOSSIBLE__
src/full/Agda/Syntax/Translation/InternalToAbstract.hs view
@@ -16,6 +16,7 @@ module Agda.Syntax.Translation.InternalToAbstract where  import Prelude hiding (mapM_, mapM)+import Control.Applicative import Control.Arrow import Control.Monad.State hiding (mapM_, mapM) import Control.Monad.Error hiding (mapM_, mapM)@@ -47,6 +48,7 @@ import Agda.TypeChecking.Datatypes import Agda.TypeChecking.Free import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Telescope  import Agda.Utils.Monad import Agda.Utils.Tuple@@ -56,7 +58,7 @@ #include "../../undefined.h" import Agda.Utils.Impossible -apps :: MonadTCM tcm => (Expr, [Arg Expr]) -> tcm Expr+apps :: (Expr, [Arg Expr]) -> TCM Expr apps (e, []) = return e apps (e, arg : args) | isHiddenArg arg =     do  showImp <- showImplicitArguments@@ -68,11 +70,11 @@ exprInfo :: ExprInfo exprInfo = ExprRange noRange -reifyApp :: MonadTCM tcm => Expr -> [Arg Term] -> tcm Expr+reifyApp :: Expr -> [Arg Term] -> TCM Expr reifyApp e vs = curry apps e =<< reify vs  class Reify i a | i -> a where-    reify :: MonadTCM tcm => i -> tcm a+    reify :: i -> TCM a  instance Reify MetaId Expr where     reify x@(MetaId n) = liftTCM $ do@@ -92,6 +94,9 @@ instance Reify DisplayTerm Expr where   reify d = case d of     DTerm v -> reify v+    DDot  v -> reify v+    DCon c vs -> curry apps (A.Con (AmbQ [c])) =<< reify vs+    DDef f vs -> curry apps (A.Def f) =<< reify vs     DWithApp us vs -> do       us <- reify us       let wapp [e] = e@@ -99,7 +104,7 @@           wapp [] = __IMPOSSIBLE__       reifyApp (wapp us) vs -reifyDisplayForm :: MonadTCM tcm => QName -> Args -> tcm A.Expr -> tcm A.Expr+reifyDisplayForm :: QName -> Args -> TCM A.Expr -> TCM A.Expr reifyDisplayForm x vs fallback = do   enabled <- displayFormsEnabled   if enabled@@ -125,11 +130,19 @@     okDisplayForm (DWithApp (d : ds) []) =       okDisplayForm d && all okDisplayTerm ds     okDisplayForm (DTerm (I.Def f vs)) = all okArg vs-    okDisplayForm _ = True -- False+    okDisplayForm (DDef f vs) = all okDArg vs+    okDisplayForm DDot{} = False+    okDisplayForm DCon{} = False+    okDisplayForm DTerm{} = True -- False?+    okDisplayForm DWithApp{} = True -- False?      okDisplayTerm (DTerm v) = okTerm v+    okDisplayTerm DDot{} = True+    okDisplayTerm DCon{} = True+    okDisplayTerm DDef{} = False     okDisplayTerm _ = False +    okDArg = okDisplayTerm . unArg     okArg = okTerm . unArg      okTerm (I.Var _ []) = True@@ -138,13 +151,11 @@     okTerm _            = True -- False      flattenWith (DWithApp (d : ds) []) = case flattenWith d of-      (f, vs, ds') -> (f, vs, ds' ++ map unDTerm ds)-    flattenWith (DTerm (I.Def f vs)) = (f, vs, [])+      (f, vs, ds') -> (f, vs, ds' ++ ds)+    flattenWith (DDef f vs) = (f, vs, [])+    flattenWith (DTerm (I.Def f vs)) = (f, map (fmap DTerm) vs, [])     flattenWith _ = __IMPOSSIBLE__ -    unDTerm (DTerm v) = v-    unDTerm _ = __IMPOSSIBLE__-     displayLHS ps wps d = case flattenWith d of       (f, vs, ds) -> do         ds <- mapM termToPat ds@@ -154,22 +165,49 @@         info = PatRange noRange         argToPat arg = fmap unnamed <$> traverse termToPat arg -        -- TODO: dot variables-        termToPat (I.Var n []) = return $ ps !! fromIntegral n-        termToPat (I.Con c vs) = A.ConP info (AmbQ [c]) <$> mapM argToPat vs-        termToPat (I.Def _ []) = return $ A.WildP info+        len = genericLength ps++        termToPat :: DisplayTerm -> TCM A.Pattern+        termToPat (DTerm (I.Var n [])) = return $ ps !! fromIntegral n+        termToPat (DCon c vs) = A.ConP info (AmbQ [c]) <$> mapM argToPat vs+        termToPat (DDot v) = A.DotP info <$> termToExpr v+        termToPat (DDef _ []) = return $ A.WildP info+        termToPat (DTerm (I.Con c vs)) = A.ConP info (AmbQ [c]) <$> mapM (argToPat . fmap DTerm) vs+        termToPat (DTerm (I.Def _ [])) = return $ A.WildP info         termToPat v = A.DotP info <$> reify v -- __IMPOSSIBLE__ --- Level literals should be expanded.+        argsToExpr = mapM (traverse termToExpr) +        -- TODO: restructure this to avoid having to repeat the code for reify+        termToExpr :: Term -> TCM A.Expr+        termToExpr (I.Var n [])+          | n < len = return $ patToTerm $ ps !! fromIntegral n+        termToExpr (I.Con c vs) =+          curry apps (A.Con (AmbQ [c])) =<< argsToExpr vs+        termToExpr (I.Def f vs) =+          curry apps (A.Def f) =<< argsToExpr vs+        termToExpr (I.Var n vs) =+          apps =<< (,) <$> reify (I.Var (n - len) []) <*> argsToExpr vs+        termToExpr _ = return $ A.Underscore minfo++        minfo = MetaInfo noRange emptyScopeInfo Nothing+        einfo = ExprRange noRange+        app = foldl (App einfo)++        patToTerm :: A.Pattern -> A.Expr+        patToTerm (A.VarP x)      = A.Var x+        patToTerm (A.ConP _ c ps) =+          A.Con c `app` map (fmap (fmap patToTerm)) ps+        patToTerm (A.DefP _ f ps) =+          A.Def f `app` map (fmap (fmap patToTerm)) ps+        patToTerm (A.WildP _)     = A.Underscore minfo+        patToTerm (A.AsP _ _ p)   = patToTerm p+        patToTerm (A.DotP _ e)    = e+        patToTerm (A.AbsurdP _)   = A.Underscore minfo  -- TODO: could this happen?+        patToTerm (A.LitP l)      = A.Lit l+        patToTerm (A.ImplicitP _) = A.Underscore minfo+ instance Reify Literal Expr where-  reify (LitLevel r n) = do-    levelZero <- primLevelZero-    levelSuc  <- levelSucFunction-    reify $ fold levelSuc levelZero n-    where-    fold s z n | n < 0     = __IMPOSSIBLE__-               | otherwise = foldr (.) id (genericReplicate n s) z   reify l@(LitInt    {}) = return (A.Lit l)   reify l@(LitFloat  {}) = return (A.Lit l)   reify l@(LitString {}) = return (A.Lit l)@@ -183,9 +221,51 @@       I.Var n vs   -> do           x  <- liftTCM $ nameOfBV n `catchError` \_ -> freshName_ ("@" ++ show n)           reifyApp (A.Var x) vs-      I.Def x vs   -> reifyDisplayForm x vs $ do-          n <- getDefFreeVars x-          reifyApp (A.Def x) $ genericDrop n vs+      I.Def x@(QName _ name) vs -> reifyDisplayForm x vs $ do+        mdefn <- liftTCM $ (Just <$> getConstInfo x) `catchError` \_ -> return Nothing+        (pad, vs) <-+          case mdefn of+            Nothing -> (,) [] <$> (flip genericDrop vs <$> getDefFreeVars x)+            Just defn -> do+              let def = theDef defn+              -- This is tricky:+              --  * getDefFreeVars x tells us how many arguments+              --    are part of the local context+              --  * some of those arguments might have been dropped+              --    due to projection likeness+              --  * when showImplicits is on we'd like to see the dropped+              --    projection arguments++              -- We should drop this many arguments from the local context.+              n <- getDefFreeVars x+              -- These are the dropped projection arguments+              pad <- case def of+                      Function{ funProjection = Just (_, np) } -> do+                        TelV tel _ <- telView (defType defn)+                        scope <- getScope+                        let as       = take (np - 1) $ telToList tel+                            whocares = A.Underscore (Info.MetaInfo noRange scope Nothing)+                        return $ map (fmap $ const whocares) as+                      _ -> return []+              -- Now pad' ++ vs' = drop n (pad ++ vs)+              let pad' = genericDrop n pad+                  vs'  = genericDrop (max 0 (n - size pad)) vs+              -- If showImplicit then keep the padding otherwise ignore it+              ifM showImplicitArguments+                  (return (pad', vs'))+                  (return ([], vs'))+        df <- displayFormsEnabled+        if df && isPrefixOf extendlambdaname (show name)+          then do+           reportSLn "int2abs.reifyterm.def" 10 $ "reifying extended lambda with definition: " ++ show x+           info <- getConstInfo x+           cls <- mapM (reify . (NamedClause x)) $ defClauses info+           -- Karim: Currently Abs2Conc does not require a DefInfo thus we+           -- use __IMPOSSIBLE__.+           reifyApp (A.ExtendedLam exprInfo __IMPOSSIBLE__ x cls) vs+          else+           let apps = foldl (\e a -> A.App exprInfo e (fmap unnamed a)) in+           reifyApp (A.Def x `apps` pad) vs       I.Con x vs   -> do         isR <- isGeneratedRecordConstructor x         case isR of@@ -207,18 +287,37 @@             apps (A.Con (AmbQ [x]), genericDrop n $ us ++ es)       I.Lam h b    -> do         (x,e) <- reify b-        return $ A.Lam exprInfo (DomainFree h x) e+        return $ A.Lam exprInfo (DomainFree h Relevant x) e+        -- Andreas, 2011-04-07 we do not need relevance information at internal Lambda       I.Lit l        -> reify l-      I.Pi a b       -> do-        Arg h r a <- reify a-        (x,b)     <- reify b-        return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r [TBind noRange [x] a]] b-      I.Fun a b    -> uncurry (A.Fun $ exprInfo)-                      <$> reify (a,b)+      I.Level l      -> reify l+      I.Pi a b       -> case b of+        NoAbs _ b -> uncurry (A.Fun $ exprInfo) <$> reify (a,b)+        b         -> do+          Arg h r a <- reify a+          (x, b)    <- reify b+          return $ A.Pi exprInfo [TypedBindings noRange $ Arg h r (TBind noRange [x] a)] b       I.Sort s     -> reify s       I.MetaV x vs -> apps =<< reify (x,vs)-      I.DontCare   -> return A.DontCare+      I.DontCare v -> A.DontCare <$> reify v+{- Andreas: I want to see irrelevant, but not implicit arguments+        ifM showImplicitArguments+            (reify v)+            (return A.DontCare)+-}+{- Andreas, 2011-09-09+      I.DontCare Nothing  -> return A.DontCare+      I.DontCare (Just v) -> reify v  -- leads to paradox error msg in test/fail/UnifyWithIrrelevantArgument+-} +instance Reify Elim Expr where+  reify e = case e of+    I.Apply v -> appl "apply" <$> reify v+    I.Proj f  -> appl "proj"  <$> reify (defaultArg $ I.Def f [])+    where+      appl :: String -> Arg Expr -> Expr+      appl s v = A.App exprInfo (A.Lit (LitString noRange s)) $ fmap unnamed v+ data NamedClause = NamedClause QName I.Clause -- Named clause does not need 'Recursion' flag since I.Clause has it -- data NamedClause = NamedClause QName Recursion I.Clause@@ -226,11 +325,10 @@ instance Reify ClauseBody RHS where   reify NoBody     = return AbsurdRHS   reify (Body v)   = RHS <$> reify v-  reify (NoBind b) = reify b   reify (Bind b)   = reify $ absBody b  -- the variables should already be bound -stripImplicits :: MonadTCM tcm => [NamedArg A.Pattern] -> [A.Pattern] ->-                  tcm ([NamedArg A.Pattern], [A.Pattern])+stripImplicits :: [NamedArg A.Pattern] -> [A.Pattern] ->+                  TCM ([NamedArg A.Pattern], [A.Pattern]) stripImplicits ps wps =   ifM showImplicitArguments (return (ps, wps)) $ do   let vars = dotVars (ps, wps)@@ -305,7 +403,10 @@         varOrDot A.ImplicitP{} = True         varOrDot _             = False -+-- | @dotVars ps@ gives all the variables inside of dot patterns of @ps@+--   It is only invoked for patternish things. (Ulf O-tone!)+--   Use it for printing l.h.sides: which of the implicit arguments+--   have to be made explicit. class DotVars a where   dotVars :: a -> Set Name @@ -321,9 +422,14 @@ instance (DotVars a, DotVars b) => DotVars (a, b) where   dotVars (x, y) = Set.union (dotVars x) (dotVars y) ++instance DotVars A.Clause where+  dotVars (A.Clause _ rhs []) = dotVars rhs+  dotVars (A.Clause _ rhs (_:_)) = __IMPOSSIBLE__ -- cannot contain where clauses?+ instance DotVars A.Pattern where   dotVars p = case p of-    A.VarP _      -> Set.empty+    A.VarP _      -> Set.empty   -- do not add pattern vars     A.ConP _ _ ps -> dotVars ps     A.DefP _ _ ps -> dotVars ps     A.DotP _ e    -> dotVars e@@ -333,10 +439,13 @@     A.ImplicitP _ -> Set.empty     A.AsP _ _ p   -> dotVars p +-- | Getting all(!) variables of an expression.+--   It should only get free ones, but it does not matter to include+--   the bound ones. instance DotVars A.Expr where   dotVars e = case e of     A.ScopedExpr _ e -> dotVars e-    A.Var x          -> Set.singleton x+    A.Var x          -> Set.singleton x -- add any expression variable     A.Def _          -> Set.empty     A.Con _          -> Set.empty     A.Lit _          -> Set.empty@@ -346,17 +455,27 @@     A.WithApp _ e es -> dotVars (e, es)     A.Lam _ _ e      -> dotVars e     A.AbsurdLam _ _  -> Set.empty+    A.ExtendedLam _ _ _ cs -> dotVars cs     A.Pi _ tel e     -> dotVars (tel, e)     A.Fun _ a b      -> dotVars (a, b)     A.Set _ _        -> Set.empty     A.Prop _         -> Set.empty     A.Let _ _ _      -> __IMPOSSIBLE__     A.Rec _ es       -> dotVars $ map snd es+    A.RecUpdate _ e es -> dotVars (e, map snd es)     A.ETel _         -> __IMPOSSIBLE__     A.QuoteGoal {}   -> __IMPOSSIBLE__     A.Quote {}       -> __IMPOSSIBLE__-    A.DontCare       -> __IMPOSSIBLE__  -- Set.empty+    A.QuoteTerm {}   -> __IMPOSSIBLE__+    A.Unquote {}     -> __IMPOSSIBLE__+    A.DontCare v     -> dotVars v +instance DotVars RHS where+  dotVars (RHS e) = dotVars e+  dotVars AbsurdRHS = Set.empty+  dotVars (WithRHS _ es clauses) = __IMPOSSIBLE__ -- NZ+  dotVars (RewriteRHS _ es rhs _) = __IMPOSSIBLE__ -- NZ+ instance DotVars TypedBindings where   dotVars (TypedBindings _ bs) = dotVars bs @@ -364,8 +483,7 @@   dotVars (TBind _ _ e) = dotVars e   dotVars (TNoBind e)   = dotVars e -reifyPatterns :: MonadTCM tcm =>-  I.Telescope -> Permutation -> [Arg I.Pattern] -> tcm [NamedArg A.Pattern]+reifyPatterns :: I.Telescope -> Permutation -> [Arg I.Pattern] -> TCM [NamedArg A.Pattern] reifyPatterns tel perm ps = evalStateT (reifyArgs ps) 0   where     reifyArgs as = map (fmap unnamed) <$> mapM reifyArg as@@ -388,8 +506,7 @@         tick         if Set.member "()" vars           then return $ A.DotP i $ A.Underscore mi-          else lift $ A.DotP i <$> reify v-      I.LitP (LitLevel {}) -> __IMPOSSIBLE__+          else return $ A.DotP i t       I.LitP l             -> return (A.LitP l)       I.ConP c _ ps -> A.ConP i (AmbQ [c]) <$> reifyArgs ps       where@@ -418,46 +535,43 @@     reify s =         do  s <- instantiateFull s             case s of-                I.Type (I.Lit (LitLevel _ n)) -> return $ A.Set exprInfo n+                I.Type (I.Max [])                -> return $ A.Set exprInfo 0+                I.Type (I.Max [I.ClosedLevel n]) -> return $ A.Set exprInfo n                 I.Type a -> do                   a <- reify a                   return $ A.App exprInfo (A.Set exprInfo 0)                                           (defaultArg (unnamed a))                 I.Prop       -> return $ A.Prop exprInfo-                I.MetaS x as -> apps =<< reify (x, as)-                I.Suc s      ->-                    do  suc <- freshName_ "suc" -- TODO: hack-                        e   <- reify s-                        return $ A.App exprInfo (A.Var suc) (defaultArg $ unnamed e)                 I.Inf       -> A.Var <$> freshName_ "Setω"                 I.DLub s1 s2 -> do                   lub <- freshName_ "dLub" -- TODO: hack                   (e1,e2) <- reify (s1, I.Lam NotHidden $ fmap Sort s2)                   let app x y = A.App exprInfo x (defaultArg $ unnamed y)                   return $ A.Var lub `app` e1 `app` e2-                I.Lub s1 s2 ->-                    do  lub <- freshName_ "\\/" -- TODO: hack-                        (e1,e2) <- reify (s1,s2)-                        let app x y = A.App exprInfo x (defaultArg $ unnamed y)-                        return $ A.Var lub `app` e1 `app` e2 -instance Reify i a => Reify (Abs i) (Name, a) where-    reify (Abs s v) =-        do  x <- freshName_ s-            e <- addCtx x (defaultArg $ sort I.Prop) -- type doesn't matter-                 $ reify v-            return (x,e)+instance Reify Level Expr where+  reify l = reify =<< reallyUnLevelView l +instance (Free i, Reify i a) => Reify (Abs i) (Name, a) where+  reify (NoAbs x v) = (,) <$> freshName_ x <*> reify v+  reify (Abs s v) = do++    -- If the bound variable is free in the body, then the name "_" is+    -- replaced by "z".+    s <- return $ if s == "_" && 0 `freeIn` v then "z" else s++    x <- freshName_ s+    e <- addCtx x (defaultArg $ sort I.Prop) -- type doesn't matter+         $ reify v+    return (x,e)+ instance Reify I.Telescope A.Telescope where   reify EmptyTel = return []   reify (ExtendTel arg tel) = do     Arg h rel e <- reify arg-    (x,bs)  <- reify $ betterName tel+    (x,bs)  <- reify tel     let r = getRange e-    return $ TypedBindings r (Arg h rel [TBind r [x] e]) : bs-    where-      betterName (Abs "_" x) = Abs "z" x-      betterName (Abs s   x) = Abs s   x+    return $ TypedBindings r (Arg h rel (TBind r [x] e)) : bs  instance Reify i a => Reify (Arg i) (Arg a) where     reify = traverse reify@@ -471,4 +585,4 @@ instance (Reify t t', Reify a a')          => Reify (Judgement t a) (Judgement t' a') where     reify (HasType i t) = HasType <$> reify i <*> reify t-    reify (IsSort i) = IsSort <$> reify i+    reify (IsSort  i t) = IsSort  <$> reify i <*> reify t
src/full/Agda/Termination/SparseMatrix.hs view
@@ -134,7 +134,7 @@     showString "Agda.Termination.Matrix.fromLists " . shows (size m) .     showString " " . shows (toLists m) -instance (Integral i, HasZero b, Pretty b) =>+instance (Show i, Integral i, HasZero b, Pretty b) =>          Pretty (Matrix i b) where   pretty = vcat . map (hsep . map pretty) . toLists @@ -142,7 +142,7 @@          => Arbitrary (Matrix i b) where   arbitrary     = matrix =<< arbitrary -instance (Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b) where+instance (Show i, Ord i, Integral i, Enum i, CoArbitrary b, HasZero b) => CoArbitrary (Matrix i b) where   coarbitrary m = coarbitrary (toLists m)  @@ -199,7 +199,7 @@  -- | Converts a sparse matrix to a sparse list of rows -toSparseRows :: (Num i, Enum i) => Matrix i b -> [(i,[(i,b)])]+toSparseRows :: (Eq i, Num i, Enum i) => Matrix i b -> [(i,[(i,b)])] toSparseRows m = aux 1 [] (unM m)   where aux i' [] []  = []         aux i' row [] = [(i', reverse row)]@@ -208,7 +208,7 @@             | otherwise = (i', reverse row) : aux i [(j,b)] m  -- sparse vectors cannot have two entries in one column-blowUpSparseVec :: (Ord i, Num i, Enum i) => b -> i -> [(i,b)] -> [b]+blowUpSparseVec :: (Show i, Ord i, Num i, Enum i) => b -> i -> [(i,b)] -> [b] blowUpSparseVec zero n l = aux 1 l   where aux i [] | i > n = []                  | otherwise = zero : aux (i+1) []@@ -219,7 +219,7 @@  -- | Converts a matrix to a list of row lists. -toLists :: (Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]]+toLists :: (Show i, Ord i, Integral i, Enum i, HasZero b) => Matrix i b -> [[b]] toLists m = blowUpSparseVec emptyRow (rows sz) $     map (\ (i,r) -> (i, blowUpSparseVec zeroElement (cols sz) r)) $ toSparseRows m --            [ [ maybe zeroElement id $ lookup (MIx { row = r, col = c }) (unM m)@@ -355,7 +355,7 @@ -- -- Precondition: @'square' m@. -diagonal :: (Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b+diagonal :: (Show i, Enum i, Num i, Ix i, HasZero b) => Matrix i b -> Array i b diagonal m = listArray (1, rows sz) $ blowUpSparseVec zeroElement (rows sz) $   map (\ ((MIx i j),b) -> (i,b)) $ filter (\ ((MIx i j),b) -> i==j) (unM m)   where sz = size m
src/full/Agda/Termination/TermCheck.hs view
@@ -12,6 +12,7 @@     , Result, DeBruijnPat     ) where +import Control.Applicative import Control.Monad.Error import Data.List as List import qualified Data.Map as Map@@ -19,7 +20,6 @@ import qualified Data.Maybe as Maybe import qualified Data.Set as Set import Data.Set (Set)-import Text.PrettyPrint (Doc)  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal@@ -44,6 +44,8 @@ import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Monad.Signature (isProjection) import Agda.TypeChecking.Primitive (constructorForm)+import Agda.TypeChecking.Level (reallyUnLevelView)+import Agda.TypeChecking.Substitute  import qualified Agda.Interaction.Highlighting.Range as R import Agda.Interaction.Options@@ -54,15 +56,12 @@ #include "../undefined.h" import Agda.Utils.Impossible -type Calls = Term.CallGraph (Set R.Range)+type Calls = Term.CallGraph (Set CallInfo) type MutualNames = [QName] --- | The result of termination checking a module is a list of--- problematic mutual blocks (represented by the names of the--- functions in the block), along with the ranges for the problematic--- call sites (call site paths).+-- | The result of termination checking a module. -type Result = [([A.QName], [R.Range])]+type Result = [TerminationError]  -- | Termination check a sequence of declarations. termDecls :: [A.Declaration] -> TCM Result@@ -77,13 +76,13 @@     A.Axiom {}            -> return []     A.Field {}            -> return []     A.Primitive {}        -> return []-    A.Definition _ _ ds-      | [A.RecDef _ r _ _ _ rds] <- unscopeDefs ds+    A.Mutual _ ds+      | [A.RecSig{}, A.RecDef _ r _ _ _ rds] <- unscopeDefs ds                           -> do         let m = mnameFromList $ qnameToList r         setScopeFromDefs ds         termSection m rds-    A.Definition i ts ds  -> termMutual i ts ds+    A.Mutual i ds  -> termMutual i ds     A.Section _ x _ ds    -> termSection x ds     A.Apply {}            -> return []     A.Import {}           -> return []@@ -92,15 +91,20 @@         -- open is just an artifact from the concrete syntax     A.ScopedDecl{}        -> __IMPOSSIBLE__         -- taken care of above+    -- These should all be wrapped in mutual blocks+    A.FunDef{}  -> __IMPOSSIBLE__+    A.DataSig{} -> __IMPOSSIBLE__+    A.DataDef{} -> __IMPOSSIBLE__+    A.RecSig{}  -> __IMPOSSIBLE__+    A.RecDef{}  -> __IMPOSSIBLE__   where     setScopeFromDefs = mapM_ setScopeFromDef-    setScopeFromDef (A.ScopedDef scope d) =-      setScope scope >> setScopeFromDef d+    setScopeFromDef (A.ScopedDecl scope d) = setScope scope     setScopeFromDef _ = return ()      unscopeDefs = concatMap unscopeDef -    unscopeDef (A.ScopedDef _ d) = unscopeDef d+    unscopeDef (A.ScopedDecl _ ds) = unscopeDefs ds     unscopeDef d = [d]  collectCalls :: (a -> TCM Calls) -> [a] -> TCM Calls@@ -110,8 +114,8 @@                              return (c1 `Term.union` c2)  -- | Termination check a bunch of mutually inductive recursive definitions.-termMutual :: Info.DeclInfo -> [A.TypeSignature] -> [A.Definition] -> TCM Result-termMutual i ts ds = if names == [] then return [] else+termMutual :: Info.DeclInfo -> [A.Declaration] -> TCM Result+termMutual i ds = if names == [] then return [] else   do -- get list of sets of mutually defined names from the TCM      -- this includes local and auxiliary functions introduced      -- during type-checking@@ -175,24 +179,24 @@                    ]                  return $ Term.terminates calls2      case r of-       Left  errDesc -> do-         let callSites = Set.toList errDesc-         return [(names, callSites)] -- TODO: this could be changed to-                                     -- [(allNames, callSites)]+       Left calls -> do+         return [TerminationError+                   { termErrFunctions = names+                     -- TODO: This could be changed to allNames.+                   , termErrCalls     = Set.toList calls+                   }+                ]        Right _ -> do          reportSLn "term.warn.yes" 2                      (show (names) ++ " does termination check")          return []   where   getName (A.FunDef i x cs)       = [x]-  getName (A.ScopedDef _ d)       = getName d-  getName (A.RecDef _ _ _ _ _ ds) = concatMap getNameD ds-  getName _                       = []--  getNameD (A.Definition _ _ ds) = concatMap getName ds-  getNameD (A.Section _ _ _ ds)  = concatMap getNameD ds-  getNameD (A.ScopedDecl _ ds)   = concatMap getNameD ds-  getNameD _                     = []+  getName (A.RecDef _ _ _ _ _ ds) = concatMap getName ds+  getName (A.Mutual _ ds)       = concatMap getName ds+  getName (A.Section _ _ _ ds)  = concatMap getName ds+  getName (A.ScopedDecl _ ds)   = concatMap getName ds+  getName _                     = []    -- the mutual names mentioned in the abstract syntax   names = concatMap getName ds@@ -225,8 +229,7 @@ 	      ]         case (theDef def) of           Function{ funClauses = cls } ->-            collectCalls (termClause use names name) $-              map translatedClause cls+            collectCalls (termClause use names name) cls           _ -> return Term.empty  @@ -300,7 +303,7 @@ termToDBP conf t   | not $ useDotPatterns conf = return $ unusedVar   | otherwise                 = do-    t <- constructorForm t+    t <- stripProjections =<< constructorForm t     case t of       Var i []    -> return $ VarDBP i       Con c args  -> ConDBP c <$> mapM (termToDBP conf . unArg) args@@ -335,12 +338,8 @@ -} stripBind :: DBPConf -> Nat -> Pattern -> ClauseBody -> TCM (Maybe (Nat, DeBruijnPat, ClauseBody)) stripBind _ _ _ NoBody            = return Nothing-stripBind conf i (VarP x) (NoBind b) = return $ Just (i, unusedVar, b) stripBind conf i (VarP x) (Bind b)   = return $ Just (i - 1, VarDBP i, absBody b) stripBind conf i (VarP x) (Body b)   = __IMPOSSIBLE__-stripBind conf i (DotP t) (NoBind b) = do-  t <- termToDBP conf t-  return $ Just (i, t, b) stripBind conf i (DotP t) (Bind b)   = do   t <- termToDBP conf t   return $ Just (i - 1, t, absBody b)@@ -374,8 +373,9 @@ termClause use names name (Clause { clauseTel  = tel                                   , clausePerm = perm                                   , clausePats = argPats'-                                  , clauseBody = body }) = do-    argPats' <- addCtxTel tel $ normalise argPats'+                                  , clauseBody = body }) =+  addCtxTel tel $ do+    argPats' <- normalise argPats'     -- The termination checker doesn't know about reordered telescopes     let argPats = substs (renamingR perm) argPats'     dbs <- stripBinds use (nVars - 1) (map unArg argPats) body@@ -390,7 +390,6 @@   where     nVars = boundVars body     boundVars (Bind b)   = 1 + boundVars (absBody b)-    boundVars (NoBind b) = boundVars b     boundVars NoBody     = 0     boundVars (Body _)   = 0 @@ -416,17 +415,15 @@        loopSort :: (?cutoff :: Int) => [DeBruijnPat] -> Sort -> TCM Calls        loopSort pats s = do          case s of-           Type t -> loop pats Term.unknown t+           Type (Max [])              -> return Term.empty+           Type (Max [ClosedLevel _]) -> return Term.empty+           Type t -> loop pats Term.unknown (Level t)            Prop   -> return Term.empty            Inf    -> return Term.empty-           Lub s1 s2 -> liftM2 Term.union-             (loopSort pats s1)-             (loopSort pats s2)-           DLub s1 (Abs x s2) -> liftM2 Term.union+           DLub s1 (NoAbs x s2) -> Term.union <$> loopSort pats s1 <*> loopSort pats s2+           DLub s1 (Abs x s2)   -> liftM2 Term.union              (loopSort pats s1)-             (loopSort (map liftDBP pats) s2)-           Suc s -> loopSort pats s-           MetaS _ _ -> return Term.empty  -- see comment on MetaV below+             (addCtxString x __IMPOSSIBLE__ $ loopSort (map liftDBP pats) s2)         loopType :: (?cutoff :: Int) => [DeBruijnPat] -> Order -> Type -> TCM Calls        loopType pats guarded (El s t) = liftM2 Term.union@@ -472,8 +469,8 @@                args2 <- mapM instantiateFull args1                 -- We have to reduce constructors in case they're reexported.-               let reduceCon t@(Con _ _) = reduce t-                   reduceCon t           = return t+               let reduceCon (Con c vs) = (`apply` vs) <$> reduce (Con c [])  -- make sure we don't reduce the arguments+                   reduceCon t          = return t                args2 <- mapM reduceCon args2                args  <- mapM etaContract args2 @@ -482,7 +479,7 @@                isProj <- isProjection g                let unguards = repeat Term.unknown                let guards = maybe unguards -- not a proj. ==> unguarded-                              (\ n -> take (n - 1) unguards ++ guarded : unguards)+                              (\ _ -> guarded : unguards)                                 -- proj. => preserve g. of princ. arg. (counting starts with 1)                               isProj                -- collect calls in the arguments of this call@@ -516,30 +513,33 @@                                <+> hsep (map prettyTCM pats)                             , nest 2 $ text "to" <+> prettyTCM g <+>                                         hsep (map (parens . prettyTCM) args)-                            , nest 2 $ text ("call matrix (with guardeness): " ++ show matrix')+                            , nest 2 $ text ("call matrix (with guardedness): " ++ show matrix')                             ]) +                     doc <- prettyTCM (Def g args0)                      return                        (Term.insert                          (Term.Call { Term.source = fInd                                     , Term.target = toInteger gInd'                                     , Term.cm     = makeCM ncols nrows matrix'                                     })-                         -- Note that only the base part of the-                         -- name is collected here.-                         (Set.fromList $ fst $ R.getRangesA g)+                         (Set.singleton+                            (CallInfo { callInfoRange = getRange g+                                      , callInfoCall  = show doc+                                      }))                          calls)            case t of              -- Constructed value.-            Con c args ->-              constructor c Inductive $ zip args (repeat True)+            Con c args+              | Just c == sharp conf ->+                constructor c CoInductive $ zip args (repeat True)+              | otherwise ->+                constructor c Inductive $ zip args (repeat True)              Def g args0-              | Just g == sharp conf ->-                constructor g CoInductive $ zip args0 (repeat True)               | guardingTypeConstructors conf -> do                 gDef <- theDef <$> getConstInfo g                 case gDef of@@ -550,7 +550,8 @@               where               -- Data or record type constructor.               con occs =-                constructor g Inductive $+                constructor g Inductive $   -- guardedness preserving+                -- constructor g CoInductive $ -- guarding! (Andreas, 2011-04-10) -- does not work, might lead to infinite unfolding in eq. checking (Ripley!)                   zip args0 (map preserves occs ++ repeat False)                 where                 preserves Positive = True@@ -561,19 +562,25 @@               fun = function g args0              -- Abstraction. Preserves guardedness.-            Lam h (Abs x t) -> loop (map liftDBP pats) guarded t+            Lam h (Abs x t) -> addCtxString x (Arg { argHiding    = h+                                                   , argRelevance = __IMPOSSIBLE__+                                                   , unArg        = __IMPOSSIBLE__+                                                   }) $+              loop (map liftDBP pats) guarded t+            Lam h (NoAbs _ t) -> loop pats guarded t              -- Neutral term. Destroys guardedness.             Var i args -> collectCalls (loop pats Term.unknown) (map unArg args)              -- Dependent function space.-            Pi a (Abs _ b) ->+            Pi a (Abs x b) ->                do g1 <- loopType pats Term.unknown (unArg a)-                  g2 <- loopType (map liftDBP pats) piArgumentGuarded b+                  g2 <- addCtxString x a $+                        loopType (map liftDBP pats) piArgumentGuarded b                   return $ g1 `Term.union` g2              -- Non-dependent function space.-            Fun a b ->+            Pi a (NoAbs _ b) ->                do g1 <- loopType pats Term.unknown (unArg a)                   g2 <- loopType pats piArgumentGuarded b                   return $ g1 `Term.union` g2@@ -588,15 +595,19 @@ 	    -- will be a warning for them anyway.             MetaV x args -> return Term.empty -            -- Erased proof.-            DontCare -> return Term.empty+            -- Erased and not-yet-erased proof.+            DontCare t -> loop pats guarded t +            -- Level.+            Level l -> loop pats guarded =<< reallyUnLevelView l+          where          -- Should function and Π type constructors be treated as          -- preserving guardedness in their right arguments?          piArgumentGuarded =            if guardingTypeConstructors conf then-             guarded+             guarded   -- preserving guardedness+             -- Term.lt      -- guarding! (Andreas, 2011-04-10)  -- SEE ABOVE             else              Term.unknown @@ -657,17 +668,61 @@   LitDBP _    -> []  compareTerm :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order-compareTerm suc t p = compareTerm' suc t p+compareTerm suc t p = do+  t <- stripAllProjections t+  compareTerm' suc t p+ {- compareTerm t p = Term.supremum $ compareTerm' t p : map cmp (subPatterns p)   where     cmp p' = (Term..*.) Term.lt (compareTerm' t p') -} +-- | Remove projections until a term is no longer a projection.+--   Also, remove 'DontCare's.+stripProjections :: Term -> TCM Term+stripProjections (DontCare t) = stripProjections t+stripProjections t@(Def qn ts@(~(r : _))) = do+  isProj <- isProjection qn+  case isProj of+    Just{} | not (null ts) -> stripProjections $ unArg r+    _ -> return t+stripProjections t = return t++-- | Remove all projections from an algebraic term (not going under binders).+class StripAllProjections a where+  stripAllProjections :: a -> TCM a++instance StripAllProjections a => StripAllProjections (Arg a) where+  stripAllProjections (Arg h r a) = Arg h r <$> stripAllProjections a++instance StripAllProjections a => StripAllProjections [a] where+  stripAllProjections = mapM stripAllProjections++instance StripAllProjections Term where+  stripAllProjections t = do+    t <- stripProjections t+    case t of+      Con c ts -> Con c <$> stripAllProjections ts+      Def d ts -> Def d <$> stripAllProjections ts+      _ -> return t++{-+-- | Remove all projections from an algebraic term (not going under binders).+stripAllProjections :: Term -> TCM Term+stripAllProjections t = do+  t <- stripProjections t+  case t of+    Con c ts -> Con c <$> mapM stripAllProjections ts+    Def d ts -> Def d <$> mapM stripAllProjections ts+    _ -> return t+-}+ -- | compareTerm t dbpat --   Precondition: top meta variable resolved compareTerm' :: (?cutoff :: Int) => Maybe QName -> Term -> DeBruijnPat -> TCM Term.Order-compareTerm' _ (Var i _)  p              = compareVar i p+compareTerm' _ (Var i _)      p = compareVar i p+compareTerm' suc (DontCare t) p = compareTerm' suc t p compareTerm' _ (Lit l)    (LitDBP l')   | l == l'   = return Term.le   | otherwise = return Term.unknown@@ -676,17 +731,19 @@   case t of     Lit _ -> return Term.unknown     _     -> compareTerm' suc t p+-- Andreas, 2011-04-19 give subterm priority over matrix order+compareTerm' _ t@Con{} (ConDBP c ps)+  | any (isSubTerm t) ps = decreaseFromConstructor c compareTerm' suc (Con c ts) (ConDBP c' ps)   | c == c' = compareConArgs suc ts ps compareTerm' suc (Def s ts) (ConDBP s' ps)   | s == s' && Just s == suc = compareConArgs suc ts ps-compareTerm' _ t@Con{} (ConDBP c ps)-  | any (isSubTerm t) ps = decreaseFromConstructor c -- new cases for counting constructors / projections -- register also increase compareTerm' suc (Def s ts) p | Just s == suc = do     os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts     return $ decr (-1) .*. infimum os+{- Andreas 2011-07-07 Projections are now being removed in a preprocess -- projections are size preserving compareTerm' suc (Def qn ts) p = do     isProj <- isProjection qn@@ -696,10 +753,12 @@         compareTerm' suc (unArg (ts !! (n - 1))) p       -- not a projection or underapplied:       _ -> return Term.unknown+-} compareTerm' suc (Con c ts) p = do     os <- mapM (\ t -> compareTerm' suc (unArg t) p) ts     oc <- increaseFromConstructor c     return $ if (null os) then Term.unknown else oc .*. infimum os+compareTerm' suc t p | isSubTerm t p = return Term.le compareTerm' _ _ _ = return Term.unknown  -- TODO: isSubTerm should compute a size difference (Term.Order)
src/full/Agda/TypeChecking/Abstract.hs view
@@ -14,7 +14,7 @@ piAbstractTerm :: Term -> Type -> Type -> Type piAbstractTerm v a b = fun a (abstractTerm v b)   where-    fun a b = El s $ Pi (Arg NotHidden Relevant a) $ Abs "w" b+    fun a b = El s $ Pi (Arg NotHidden Relevant a) $ mkAbs "w" b       where s = (sLub `on` getSort) a b  class AbstractTerm a where@@ -29,38 +29,55 @@     Def c vs    -> Def c $ absT vs     Con c vs    -> Con c $ absT vs     Pi a b      -> uncurry Pi $ absT (a, b)-    Fun a b      -> uncurry Fun $ absT (a, b)     Lit l       -> Lit l+    Level l     -> Level $ absT l     Sort s      -> Sort $ absT s     MetaV m vs  -> MetaV m $ absT vs-    DontCare    -> DontCare+    DontCare mv -> DontCare $ absT mv     where       absT x = abstractTerm u x  instance AbstractTerm Type where-  abstractTerm u (El s v) = El s $ abstractTerm u v+  abstractTerm u (El s v) = El (abstractTerm u s) (abstractTerm u v)  instance AbstractTerm Sort where   abstractTerm u s = case s of     Type n     -> Type $ absS n     Prop       -> Prop-    Suc s      -> Suc $ absS s-    Lub s1 s2  -> Lub (absS s1) (absS s2)-    MetaS m as -> MetaS m (absS as)     Inf        -> Inf     DLub s1 s2 -> DLub (absS s1) (absS s2)     where absS x = abstractTerm u x +instance AbstractTerm Level where+  abstractTerm u (Max as) = Max $ abstractTerm u as++instance AbstractTerm PlusLevel where+  abstractTerm u l@ClosedLevel{} = l+  abstractTerm u (Plus n l) = Plus n $ abstractTerm u l++instance AbstractTerm LevelAtom where+  abstractTerm u l = case l of+    MetaLevel m vs   -> MetaLevel m    $ abstractTerm u vs+    NeutralLevel v   -> NeutralLevel   $ abstractTerm u v+    BlockedLevel _ v -> UnreducedLevel $ abstractTerm u v -- abstracting might remove the blockage+    UnreducedLevel v -> UnreducedLevel $ abstractTerm u v+ instance AbstractTerm a => AbstractTerm (Arg a) where   abstractTerm = fmap . abstractTerm  instance AbstractTerm a => AbstractTerm [a] where   abstractTerm = fmap . abstractTerm -instance (Subst a, AbstractTerm a) => AbstractTerm (Abs a) where-  abstractTerm u (Abs x v) = Abs x $ swap $ abstractTerm (raise 1 u) v+instance AbstractTerm a => AbstractTerm (Maybe a) where+  abstractTerm = fmap . abstractTerm++instance (Raise a, AbstractTerm a) => AbstractTerm (Abs a) where+  abstractTerm u (NoAbs x v) = NoAbs x $ abstractTerm u v+  abstractTerm u (Abs   x v) = Abs x $ rename swap $ abstractTerm (raise 1 u) v     where-      swap = substs $ [Var 1 [], Var 0 []] ++ [Var i [] | i <- [2..]]+      swap 0 = 1+      swap 1 = 0+      swap i = i  instance (AbstractTerm a, AbstractTerm b) => AbstractTerm (a, b) where   abstractTerm u (x, y) = (abstractTerm u x, abstractTerm u y)
src/full/Agda/TypeChecking/CompiledClause.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable #-}+{-# LANGUAGE TypeOperators, CPP, DeriveDataTypeable, DeriveFunctor #-} module Agda.TypeChecking.CompiledClause where  import qualified Data.Map as Map@@ -9,80 +9,33 @@ import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.Syntax.Literal-import Agda.Utils.List import Agda.Utils.Pretty -import Agda.Utils.Impossible-#include "../undefined.h"- type key :-> value = Map key value  data Case c = Branches { conBranches    :: QName   :-> c                        , litBranches    :: Literal :-> c                        , catchAllBranch :: Maybe c                        }-  deriving (Typeable, Data)+  deriving (Typeable, Data, Functor)  data CompiledClauses   = Case Int (Case CompiledClauses)-  | Done Int Term+    -- ^ @Case n bs@ stands for a match on the @n@-th argument+    -- (counting from zero) with @bs@ as the case branches.+  | Done [Arg String] Term+    -- ^ @Done xs b@ stands for the body @b@ where the @xs@ contains hiding+    --   and name suggestions for the free variables. This is needed to build+    --   lambdas on the right hand side for partial applications which can+    --   still reduce.   | Fail+    -- ^ Absurd case.   deriving (Typeable, Data) --- | Note that it is the /translated/ clauses which are compiled, not--- the original ones.--compileClauses :: [Clauses] -> CompiledClauses-compileClauses cs =-  compile [ (clausePats c, clauseBody c)-          | Clauses { translatedClause = c } <- cs-          ]--type Cl  = ([Arg Pattern], ClauseBody)-type Cls = [Cl]--compile :: Cls -> CompiledClauses-compile cs = case nextSplit cs of-  Just n  -> Case n $ fmap compile $ splitOn n cs-  Nothing -> case map getBody cs of-    [Just (m, t)] -> Done m t-    _             -> Fail-  where-    getBody (_, b) = body b-    body (Bind b)   = inc $ body (absBody b)-    body (NoBind b) = body b-    body (Body t)   = Just (0, t)-    body NoBody     = Nothing-    inc Nothing       = Nothing-    inc (Just (n, t)) = Just (n + 1, t)--nextSplit :: Cls -> Maybe Int-nextSplit [] = __IMPOSSIBLE__-nextSplit ((ps, _):_) = mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]-  where-    isPat VarP{} = False-    isPat DotP{} = False-    isPat ConP{} = True-    isPat LitP{} = True--splitOn :: Int -> Cls -> Case Cls-splitOn n cs = mconcat $ map (fmap (:[]) . splitC n) cs--splitC :: Int -> Cl -> Case Cl-splitC n (ps, b) = case unArg p of-  ConP c _ qs -> conCase c (ps0 ++ qs ++ ps1, b)-  LitP l      -> litCase l (ps0 ++ ps1, b)-  _           -> catchAll (ps, b)-  where-    (ps0, p, ps1) = extractNthElement' n ps- litCase l x = Branches Map.empty (Map.singleton l x) Nothing conCase c x = Branches (Map.singleton c x) Map.empty Nothing catchAll x  = Branches Map.empty Map.empty (Just x) -instance Functor Case where-  fmap f (Branches cs ls m) = Branches (fmap f cs) (fmap f ls) (fmap f m)- instance Monoid m => Monoid (Case m) where   mempty = Branches Map.empty Map.empty Nothing   mappend (Branches cs  ls  m)@@ -108,7 +61,7 @@              | (x, v) <- Map.toList m ]  instance Pretty CompiledClauses where-  pretty (Done m t)  = text ("done[" ++ show m ++ "]") <+> text (show t)+  pretty (Done hs t)  = text ("done" ++ show hs) <+> text (show t)   pretty Fail        = text "fail"   pretty (Case n bs) =     sep [ text ("case " ++ show n ++ " of")
+ src/full/Agda/TypeChecking/CompiledClause/Compile.hs view
@@ -0,0 +1,124 @@+{-# LANGUAGE CPP #-}+module Agda.TypeChecking.CompiledClause.Compile where++import Data.Monoid+import qualified Data.Map as Map+import Data.List (genericReplicate, nubBy)+import Data.Function++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Monad+import Agda.TypeChecking.RecordPatterns+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.Pretty+import Agda.Utils.List++import Agda.Utils.Impossible+#include "../../undefined.h"++compileClauses ::+  Bool -- ^ Translate record patterns?+  -> [Clause] -> TCM CompiledClauses+compileClauses translate cs = do+  cs <- if translate then+          mapM translateRecordPatterns cs+         else+          return cs+  return $ compile [(clausePats c, clauseBody c) | c <- cs]++type Cl  = ([Arg Pattern], ClauseBody)+type Cls = [Cl]++compile :: Cls -> CompiledClauses+compile cs = case nextSplit cs of+  Just n  -> Case n $ fmap compile $ splitOn n cs+  Nothing -> case map getBody cs of+    -- It's possible to get more than one clause here due to+    -- catch-all expansion.+    Just t : _  -> Done (map (fmap name) $ fst $ head cs) t+    Nothing : _ -> Fail+    []          -> __IMPOSSIBLE__+  where+    name (VarP x) = x+    name (DotP _) = "_"+    name ConP{} = __IMPOSSIBLE__+    name LitP{} = __IMPOSSIBLE__+    getBody (_, b) = body b+    body (Bind b)   = body (absBody b)+    body (Body t)   = Just t+    body NoBody     = Nothing++nextSplit :: Cls -> Maybe Int+nextSplit [] = __IMPOSSIBLE__+nextSplit ((ps, _):_) = mhead [ n | (a, n) <- zip ps [0..], isPat (unArg a) ]+  where+    isPat VarP{} = False+    isPat DotP{} = False+    isPat ConP{} = True+    isPat LitP{} = True++splitOn :: Int -> Cls -> Case Cls+splitOn n cs = mconcat $ map (fmap (:[]) . splitC n) $ expandCatchAlls n cs++splitC :: Int -> Cl -> Case Cl+splitC n (ps, b) = case unArg p of+  ConP c _ qs -> conCase c (ps0 ++ qs ++ ps1, b)+  LitP l      -> litCase l (ps0 ++ ps1, b)+  _           -> catchAll (ps, b)+  where+    (ps0, p, ps1) = extractNthElement' n ps++-- Expand catch-alls that appear before actual matches.+expandCatchAlls :: Int -> Cls -> Cls+expandCatchAlls n cs = case cs of+  _            | all (isCatchAll . nth . fst) cs -> cs+  (ps, b) : cs | not (isCatchAll (nth ps)) -> (ps, b) : expandCatchAlls n cs+               | otherwise -> map (expand ps b) expansions ++ (ps, b) : expandCatchAlls n cs+  _ -> __IMPOSSIBLE__+  where+    isCatchAll (Arg _ _ ConP{}) = False+    isCatchAll (Arg _ _ LitP{}) = False+    isCatchAll _      = True+    nth qs = p+      where (_, p, _) = extractNthElement' n qs++    classify (LitP l)     = Left l+    classify (ConP c _ _) = Right c+    classify _            = __IMPOSSIBLE__++    -- All non-catch-all patterns following this one (at position n).+    -- These are the cases the wildcard needs to be expanded into.+    expansions = nubBy ((==) `on` classify)+               . map unArg+               . filter (not . isCatchAll)+               . map (nth . fst) $ cs++    expand ps b q =+      case q of+        ConP c _ qs' -> (ps0 ++ [defaultArg $ ConP c Nothing (genericReplicate m $ defaultArg $ VarP "_")] ++ ps1,+                         substBody n' m (Con c (map var [m - 1, m - 2..0])) b)+          where m = fromIntegral $ length qs'+        LitP l -> (ps0 ++ [defaultArg $ LitP l] ++ ps1, substBody n' 0 (Lit l) b)+        _ -> __IMPOSSIBLE__+      where+        (ps0, _, ps1) = extractNthElement' n ps++        n' = countVars ps0+        countVars = sum . map (count . unArg)+        count VarP{}        = 1+        count (ConP _ _ ps) = countVars ps+        count DotP{}        = 1   -- dot patterns are treated as variables in the clauses+        count _             = 0++        var x = defaultArg $ Var x []++substBody :: Int -> Integer -> Term -> ClauseBody -> ClauseBody+substBody _ _ _ NoBody = NoBody+substBody 0 m v b = case b of+  Bind   b -> foldr (.) id (genericReplicate m (Bind . Abs "_")) $ subst v (absBody $ raise m b)+  _        -> __IMPOSSIBLE__+substBody n m v b = case b of+  Bind b   -> Bind $ fmap (substBody (n - 1) m v) b+  _        -> __IMPOSSIBLE__
+ src/full/Agda/TypeChecking/CompiledClause/Compile.hs-boot view
@@ -0,0 +1,7 @@+module Agda.TypeChecking.CompiledClause.Compile where++import Agda.Syntax.Internal+import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Monad.Base++compileClauses :: Bool -> [Clause] -> TCM CompiledClauses
src/full/Agda/TypeChecking/CompiledClause/Match.hs view
@@ -4,6 +4,7 @@ import Control.Applicative import qualified Data.Map as Map import Data.Traversable+import Data.List  import Agda.Syntax.Internal import Agda.Syntax.Common@@ -27,46 +28,58 @@  match :: CompiledClauses -> MaybeReducedArgs -> (Args -> Args) -> Stack -> TCM (Reduced (Blocked Args) Term) match Fail args patch stack = return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args)-match (Done _ t) args _ _ =-  return $ YesReduction $ substs (reverse $ map (unArg . ignoreReduced) args) t-match (Case n bs) args patch stack = do-  let (args0, MaybeRed red (Arg h r v0), args1) = extractNthElement' n args-  w  <- case red of-          Reduced b  -> return $ fmap (const v0) b-          NotReduced ->-            unfoldCorecursion =<< instantiate v0-  cv <- constructorForm $ ignoreBlocking w-  let v      = ignoreBlocking w-      args'  = args0 ++ [MaybeRed red $ Arg h r v] ++ args1-      stack' = maybe [] (\c -> [(c, args', patch)]) (catchAllBranch bs)-               ++ stack-      patchLit args = patch (args0 ++ [Arg h r v] ++ args1)-        where (args0, args1) = splitAt n args-      patchCon c m args = patch (args0 ++ [Arg h r $ Con c vs] ++ args1)-        where (args0, args1') = splitAt n args-              (vs, args1)     = splitAt m args1'-  case w of-    Blocked x _            -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')-    NotBlocked (MetaV x _) -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')-    NotBlocked (Lit l) -> case Map.lookup l (litBranches bs) of-      Nothing -> match' stack''-      Just cc -> match cc (args0 ++ args1) patchLit stack''-      where-        stack'' = (++ stack') $ case cv of-          Con c vs -> case Map.lookup c (conBranches bs) of-            Nothing -> []-            Just cc -> [(cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]-          _        -> []-    NotBlocked (Con c vs) -> case Map.lookup c (conBranches bs) of-      Nothing -> match' stack'-      Just cc -> match cc (args0 ++ map (MaybeRed red) vs ++ args1)-                          (patchCon c (length vs)) stack'-    NotBlocked _ -> return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args')+match (Done xs t) args _ _+  | m < n     = return $ YesReduction $ substs (reverse $ toTm args)+                                      $ foldr lam t (drop m xs)+  | otherwise = return $ YesReduction $ substs (reverse $ toTm args0) t `apply` map ignoreReduced args1+  where+    n              = length xs+    m              = length args+    toTm           = map (unArg . ignoreReduced)+    (args0, args1) = splitAt n args+    lam x t        = Lam (argHiding x) (Abs (unArg x) t)+match (Case n bs) args patch stack =+  case genericSplitAt n args of+    (_, []) -> return $ NoReduction $ NotBlocked $ patch $ map ignoreReduced args+    (args0, MaybeRed red (Arg h r v0) : args1) -> do+      w  <- case red of+              Reduced b  -> return $ fmap (const v0) b+              NotReduced ->+                unfoldCorecursion =<< instantiate v0+      cv <- constructorForm $ ignoreBlocking w+      let v      = ignoreBlocking w+          args'  = args0 ++ [MaybeRed red $ Arg h r v] ++ args1+          stack' = maybe [] (\c -> [(c, args', patch)]) (catchAllBranch bs)+                   ++ stack+          patchLit args = patch (args0 ++ [Arg h r v] ++ args1)+            where (args0, args1) = splitAt n args+          patchCon c m args = patch (args0 ++ [Arg h r $ Con c vs] ++ args1)+            where (args0, args1') = splitAt n args+                  (vs, args1)     = splitAt m args1'+      case w of+        Blocked x _            -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')+        NotBlocked (MetaV x _) -> return $ NoReduction $ Blocked x (patch $ map ignoreReduced args')+        NotBlocked (Lit l) -> case Map.lookup l (litBranches bs) of+          Nothing -> match' stack''+          Just cc -> match cc (args0 ++ args1) patchLit stack''+          where+            stack'' = (++ stack') $ case cv of+              Con c vs -> case Map.lookup c (conBranches bs) of+                Nothing -> []+                Just cc -> [(cc, args0 ++ map (MaybeRed red) vs ++ args1, patchCon c (length vs))]+              _        -> []+        NotBlocked (Con c vs) -> case Map.lookup c (conBranches bs) of+          Nothing -> match' stack'+          Just cc -> match cc (args0 ++ map (MaybeRed red) vs ++ args1)+                              (patchCon c (length vs)) stack'+        NotBlocked _ -> return $ NoReduction $ NotBlocked (patch $ map ignoreReduced args')  match' :: Stack -> TCM (Reduced (Blocked Args) Term) match' ((c, args, patch):stack) = match c args patch stack match' [] = typeError $ GenericError "Incomplete pattern matching"  unfoldCorecursion v = case v of-  Def f args -> unfoldDefinition True reduceB (Def f []) f args+  -- Andreas, 2011-10-03 removing DontCare here allow matching on irrelevant things+  DontCare v -> unfoldCorecursion v+  Def f args -> unfoldDefinition True unfoldCorecursion (Def f []) f args   _          -> reduceB v
src/full/Agda/TypeChecking/CompiledClause/Match.hs-boot view
@@ -7,4 +7,3 @@ import Agda.TypeChecking.CompiledClause  matchCompiled :: CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Args) Term)-
src/full/Agda/TypeChecking/Constraints.hs view
@@ -11,11 +11,16 @@ import Data.List as List import Data.Set as Set +import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Scope.Base import Agda.TypeChecking.Monad import Agda.TypeChecking.Errors import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute+import Agda.TypeChecking.LevelConstraints+import Agda.TypeChecking.MetaVars.Mention  import {-# SOURCE #-} Agda.TypeChecking.Rules.Term (checkExpr) import {-# SOURCE #-} Agda.TypeChecking.Conversion@@ -25,86 +30,138 @@ import Agda.TypeChecking.Free  import Agda.Utils.Fresh+import Agda.Utils.Monad  #include "../undefined.h" import Agda.Utils.Impossible --- | Catch pattern violation errors and adds a constraint.+-- | Catches pattern violation errors and adds a constraint. ---catchConstraint :: MonadTCM tcm => Constraint -> TCM Constraints -> tcm Constraints+catchConstraint :: Constraint -> TCM () -> TCM () catchConstraint c v = liftTCM $    catchError_ v $ \err ->    case errError err of-       PatternErr s -> put s >> buildConstraint c+        -- Not putting s (which should really be the what's already there) makes things go+        -- a lot slower (+20% total time on standard library). How is that possible??+        -- The problem is most likely that there are internal catchErrors which forgets the+        -- state. catchError should preserve the state on pattern violations.+       PatternErr s -> put s >> addConstraint c        _	    -> throwError err --- | Try to solve the constraints to be added.-addNewConstraints :: MonadTCM tcm => Constraints -> tcm ()-addNewConstraints cs = do addConstraints cs; wakeupConstraints+addConstraint :: Constraint -> TCM ()+addConstraint c = do+    pids <- asks envActiveProblems+    reportSDoc "tc.constr.add" 20 $ hsep+      [ text "adding constraint"+      , text (show pids)+      , prettyTCM c ]+    -- Need to reduce to reveal possibly blocking metas+    c <- reduce =<< instantiateFull c+    c' <- simpl c+    if (c /= c')+      then do+        reportSDoc "tc.constr.add" 20 $ text "  simplified:" <+> prettyTCM c'+        solveConstraint_ c'+      else addConstraint' c'+  where+    simpl :: Constraint -> TCM Constraint+    simpl c = do+      n <- genericLength <$> getContext+      let isLvl LevelCmp{} = True+          isLvl _          = False+      cs <- getAllConstraints+      lvls <- instantiateFull $ List.filter (isLvl . clValue . theConstraint) cs+      when (not $ List.null lvls) $ reportSDoc "tc.constr.add" 40 $ text "  simplifying using" <+> prettyTCM lvls+      return $ simplifyLevelConstraint n c lvls  -- | Don't allow the argument to produce any constraints.-noConstraints :: MonadTCM tcm => tcm Constraints -> tcm ()-noConstraints m = do-    cs <- solveConstraints =<< m-    unless (List.null cs) $ typeError $ UnsolvedConstraints cs-    return ()+noConstraints :: TCM a -> TCM a+noConstraints problem = liftTCM $ do+  (pid, x) <- newProblem problem+  cs <- getConstraintsForProblem pid+  unless (List.null cs) $ typeError $ UnsolvedConstraints cs+  return x --- | Guard constraint-guardConstraint :: MonadTCM tcm => tcm Constraints -> Constraint -> tcm Constraints-guardConstraint m c = do-    cs <- solveConstraints =<< m-    case List.partition isNonBlocking cs of-	(scs, []) -> (scs ++) <$> solveConstraint c-	(scs, cs) -> (scs ++) <$> buildConstraint (Guarded c cs)-    where-	isNonBlocking = isNB . clValue-	isNB SortCmp{}        = True-        isNB LevelCmp{}       = True-	isNB ValueCmp{}       = False-        isNB ArgsCmp{}        = False-	isNB TypeCmp{}        = False-	isNB TelCmp{}         = False-	isNB (Guarded c _)    = isNB c-	isNB UnBlock{}        = False-        isNB IsEmpty{}        = False+-- | Create a fresh problem for the given action.+newProblem :: TCM a -> TCM (ProblemId, a)+newProblem action = do+  pid <- fresh+  -- Don't get distracted by other constraints while working on the problem+  x <- nowSolvingConstraints $ solvingProblem pid action+  -- Now we can check any woken constraints+  solveAwakeConstraints+  return (pid, x) --- | We ignore the constraint ids and (as in Agda) retry all constraints every time.---   We probably generate very few constraints.-wakeupConstraints :: MonadTCM tcm => tcm ()-wakeupConstraints = do-    cs <- takeConstraints-    cs <- solveConstraints cs-    addConstraints cs+newProblem_ :: TCM () -> TCM ProblemId+newProblem_ action = fst <$> newProblem action -solveConstraints :: MonadTCM tcm => Constraints -> tcm Constraints-solveConstraints [] = return []-solveConstraints cs = do-    reportSDoc "tc.constr.solve" 60 $-      sep [ text "{ solving", nest 2 $ prettyTCM cs ]-    n  <- length <$> getInstantiatedMetas-    cs0 <- return cs-    cs <- concat <$> mapM (withConstraint solveConstraint) cs-    n' <- length <$> getInstantiatedMetas-    reportSDoc "tc.constr.solve" 70 $-      sep [ text "new constraints", nest 2 $ prettyTCM cs-          , nest 2 $ text $ "progress: " ++ show n' ++ " --> " ++ show n-          ]-    cs <- if (n' > n)-	then solveConstraints cs -- Go again if we made progress-	else return cs-    reportSLn "tc.constr.solve" 60 $ "solved constraints }"-    return cs+ifNoConstraints :: TCM a -> (a -> TCM b) -> (ProblemId -> a -> TCM b) -> TCM b+ifNoConstraints check ifNo ifCs = do+  (pid, x) <- newProblem check+  ifM (isProblemSolved pid) (ifNo x) (ifCs pid x) -solveConstraint :: MonadTCM tcm => Constraint -> tcm Constraints-solveConstraint (ValueCmp cmp a u v) = compareTerm cmp a u v-solveConstraint (ArgsCmp cmp a u v)  = compareArgs cmp a u v-solveConstraint (TypeCmp cmp a b)    = compareType cmp a b-solveConstraint (TelCmp cmp a b)     = compareTel  cmp a b-solveConstraint (SortCmp cmp s1 s2)  = compareSort cmp s1 s2-solveConstraint (LevelCmp cmp a b)   = compareLevel cmp a b-solveConstraint (Guarded c cs)       = guardConstraint (return cs) c-solveConstraint (IsEmpty t)          = isEmptyTypeC t-solveConstraint (UnBlock m)          = do+ifNoConstraints_ :: TCM () -> TCM a -> (ProblemId -> TCM a) -> TCM a+ifNoConstraints_ check ifNo ifCs = ifNoConstraints check (const ifNo) (\pid _ -> ifCs pid)++-- | @guardConstraint cs c@ tries to solve constraints @cs@ first.+--   If successful, it moves on to solve @c@, otherwise it returns+--   a @Guarded c cs@.+guardConstraint :: Constraint -> TCM () -> TCM ()+guardConstraint c blocker =+  ifNoConstraints_ blocker (solveConstraint_ c) (addConstraint . Guarded c)++whenConstraints :: TCM () -> TCM () -> TCM ()+whenConstraints action handler =+  ifNoConstraints_ action (return ()) $ \pid -> do+    stealConstraints pid+    handler++-- | Wake up the constraints depending on the given meta.+wakeupConstraints :: MetaId -> TCM ()+wakeupConstraints x = do+  wakeConstraints (mentionsMeta x)+  solveAwakeConstraints++-- | Wake up all constraints.+wakeupConstraints_ :: TCM ()+wakeupConstraints_ = do+  wakeConstraints (const True)+  solveAwakeConstraints++solveAwakeConstraints :: TCM ()+solveAwakeConstraints = do+    verboseS "profile.constraints" 10 $ liftTCM $ tickMax "max-open-constraints" . genericLength =<< getAllConstraints+    unlessM isSolvingConstraints $ nowSolvingConstraints solve+  where+    solve = do+      reportSDoc "tc.constr.solve" 10 $ hsep [ text "Solving awake constraints."+                                             , text . show . length =<< getAwakeConstraints+                                             , text "remaining." ]+      mc <- takeAwakeConstraint+      flip (maybe $ return ()) mc $ \c -> do+        withConstraint solveConstraint c+        solve++solveConstraint :: Constraint -> TCM ()+solveConstraint c = do+    verboseS "profile.constraints" 10 $ liftTCM $ tick "attempted-constraints"+    verboseBracket "tc.constr.solve" 20 "solving constraint" $ do+      pids <- asks envActiveProblems+      reportSDoc "tc.constr.solve" 20 $ text (show pids) <+> prettyTCM c+      solveConstraint_ c++solveConstraint_ (ValueCmp cmp a u v)       = compareTerm cmp a u v+solveConstraint_ (ElimCmp cmp a e u v)      = compareElims cmp a e u v+solveConstraint_ (TypeCmp cmp a b)          = compareType cmp a b+solveConstraint_ (TelCmp a b cmp tela telb) = compareTel a b cmp tela telb+solveConstraint_ (SortCmp cmp s1 s2)        = compareSort cmp s1 s2+solveConstraint_ (LevelCmp cmp a b)         = compareLevel cmp a b+solveConstraint_ c0@(Guarded c pid)         = do+  ifM (isProblemSolved pid) (solveConstraint_ c)+                            (addConstraint c0)+solveConstraint_ (IsEmpty t)                = isEmptyType t+solveConstraint_ (UnBlock m)                =+  ifM (isFrozen m) (addConstraint $ UnBlock m) $ do     inst <- mvInstantiation <$> lookupMeta m     reportSDoc "tc.constr.unblock" 15 $ text ("unblocking a metavar yields the constraint: " ++ show inst)     case inst of@@ -112,21 +169,100 @@         reportSDoc "tc.constr.blocked" 15 $           text ("blocked const " ++ show m ++ " :=") <+> prettyTCM t         assignTerm m t-        return []       PostponedTypeCheckingProblem cl -> enterClosure cl $ \(e, t, unblock) -> do         b <- liftTCM unblock         if not b-          then buildConstraint $ UnBlock m+          then addConstraint $ UnBlock m           else do             tel <- getContextTelescope             v   <- liftTCM $ checkExpr e t             assignTerm m $ teleLam tel v-            return []       -- Andreas, 2009-02-09, the following were IMPOSSIBLE cases       -- somehow they pop up in the context of sized types       ---      -- already solved metavariables: no constraints left (Ulf, is that correct?)-      InstV{} -> return []-      InstS{} -> return []+      -- already solved metavariables: should only happen for size+      -- metas (not sure why it does, Andreas?)+      InstV{} -> return ()+      InstS{} -> return ()       -- Open (whatever that means)       Open -> __IMPOSSIBLE__+      OpenIFS -> __IMPOSSIBLE__+solveConstraint_ (FindInScope m)      =+  ifM (isFrozen m) (addConstraint $ FindInScope m) $ do+    reportSDoc "tc.constr.findInScope" 15 $ text ("findInScope constraint: " ++ show m)+    mv <- lookupMeta m+    let j = mvJudgement mv+    case j of+      IsSort{} -> __IMPOSSIBLE__+      HasType _ tj -> do+        ctx <- getContextVars+        ctxArgs <- getContextArgs+        t <- normalise $ tj `piApply` ctxArgs+        reportSLn "tc.constr.findInScope" 15 $ "findInScope t: " ++ show t+        let candsP1 = [(term, t) | (term, t, Instance) <- ctx]+        let candsP2 = [(term, t) | (term, t, h) <- ctx, h /= Instance]+        let scopeInfo = getMetaScope mv+        let ns = everythingInScope scopeInfo+        let nsList = Map.toList $ nsNames ns+        -- try all abstract names in scope (even ones that you can't refer to+        --  unambiguously)+        let candsP3Names = nsList >>= snd+        candsP3Types <- mapM (typeOfConst . anameName) candsP3Names+        candsP3FV <- mapM (freeVarsToApply . anameName) candsP3Names+        let candsP3 = [(Def (anameName an) vs, t) |+                       (an, t, vs) <- zip3 candsP3Names candsP3Types candsP3FV]+        let cands = [candsP1, candsP2, candsP3]+        cands <- mapM (filterM (uncurry $ checkCandidateForMeta m t )) cands+        let iterCands :: [(Int, [(Term, Type)])] -> TCM ()+            iterCands [] = do reportSDoc "tc.constr.findInScope" 15 $ text "not a single candidate found..."+                              typeError $ IFSNoCandidateInScope t+            iterCands ((p, []) : cs) = do reportSDoc "tc.constr.findInScope" 15 $ text $+                                            "no candidates found at p=" ++ show p ++ ", trying next p..."+                                          iterCands cs+            iterCands ((p, [(term, t')]):_) =+              do reportSDoc "tc.constr.findInScope" 15 $ text (+                   "one candidate at p=" ++ show p ++ " found for type '") <+>+                   prettyTCM t <+> text "': '" <+> prettyTCM term <+>+                   text "', of type '" <+> prettyTCM t' <+> text "'."+                 leqType t t'+                 assignV m ctxArgs term+            iterCands ((p, cs):_) = do reportSDoc "tc.constr.findInScope" 15 $+                                         text ("still more than one candidate at p=" ++ show p ++ ": ") <+>+                                         prettyTCM (List.map fst cs)+                                       addConstraint $ FindInScope m+        iterCands [(1,concat cands)]+      where+        getContextVars :: TCM [(Term, Type, Hiding)]+        getContextVars = do+          ctx <- getContext+          let ids = [0.. fromIntegral (length ctx) - 1] :: [Nat]+          types <- mapM typeOfBV ids+          return $ [ (Var i [], t, h) | (Arg h _ _, i, t) <- zip3 ctx [0..] types ]+        checkCandidateForMeta :: MetaId -> Type -> Term -> Type -> TCM Bool+        checkCandidateForMeta m t term t' =+          liftTCM $ flip catchError (\err -> return False) $ do+            reportSLn "tc.constr.findInScope" 20 $ "checkCandidateForMeta\n  t: " ++ show t ++ "\n  t':" ++ show t' ++ "\n  term: " ++ show term ++ "."+            localState $ do+               -- domi: we assume that nothing below performs direct IO (except+               -- for logging and such, I guess)+               leqType t t'+               tel <- getContextTelescope+               assignTerm m (teleLam tel term)+               -- make a pass over constraints, to detect cases where some are made+               -- unsolvable by the assignment, but don't do this for FindInScope's+               -- to prevent loops. We currently also ignore UnBlock constraints+               -- to be on the safe side.+               wakeConstraints (isSimpleConstraint . clValue . theConstraint)+               solveAwakeConstraints+            return True+        isSimpleConstraint :: Constraint -> Bool+        isSimpleConstraint FindInScope{} = False+        isSimpleConstraint UnBlock{}     = False+        isSimpleConstraint _             = True++localState :: MonadState s m => m a -> m a+localState m = do+  s <- get+  x <- m+  put s+  return x
src/full/Agda/TypeChecking/Conversion.hs view
@@ -15,6 +15,7 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.MetaVars+import Agda.TypeChecking.MetaVars.Occurs (killArgs,PruneResult(..)) import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce import Agda.TypeChecking.Constraints@@ -27,8 +28,10 @@ import Agda.TypeChecking.SizedTypes import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Level+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract-import Agda.TypeChecking.UniversePolymorphism+import Agda.TypeChecking.Eliminators+-- import Agda.TypeChecking.UniversePolymorphism  import Agda.Utils.Monad @@ -37,6 +40,9 @@ #include "../undefined.h" import Agda.Utils.Impossible +mlevel :: TCM (Maybe Term)+mlevel = liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing+ nextPolarity []       = (Invariant, []) nextPolarity (p : ps) = (p, ps) @@ -48,43 +54,76 @@ 	same (Arg _ _ (Var n [])) (Arg _ _ (Var m [])) = n == m 	same _ _				       = False -equalTerm :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints+-- | @intersectVars us vs@ checks whether all relevant elements in @us@ and @vs@+--   are variables, and if yes, returns a prune list which says @True@ for+--   arguments which are different and can be pruned.+intersectVars :: Args -> Args -> Maybe [Bool]+intersectVars = zipWithM areVars where+    -- ignore irrelevant args+    areVars u v | argRelevance u == Irrelevant        = Just False -- do not prune+    areVars (Arg _ _ (Var n [])) (Arg _ _ (Var m [])) = Just $ n /= m -- prune different vars+    areVars _ _                                       = Nothing++equalTerm :: Type -> Term -> Term -> TCM () equalTerm = compareTerm CmpEq -equalAtom :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints+equalAtom :: Type -> Term -> Term -> TCM () equalAtom = compareAtom CmpEq -equalArgs :: MonadTCM tcm => Type -> Args -> Args -> tcm Constraints-equalArgs = compareArgs []--equalType :: MonadTCM tcm => Type -> Type -> tcm Constraints+equalType :: Type -> Type -> TCM () equalType = compareType CmpEq  -- | Type directed equality on values. ---compareTerm :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints-compareTerm cmp a m n =-  verboseBracket "tc.conv.term" 5 "compareTerm" $-  catchConstraint (ValueCmp cmp a m n) $ do-    a'       <- reduce a-    reportSDoc "tc.conv.term" 10 $ fsep+compareTerm :: Comparison -> Type -> Term -> Term -> TCM ()+  -- If one term is a meta, try to instantiate right away. This avoids unnecessary unfolding.+compareTerm cmp a u v = liftTCM $ do+  (u, v) <- instantiate (u, v)+  reportSDoc "tc.conv.term" 10 $ sep [ text "compareTerm"+                                     , nest 2 $ prettyTCM u <+> prettyTCM cmp <+> prettyTCM v+                                     , nest 2 $ text ":" <+> prettyTCM a ]+  let fallback = compareTerm' cmp a u v+  case (u, v) of+    (u@(MetaV x us), v@(MetaV y vs))+      | x /= y    -> solve1 `orelse` solve2 `orelse` compareTerm' cmp a u v+      | otherwise -> fallback+      where+        (solve1, solve2) | x > y     = (assign x us v, assign y vs u)+                         | otherwise = (assign y vs u, assign x us v)+    (u@(MetaV x us), v) -> assign x us v `orelse` fallback+    (u, v@(MetaV y vs)) -> assign y vs u `orelse` fallback+    _                   -> fallback+  where+    assign x us v = do+      reportSDoc "tc.conv.term" 20 $ sep [ text "attempting shortcut"+                                         , nest 2 $ prettyTCM (MetaV x us) <+> text ":=" <+> prettyTCM v ]+      ifM (isInstantiatedMeta x) patternViolation (assignV x us v)+    -- Should be ok with catchError_ but catchError is much safer since we don't+    -- rethrow errors.+    m `orelse` h = m `catchError` \err -> case errError err of+                    PatternErr s -> put s >> h+                    _            -> h++compareTerm' :: Comparison -> Type -> Term -> Term -> TCM ()+compareTerm' cmp a m n =+  verboseBracket "tc.conv.term" 20 "compareTerm" $ do+  a' <- reduce a+  catchConstraint (ValueCmp cmp a' m n) $ do+    reportSDoc "tc.conv.term" 30 $ fsep       [ text "compareTerm", prettyTCM m, prettyTCM cmp, prettyTCM n, text ":", prettyTCM a' ]     proofIrr <- proofIrrelevance     isSize   <- isSizeType a'     s        <- reduce $ getSort a'     mlvl     <- mlevel     case s of-      Prop | proofIrr -> return []+      Prop | proofIrr -> return ()       _    | isSize   -> compareSizes cmp m n       _               -> case unEl a' of-        a | Just a == mlvl -> equalLevel m n+        a | Just a == mlvl -> do+          a <- levelView m+          b <- levelView n+          equalLevel a b         Pi a _    -> equalFun (a,a') m n-        Fun a _   -> equalFun (a,a') m n-        MetaV x _ -> do-          (m,n) <- normalise (m,n)-          if m == n-            then return []-            else buildConstraint (ValueCmp cmp a m n)         Lam _ _   -> __IMPOSSIBLE__         Def r ps  -> do           isrec <- isEtaRecord r@@ -93,13 +132,25 @@               m <- reduceB m               n <- reduceB n               case (m, n) of-                _ | isMeta m || isMeta n || (isNeutral m && isNeutral n) ->+                _ | isMeta m || isMeta n ->                     compareAtom cmp a' (ignoreBlocking m) (ignoreBlocking n)++                _ | isNeutral m && isNeutral n -> do+                    -- Andreas 2011-03-23: (fixing issue 396)+                    -- if we are dealing with a singleton record,+                    -- we can succeed immediately+                    isSing <- isSingletonRecordModuloRelevance r ps+                    case isSing of+                      Right True -> return ()+                      -- do not eta-expand if comparing two neutrals+                      _ -> compareAtom cmp a' (ignoreBlocking m) (ignoreBlocking n)                 _ -> do                   (tel, m') <- etaExpandRecord r ps $ ignoreBlocking m                   (_  , n') <- etaExpandRecord r ps $ ignoreBlocking n                   -- No subtyping on record terms-                  compareArgs [] (telePi_ tel $ sort Prop) m' n'+                  c <- getRecordConstructor r+                  compareArgs [] (telePi_ tel $ sort Prop) (Con c []) m' n'+             else compareAtom cmp a' m n         _ -> compareAtom cmp a' m n   where@@ -118,163 +169,194 @@         p	= fmap (const $ Var 0 []) a         (m',n') = raise 1 (m,n) `apply` [p]         t'	= raise 1 t `piApply` [p]-        suggest (Fun _ _)	 = "x"-        suggest (Pi _ (Abs x _)) = x-        suggest _		 = __IMPOSSIBLE__+        suggest (Pi _ b) = absName b+        suggest _	 = __IMPOSSIBLE__ -compareTel :: MonadTCM tcm => Comparison -> Telescope -> Telescope -> tcm Constraints-compareTel cmp tel1 tel2 =-  verboseBracket "tc.conv.tel" 5 "compareTel" $-  catchConstraint (TelCmp cmp tel1 tel2) $ case (tel1, tel2) of-    (EmptyTel, EmptyTel) -> return []+-- | @compareTel t1 t2 cmp tel1 tel1@ checks whether pointwise @tel1 `cmp` tel2@+--   and complains that @t2 `cmp` t1@ failed if not.+compareTel :: Type -> Type ->+  Comparison -> Telescope -> Telescope -> TCM ()+compareTel t1 t2 cmp tel1 tel2 =+  verboseBracket "tc.conv.tel" 20 "compareTel" $+  catchConstraint (TelCmp t1 t2 cmp tel1 tel2) $ case (tel1, tel2) of+    (EmptyTel, EmptyTel) -> return ()     (EmptyTel, _)        -> bad     (_, EmptyTel)        -> bad     (ExtendTel arg1@(Arg h1 r1 a1) tel1, ExtendTel arg2@(Arg h2 r2 a2) tel2)       | h1 /= h2 -> bad+        -- Andreas, 2011-09-11 do not test r1 == r2 because they could differ+        -- e.g. one could be Forced and the other Relevant (see fail/UncurryMeta)       | otherwise -> do           let (tel1', tel2') = raise 1 (tel1, tel2)               arg            = Var 0 []           name <- freshName_ (suggest (absName tel1) (absName tel2))-          cs   <- compareType cmp a1 a2-          let c = TelCmp cmp (absApp tel1' arg) (absApp tel2' arg)--	  let dependent = 0 `freeIn` absBody tel2--          if dependent-	    then addCtx name arg1 $ guardConstraint (return cs) c-	    else do cs' <- addCtx name arg1 $ solveConstraint c-		    return $ cs ++ cs'+          let checkArg = escapeContext 1 $ compareType cmp a1 a2+          let c = TelCmp t1 t2 cmp (absApp tel1' arg) (absApp tel2' arg)+          let r = max r1 r2  -- take "most irrelevant"+              dependent = (r /= Irrelevant) && isBinderUsed tel2+          addCtx name arg1 $+            if dependent+	    then guardConstraint c checkArg+	    else checkArg >> solveConstraint_ c           where             suggest "_" y = y             suggest  x  _ = x   where-    bad = typeError $ UnequalTelescopes cmp tel1 tel2+    -- Andreas, 2011-05-10 better report message about types+    bad = typeError $ UnequalTypes cmp t2 t1 -- switch t2 and t1 because of contravariance!+--    bad = typeError $ UnequalTelescopes cmp tel1 tel2  -- | Syntax directed equality on atomic values ---compareAtom :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints+compareAtom :: Comparison -> Type -> Term -> Term -> TCM () compareAtom cmp t m n =-    verboseBracket "tc.conv.atom" 5 "compareAtom" $+    verboseBracket "tc.conv.atom" 20 "compareAtom" $+    -- if a PatternErr is thrown, rebuild constraint!     catchConstraint (ValueCmp cmp t m n) $ do+      let unLevel (Level l) = reallyUnLevelView l+          unLevel v = return v       -- constructorForm changes literal to constructors       -- Andreas: what happens if I cut out the eta expansion here?       -- Answer: Triggers issue 245, does not resolve 348-      mb <- traverse constructorForm =<< etaExpandBlocked =<< reduceB m-      nb <- traverse constructorForm =<< etaExpandBlocked =<< reduceB n+      mb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB m+      nb <- traverse unLevel =<< traverse constructorForm =<< etaExpandBlocked =<< reduceB n+       let m = ignoreBlocking mb           n = ignoreBlocking nb-      reportSDoc "tc.conv.atom" 10 $ fsep-	[ text "compareAtom", prettyTCM mb, prettyTCM cmp, prettyTCM nb, text ":", prettyTCM t ]++          postpone = addConstraint $ ValueCmp cmp t m n++          checkSyntacticEquality = do+            n <- normalise n    -- is this what we want?+            m <- normalise m+            if m == n+                then return ()	-- Check syntactic equality for blocked terms+                else postpone++      reportSDoc "tc.conv.atom" 30 $+	text "compareAtom" <+> fsep [ prettyTCM mb <+> prettyTCM cmp+                                    , prettyTCM nb+                                    , text ":" <+> prettyTCM t ]       case (mb, nb) of+        -- equate two metas x and y.  if y is the younger meta,+        -- try first y := x and then x := y         (NotBlocked (MetaV x xArgs), NotBlocked (MetaV y yArgs))-            | x == y -> if   sameVars xArgs yArgs-                        then return []-                        else do -- Check syntactic equality on meta-variables+            | x == y ->+              case intersectVars xArgs yArgs of+                -- all relevant arguments are variables+                Just kills -> do+                  -- kills is a list with 'True' for each different var+                  killResult <- killArgs kills x+                  case killResult of+                    NothingToPrune   -> return ()+                    PrunedEverything -> return ()+                    PrunedNothing    -> postpone+                    PrunedSomething  -> postpone+                    -- OLD CODE: if killedAll then return () else checkSyntacticEquality+                -- not all relevant arguments are variables+                Nothing -> checkSyntacticEquality -- Check syntactic equality on meta-variables                                 -- (same as for blocked terms)-                          m <- normalise m-                          n <- normalise n-                          if m == n-                            then return []-                            else buildConstraint (ValueCmp cmp t m n)             | otherwise -> do                 [p1, p2] <- mapM getMetaPriority [x,y]                 -- instantiate later meta variables first                 let (solve1, solve2)                       | (p1,x) > (p2,y) = (l,r)                       | otherwise	    = (r,l)-                      where l = assignV t x xArgs n-                            r = assignV t y yArgs m-                    try m fallback = do-                      cs <- m-                      case cs of-                        []	-> return []-                        _	-> fallback cs+                      where l = assignV x xArgs n+                            r = assignV y yArgs m +                    try m h = m `catchError_` \err -> case errError err of+                      PatternErr s -> put s >> h+                      _            -> throwError err+                 -- First try the one with the highest priority. If that doesn't-                -- work, try the low priority one. If that doesn't work either,-                -- go with the first version.-                rollback <- return . put =<< get-                try solve1 $ \cs -> do-                  undoRollback <- return . put =<< get-                  rollback-                  try solve2 $ \_ -> do-                    undoRollback-                    return cs+                -- work, try the low priority one.+                try solve1 solve2 -	(NotBlocked (MetaV x xArgs), _) -> assignV t x xArgs n-	(_, NotBlocked (MetaV x xArgs)) -> assignV t x xArgs m-        (Blocked{}, Blocked{})	-> do-            n <- normalise n    -- is this what we want?-            m <- normalise m-            if m == n-                then return []	-- Check syntactic equality for blocked terms-                else buildConstraint $ ValueCmp cmp t m n+        -- one side a meta, the other an unblocked term+	(NotBlocked (MetaV x xArgs), _) -> assignV x xArgs n+	(_, NotBlocked (MetaV x xArgs)) -> assignV x xArgs m++        (Blocked{}, Blocked{})	-> checkSyntacticEquality         (Blocked{}, _)    -> useInjectivity cmp t m n         (_,Blocked{})     -> useInjectivity cmp t m n         _ -> case (m, n) of-	    _ | f1@(FunV _ _) <- funView m-	      , f2@(FunV _ _) <- funView n -> equalFun f1 f2+	    (Pi{}, Pi{}) -> equalFun m n  	    (Sort s1, Sort s2) -> compareSort CmpEq s1 s2 -	    (Lit l1, Lit l2) | l1 == l2 -> return []+	    (Lit l1, Lit l2) | l1 == l2 -> return () 	    (Var i iArgs, Var j jArgs) | i == j -> do 		a <- typeOfBV i                 -- Variables are invariant in their arguments-		compareArgs [] a iArgs jArgs-	    (Def x xArgs, Def y yArgs) | x == y -> do-                pol <- getPolarity' cmp x-		reportSDoc "tc.conv.atom" 20 $-		  text "compareArgs" <+> sep-                    [ sep [ prettyTCM xArgs-			  , prettyTCM yArgs-			  ]-                    , nest 2 $ text (show pol)-                    ]-		a <- defType <$> getConstInfo x-		compareArgs pol a xArgs yArgs+		compareArgs [] a (Var i []) iArgs jArgs+            (Def{}, Def{}) -> do+              ev1 <- elimView m+              ev2 <- elimView n+              case (ev1, ev2) of+                (VarElim x els1, VarElim y els2) | x == y -> cmpElim (typeOfBV x) (Var x []) els1 els2+                (ConElim x els1, ConElim y els2) | x == y -> cmpElim (conType x t) (Con x []) els1 els2+                (DefElim x els1, DefElim y els2) | x == y ->+                  cmpElim (defType <$> getConstInfo x) (Def x []) els1 els2+                (MetaElim{}, _) -> __IMPOSSIBLE__   -- projections from metas should have been eta expanded+                (_, MetaElim{}) -> __IMPOSSIBLE__+                _ -> typeError $ UnequalTerms cmp m n t+                where+                  polarities (Def x _) = getPolarity' cmp x+                  polarities _         = return []+                  cmpElim t v els1 els2 = do+                    a   <- t+                    pol <- polarities v+                    reportSDoc "tc.conv.elim" 10 $+                      text "compareElim" <+> vcat+                        [ text "a    =" <+> prettyTCM a+                        , text "v    =" <+> prettyTCM v+                        , text "els1 =" <+> prettyTCM els1+                        , text "els2 =" <+> prettyTCM els2+                        ]+                    compareElims pol a v els1 els2 	    (Con x xArgs, Con y yArgs) 		| x == y -> do-		    -- The type is a datatype or a record.-		    Def d args <- reduce $ unEl t-		    -- Get the number of parameters to the datatype (or record)-                    npars <- do-                      def <- theDef <$> getConstInfo d-                      case def of-		        Datatype{dataPars = npars} -> return npars-                        Record{recPars = npars}    -> return npars-                        _                          -> __IMPOSSIBLE__-		    -- The type to compare the arguments at is obtained by-		    -- instantiating the parameters.-		    a <- defType <$> getConstInfo x-		    let a' = piApply a (genericTake npars args)+                    -- Get the type of the constructor instantiated to the datatype parameters.+                    a' <- conType x t                     -- Constructors are invariant in their arguments                     -- (could be covariant).-                    compareArgs [] a' xArgs yArgs+                    compareArgs [] a' (Con x []) xArgs yArgs             _ -> typeError $ UnequalTerms cmp m n t     where-	equalFun (FunV arg1@(Arg h1 r1 a1) t1) (FunV (Arg h2 r2 a2) t2)+        conType c (El _ (Def d args)) = do+          npars <- do+            def <- theDef <$> getConstInfo d+            return $ case def of Datatype{dataPars = n} -> n+                                 Record{recPars = n}    -> n+                                 _                      -> __IMPOSSIBLE__+          a <- defType <$> getConstInfo c+          return $ piApply a (genericTake npars args)+        conType _ _ = __IMPOSSIBLE__++	equalFun t1@(Pi arg1@(Arg h1 r1 a1) _) t2@(Pi (Arg h2 r2 a2) _) 	    | h1 /= h2	= typeError $ UnequalHiding ty1 ty2             -- Andreas 2010-09-21 compare r1 and r2, but ignore forcing annotations! 	    | ignoreForced r1 /= ignoreForced r2 = typeError $ UnequalRelevance ty1 ty2-	    | otherwise = do-		    let (ty1',ty2') = raise 1 (ty1,ty2)-			arg	    = Arg h1 r1 (Var 0 [])-		    name <- freshName_ (suggest t1 t2)-		    cs   <- compareType cmp a2 a1-		    let c = TypeCmp cmp (piApply ty1' [arg]) (piApply ty2' [arg])+	    | otherwise = verboseBracket "tc.conv.fun" 15 "compare function types" $ do+                reportSDoc "tc.conv.fun" 20 $ nest 2 $ vcat+                  [ text "t1 =" <+> prettyTCM t1+                  , text "t2 =" <+> prettyTCM t2 ]+                let (ty1',ty2') = raise 1 (ty1,ty2)+                    arg	    = Arg h1 r1 (Var 0 [])+                name <- freshName_ (suggest t1 t2)+                let checkArg = escapeContext 1 $ compareType cmp a2 a1+                    c        = TypeCmp cmp (piApply ty1' [arg]) (piApply ty2' [arg]) -		    -- We only need to require a1 == a2 if t2 is a dependent function type.-		    -- If it's non-dependent it doesn't matter what we add to the context.-		    let dependent = case t2 of-					Pi _ _	-> True-					Fun _ _	-> False-					_	-> __IMPOSSIBLE__-		    if dependent-			then addCtx name arg1 $ guardConstraint (return cs) c-			else do-			    cs' <- addCtx name arg1 $ solveConstraint c-			    return $ cs ++ cs'+                -- We only need to require a1 == a2 if t2 is a dependent function type.+                -- If it's non-dependent it doesn't matter what we add to the context.+                let dependent = case t2 of+                                    Pi _ b  -> isBinderUsed b+                                    _       -> __IMPOSSIBLE__+                addCtx name arg1 $+                  if dependent+                  then guardConstraint c checkArg+                  else checkArg >> solveConstraint_ c 	    where 		ty1 = El (getSort a1) t1    -- TODO: wrong (but it doesn't matter) 		ty2 = El (getSort a2) t2@@ -282,92 +364,95 @@ 				    []	-> "_" 				    x:_	-> x 		    where-			name (Pi _ (Abs x _)) = [x]-			name (Fun _ _)	      = []-			name _		      = __IMPOSSIBLE__+			name (Pi _ b) = filter (/= "_") [absName b]+			name _        = __IMPOSSIBLE__ 	equalFun _ _ = __IMPOSSIBLE__ +-- | Type-directed equality on eliminator spines+compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()+compareElims _ _ _ [] [] = return ()+compareElims _ _ _ [] (_:_) = __IMPOSSIBLE__+compareElims _ _ _ (_:_) [] = __IMPOSSIBLE__+compareElims _ _ _ (Apply{} : _) (Proj{} : _) = __IMPOSSIBLE__+compareElims _ _ _ (Proj{} : _) (Apply{} : _) = __IMPOSSIBLE__+compareElims pols0 a v els01@(Apply arg1 : els1) els02@(Apply arg2 : els2) =+  verboseBracket "tc.conv.elim" 20 "compare Apply" $ do+  reportSDoc "tc.conv.elim" 25 $ nest 2 $ vcat+    [ text "a    =" <+> prettyTCM a+    , text "v    =" <+> prettyTCM v+    , text "els1 =" <+> prettyTCM els01+    , text "els2 =" <+> prettyTCM els02+    ]+  let (pol, pols) = nextPolarity pols0+  ab <- reduceB a+  let a = ignoreBlocking ab+  catchConstraint (ElimCmp pols0 a v els01 els02) $ do+  case unEl <$> ab of+    Blocked{}                     -> patternViolation+    NotBlocked MetaV{}            -> patternViolation+    NotBlocked (Pi (Arg _ r b) _) -> do+      let cmp x y = case pol of+                      Invariant     -> compareTerm CmpEq  b x y+                      Covariant     -> compareTerm CmpLeq b x y+                      Contravariant -> compareTerm CmpLeq b y x+      mlvl <- mlevel+      let checkArg = case r of+            Forced     -> return ()+            Irrelevant -> return () -- Andreas: ignore irr. func. args.+            _          -> applyRelevanceToContext r $+                            cmp (unArg arg1) (unArg arg2)+          dependent = case unEl a of+            Pi (Arg _ _ (El _ lvl')) c -> 0 `freeInIgnoringSorts` absBody c+                                          && Just lvl' /= mlvl+            _ -> False +          theRest = ElimCmp pols (piApply a [arg1]) (apply v [arg1]) els1 els2 +      if dependent+        then guardConstraint theRest checkArg+        else checkArg >> solveConstraint_ theRest++    _ -> __IMPOSSIBLE__+compareElims pols a v els01@(Proj f : els1) els02@(Proj f' : els2)+  | f /= f'   = typeError . GenericError . show =<< prettyTCM f <+> text "/=" <+> prettyTCM f'+  | otherwise = do+    a <- reduce a+    case unEl a of+      Def r us -> do+        let (pol, _) = nextPolarity pols+        ft <- defType <$> getConstInfo f+        let arg = Arg NotHidden Relevant v  -- TODO: not necessarily relevant?+        let c = piApply ft (us ++ [arg])+        (cmp, els1, els2) <- return $ case pol of+              Invariant     -> (CmpEq, els1, els2)+              Covariant     -> (CmpLeq, els1, els2)+              Contravariant -> (CmpLeq, els2, els2)+        pols' <- getPolarity' cmp f+        compareElims pols' c (Def f [arg]) els1 els2+      _ -> __IMPOSSIBLE__+ -- | Type-directed equality on argument lists ---compareArgs :: MonadTCM tcm => [Polarity] -> Type -> Args -> Args -> tcm Constraints-compareArgs _ _ [] [] = return []-compareArgs _ _ [] (_:_) = __IMPOSSIBLE__-compareArgs _ _ (_:_) [] = __IMPOSSIBLE__-compareArgs pols0 a (arg1 : args1) (arg2 : args2) =-    verboseBracket "tc.conv.args" 5 "compareArgs" $ do-    let (pol, pols) = nextPolarity pols0-    a <- reduce a-    catchConstraint (ArgsCmp pols0 a (arg1 : args1) (arg2 : args2)) $ do-    reportSDoc "tc.conv.args" 30 $-      sep [ text "compareArgs"-          , nest 2 $ sep [ prettyTCM (arg1 : args1)-                         , prettyTCM (arg2 : args2)-                         ]-          , nest 2 $ text ":" <+> prettyTCM a-          ]-    case funView (unEl a) of-	FunV (Arg _ r b) _ -> do-	    reportSDoc "tc.conv.args" 10 $-              sep [ text "compareArgs" <+> parens (text $ show pol ++ " " ++ show r)-                  , nest 2 $ sep [ prettyTCM arg1-                                 , text "~~" <+> prettyTCM arg2-                                 , text ":" <+> prettyTCM b-                                 ]-                  ]-            let cmp x y = case pol of-                            Invariant     -> compareTerm CmpEq b x y-                            Covariant     -> compareTerm CmpLeq b x y-                            Contravariant -> compareTerm CmpLeq b y x-            cs1 <- case r of-                    Forced     -> return []-                    Irrelevant -> return [] -- Andreas: ignore irr. func. args.-                    Relevant   -> cmp (unArg arg1) (unArg arg2)-            -- mlvl <- mlevel-	    case (cs1, unEl a) of-                                -- We can safely ignore sort annotations here-                                -- (except it's not, we risk leaving unsolved sorts)-                                -- We're also ignoring levels which isn't quite as-                                -- safe (it would be if we disallowed matching on levels?)-		(_:_, Pi (Arg _ _ (El _ lvl')) c) | 0 `freeInIgnoringSorts` absBody c-                                                  -- && Just lvl' /= mlvl-		    -> do-                        reportSDoc "tc.conv.args" 15 $ sep-                          [ text "aborting compareArgs" <+> parens (text $ show pol)-                          , nest 2 $ fsep-                              [ prettyTCM arg1-                              , text "~~" <+> prettyTCM arg2-                              , text ":" <+> prettyTCM b-                              , text "--->" <+> prettyTCM cs1-                              ]-                          ]-                        patternViolation-		_   -> do-                    reportSDoc "tc.conv.args" 15 $ sep-                      [ text "compareArgs" <+> parens (text $ show pol)-                      , nest 2 $ sep-                        [ prettyTCM args1-                        , text "~~" <+> prettyTCM args2-                        , text ":" <+> prettyTCM (piApply a [arg1])-                        ]-                      ]-		    cs2 <- compareArgs pols (piApply a [arg1]) args1 args2-		    return $ cs1 ++ cs2-        _   -> patternViolation+compareArgs :: [Polarity] -> Type -> Term -> Args -> Args -> TCM ()+compareArgs pol a v args1 args2 =+  compareElims pol a v (map Apply args1) (map Apply args2)  -- | Equality on Types-compareType :: MonadTCM tcm => Comparison -> Type -> Type -> tcm Constraints+compareType :: Comparison -> Type -> Type -> TCM () compareType cmp ty1@(El s1 a1) ty2@(El s2 a2) =-    verboseBracket "tc.conv.type" 5 "compareType" $+    verboseBracket "tc.conv.type" 20 "compareType" $     catchConstraint (TypeCmp cmp ty1 ty2) $ do-	reportSDoc "tc.conv.type" 9 $ vcat-          [ hsep [ text "compareType", prettyTCM ty1, prettyTCM cmp, prettyTCM ty2 ]+	reportSDoc "tc.conv.type" 50 $ vcat+          [ text "compareType" <+> sep [ prettyTCM ty1 <+> prettyTCM cmp+                                       , prettyTCM ty2 ]           , hsep [ text "   sorts:", prettyTCM s1, text " and ", prettyTCM s2 ]           ]-	cs1 <- compareSort CmpEq s1 s2 `catchError` \err -> case errError err of+-- Andreas, 2011-4-27 should not compare sorts, but currently this is needed+-- for solving sort and level metas+--        let cs1 = []+	compareSort CmpEq s1 s2 `catchError` \err -> case errError err of                   TypeError _ _ -> do-                    reportSDoc "tc.conv.type" 10 $ vcat+                    reportSDoc "tc.conv.type" 30 $ vcat                       [ text "sort comparison failed"                       , nest 2 $ vcat                         [ text "s1 =" <+> prettyTCM s1@@ -379,169 +464,189 @@                     -- Throw the original error if the above doesn't                     -- give an error (for instance, due to pending                     -- constraints).+                    -- Or just ignore it... We run into this with irrelevant levels+                    -- which may show up in sort constraints, causing them to fail.+                    -- In any case it's not safe to ignore the error, for instance+                    -- a1 might be Set and a2 a meta of type Set, in which case we+                    -- really need the sort comparison to fail, instead of silently+                    -- instantiating the meta.                     throwError err                   _             -> throwError err-	cs2 <- compareTerm cmp (sort s1) a1 a2-        cs  <- solveConstraints $ cs1 ++ cs2-        unless (null cs) $-          reportSDoc "tc.conv.type" 9 $-            text "   --> " <+> prettyTCM cs-	return cs+	compareTerm cmp (sort s1) a1 a2+	return () -leqType :: MonadTCM tcm => Type -> Type -> tcm Constraints+leqType :: Type -> Type -> TCM () leqType = compareType CmpLeq  --------------------------------------------------------------------------- -- * Sorts --------------------------------------------------------------------------- -compareSort :: MonadTCM tcm => Comparison -> Sort -> Sort -> tcm Constraints+compareSort :: Comparison -> Sort -> Sort -> TCM () compareSort CmpEq  = equalSort-compareSort CmpLeq = leqSort-  -- TODO: change to leqSort when we have better constraint solving-  --       or not? might not be needed if we get universe polymorphism-  --       leqSort is still used when checking datatype declarations though+compareSort CmpLeq = equalSort  -- | Check that the first sort is less or equal to the second.-leqSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints+leqSort :: Sort -> Sort -> TCM () leqSort s1 s2 =-  ifM typeInType (return []) $+  ifM typeInType (return ()) $     catchConstraint (SortCmp CmpLeq s1 s2) $     do	(s1,s2) <- reduce (s1,s2)-        reportSDoc "tc.conv.sort" 10 $+        reportSDoc "tc.conv.sort" 30 $           sep [ text "leqSort"               , nest 2 $ fsep [ prettyTCM s1 <+> text "=<"                               , prettyTCM s2 ]               ] 	case (s1,s2) of -            -- New universe polymorphism---             (Type a  , Type b  )             -> compareLevel CmpLeq a b--	    (Type (Lit (LitLevel _ n)), Type (Lit (LitLevel _ m)))-              | n <= m    -> return []-	      | otherwise -> notLeq s1 s2             (Type a, Type b) -> leqLevel a b -	    (Prop    , Prop    )	     -> return []+	    (Prop    , Prop    )	     -> return () 	    (Type _  , Prop    )	     -> notLeq s1 s2-	    (Suc _   , Prop    )	     -> notLeq s1 s2 -	    (Prop    , Type _  )	     -> return []--	    (Suc s   , Type (Lit (LitLevel _ n)))-              | 1 <= n    -> leqSort s (mkType $ n - 1)-	    (Suc s   , Type b  ) -> notLeq s1 s2  -- TODO-            (Suc s1  , Suc s2  ) -> leqSort s1 s2 -- TODO: not what we want for Prop(?)-	    (_	     , Suc _   )	     -> equalSort s1 s2--	    (Lub a b , _       )	     -> liftM2 (++) (leqSort a s2) (leqSort b s2)-	    (_	     , Lub _ _ )	     -> equalSort s1 s2+	    (Prop    , Type _  )	     -> return () -	    (MetaS{} , _       )	     -> equalSort s1 s2-	    (_	     , MetaS{} )	     -> equalSort s1 s2-            (Inf     , Inf     )             -> return []-            (Inf     , _       )             -> notLeq s1 s2-            (_       , Inf     )             -> return []+            (_       , Inf     )             -> return ()+            (Inf     , _       )             -> equalSort s1 s2             (DLub{}  , _       )             -> equalSort s1 s2             (_       , DLub{}  )             -> equalSort s1 s2     where 	notLeq s1 s2 = typeError $ NotLeqSort s1 s2 -leqLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints+leqLevel :: Level -> Level -> TCM () leqLevel a b = liftTCM $ do-  reportSDoc "tc.conv.nat" 10 $+  reportSDoc "tc.conv.nat" 30 $     text "compareLevel" <+>       sep [ prettyTCM a <+> text "=<"           , prettyTCM b ]-  n <- levelView a-  m <- levelView b-  leqView n m+  a <- reduce a+  b <- reduce b+  catchConstraint (LevelCmp CmpLeq a b) $ leqView a b   where-    leqView n@(Max as) m@(Max bs) = do-      reportSDoc "tc.conv.nat" 10 $+    leqView a@(Max as) b@(Max bs) = do+      reportSDoc "tc.conv.nat" 30 $         text "compareLevelView" <+>-          sep [ text (show n) <+> text "=<"-              , text (show m) ]-      case (as, bs) of-        (_, [])  -> concat <$> sequence [ leqPlusView a (ClosedLevel 0) | a <- as ]-        (_, [b]) -> concat <$> sequence [ leqPlusView a b | a <- as ]-        _        -> do-          -- Each a needs to be less than at least one of the b's-          sequence [ choice [ leqPlusView a b | b <- bs ] | a <- as ]-          return []-    leqPlusView n m = do-      reportSDoc "tc.conv.nat" 10 $-        text "comparePlusView" <+>-          sep [ text (show n) <+> text "=<"-              , text (show m) ]-      case (n, m) of-        -- Both closed-        (ClosedLevel n, ClosedLevel m)-          | n <= m -> ok+          sep [ text (show a) <+> text "=<"+              , text (show b) ]+      wrap $ case (as, bs) of -        -- Both neutral-        (Plus n (NeutralLevel a), Plus m (NeutralLevel b))-          | n <= m -> do-            lvl <- primLevel-            equalTerm (El (mkType 0) lvl) a b+        -- same term+        _ | as == bs -> ok -        -- closed ≤ any-        (ClosedLevel n, Plus m _)-          | n <= m -> ok+        -- 0 ≤ any+        ([], _) -> ok -        -- Any blocked or meta-        (Plus _ BlockedLevel{}, _) -> postpone-        (_, Plus _ BlockedLevel{}) -> postpone-        (Plus _ MetaLevel{}, _)    -> postpone-        (_, Plus _ MetaLevel{})    -> postpone+        -- as ≤ 0+        (as, [])  -> sequence_ [ equalLevel (Max [a]) (Max []) | a <- as ] -        _ -> notok-    ok       = return []-    notok    = typeError $ NotLeqSort (Type a) (Type b)-    postpone = patternViolation+        -- as ≤ [b]+        (as@(_:_:_), [b]) -> sequence_ [ leqView (Max [a]) (Max [b]) | a <- as ] -    choice []     = patternViolation-    choice (m:ms) = noConstraints m `catchError` \_ -> choice ms+        -- reduce constants+        (as, bs) | minN > 0 -> leqView (Max $ map (subtr minN) as) (Max $ map (subtr minN) bs)+          where+            ns = map constant as+            ms = map constant bs+            minN = minimum (ns ++ ms)++        -- remove subsumed+        (as, bs)+          | not $ null dups -> leqView (Max $ as \\ dups) (Max bs)+          where+            dups = [ a | a@(Plus m l) <- as, Just n <- [findN l], m <= n ]+            findN a = case [ n | Plus n b <- bs, b == a ] of+                        [n] -> Just n+                        _   -> Nothing++        -- closed ≤ bs+        ([ClosedLevel n], bs)+          | n <= maximum (map constant bs) -> ok++        -- as ≤ neutral+        (as, bs)+          | neutralB && maxA > maxB -> notok+          | neutralB && any (\a -> neutral a && not (isInB a)) as -> notok+          | neutralB && neutralA -> maybeok $ all (\a -> constant a <= findN a) as+          where+            maxA = maximum $ map constant as+            maxB = maximum $ map constant bs+            neutralA = all neutral as+            neutralB = all neutral bs+            isInB a = elem (unneutral a) $ map unneutral bs+            findN a = case [ n | b@(Plus n _) <- bs, unneutral b == unneutral a ] of+                        [n] -> n+                        _   -> __IMPOSSIBLE__++        -- [a] ≤ [neutral]+        ([a@(Plus n _)], [b@(Plus m NeutralLevel{})])+          | m == n -> equalLevel (Max [a]) (Max [b])++        -- anything else+        _ -> postpone+      where+        ok       = return ()+        notok    = typeError $ NotLeqSort (Type a) (Type b)+        postpone = patternViolation++        wrap m = catchError m $ \e ->+          case errError e of+            TypeError{} -> notok+            _           -> throwError e++        maybeok True = ok+        maybeok False = notok++        neutral (Plus _ NeutralLevel{}) = True+        neutral _                       = False++        meta (Plus _ MetaLevel{}) = True+        meta _                    = False++        unneutral (Plus _ (NeutralLevel v)) = v+        unneutral _ = __IMPOSSIBLE__++        constant (ClosedLevel n) = n+        constant (Plus n _)      = n++        subtr m (ClosedLevel n) = ClosedLevel (n - m)+        subtr m (Plus n l)      = Plus (n - m) l++--     choice []     = patternViolation+--     choice (m:ms) = noConstraints m `catchError` \_ -> choice ms --       case errError e of --         PatternErr{} -> choice ms --         _            -> throwError e -equalLevel :: MonadTCM tcm => Term -> Term -> tcm Constraints+equalLevel :: Level -> Level -> TCM () equalLevel a b = do-  lvl    <- primLevel-  Max as <- levelView a-  Max bs <- levelView b-  a <- unLevelView (Max as)-  b <- unLevelView (Max bs)-  liftTCM $ catchConstraint (ValueCmp CmpEq (El (mkType 0) lvl) a b)-          $ check a b as bs+  a <- reduce a+  b <- reduce b+  reportSLn "tc.conv.level" 50 $ "equalLevel (" ++ show a ++ ") (" ++ show b ++ ")"+  liftTCM $ catchConstraint (LevelCmp CmpEq a b) $+    check a b   where-    check a b as bs = do-      reportSDoc "tc.conv.nat" 20 $+    check a@(Max as) b@(Max bs) = do+      reportSDoc "tc.conv.level" 40 $         sep [ text "equalLevel"-            , nest 2 $ sep [ prettyTCM a <+> text "=="-                           , prettyTCM b-                           ]-            , nest 2 $ sep [ text (show (Max as)) <+> text "=="-                           , text (show (Max bs))-                           ]+            , vcat [ nest 2 $ sep [ prettyTCM a <+> text "=="+                                  , prettyTCM b+                                  ]+                   , nest 2 $ sep [ text (show (Max as)) <+> text "=="+                                  , text (show (Max bs))+                                  ]+                   ]             ]       let a === b   = do             lvl <- getLvl             equalAtom lvl a b-          as =!= bs = do a <- unLevelView (Max as)-                         b <- unLevelView (Max bs)-                         a === b+          as =!= bs = levelTm (Max as) === levelTm (Max bs)+      as <- return $ closed0 as+      bs <- return $ closed0 bs       case (as, bs) of         _ | List.sort as == List.sort bs -> ok           | any isBlocked (as ++ bs) -> do               lvl <- getLvl-              liftTCM $ useInjectivity CmpEq lvl a b--        -- 0 == any-        ([], _) -> wrap $ concat <$> sequence [ as =!= [b] | b <- bs ]-        (_, []) -> wrap $ concat <$> sequence [ [a] =!= bs | a <- as ]+              liftTCM $ useInjectivity CmpEq lvl (Level a) (Level b)          -- closed == closed         ([ClosedLevel n], [ClosedLevel m])@@ -552,6 +657,14 @@         ([ClosedLevel{}], _) | any isNeutral bs -> notok         (_, [ClosedLevel{}]) | any isNeutral as -> notok +        -- 0 == any+        ([ClosedLevel 0], bs@(_:_:_)) -> sequence_ [ equalLevel (Max []) (Max [b]) | b <- bs ]+        (as@(_:_:_), [ClosedLevel 0]) -> sequence_ [ equalLevel (Max [a]) (Max []) | a <- as ]++        -- Same meta+        ([Plus n (MetaLevel x _)], [Plus m (MetaLevel y _)])+          | n == m && x == y -> ok+         -- meta == any         ([Plus n (MetaLevel x as)], _)           | any (isThisMeta x) bs -> postpone@@ -573,16 +686,21 @@         _ -> postpone        where-        ok       = return []+        ok       = return ()         notok    = typeError $ UnequalSorts (Type a) (Type b)-        postpone = patternViolation+        postpone = do+          reportSLn "tc.conv.level" 30 $ "postponing: " ++ show a ++ " == " ++ show b+          patternViolation +        closed0 [] = [ClosedLevel 0]+        closed0 as = as+         getLvl = El (mkType 0) <$> primLevel          meta n x as bs = do+          reportSLn "tc.meta.level" 50 $ "meta " ++ show as ++ " " ++ show bs           bs' <- mapM (subtr n) bs-          lvl <- getLvl-          assignV lvl x as =<< unLevelView (Max bs')+          assignV x as $ levelTm (Max bs')          -- Make sure to give a sensible error message         wrap m = m `catchError` \err ->@@ -598,6 +716,7 @@         subtr _ (Plus _ BlockedLevel{}) = postpone         subtr _ (Plus _ MetaLevel{})    = postpone         subtr _ (Plus _ NeutralLevel{}) = postpone+        subtr _ (Plus _ UnreducedLevel{}) = __IMPOSSIBLE__          isNeutral (Plus _ NeutralLevel{}) = True         isNeutral _                       = False@@ -618,81 +737,46 @@   -- | Check that the first sort equal to the second.-equalSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints+equalSort :: Sort -> Sort -> TCM () equalSort s1 s2 =-  ifM typeInType (return []) $+  ifM typeInType (return ()) $     catchConstraint (SortCmp CmpEq s1 s2) $ do         (s1,s2) <- reduce (s1,s2)-        reportSDoc "tc.conv.sort" 10 $+        reportSDoc "tc.conv.sort" 30 $           sep [ text "equalSort"-              , nest 2 $ fsep [ prettyTCM s1 <+> text "=="-                              , prettyTCM s2 ]+              , vcat [ nest 2 $ fsep [ prettyTCM s1 <+> text "=="+                                     , prettyTCM s2 ]+                     , nest 2 $ fsep [ text (show s1) <+> text "=="+                                     , text (show s2) ]+                     ]               ] 	case (s1,s2) of -            -- New universe polymorphism---             (Type a, Type b) -> compareLevel CmpEq a b--            (Type (Lit n), Type (Lit m))-              | n == m           -> return []-              | otherwise        -> notEq s1 s2             (Type a  , Type b  ) -> equalLevel a b -	    (MetaS x us , MetaS y vs) -> do-              s1 <- normalise s1-              s2 <- normalise s2-              if s1 == s2 then return []-			  else do-		[p1, p2] <- mapM getMetaPriority [x, y]-		if p1 >= p2 then assignS x us s2-			    else assignS y vs s1-	    (MetaS x vs, _       ) -> assignS x vs s2-	    (_	     , MetaS{} ) -> equalSort s2 s1--	    (Prop    , Prop    ) -> return []+	    (Prop    , Prop    ) -> return () 	    (Type _  , Prop    ) -> notEq s1 s2 	    (Prop    , Type _  ) -> notEq s1 s2 -	    (Suc s   , Prop    ) -> notEq s1 s2-	    (Suc s   , Type (Lit (LitLevel _ 0))) -> notEq s1 s2-	    (Suc s   , Type (Lit (LitLevel _ 1))) -> buildConstraint (SortCmp CmpEq s1 s2)-	    (Suc s   , Type (Lit (LitLevel _ n))) -> equalSort s (mkType $ n - 1)-	    (Prop    , Suc s   ) -> notEq s1 s2-	    (Type (Lit (LitLevel _ 0))  , Suc s   ) -> notEq s1 s2-	    (Type (Lit (LitLevel _ 1))  , Suc s   ) -> buildConstraint (SortCmp CmpEq s1 s2)-	    (Type (Lit (LitLevel _ n))  , Suc s   ) -> equalSort (mkType $ n - 1) s-            (Suc s1  , Suc s2  ) -> equalSort s1 s2 -- TODO: not what we want for Prop(?)-	    (_	     , Suc _   ) -> buildConstraint (SortCmp CmpEq s1 s2)-	    (Suc _   , _       ) -> buildConstraint (SortCmp CmpEq s1 s2)--            (Inf     , Inf     )             -> return []+            (Inf     , Inf     )             -> return ()+            (Inf     , Type (Max as@(_:_)))  -> mapM_ (isInf $ notEq s1 s2) as+            (Type (Max as@(_:_)), Inf)       -> mapM_ (isInf $ notEq s1 s2) as             (Inf     , _       )             -> notEq s1 s2             (_       , Inf     )             -> notEq s1 s2-            (s0@(Type (Lit (LitLevel _ 0))), Lub s1 s2) -> do-              cs1 <- equalSort s0 s1-              cs2 <- equalSort s0 s2-              return $ cs1 ++ cs2-            (Lub s1 s2, s0@(Type (Lit (LitLevel _ 0)))) -> do-              cs1 <- equalSort s1 s0-              cs2 <- equalSort s2 s0-              return $ cs1 ++ cs2-            (Lub{}   , Lub{}   ) -> do-              (s1, s2) <- normalise (s1, s2)-              if s1 == s2-                then return []-                else buildConstraint (SortCmp CmpEq s1 s2)-	    (Lub _ _ , _       ) -> buildConstraint (SortCmp CmpEq s1 s2)-	    (_	     , Lub _ _ ) -> buildConstraint (SortCmp CmpEq s1 s2) -            (DLub s1 s2, s0@(Type (Lit (LitLevel _ 0)))) -> do-              cs1 <- equalSort s1 s0-              cs2 <- underAbstraction_ s2 $ \s2 -> equalSort s2 s0-              return $ cs1 ++ cs2-            (s0@(Type (Lit (LitLevel _ 0))), DLub s1 s2) -> do-              cs1 <- equalSort s0 s1-              cs2 <- underAbstraction_ s2 $ \s2 -> equalSort s0 s2-              return $ cs1 ++ cs2-            (DLub{}  , _       )             -> buildConstraint (SortCmp CmpEq s1 s2)-            (_       , DLub{}  )             -> buildConstraint (SortCmp CmpEq s1 s2)+            (DLub s1 s2, s0@(Type (Max []))) -> do+              equalSort s1 s0+              underAbstraction_ s2 $ \s2 -> equalSort s2 s0+            (s0@(Type (Max [])), DLub s1 s2) -> do+              equalSort s0 s1+              underAbstraction_ s2 $ \s2 -> equalSort s0 s2+            (DLub{}  , _       )             -> addConstraint (SortCmp CmpEq s1 s2)+            (_       , DLub{}  )             -> addConstraint (SortCmp CmpEq s1 s2)     where 	notEq s1 s2 = typeError $ UnequalSorts s1 s2++        isInf notok ClosedLevel{} = notok+        isInf notok (Plus _ l) = case l of+          MetaLevel x vs          -> assignV x vs (Sort Inf)+          NeutralLevel (Sort Inf) -> return ()+          _                       -> notok
src/full/Agda/TypeChecking/Conversion.hs-boot view
@@ -4,15 +4,14 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad -compareTerm :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints-compareAtom :: MonadTCM tcm => Comparison -> Type -> Term -> Term -> tcm Constraints-compareArgs :: MonadTCM tcm => [Polarity] -> Type -> Args -> Args -> tcm Constraints-compareType :: MonadTCM tcm => Comparison -> Type -> Type -> tcm Constraints-compareTel  :: MonadTCM tcm => Comparison -> Telescope -> Telescope -> tcm Constraints-compareSort :: MonadTCM tcm => Comparison -> Sort -> Sort -> tcm Constraints-equalTerm :: MonadTCM tcm => Type -> Term -> Term -> tcm Constraints-equalArgs :: MonadTCM tcm => Type -> Args -> Args -> tcm Constraints-equalType :: MonadTCM tcm => Type -> Type -> tcm Constraints-equalSort :: MonadTCM tcm => Sort -> Sort -> tcm Constraints--+compareTerm  :: Comparison -> Type -> Term -> Term -> TCM ()+compareAtom  :: Comparison -> Type -> Term -> Term -> TCM ()+compareArgs  :: [Polarity] -> Type -> Term -> Args -> Args -> TCM ()+compareElims :: [Polarity] -> Type -> Term -> [Elim] -> [Elim] -> TCM ()+compareType  :: Comparison -> Type -> Type -> TCM ()+compareTel   :: Type -> Type -> Comparison -> Telescope -> Telescope -> TCM ()+compareSort  :: Comparison -> Sort -> Sort -> TCM ()+equalTerm    :: Type -> Term -> Term -> TCM ()+equalType    :: Type -> Type -> TCM ()+equalSort    :: Sort -> Sort -> TCM ()+leqType      :: Type -> Type -> TCM ()
src/full/Agda/TypeChecking/Coverage.hs view
@@ -33,6 +33,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Primitive (constructorForm) import Agda.TypeChecking.Telescope+import Agda.TypeChecking.Irrelevance  import Agda.Interaction.Options @@ -74,12 +75,11 @@       pwords "Cannot pattern match on record" ++ [prettyTCM t] ++       pwords "because it has no constructor"     CantSplit c tel cIxs gIxs flex -> addCtxTel tel $ vcat-      [ fsep $ pwords "Cannot pattern match on constructor" ++ [prettyTCM c <> text ","] ++-               pwords "since the inferred indices"+      [ fsep $ pwords "Cannot decide whether there should be a case for the constructor" ++ [prettyTCM c <> text ","] +++               pwords "since the unification gets stuck on unifying the inferred indices"       , nest 2 $ prettyTCM cIxs-      , fsep $ pwords "cannot be unified with the expected indices"+      , fsep $ pwords "with the expected indices"       , nest 2 $ prettyTCM gIxs-      , fsep $ pwords "for some" ++ punctuate comma (map prettyTCM flex)       ]     GenericSplitError s -> fsep $       pwords "Split failed:" ++ pwords s@@ -106,10 +106,10 @@   TelV gamma _ <- telView $ defType d   let defn = theDef d   case defn of-    Function{ funClauses = cs'@(_:_) } -> do-      let cs           = map translatedClause cs'-          n            = genericLength $ clausePats $ head cs-          gamma'       = telFromList $ genericTake n $ telToList gamma+    Function{ funProjection = proj, funClauses = cs@(_:_) } -> do+      let n            = genericLength $ clausePats $ head cs+          np           = maybe 0 snd proj+          gamma'       = telFromList $ genericTake n $ genericDrop np $ telToList gamma           xs           = map (fmap $ const $ VarP "_") $ telToList gamma'       reportSDoc "tc.cover.top" 10 $ vcat         [ text "Coverage checking"@@ -122,18 +122,17 @@           _   ->             setCurrentRange (getRange cs) $               typeError $ CoverageFailure f pss-      whenM (optUnreachableCheck <$> pragmaOptions) $-        case Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used of-          []  -> return ()-          is  -> do-            let unreached = map ((cs !!) . fromIntegral) is-            setCurrentRange (getRange unreached) $-              typeError $ UnreachableClauses f (map clausePats unreached)+      case Set.toList $ Set.difference (Set.fromList [0..genericLength cs - 1]) used of+        []  -> return ()+        is  -> do+          let unreached = map ((cs !!) . fromIntegral) is+          setCurrentRange (getRange unreached) $+            typeError $ UnreachableClauses f (map clausePats unreached)     _             -> __IMPOSSIBLE__  -- | Check that the list of clauses covers the given split clause. --   Returns the missing cases.-cover :: MonadTCM tcm => [Clause] -> SplitClause -> tcm (Set Nat, [[Arg Pattern]])+cover :: [Clause] -> SplitClause -> TCM (Set Nat, [[Arg Pattern]]) cover cs (SClause tel perm ps _) = do   reportSDoc "tc.cover.cover" 10 $ vcat     [ text "checking coverage of pattern:"@@ -148,18 +147,17 @@       let is = [ j | (j, c) <- zip [0..] (genericTake i cs), matchLits c ps perm ]       reportSLn "tc.cover.cover"  10 $ "literal matches: " ++ show is       return (Set.fromList (i : is), [])-    No             -> return (Set.empty, [ps])-    Block Nothing  -> fail $ "blocked by dot pattern"-    Block (Just x) -> do+    No      -> return (Set.empty, [ps])+    Block x -> do       r <- split Inductive tel perm ps x       case r of         Left err  -> case err of-          CantSplit c _ _ _ _   -> typeError $ CoverageCantSplitOn c-          NotADatatype a        -> typeError $ CoverageCantSplitType a-          IrrelevantDatatype a  -> typeError $ CoverageCantSplitType a-          CoinductiveDatatype a -> typeError $ CoverageCantSplitType a-          NoRecordConstructor a -> typeError $ CoverageCantSplitType a-          GenericSplitError s   -> fail $ "failed to split: " ++ s+          CantSplit c tel us vs _ -> typeError $ CoverageCantSplitOn c tel us vs+          NotADatatype a          -> typeError $ CoverageCantSplitType a+          IrrelevantDatatype a    -> typeError $ CoverageCantSplitIrrelevantType a+          CoinductiveDatatype a   -> typeError $ CoverageCantSplitType a+          NoRecordConstructor a   -> typeError $ CoverageCantSplitType a+          GenericSplitError s     -> fail $ "failed to split: " ++ s         Right scs -> (Set.unions -*- concat) . unzip <$> mapM (cover cs) scs  -- | Check that a type is a non-irrelevant datatype or a record with@@ -170,15 +168,17 @@               tcm (QName, [Arg Term], [Arg Term], [QName]) isDatatype ind at = do   let t = unArg at-  t' <- normalise t+  t' <- liftTCM $ reduce t   case unEl t' of     Def d args -> do-      def <- theDef <$> getConstInfo d+      def <- liftTCM $ theDef <$> getConstInfo d+      splitOnIrrelevantDataAllowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions       case def of         Datatype{dataPars = np, dataCons = cs, dataInduction = i}           | i == CoInductive && ind /= CoInductive ->               throwException $ CoinductiveDatatype t-          | argRelevance at == Irrelevant ->+          -- Andreas, 2011-10-03 allow some splitting on data (if only one constr. matches)+          | argRelevance at == Irrelevant && not splitOnIrrelevantDataAllowed ->               throwException $ IrrelevantDatatype t           | otherwise -> do               let (ps, is) = genericSplitAt np args@@ -194,16 +194,16 @@ computeNeighbourhood delta1 delta2 perm d pars ixs hix hps con = do    -- Get the type of the datatype-  dtype <- normalise =<< (`piApply` pars) . defType <$> getConstInfo d+  dtype <- liftTCM $ (`piApply` pars) . defType <$> getConstInfo d    -- Get the real constructor name-  Con con [] <- constructorForm =<< normalise (Con con [])+  Con con [] <- liftTCM $ constructorForm =<< normalise (Con con [])    -- Get the type of the constructor-  ctype <- defType <$> getConstInfo con+  ctype <- liftTCM $ defType <$> getConstInfo con    -- Lookup the type of the constructor at the given parameters-  TelV gamma (El _ (Def _ cixs)) <- telView (ctype `piApply` pars)+  TelV gamma (El _ (Def _ cixs)) <- liftTCM $ telView (ctype `piApply` pars)    debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix @@ -259,7 +259,7 @@       -- Apply the unifying substitution to Θ       -- We get ρ' : Θ' -> Θ       --        π  : Θ' -> Θ-      (theta', iperm, rho', _) <- instantiateTel sub' theta+      (theta', iperm, rho', _) <- liftTCM $ instantiateTel sub' theta       debugTel "theta'" theta'       debugShow "iperm" iperm @@ -282,7 +282,7 @@    where     debugInit con ctype pars ixs cixs delta1 delta2 gamma hps hix =-      reportSDoc "tc.cover.split.con" 20 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ vcat         [ text "computeNeighbourhood"         , nest 2 $ vcat           [ text "con    =" <+> prettyTCM con@@ -299,34 +299,34 @@         ]      debugNoUnify =-      reportSLn "tc.cover.split.con" 20 "  Constructor impossible!"+      liftTCM $ reportSLn "tc.cover.split.con" 20 "  Constructor impossible!"      debugCantSplit =-      reportSLn "tc.cover.split.con" 20 "  Bad split!"+      liftTCM $ reportSLn "tc.cover.split.con" 20 "  Bad split!"      debugSubst s sub =-      reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat         [ text (s ++ " =") <+> brackets (fsep $ punctuate comma $ map (maybe (text "_") prettyTCM) sub)         ]      debugTel s tel =-      reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat         [ text (s ++ " =") <+> prettyTCM tel         ]      debugShow s x =-      reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat         [ text (s ++ " =") <+> text (show x)         ]      debugPlugged ps ps' =-      reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat         [ text "ps     =" <+> text (show ps)         , text "ps'    =" <+> text (show ps')         ]      debugFinal tel perm ps =-      reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat+      liftTCM $ reportSDoc "tc.cover.split.con" 20 $ nest 2 $ vcat         [ text "rtel   =" <+> prettyTCM tel         , text "rperm  =" <+> text (show perm)         , text "rps    =" <+> text (show ps)@@ -341,12 +341,11 @@ splitClauseWithAbs c x =   split' Inductive (clauseTel c) (clausePerm c) (clausePats c) x -split :: MonadTCM tcm-      => Induction+split :: Induction          -- ^ Coinductive constructors are allowed if this argument is          -- 'CoInductive'.       -> Telescope -> Permutation -> [Arg Pattern] -> Nat-      -> tcm (Either SplitError Covering)+      -> TCM (Either SplitError Covering) split ind tel perm ps x = do   r <- split' ind tel perm ps x   return $ case r of@@ -354,12 +353,11 @@     Right (Left _)  -> Right []     Right (Right c) -> Right c -split' :: MonadTCM tcm-       => Induction+split' :: Induction           -- ^ Coinductive constructors are allowed if this argument is           -- 'CoInductive'.        -> Telescope -> Permutation -> [Arg Pattern] -> Nat-       -> tcm (Either SplitError (Either SplitClause Covering))+       -> TCM (Either SplitError (Either SplitClause Covering)) split' ind tel perm ps x = liftTCM $ runExceptionT $ do    debugInit tel perm x ps@@ -370,7 +368,7 @@     return (telFromList tel1, telFromList tel2)    -- Get the type of the variable-  t <- normalise $ typeOfVar tel x  -- Δ₁ ⊢ t+  let t = typeOfVar tel x  -- Δ₁ ⊢ t    -- Compute the one hole context of the patterns at the variable   (hps, hix) <- do@@ -380,16 +378,16 @@      -- There is always a variable at the given hole.     let (hix, (VarP s, hps)) = holes !! fromIntegral x-    debugHoleAndType s hps t+    debugHoleAndType delta1 delta2 s hps t      return (hps, hix)    -- Check that t is a datatype or a record   -- Andreas, 2010-09-21, isDatatype now directly throws an exception if it fails-  (d, pars, ixs, cons) <- isDatatype ind t+  (d, pars, ixs, cons) <- inContextOfT $ isDatatype ind t -  whenM (optWithoutK <$> pragmaOptions) $-    Split.wellFormedIndices pars ixs+  liftTCM $ whenM (optWithoutK <$> pragmaOptions) $+    inContextOfT $ Split.wellFormedIndices pars ixs    -- Compute the neighbourhoods for the constructors   ns <- concat <$> mapM (computeNeighbourhood delta1 delta2 perm d pars ixs hix hps) cons@@ -405,25 +403,36 @@                , scSubst = [] -- not used anyway                } +    -- Andreas, 2011-10-03+    -- if more than one constructor matches, we cannot be irrelevant+    -- (this piece of code is unreachable if --experimental-irrelevance is off)+    (_ : _ : _) | unusableRelevance (argRelevance t) ->+      throwException $ IrrelevantDatatype (unArg t)+     _   -> return $ Right ns    where +    inContextOfT :: MonadTCM tcm => tcm a -> tcm a+    inContextOfT = escapeContext (fromIntegral x + 1)+     -- Debug printing     debugInit tel perm x ps =-      reportSDoc "tc.cover.top" 10 $ vcat+      liftTCM $ reportSDoc "tc.cover.top" 10 $ vcat         [ text "TypeChecking.Rules.LHS.Coverage.split': split"         , nest 2 $ vcat-          [ text "tel  =" <+> prettyTCM tel-          , text "perm =" <+> text (show perm)-          , text "x    =" <+> text (show x)-          , text "ps   =" <+> text (show ps)+          [ text "tel     =" <+> prettyTCM tel+          , text "perm    =" <+> text (show perm)+          , text "x       =" <+> text (show x)+          , text "ps      =" <+> text (show ps)           ]         ] -    debugHoleAndType s hps t =-      reportSDoc "tc.cover.top" 10 $ nest 2 $ vcat $-        [ text "p   =" <+> text s-        , text "hps =" <+> text (show hps)-        , text "t   =" <+> prettyTCM t+    debugHoleAndType delta1 delta2 s hps t =+      liftTCM $ reportSDoc "tc.cover.top" 10 $ nest 2 $ vcat $+        [ text "p      =" <+> text s+        , text "hps    =" <+> text (show hps)+        , text "delta1 =" <+> prettyTCM delta1+        , text "delta2 =" <+> prettyTCM delta2+        , text "t      =" <+> inContextOfT (prettyTCM t)         ]
src/full/Agda/TypeChecking/Coverage/Match.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, DeriveFunctor #-}  module Agda.TypeChecking.Coverage.Match where @@ -27,7 +27,7 @@ buildMPatterns :: Permutation -> [Arg Pattern] -> [Arg MPat] buildMPatterns perm ps = evalState (mapM (traverse build) ps) xs   where-    xs   = permute (invertP perm) $ reverse [0 .. fromIntegral (size perm) - 1]+    xs   = permute (invertP perm) $ reverse [0 .. size perm - 1]     tick = do x : xs <- get; put xs; return x      build (VarP _)        = VarMP <$> tick@@ -40,14 +40,9 @@     buildT _              = return WildMP  -- | If matching is inconclusive (@Block@) we want to know which---   variable is blocking the match. If a dot pattern is blocking a match---   we're screwed.-data Match a = Yes a | No | Block (Maybe Nat)--instance Functor Match where-  fmap f (Yes a)   = Yes (f a)-  fmap f No        = No-  fmap f (Block x) = Block x+--   variable is blocking the match.+data Match a = Yes a | No | Block Nat+  deriving (Functor)  instance Monoid a => Monoid (Match a) where   mempty                    = Yes mempty@@ -110,8 +105,8 @@ matchPat _    (DotP _) _ = Yes () matchPat mlit (LitP l) q = mlit l q matchPat mlit (ConP c _ ps) q = case q of-  VarMP x -> Block $ Just x-  WildMP  -> Block Nothing+  VarMP x -> Block x+  WildMP  -> Yes ()   ConMP c' qs     | c == c'   -> matchPats mlit ps qs     | otherwise -> No
src/full/Agda/TypeChecking/Datatypes.hs view
@@ -17,7 +17,7 @@  -- | Get the name of the datatype constructed by a given constructor. --   Precondition: The argument must refer to a constructor-getConstructorData :: MonadTCM tcm => QName -> tcm QName+getConstructorData :: QName -> TCM QName getConstructorData c = do   def <- getConstInfo c   case theDef def of@@ -25,7 +25,7 @@     _                        -> __IMPOSSIBLE__  -- | Check if a name refers to a datatype or a record with a named constructor.-isDatatype :: MonadTCM tcm => QName -> tcm Bool+isDatatype :: QName -> TCM Bool isDatatype d = do   def <- getConstInfo d   case theDef def of@@ -33,6 +33,15 @@     Record{recNamedCon = namedC} -> return namedC     _                            -> return False +-- | Check if a name refers to a datatype or a record.+isDataOrRecordType :: QName -> TCM Bool+isDataOrRecordType d = do+  def <- getConstInfo d+  case theDef def of+    Datatype{} -> return True+    Record{}   -> return True+    _          -> return False+ data DatatypeInfo = DataInfo   { datatypeName   :: QName   , datatypeParTel :: Telescope@@ -43,7 +52,7 @@  -- | Get the name and parameters from a type if it's a datatype or record type --   with a named constructor.-getDatatypeInfo :: MonadTCM tcm => Type -> tcm (Maybe DatatypeInfo)+getDatatypeInfo :: Type -> TCM (Maybe DatatypeInfo) getDatatypeInfo t = do   t <- reduce t   case unEl t of
src/full/Agda/TypeChecking/Datatypes.hs-boot view
@@ -4,5 +4,4 @@ import Agda.TypeChecking.Monad.Base import Agda.Syntax.Internal -getConstructorData :: MonadTCM tcm => QName -> tcm QName-+getConstructorData :: QName -> TCM QName
src/full/Agda/TypeChecking/DisplayForm.hs view
@@ -20,7 +20,7 @@ displayForm :: QName -> Args -> TCM (Maybe DisplayTerm) displayForm c vs = do     odfs  <- defDisplay <$> getConstInfo c-    unless (null odfs) $ verboseS "tc.display.top" 30 $ do+    unless (null odfs) $ verboseS "tc.display.top" 100 $ do       n <- getContextId       let fvs = map (\(OpenThing n _) -> n) odfs       reportSLn "" 0 $ "displayForm: context = " ++ show n ++ ", dfs = " ++ show fvs@@ -31,10 +31,11 @@     let matches dfs vs = [ m | Just m <- map (flip matchDisplayForm vs) dfs, inScope scope m ]     -- Not safe when printing non-terminating terms.     -- (nfdfs, us) <- normalise (dfs, vs)-    unless (null odfs) $ reportSLn "tc.display.top" 20 $ unlines+    unless (null odfs) $ reportSLn "tc.display.top" 100 $ unlines       [ "displayForms: " ++ show dfs       , "arguments   : " ++ show vs       , "matches     : " ++ show (matches dfs vs)+      , "result      : " ++ show (foldr (const . Just) Nothing $ matches dfs vs)       ]     return $ foldr (const . Just) Nothing $ matches dfs vs -- ++ matches nfdfs us   `catchError` \_ -> return Nothing
+ src/full/Agda/TypeChecking/Eliminators.hs view
@@ -0,0 +1,71 @@+{-# LANGUAGE CPP #-}++module Agda.TypeChecking.Eliminators where++import Control.Applicative+import Control.Monad++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Monad+import Agda.TypeChecking.Substitute+import Agda.Utils.Impossible+import Agda.TypeChecking.Reduce++#include "../undefined.h"++data ElimView = VarElim Nat [Elim]+              | DefElim QName [Elim]+              | ConElim QName [Elim]+              | MetaElim MetaId [Elim]+              | NoElim Term++elimView :: Term -> TCM ElimView+elimView v = do+  -- We can't assume that v has been reduced here in recursive calls,+  -- since reducing a stuck application doesn't necessarily reduces all+  -- the arguments.+  v <- reduce v+  case v of+    Def f vs -> do+      proj <- isProjection f+      case proj of+        Nothing -> DefElim f `app` vs+        Just{}  -> do+          case vs of+            rv : vs' -> elim (Proj f : map Apply vs') <$> elimView (unArg rv)+            [] -> __IMPOSSIBLE__+              -- elimView should only be called from the conversion checker+              -- with properly saturated applications+    Var x vs   -> VarElim x `app` vs+    Con c vs   -> ConElim c `app` vs+    MetaV m vs -> MetaElim m `app` vs+    Lam{}      -> noElim+    Lit{}      -> noElim+    Level{}    -> noElim+    Sort{}     -> noElim+    Pi{}       -> noElim+    DontCare{} -> noElim+    where+      noElim = return $ NoElim v+      app f vs = return $ f $ map Apply vs+      elim :: [Elim] -> ElimView -> ElimView+      elim _    NoElim{}        = __IMPOSSIBLE__+      elim es2 (VarElim  x es1) = VarElim  x (es1 ++ es2)+      elim es2 (DefElim  x es1) = DefElim  x (es1 ++ es2)+      elim es2 (ConElim  x es1) = ConElim  x (es1 ++ es2)+      elim es2 (MetaElim x es1) = MetaElim x (es1 ++ es2)++-- | Only used when producing error messages.+unElimView :: ElimView -> Term+unElimView v = case v of+  VarElim x es  -> unElim (Var x []) es+  DefElim x es  -> unElim (Def x []) es+  ConElim x es  -> unElim (Con x []) es+  MetaElim x es -> unElim (MetaV x []) es+  NoElim v      -> v++unElim :: Term -> [Elim] -> Term+unElim v [] = v+unElim v (Apply u : es) = unElim (v `apply` [u]) es+unElim v (Proj f : es)  = unElim (Def f [Arg NotHidden Relevant v]) es
src/full/Agda/TypeChecking/Empty.hs view
@@ -10,29 +10,36 @@ import Agda.TypeChecking.Coverage import Agda.TypeChecking.Constraints import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute  import Agda.Utils.Permutation import Agda.Utils.Size  -- | Make sure that a type is empty.-isEmptyType :: MonadTCM tcm => Type -> tcm ()-isEmptyType t = noConstraints $ isEmptyTypeC t+isReallyEmptyType :: Type -> TCM ()+isReallyEmptyType t = noConstraints $ isEmptyType t -isEmptyTypeC :: MonadTCM tcm => Type -> tcm Constraints-isEmptyTypeC t = do+isEmptyType :: Type -> TCM ()+isEmptyType t = do   tb <- reduceB t   let t = ignoreBlocking tb   case unEl <$> tb of-    NotBlocked MetaV{} -> buildConstraint (IsEmpty t)-    Blocked{}          -> buildConstraint (IsEmpty t)+    -- if t is blocked or a meta, we cannot decide emptyness now. postpone+    NotBlocked MetaV{} -> addConstraint (IsEmpty t)+    Blocked{}          -> addConstraint (IsEmpty t)     _                  -> do+    -- from the current context xs:ts, create a pattern list+    -- xs _ : ts t and try to split on _ (the last variable)       tel0 <- getContextTelescope-      let tel = telFromList $ telToList tel0 ++ [defaultArg ("_", t)]-          ps  = [ Arg h r $ VarP x | Arg h r (x, _) <- telToList tel ]+      let gamma = telToList tel0 ++ [defaultArg ("_", t)]+          ps    = [ Arg h r $ VarP x | Arg h r (x, _) <- gamma ]+          tel   = telFromList gamma        r <- split Inductive tel (idP $ size tel) ps 0        case r of-        Left err  -> typeError $ ShouldBeEmpty t []-        Right []  -> return []+        Left err  -> case err of+          CantSplit c tel us vs _ -> traceCall (CheckIsEmpty t) $ typeError $ CoverageCantSplitOn c tel us vs+          _                       -> typeError $ ShouldBeEmpty t []+        Right []  -> return ()         Right cs  -> typeError $ ShouldBeEmpty t $ map (unArg . last . scPats) cs
src/full/Agda/TypeChecking/Empty.hs-boot view
@@ -1,9 +1,8 @@  module Agda.TypeChecking.Empty where -import Agda.TypeChecking.Monad (MonadTCM, Constraints)+import Agda.TypeChecking.Monad (TCM) import Agda.Syntax.Internal (Type) -isEmptyType :: MonadTCM tcm => Type -> tcm ()-isEmptyTypeC :: MonadTCM tcm => Type -> tcm Constraints-+isReallyEmptyType :: Type -> TCM ()+isEmptyType       :: Type -> TCM ()
src/full/Agda/TypeChecking/Errors.hs view
@@ -39,7 +39,7 @@ -- * Top level function --------------------------------------------------------------------------- -prettyError :: MonadTCM tcm => TCErr -> tcm String+prettyError :: TCErr -> TCM String prettyError err = liftTCM $ liftM show $     prettyTCM err     `catchError` \err' -> text "panic: error when printing error!" $$ prettyTCM err'@@ -53,17 +53,17 @@ -- * Helpers --------------------------------------------------------------------------- -sayWhere :: (MonadTCM tcm, HasRange a) => a -> tcm Doc -> tcm Doc+sayWhere :: HasRange a => a -> TCM Doc -> TCM Doc sayWhere x d = text (show $ getRange x) $$ d -sayWhen :: MonadTCM tcm => Range -> Maybe (Closure Call) -> tcm Doc -> tcm Doc+sayWhen :: Range -> Maybe (Closure Call) -> TCM Doc -> TCM Doc sayWhen r Nothing   m = sayWhere r m sayWhen r (Just cl) m = sayWhere r (m $$ prettyTCM cl) -panic :: MonadTCM tcm => String -> tcm Doc+panic :: String -> TCM Doc panic s = fwords $ "Panic: " ++ s -nameWithBinding :: MonadTCM tcm => QName -> tcm Doc+nameWithBinding :: QName -> TCM Doc nameWithBinding q =   sep [ prettyTCM q, text "bound at", text (show r) ]   where@@ -75,7 +75,7 @@     Exception r s   -> show r ++ " " ++ s     IOException r e -> show r ++ " " ++ show e     PatternErr _    -> "PatternErr"-    AbortAssign _   -> "AbortAssign"+    {- AbortAssign _   -> "AbortAssign" -- UNUSED -}  errorString :: TypeError -> String errorString err = case err of@@ -96,6 +96,7 @@     ConstructorPatternInWrongDatatype{}      -> "ConstructorPatternInWrongDatatype"     CoverageFailure{}                        -> "CoverageFailure"     CoverageCantSplitOn{}                    -> "CoverageCantSplitOn"+    CoverageCantSplitIrrelevantType{}        -> "CoverageCantSplitIrrelevantType"     CoverageCantSplitType{}                  -> "CoverageCantSplitType"     CyclicModuleDependency{}                 -> "CyclicModuleDependency"     DataMustEndInSort{}                      -> "DataMustEndInSort"@@ -108,6 +109,7 @@     FieldOutsideRecord                       -> "FieldOutsideRecord"     FileNotFound{}                           -> "FileNotFound"     GenericError{}                           -> "GenericError"+    IFSNoCandidateInScope{}                  -> "IFSNoCandidateInScope"     IlltypedPattern{}                        -> "IlltypedPattern"     IncompletePatternMatching{}              -> "IncompletePatternMatching"     IndexFreeInParameter{}                   -> "IndexFreeInParameter"@@ -141,10 +143,14 @@     NotLeqSort{}                             -> "NotLeqSort"     NotStrictlyPositive{}                    -> "NotStrictlyPositive"     NothingAppliedToHiddenArg{}              -> "NothingAppliedToHiddenArg"+    NothingAppliedToInstanceArg{}            -> "NothingAppliedToInstanceArg"     OverlappingProjects {}                   -> "OverlappingProjects"     PatternShadowsConstructor {}             -> "PatternShadowsConstructor"     PropMustBeSingleton                      -> "PropMustBeSingleton"     RepeatedVariablesInPattern{}             -> "RepeatedVariablesInPattern"+    SafeFlagPostulate{}                      -> "SafeFlagPostulate"+    SafeFlagPragma{}                         -> "SafeFlagPragma"+    SafeFlagPrimTrustMe{}                    -> "SafeFlagPrimTrustMe"     ShadowedModule{}                         -> "ShadowedModule"     ShouldBeASort{}                          -> "ShouldBeASort"     ShouldBeApplicationOf{}                  -> "ShouldBeApplicationOf"@@ -167,6 +173,7 @@     UnequalTerms{}                           -> "UnequalTerms"     UnequalTypes{}                           -> "UnequalTypes"     UnequalTelescopes{}                      -> "UnequalTelescopes"+    HeterogeneousEquality{}                  -> "HeterogeneousEquality"     UnexpectedWithPatterns{}                 -> "UnexpectedWithPatterns"     UninstantiatedDotPattern{}               -> "UninstantiatedDotPattern"     UninstantiatedModule{}                   -> "UninstantiatedModule"@@ -177,6 +184,7 @@     WrongHidingInApplication{}               -> "WrongHidingInApplication"     WrongHidingInLHS{}                       -> "WrongHidingInLHS"     WrongHidingInLambda{}                    -> "WrongHidingInLambda"+    WrongIrrelevanceInLambda{}               -> "WrongIrrelevanceInLambda"     WrongNumberOfConstructorArguments{}      -> "WrongNumberOfConstructorArguments"  instance PrettyTCM TCErr where@@ -190,7 +198,7 @@ 	Exception r s   -> sayWhere r $ fwords s 	IOException r e -> sayWhere r $ fwords $ show e 	PatternErr _    -> sayWhere err $ panic "uncaught pattern violation"-	AbortAssign _   -> sayWhere err $ panic "uncaught aborted assignment"+	{- AbortAssign _   -> sayWhere err $ panic "uncaught aborted assignment" -- UNUSED -}  instance PrettyTCM TypeError where     prettyTCM err = do@@ -200,10 +208,18 @@ 	    NotSupported s -> fwords $ "Not supported: " ++ s 	    CompilationError s -> sep [fwords "Compilation error:", text s] 	    GenericError s   -> fwords s-	    TerminationCheckFailed because -> fsep $-	      pwords "Termination checking failed for the following functions:" ++-              [ fsep (punctuate comma (map (text . show . qnameName)-                                           (concatMap fst because))) <> text "." ]+	    TerminationCheckFailed because ->+              fwords "Termination checking failed for the following functions:"+              $$ (nest 2 $+                    fsep (punctuate comma (map (text . show . qnameName)+                                               (concatMap termErrFunctions because))))+              $$ fwords "Problematic calls:"+              $$ (nest 2 $ vcat $+                    map (\c -> let call = text (callInfoCall c) in+                               case show (callInfoRange c) of+                                 "" -> call+                                 r  -> call $$ nest 2 (text "(at" <+> text r <> text ")"))+                        (concatMap termErrCalls because)) 	    PropMustBeSingleton -> fwords 		"Datatypes in Prop must have at most one constructor when proof irrelevance is enabled" 	    DataMustEndInSort t -> fsep $@@ -226,6 +242,8 @@ 		fwords "Found an implicit argument where an explicit argument was expected" 	    WrongHidingInLambda t -> do 		fwords "Found an implicit lambda where an explicit lambda was expected"+	    WrongIrrelevanceInLambda t -> do+		fwords "Found an irrelevant lambda where a relevant lambda was expected" 	    WrongHidingInApplication t -> do 		fwords "Found an implicit application where an explicit application was expected"             NotInductive t -> fsep $@@ -245,7 +263,8 @@             ConstructorPatternInWrongDatatype c d -> fsep $               [prettyTCM c] ++ pwords "is not a constructor of the datatype" ++ [prettyTCM d]             IndicesNotConstructorApplications is ->-              fsep (pwords "The following indices are not constructors applied to variables:")+              fsep (pwords "The following indices are not constructors" +++                    pwords "(or literals) applied to variables:")               $$ nest 2 (vcat $ map prettyTCM is)             IndexVariablesNotDistinct is ->               fsep (pwords "The variables in the following indices are not distinct:")@@ -273,7 +292,7 @@               pwords "The arguments to " ++ [prettyTCM m] ++ pwords "does not fit the telescope" ++ 	      [prettyTCM tel]             ShouldBeEmpty t [] -> fsep $-		[prettyTCM t] ++ pwords "should be empty, but it isn't obvious that it is."+		[prettyTCM t] ++ pwords "should be empty, but that's not obvious to me" 	    ShouldBeEmpty t ps -> fsep ( 		[prettyTCM t] ++                 pwords "should be empty, but the following constructor patterns are valid:"@@ -286,12 +305,12 @@ 	    NotAProperTerm -> 		fwords "Found a malformed term"             SplitOnIrrelevant p t -> fsep $-                pwords "cannot pattern match" ++ [prettyA p] +++                pwords "Cannot pattern match" ++ [prettyA p] ++                 pwords "against irrelevant type" ++ [prettyTCM t]             DefinitionIsIrrelevant x -> fsep $-                text "identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"+                text "Identifier" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"             VariableIsIrrelevant x -> fsep $-                text "variable" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"+                text "Variable" : prettyTCM x : pwords "is declared irrelevant, so it cannot be used here"  	    UnequalTerms cmp s t a -> fsep $ 		[prettyTCM s, f cmp, prettyTCM t] ++ pwords "of type" ++ [prettyTCM a]                 where@@ -312,6 +331,10 @@                 where                   f CmpEq  = text "!="                   f CmpLeq = text "!=<"+	    HeterogeneousEquality u a v b -> fsep $+                pwords "Refuse to solve heterogeneous constraint" +++                [prettyTCM u] ++ pwords ":" ++ [prettyTCM a] ++ pwords "=?=" +++                [prettyTCM v] ++ pwords ":" ++ [prettyTCM b] 	    UnequalRelevance a b -> fsep $ 		[prettyTCM a] ++ pwords "!=" ++ [prettyTCM b] ++ -- Andreas 2010-09-21 to reveal Forced annotations, print also uglily@@ -477,6 +500,9 @@ 	    NothingAppliedToHiddenArg e	-> fsep $ 		[pretty e] ++ pwords "cannot appear by itself. It needs to be the argument to" ++ 		pwords "a function expecting an implicit argument."+	    NothingAppliedToInstanceArg e -> fsep $+		[pretty e] ++ pwords "cannot appear by itself. It needs to be the argument to" +++		pwords "a function expecting an instance argument." 	    NoParseForApplication es -> fsep $ 		pwords "Could not parse the application" ++ [pretty $ C.RawApp noRange es] 	    AmbiguousParseForApplication es es' -> fsep (@@ -511,9 +537,16 @@                       then return ps                       else return ps  -- TODO: remove implicit arguments which aren't constructors -            CoverageCantSplitOn c -> fsep $-              pwords "Cannot split on the constructor" ++ [prettyTCM c]+            CoverageCantSplitOn c tel cIxs gIxs -> inContext [] $ addCtxTel tel $ vcat+              [ fsep $ pwords "Cannot decide whether there should be a case for the constructor" ++ [prettyTCM c <> text ","] +++                       pwords "since the unification gets stuck on unifying the inferred indices"+              , nest 2 $ prettyTCM cIxs+              , fsep $ pwords "with the expected indices"+              , nest 2 $ prettyTCM gIxs ] +            CoverageCantSplitIrrelevantType a -> fsep $+              pwords "Cannot split on argument of irrelevant datatype" ++ [prettyTCM a]+             CoverageCantSplitType a -> fsep $               pwords "Cannot split on argument of non-datatype" ++ [prettyTCM a] @@ -543,13 +576,23 @@  		    com []    = empty 		    com (_:_) = comma-+            IFSNoCandidateInScope t -> fsep $+                pwords "No variable of type" ++ [prettyTCM t] ++ pwords "was found in scope."+            SafeFlagPostulate e -> fsep $+                pwords "Cannot postulate" ++ [pretty e] ++ pwords "with safe flag"+            SafeFlagPragma xs ->+                let plural | length xs == 1 = ""+                           | otherwise      = "s"+                in fsep $ [fwords ("Cannot set OPTION pragma" ++ plural)]+                          ++ map text xs ++ [fwords "with safe flag."]+            SafeFlagPrimTrustMe -> fsep (pwords "Cannot use primTrustMe with safe flag")           where             mpar n args               | n > 0 && not (null args) = parens               | otherwise                = id              showArg (Arg Hidden r x)    = braces $ showPat 0 x+            showArg (Arg Instance r x)  = dbraces $ showPat 0 x             showArg (Arg NotHidden r x) = showPat 1 x              showPat _ (I.VarP _)        = text "_"@@ -598,6 +641,9 @@ 	CheckPrimitive _ x e _ -> fsep $ 	    pwords "when checking that the type of the primitive function" ++ 	    [prettyTCM x] ++ pwords "is" ++ [prettyA e]+        CheckWithFunctionType e _ -> fsep $+            pwords "when checking that the type" +++            [prettyA e] ++ pwords "of the generated with function is well-formed"         CheckDotPattern e v _ -> fsep $             pwords "when checking that the given dot pattern" ++ [prettyA e] ++             pwords "matches the inferred value" ++ [prettyTCM v]@@ -607,14 +653,13 @@ 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x] 	InferDef _ x _ -> 	    fsep $ pwords "when inferring the type of" ++ [prettyTCM x]+        CheckIsEmpty t _ ->+            fsep $ pwords "when checking that" ++ [prettyTCM t] ++ pwords "has no constructors" 	ScopeCheckExpr e _ -> 	    fsep $ pwords "when scope checking" ++ [pretty e] 	ScopeCheckDeclaration d _ -> 	    fwords "when scope checking the declaration" $$ 	    nest 2 (pretty $ simpleDecl d)-	ScopeCheckDefinition d _ ->-	    fwords "when scope checking the definition" $$-	    nest 2 (vcat $ map pretty $ simpleDef d) 	ScopeCheckLHS x p _ -> 	    fsep $ pwords "when scope checking the left-hand side" ++ [pretty p] ++ 		   pwords "in the definition of" ++ [pretty x]@@ -622,41 +667,15 @@ 	    fsep $ pwords "when termination checking the definition of" ++ [prettyTCM f] 	SetRange r _ -> 	    fsep $ pwords "when doing something at" ++ [text $ show r]-        CheckSectionApplication _ m1 ptel m2 args _ -> fsep $+        CheckSectionApplication _ m1 modapp _ -> fsep $           pwords "when checking the module application" ++-          [prettyA $ A.Apply info m1 ptel m2 args Map.empty Map.empty]+          [prettyA $ A.Apply info m1 modapp Map.empty Map.empty]           where             info = A.ModuleInfo noRange noRange Nothing Nothing Nothing  	where 	    hPretty a = pretty =<< abstractToConcreteCtx (hiddenArgumentCtx (argHiding a)) a -	    simpleDef d = case d of-	      D.FunDef _ ds _ _ _ _ _	 -> ds-	      D.DataDef r fx p a d bs cs ->-		[ C.Data r Inductive d (map bind bs) (C.Underscore noRange Nothing)-		    $ map simpleDecl cs-		]-	      D.RecDef r fx p a d c bs cs ->-		[ C.Record r d (name <$> c) (map bind bs) (C.Underscore noRange Nothing)-		    $ map simpleDecl cs-		]-	      where-		bind :: C.LamBinding -> C.TypedBindings-		bind (C.DomainFull b) = b-		bind (C.DomainFree h x) = C.TypedBindings r $ Arg h Relevant [C.TBind r [x] (C.Underscore r Nothing)]-		  where r = getRange x--                name (D.Axiom _ _ _ _ _ n _) = n-                name _                     = __IMPOSSIBLE__+	    simpleDecl d = d'+              where [d'] = D.notSoNiceDeclarations [d] -	    simpleDecl d = case d of-		D.Axiom _ _ _ _ rel x e		       -> C.TypeSig rel x e-		D.NiceField _ _ _ _ x e	               -> C.Field x e-		D.PrimitiveFunction r _ _ _ x e	       -> C.Primitive r [C.TypeSig Relevant x e]-		D.NiceDef r ds _ _		       -> C.Mutual r ds-		D.NiceModule r _ _ x tel _	       -> C.Module r x tel []-		D.NiceModuleMacro r _ _ x tel e op dir -> C.ModuleMacro r x tel e op dir-		D.NiceOpen r x dir		       -> C.Open r x dir-		D.NiceImport r x as op dir	       -> C.Import r x as op dir-		D.NicePragma _ p		       -> C.Pragma p
src/full/Agda/TypeChecking/EtaContract.hs view
@@ -26,32 +26,40 @@   Def c xs   -> app (Def c) xs   Con c xs   -> app (Con c) xs   Lit _      -> noApp+  Level _    -> noApp   -- could be an application, but let's not eta contract levels   Lam _ _    -> noApp   Pi _ _     -> noApp-  Fun _ _    -> noApp   Sort _     -> noApp   MetaV _ _  -> noApp-  DontCare   -> noApp+  DontCare _ -> noApp   where     noApp = NoApp t     app f [] = noApp     app f xs = App (f $ init xs) (last xs) -etaContract :: (MonadTCM tcm, TermLike a) => a -> tcm a+etaContract :: TermLike a => a -> TCM a etaContract = traverseTermM etaOnce   where -etaOnce :: (MonadTCM tcm) => Term -> tcm Term+etaOnce :: Term -> TCM Term etaOnce v = ignoreAbstractMode $ eta v   where-    eta t@(Lam h b) = do+    eta t@(Lam h (Abs _ b)) = do  -- NoAbs can't be eta'd       imp <- shouldEtaContractImplicit-      case binAppView (absBody b) of-        App u (Arg h' r (Var 0 []))-          | allowed imp h' && not (freeIn 0 u) ->+      case binAppView b of+        App u (Arg h' r v)+          | isVar0 v && allowed imp h' && not (freeIn 0 u) ->             return $ subst __IMPOSSIBLE__ u         _ -> return t       where+        isVar0 (Var 0 [])               = True+        isVar0 (DontCare{})             = True  -- Andreas, 2011-10-01 eta-contract irrelevant functions also+        isVar0 (Level (Max [Plus 0 l])) = case l of+          NeutralLevel v   -> isVar0 v+          UnreducedLevel v -> isVar0 v+          BlockedLevel{}   -> False+          MetaLevel{}      -> False+        isVar0 _ = False         allowed imp h' = h == h' && (imp || h == NotHidden)     eta t@(Con c args) = do       r <- getConstructorData c
src/full/Agda/TypeChecking/Forcing.hs view
@@ -42,8 +42,9 @@     ifM (isInj d)         (forcedArgs vs)         (return [])-  Fun a b -> (++) <$> forcedVariables (unEl $ unArg a)-                  <*> forcedVariables (unEl b)+  Pi a (NoAbs _ b) ->+    (++) <$> forcedVariables (unEl $ unArg a)+         <*> forcedVariables (unEl b)   Pi a b -> (++) <$> forcedVariables (unEl $ unArg a)                  <*> (underBinder <$> forcedVariables (unEl $ absBody b))   -- Sorts?@@ -56,7 +57,7 @@       return $ case theDef def of         Datatype{} -> True         Record{}   -> True-        Axiom{}    -> True+        -- Axiom{}    -> True -- Postulates are not injective in general, right? /Olle 2011-05-05         _          -> False  force :: [Nat] -> Type -> Type@@ -65,7 +66,6 @@     m = maximum (-1:xs)     aux i t | i > m = t     aux i t = case t of-      El s (Fun a b) -> El s $ Fun (upd a) (aux (i + 1) b)       El s (Pi  a b) -> El s $ Pi  (upd a) (fmap (aux (i + 1)) b)       _ -> __IMPOSSIBLE__       where
src/full/Agda/TypeChecking/Free.hs view
@@ -6,12 +6,17 @@     , Free     , freeVars     , allVars-    , freeIn+    , relevantVars+    , rigidVars+    , freeIn, isBinderUsed     , freeInIgnoringSorts+    , relevantIn+    , Occurrence(..)+    , occurrence     ) where -import qualified Data.Set as Set-import Data.Set (Set)+import qualified Agda.Utils.VarSet as Set+import Agda.Utils.VarSet (VarSet)  import Agda.Syntax.Common import Agda.Syntax.Internal@@ -19,41 +24,98 @@ #include "../undefined.h" import Agda.Utils.Impossible -data FreeVars = FV { rigidVars	  :: Set Nat-		   , flexibleVars :: Set Nat-		   }+-- | The distinction between rigid and strongly rigid occurrences comes from:+--   Jason C. Reed, PhD thesis, 2009, page 96 (see also his LFMTP 2009 paper)+--+-- The main idea is that x = t(x) is unsolvable if x occurs strongly rigidly+-- in t.  It might have a solution if the occurrence is not strongly rigid, e.g.+--+--   x = \f -> suc (f (x (\ y -> k)))  has  x = \f -> suc (f (suc k))+--+-- [Jason C. Reed, PhD thesis, page 106] -allVars :: FreeVars -> Set Nat-allVars fv = Set.union (rigidVars fv) (flexibleVars fv)+-- | Free variables of a term, (disjointly) partitioned into strongly and+--   and weakly rigid variables, flexible variables and irrelevant variables.+data FreeVars = FV+  { stronglyRigidVars :: VarSet -- ^ variables at top and under constructors+  , weaklyRigidVars   :: VarSet -- ^ ord. rigid variables, e.g., in arguments of variables+  , flexibleVars      :: VarSet -- ^ variables occuring in arguments of metas. These are potentially free, depending how the meta variable is instantiated.+  , irrelevantVars    :: VarSet -- ^ variables under a @DontCare@, i.e., in irrelevant positions+  } +rigidVars :: FreeVars -> VarSet+rigidVars fv = Set.union (stronglyRigidVars fv) (weaklyRigidVars fv)++-- | @allVars fv@ includes irrelevant variables.+allVars :: FreeVars -> VarSet+allVars fv = Set.unions [rigidVars fv, flexibleVars fv, irrelevantVars fv]++-- | All but the irrelevant variables.+relevantVars :: FreeVars -> VarSet+relevantVars fv = Set.unions [rigidVars fv, flexibleVars fv]++data Occurrence+  = NoOccurrence+  | StronglyRigid+  | WeaklyRigid+  | Flexible+  deriving (Eq,Show)++-- | @occurrence x fv@ ignores irrelevant variables in @fv@+occurrence :: Nat -> FreeVars -> Occurrence+occurrence x fv+  | x `Set.member` stronglyRigidVars fv = StronglyRigid+  | x `Set.member` weaklyRigidVars   fv = WeaklyRigid+  | x `Set.member` flexibleVars      fv = Flexible+  | otherwise                           = NoOccurrence++-- | Mark variables as flexible.  Useful when traversing arguments of metas. flexible :: FreeVars -> FreeVars flexible fv =-    FV { rigidVars    = Set.empty-       , flexibleVars = allVars fv+    fv { stronglyRigidVars = Set.empty+       , weaklyRigidVars   = Set.empty+       , flexibleVars      = relevantVars fv        } +-- | Mark rigid variables as non-strongly.  Useful when traversion arguments of variables.+weakly :: FreeVars -> FreeVars+weakly fv = fv+  { stronglyRigidVars = Set.empty+  , weaklyRigidVars   = rigidVars fv+  }++-- | Mark all free variables as irrelevant.+irrelevantly :: FreeVars -> FreeVars+irrelevantly fv = empty { irrelevantVars = allVars fv }++-- | Pointwise union. union :: FreeVars -> FreeVars -> FreeVars-union (FV rv1 fv1) (FV rv2 fv2) = FV (Set.union rv1 rv2) (Set.union fv1 fv2)+union (FV sv1 rv1 fv1 iv1) (FV sv2 rv2 fv2 iv2) =+  FV (Set.union sv1 sv2) (Set.union rv1 rv2) (Set.union fv1 fv2) (Set.union iv1 iv2)  unions :: [FreeVars] -> FreeVars unions = foldr union empty  empty :: FreeVars-empty = FV Set.empty Set.empty--mapFV :: (Nat -> Nat) -> FreeVars -> FreeVars-mapFV f (FV rv fv) = FV (Set.map f rv) (Set.map f fv)+empty = FV Set.empty Set.empty Set.empty Set.empty +-- | @delete x fv@ deletes variable @x@ from variable set @fv@. delete :: Nat -> FreeVars -> FreeVars-delete x (FV rv fv) = FV (Set.delete x rv) (Set.delete x fv)+delete n (FV sv rv fv iv) = FV (Set.delete n sv) (Set.delete n rv) (Set.delete n fv) (Set.delete n iv) +-- | @subtractFV n fv@ subtracts $n$ from each free variable in @fv@.+subtractFV :: Nat -> FreeVars -> FreeVars+subtractFV n (FV sv rv fv iv) = FV (Set.subtract n sv) (Set.subtract n rv) (Set.subtract n fv) (Set.subtract n iv)++-- | A single (strongly) rigid variable. singleton :: Nat -> FreeVars-singleton x = FV { rigidVars	= Set.singleton x-		 , flexibleVars = Set.empty+singleton x = FV { stronglyRigidVars = Set.singleton x+		 , weaklyRigidVars   = Set.empty -- WAS: Set.singleton x+		 , flexibleVars      = Set.empty+                 , irrelevantVars    = Set.empty 		 } --- | Doesn't go inside solved metas, but collects the variables from a--- metavariable application @X ts@ as @flexibleVars@.+-- * Collecting free variables.  class Free a where   freeVars' :: FreeConf -> a -> FreeVars@@ -63,21 +125,26 @@     -- ^ Ignore free variables in sorts.   } +-- | Doesn't go inside solved metas, but collects the variables from a+-- metavariable application @X ts@ as @flexibleVars@. freeVars :: Free a => a -> FreeVars freeVars = freeVars' FreeConf{ fcIgnoreSorts = False }  instance Free Term where   freeVars' conf t = case t of-    Var n ts   -> singleton n `union` freeVars' conf ts+    Var n ts   -> singleton n `union` weakly (freeVars' conf ts)     Lam _ t    -> freeVars' conf t     Lit _      -> empty-    Def _ ts   -> freeVars' conf ts+    Def _ ts   -> weakly $ freeVars' conf ts  -- because we are not in TCM+      -- we cannot query whether we are dealing with a data/record (strongly r.)+      -- or a definition by pattern matching (weakly rigid)+      -- thus, we approximate, losing that x = List x is unsolvable     Con _ ts   -> freeVars' conf ts     Pi a b     -> freeVars' conf (a,b)-    Fun a b    -> freeVars' conf (a,b)     Sort s     -> freeVars' conf s+    Level l    -> freeVars' conf l     MetaV _ ts -> flexible $ freeVars' conf ts-    DontCare   -> empty+    DontCare mt -> irrelevantly $ freeVars' conf mt  instance Free Type where   freeVars' conf (El s t) = freeVars' conf (s, t)@@ -87,16 +154,30 @@     | fcIgnoreSorts conf = empty     | otherwise          = case s of       Type a     -> freeVars' conf a-      Suc s      -> freeVars' conf s-      Lub s1 s2  -> freeVars' conf (s1, s2)       Prop       -> empty       Inf        -> empty-      MetaS _ ts -> flexible $ freeVars' conf ts-      DLub s1 s2 -> freeVars' conf (s1, s2)+      DLub s1 s2 -> weakly $ freeVars' conf (s1, s2) +instance Free Level where+  freeVars' conf (Max as) = freeVars' conf as++instance Free PlusLevel where+  freeVars' conf ClosedLevel{} = empty+  freeVars' conf (Plus _ l)    = freeVars' conf l++instance Free LevelAtom where+  freeVars' conf l = case l of+    MetaLevel _ vs   -> flexible $ freeVars' conf vs+    NeutralLevel v   -> freeVars' conf v+    BlockedLevel _ v -> freeVars' conf v+    UnreducedLevel v -> freeVars' conf v+ instance Free a => Free [a] where-  freeVars' conf xs = unions $ map (freeVars' conf) xs+  freeVars' conf = unions . map (freeVars' conf) +instance Free a => Free (Maybe a) where+  freeVars' conf = maybe empty (freeVars' conf)+ instance (Free a, Free b) => Free (a,b) where   freeVars' conf (x,y) = freeVars' conf x `union` freeVars' conf y @@ -104,7 +185,8 @@   freeVars' conf = freeVars' conf . unArg  instance Free a => Free (Abs a) where-  freeVars' conf (Abs _ b) = mapFV (subtract 1) $ delete 0 $ freeVars' conf b+  freeVars' conf (Abs   _ b) = subtractFV 1 $ delete 0 $ freeVars' conf b+  freeVars' conf (NoAbs _ b) = freeVars' conf b  instance Free a => Free (Tele a) where   freeVars' conf EmptyTel	   = empty@@ -113,7 +195,6 @@ instance Free ClauseBody where   freeVars' conf (Body t)   = freeVars' conf t   freeVars' conf (Bind b)   = freeVars' conf b-  freeVars' conf (NoBind b) = freeVars' conf b   freeVars' conf  NoBody    = empty  freeIn :: Free a => Nat -> a -> Bool@@ -122,3 +203,11 @@ freeInIgnoringSorts :: Free a => Nat -> a -> Bool freeInIgnoringSorts v t =   v `Set.member` allVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)++relevantIn :: Free a => Nat -> a -> Bool+relevantIn v t = v `Set.member` relevantVars (freeVars' FreeConf{ fcIgnoreSorts = True } t)++-- | Is the variable bound by the abstraction actually used?+isBinderUsed :: Free a => Abs a -> Bool+isBinderUsed NoAbs{}   = False+isBinderUsed (Abs _ x) = 0 `freeIn` x
src/full/Agda/TypeChecking/Implicit.hs view
@@ -8,34 +8,38 @@  #include "../undefined.h" import Agda.Utils.Impossible+import Control.Applicative  data ImplicitInsertion-      = ImpInsert Int	  -- ^ this many implicits have to be inserted+      = ImpInsert [Hiding]	  -- ^ this many implicits have to be inserted       | BadImplicits	  -- ^ hidden argument where there should have been a non-hidden arg       | NoSuchName String -- ^ bad named argument       | NoInsertNeeded   deriving (Show) -impInsert :: Int -> ImplicitInsertion-impInsert 0 = NoInsertNeeded-impInsert n = ImpInsert n+impInsert :: [Hiding] -> ImplicitInsertion+impInsert [] = NoInsertNeeded+impInsert hs = ImpInsert hs  -- | The list should be non-empty. insertImplicit :: NamedArg e -> [Arg String] -> ImplicitInsertion insertImplicit _ [] = __IMPOSSIBLE__ insertImplicit a ts | argHiding a == NotHidden = impInsert $ nofHidden ts   where-    nofHidden :: [Arg a] -> Int-    nofHidden = length . takeWhile ((Hidden ==) . argHiding)-insertImplicit a ts@(t : _) =-  case argHiding t of-    NotHidden -> BadImplicits-    Hidden    -> case nameOf (unArg a) of-      Nothing -> impInsert 0-      Just x  -> find 0 x ts+    nofHidden :: [Arg a] -> [Hiding]+    nofHidden = takeWhile (NotHidden /=) . map argHiding+insertImplicit a ts =+  case nameOf (unArg a) of+    Nothing -> maybe BadImplicits impInsert $ upto (argHiding a) $ map argHiding ts+    Just x  -> find [] x (argHiding a) ts   where-    find i x (Arg Hidden r y : ts)-      | x == y	  = impInsert i-      | otherwise = find (i + 1) x ts-    find i x (Arg NotHidden _ _ : _) = NoSuchName x-    find i x []			     = NoSuchName x+    upto h [] = Nothing+    upto h (NotHidden:_) = Nothing+    upto h (h':_) | h == h' = Just []+    upto h (h':hs) = (h':) <$> upto h hs+    find _ x _ (Arg NotHidden _ _ : _) = NoSuchName x+    find hs x hidingx (Arg hidingy r y : ts)+      | x == y && hidingx == hidingy = impInsert $ reverse hs+      | x == y && hidingx /= hidingy = BadImplicits+      | otherwise = find (hidingy:hs) x hidingx ts+    find i x _ []			     = NoSuchName x
src/full/Agda/TypeChecking/Injectivity.hs view
@@ -35,7 +35,9 @@ -- | Reduce simple (single clause) definitions. reduceHead :: Term -> TCM (Blocked Term) reduceHead v = ignoreAbstractMode $ do+  -- first, possibly rewrite literal v to constructor form   v <- constructorForm v+  reportSDoc "tc.inj.reduce" 30 $ text "reduceHead" <+> prettyTCM v   case v of     Def f args -> do       def <- theDef <$> getConstInfo f@@ -67,12 +69,22 @@     Con c _ -> return (Just $ ConHead c)     Sort _  -> return (Just SortHead)     Pi _ _  -> return (Just PiHead)-    Fun _ _ -> return (Just PiHead)     Lit _   -> return Nothing -- handle literal heads as well? can't think of                               -- any examples where it would be useful...     _       -> return Nothing  checkInjectivity :: QName -> [Clause] -> TCM FunctionInverse+checkInjectivity f cs+  | pointLess cs = return NotInjective+  where+    -- Is it pointless to use injectivity for this function?+    pointLess []      = True+    pointLess (_:_:_) = False+    pointLess [Clause{clausePats = ps}] = all (noMatch . unArg) ps+      where noMatch ConP{} = False+            noMatch LitP{} = False+            noMatch VarP{} = True+            noMatch DotP{} = True checkInjectivity f cs = do   reportSLn "tc.inj.check" 40 $ "Checking injectivity of " ++ show f   es <- concat <$> mapM entry cs@@ -97,7 +109,6 @@           h <- headSymbol v           return [(h, c)] -    rhs (NoBind b) = rhs b     rhs (Bind b)   = underAbstraction_ b rhs     rhs (Body v)   = return $ Just v     rhs NoBody     = return Nothing@@ -117,7 +128,7 @@ data InvView = Inv QName Args (Map TermHead Clause)              | NoInv -useInjectivity :: Comparison -> Type -> Term -> Term -> TCM Constraints+useInjectivity :: Comparison -> Type -> Term -> Term -> TCM () useInjectivity cmp a u v = do   uinv <- functionInverse u   vinv <- functionInverse v@@ -133,7 +144,7 @@           , nest 2 $ text "and type" <+> prettyTCM a           ]         pol <- getPolarity' cmp f-        compareArgs pol a fArgs gArgs+        compareArgs pol a (Def f []) fArgs gArgs       | otherwise -> fallBack     (Inv f args inv, NoInv) -> do       a <- defType <$> getConstInfo f@@ -153,11 +164,12 @@       invert v g a inv args =<< headSymbol u     (NoInv, NoInv)          -> fallBack   where-    fallBack = buildConstraint $ ValueCmp cmp a u v+    fallBack = addConstraint $ ValueCmp cmp a u v +    invert :: Term -> QName -> Type -> Map TermHead Clause -> Args -> Maybe TermHead -> TCM ()     invert _ _ a inv args Nothing  = fallBack     invert org f ftype inv args (Just h) = case Map.lookup h inv of-      Nothing                     -> typeError $ UnequalTerms cmp u v a+      Nothing -> typeError $ UnequalTerms cmp u v a       Just (Clause{ clauseTel  = tel                   , clausePerm = perm                   , clausePats = ps }) -> do -- instArgs args ps@@ -186,26 +198,40 @@           -- The clause might not give as many patterns as there           -- are arguments (point-free style definitions).           let args' = take (length margs) args-          cs  <- compareArgs pol ftype margs args'-          unless (null cs) patternViolation+          compareArgs pol ftype org margs args'+{- Andreas, 2011-05-09 allow unsolved constraints as long as progress+          unless (null cs) $ do+            reportSDoc "tc.inj.invert" 30 $+              text "aborting inversion; remaining constraints" <+> prettyTCM cs+            patternViolation+-}           -- Check that we made progress, i.e. the head symbol           -- of the original term should be a constructor.-          h <- headSymbol =<< reduce org+          org <- reduce org+          h <- headSymbol org           case h of             Just h  -> compareTerm cmp a u v-            Nothing -> patternViolation+            Nothing -> do+             reportSDoc "tc.inj.invert" 30 $ vcat+               [ text "aborting inversion;" <+> prettyTCM org+               , text "plainly," <+> text (show org)+               , text "has TermHead" <+> text (show h)+               , text "which does not expose a constructor"+               ]+             patternViolation         `catchError` \err -> case errError err of           TypeError   {} -> throwError err           Exception   {} -> throwError err           IOException {} -> throwError err           PatternErr  {} -> fallBack-          AbortAssign {} -> fallBack+          {- AbortAssign {} -> fallBack -- UNUSED -}      nextMeta = do       m : ms <- get       put ms       return m +    dotP :: Monad m => Term -> StateT [Term] (ReaderT Substitution m) Term     dotP v = do       sub <- ask       return $ substs sub v
+ src/full/Agda/TypeChecking/Irrelevance.hs view
@@ -0,0 +1,161 @@+{-# LANGUAGE CPP #-}++{-| Irrelevant function types.+-}+module Agda.TypeChecking.Irrelevance where++import Control.Applicative+import Control.Monad.Reader++import qualified Data.Map as Map++import Agda.Interaction.Options++import Agda.Syntax.Common++import Agda.TypeChecking.Monad++#include "../undefined.h"+import Agda.Utils.Impossible++-- | data 'Relevance'+--   see 'Agda.Syntax.Common'++-- | @unusableRelevance rel == True@ iff we cannot use a variable of @rel@.+unusableRelevance :: Relevance -> Bool+unusableRelevance rel = NonStrict `moreRelevant` rel++composeRelevance :: Relevance -> Relevance -> Relevance+composeRelevance r r' =+  case (r, r') of+    (Irrelevant, _) -> Irrelevant+    (_, Irrelevant) -> Irrelevant+    (NonStrict, _)  -> NonStrict+    (_, NonStrict)  -> NonStrict+    (Forced, _)     -> Forced+    (_, Forced)     -> Forced+    (Relevant, Relevant) -> Relevant++-- | @inverseComposeRelevance r x@ returns the most irrelevant @y@+--   such that forall @x@, @y@ we have+--   @x `moreRelevant` (r `composeRelevance` y)@+--   iff+--   @(r `inverseComposeRelevance` x) `moreRelevant` y@ (Galois connection).+inverseComposeRelevance :: Relevance -> Relevance -> Relevance+inverseComposeRelevance r x =+  case (r, x) of+    (_, Forced)          -> Forced     -- preserve @Forced@+    (Relevant, x)        -> x          -- going to relevant arg.: nothing changes+    (Forced, Relevant)   -> Forced     -- going forced: relevants become forced+    (Forced, x)          -> x+    (Irrelevant, _)      -> Relevant   -- going irrelevant: every thing usable+    (_, Irrelevant)      -> Irrelevant -- otherwise: irrelevant things remain unusable+    (NonStrict, _)       -> Relevant   -- but @NonStrict@s become usable++-- | For comparing @Relevance@ ignoring @Forced@.+ignoreForced :: Relevance -> Relevance+ignoreForced Forced     = Relevant+ignoreForced Relevant   = Relevant+ignoreForced NonStrict  = NonStrict+ignoreForced Irrelevant = Irrelevant++-- | Irrelevant function arguments may appear non-strictly in the codomain type.+irrToNonStrict :: Relevance -> Relevance+irrToNonStrict Irrelevant = NonStrict+-- irrToNonStrict NonStrict  = Relevant -- TODO: is that what we want (OR: NonStrict)  -- better be more conservative+irrToNonStrict rel        = rel++nonStrictToIrr :: Relevance -> Relevance+nonStrictToIrr NonStrict = Irrelevant+nonStrictToIrr rel       = rel++-- * Operations on 'Arg'.++-- | Prepare parts of a parameter telescope for abstraction in constructors+--   and projections.+hideAndRelParams :: Arg a -> Arg a+hideAndRelParams a = a+  { argRelevance = nonStrictToIrr (argRelevance a)+  , argHiding    = Hidden+  }++-- | @modifyArgRelevance f arg@ applies @f@ to the 'argRelevance' component of @arg@.+modifyArgRelevance :: (Relevance -> Relevance) -> Arg a -> Arg a+modifyArgRelevance f a = a { argRelevance = f (argRelevance a) }++-- | Used to modify context when going into a @rel@ argument.+inverseApplyRelevance :: Relevance -> Arg a -> Arg a+inverseApplyRelevance rel = modifyArgRelevance (rel `inverseComposeRelevance`)+-- inverseApplyRelevance rel a = a { argRelevance = rel `inverseComposeRelevance` argRelevance a }++-- | Compose two relevance flags.+--   This function is used to update the relevance information+--   on pattern variables @a@ after a match against something @rel@.+applyRelevance :: Relevance -> Arg a -> Arg a+applyRelevance rel = modifyArgRelevance (rel `composeRelevance`)+-- applyRelevance rel a = a { argRelevance = rel `composeRelevance` argRelevance a }++{- Andreas, 2011-04-26: the combination Irrelevant Forced does not arise+applyRelevance Irrelevant a | argRelevance a == Relevant =+  a { argRelevance = Irrelevant }+applyRelevance Forced a | argRelevance a == Relevant =+  a { argRelevance = Forced }+applyRelevance rel a = a -- ^ do nothing if rel == Relevant or a is+                         -- already Forced or Irrelevant+-}++-- * Operations on 'Context'.++-- | Modify the context whenever going from the l.h.s. (term side)+--   of the typing judgement to the r.h.s. (type side).+workOnTypes :: TCM a -> TCM a+workOnTypes cont = do+  allowed <- optExperimentalIrrelevance <$> pragmaOptions+  verboseBracket "tc.irr" 20 "workOnTypes" $ workOnTypes' allowed cont++-- | Call me if --experimental-irrelevance is set.+doWorkOnTypes :: TCM a -> TCM a+doWorkOnTypes = verboseBracket "tc.irr" 20 "workOnTypes" . workOnTypes' True++-- | Internal workhorse, expects value of --experimental-irrelevance flag+--   as argument.+workOnTypes' :: Bool -> TCM a -> TCM a+workOnTypes' allowed cont =+  if allowed then+    liftTCM $ modifyContext (modifyContextEntries $ modifyArgRelevance $ irrToNonStrict) cont+   else cont++-- | (Conditionally) wake up irrelevant variables and make them relevant.+--   For instance,+--   in an irrelevant function argument otherwise irrelevant variables+--   may be used, so they are awoken before type checking the argument.+applyRelevanceToContext :: Relevance -> TCM a -> TCM a+applyRelevanceToContext rel =+  case rel of+    Relevant -> id+    Forced   -> id+    _        -> local $ \ e -> e+      { envContext   = modifyContextEntries (inverseApplyRelevance rel) (envContext e)+      , envLetBindings = Map.map+          (fmap $ \ (t, a) -> (t, inverseApplyRelevance rel a))+          (envLetBindings e)+                                                  -- enable local  irr. defs+      , envRelevance = rel                        -- enable global irr. defs+      }++-- | Wake up irrelevant variables and make them relevant.  For instance,+--   in an irrelevant function argument otherwise irrelevant variables+--   may be used, so they are awoken before type checking the argument.+wakeIrrelevantVars :: TCM a -> TCM a+wakeIrrelevantVars = applyRelevanceToContext Irrelevant+{-+wakeIrrelevantVars = local $ \ e -> e+   { envContext = map wakeVar (envContext e) -- enable local  irr. defs+   , envIrrelevant = True                    -- enable global irr. defs+   }+  where wakeVar ce = ce { ctxEntry = makeRelevant (ctxEntry ce) }++applyRelevanceToContext :: Relevance -> TCM a -> TCM a+applyRelevanceToContext Irrelevant cont = wakeIrrelevantVars cont+applyRelevanceToContext _          cont = cont+-}
src/full/Agda/TypeChecking/Level.hs view
@@ -17,56 +17,37 @@ import Agda.Utils.Impossible #include "../undefined.h" -newtype LevelView = Max [PlusView]-  deriving (Show)--data PlusView = ClosedLevel Integer-              | Plus Integer LevelAtom-  deriving (Show, Eq)--data LevelAtom = MetaLevel MetaId Args-             | BlockedLevel Term-             | NeutralLevel Term-  deriving (Show, Eq, Ord)--instance Ord PlusView where-  compare ClosedLevel{} Plus{}            = LT-  compare Plus{} ClosedLevel{}            = GT-  compare (ClosedLevel n) (ClosedLevel m) = compare n m-  compare (Plus n a) (Plus m b)           = compare (a,n) (b,m)-- data LevelKit = LevelKit-  { levelType  :: Term-  , levelSuc   :: Term -> Term-  , levelMax   :: Term -> Term -> Term-  , levelZero  :: Term+  { lvlType  :: Term+  , lvlSuc   :: Term -> Term+  , lvlMax   :: Term -> Term -> Term+  , lvlZero  :: Term   , typeName :: QName   , sucName  :: QName   , maxName  :: QName   , zeroName :: QName   } -levelSucFunction :: MonadTCM tcm => tcm (Term -> Term)+levelSucFunction :: TCM (Term -> Term) levelSucFunction = do   suc <- primLevelSuc   return $ \a -> suc `apply` [defaultArg a] -builtinLevelKit :: MonadTCM tcm => tcm (Maybe LevelKit)+builtinLevelKit :: TCM (Maybe LevelKit) builtinLevelKit = liftTCM $ do     level@(Def l []) <- primLevel-    zero@(Con z []) <- primLevelZero-    suc@(Con s []) <- primLevelSuc+    zero@(Def z []) <- primLevelZero+    suc@(Def s []) <- primLevelSuc     max@(Def m []) <- primLevelMax     let a @@ b = a `apply` [defaultArg b]     return $ Just $ LevelKit-      { levelType = level-      , levelSuc = \a -> suc @@ a-      , levelMax = \a b -> max @@ a @@ b-      , levelZero = zero+      { lvlType  = level+      , lvlSuc   = \a -> suc @@ a+      , lvlMax   = \a b -> max @@ a @@ b+      , lvlZero  = zero       , typeName = l-      , sucName = s-      , maxName = m+      , sucName  = s+      , maxName  = m       , zeroName = z       }   `catchError` \_ -> return Nothing@@ -77,91 +58,76 @@ requireLevels = do   mKit <- builtinLevelKit   case mKit of-    Nothing -> typeError $ GenericError $-      "Some or all of the LEVEL builtins have not been defined."+    Nothing -> sequence_ [primLevel, primLevelZero, primLevelSuc, primLevelMax] >> __IMPOSSIBLE__     Just k  -> return k -unLevelAtom :: LevelAtom -> Term-unLevelAtom (MetaLevel x as) = MetaV x as-unLevelAtom (BlockedLevel a) = a-unLevelAtom (NeutralLevel a) = a--unLevelView :: MonadTCM tcm => LevelView -> tcm Term-unLevelView nv = case nv of-    Max []            -> return $ Lit $ LitLevel noRange 0-    Max [ClosedLevel n] -> return $ Lit $ LitLevel noRange n-    Max [Plus 0 a]    -> return $ unLevelAtom a-    Max [a]           -> do+reallyUnLevelView :: Level -> TCM Term+reallyUnLevelView nv =+  case nv of+    Max []              -> primLevelZero+    Max [Plus 0 a]      -> return $ unLevelAtom a+    Max [a]             -> do+      zer <- primLevelZero       suc <- primLevelSuc-      return $ unPlusV (\n -> suc `apply` [defaultArg n]) a+      return $ unPlusV zer (\n -> suc `apply` [defaultArg n]) a     Max as -> do-      Just LevelKit{ levelSuc = suc, levelMax = max } <- builtinLevelKit-      return $ case map (unPlusV suc) as of+      LevelKit{ lvlZero = zer, lvlSuc = suc, lvlMax = max } <- requireLevels+      return $ case map (unPlusV zer suc) as of         [a] -> a         []  -> __IMPOSSIBLE__         as  -> foldr1 max as   where-    unPlusV suc (ClosedLevel n) = Lit (LitLevel noRange n)-    unPlusV suc (Plus n a)    = foldr (.) id (genericReplicate n suc) (unLevelAtom a)+    unPlusV zer suc (ClosedLevel n) = foldr (.) id (genericReplicate n suc) zer+    unPlusV _   suc (Plus n a)      = foldr (.) id (genericReplicate n suc) (unLevelAtom a) -maybePrimCon :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)+maybePrimCon :: TCM Term -> TCM (Maybe QName) maybePrimCon prim = liftTCM $ do     Con c [] <- prim     return (Just c)   `catchError` \_ -> return Nothing -maybePrimDef :: MonadTCM tcm => TCM Term -> tcm (Maybe QName)+maybePrimDef :: TCM Term -> TCM (Maybe QName) maybePrimDef prim = liftTCM $ do     Def f [] <- prim     return (Just f)   `catchError` \_ -> return Nothing -levelView :: MonadTCM tcm => Term -> tcm LevelView+levelView :: Term -> TCM Level levelView a = do+  reportSLn "tc.level.view" 50 $ "{ levelView " ++ show a   msuc <- maybePrimCon primLevelSuc   mzer <- maybePrimCon primLevelZero   mmax <- maybePrimDef primLevelMax-  let view a =+  let view a = do+        a <- reduce a         case a of+          Level l -> return l           Con s [arg]             | Just s == msuc -> inc <$> view (unArg arg)           Con z []             | Just z == mzer -> return $ closed 0-          Lit (LitLevel _ n)   -> return $ closed n           Def m [arg1, arg2]-            | Just m == mmax -> lub <$> view (unArg arg1) <*> view (unArg arg2)+            | Just m == mmax -> levelLub <$> view (unArg arg1) <*> view (unArg arg2)           _                  -> mkAtom a-  view =<< normalise a+  v <- view a+  reportSLn "tc.level.view" 50 $ "  view: " ++ show v ++ "}"+  return v   where     mkAtom a = do       b <- reduceB a       return $ case b of         NotBlocked (MetaV m as) -> atom $ MetaLevel m as         NotBlocked a            -> atom $ NeutralLevel a-        Blocked _ a             -> atom $ BlockedLevel a+        Blocked m a             -> atom $ BlockedLevel m a      atom a = Max [Plus 0 a] -    closed n = maxim [ClosedLevel n]+    closed n = Max [ClosedLevel n | n > 0]      inc (Max as) = Max $ map inc' as       where         inc' (ClosedLevel n) = ClosedLevel $ n + 1         inc' (Plus n a)    = Plus (n + 1) a -    maxim as = Max $ ns ++ List.sort bs-      where-        ns = case [ n | ClosedLevel n <- as, n > 0 ] of-          []  -> []-          ns  -> [ClosedLevel $ maximum ns]-        bs = subsume [ b | b@Plus{} <- as ]--        subsume (ClosedLevel{} : _) = __IMPOSSIBLE__-        subsume [] = []-        subsume (Plus n a : bs)-          | not $ null ns = subsume bs-          | otherwise     = Plus n a : subsume [ b | b@(Plus _ a') <- bs, a /= a' ]-          where-            ns = [ m | Plus m a'  <- bs, a == a', m > n ]--    lub (Max as) (Max bs) = maxim $ as ++ bs+levelLub :: Level -> Level -> Level+levelLub (Max as) (Max bs) = levelMax $ as ++ bs
+ src/full/Agda/TypeChecking/Level.hs-boot view
@@ -0,0 +1,7 @@++module Agda.TypeChecking.Level where++import Agda.TypeChecking.Monad+import Agda.Syntax.Internal++levelView :: Term -> TCM Level
+ src/full/Agda/TypeChecking/LevelConstraints.hs view
@@ -0,0 +1,34 @@++module Agda.TypeChecking.LevelConstraints ( simplifyLevelConstraint ) where++import Data.List++import Agda.Syntax.Internal+import Agda.TypeChecking.Monad.Base+import Agda.TypeChecking.Substitute+import Agda.Utils.Size++simplifyLevelConstraint :: Integer -> Constraint -> Constraints -> Constraint+simplifyLevelConstraint n new old =+  case inequalities new of+    [a :=< b] | elem (b' :=< a') leqs -> LevelCmp CmpEq (Max [a]) (Max [b])+      where (a', b') = raise (-n) (a, b)+    _ -> new+  where+    leqs = concatMap (inequalities . unClosure) old++    -- Unclosure converts deBruijn indices to deBruijn levels to+    -- enable comparing constraints under different contexts+    unClosure c = raise (-size (envContext $ clEnv cl)) $ clValue cl+      where cl = theConstraint c++data Leq = PlusLevel :=< PlusLevel+  deriving (Show, Eq)++inequalities (LevelCmp CmpEq (Max [a, b]) (Max [c]))+  | a == c = [b :=< a]+  | b == c = [a :=< b]+inequalities (LevelCmp CmpEq (Max [a]) (Max [b, c]))+  | a == b = [c :=< b]+  | a == c = [b :=< c]+inequalities _ = []
src/full/Agda/TypeChecking/MetaVars.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP, RelaxedPolyRec #-}+{-# LANGUAGE CPP, RelaxedPolyRec, GeneralizedNewtypeDeriving #-}  module Agda.TypeChecking.MetaVars where @@ -6,11 +6,9 @@ import Control.Monad.State import Control.Monad.Error import Data.Generics-import Data.Map (Map)-import Data.Set (Set) import Data.List as List hiding (sort)+import Data.Map (Map) import qualified Data.Map as Map-import qualified Data.Set as Set import qualified Agda.Utils.IO.Locale as LocIO  import Agda.Syntax.Common@@ -29,17 +27,19 @@ import Agda.TypeChecking.Free import Agda.TypeChecking.Records import Agda.TypeChecking.Pretty+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract  import Agda.TypeChecking.MetaVars.Occurs -import {-# SOURCE #-} Agda.TypeChecking.Conversion+import {-# SOURCE #-} Agda.TypeChecking.Conversion -- SOURCE NECESSARY  import Agda.Utils.Fresh import Agda.Utils.List import Agda.Utils.Monad import Agda.Utils.Size import Agda.Utils.Permutation+import qualified Agda.Utils.VarSet as Set  import Agda.TypeChecking.Monad.Debug @@ -55,7 +55,7 @@ findIdx vs v = findIndex (==v) (reverse vs)  -- | Check whether a meta variable is a place holder for a blocked term.-isBlockedTerm :: MonadTCM tcm => MetaId -> tcm Bool+isBlockedTerm :: MetaId -> TCM Bool isBlockedTerm x = do     reportSLn "tc.meta.blocked" 12 $ "is " ++ show x ++ " a blocked term? "     i <- mvInstantiation <$> lookupMeta x@@ -65,109 +65,119 @@ 	    InstV{}                        -> False 	    InstS{}                        -> False 	    Open{}                         -> False+	    OpenIFS{}                      -> False     reportSLn "tc.meta.blocked" 12 $       if r then "  yes, because " ++ show i else "  no"     return r -isEtaExpandable :: MonadTCM tcm => MetaId -> tcm Bool+isEtaExpandable :: MetaId -> TCM Bool isEtaExpandable x = do     i <- mvInstantiation <$> lookupMeta x     return $ case i of       Open{}                         -> True+      OpenIFS{}                      -> False       InstV{}                        -> False       InstS{}                        -> False       BlockedConst{}                 -> False       PostponedTypeCheckingProblem{} -> False -class HasMeta t where-    metaInstance :: MonadTCM tcm => t -> tcm MetaInstantiation-    metaVariable :: MetaId -> Args -> t--instance HasMeta Term where-    metaInstance = return . InstV-    metaVariable = MetaV--instance HasMeta Sort where-    metaInstance = return . InstS . Sort-    metaVariable = MetaS---- TODO-(=:=) :: (MonadTCM tcm) => MetaId -> Term -> tcm ()-x =:= t = do-    reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t-    store <- getMetaStore-    modify $ \st -> st { stMetaStore = ins x (InstS $ killRange t) store }-    etaExpandListeners x-    wakeupConstraints-    reportSLn "tc.meta.assign" 20 $ "completed assignment of " ++ show x-  where-    ins x i store = Map.adjust (inst i) x store-    inst i mv = mv { mvInstantiation = i }+-- * Performing the assignment --- | The instantiation should not be an 'InstV' or 'InstS' and the 'MetaId'+-- | Performing the meta variable assignment.+--+--   The instantiation should not be an 'InstV' or 'InstS' and the 'MetaId' --   should point to something 'Open' or a 'BlockedConst'.-(=:) :: (MonadTCM tcm, HasMeta t, KillRange t, Show t) =>-        MetaId -> t -> tcm ()-x =: t = do+--   Further, the meta variable may not be 'Frozen'.+assignTerm :: MetaId -> Term -> TCM ()+assignTerm x t = do     reportSLn "tc.meta.assign" 70 $ show x ++ " := " ++ show t-    i <- metaInstance (killRange t)-    store <- getMetaStore-    modify $ \st -> st { stMetaStore = ins x i store }+    whenM (isFrozen x) __IMPOSSIBLE__  -- verify (new) invariant+    let i = metaInstance (killRange t)+    verboseS "profile.metas" 10 $ liftTCM $ tickMax "max-open-metas" . size =<< getOpenMetas+    modifyMetaStore $ ins x i     etaExpandListeners x-    wakeupConstraints+    wakeupConstraints x     reportSLn "tc.meta.assign" 20 $ "completed assignment of " ++ show x   where+    metaInstance = InstV     ins x i store = Map.adjust (inst i) x store     inst i mv = mv { mvInstantiation = i } -assignTerm :: MonadTCM tcm => MetaId -> Term -> tcm ()-assignTerm = (=:)--assignSort :: MonadTCM tcm => MetaId -> Sort -> tcm ()-assignSort = (=:)+-- * Creating meta variables. -newSortMeta :: MonadTCM tcm => tcm Sort+newSortMeta :: TCM Sort newSortMeta =   ifM typeInType (return $ mkType 0) $   ifM hasUniversePolymorphism (newSortMetaCtx =<< getContextArgs)+  -- else (no universe polymorphism)   $ do i <- createMetaInfo-       x <- newMeta i normalMetaPriority (idP 0) (IsSort())-       return $ MetaS x []+       x <- newMeta i normalMetaPriority (idP 0) (IsSort () topSort)+       return $ Type $ Max [Plus 0 $ MetaLevel x []] -newSortMetaCtx :: MonadTCM tcm => Args -> tcm Sort+newSortMetaCtx :: Args -> TCM Sort newSortMetaCtx vs =   ifM typeInType (return $ mkType 0) $ do-    i <- createMetaInfo-    x <- newMeta i normalMetaPriority (idP 0) (IsSort ())-    return $ MetaS x vs+    i   <- createMetaInfo+    tel <- getContextTelescope+    let t = telePi_ tel topSort+    x   <- newMeta i normalMetaPriority (idP 0) (IsSort () t)+    reportSDoc "tc.meta.new" 50 $+      text "new sort meta" <+> prettyTCM x <+> text ":" <+> prettyTCM t+    return $ Type $ Max [Plus 0 $ MetaLevel x vs] -newTypeMeta :: MonadTCM tcm => Sort -> tcm Type+newTypeMeta :: Sort -> TCM Type newTypeMeta s = El s <$> newValueMeta (sort s) -newTypeMeta_ ::  MonadTCM tcm => tcm Type-newTypeMeta_  = newTypeMeta =<< newSortMeta+newTypeMeta_ ::  TCM Type+newTypeMeta_  = newTypeMeta =<< (workOnTypes $ newSortMeta)+-- TODO: (this could be made work with new uni-poly)+-- Andreas, 2011-04-27: If a type meta gets solved, than we do not have to check+-- that it has a sort.  The sort comes from the solution.+-- newTypeMeta_  = newTypeMeta Inf +-- | Create a new "implicit from scope" metavariable+newIFSMeta ::  Type -> TCM Term+newIFSMeta t = do+  vs  <- getContextArgs+  tel <- getContextTelescope+  newIFSMetaCtx (telePi_ tel t) vs++-- | Create a new value meta with specific dependencies.+newIFSMetaCtx :: Type -> Args -> TCM Term+newIFSMetaCtx t vs = do+  i <- createMetaInfo+  let TelV tel _ = telView' t+      perm = idP (size tel)+  x <- newMeta' OpenIFS i normalMetaPriority perm (HasType () t)+  reportSDoc "tc.meta.new" 50 $ fsep+    [ text "new ifs meta:"+    , nest 2 $ prettyTCM vs <+> text "|-"+    , nest 2 $ text (show x) <+> text ":" <+> prettyTCM t+    ]+  solveConstraint_ $ FindInScope x+  return (MetaV x vs)+ -- | Create a new metavariable, possibly η-expanding in the process.-newValueMeta ::  MonadTCM tcm => Type -> tcm Term+newValueMeta ::  Type -> TCM Term newValueMeta t = do   vs  <- getContextArgs   tel <- getContextTelescope   newValueMetaCtx (telePi_ tel t) vs -newValueMetaCtx :: MonadTCM tcm => Type -> Args -> tcm Term+newValueMetaCtx :: Type -> Args -> TCM Term newValueMetaCtx t ctx = do   m@(MetaV i _) <- newValueMetaCtx' t ctx   instantiateFull m  -- | Create a new value meta without η-expanding.-newValueMeta' :: MonadTCM tcm => Type -> tcm Term+newValueMeta' :: Type -> TCM Term newValueMeta' t = do   vs  <- getContextArgs   tel <- getContextTelescope   newValueMetaCtx' (telePi_ tel t) vs  -- | Create a new value meta with specific dependencies.-newValueMetaCtx' :: MonadTCM tcm => Type -> Args -> tcm Term+newValueMetaCtx' :: Type -> Args -> TCM Term newValueMetaCtx' t vs = do   i <- createMetaInfo   let TelV tel _ = telView' t@@ -181,47 +191,47 @@   etaExpandMetaSafe x   return $ MetaV x vs -newTelMeta :: MonadTCM tcm => Telescope -> tcm Args+newTelMeta :: Telescope -> TCM Args newTelMeta tel = newArgsMeta (abstract tel $ El Prop $ Sort Prop) -newArgsMeta :: MonadTCM tcm => Type -> tcm Args+newArgsMeta :: Type -> TCM Args newArgsMeta t = do   args <- getContextArgs   tel  <- getContextTelescope   newArgsMetaCtx t tel args -newArgsMetaCtx :: MonadTCM tcm => Type -> Telescope -> Args -> tcm Args+newArgsMetaCtx :: Type -> Telescope -> Args -> TCM Args newArgsMetaCtx (El s tm) tel ctx = do   tm <- reduce tm-  case funView tm of-      FunV (Arg h r a) _  -> do-	  arg  <- (Arg h r) <$>-                   {--                     -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var-                     -- Andreas, 2010-10-11 this is WRONG, see Issue 347-                    if r == Irrelevant then return DontCare else-                    -}-                     newValueMetaCtx (telePi_ tel a) ctx-	  args <- newArgsMetaCtx (El s tm `piApply` [arg]) tel ctx-	  return $ arg : args-      NoFunV _    -> return []+  case tm of+    Pi (Arg h r a) _  -> do+      arg  <- (Arg h r) <$>+               {-+                 -- Andreas, 2010-09-24 skip irrelevant record fields when eta-expanding a meta var+                 -- Andreas, 2010-10-11 this is WRONG, see Issue 347+                if r == Irrelevant then return DontCare else+                -}+                 newValueMetaCtx (telePi_ tel a) ctx+      args <- newArgsMetaCtx (El s tm `piApply` [arg]) tel ctx+      return $ arg : args+    _  -> return []  -- | Create a metavariable of record type. This is actually one metavariable --   for each field.-newRecordMeta :: MonadTCM tcm => QName -> Args -> tcm Term+newRecordMeta :: QName -> Args -> TCM Term newRecordMeta r pars = do   args <- getContextArgs   tel  <- getContextTelescope   newRecordMetaCtx r pars tel args -newRecordMetaCtx :: MonadTCM tcm => QName -> Args -> Telescope -> Args -> tcm Term+newRecordMetaCtx :: QName -> Args -> Telescope -> Args -> TCM Term newRecordMetaCtx r pars tel ctx = do   ftel	 <- flip apply pars <$> getRecordFieldTypes r   fields <- newArgsMetaCtx (telePi_ ftel $ sort Prop) tel ctx   con    <- getRecordConstructor r   return $ Con con fields -newQuestionMark :: MonadTCM tcm => Type -> tcm Term+newQuestionMark :: Type -> TCM Term newQuestionMark t = do   m@(MetaV x _) <- newValueMeta' t   ii		<- fresh@@ -229,31 +239,44 @@   return m  -- | Construct a blocked constant if there are constraints.-blockTerm :: MonadTCM tcm => Type -> Term -> tcm Constraints -> tcm Term-blockTerm t v m = do-    cs <- solveConstraints =<< m-    if List.null cs-	then return v-	else do-	    i	  <- createMetaInfo-	    vs	  <- getContextArgs-	    tel   <- getContextTelescope-	    x	  <- newMeta' (BlockedConst $ abstract tel v)-                              i lowMetaPriority (idP $ size tel)-                              (HasType () $ telePi_ tel t)-			    -- we don't instantiate blocked terms-	    c <- escapeContext (size tel) $ guardConstraint (return cs) (UnBlock x)-            verboseS "tc.meta.blocked" 20 $ do-                dx  <- prettyTCM (MetaV x [])-                dv  <- escapeContext (size tel) $ prettyTCM $ abstract tel v-                dcs <- mapM prettyTCM cs-                liftIO $ LocIO.putStrLn $ "blocked " ++ show dx ++ " := " ++ show dv-                liftIO $ LocIO.putStrLn $ "     by " ++ show dcs-	    addConstraints c-	    return $ MetaV x vs+blockTerm :: Type -> TCM Term -> TCM Term+blockTerm t blocker = do+  (pid, v) <- newProblem blocker+  blockTermOnProblem t v pid --- | Auxiliary function to create a postponed type checking problem.-unblockedTester :: MonadTCM tcm => Type -> tcm Bool+blockTermOnProblem :: Type -> Term -> ProblemId -> TCM Term+blockTermOnProblem t v pid =+  ifM (isProblemSolved pid) (return v) $ do+    i   <- createMetaInfo+    vs  <- getContextArgs+    tel <- getContextTelescope+    x   <- newMeta' (BlockedConst $ abstract tel v)+                    i lowMetaPriority (idP $ size tel)+                    (HasType () $ telePi_ tel t)+                    -- we don't instantiate blocked terms+    escapeContext (size tel) $ addConstraint (Guarded (UnBlock x) pid)+    reportSDoc "tc.meta.blocked" 20 $ vcat+      [ text "blocked" <+> prettyTCM x <+> text ":=" <+> escapeContext (size tel) (prettyTCM $ abstract tel v)+      , text "     by" <+> (prettyTCM =<< getConstraintsForProblem pid) ]+    inst <- isInstantiatedMeta x+    case inst of+      True  -> instantiate (MetaV x vs)+      False -> do+        -- We don't return the blocked term instead create a fresh metavariable+        -- that we compare against the blocked term once it's unblocked. This way+        -- blocked terms can be instantiated before they are unblocked, thus making+        -- constraint solving a bit more robust against instantiation order.+        v   <- newValueMeta t+        i   <- liftTCM (fresh :: TCM Integer)+        -- This constraint is woken up when unblocking, so it doesn't need a problem id.+        cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV x vs))+        listenToMeta (CheckConstraint i cmp) x+        return v++-- | @unblockedTester t@ returns @False@ if @t@ is a meta or a blocked term.+--+--   Auxiliary function to create a postponed type checking problem.+unblockedTester :: Type -> TCM Bool unblockedTester t = do   t <- reduceB $ unEl t   case t of@@ -261,11 +284,17 @@     NotBlocked MetaV{} -> return False     _                  -> return True -postponeTypeCheckingProblem_ :: MonadTCM tcm => A.Expr -> Type -> tcm Term+-- | Create a postponed type checking problem @e : t@ that waits for type @t@+--   to unblock (become instantiated or its constraints resolved).+postponeTypeCheckingProblem_ :: A.Expr -> Type -> TCM Term postponeTypeCheckingProblem_ e t = do   postponeTypeCheckingProblem e t (unblockedTester t) -postponeTypeCheckingProblem :: MonadTCM tcm => A.Expr -> Type -> TCM Bool -> tcm Term+-- | Create a postponed type checking problem @e : t@ that waits for conditon+--   @unblock@.  A new meta is created in the current context that has as+--   instantiation the postponed type checking problem.  An 'UnBlock' constraint+--   is added for this meta, which links to this meta.+postponeTypeCheckingProblem :: A.Expr -> Type -> TCM Bool -> TCM Term postponeTypeCheckingProblem e t unblock = do   i   <- createMetaInfo   tel <- getContextTelescope@@ -273,20 +302,33 @@   m   <- newMeta' (PostponedTypeCheckingProblem cl)                   i normalMetaPriority (idP (size tel))          $ HasType () $ telePi_ tel t-  addConstraints =<< buildConstraint (UnBlock m)-  MetaV m <$> getContextArgs+  -- Create the meta that we actually return+  v   <- newValueMeta t+  i   <- liftTCM (fresh :: TCM Integer)+  vs  <- getContextArgs+  cmp <- buildProblemConstraint 0 (ValueCmp CmpEq t v (MetaV m vs))+  listenToMeta (CheckConstraint i cmp) m+  addConstraint (UnBlock m)+  return v  -- | Eta expand metavariables listening on the current meta.-etaExpandListeners :: MonadTCM tcm => MetaId -> tcm ()+etaExpandListeners :: MetaId -> TCM () etaExpandListeners m = do-  ms <- getMetaListeners m+  ls <- getMetaListeners m   clearMetaListeners m	-- we don't really have to do this+  mapM_ wakeupListener ls++-- | Wake up a meta listener and let it do its thing+wakeupListener :: Listener -> TCM ()   -- Andreas 2010-10-15: do not expand record mvars, lazyness needed for irrelevance-  mapM_ etaExpandMetaSafe ms---  mapM_ (etaExpandMeta allMetaKinds) ms+wakeupListener (EtaExpand x)         = etaExpandMetaSafe x+wakeupListener (CheckConstraint _ c) = do+  reportSDoc "tc.meta.blocked" 20 $ text "waking boxed constraint" <+> prettyTCM c+  addAwakeConstraints [c]+  solveAwakeConstraints  -- | Do safe eta-expansions for meta (@SingletonRecords,Levels@).-etaExpandMetaSafe :: MonadTCM tcm => MetaId -> tcm ()+etaExpandMetaSafe :: MetaId -> TCM () etaExpandMetaSafe = etaExpandMeta [SingletonRecords,Levels]  -- | Various kinds of metavariables.@@ -307,7 +349,7 @@  -- | Eta expand a metavariable, if it is of the specified kind. --   Don't do anything if the metavariable is a blocked term.-etaExpandMeta :: MonadTCM tcm => [MetaKind] -> MetaId -> tcm ()+etaExpandMeta :: [MetaKind] -> MetaId -> TCM () etaExpandMeta kinds m = whenM (isEtaExpandable m) $ do   verboseBracket "tc.meta.eta" 20 ("etaExpandMeta " ++ show m) $ do   meta       <- lookupMeta m@@ -316,10 +358,16 @@   let args	 = [ Arg h r $ Var i [] 		   | (i, Arg h r _) <- reverse $ zip [0..] $ reverse $ telToList tel 		   ]-  bb <- reduceB b+  bb <- reduceB b  -- the target in the type @a@ of @m@   case unEl <$> bb of-    Blocked x _               -> listenToMeta m x-    NotBlocked (MetaV x _)    -> listenToMeta m x+    -- if the target type of @m@ is a meta variable @x@ itself+    -- (@NonBlocked (MetaV{})@),+    -- or it is blocked by a meta-variable @x@ (@Blocked@), we cannot+    -- eta expand now, we have to postpone this.  Once @x@ is+    -- instantiated, we can continue eta-expanding m.  This is realized+    -- by adding @m@ to the listeners of @x@.+    Blocked x _               -> listenToMeta (EtaExpand m) x+    NotBlocked (MetaV x _)    -> listenToMeta (EtaExpand m) x     NotBlocked lvl@(Def r ps) ->       ifM (isEtaRecord r) (do 	let expand = do@@ -328,13 +376,13 @@                 verboseS "tc.meta.eta" 15 $ do                   du <- prettyTCM u                   liftIO $ LocIO.putStrLn $ "eta expanding: " ++ show m ++ " --> " ++ show du-                noConstraints $ assignV b m args u  -- should never produce any constraints+                noConstraints $ assignV m args u  -- should never produce any constraints         if Records `elem` kinds then           expand          else if SingletonRecords `elem` kinds then do           singleton <- isSingletonRecord r ps           case singleton of-            Left x      -> listenToMeta m x+            Left x      -> listenToMeta (EtaExpand m) x             Right False -> return ()             Right True  -> expand          else@@ -345,7 +393,7 @@         if tt && Just lvl == mlvl          then do           reportSLn "tc.meta.eta" 20 $ "Expanding level meta to 0 (type-in-type)"-          noConstraints $ assignV b m args (Lit $ LitLevel noRange 0)+          noConstraints $ assignV m args (Level $ Max [])          else           return ()     _ -> return ()@@ -353,8 +401,7 @@ -- | Eta expand blocking metavariables of record type, and reduce the -- blocked thing. -etaExpandBlocked-  :: (MonadTCM tcm, Reduce t) => Blocked t -> tcm (Blocked t)+etaExpandBlocked :: Reduce t => Blocked t -> TCM (Blocked t) etaExpandBlocked t@NotBlocked{} = return t etaExpandBlocked (Blocked m t)  = do   etaExpandMeta [Records] m@@ -363,163 +410,139 @@     Blocked m' _ | m /= m' -> etaExpandBlocked t     _                      -> return t -abortAssign :: MonadTCM tcm => tcm a-abortAssign =-    do	s <- get-	liftTCM $ throwError $ TCErr Nothing $ AbortAssign s--handleAbort :: MonadTCM tcm => TCM a -> TCM a -> tcm a-handleAbort h m = liftTCM $-    m `catchError_` \e ->-	case errError e of-	    AbortAssign s -> do put s; h-            PatternErr{}  -> do-              -- Andreas, 2010-09-17 uncommenting the reportSLn statements-              -- breaks something.  Why?-              -- reportSLn "tc.meta.assign" 50 "handleAbort: Pattern violation!"-              throwError e-	    _		  -> do-              -- reportSLn "tc.meta.assign" 50 "handleAbort: Some exception"-              throwError e+-- * Solve constraint @x vs = v@. --- | Assign to an open metavar.+-- | Assign to an open metavar which may not be frozen. --   First check that metavar args are in pattern fragment. --     Then do extended occurs check on given thing. ---assignV :: MonadTCM tcm => Type -> MetaId -> Args -> Term -> tcm Constraints-assignV t x args v =-    handleAbort handler $ do+--   Assignment is aborted by throwing a @PatternErr@ via a call to+--   @patternViolation@.  This error is caught by @catchConstraint@+--   during equality checking (@compareAtom@) and leads to+--   restoration of the original constraints.++assignV :: MetaId -> Args -> Term -> TCM ()+assignV x args v = do 	reportSDoc "tc.meta.assign" 10 $ do 	  text "term" <+> prettyTCM (MetaV x args) <+> text ":=" <+> prettyTCM v+        liftTCM $ nowSolvingConstraints (assign x args v) `finally` solveAwakeConstraints -        v <- normalise v-        case v of-          Sort Inf  -> typeError $ GenericError "Setω is not a valid type."-          _         -> return ()+-- | @assign sort? x vs v@+assign :: MetaId -> Args -> Term -> TCM ()+assign x args v = do+        mvar <- lookupMeta x  -- information associated with meta x -	-- We don't instantiate blocked terms-	whenM (isBlockedTerm x) patternViolation	-- TODO: not so nice+        -- Andreas, 2011-05-20 TODO!+        -- full normalization  (which also happens during occurs check)+        -- is too expensive! (see Issue 415)+        -- need to do something cheaper, especially if+        -- we are dealing with a Miller pattern that can be solved+        -- immediately!+        -- Ulf, 2011-08-25 DONE!+        -- Just instantiating the top-level meta, which is cheaper. The occurs+        -- check will first try without unfolding any definitions (treating+        -- arguments to definitions as flexible), if that fails it tries again+        -- with full unfolding.+        v <- instantiate v+        reportSLn "tc.meta.assign" 50 $ "MetaVars.assign: assigning to " ++ show v -	-- Check that the arguments are distinct variables-        -- Andreas, 2010-09-24: Herein, ignore the variables which are not-        -- free in v-        let fvs = allVars $ freeVars v+        case (v, mvJudgement mvar) of+            (Sort Inf, HasType{}) -> typeError $ GenericError "Setω is not a valid type."+            _                     -> return ()++        -- We don't instantiate frozen mvars+        when (mvFrozen mvar == Frozen) $ do+          reportSLn "tc.meta.assign" 25 $ "aborting: meta is frozen!"+          patternViolation++	-- We never get blocked terms here anymore. TODO: we actually do. why?+	whenM (isBlockedTerm x) patternViolation++        -- Andreas, 2010-10-15 I want to see whether rhs is blocked+        reportSLn "tc.meta.assign" 50 $ "MetaVars.assign: I want to see whether rhs is blocked"+        reportSDoc "tc.meta.assign" 25 $ do+          v0 <- reduceB v+          case v0 of+            Blocked m0 _ -> text "r.h.s. blocked on:" <+> prettyTCM m0+            NotBlocked{} -> text "r.h.s. not blocked"++        -- Normalise and eta contract the arguments to the meta. These are+        -- usually small, and simplifying might let us instantiate more metas.+        args <- etaContract =<< normalise args++        -- Andreas, 2011-04-21 do the occurs check first+        -- e.g. _1 x (suc x) = suc (_2 x y)+        -- even though the lhs is not a pattern, we can prune the y from _2+        let varsL = freeVars args+        let relVL = Set.toList $ relevantVars varsL+        -- Andreas, 2011-10-06 only irrelevant vars that are direct+        -- arguments to the meta, hence, can be abstracted over, may+        -- appear on the rhs.  (test/fail/Issue483b)+        -- let irrVL = Set.toList $ irrelevantVars varsL+        let fromIrrVar (Arg h Irrelevant (Var i [])) = [i]+            fromIrrVar (Arg h Irrelevant (DontCare (Var i []))) = [i]+            fromIrrVar _ = []+        let irrVL = concat $ map fromIrrVar args         reportSDoc "tc.meta.assign" 20 $             let pr (Var n []) = text (show n)                 pr (Def c []) = prettyTCM c+                pr (DontCare v) = pr v                 pr _          = text ".."             in vcat                  [ text "mvar args:" <+> sep (map (pr . unArg) args)-                 , text "fvars rhs:" <+> sep (map (text . show) $ Set.toList fvs)+                 , text "fvars lhs (rel):" <+> sep (map (text . show) relVL)+                 , text "fvars lhs (irr):" <+> sep (map (text . show) irrVL)                  ]-	ids <- checkArgs x args fvs -	reportSDoc "tc.meta.assign" 15 $-	    text "preparing to instantiate: " <+> prettyTCM v--        -- Andreas, 2010-10-15 I want to see whether rhd is blocked-        reportSDoc "tc.meta.assign" 25 $ do-          v0 <- reduceB v-          case v0 of-            Blocked m0 _ -> text "blocked on:" <+> prettyTCM m0-            NotBlocked{} -> text "not blocked"--	-- Check that the x doesn't occur in the right hand side-	v <- liftTCM $ occursCheck x (map unArg ids) v+	-- Check that the x doesn't occur in the right hand side.+        -- Prune mvars on rhs such that they can only depend on varsL.+        -- Herein, distinguish relevant and irrelevant vars,+        -- since when abstracting irrelevant lhs vars, they may only occur+        -- irrelevantly on rhs.+	v <- liftTCM $ occursCheck x (relVL, irrVL) v -	verboseS "tc.conv.assign" 30 $ do+	reportSLn "tc.meta.assign" 15 "passed occursCheck"+	verboseS "tc.meta.assign" 30 $ do 	  let n = size v 	  when (n > 200) $ do-	    r <- getMetaRange x 	    d <- sep [ text "size" <+> text (show n)-		     , nest 2 $ text "type" <+> prettyTCM t+--		     , nest 2 $ text "type" <+> prettyTCM t 		     , nest 2 $ text "term" <+> prettyTCM v 		     ] 	    liftIO $ LocIO.print d -	reportSLn "tc.meta.assign" 15 "passed occursCheck"--	-- Rename the variables in v to make it suitable for abstraction over ids.-	v' <- do-	    -- Basically, if-	    --   Γ   = a b c d e-	    --   ids = d b e-	    -- then-	    --   v' = (λ a b c d e. v) _ 1 _ 2 0-	    tel  <- getContextTelescope-	    args <- map defaultArg <$> getContextTerms-	    let iargs = reverse $ zipWith (rename $ reverse $ map unArg ids) [0..] $ reverse args-		v'    = raise (size ids) (abstract tel v) `apply` iargs-	    return v'--	let extTel (Arg h r i) m = do-	      tel <- m-	      t	  <- typeOfBV i-	      x	  <- nameOfBV i-	      return $ ExtendTel (Arg h r t) (Abs (show x) tel)-	tel' <- foldr extTel (return EmptyTel) ids--	reportSDoc "tc.meta.assign" 15 $-	  text "final instantiation:" <+> prettyTCM (abstract tel' v')--	-- Perform the assignment (and wake constraints). Metas-	-- are top-level so we do the assignment at top-level.-	n <- size <$> getContextTelescope-	escapeContext n $ x =: killRange (abstract tel' v')-	return []-    where-	rename ids i arg = case findIndex (==i) ids of-	    Just j  -> fmap (const $ Var (fromIntegral j) []) arg-	    Nothing -> fmap (const __IMPOSSIBLE__) arg	-- we will end up here, but never look at the result--	handler :: MonadTCM tcm => tcm Constraints-	handler = do-	    reportSLn "tc.meta.assign" 10 $ "Oops. Undo " ++ show x ++ " := ..."-	    equalTerm t (MetaV x args) v---- TODO: Unify with assignV-assignS :: MonadTCM tcm => MetaId -> Args -> Sort -> tcm Constraints-assignS x args s =-  ifM (not <$> hasUniversePolymorphism) (noPolyAssign x s) $-    handleAbort handler $ do-	reportSDoc "tc.meta.assign" 10 $ do-	  text "sort" <+> prettyTCM (MetaS x args) <+> text ":=" <+> prettyTCM s--	-- We don't instantiate blocked terms-	whenM (isBlockedTerm x) patternViolation	-- TODO: not so nice+	-- Check that the arguments are variables+	ids <- checkAllVars args -	-- Check that the arguments are distinct variables+        -- Check linearity of @ids@+        -- Andreas, 2010-09-24: Herein, ignore the variables which are not+        -- free in v+        -- Ulf, 2011-09-22: we need to respect irrelevant vars as well, otherwise+        -- we'll build solutions where the irrelevant terms are not valid+        let fvs = allVars $ freeVars v         reportSDoc "tc.meta.assign" 20 $-            let pr (Var n []) = text (show n)-                pr (Def c []) = prettyTCM c-                pr _          = text ".."-            in-            text "args:" <+> sep (map (pr . unArg) args)--        -- TODO Hack-        let fvs = freeVars s-        when (any (< 0) $ Set.toList (flexibleVars fvs)) $ do-            reportSLn "tc.meta.assign" 10 "negative variables!"-            patternViolation--	ids <- checkArgs x args (allVars fvs)--	reportSDoc "tc.meta.assign" 15 $-	    text "preparing to instantiate: " <+> prettyTCM s+          text "fvars rhs:" <+> sep (map (text . show) $ Set.toList fvs) -	-- Check that the x doesn't occur in the right hand side-	v <- liftTCM $ occursCheck x (map unArg ids) (Sort s)+        unless (distinct $ filter (`Set.member` fvs) ids) $ do+          -- non-linear lhs: we cannot solve, but prune+          killResult <- prune x args $ Set.toList fvs+          reportSDoc "tc.meta.assign" 10 $+            text "pruning" <+> prettyTCM x <+> (text $+              if killResult `elem` [PrunedSomething,PrunedEverything] then "succeeded"+               else "failed")+          patternViolation -	verboseS "tc.conv.assign" 30 $ do-	  let n = size v-	  when (n > 200) $ do-	    r <- getMetaRange x-	    d <- sep [ text "size" <+> text (show n)-		     , nest 2 $ text "sort" <+> prettyTCM v-		     ]-	    liftIO $ LocIO.print d+{- Andreas, 2011-04-21 this does not work+        if not (distinct $ filter (`Set.member` fvs) ids) then do+          -- non-linear lhs: we cannot solve, but prune+          ok <- prune x args $ Set.toList fvs+          if ok then return [] else patternViolation -	reportSLn "tc.meta.assign" 15 "passed occursCheck"+        else do+-}+        -- we are linear, so we can solve!+	reportSDoc "tc.meta.assign" 25 $+	    text "preparing to instantiate: " <+> prettyTCM v  	-- Rename the variables in v to make it suitable for abstraction over ids. 	v' <- do@@ -528,90 +551,84 @@ 	    --   ids = d b e 	    -- then 	    --   v' = (λ a b c d e. v) _ 1 _ 2 0-	    tel  <- getContextTelescope-	    args <- map defaultArg <$> getContextTerms-	    let iargs = reverse $ zipWith (rename $ reverse $ map unArg ids) [0..] $ reverse args-		v'    = raise (size ids) (abstract tel v) `apply` iargs+	    tel   <- getContextTelescope+	    gamma <- map defaultArg <$> getContextTerms+	    let iargs = reverse $ zipWith (rename ids) [0..] $ reverse gamma+		v'    = raise (size args) (abstract tel v) `apply` iargs 	    return v' -	let extTel (Arg h r i) m = do-	      tel <- m-	      t	  <- typeOfBV i-	      x	  <- nameOfBV i-	      return $ ExtendTel (Arg h r t) (Abs (show x) tel)-	tel' <- foldr extTel (return EmptyTel) ids+        -- Andreas, 2011-04-18 to work with irrelevant parameters DontCare+        -- we need to construct tel' from the type of the meta variable+        -- (no longer from ids which may not be the complete variable list+        -- any more)+        let t = jMetaType $ mvJudgement mvar+	reportSDoc "tc.meta.assign" 15 $ text "type of meta =" <+> prettyTCM t+--	reportSDoc "tc.meta.assign" 30 $ text "type of meta =" <+> text (show t) -	reportSDoc "tc.meta.assign" 15 $-	  text "final instantiation:" <+> prettyTCM (abstract tel' v')+        TelV tel0 core0 <- telViewM t+        let n = length args+	reportSDoc "tc.meta.assign" 30 $ text "tel0  =" <+> prettyTCM tel0+	reportSDoc "tc.meta.assign" 30 $ text "#args =" <+> text (show n)+        when (size tel0 < n) __IMPOSSIBLE__+        let tel' = telFromList $ take n $ telToList tel0 +	reportSDoc "tc.meta.assign" 10 $+	  text "solving" <+> prettyTCM x <+> text ":=" <+> prettyTCM (abstract tel' v')+ 	-- Perform the assignment (and wake constraints). Metas 	-- are top-level so we do the assignment at top-level. 	n <- size <$> getContextTelescope-	escapeContext n $ x =:= killRange (abstract tel' v')-	return []+	escapeContext n $ assignTerm x $ killRange (abstract tel' v')+	return ()     where+        -- @ids@ are the lhs variables (metavar arguments)+        -- @i@ is the variable from the context Gamma+        rename :: [Nat] -> Nat -> Arg Term -> Arg Term 	rename ids i arg = case findIndex (==i) ids of 	    Just j  -> fmap (const $ Var (fromIntegral j) []) arg-	    Nothing -> fmap (const __IMPOSSIBLE__) arg-              -- we will end up here, but never look at the result--	handler :: MonadTCM tcm => tcm Constraints-	handler = do-	    reportSLn "tc.meta.assign" 10 $ "Oops. Undo " ++ show x ++ " := ..."-	    equalSort (MetaS x args) s--        noPolyAssign x s =-          handleAbort (equalSort (MetaS x []) s) $ do-            Sort s <- occursCheck x [] (Sort s)-            x =: s-            return []+	    Nothing -> fmap (const __IMPOSSIBLE__) arg	-- we will end up here, but never look at the result -type FVs = Set Nat+type FVs = Set.VarSet  -- | Check that arguments to a metavar are in pattern fragment. --   Assumes all arguments already in whnf. --   Parameters are represented as @Var@s so @checkArgs@ really---     checks that all args are unique @Var@s and returns the---     list of corresponding indices for each arg-- done---     to not define equality on @Term@.+--     checks that all args are @Var@s and returns the+--     list of corresponding indices for each arg.+--   Linearity has to be checked separately. -- --   @reverse@ is necessary because we are directly abstracting over this list @ids@.----checkArgs :: MonadTCM tcm => MetaId -> Args -> FVs -> tcm [Arg Nat]-checkArgs x args fvs = do-  args <- instantiateFull args-  case validParameters args fvs of-    Just ids -> return $ reverse ids-    Nothing  -> patternViolation---- | Check that the parameters to a meta variable are distinct variables.--- Andreas, 2010-09-24: Allow non-linear variables that do not appear in @FVs@.-validParameters :: Monad m => Args -> FVs -> m [Arg Nat]-validParameters args fvs-    | all isVar args && distinct (filter (flip Set.member fvs) $ map unArg vars)-                = return $ reverse vars-    | otherwise	= fail "invalid parameters"-    where-	vars = [ Arg h r i | Arg h r (Var i []) <- args ]-+checkAllVars :: Args -> TCM [Nat]+checkAllVars args =+  case allVarOrIrrelevant args of+    Nothing -> do+      reportSDoc "tc.meta.assign" 15 $ vcat [ text "not all variables: " <+> prettyTCM args+                                            , text "  aborting assignment" ]+      patternViolation+    Just is -> return $ map unArg is -isVar :: Arg Term -> Bool-isVar (Arg _ _ (Var _ [])) = True-isVar _			 = False+-- | filter out irrelevant args and check that all others are variables.+--   Return the reversed list of variables.+allVarOrIrrelevant :: Args -> Maybe [Arg Nat]+allVarOrIrrelevant args = foldM isVarOrIrrelevant [] args where+  isVarOrIrrelevant vars arg =+    case arg of+      Arg h r (Var i []) -> return $ Arg h r i : removeIrr i vars+      Arg h Irrelevant (DontCare (Var i [])) -> return $ addIrrIfNotPresent h i vars+      -- Andreas, 2011-04-27 keep irrelevant variables+      Arg h Irrelevant _ -> return $ Arg h Irrelevant (-1) : vars -- any impossible deBruijn index will do (see Jason Reed, LFMTP 09 "_" or Nipkow "minus infinity")+      _                  -> Nothing+  -- in case of non-linearity make sure not to count the irrelevant vars+  addIrrIfNotPresent h i vars+    | any (\ (Arg _ _ j) -> j == i) vars = Arg h Irrelevant (-1) : vars+    | otherwise                          = Arg h Irrelevant i    : vars+  removeIrr i = map (\ a@(Arg h r j) ->+    if r == Irrelevant && i == j then Arg h Irrelevant (-1) else a)  -updateMeta :: (MonadTCM tcm, Data a, Occurs a, Abstract a) => MetaId -> a -> tcm ()-updateMeta mI t =-    do	mv <- lookupMeta mI-	withMetaInfo (getMetaInfo mv) $-	    do	args <- getContextArgs-		cs <- upd mI args (mvJudgement mv) t-		unless (List.null cs) $ fail $ "failed to update meta " ++ show mI-    where-	upd mI args j t = (__IMPOSSIBLE__ `mkQ` updV j `extQ` updS) t-	    where-		updV (HasType _ t) v =-		  assignV (t `piApply` args) mI args v-		updV _ _	     = __IMPOSSIBLE__--		updS s = assignS mI args s+updateMeta :: MetaId -> Term -> TCM ()+updateMeta mI v = do+    mv <- lookupMeta mI+    withMetaInfo (getMetaInfo mv) $ do+      args <- getContextArgs+      noConstraints $ assignV mI args v
src/full/Agda/TypeChecking/MetaVars.hs-boot view
@@ -1,10 +1,9 @@  module Agda.TypeChecking.MetaVars where -import Agda.Syntax.Internal	       ( MetaId, Term, Sort )-import Agda.TypeChecking.Monad.Base ( MonadTCM )--assignTerm :: MonadTCM tcm => MetaId -> Term -> tcm ()-assignSort :: MonadTCM tcm => MetaId -> Sort -> tcm ()+import Agda.Syntax.Internal	    ( MetaId, Term, Sort, Type, Args )+import Agda.TypeChecking.Monad.Base ( TCM ) -etaExpandMetaSafe :: MonadTCM tcm => MetaId -> tcm ()+assignTerm        :: MetaId -> Term -> TCM ()+etaExpandMetaSafe :: MetaId -> TCM ()+assignV           :: MetaId -> Args -> Term -> TCM ()
+ src/full/Agda/TypeChecking/MetaVars/Mention.hs view
@@ -0,0 +1,105 @@++module Agda.TypeChecking.MetaVars.Mention where++import Data.Traversable++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Monad+++class MentionsMeta t where+  mentionsMeta :: MetaId -> t -> Bool++instance MentionsMeta Term where+  mentionsMeta x v = case v of+    Var _ args   -> mm args+    Lam _ b      -> mm b+    Lit{}        -> False+    Def _ args   -> mm args+    Con _ args   -> mm args+    Pi a b       -> mm (a, b)+    Sort s       -> mm s+    Level l      -> mm l+    DontCare v   -> False   -- we don't have to look inside don't cares when deciding to wake constraints+    MetaV y args -> x == y || mm args   -- TODO: we really only have to look one level deep at meta args+    where+      mm v = mentionsMeta x v++instance MentionsMeta Level where+  mentionsMeta x (Max as) = mentionsMeta x as++instance MentionsMeta PlusLevel where+  mentionsMeta x ClosedLevel{} = False+  mentionsMeta x (Plus _ a) = mentionsMeta x a++instance MentionsMeta LevelAtom where+  mentionsMeta x l = case l of+    MetaLevel m vs   -> x == m || mentionsMeta x vs+    BlockedLevel m _ -> x == m    -- if it's blocked on a different meta it doesn't matter if it mentions the meta somewhere else+    UnreducedLevel l -> mentionsMeta x l+    NeutralLevel l   -> mentionsMeta x l++instance MentionsMeta Type where+    mentionsMeta x (El s t) = mentionsMeta x (s, t)++instance MentionsMeta Sort where+  mentionsMeta x s = case s of+    Type l     -> mentionsMeta x l+    Prop       -> False+    Inf        -> False+    DLub s1 s2 -> mentionsMeta x (s1, s2)++instance MentionsMeta t => MentionsMeta (Abs t) where+  mentionsMeta x = mentionsMeta x . unAbs++instance MentionsMeta t => MentionsMeta (Arg t) where+  mentionsMeta x = mentionsMeta x . unArg++instance MentionsMeta t => MentionsMeta [t] where+  mentionsMeta x = any (mentionsMeta x)++instance MentionsMeta t => MentionsMeta (Maybe t) where+  mentionsMeta x = maybe False (mentionsMeta x)++instance (MentionsMeta a, MentionsMeta b) => MentionsMeta (a, b) where+  mentionsMeta x (a, b) = mentionsMeta x a || mentionsMeta x b++instance (MentionsMeta a, MentionsMeta b, MentionsMeta c) => MentionsMeta (a, b, c) where+  mentionsMeta x (a, b, c) = mentionsMeta x a || mentionsMeta x b || mentionsMeta x c++instance MentionsMeta a => MentionsMeta (Closure a) where+  mentionsMeta x cl = mentionsMeta x (clValue cl)++instance MentionsMeta Elim where+  mentionsMeta x Proj{} = False+  mentionsMeta x (Apply v) = mentionsMeta x v++instance MentionsMeta a => MentionsMeta (Tele a) where+  mentionsMeta x EmptyTel = False+  mentionsMeta x (ExtendTel a b) = mentionsMeta x (a, b)++instance MentionsMeta ProblemConstraint where+  mentionsMeta x = mentionsMeta x . theConstraint++instance MentionsMeta Constraint where+  mentionsMeta x c = case c of+    ValueCmp _ t u v    -> mm (t, u, v)+    ElimCmp _ t v as bs -> mm ((t, v), (as, bs))+    LevelCmp _ u v      -> mm (u, v)+    TypeCmp _ a b       -> mm (a, b)+    TelCmp a b _ u v    -> mm ((a, b), (u, v))+    SortCmp _ a b       -> mm (a, b)+    Guarded c _         -> mm c+    UnBlock _           -> True   -- this might be a postponed typechecking+                                  -- problem and we don't have a handle on+                                  -- what metas it depends on+    FindInScope m       -> True   -- this needs to be woken up for any meta+    IsEmpty t           -> mm t+    where+      mm v = mentionsMeta x v++-- instance (Ord k, MentionsMeta e) => MentionsMeta (Map k e) where+--   mentionsMeta = traverse mentionsMeta+
src/full/Agda/TypeChecking/MetaVars/Occurs.hs view
@@ -5,77 +5,125 @@ import Control.Applicative import Control.Monad import Control.Monad.Error-import qualified Data.Set as Set+import Data.Traversable (traverse)  import Agda.Syntax.Common import Agda.Syntax.Internal import Agda.TypeChecking.Monad import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty-import Agda.TypeChecking.Free+import Agda.TypeChecking.Free hiding (Occurrence(..)) import Agda.TypeChecking.Substitute import Agda.TypeChecking.EtaContract+import Agda.TypeChecking.Datatypes (isDataOrRecordType) import {-# SOURCE #-} Agda.TypeChecking.MetaVars  import Agda.Utils.Monad import Agda.Utils.Permutation import Agda.Utils.Size+import qualified Agda.Utils.VarSet as Set  import Agda.Utils.Impossible #include "../../undefined.h" -data OccursCtx = Flex | Rigid+data OccursCtx+  = Flex          -- ^ we are in arguments of a meta+  | Rigid         -- ^ we are not in arguments of a meta but a bound var+  | StronglyRigid -- ^ we are at the start or in the arguments of a constructor+  | Irrel         -- ^ we are in an irrelevant argument   deriving (Eq, Show) +data UnfoldStrategy = YesUnfold | NoUnfold+  deriving (Eq, Show)++defArgs :: UnfoldStrategy -> OccursCtx -> OccursCtx+defArgs NoUnfold  _   = Flex+defArgs YesUnfold ctx = weakly ctx++unfold :: UnfoldStrategy -> Term -> TCM (Blocked Term)+unfold NoUnfold  v = NotBlocked <$> instantiate v+unfold YesUnfold v = reduceB v++-- | Leave the strongly rigid position.+weakly :: OccursCtx -> OccursCtx+weakly StronglyRigid = Rigid+weakly ctx = ctx++strongly :: OccursCtx -> OccursCtx+strongly Rigid = StronglyRigid+strongly ctx = ctx+ abort :: OccursCtx -> TypeError -> TCM ()-abort Flex  _   = patternViolation-abort Rigid err = typeError err+abort StronglyRigid err = typeError err -- here, throw an uncatchable error (unsolvable constraint)+abort Flex  _ = patternViolation -- throws a PatternErr, which leads to delayed constraint+abort Rigid _ = patternViolation+abort Irrel _ = patternViolation +-- | Distinguish relevant and irrelevant variables in occurs check.+type Vars = ([Nat],[Nat])++goIrrelevant :: Vars -> Vars+goIrrelevant (relVs, irrVs) = (irrVs ++ relVs, [])++allowedVar :: Nat -> Vars -> Bool+allowedVar i (relVs, irrVs) = i `elem` relVs++takeRelevant :: Vars -> [Nat]+takeRelevant = fst++underAbs :: Vars -> Vars+underAbs (relVs, irrVs) = (0 : map (1+) relVs, map (1+) irrVs)+ -- | Extended occurs check. class Occurs t where-  occurs :: OccursCtx -> MetaId -> [Nat] -> t -> TCM t+  occurs :: UnfoldStrategy -> OccursCtx -> MetaId -> Vars -> t -> TCM t  -- | When assigning @m xs := v@, check that @m@ does not occur in @v@ --   and that the free variables of @v@ are contained in @xs@.-occursCheck :: MonadTCM tcm => MetaId -> [Nat] -> Term -> tcm Term+occursCheck :: MetaId -> Vars -> Term -> TCM Term occursCheck m xs v = liftTCM $ do-  v <- instantiate v-  case v of-    -- Don't fail if trying to instantiate to just itself-    MetaV m' _        | m == m' -> patternViolation-    Sort (MetaS m' _) | m == m' -> patternViolation-    _                           ->-                              -- Produce nicer error messages-      occurs Rigid m xs v `catchError` \err -> case errError err of-        TypeError _ cl -> case clValue cl of-          MetaOccursInItself{} ->-            typeError . GenericError . show =<<-              fsep [ text ("Refuse to construct infinite term by instantiating " ++ show m ++ " to")-                   , prettyTCM v-                   ]-          MetaCannotDependOn _ _ i ->-            ifM ((&&) <$> isSortMeta m <*> (not <$> hasUniversePolymorphism))-            ( typeError . GenericError . show =<<-              fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to")-                   , prettyTCM v-                   , text "since universe polymorphism is not enabled"-                   , text "(use the --universe-polymorphism flag to enable)"-                   ]-            )-            ( typeError . GenericError . show =<<-              fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to")-                   , prettyTCM v-                   , text "since it contains the variable"-                   , enterClosure cl $ \_ -> prettyTCM (Var i [])-                   , text $ "which " ++ show m ++ " cannot depend on"-                   ]-            )-          _ -> throwError err-        _ -> throwError err+  let bailOnSelf v = do+        v <- instantiate v+        case v of+          -- Don't fail if trying to instantiate to just itself+          MetaV m' _ | m == m' -> patternViolation+          Level (Max [Plus 0 (MetaLevel m' _)])+                     | m == m' -> patternViolation+          _ -> return v +  v <- bailOnSelf v+  -- First try without normalising the term+  occurs NoUnfold  StronglyRigid m xs v `catchError` \_ -> do+  occurs YesUnfold StronglyRigid m xs v `catchError` \err -> case errError err of+                          -- Produce nicer error messages+    TypeError _ cl -> case clValue cl of+      MetaOccursInItself{} ->+        typeError . GenericError . show =<<+          fsep [ text ("Refuse to construct infinite term by instantiating " ++ show m ++ " to")+               , prettyTCM =<< instantiateFull v+               ]+      MetaCannotDependOn _ _ i ->+        ifM ((&&) <$> isSortMeta m <*> (not <$> hasUniversePolymorphism))+        ( typeError . GenericError . show =<<+          fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to")+               , prettyTCM v+               , text "since universe polymorphism is disabled"+               ]+        )+        ( typeError . GenericError . show =<<+            fsep [ text ("Cannot instantiate the metavariable " ++ show m ++ " to solution")+                 , prettyTCM v+                 , text "since it contains the variable"+                 , enterClosure cl $ \_ -> prettyTCM (Var i [])+                 , text $ "which is not in scope of the metavariable or irrelevant in the metavariable but relevant in the solution"+                 ]+          )+      _ -> throwError err+    _ -> throwError err+ instance Occurs Term where-  occurs ctx m xs v = do-    v <- reduceB v+  occurs red ctx m xs v = do+    v <- unfold red v     case v of       -- Don't fail on blocked terms or metas       Blocked _ v  -> occurs' Flex v@@ -83,30 +131,35 @@     where       occurs' ctx v = case v of         Var i vs   -> do         -- abort Rigid turns this error into PatternErr-          unless (i `elem` xs) $ abort ctx $ MetaCannotDependOn m xs i-          Var i <$> occ vs-        Lam h f	    -> Lam h <$> occ f+          unless (i `allowedVar` xs) $ abort (strongly ctx) $ MetaCannotDependOn m (takeRelevant xs) i+          Var i <$> occ (weakly ctx) vs+        Lam h f	    -> Lam h <$> occ ctx f+        Level l     -> Level <$> occ ctx l         Lit l	    -> return v-        DontCare    -> return v-        Def c vs    -> Def c <$> occ vs-        Con c vs    -> Con c <$> occ vs-        Pi a b	    -> uncurry Pi <$> occ (a,b)-        Fun a b	    -> uncurry Fun <$> occ (a,b)-        Sort s	    -> Sort <$> occ s+        DontCare v  -> DontCare <$> occurs red Irrel m (goIrrelevant xs) v+        Def d vs    -> Def d <$> occDef d ctx vs+        Con c vs    -> Con c <$> occ ctx vs  -- if strongly rigid, remain so+        Pi a b	    -> uncurry Pi <$> occ ctx (a,b)+        Sort s	    -> Sort <$> occ ctx s         MetaV m' vs -> do             -- Check for loop-            when (m == m') $ abort ctx $ MetaOccursInItself m+            --   don't fail hard on this, since we might still be on the top-level+            --   after some killing (Issue 442)+            when (m == m') $ patternViolation -            -- The arguments are in a flexible position-            (MetaV m' <$> occurs Flex m xs vs) `catchError` \err -> do+            -- The arguments of a meta are in a flexible position+            (MetaV m' <$> occurs red Flex m xs vs) `catchError` \err -> do               reportSDoc "tc.meta.kill" 25 $ vcat                 [ text $ "error during flexible occurs check, we are " ++ show ctx                 , text $ show (errError err)                 ]               case errError err of                 -- On pattern violations try to remove offending-                -- flexible occurrences (if in a rigid context)-                PatternErr{} | ctx == Rigid -> do+                -- flexible occurrences (if not already in a flexible context)+                PatternErr{} | ctx /= Flex -> do+                      reportSLn "tc.meta.kill" 20 $+                        "oops, pattern violation for " ++ show m'+{-                   let kills = map (hasBadRigid xs) $ map unArg vs                   reportSLn "tc.meta.kill" 20 $                     "oops, pattern violation for " ++ show m' ++ "\n" ++@@ -124,76 +177,161 @@                           ]                         ]                       ok <- killArgs kills m'-                      if ok-                        then occurs Rigid m xs =<< instantiate (MetaV m' vs)+-}+                      killResult <- prune m' vs (takeRelevant xs)+                      if (killResult == PrunedEverything)+                        -- after successful pruning, restart occurs check+                        then occurs red ctx m xs =<< instantiate (MetaV m' vs)                         else throwError err                 _ -> throwError err         where-          occ x = occurs ctx m xs x+          occ ctx v = occurs red ctx m xs v+          -- a data or record type constructor propagates strong occurrences+          -- since e.g. x = List x is unsolvable+          occDef d ctx v = ifM (isDataOrRecordType d) (occ ctx v)+                                 (occ (defArgs red ctx) v) +instance Occurs Level where+  occurs red ctx m xs (Max as) = Max <$> occurs red ctx m xs as++instance Occurs PlusLevel where+  occurs red ctx m xs l@ClosedLevel{} = return l+  occurs red ctx m xs (Plus n l) = Plus n <$> occurs red ctx m xs l++instance Occurs LevelAtom where+  occurs red ctx m xs l = do+    l <- case red of+           YesUnfold -> reduce l+           NoUnfold  -> instantiate l+    case l of+      MetaLevel m' args -> do+        MetaV m' args <- occurs red ctx m xs (MetaV m' args)+        return $ MetaLevel m' args+      NeutralLevel v   -> NeutralLevel   <$> occurs red ctx m xs v+      BlockedLevel m v -> BlockedLevel m <$> occurs red Flex m xs v+      UnreducedLevel v -> UnreducedLevel <$> occurs red ctx m xs v+ instance Occurs Type where-  occurs ctx m xs (El s v) = uncurry El <$> occurs ctx m xs (s,v)+  occurs red ctx m xs (El s v) = uncurry El <$> occurs red ctx m xs (s,v)  instance Occurs Sort where-  occurs ctx m xs s = do-    s' <- reduce s+  occurs red ctx m xs s = do+    s' <- case red of+            YesUnfold -> reduce s+            NoUnfold  -> instantiate s     case s' of-      MetaS m' args -> do-        when (m == m') $ abort ctx $ MetaOccursInItself m-        MetaS m' <$> occurs Flex m xs args-      Lub s1 s2  -> uncurry Lub <$> occurs ctx m xs (s1,s2)-      DLub s1 s2 -> uncurry DLub <$> occurs ctx m xs (s1, s2)-      Suc s      -> Suc <$> occurs ctx m xs s-      Type a     -> Type <$> occurs ctx m xs a+      DLub s1 s2 -> uncurry DLub <$> occurs red (weakly ctx) m xs (s1,s2)+      Type a     -> Type <$> occurs red ctx m xs a       Prop       -> return s'       Inf        -> return s'  instance Occurs a => Occurs (Abs a) where-  occurs ctx m xs (Abs s x) = Abs s <$> occurs ctx m (0 : map (1+) xs) x+  occurs red ctx m xs (Abs   s x) = Abs   s <$> occurs red ctx m (underAbs xs) x+  occurs red ctx m xs (NoAbs s x) = NoAbs s <$> occurs red ctx m xs x  instance Occurs a => Occurs (Arg a) where-  occurs ctx m xs (Arg h r x) = Arg h r <$> occurs ctx m xs x+  occurs red ctx m xs (Arg h r x) = Arg h r <$> occurs red ctx m xs x  instance (Occurs a, Occurs b) => Occurs (a,b) where-  occurs ctx m xs (x,y) = (,) <$> occurs ctx m xs x <*> occurs ctx m xs y+  occurs red ctx m xs (x,y) = (,) <$> occurs red ctx m xs x <*> occurs red ctx m xs y  instance Occurs a => Occurs [a] where-  occurs ctx m xs ys = mapM (occurs ctx m xs) ys+  occurs red ctx m xs ys = mapM (occurs red ctx m xs) ys --- Getting rid of flexible occurrences --+-- * Getting rid of flexible occurrences +-- | @prune m' vs xs@ attempts to remove all arguments from @vs@ whose+--   free variables are not contained in @xs@.+--   If successful, @m'@ is solved by the new, pruned meta variable and we+--   return @True@ else @False@.+prune :: MetaId -> Args -> [Nat] -> TCM PruneResult+prune m' vs xs = liftTCM $ do+  let kills = map (hasBadRigid xs) $ map unArg vs+  reportSDoc "tc.meta.kill" 10 $ vcat+    [ text "attempting kills"+    , nest 2 $ vcat+      [ text "m'    =" <+> text (show m')+      , text "xs    =" <+> text (show xs)+      , text "vs    =" <+> prettyList (map prettyTCM vs)+      , text "kills =" <+> text (show kills)+      ]+    ]+{- Andreas, 2011-05-11 REDUNDANT CODE+  reportSLn "tc.meta.kill" 20 $+    "attempting to prune meta " ++ show m' ++ "\n" +++    "  kills: " ++ show kills+  if not (or kills)+    then return False -- nothing to kill+    else do+-}+  killArgs kills m'++-- | @hasBadRigid xs v = True@ iff one of the rigid variables in @v@ is not in @xs@.+--   Actually we can only prune if a bad variable is in the head. See issue 458. hasBadRigid :: [Nat] -> Term -> Bool-hasBadRigid xs v =-  not $ Set.isSubsetOf-    (rigidVars $ freeVars v)-    (Set.fromList xs)+hasBadRigid xs (Var v _) = notElem v xs+hasBadRigid xs _         = False+  -- not $ Set.isSubsetOf+  --   (rigidVars $ freeVars v)+  --   (Set.fromList xs) -killArgs :: [Bool] -> MetaId -> TCM Bool+data PruneResult+  = NothingToPrune   -- ^ the kill list is empty or only @False@s+  | PrunedNothing    -- ^ there is no possible kill (because of type dep.)+  | PrunedSomething  -- ^ managed to kill some args in the list+  | PrunedEverything -- ^ all prescribed kills where performed+    deriving (Eq, Show)++-- | @killArgs [k1,...,kn] X@ prunes argument @i@ from metavar @X@ if @ki==True@.+--   Pruning is carried out whenever > 0 arguments can be pruned.+--   @True@ is only returned if all arguments could be pruned.+killArgs :: [Bool] -> MetaId -> TCM PruneResult killArgs kills _-  | not (or kills) = return False  -- nothing to kill+  | not (or kills) = return NothingToPrune  -- nothing to kill killArgs kills m = do   mv <- lookupMeta m+  if mvFrozen mv == Frozen then return PrunedNothing else do+{- Andreas 2011-04-26, allow pruning in MetaS   case mvJudgement mv of     IsSort _    -> return False     HasType _ a -> do+-}+      let a = jMetaType $ mvJudgement mv       TelV tel b <- telView' <$> instantiateFull a       let args         = zip (telToList tel) (kills ++ repeat False)           (kills', a') = killedType args b       dbg kills' a a'-      when (any unArg kills') $ performKill (reverse kills') m a'-      -- Only successful if all occurrences were killed-      return (map unArg kills' == kills)+      -- If there is any prunable argument, perform the pruning+      if not (any unArg kills') then return PrunedNothing else do+        performKill (reverse kills') m a'+        -- Only successful if all occurrences were killed+        -- Andreas, 2011-05-09 more precisely, check that at least+        -- the in 'kills' prescribed kills were carried out+        -- OLD CODE: return (map unArg kills' == kills)+        return $ if (and $ zipWith implies kills $ map unArg kills')+                   then PrunedEverything+                   else PrunedSomething   where+    implies :: Bool -> Bool -> Bool+    implies False _ = True+    implies True  x = x     dbg kills' a a' =       reportSDoc "tc.meta.kill" 10 $ vcat         [ text "after kill analysis"         , nest 2 $ vcat-          [ text "kills'  =" <+> text (show kills')+          [ text "metavar =" <+> prettyTCM m+          , text "kills   =" <+> text (show kills)+          , text "kills'  =" <+> text (show kills')           , text "oldType =" <+> prettyTCM a           , text "newType =" <+> prettyTCM a'           ]         ] +-- | @killedType [((x1,a1),k1)..((xn,an),kn)] b = ([k'1..k'n],t')@+--   (ignoring @Arg@).  Let @t' = (xs:as) -> b@.+--   Invariant: @k'i == True@ iff @ki == True@ and pruning the @i@th argument from+--   type @b@ is possible without creating unbound variables.+--   @t'@ is type @t@ after pruning all @k'i==True@. killedType :: [(Arg (String, Type), Bool)] -> Type -> ([Arg Bool], Type) killedType [] b = ([], b) killedType ((arg, kill) : kills) b@@ -208,9 +346,11 @@ performKill :: [Arg Bool] -> MetaId -> Type -> TCM () performKill kills m a = do   mv <- lookupMeta m+  when (mvFrozen mv == Frozen) __IMPOSSIBLE__   let perm = Perm (size kills)              [ i | (i, Arg _ _ False) <- zip [0..] (reverse kills) ]-  m' <- newMeta (mvInfo mv) (mvPriority mv) perm (HasType undefined a)+  m' <- newMeta (mvInfo mv) (mvPriority mv) perm+                (HasType __IMPOSSIBLE__ a)   -- Andreas, 2010-10-15 eta expand new meta variable if necessary   etaExpandMetaSafe m'   let vars = reverse [ Arg h r (Var i []) | (i, Arg h r False) <- zip [0..] kills ]
src/full/Agda/TypeChecking/Monad/Base.hs view
@@ -1,20 +1,24 @@ {-# LANGUAGE CPP, ExistentialQuantification, FlexibleContexts, Rank2Types,              TypeSynonymInstances, MultiParamTypeClasses, FlexibleInstances,-             UndecidableInstances, DeriveDataTypeable, GeneralizedNewtypeDeriving+             UndecidableInstances, DeriveDataTypeable, GeneralizedNewtypeDeriving,+             DeriveFunctor, DeriveFoldable, DeriveTraversable   #-} module Agda.TypeChecking.Monad.Base where +import Control.Arrow import Control.Exception as E import Control.Monad.Error import Control.Monad.State import Control.Monad.Reader import Control.Applicative+import Data.Function import Data.Int import Data.Map as Map import Data.Set as Set import Data.Generics import Data.Foldable import Data.Traversable+import Data.IORef import System.Time  import Agda.Syntax.Common@@ -33,10 +37,13 @@ import qualified Agda.Interaction.Highlighting.Range as R import Agda.Interaction.Highlighting.Precise (HighlightingInfo) +import qualified Agda.Compiler.JS.Syntax as JS+ import Agda.Utils.FileName import Agda.Utils.Fresh import Agda.Utils.Monad import Agda.Utils.Permutation+import Agda.Utils.Pretty  #include "../../undefined.h" import Agda.Utils.Impossible@@ -49,37 +56,47 @@     TCSt { stFreshThings       :: FreshThings 	 , stMetaStore	       :: MetaStore 	 , stInteractionPoints :: InteractionPoints-	 , stConstraints       :: Constraints+	 , stAwakeConstraints    :: Constraints+	 , stSleepingConstraints :: Constraints 	 , stSignature	       :: Signature 	 , stImports	       :: Signature 	 , stImportedModules   :: Set ModuleName          , stModuleToSource    :: ModuleToSource 	 , stVisitedModules    :: VisitedModules-	 , stDecodedModules    :: DecodedModules          , stCurrentModule     :: Maybe ModuleName            -- ^ The current module is available after it has been type            -- checked. 	 , stScope	       :: ScopeInfo-	 , stPersistentOptions :: CommandLineOptions-           -- ^ Options which apply to all files, unless overridden. 	 , stPragmaOptions     :: PragmaOptions            -- ^ Options applying to the current file. @OPTIONS@            -- pragmas only affect this field. 	 , stStatistics	       :: Statistics+         , stExtLambdaTele     :: Map QName (Int , Int) 	 , stMutualBlocks      :: Map MutualId (Set QName) 	 , stLocalBuiltins     :: BuiltinThings PrimFun          , stImportedBuiltins  :: BuiltinThings PrimFun          , stHaskellImports    :: Set String            -- ^ Imports that should be generated by the compiler (this            -- includes imports from imported modules).+         , stPersistent        :: PersistentTCState 	 } +-- | A part of the state which is not reverted when an error is thrown+-- or the state is reset.++data PersistentTCState = PersistentTCSt+  { stDecodedModules    :: DecodedModules+  , stPersistentOptions :: CommandLineOptions+    -- ^ Options which apply to all files, unless overridden.+  }+ data FreshThings = 	Fresh { fMeta	     :: MetaId 	      , fInteraction :: InteractionId 	      , fMutual	     :: MutualId 	      , fName	     :: NameId 	      , fCtx	     :: CtxId+              , fProblem     :: ProblemId               , fInteger     :: Integer                 -- ^ Can be used for various things. 	      }@@ -87,25 +104,29 @@  initState :: TCState initState =-    TCSt { stFreshThings       = Fresh 0 0 0 (NameId 0 0) 0 0+    TCSt { stFreshThings       = (Fresh 0 0 0 (NameId 0 0) 0 0 0) { fProblem = 1 } 	 , stMetaStore	       = Map.empty 	 , stInteractionPoints = Map.empty-	 , stConstraints       = []+	 , stAwakeConstraints    = []+	 , stSleepingConstraints = [] 	 , stSignature	       = emptySignature 	 , stImports	       = emptySignature 	 , stImportedModules   = Set.empty          , stModuleToSource    = Map.empty 	 , stVisitedModules    = Map.empty-	 , stDecodedModules    = Map.empty          , stCurrentModule     = Nothing 	 , stScope	       = emptyScopeInfo-	 , stPersistentOptions = defaultOptions 	 , stPragmaOptions     = optPragmaOptions $ defaultOptions 	 , stStatistics	       = Map.empty+         , stExtLambdaTele     = Map.empty 	 , stMutualBlocks      = Map.empty 	 , stLocalBuiltins     = Map.empty 	 , stImportedBuiltins  = Map.empty          , stHaskellImports    = Set.empty+         , stPersistent        = PersistentTCSt+           { stPersistentOptions = defaultOptions+	   , stDecodedModules    = Map.empty+           } 	 }  stBuiltinThings :: TCState -> BuiltinThings PrimFun@@ -141,6 +162,16 @@ 	where 	    i = fInteger s +newtype ProblemId = ProblemId Nat+  deriving (Typeable, Data, Eq, Ord, Enum, Real, Integral, Num)++instance Show ProblemId where+  show (ProblemId n) = show n++instance HasFresh ProblemId FreshThings where+  nextFresh s = (i, s { fProblem = succ i })+    where i = fProblem s+ instance HasFresh i FreshThings => HasFresh i TCState where     nextFresh s = ((,) $! i) $! s { stFreshThings = f } 	where@@ -204,8 +235,8 @@ instance HasRange a => HasRange (Closure a) where     getRange = getRange . clValue -buildClosure :: MonadTCM tcm => a -> tcm (Closure a)-buildClosure x = liftTCM $ do+buildClosure :: a -> TCM (Closure a)+buildClosure x = do     env   <- ask     sig   <- gets stSignature     scope <- gets stScope@@ -215,56 +246,52 @@ -- ** Constraints --------------------------------------------------------------------------- -type ConstraintClosure = Closure Constraint+type Constraints = [ProblemConstraint] -data Constraint = ValueCmp Comparison Type Term Term-                | ArgsCmp [Polarity] Type Args Args-		| TypeCmp Comparison Type Type-                | TelCmp Comparison Telescope Telescope-		| SortCmp Comparison Sort Sort-                | LevelCmp Comparison Term Term-		| UnBlock MetaId-		| Guarded Constraint Constraints-                | IsEmpty Type+data ProblemConstraint = PConstr+  { constraintProblem :: ProblemId+  , theConstraint     :: Closure Constraint+  }   deriving (Typeable, Show) +data Constraint+  = ValueCmp Comparison Type Term Term+  | ElimCmp [Polarity] Type Term [Elim] [Elim]+  | TypeCmp Comparison Type Type+  | TelCmp Type Type Comparison Telescope Telescope -- ^ the two types are for the error message only+  | SortCmp Comparison Sort Sort+  | LevelCmp Comparison Level Level+  | UnBlock MetaId+  | Guarded Constraint ProblemId+  | IsEmpty Type+  | FindInScope MetaId+  deriving (Typeable, Show)+ data Comparison = CmpEq | CmpLeq   deriving (Eq, Typeable, Show) -type Constraints = [ConstraintClosure]- --------------------------------------------------------------------------- -- * Open things ---------------------------------------------------------------------------  -- | A thing tagged with the context it came from. data Open a = OpenThing [CtxId] a-    deriving (Typeable, Data, Show)+    deriving (Typeable, Data, Show, Functor)  --------------------------------------------------------------------------- -- * Judgements+--+-- Used exclusively for typing of meta variables. ---------------------------------------------------------------------------  data Judgement t a-	= HasType a t-	| IsSort  a-    deriving (Typeable, Data)+	= HasType { jMetaId :: a, jMetaType :: t }+	| IsSort  { jMetaId :: a, jMetaType :: t } -- Andreas, 2011-04-26: type needed for higher-order sort metas+    deriving (Typeable, Data, Functor, Foldable, Traversable)  instance (Show t, Show a) => Show (Judgement t a) where     show (HasType a t) = show a ++ " : " ++ show t-    show (IsSort  a)   = show a ++ " sort"--instance Functor (Judgement t) where-    fmap f (HasType x t) = HasType (f x) t-    fmap f (IsSort  x)	 = IsSort (f x)--instance Foldable (Judgement t) where-    foldr f z (HasType x _) = f x z-    foldr f z (IsSort  x)   = f x z--instance Traversable (Judgement t) where-    traverse f (HasType x t) = flip HasType t <$> f x-    traverse f (IsSort  x)   = IsSort <$> f x+    show (IsSort  a t) = show a ++ " :sort " ++ show t  --------------------------------------------------------------------------- -- ** Meta variables@@ -279,15 +306,41 @@                   --   ones it does not depend on 		, mvJudgement	  :: Judgement Type MetaId 		, mvInstantiation :: MetaInstantiation-		, mvListeners	  :: Set MetaId	  -- ^ metavariables interested in what happens to this guy+		, mvListeners	  :: Set Listener -- ^ meta variables scheduled for eta-expansion but blocked by this one+                , mvFrozen        :: Frozen -- ^ are we past the point where we can instantiate this meta variable? 		}     deriving (Typeable) +data Listener = EtaExpand MetaId+              | CheckConstraint Nat ProblemConstraint+  deriving (Typeable)++instance Eq Listener where+  EtaExpand       x   == EtaExpand       y   = x == y+  CheckConstraint x _ == CheckConstraint y _ = x == y+  _ == _ = False++instance Ord Listener where+  EtaExpand       x   `compare` EtaExpand       y   = x `compare` y+  CheckConstraint x _ `compare` CheckConstraint y _ = x `compare` y+  EtaExpand{} `compare` CheckConstraint{} = LT+  CheckConstraint{} `compare` EtaExpand{} = Prelude.GT++-- | Frozen meta variable cannot be instantiated by unification.+--   This serves to prevent the completion of a definition by its use+--   outside of the current block.+--   (See issues 118, 288, 399).+data Frozen+  = Frozen        -- ^ Do not instantiate.+  | Instantiable+    deriving (Eq, Show)+ data MetaInstantiation-	= InstV Term-	| InstS Term  -- should be Lam .. Sort s-	| Open-	| BlockedConst Term+	= InstV Term         -- ^ solved by term+	| InstS Term         -- ^ solved by @Lam .. Sort s@+	| Open               -- ^ unsolved+	| OpenIFS            -- ^ open, to be instantiated as "implicit from scope"+	| BlockedConst Term  -- ^ solution blocked by unsolved constraints         | PostponedTypeCheckingProblem (Closure (A.Expr, Type, TCM Bool))     deriving (Typeable) @@ -295,6 +348,7 @@   show (InstV t) = "InstV (" ++ show t ++ ")"   show (InstS s) = "InstS (" ++ show s ++ ")"   show Open      = "Open"+  show OpenIFS   = "OpenIFS"   show (BlockedConst t) = "BlockedConst (" ++ show t ++ ")"   show (PostponedTypeCheckingProblem{}) = "PostponedTypeCheckingProblem (...)" @@ -310,8 +364,8 @@     getRange m = getRange $ getMetaInfo m  instance SetRange MetaVariable where-  setRange r (MetaVar mi p perm j inst ls) =-    MetaVar (mi {clValue = r}) p perm j inst ls+  setRange r (MetaVar mi p perm j inst ls frozen) =+    MetaVar (mi {clValue = r}) p perm j inst ls frozen  normalMetaPriority :: MetaPriority normalMetaPriority = MetaPriority 0@@ -385,6 +439,9 @@   deriving (Typeable, Data, Show)  data DisplayTerm = DWithApp [DisplayTerm] Args+                 | DCon QName [Arg DisplayTerm]+                 | DDef QName [Arg DisplayTerm]+                 | DDot Term 		 | DTerm Term   deriving (Typeable, Data, Show) @@ -392,18 +449,20 @@ defaultDisplayForm c = []  data Definition = Defn-  { defRelevance :: Relevance -- ^ Some defs can be irrelevant (but not hidden).-  , defName      :: QName-  , defType      :: Type	      -- ^ Type of the lifted definition.-  , defDisplay   :: [Open DisplayForm]-  , defMutual    :: MutualId-  , theDef	 :: Defn+  { defRelevance   :: Relevance -- ^ Some defs can be irrelevant (but not hidden).+  , defName        :: QName+  , defType        :: Type	      -- ^ Type of the lifted definition.+  , defDisplay     :: [Open DisplayForm]+  , defMutual      :: MutualId+  , defCompiledRep :: CompiledRepresentation+  , theDef         :: Defn   }     deriving (Typeable, Data, Show)  type HaskellCode = String type HaskellType = String type EpicCode    = String+type JSCode      = JS.Exp  data HaskellRepresentation       = HsDefn HaskellType HaskellCode@@ -413,17 +472,24 @@ data Polarity = Covariant | Contravariant | Invariant   deriving (Typeable, Data, Show, Eq) +data CompiledRepresentation = CompiledRep+  { compiledHaskell :: Maybe HaskellRepresentation+  , compiledEpic    :: Maybe EpicCode+  , compiledJS      :: Maybe JSCode+  }+  deriving (Typeable, Data, Show)++noCompiledRep :: CompiledRepresentation+noCompiledRep = CompiledRep Nothing Nothing Nothing+ -- | 'Positive' means strictly positive and 'Negative' means not strictly -- positive. data Occurrence = Positive | Negative | Unused   deriving (Typeable, Data, Show, Eq, Ord)  data Defn = Axiom-            { axHsDef   :: Maybe HaskellRepresentation-            , axEpDef   :: Maybe EpicCode-            } 	  | Function-            { funClauses        :: [Clauses]+            { funClauses        :: [Clause]             , funCompiled       :: CompiledClauses             , funInv            :: FunctionInverse             , funPolarity       :: [Polarity]@@ -431,12 +497,15 @@             , funAbstr          :: IsAbstract             , funDelayed        :: Delayed               -- ^ Are the clauses of this definition delayed?-            , funProjection     :: Maybe Int+            , funProjection     :: Maybe (QName, Int)               -- ^ Is it a record projection?-              --   If yes, then return the index of the record argument.-              --   Start counting with 1, because 0 means that it is already-              --   applied to the record. (Can happen in module instantiation.)-              --   This information is used in the termination checker.+              --   If yes, then return the name of the record type and index of+              --   the record argument.  Start counting with 1, because 0 means that+              --   it is already applied to the record. (Can happen in module+              --   instantiation.) This information is used in the termination+              --   checker.+            , funStatic         :: Bool+              -- ^ Should calls to this function be normalised at compile-time?             } 	  | Datatype             { dataPars           :: Nat           -- nof parameters@@ -447,7 +516,6 @@             , dataSort           :: Sort             , dataPolarity       :: [Polarity]             , dataArgOccurrences :: [Occurrence]-            , dataHsType         :: Maybe HaskellType             , dataAbstr          :: IsAbstract             } 	  | Record@@ -457,7 +525,7 @@             , recNamedCon       :: Bool             , recConType        :: Type                 -- ^ The record constructor's type.             , recFields         :: [Arg A.QName]-            , recTel            :: Telescope+            , recTel            :: Telescope            -- ^ The record field telescope             , recPolarity       :: [Polarity]             , recArgOccurrences :: [Occurrence]             , recEtaEquality    :: Bool@@ -467,20 +535,18 @@             { conPars   :: Nat         -- nof parameters 	    , conSrcCon :: QName       -- original constructor (this might be in a module instance) 	    , conData   :: QName       -- name of datatype or record type-            , conHsCode :: Maybe (HaskellType, HaskellCode) -- used by the compiler 	    , conAbstr  :: IsAbstract             , conInd    :: Induction   -- ^ Inductive or coinductive?             }-            -- ^ Note that, currently, the sharp constructor is-            --   represented as a definition ('Def'), but if you look-            --   up the name you will get a @Constructor@. 	  | Primitive             { primAbstr :: IsAbstract             , primName  :: String-            , primClauses :: Maybe [Clauses]+            , primClauses :: Maybe [Clause]               -- ^ 'Nothing' for primitive functions, @'Just'               -- something@ for builtin functions.             , primCompiled :: Maybe CompiledClauses+              -- ^ 'Nothing' for primitive functions, @'Just'+              -- something@ for builtin functions.             }             -- ^ Primitive or builtin functions.     deriving (Typeable, Data, Show)@@ -493,37 +559,39 @@   deriving (Typeable, Data)  data Reduced no yes = NoReduction no | YesReduction yes-    deriving (Typeable)+    deriving (Typeable, Functor)  data IsReduced = NotReduced | Reduced (Blocked ()) data MaybeReduced a = MaybeRed   { isReduced     :: IsReduced   , ignoreReduced :: a   }--instance Functor MaybeReduced where-  fmap f (MaybeRed r x) = MaybeRed r (f x)+  deriving (Functor)  type MaybeReducedArgs = [MaybeReduced (Arg Term)]  notReduced :: a -> MaybeReduced a notReduced x = MaybeRed NotReduced x -reduced :: Blocked a -> MaybeReduced a-reduced b = MaybeRed (Reduced $ fmap (const ()) b) (ignoreBlocking b)+reduced :: Blocked (Arg Term) -> MaybeReduced (Arg Term)+reduced b = case b of+  NotBlocked (Arg _ _ (MetaV x _)) -> MaybeRed (Reduced $ Blocked x ()) v+  _                                -> MaybeRed (Reduced $ () <$ b)      v+  where+    v = ignoreBlocking b  data PrimFun = PrimFun 	{ primFunName		:: QName 	, primFunArity		:: Arity-	, primFunImplementation :: MonadTCM tcm => [Arg Term] -> tcm (Reduced MaybeReducedArgs Term)+	, primFunImplementation :: [Arg Term] -> TCM (Reduced MaybeReducedArgs Term) 	}     deriving (Typeable) -defClauses :: Definition -> [Clauses]+defClauses :: Definition -> [Clause] defClauses Defn{theDef = Function{funClauses = cs}}        = cs defClauses Defn{theDef = Primitive{primClauses = Just cs}} = cs-defClauses Defn{theDef = Datatype{dataClause = Just c}}    = [Clauses Nothing c]-defClauses Defn{theDef = Record{recClause = Just c}}       = [Clauses Nothing c]+defClauses Defn{theDef = Datatype{dataClause = Just c}}    = [c]+defClauses Defn{theDef = Record{recClause = Just c}}       = [c] defClauses _                                               = []  defCompiled :: Definition -> Maybe CompiledClauses@@ -531,6 +599,12 @@ defCompiled Defn{theDef = Primitive{primCompiled = mcc}} = mcc defCompiled _ = Nothing +defJSDef :: Definition -> Maybe JSCode+defJSDef = compiledJS . defCompiledRep++defEpicDef :: Definition -> Maybe EpicCode+defEpicDef = compiledEpic . defCompiledRep+ -- | Used to specify whether something should be delayed. data Delayed = Delayed | NotDelayed   deriving (Typeable, Data, Show, Eq)@@ -542,14 +616,13 @@  defAbstract :: Definition -> IsAbstract defAbstract d = case theDef d of-    Axiom{}                   -> AbstractDef+    Axiom{}                   -> ConcreteDef     Function{funAbstr = a}    -> a     Datatype{dataAbstr = a}   -> a     Record{recAbstr = a}      -> a     Constructor{conAbstr = a} -> a     Primitive{primAbstr = a}  -> a - --------------------------------------------------------------------------- -- ** Injectivity ---------------------------------------------------------------------------@@ -574,7 +647,7 @@ -- ** Statistics --------------------------------------------------------------------------- -type Statistics = Map String Int+type Statistics = Map String Integer  --------------------------------------------------------------------------- -- ** Trace@@ -591,18 +664,19 @@ 	  | IsType_ A.Expr (Maybe Type) 	  | InferVar Name (Maybe (Term, Type)) 	  | InferDef Range QName (Maybe (Term, Type))-	  | CheckArguments Range [NamedArg A.Expr] Type Type (Maybe (Args, Type, Constraints))+	  | CheckArguments Range [NamedArg A.Expr] Type Type (Maybe (Args, Type)) 	  | CheckDataDef Range Name [A.LamBinding] [A.Constructor] (Maybe ()) 	  | CheckRecDef Range Name [A.LamBinding] [A.Constructor] (Maybe ()) 	  | CheckConstructor QName Telescope Sort A.Constructor (Maybe ()) 	  | CheckFunDef Range Name [A.Clause] (Maybe ()) 	  | CheckPragma Range A.Pragma (Maybe ()) 	  | CheckPrimitive Range Name A.Expr (Maybe ())-          | CheckSectionApplication Range ModuleName A.Telescope ModuleName [NamedArg A.Expr] (Maybe ())+          | CheckIsEmpty Type (Maybe ())+          | CheckWithFunctionType A.Expr (Maybe ())+          | CheckSectionApplication Range ModuleName A.ModuleApplication (Maybe ()) 	  | ScopeCheckExpr C.Expr (Maybe A.Expr) 	  | ScopeCheckDeclaration D.NiceDeclaration (Maybe [A.Declaration]) 	  | ScopeCheckLHS C.Name C.Pattern (Maybe A.LHS)-	  | ScopeCheckDefinition D.NiceDefinition (Maybe A.Definition) 	  | forall a. TermFunDef Range Name [A.Clause] (Maybe a) 	  | forall a. SetRange Range (Maybe a)	-- ^ used by 'setCurrentRange'             -- actually, 'a' is Agda.Termination.TermCheck.CallGraph@@ -633,38 +707,37 @@     getRange (CheckFunDef i _ _ _)                 = getRange i     getRange (CheckPragma r _ _)                   = r     getRange (CheckPrimitive i _ _ _)              = getRange i+    getRange CheckWithFunctionType{}               = noRange     getRange (ScopeCheckExpr e _)                  = getRange e     getRange (ScopeCheckDeclaration d _)           = getRange d     getRange (ScopeCheckLHS _ p _)                 = getRange p-    getRange (ScopeCheckDefinition d _)            = getRange d     getRange (CheckDotPattern e _ _)               = getRange e     getRange (CheckPatternShadowing c _)           = getRange c     getRange (TermFunDef i _ _ _)                  = getRange i     getRange (SetRange r _)                        = r-    getRange (CheckSectionApplication r _ _ _ _ _) = r+    getRange (CheckSectionApplication r _ _ _)     = r+    getRange (CheckIsEmpty _ _)                    = noRange  --------------------------------------------------------------------------- -- ** Builtin things --------------------------------------------------------------------------- +data BuiltinDescriptor = BuiltinData (TCM Type) [String]+                       | BuiltinDataCons (TCM Type)+                       | BuiltinPrim String (Term -> TCM ())+                       | BuiltinPostulate (TCM Type)+                       | BuiltinUnknown (Maybe (TCM Type)) (Term -> TCM ())++data BuiltinInfo =+   BuiltinInfo { builtinName :: String+               , builtinDesc :: BuiltinDescriptor }+ type BuiltinThings pf = Map String (Builtin pf)  data Builtin pf 	= Builtin Term 	| Prim pf-    deriving (Typeable, Data, Show)--instance Functor Builtin where-    fmap f (Builtin t) = Builtin t-    fmap f (Prim x)    = Prim $ f x--instance Foldable Builtin where-    foldr f z (Builtin t) = z-    foldr f z (Prim x)    = f x z--instance Traversable Builtin where-    traverse f (Builtin t) = pure $ Builtin t-    traverse f (Prim x)    = Prim <$> f x+    deriving (Typeable, Data, Show, Functor, Foldable, Traversable)  --------------------------------------------------------------------------- -- * Type checking environment@@ -677,23 +750,21 @@           , envAnonymousModules    :: [(ModuleName, Nat)] -- ^ anonymous modules and their number of free variables 	  , envImportPath          :: [C.TopLevelModuleName] -- ^ to detect import cycles 	  , envMutualBlock         :: Maybe MutualId -- ^ the current (if any) mutual block+          , envSolvingConstraints  :: Bool+                -- ^ Are we currently in the process of solving active constraints?+          , envActiveProblems      :: [ProblemId] 	  , envAbstractMode        :: AbstractMode 		-- ^ When checking the typesignature of a public definition 		--   or the body of a non-abstract definition this is true. 		--   To prevent information about abstract things leaking 		--   outside the module.-          , envIrrelevant          :: Bool-                -- ^ Are we checking an irrelevant argument?+          , envTopLevel            :: Bool+                -- ^ Are we at the top level when checking a declaration?+                --   In this case, we will freeze metas afterwards.+          , envRelevance           :: Relevance+                -- ^ Are we checking an irrelevant argument? (=@Irrelevant@)                 -- Then top-level irrelevant declarations are enabled.-          , envReplace             :: Bool-                -- ^ Coinductive constructor applications @c args@ get-                -- replaced by a function application @f tel@, where-                -- tel corresponds to the current telescope and @f@ is-                -- defined as @f tel = c args@. The initial occurrence-                -- of @c@ in the body of @f@ should not be replaced by-                -- yet another function application, though. To avoid-                -- that this happens the @envReplace@ flag is set to-                -- 'False' when @f@ is checked.+                -- Other value: @Relevant@, then only relevant decls. are avail.           , envDisplayFormsEnabled :: Bool                 -- ^ Sometimes we want to disable display forms.           , envReifyInteractionPoints :: Bool@@ -716,9 +787,11 @@                 , envAnonymousModules    = [] 		, envImportPath          = [] 		, envMutualBlock         = Nothing+                , envSolvingConstraints  = False+                , envActiveProblems      = [0] 		, envAbstractMode        = AbstractMode-                , envIrrelevant          = False-                , envReplace             = True+                , envTopLevel            = True+                , envRelevance           = Relevant                 , envDisplayFormsEnabled = True                 , envReifyInteractionPoints = True                 , envEtaContractImplicit    = True@@ -767,18 +840,40 @@                      , occClause   :: Int                      , occPosition :: OccPos                      }+  deriving (Show)  data OccPos = NonPositively | ArgumentTo Nat QName+  deriving (Show) +-- | Information about a call.++data CallInfo = CallInfo+  { callInfoRange :: Range+    -- ^ Range of the head identifier.+  , callInfoCall :: String+    -- ^ Formatted representation of the call.+    --+    -- ('Doc' would perhaps be better here, but 'Doc' doesn't come+    -- with an 'Ord' instance.)+  } deriving (Eq, Ord, Typeable, Show)++-- | Information about a mutual block which did not pass the+-- termination checker.++data TerminationError = TerminationError+  { termErrFunctions :: [QName]+    -- ^ The functions which failed to check. (May not include+    -- automatically generated functions.)+  , termErrCalls :: [CallInfo]+    -- ^ The problematic call sites.+  } deriving (Typeable, Show)+ data TypeError 	= InternalError String 	| NotImplemented String 	| NotSupported String         | CompilationError String-	| TerminationCheckFailed [([QName], [R.Range])]-          -- ^ Parameterised on functions which failed to termination-          --   check (grouped if they are mutual), along with ranges-          --   for problematic call sites.+	| TerminationCheckFailed [TerminationError] 	| PropMustBeSingleton 	| DataMustEndInSort Term 	| ShouldEndInApplicationOfTheDatatype Type@@ -804,6 +899,8 @@ 	    -- ^ Expected a non-hidden function and found a hidden lambda. 	| WrongHidingInApplication Type 	    -- ^ A function is applied to a hidden argument where a non-hidden was expected.+	| WrongIrrelevanceInLambda Type+	    -- ^ Expected a relevant function and found an irrelevant lambda. 	| NotInductive Term           -- ^ The term does not correspond to an inductive data type. 	| UninstantiatedDotPattern A.Expr@@ -829,6 +926,9 @@ 	| UnequalHiding Type Type 	    -- ^ The two function types have different hiding. 	| UnequalSorts Sort Sort+        | HeterogeneousEquality Term Type Term Type+            -- ^ We ended up with an equality constraint where the terms+            --   have different types.  This is not supported. 	| NotLeqSort Sort Sort 	| MetaCannotDependOn MetaId [Nat] Nat 	    -- ^ The arguments are the meta variable, the parameters it can@@ -856,7 +956,8 @@ 	| IncompletePatternMatching Term Args -- can only happen if coverage checking is switched off         | CoverageFailure QName [[Arg Pattern]]         | UnreachableClauses QName [[Arg Pattern]]-        | CoverageCantSplitOn QName+        | CoverageCantSplitOn QName Telescope Args Args+        | CoverageCantSplitIrrelevantType Type         | CoverageCantSplitType Type     -- Positivity errors 	| NotStrictlyPositive QName [Occ]@@ -896,16 +997,23 @@ 	| NotAnExpression C.Expr 	| NotAValidLetBinding D.NiceDeclaration 	| NothingAppliedToHiddenArg C.Expr+	| NothingAppliedToInstanceArg C.Expr     -- Operator errors 	| NoParseForApplication [C.Expr] 	| AmbiguousParseForApplication [C.Expr] [C.Expr] 	| NoParseForLHS C.Pattern 	| AmbiguousParseForLHS C.Pattern [C.Pattern]     -- Usage errors-          deriving (Typeable)+    -- Implicit From Scope errors+        | IFSNoCandidateInScope Type+    -- Safe flag errors+        | SafeFlagPostulate C.Name+        | SafeFlagPragma [String]+        | SafeFlagPrimTrustMe+          deriving (Typeable, Show) -instance Show TypeError where-  show _ = "<TypeError>" -- TODO: more info?+-- instance Show TypeError where+--   show _ = "<TypeError>" -- TODO: more info?  instance Error TypeError where     noMsg  = strMsg ""@@ -917,7 +1025,7 @@ 	    | Exception Range String             | IOException Range E.IOException 	    | PatternErr  TCState -- ^ for pattern violations-	    | AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations+	    {- AbortAssign TCState -- ^ used to abort assignment to meta when there are instantiations -- UNUSED -}   deriving (Typeable)  -- | Type-checking errors, potentially paired with relevant syntax@@ -943,14 +1051,14 @@     show (Exception r s) = show r ++ ": " ++ s     show (IOException r e) = show r ++ ": " ++ show e     show (PatternErr _)  = "Pattern violation (you shouldn't see this)"-    show (AbortAssign _) = "Abort assignment (you shouldn't see this)"+    {- show (AbortAssign _) = "Abort assignment (you shouldn't see this)" -- UNUSED -}  instance HasRange TCErr' where     getRange (TypeError _ cl)  = envRange $ clEnv cl     getRange (Exception r _)   = r     getRange (IOException r _) = r     getRange (PatternErr s)    = noRange-    getRange (AbortAssign s)   = noRange+    {- getRange (AbortAssign s)   = noRange -- UNUSED -}  instance HasRange TCErr where     getRange = getRange . errError@@ -961,15 +1069,15 @@ -- * Type checking monad transformer --------------------------------------------------------------------------- -newtype TCMT m a = TCM { unTCM :: TCState -> TCEnv -> m (a, TCState) }+newtype TCMT m a = TCM { unTCM :: IORef TCState -> TCEnv -> m a }  instance MonadIO m => MonadReader TCEnv (TCMT m) where-  ask = TCM $ \s e -> return (e, s)+  ask = TCM $ \s e -> return e   local f (TCM m) = TCM $ \s e -> m s (f e)  instance MonadIO m => MonadState TCState (TCMT m) where-  get   = TCM $ \s _ -> return (s, s)-  put s = TCM $ \_ _ -> return ((), s)+  get   = TCM $ \s _ -> liftIO (readIORef s)+  put s = TCM $ \r _ -> liftIO (writeIORef r s)  type TCM = TCMT IO @@ -981,20 +1089,32 @@  instance MonadError TCErr (TCMT IO) where   throwError = liftIO . throwIO-  catchError m h = TCM $ \s e ->-    unTCM m s e `E.catch` \err -> unTCM (h err) s e+  catchError m h = TCM $ \r e -> do+    oldState <- liftIO (readIORef r)+    unTCM m r e `E.catch` \err -> do+      -- Reset the state, but do not forget changes to the persistent+      -- component.+      liftIO $ do+        newState <- readIORef r+        writeIORef r $ oldState { stPersistent = stPersistent newState }+      unTCM (h err) r e +-- | Preserve the state of the failing computation. catchError_ :: TCM a -> (TCErr -> TCM a) -> TCM a-catchError_ m h = TCM $ \s e ->-  unTCM m s e-  `E.catch` \err -> unTCM (h err) (error "catchError_") e+catchError_ m h = TCM $ \r e ->+  unTCM m r e+  `E.catch` \err -> unTCM (h err) r e +{-# SPECIALIZE INLINE mapTCMT :: (forall a. IO a -> IO a) -> TCM a -> TCM a #-} mapTCMT :: (forall a. m a -> n a) -> TCMT m a -> TCMT n a mapTCMT f (TCM m) = TCM $ \s e -> f (m s e) -pureTCM :: Monad m => (TCState -> TCEnv -> a) -> TCMT m a-pureTCM f = TCM $ \s e -> return (f s e, s)+pureTCM :: MonadIO m => (TCState -> TCEnv -> a) -> TCMT m a+pureTCM f = TCM $ \r e -> do+  s <- liftIO $ readIORef r+  return (f s e) +{-# RULES "liftTCM/id" liftTCM = id #-} instance MonadIO m => MonadTCM (TCMT m) where     liftTCM = mapTCMT liftIO @@ -1002,15 +1122,16 @@   liftTCM = lift . liftTCM  instance MonadTrans TCMT where-    lift m = TCM $ \s _ -> m >>= \x -> return (x, s)+    lift m = TCM $ \_ _ -> m  -- We want a special monad implementation of fail. {-# SPECIALIZE instance Monad TCM #-} instance MonadIO m => Monad (TCMT m) where-    return x = TCM $ \s _ -> return (x, s)-    m >>= k = TCM $ \s e -> do-                (x, s') <- unTCM m s e-                unTCM (k x) s' e+    return x = TCM $ \_ _ -> return x+    TCM m >>= k = TCM $ \r e -> do+        x <- m r e+        let TCM m' = k x in m' r e+    TCM m1 >> TCM m2 = TCM $ \r e -> m1 r e >> m2 r e     fail    = internalError  instance MonadIO m => Functor (TCMT m) where@@ -1025,7 +1146,7 @@               do let r = envRange e                  liftIO $ wrap r $ do                  x <- m-                 x `seq` return (x, s)+                 x `seq` return x     where       wrap r m = failOnException handleException                $ E.catch m (handleIOException r)@@ -1033,8 +1154,8 @@       handleIOException r e = throwIO $ TCErr Nothing $ IOException r e       handleException   r s = throwIO $ TCErr Nothing $ Exception r s -patternViolation :: MonadTCM tcm => tcm a-patternViolation = liftTCM $ do+patternViolation :: TCM a+patternViolation = do     s <- get     throwError $ TCErr Nothing $ PatternErr s @@ -1051,5 +1172,13 @@ runTCM :: TCMT IO a -> IO (Either TCErr a) runTCM m = (Right <$> runTCM' m) `E.catch` (return . Left) -runTCM' :: Monad m => TCMT m a -> m a-runTCM' m = liftM fst (unTCM m initState initEnv)+runTCM' :: MonadIO m => TCMT m a -> m a+runTCM' m = do+  r <- liftIO $ newIORef initState+  unTCM m r initEnv+++++-- | Base name for extended lambda patterns+extendlambdaname = ".extendedlambda"
src/full/Agda/TypeChecking/Monad/Builtin.hs view
@@ -1,6 +1,7 @@  module Agda.TypeChecking.Monad.Builtin where +import Data.Functor import Control.Monad.State import qualified Data.Map as Map @@ -8,16 +9,17 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad.Base -getBuiltinThings :: MonadTCM tcm => tcm (BuiltinThings PrimFun)-getBuiltinThings = gets stBuiltinThings+getBuiltinThing :: String -> TCM (Maybe (Builtin PrimFun))+getBuiltinThing b = liftM2 mplus (Map.lookup b <$> gets stLocalBuiltins)+                    (Map.lookup b <$> gets stImportedBuiltins) -setBuiltinThings :: MonadTCM tcm => BuiltinThings PrimFun -> tcm ()+setBuiltinThings :: BuiltinThings PrimFun -> TCM () setBuiltinThings b = modify $ \s -> s { stLocalBuiltins = b } -bindBuiltinName :: MonadTCM tcm => String -> Term -> tcm ()+bindBuiltinName :: String -> Term -> TCM () bindBuiltinName b x = do-	builtin <- getBuiltinThings-	case Map.lookup b builtin of+	builtin <- getBuiltinThing b+	case builtin of 	    Just (Builtin y) -> typeError $ DuplicateBuiltinBinding b y x 	    Just (Prim _)    -> typeError $ NoSuchBuiltinName b 	    Nothing	     -> modify $ \st ->@@ -25,30 +27,30 @@                     Map.insert b (Builtin x) $ stLocalBuiltins st                  } -bindPrimitive :: MonadTCM tcm => String -> PrimFun -> tcm ()+bindPrimitive :: String -> PrimFun -> TCM () bindPrimitive b pf = do   builtin <- gets stLocalBuiltins   setBuiltinThings $ Map.insert b (Prim pf) builtin  -getBuiltin :: MonadTCM tcm => String -> tcm Term+getBuiltin :: String -> TCM Term getBuiltin x = do     mt <- getBuiltin' x     case mt of         Nothing -> typeError $ NoBindingForBuiltin x         Just t  -> return t -getBuiltin' :: MonadTCM tcm => String -> tcm (Maybe Term)+getBuiltin' :: String -> TCM (Maybe Term) getBuiltin' x = do-    builtin <- getBuiltinThings-    case Map.lookup x builtin of+    builtin <- getBuiltinThing x+    case builtin of 	Just (Builtin t) -> return $ Just (killRange t) 	_		 -> return Nothing -getPrimitive :: MonadTCM tcm => String -> tcm PrimFun+getPrimitive :: String -> TCM PrimFun getPrimitive x = do-    builtin <- getBuiltinThings-    case Map.lookup x builtin of+    builtin <- getBuiltinThing x+    case builtin of 	Just (Prim pf) -> return pf 	_	       -> typeError $ NoSuchPrimitiveFunction x @@ -66,8 +68,15 @@     -- builtins for reflection:     primQName, primArg, primArgArg, primAgdaTerm, primAgdaTermVar,     primAgdaTermLam, primAgdaTermDef, primAgdaTermCon, primAgdaTermPi,-    primAgdaTermSort, primAgdaTermUnsupported-    :: MonadTCM tcm => tcm Term+    primAgdaTermSort, primAgdaTermUnsupported,+    primAgdaType, primAgdaTypeEl,+    primHiding, primHidden, primInstance, primVisible,+    primRelvance, primRelevant, primIrrelevant,+    primAgdaSort, primAgdaSortSet, primAgdaSortLit, primAgdaSortUnsupported,+    primAgdaDefinition, primAgdaDefinitionFunDef, primAgdaDefinitionDataDef, primAgdaDefinitionRecordDef,+    primAgdaDefinitionPostulate, primAgdaDefinitionPrimitive, primAgdaDefinitionDataConstructor,+    primAgdaFunDef, primAgdaDataDef, primAgdaRecordDef+    :: TCM Term primInteger      = getBuiltin builtinInteger primFloat        = getBuiltin builtinFloat primChar         = getBuiltin builtinChar@@ -104,6 +113,19 @@ primQName        = getBuiltin builtinQName primArg          = getBuiltin builtinArg primArgArg       = getBuiltin builtinArgArg+primAgdaSort     = getBuiltin builtinAgdaSort+primAgdaType     = getBuiltin builtinAgdaType+primAgdaTypeEl   = getBuiltin builtinAgdaTypeEl+primHiding       = getBuiltin builtinHiding+primHidden       = getBuiltin builtinHidden+primInstance     = getBuiltin builtinInstance+primVisible      = getBuiltin builtinVisible+primRelvance     = getBuiltin builtinRelevance+primRelevant     = getBuiltin builtinRelevant+primIrrelevant   = getBuiltin builtinIrrelevant+primAgdaSortSet  = getBuiltin builtinAgdaSortSet+primAgdaSortLit  = getBuiltin builtinAgdaSortLit+primAgdaSortUnsupported = getBuiltin builtinAgdaSortUnsupported primAgdaTerm         = getBuiltin builtinAgdaTerm primAgdaTermVar      = getBuiltin builtinAgdaTermVar primAgdaTermLam      = getBuiltin builtinAgdaTermLam@@ -112,7 +134,16 @@ primAgdaTermPi       = getBuiltin builtinAgdaTermPi primAgdaTermSort     = getBuiltin builtinAgdaTermSort primAgdaTermUnsupported     = getBuiltin builtinAgdaTermUnsupported-+primAgdaFunDef                    = getBuiltin builtinAgdaFunDef+primAgdaDataDef                   = getBuiltin builtinAgdaDataDef+primAgdaRecordDef                 = getBuiltin builtinAgdaRecordDef+primAgdaDefinitionFunDef          = getBuiltin builtinAgdaDefinitionFunDef+primAgdaDefinitionDataDef         = getBuiltin builtinAgdaDefinitionDataDef+primAgdaDefinitionRecordDef       = getBuiltin builtinAgdaDefinitionRecordDef+primAgdaDefinitionDataConstructor = getBuiltin builtinAgdaDefinitionDataConstructor+primAgdaDefinitionPostulate       = getBuiltin builtinAgdaDefinitionPostulate+primAgdaDefinitionPrimitive       = getBuiltin builtinAgdaDefinitionPrimitive+primAgdaDefinition                = getBuiltin builtinAgdaDefinition builtinNat          = "NATURAL" builtinSuc          = "SUC" builtinZero         = "ZERO"@@ -147,6 +178,19 @@ builtinLevelZero    = "LEVELZERO" builtinLevelSuc     = "LEVELSUC" builtinQName        = "QNAME"+builtinAgdaSort     = "AGDASORT"+builtinAgdaSortSet  = "AGDASORTSET"+builtinAgdaSortLit  = "AGDASORTLIT"+builtinAgdaSortUnsupported = "AGDASORTUNSUPPORTED"+builtinAgdaType     = "AGDATYPE"+builtinAgdaTypeEl   = "AGDATYPEEL"+builtinHiding       = "HIDING"+builtinHidden       = "HIDDEN"+builtinInstance     = "INSTANCE"+builtinVisible      = "VISIBLE"+builtinRelevance    = "RELEVANCE"+builtinRelevant     = "RELEVANT"+builtinIrrelevant   = "IRRELEVANT" builtinArg          = "ARG" builtinArgArg       = "ARGARG" builtinAgdaTerm         = "AGDATERM"@@ -157,16 +201,13 @@ builtinAgdaTermPi       = "AGDATERMPI" builtinAgdaTermSort     = "AGDATERMSORT" builtinAgdaTermUnsupported = "AGDATERMUNSUPPORTED"--builtinTypes :: [String]-builtinTypes =-    [ builtinInteger-    , builtinFloat-    , builtinChar-    , builtinString-    , builtinBool-    , builtinNat-    , builtinLevel-    , builtinQName-    , builtinAgdaTerm-    ]+builtinAgdaFunDef                    = "AGDAFUNDEF"+builtinAgdaDataDef                   = "AGDADATADEF"+builtinAgdaRecordDef                 = "AGDARECORDDEF"+builtinAgdaDefinitionFunDef          = "AGDADEFINITIONFUNDEF"+builtinAgdaDefinitionDataDef         = "AGDADEFINITIONDATADEF"+builtinAgdaDefinitionRecordDef       = "AGDADEFINITIONRECORDDEF"+builtinAgdaDefinitionDataConstructor = "AGDADEFINITIONDATACONSTRUCTOR"+builtinAgdaDefinitionPostulate       = "AGDADEFINITIONPOSTULATE"+builtinAgdaDefinitionPrimitive       = "AGDADEFINITIONPRIMITIVE"+builtinAgdaDefinition                = "AGDADEFINITION"
src/full/Agda/TypeChecking/Monad/Closure.hs view
@@ -7,7 +7,7 @@ import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Monad.Trace -enterClosure :: MonadTCM tcm => Closure a -> (a -> tcm b) -> tcm b+enterClosure :: Closure a -> (a -> TCM b) -> TCM b enterClosure (Closure sig env scope x) k =     withScope_ scope     $ withEnv env
src/full/Agda/TypeChecking/Monad/Constraints.hs view
@@ -1,41 +1,131 @@-+{-# LANGUAGE CPP #-} module Agda.TypeChecking.Monad.Constraints where +import Control.Arrow ((&&&))+import Control.Applicative import Control.Monad.State+import Control.Monad.Reader import Data.Map as Map+import Data.List as List  import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Signature import Agda.TypeChecking.Monad.Env import Agda.TypeChecking.Monad.State import Agda.TypeChecking.Monad.Closure+import Agda.TypeChecking.Monad.Options+import Agda.Utils.Monad+import Agda.Utils.Impossible --- | Get the constraints-getConstraints :: MonadTCM tcm => tcm Constraints-getConstraints = gets stConstraints+#include "../../undefined.h" -lookupConstraint :: MonadTCM tcm => Int -> tcm ConstraintClosure-lookupConstraint i =-    do	cs <- getConstraints-	unless (i < length cs) $ fail $ "no such constraint: " ++ show i-	return $ cs !! i+-- | Get the current problem+currentProblem :: TCM ProblemId+currentProblem = asks $ head' . envActiveProblems+  where+    head' []    = {- ' -} __IMPOSSIBLE__+    head' (x:_) = x --- | Take constraints (clear all constraints).-takeConstraints :: MonadTCM tcm => tcm Constraints-takeConstraints =-    do	cs <- getConstraints-	modify $ \s -> s { stConstraints = [] }-	return cs+-- | Steal all constraints belonging to the given problem and add them to the current problem.+stealConstraints :: ProblemId -> TCM ()+stealConstraints pid = do+  current <- currentProblem+  reportSLn "tc.constr.steal" 50 $ "problem " ++ show current ++ " is stealing problem " ++ show pid ++ "'s constraints!"+  let rename pc@(PConstr pid' c) | pid' == pid = PConstr current c+                                 | otherwise   = pc+  -- We should never steal from an active problem.+  whenM (elem pid <$> asks envActiveProblems) __IMPOSSIBLE__+  modify $ \s -> s { stAwakeConstraints    = List.map rename $ stAwakeConstraints s+                   , stSleepingConstraints = List.map rename $ stSleepingConstraints s } -withConstraint :: MonadTCM tcm => (Constraint -> tcm a) -> ConstraintClosure -> tcm a-withConstraint = flip enterClosure+solvingProblem :: ProblemId -> TCM a -> TCM a+solvingProblem pid m = verboseBracket "tc.constr.solve" 50 ("working on problem " ++ show pid) $ do+  x <- local (\e -> e { envActiveProblems = pid : envActiveProblems e }) m+  ifM (isProblemSolved pid) (do+      reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was solved!"+      wakeConstraints (blockedOn pid . clValue . theConstraint)+    ) (reportSLn "tc.constr.solve" 50 $ "problem " ++ show pid ++ " was not solved.")+  return x+  where+    blockedOn pid (Guarded _ pid') = pid == pid'+    blockedOn _ _ = False --- | Add new constraints-addConstraints :: MonadTCM tcm => Constraints -> tcm ()-addConstraints cs = modify $ \st -> st { stConstraints = cs ++ stConstraints st }+isProblemSolved :: ProblemId -> TCM Bool+isProblemSolved pid =+  (&&) <$> (notElem pid <$> asks envActiveProblems)+       <*> (all ((/= pid) . constraintProblem) <$> getAllConstraints) --- | Create a new constraint.-buildConstraint :: MonadTCM tcm => Constraint -> tcm Constraints-buildConstraint c = do-    cl <- buildClosure c-    return [cl]+getConstraintsForProblem :: ProblemId -> TCM Constraints+getConstraintsForProblem pid = List.filter ((== pid) . constraintProblem) <$> getAllConstraints++-- | Get the awake constraints+getAwakeConstraints :: TCM Constraints+getAwakeConstraints = gets stAwakeConstraints++wakeConstraints :: (ProblemConstraint-> Bool) -> TCM ()+wakeConstraints wake = do+  sleepers <- gets stSleepingConstraints+  let (wakeup, sleepin) = List.partition wake sleepers+  reportSLn "tc.constr.wake" 50 $ "waking up         " ++ show (List.map constraintProblem wakeup) ++ "\n" +++                                  "  still sleeping: " ++ show (List.map constraintProblem sleepin)+  modify $ \s ->+    s { stSleepingConstraints = sleepin+      , stAwakeConstraints    = stAwakeConstraints s ++ wakeup+      }++takeAwakeConstraint :: TCM (Maybe ProblemConstraint)+takeAwakeConstraint = do+  cs <- getAwakeConstraints+  case cs of+    []     -> return Nothing+    c : cs -> do+      modify $ \s -> s { stAwakeConstraints = cs }+      return (Just c)++getAllConstraints :: TCM Constraints+getAllConstraints = gets $ \s -> stAwakeConstraints s ++ stSleepingConstraints s++withConstraint :: (Constraint -> TCM a) -> ProblemConstraint -> TCM a+withConstraint f (PConstr pid c) = do+  -- We should preserve the problem stack and the isSolvingConstraint flag+  (pids, isSolving) <- asks $ envActiveProblems &&& envSolvingConstraints+  enterClosure c $ \c ->+    local (\e -> e { envActiveProblems = pids, envSolvingConstraints = isSolving }) $+    solvingProblem pid (f c)++buildProblemConstraint :: ProblemId -> Constraint -> TCM ProblemConstraint+buildProblemConstraint pid c = PConstr pid <$> buildClosure c++buildConstraint :: Constraint -> TCM ProblemConstraint+buildConstraint c = flip buildProblemConstraint c =<< currentProblem++-- | Add new a constraint+addConstraint' :: Constraint -> TCM ()+addConstraint' c = do+    pc <- build+    modify $ \s -> s { stSleepingConstraints = pc : stSleepingConstraints s }+  where+    build | isBlocking c = buildConstraint c+          | otherwise    = buildProblemConstraint 0 c+    isBlocking SortCmp{}     = False+    isBlocking LevelCmp{}    = False+    isBlocking ValueCmp{}    = True+    isBlocking ElimCmp{}     = True+    isBlocking TypeCmp{}     = True+    isBlocking TelCmp{}      = True+    isBlocking (Guarded c _) = isBlocking c+    isBlocking UnBlock{}     = True+    isBlocking FindInScope{} = False+    isBlocking IsEmpty{}     = True++-- | Add already awake constraints+addAwakeConstraints :: Constraints -> TCM ()+addAwakeConstraints cs = modify $ \s -> s { stAwakeConstraints = cs ++ stAwakeConstraints s }++-- | Start solving constraints+nowSolvingConstraints :: TCM a -> TCM a+nowSolvingConstraints = local $ \e -> e { envSolvingConstraints = True }++isSolvingConstraints :: TCM Bool+isSolvingConstraints = asks envSolvingConstraints+
src/full/Agda/TypeChecking/Monad/Context.hs view
@@ -21,13 +21,29 @@ #include "../../undefined.h" import Agda.Utils.Impossible +-- | Modify the 'ctxEntry' field of a 'ContextEntry'.+modifyContextEntry :: (Arg (Name, Type) -> Arg (Name, Type)) -> ContextEntry -> ContextEntry+modifyContextEntry f ce = ce { ctxEntry = f (ctxEntry ce) }++-- | Modify all 'ContextEntry's.+modifyContextEntries :: (Arg (Name, Type) -> Arg (Name, Type)) -> Context -> Context+modifyContextEntries f = map (modifyContextEntry f)++-- | Modify a 'Context' in a computation.+{-# SPECIALIZE modifyContext :: (Context -> Context) -> TCM a -> TCM a #-}+modifyContext :: MonadTCM tcm => (Context -> Context) -> tcm a -> tcm a+modifyContext f = local $ \ e -> e { envContext = f (envContext e) }++{-# SPECIALIZE mkContextEntry :: Arg (Name, Type) -> TCM ContextEntry #-} mkContextEntry :: MonadTCM tcm => Arg (Name, Type) -> tcm ContextEntry mkContextEntry x = do   i <- fresh   return $ Ctx i x --- | add a variable to the context+-- | @addCtx x arg cont@ add a variable to the context. --+--   Chooses an unused 'Name'.+{-# SPECIALIZE addCtx :: Name -> Arg Type -> TCM a -> TCM a #-} addCtx :: MonadTCM tcm => Name -> Arg Type -> tcm a -> tcm a addCtx x a ret = do   ctx <- map (nameConcrete . fst . unArg) <$> getContext@@ -38,93 +54,107 @@   where     notTaken xs x = isNoName (nameConcrete x) || nameConcrete x `notElem` xs +-- | N-ary variant of @addCtx@.+{-# SPECIALIZE addContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-}+addContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a+addContext ctx m =+  foldr (\arg -> addCtx (fst $ unArg arg) (fmap snd arg)) m ctx++-- | Turns the string into a name and adds it to the context.+{-# SPECIALIZE addCtxString :: String -> Arg Type -> TCM a -> TCM a #-}+addCtxString :: MonadTCM tcm => String -> Arg Type -> tcm a -> tcm a+addCtxString s a m = do+  x <- freshName_ s+  addCtx x a m+ -- | Change the context+{-# SPECIALIZE inContext :: [Arg (Name, Type)] -> TCM a -> TCM a #-} inContext :: MonadTCM tcm => [Arg (Name, Type)] -> tcm a -> tcm a inContext xs ret = do   ctx <- mapM mkContextEntry xs   flip local ret $ \e -> e { envContext = ctx }  -- | Go under an abstraction.-underAbstraction :: MonadTCM tcm => Arg Type -> Abs a -> (a -> tcm b) -> tcm b+{-# SPECIALIZE underAbstraction :: Raise a => Arg Type -> Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction :: (Raise a, MonadTCM tcm) => Arg Type -> Abs a -> (a -> tcm b) -> tcm b+underAbstraction _ (NoAbs _ v) k = k v underAbstraction t a k = do     xs <- map (nameConcrete . fst . unArg) <$> getContext     x <- freshName_ $ realName $ absName a     let y = head $ filter (notTaken xs) $ iterate nextName x     addCtx y t $ k $ absBody a   where-    notTaken xs x = notElem (nameConcrete x) xs+    notTaken xs x = isNoName (nameConcrete x) || notElem (nameConcrete x) xs     realName "_" = "y"     realName s   = s  -- | Go under an abstract without worrying about the type to add to the context.-underAbstraction_ :: MonadTCM tcm => Abs a -> (a -> tcm b) -> tcm b+{-# SPECIALIZE underAbstraction_ :: Raise a => Abs a -> (a -> TCM b) -> TCM b #-}+underAbstraction_ :: (Raise a, MonadTCM tcm) => Abs a -> (a -> tcm b) -> tcm b underAbstraction_ = underAbstraction (Arg NotHidden Relevant $ sort Prop)  -- | Add a telescope to the context.+{-# SPECIALIZE addCtxTel :: Telescope -> TCM a -> TCM a #-} addCtxTel :: MonadTCM tcm => Telescope -> tcm a -> tcm a addCtxTel EmptyTel	    ret = ret addCtxTel (ExtendTel t tel) ret = underAbstraction t tel $ \tel -> addCtxTel tel ret  -- | Get the current context.+{-# SPECIALIZE getContext :: TCM [Arg (Name, Type)] #-} getContext :: MonadTCM tcm => tcm [Arg (Name, Type)] getContext = asks $ map ctxEntry . envContext  -- | Generate [Var n - 1, .., Var 0] for all declarations in the context.+{-# SPECIALIZE getContextArgs :: TCM Args #-} getContextArgs :: MonadTCM tcm => tcm Args getContextArgs = do   ctx <- getContext   return $ reverse $ [ Arg h r $ Var i [] | (Arg h r _, i) <- zip ctx [0..] ] +{-# SPECIALIZE getContextTerms :: TCM [Term] #-} getContextTerms :: MonadTCM tcm => tcm [Term] getContextTerms = map unArg <$> getContextArgs  -- | Get the current context as a 'Telescope' with the specified 'Hiding'.+{-# SPECIALIZE getContextTelescope :: TCM Telescope #-} getContextTelescope :: MonadTCM tcm => tcm Telescope getContextTelescope = foldr extTel EmptyTel . reverse <$> getContext   where     extTel (Arg h r (x, t)) = ExtendTel (Arg h r t) . Abs (show x)  -- | add a bunch of variables with the same type to the context+{-# SPECIALIZE addCtxs :: [Name] -> Arg Type -> TCM a -> TCM a #-} addCtxs :: MonadTCM tcm => [Name] -> Arg Type -> tcm a -> tcm a addCtxs []     _ k = k addCtxs (x:xs) t k = addCtx x t $ addCtxs xs (raise 1 t) k  -- | Check if we are in a compatible context, i.e. an extension of the given context.+{-# SPECIALIZE getContextId :: TCM [CtxId] #-} getContextId :: MonadTCM tcm => tcm [CtxId] getContextId = asks $ map ctxId . envContext  -- | Add a let bound variable+{-# SPECIALIZE addLetBinding :: Relevance -> Name -> Term -> Type -> TCM a -> TCM a #-} addLetBinding :: MonadTCM tcm => Relevance -> Name -> Term -> Type -> tcm a -> tcm a addLetBinding rel x v t0 ret = do     let t = Arg NotHidden rel t0-    vt <- makeOpen (v, t)+    vt <- liftTCM $ makeOpen (v, t)     flip local ret $ \e -> e { envLetBindings = Map.insert x vt $ envLetBindings e } --- | Wake up irrelevant variables and make them relevant.  For instance,---   in an irrelevant function argument otherwise irrelevant variables---   may be used, so they are awoken before type checking the argument.-wakeIrrelevantVars :: MonadTCM tcm => tcm a -> tcm a-wakeIrrelevantVars = local $ \ e -> e-   { envContext = map wakeVar (envContext e) -- enable local  irr. defs-   , envIrrelevant = True                    -- enable global irr. defs-   }-  where wakeVar ce = ce { ctxEntry = makeRelevant (ctxEntry ce) }--applyRelevanceToContext :: MonadTCM tcm => Relevance -> tcm a -> tcm a-applyRelevanceToContext Irrelevant cont = wakeIrrelevantVars cont-applyRelevanceToContext _          cont = cont- -- | get type of bound variable (i.e. deBruijn index) --+{-# SPECIALIZE typeOfBV' :: Nat -> TCM (Arg Type) #-} typeOfBV' :: MonadTCM tcm => Nat -> tcm (Arg Type) typeOfBV' n =     do	ctx <- getContext 	Arg h r (_,t) <- ctx !!! n 	return $ Arg h r $ raise (n + 1) t +{-# SPECIALIZE typeOfBV :: Nat -> TCM Type #-} typeOfBV :: MonadTCM tcm => Nat -> tcm Type typeOfBV i = unArg <$> typeOfBV' i +{-# SPECIALIZE nameOfBV :: Nat -> TCM Name #-} nameOfBV :: MonadTCM tcm => Nat -> tcm Name nameOfBV n =     do	ctx <- getContext@@ -143,6 +173,7 @@ -- | Get the term corresponding to a named variable. If it is a lambda bound --   variable the deBruijn index is returned and if it is a let bound variable --   its definition is returned.+{-# SPECIALIZE getVarInfo :: Name -> TCM (Term, Arg Type) #-} getVarInfo :: MonadTCM tcm => Name -> tcm (Term, Arg Type) getVarInfo x =     do	ctx <- getContext@@ -154,8 +185,9 @@ 		    return (Var n [], t) 	    _	    -> 		case Map.lookup x def of-		    Just vt -> getOpen vt+		    Just vt -> liftTCM $ getOpen vt 		    _	    -> fail $ "unbound variable " ++ show x +{-# SPECIALIZE escapeContext :: Int -> TCM a -> TCM a #-} escapeContext :: MonadTCM tcm => Int -> tcm a -> tcm a escapeContext n = local $ \e -> e { envContext = drop n $ envContext e }
src/full/Agda/TypeChecking/Monad/Context.hs-boot view
@@ -7,4 +7,3 @@  getContext   :: MonadTCM tcm => tcm [Arg (Name, Type)] getContextId :: MonadTCM tcm => tcm [CtxId]-
src/full/Agda/TypeChecking/Monad/Env.hs view
@@ -10,30 +10,37 @@ import Agda.TypeChecking.Monad.Base  -- | Get the name of the current module, if any.-currentModule :: MonadTCM tcm => tcm ModuleName+currentModule :: TCM ModuleName currentModule = asks envCurrentModule  -- | Set the name of the current module.-withCurrentModule :: MonadTCM tcm => ModuleName -> tcm a -> tcm a+withCurrentModule :: ModuleName -> TCM a -> TCM a withCurrentModule m =     local $ \e -> e { envCurrentModule = m }  -- | Get the number of variables bound by anonymous modules.-getAnonymousVariables :: MonadTCM tcm => ModuleName -> tcm Nat+getAnonymousVariables :: ModuleName -> TCM Nat getAnonymousVariables m = do   ms <- asks envAnonymousModules   return $ sum [ n | (m', n) <- ms, mnameToList m' `isPrefixOf` mnameToList m ]  -- | Add variables bound by an anonymous module.-withAnonymousModule :: MonadTCM tcm => ModuleName -> Nat -> tcm a -> tcm a+withAnonymousModule :: ModuleName -> Nat -> TCM a -> TCM a withAnonymousModule m n =   local $ \e -> e { envAnonymousModules   = (m, n) : envAnonymousModules e                   }  -- | Set the current environment to the given-withEnv :: MonadTCM tcm => TCEnv -> tcm a -> tcm a+withEnv :: TCEnv -> TCM a -> TCM a withEnv env m = local (const env) m  -- | Get the current environmnet-getEnv :: MonadTCM tcm => tcm TCEnv+getEnv :: TCM TCEnv getEnv = ask++-- | Leave the top level to type check local things.+leaveTopLevel :: TCM a -> TCM a+leaveTopLevel = local $ \ env -> env { envTopLevel = False }++onTopLevel :: TCM Bool+onTopLevel = asks envTopLevel
src/full/Agda/TypeChecking/Monad/Exception.hs view
@@ -2,6 +2,7 @@  -- | Basically a copy of the ErrorT monad transformer. It's handy to slap --   onto TCM and still be a MonadTCM (which isn't possible with ErrorT).+--   Also, it does not require the silly Error instance for the err type.  module Agda.TypeChecking.Monad.Exception where @@ -9,6 +10,7 @@ import Control.Monad.Error import Control.Monad.State import Control.Monad.Reader+import Control.Monad.Writer import Agda.TypeChecking.Monad.Base  newtype ExceptionT err m a = ExceptionT { runExceptionT :: m (Either err a) }@@ -33,6 +35,16 @@     case r of       Left err  -> runExceptionT $ h err       Right x   -> return $ Right x++instance (Monad m, MonadException err m) => MonadException err (ReaderT r m) where+  throwException = lift . throwException+  catchException m h = ReaderT $ \ r ->+    catchException (m `runReaderT` r) (\ err -> h err `runReaderT` r)++instance (Monad m, MonadException err m, Monoid w) => MonadException err (WriterT w m) where+  throwException = lift . throwException+  catchException m h = WriterT $+    catchException (runWriterT m) (\ err -> runWriterT $ h err)  instance MonadTrans (ExceptionT err) where   lift = ExceptionT . liftM Right
src/full/Agda/TypeChecking/Monad/Imports.hs view
@@ -56,28 +56,30 @@ getVisitedModule x = gets $ Map.lookup x . stVisitedModules  getDecodedModules :: TCM DecodedModules-getDecodedModules = gets stDecodedModules+getDecodedModules = stDecodedModules . stPersistent <$> get  setDecodedModules :: DecodedModules -> TCM ()-setDecodedModules ms = modify $ \s -> s { stDecodedModules = ms }--preserveDecodedModules :: TCM a -> TCM a-preserveDecodedModules tcm = do ms <- getDecodedModules-                                a  <- tcm-                                setDecodedModules ms-                                return a+setDecodedModules ms = modify $ \s ->+  s { stPersistent = (stPersistent s) { stDecodedModules = ms } }  getDecodedModule :: C.TopLevelModuleName -> TCM (Maybe (Interface, ClockTime))-getDecodedModule x = gets $ Map.lookup x . stDecodedModules+getDecodedModule x = Map.lookup x . stDecodedModules . stPersistent <$> get  storeDecodedModule :: Interface -> ClockTime -> TCM () storeDecodedModule i t = modify $ \s ->-  s { stDecodedModules =-        Map.insert (toTopLevelModuleName $ iModuleName i) (i, t) $-          stDecodedModules s }+  s { stPersistent =+        (stPersistent s) { stDecodedModules =+          Map.insert (toTopLevelModuleName $ iModuleName i) (i, t) $+            (stDecodedModules $ stPersistent s)+        }+  }  dropDecodedModule :: C.TopLevelModuleName -> TCM ()-dropDecodedModule x = modify $ \s -> s { stDecodedModules = Map.delete x $ stDecodedModules s }+dropDecodedModule x = modify $ \s ->+  s { stPersistent = (stPersistent s) { stDecodedModules =+                       Map.delete x $ stDecodedModules $ stPersistent s+                     }+  }  withImportPath :: [C.TopLevelModuleName] -> TCM a -> TCM a withImportPath path = local $ \e -> e { envImportPath = path }
src/full/Agda/TypeChecking/Monad/MetaVars.hs view
@@ -19,6 +19,7 @@ import Agda.TypeChecking.Monad.Closure import Agda.TypeChecking.Monad.Open import Agda.TypeChecking.Substitute+-- import Agda.TypeChecking.Pretty -- LEADS TO import cycle  import Agda.Utils.Monad import Agda.Utils.Fresh@@ -28,32 +29,35 @@ import Agda.Utils.Impossible  -- | Get the meta store.-getMetaStore :: MonadTCM tcm => tcm MetaStore+getMetaStore :: TCM MetaStore getMetaStore = gets stMetaStore +modifyMetaStore :: (MetaStore -> MetaStore) -> TCM ()+modifyMetaStore f = modify (\ st -> st { stMetaStore = f $ stMetaStore st })+ -- | Lookup a meta variable-lookupMeta :: MonadTCM tcm => MetaId -> tcm MetaVariable+lookupMeta :: MetaId -> TCM MetaVariable lookupMeta m =     do	mmv <- Map.lookup m <$> getMetaStore 	case mmv of 	    Just mv -> return mv 	    _	    -> fail $ "no such meta variable " ++ show m -updateMetaVar :: MonadTCM tcm => MetaId -> (MetaVariable -> MetaVariable) -> tcm ()+updateMetaVar :: MetaId -> (MetaVariable -> MetaVariable) -> TCM () updateMetaVar m f =   modify $ \st -> st { stMetaStore = Map.adjust f m $ stMetaStore st } -getMetaPriority :: MonadTCM tcm => MetaId -> tcm MetaPriority+getMetaPriority :: MetaId -> TCM MetaPriority getMetaPriority i = mvPriority <$> lookupMeta i -isSortMeta :: MonadTCM tcm => MetaId -> tcm Bool+isSortMeta :: MetaId -> TCM Bool isSortMeta m = do   mv <- lookupMeta m   return $ case mvJudgement mv of     HasType{} -> False     IsSort{}  -> True -isInstantiatedMeta :: MonadTCM tcm => MetaId -> tcm Bool+isInstantiatedMeta :: MetaId -> TCM Bool isInstantiatedMeta m = do   mv <- lookupMeta m   return $ case mvInstantiation mv of@@ -61,98 +65,105 @@     InstS{} -> True     _       -> False -createMetaInfo :: MonadTCM tcm => tcm MetaInfo+createMetaInfo :: TCM MetaInfo createMetaInfo =     do  r <- getCurrentRange 	buildClosure r -updateMetaVarRange :: MonadTCM tcm => MetaId -> Range -> tcm ()+updateMetaVarRange :: MetaId -> Range -> TCM () updateMetaVarRange mi r = updateMetaVar mi (setRange r) -addInteractionPoint :: MonadTCM tcm => InteractionId -> MetaId -> tcm ()+addInteractionPoint :: InteractionId -> MetaId -> TCM () addInteractionPoint ii mi =     modify $ \s -> s { stInteractionPoints = 			Map.insert ii mi $ stInteractionPoints s 		     }  -removeInteractionPoint :: MonadTCM tcm => InteractionId -> tcm ()+removeInteractionPoint :: InteractionId -> TCM () removeInteractionPoint ii =     modify $ \s -> s { stInteractionPoints = 			Map.delete ii $ stInteractionPoints s 		     }  -getInteractionPoints :: MonadTCM tcm => tcm [InteractionId]+getInteractionPoints :: TCM [InteractionId] getInteractionPoints = Map.keys <$> gets stInteractionPoints -getInteractionMetas :: MonadTCM tcm => tcm [MetaId]+getInteractionMetas :: TCM [MetaId] getInteractionMetas = Map.elems <$> gets stInteractionPoints  -- | Does the meta variable correspond to an interaction point? -isInteractionMeta :: MonadTCM tcm => MetaId -> tcm Bool+isInteractionMeta :: MetaId -> TCM Bool isInteractionMeta m = fmap (m `elem`) getInteractionMetas -lookupInteractionId :: MonadTCM tcm => InteractionId -> tcm MetaId+lookupInteractionId :: InteractionId -> TCM MetaId lookupInteractionId ii =     do  mmi <- Map.lookup ii <$> gets stInteractionPoints 	case mmi of 	    Just mi -> return mi 	    _	    -> fail $ "no such interaction point: " ++ show ii -judgementInteractionId :: MonadTCM tcm => InteractionId -> tcm (Judgement Type MetaId)+judgementInteractionId :: InteractionId -> TCM (Judgement Type MetaId) judgementInteractionId ii =     do  mi <- lookupInteractionId ii         mvJudgement <$> lookupMeta mi  -- | Generate new meta variable.-newMeta :: MonadTCM tcm => MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> tcm MetaId+newMeta :: MetaInfo -> MetaPriority -> Permutation -> Judgement Type a -> TCM MetaId newMeta = newMeta' Open -newMeta' :: MonadTCM tcm => MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation ->-            Judgement Type a -> tcm MetaId+-- | Generate a new meta variable with some instantiation given.+--   For instance, the instantiation could be a 'PostponedTypeCheckingProblem'.+newMeta' :: MetaInstantiation -> MetaInfo -> MetaPriority -> Permutation ->+            Judgement Type a -> TCM MetaId newMeta' inst mi p perm j = do   x <- fresh-  let mv = MetaVar mi p perm (fmap (const x) j) inst Set.empty+  let j' = fmap (const x) j  -- fill the identifier part of the judgement+      mv = MetaVar mi p perm j' inst Set.empty Instantiable+  -- printing not available (import cycle)+  -- reportSDoc "tc.meta.new" 50 $ text "new meta" <+> prettyTCM j'   modify $ \st -> st { stMetaStore = Map.insert x mv $ stMetaStore st }   return x -getInteractionRange :: MonadTCM tcm => InteractionId -> tcm Range+getInteractionRange :: InteractionId -> TCM Range getInteractionRange ii = do     mi <- lookupInteractionId ii     getMetaRange mi -getMetaRange :: MonadTCM tcm => MetaId -> tcm Range+getMetaRange :: MetaId -> TCM Range getMetaRange mi = getRange <$> lookupMeta mi  -getInteractionScope :: MonadTCM tcm => InteractionId -> tcm ScopeInfo+getInteractionScope :: InteractionId -> TCM ScopeInfo getInteractionScope ii =     do mi <- lookupInteractionId ii        mv <- lookupMeta mi        return $ getMetaScope mv -withMetaInfo :: MonadTCM tcm => MetaInfo -> tcm a -> tcm a+withMetaInfo :: MetaInfo -> TCM a -> TCM a withMetaInfo mI m = enterClosure mI $ \r -> setCurrentRange r m -getInstantiatedMetas :: MonadTCM tcm => tcm [MetaId]+getInstantiatedMetas :: TCM [MetaId] getInstantiatedMetas = do     store <- getMetaStore     return [ i | (i, MetaVar{ mvInstantiation = mi }) <- Map.assocs store, isInst mi ]     where 	isInst Open                             = False+	isInst OpenIFS                          = False 	isInst (BlockedConst _)                 = False         isInst (PostponedTypeCheckingProblem _) = False 	isInst (InstV _)                        = True 	isInst (InstS _)                        = True -getOpenMetas :: MonadTCM tcm => tcm [MetaId]+getOpenMetas :: TCM [MetaId] getOpenMetas = do     store <- getMetaStore     return [ i | (i, MetaVar{ mvInstantiation = mi }) <- Map.assocs store, isOpen mi ]     where 	isOpen Open                             = True+	isOpen OpenIFS                          = True 	isOpen (BlockedConst _)                 = True         isOpen (PostponedTypeCheckingProblem _) = True 	isOpen (InstV _)                        = False@@ -160,19 +171,35 @@  -- | @listenToMeta l m@: register @l@ as a listener to @m@. This is done --   when the type of l is blocked by @m@.-listenToMeta :: MonadTCM tcm => MetaId -> MetaId -> tcm ()+listenToMeta :: Listener -> MetaId -> TCM () listenToMeta l m =   updateMetaVar m $ \mv -> mv { mvListeners = Set.insert l $ mvListeners mv }  -- | Unregister a listener.-unlistenToMeta :: MonadTCM tcm => MetaId -> MetaId -> tcm ()+unlistenToMeta :: Listener -> MetaId -> TCM () unlistenToMeta l m =   updateMetaVar m $ \mv -> mv { mvListeners = Set.delete l $ mvListeners mv }  -- | Get the listeners to a meta.-getMetaListeners :: MonadTCM tcm => MetaId -> tcm [MetaId]+getMetaListeners :: MetaId -> TCM [Listener] getMetaListeners m = Set.toList . mvListeners <$> lookupMeta m -clearMetaListeners :: MonadTCM tcm => MetaId -> tcm ()+clearMetaListeners :: MetaId -> TCM () clearMetaListeners m =   updateMetaVar m $ \mv -> mv { mvListeners = Set.empty }++-- | Freeze all meta variables.+freezeMetas :: TCM ()+freezeMetas = modifyMetaStore $ Map.map freeze where+  freeze :: MetaVariable -> MetaVariable+  freeze mvar = mvar { mvFrozen = Frozen }++unfreezeMetas :: TCM ()+unfreezeMetas = modifyMetaStore $ Map.map unfreeze where+  unfreeze :: MetaVariable -> MetaVariable+  unfreeze mvar = mvar { mvFrozen = Instantiable }++isFrozen :: MetaId -> TCM Bool+isFrozen x = do+  mvar <- lookupMeta x+  return $ mvFrozen mvar == Frozen
src/full/Agda/TypeChecking/Monad/Mutual.hs view
@@ -16,10 +16,10 @@  #include "../../undefined.h" -noMutualBlock :: MonadTCM tcm => tcm a -> tcm a+noMutualBlock :: TCM a -> TCM a noMutualBlock = local $ \e -> e { envMutualBlock = Nothing } -inMutualBlock :: MonadTCM tcm => tcm a -> tcm a+inMutualBlock :: TCM a -> TCM a inMutualBlock m = do   mi <- asks envMutualBlock   case mi of@@ -30,7 +30,7 @@     Just _  -> m  -- | Set the mutual block for a definition-setMutualBlock :: MonadTCM tcm => MutualId -> QName -> tcm ()+setMutualBlock :: MutualId -> QName -> TCM () setMutualBlock i x = do   modify $ \s -> s { stMutualBlocks = Map.insertWith Set.union i (Set.singleton x) $ stMutualBlocks s 		   , stSignature    = (stSignature s)@@ -41,21 +41,21 @@     setMutId x i = flip Map.adjust x $ \defn -> defn { defMutual = i }  -- | Get all mutual blocks-getMutualBlocks :: MonadTCM tcm => tcm [Set QName]+getMutualBlocks :: TCM [Set QName] getMutualBlocks = gets $ Map.elems . stMutualBlocks  -- | Get the current mutual block.-currentMutualBlock :: MonadTCM tcm => tcm MutualId+currentMutualBlock :: TCM MutualId currentMutualBlock = maybe fresh return =<< asks envMutualBlock -lookupMutualBlock :: MonadTCM tcm => MutualId -> tcm (Set QName)+lookupMutualBlock :: MutualId -> TCM (Set QName) lookupMutualBlock mi = do   mb <- gets stMutualBlocks   case Map.lookup mi mb of     Just qs -> return qs-    Nothing -> fail $ "No such mutual block: " ++ show mi+    Nothing -> return Set.empty -- can end up here if we ask for the current mutual block and there is none -findMutualBlock :: MonadTCM tcm => QName -> tcm (Set QName)+findMutualBlock :: QName -> TCM (Set QName) findMutualBlock f = do   bs <- getMutualBlocks   case filter (Set.member f) bs of
src/full/Agda/TypeChecking/Monad/Open.hs view
@@ -23,7 +23,7 @@ import Agda.Utils.Impossible  -- | Create an open term in the current context.-makeOpen :: MonadTCM tcm => a -> tcm (Open a)+makeOpen :: a -> TCM (Open a) makeOpen x = do     ctx <- getContextId     return $ OpenThing ctx x@@ -35,14 +35,14 @@  -- | Extract the value from an open term. Must be done in an extension of the --   context in which the term was created.-getOpen :: (MonadTCM tcm, Raise a) => Open a -> tcm a+getOpen :: Raise a => Open a -> TCM a getOpen (OpenThing []  x) = return x getOpen (OpenThing ctx x) = do   ctx' <- getContextId   unless (ctx `isSuffixOf` ctx') $ fail $ "thing out of context (" ++ show ctx ++ " is not a sub context of " ++ show ctx' ++ ")"   return $ raise (genericLength ctx' - genericLength ctx) x -tryOpen :: (MonadTCM tcm, Raise a) => Open a -> tcm (Maybe a)-tryOpen o = liftTCM $+tryOpen :: Raise a => Open a -> TCM (Maybe a)+tryOpen o =   (Just <$> getOpen o)   `catchError` \_ -> return Nothing
src/full/Agda/TypeChecking/Monad/Options.hs view
@@ -26,24 +26,28 @@  -- | Sets the pragma options. -setPragmaOptions :: MonadTCM tcm => PragmaOptions -> tcm ()+setPragmaOptions :: PragmaOptions -> TCM () setPragmaOptions opts = do   clo <- commandLineOptions+  let unsafe = unsafePragmaOptions opts+  when (optSafe clo && not (null unsafe)) $ typeError (SafeFlagPragma unsafe)   case checkOpts (clo { optPragmaOptions = opts }) of     Left err   -> __IMPOSSIBLE__     Right opts -> do       modify $ \s -> s { stPragmaOptions = (optPragmaOptions opts) }+ -- | Sets the command line options (both persistent and pragma options -- are updated). -- -- Relative include directories are made absolute with respect to the--- current working directory. If the include directories have changed,--- then the state is reset.+-- current working directory. If the include directories have changed+-- (and were previously @'Right' something@), then the state is reset+-- (completely) . -- -- An empty list of relative include directories (@'Left' []@) is -- interpreted as @["."]@. -setCommandLineOptions :: MonadTCM tcm => CommandLineOptions -> tcm ()+setCommandLineOptions :: CommandLineOptions -> TCM () setCommandLineOptions opts =   case checkOpts opts of     Left err   -> __IMPOSSIBLE__@@ -54,24 +58,26 @@           setIncludeDirs is CurrentDir           getIncludeDirs       modify $ \s ->-        s { stPersistentOptions = opts { optIncludeDirs = Right incs }-          , stPragmaOptions     = optPragmaOptions opts+        s { stPersistent = (stPersistent s) {+              stPersistentOptions = opts { optIncludeDirs = Right incs }+            }+          , stPragmaOptions = optPragmaOptions opts           }  -- | Returns the pragma options which are currently in effect. -pragmaOptions :: MonadTCM tcm => tcm PragmaOptions-pragmaOptions = liftTCM $ gets stPragmaOptions+pragmaOptions :: TCM PragmaOptions+pragmaOptions = gets stPragmaOptions  -- | Returns the command line options which are currently in effect. -commandLineOptions :: MonadTCM tcm => tcm CommandLineOptions-commandLineOptions = liftTCM $ do-  p  <- gets stPragmaOptions-  cl <- gets stPersistentOptions+commandLineOptions :: TCM CommandLineOptions+commandLineOptions = do+  p  <- stPragmaOptions <$> get+  cl <- stPersistentOptions . stPersistent <$> get   return $ cl { optPragmaOptions = p } -setOptionsFromPragma :: MonadTCM tcm => OptionsPragma -> tcm ()+setOptionsFromPragma :: OptionsPragma -> TCM () setOptionsFromPragma ps = do     opts <- commandLineOptions     case parsePragmaOptions ps opts of@@ -79,43 +85,44 @@ 	Right opts' -> setPragmaOptions opts'  -- | Disable display forms.-enableDisplayForms :: MonadTCM tcm => tcm a -> tcm a+enableDisplayForms :: TCM a -> TCM a enableDisplayForms =   local $ \e -> e { envDisplayFormsEnabled = True }  -- | Disable display forms.-disableDisplayForms :: MonadTCM tcm => tcm a -> tcm a+disableDisplayForms :: TCM a -> TCM a disableDisplayForms =   local $ \e -> e { envDisplayFormsEnabled = False }  -- | Check if display forms are enabled.-displayFormsEnabled :: MonadTCM tcm => tcm Bool+displayFormsEnabled :: TCM Bool displayFormsEnabled = asks envDisplayFormsEnabled  -- | Don't eta contract implicit-dontEtaContractImplicit :: MonadTCM tcm => tcm a -> tcm a+dontEtaContractImplicit :: TCM a -> TCM a dontEtaContractImplicit = local $ \e -> e { envEtaContractImplicit = False }  -- | Do eta contract implicit+{-# SPECIALIZE doEtaContractImplicit :: TCM a -> TCM a #-} doEtaContractImplicit :: MonadTCM tcm => tcm a -> tcm a doEtaContractImplicit = local $ \e -> e { envEtaContractImplicit = True } -shouldEtaContractImplicit :: MonadTCM tcm => tcm Bool+shouldEtaContractImplicit :: TCM Bool shouldEtaContractImplicit = asks envEtaContractImplicit  -- | Don't reify interaction points-dontReifyInteractionPoints :: MonadTCM tcm => tcm a -> tcm a+dontReifyInteractionPoints :: TCM a -> TCM a dontReifyInteractionPoints =   local $ \e -> e { envReifyInteractionPoints = False } -shouldReifyInteractionPoints :: MonadTCM tcm => tcm Bool+shouldReifyInteractionPoints :: TCM Bool shouldReifyInteractionPoints = asks envReifyInteractionPoints  -- | Gets the include directories. -- -- Precondition: 'optIncludeDirs' must be @'Right' something@. -getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]+getIncludeDirs :: TCM [AbsolutePath] getIncludeDirs = do   incs <- optIncludeDirs <$> commandLineOptions   case incs of@@ -135,17 +142,18 @@ -- | Makes the given directories absolute and stores them as include -- directories. ----- If the include directories have changed, then the state is reset.+-- If the include directories change (and they were previously+-- @'Right' something@), then the state is reset (completely, except+-- for the include directories). -- -- An empty list is interpreted as @["."]@.  setIncludeDirs-  :: MonadTCM tcm-  => [FilePath]+  :: [FilePath]   -- ^ New include directories.   -> RelativeTo   -- ^ How should relative paths be interpreted?-  -> tcm ()+  -> TCM () setIncludeDirs incs relativeTo = do   opts <- commandLineOptions   let oldIncs = optIncludeDirs opts@@ -155,50 +163,59 @@       root <- liftIO (absolute =<< getCurrentDirectory)       return (root, return ())     ProjectRoot f -> do-      m <- liftTCM $ moduleName' f-      return (projectRoot f m, liftTCM $ checkModuleName m f)+      m <- moduleName' f+      return (projectRoot f m, checkModuleName m f) -  modify $ \s -> s { stPersistentOptions =-    (stPersistentOptions s) { optIncludeDirs =-      Right $ map (mkAbsolute . (filePath root </>)) $-        case incs of-          [] -> ["."]-          _  -> incs } }+  let setIncs incs = modify $ \s ->+        s { stPersistent =+          (stPersistent s) { stPersistentOptions =+            (stPersistentOptions $ stPersistent s)+              { optIncludeDirs = Right incs+            }+          }+        } +  setIncs (map (mkAbsolute . (filePath root </>)) $+             case incs of+               [] -> ["."]+               _  -> incs)+   incs <- getIncludeDirs   case oldIncs of-    Right incs' | incs' /= incs -> resetState+    Right incs' | incs' /= incs -> do+      resetAllState+      setIncs incs     _                           -> return ()    check -setInputFile :: MonadTCM tcm => FilePath -> tcm ()+setInputFile :: FilePath -> TCM () setInputFile file =     do	opts <- commandLineOptions 	setCommandLineOptions $           opts { optInputFile = Just file }  -- | Should only be run if 'hasInputFile'.-getInputFile :: MonadTCM tcm => tcm AbsolutePath+getInputFile :: TCM AbsolutePath getInputFile =     do	mf <- optInputFile <$> commandLineOptions 	case mf of 	    Just file -> liftIO $ absolute file 	    Nothing   -> __IMPOSSIBLE__ -hasInputFile :: MonadTCM tcm => tcm Bool+hasInputFile :: TCM Bool hasInputFile = isJust <$> optInputFile <$> commandLineOptions -proofIrrelevance :: MonadTCM tcm => tcm Bool+proofIrrelevance :: TCM Bool proofIrrelevance = optProofIrrelevance <$> pragmaOptions -hasUniversePolymorphism :: MonadTCM tcm => tcm Bool+hasUniversePolymorphism :: TCM Bool hasUniversePolymorphism = optUniversePolymorphism <$> pragmaOptions -showImplicitArguments :: MonadTCM tcm => tcm Bool+showImplicitArguments :: TCM Bool showImplicitArguments = optShowImplicit <$> pragmaOptions -setShowImplicitArguments :: MonadTCM tcm => Bool -> tcm a -> tcm a+setShowImplicitArguments :: Bool -> TCM a -> TCM a setShowImplicitArguments showImp ret = do   opts <- pragmaOptions   let imp = optShowImplicit opts@@ -208,21 +225,21 @@   setPragmaOptions $ opts { optShowImplicit = imp }   return x -ignoreInterfaces :: MonadTCM tcm => tcm Bool+ignoreInterfaces :: TCM Bool ignoreInterfaces = optIgnoreInterfaces <$> commandLineOptions -positivityCheckEnabled :: MonadTCM tcm => tcm Bool+positivityCheckEnabled :: TCM Bool positivityCheckEnabled = not . optDisablePositivity <$> pragmaOptions -typeInType :: MonadTCM tcm => tcm Bool+typeInType :: TCM Bool typeInType = not . optUniverseCheck <$> pragmaOptions -getVerbosity :: MonadTCM tcm => tcm (Trie String Int)+getVerbosity :: TCM (Trie String Int) getVerbosity = optVerbose <$> pragmaOptions  type VerboseKey = String -hasVerbosity :: MonadTCM tcm => VerboseKey -> Int -> tcm Bool+hasVerbosity :: VerboseKey -> Int -> TCM Bool hasVerbosity k n | n < 0     = __IMPOSSIBLE__                  | otherwise = do     t <- getVerbosity@@ -231,24 +248,23 @@     return (n <= m)  -- | Precondition: The level must be non-negative.-verboseS :: MonadTCM tcm => VerboseKey -> Int -> tcm () -> tcm ()+verboseS :: VerboseKey -> Int -> TCM () -> TCM () verboseS k n action = whenM (hasVerbosity k n) action -reportS :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()+reportS :: VerboseKey -> Int -> String -> TCM () reportS k n s = verboseS k n $ liftIO $ LocIO.putStr s -reportSLn :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm ()+reportSLn :: VerboseKey -> Int -> String -> TCM () reportSLn k n s = verboseS k n $ liftIO $ LocIO.putStrLn s >> LocIO.stdoutFlush -reportSDoc :: MonadTCM tcm => VerboseKey -> Int -> tcm Doc -> tcm ()+reportSDoc :: VerboseKey -> Int -> TCM Doc -> TCM () reportSDoc k n d = verboseS k n $ liftIO . LocIO.print =<< d -verboseBracket :: MonadTCM tcm => VerboseKey -> Int -> String -> tcm a -> tcm a+verboseBracket :: VerboseKey -> Int -> String -> TCM a -> TCM a verboseBracket k n s m = do   v <- hasVerbosity k n   if not v then m            else do     liftIO $ LocIO.putStrLn $ "{ " ++ s-    x <- m-    liftIO $ LocIO.putStrLn "}"+    x <- m `finally` liftIO (LocIO.putStrLn "}")     return x
src/full/Agda/TypeChecking/Monad/Options.hs-boot view
@@ -3,4 +3,4 @@ import Agda.TypeChecking.Monad.Base import Agda.Utils.FileName -getIncludeDirs :: MonadTCM tcm => tcm [AbsolutePath]+getIncludeDirs :: TCM [AbsolutePath]
src/full/Agda/TypeChecking/Monad/Signature.hs view
@@ -1,6 +1,7 @@ {-# LANGUAGE CPP, PatternGuards #-} module Agda.TypeChecking.Monad.Signature where +import Control.Arrow ((***)) import Control.Monad.State import Control.Monad.Reader import Data.Set (Set)@@ -16,15 +17,18 @@ import Agda.Syntax.Internal import Agda.Syntax.Position +import qualified Agda.Compiler.JS.Parser as JS+ import Agda.TypeChecking.Monad.Base import Agda.TypeChecking.Monad.Context import Agda.TypeChecking.Monad.Options import Agda.TypeChecking.Monad.Env import Agda.TypeChecking.Monad.Mutual import Agda.TypeChecking.Monad.Open+import Agda.TypeChecking.Free (isBinderUsed) import Agda.TypeChecking.Substitute -- import Agda.TypeChecking.Pretty -- leads to cyclicity-import Agda.TypeChecking.CompiledClause+import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Compile import {-# SOURCE #-} Agda.TypeChecking.Polarity  import Agda.Utils.Monad@@ -36,25 +40,25 @@ #include "../../undefined.h" import Agda.Utils.Impossible -modifySignature :: MonadTCM tcm => (Signature -> Signature) -> tcm ()+modifySignature :: (Signature -> Signature) -> TCM () modifySignature f = modify $ \s -> s { stSignature = f $ stSignature s } -modifyImportedSignature :: MonadTCM tcm => (Signature -> Signature) -> tcm ()+modifyImportedSignature :: (Signature -> Signature) -> TCM () modifyImportedSignature f = modify $ \s -> s { stImports = f $ stImports s } -getSignature :: MonadTCM tcm => tcm Signature-getSignature = liftTCM $ gets stSignature+getSignature :: TCM Signature+getSignature = gets stSignature -getImportedSignature :: MonadTCM tcm => tcm Signature-getImportedSignature = liftTCM $ gets stImports+getImportedSignature :: TCM Signature+getImportedSignature = gets stImports -setSignature :: MonadTCM tcm => Signature -> tcm ()+setSignature :: Signature -> TCM () setSignature sig = modifySignature $ const sig -setImportedSignature :: MonadTCM tcm => Signature -> tcm ()-setImportedSignature sig = liftTCM $ modify $ \s -> s { stImports = sig }+setImportedSignature :: Signature -> TCM ()+setImportedSignature sig = modify $ \s -> s { stImports = sig } -withSignature :: MonadTCM tcm => Signature -> tcm a -> tcm a+withSignature :: Signature -> TCM a -> TCM a withSignature sig m =     do	sig0 <- getSignature 	setSignature sig@@ -63,8 +67,8 @@         return r  -- | Add a constant to the signature. Lifts the definition to top level.-addConstant :: MonadTCM tcm => QName -> Definition -> tcm ()-addConstant q d = liftTCM $ do+addConstant :: QName -> Definition -> TCM ()+addConstant q d = do   reportSLn "tc.signature" 20 $ "adding constant " ++ show q ++ " to signature"   tel <- getContextTelescope   let tel' = killRange $ case theDef d of@@ -82,31 +86,114 @@     hideTel  EmptyTel		      = EmptyTel     hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel -addHaskellCode :: MonadTCM tcm => QName -> HaskellType -> HaskellCode -> tcm ()+-- | Turn a definition into a projection if it looks like a projection.+makeProjection :: QName -> TCM ()+makeProjection x = inContext [] $ do+  reportSLn "tc.proj.like" 30 $ "Considering " ++ show x ++ " for projection likeness"+  defn <- getConstInfo x+  case theDef defn of+    -- Constructor-headed functions can't be projection-like (at the moment). The reason+    -- for this is that invoking constructor-headedness will circumvent the inference of+    -- the dropped arguments.+    -- Nor can abstract definitions be projection-like since they won't reduce+    -- outside the abstract block.+    def@Function{funProjection = Nothing, funClauses = cls, funInv = NotInjective,+                 funAbstr = ConcreteDef} -> do+      ps0 <- filterM validProj (candidateArgs [] (unEl $ defType defn))+      reportSLn "tc.proj.like" 30 $ if null ps0 then "  no candidates found"+                                                else "  candidates: " ++ show ps0+      ps <- return $ filter (checkOccurs cls . snd) ps0+      when (not (null ps0) && null ps) $ reportSLn "tc.proj.like" 50 $ "  occurs check failed\n    clauses = " ++ show cls+      case reverse ps of+        []         -> return ()+        (d, n) : _ -> do+          reportSLn "tc.proj.like" 10 $ show (defName defn) ++ " is projection like in argument " +++                                        show n ++ " for type " ++ show d+          let cls' = map (rewriteClause n) cls+          cc <- compileClauses True cls'+          reportSLn "tc.proj.like" 20 $ "  rewrote clauses to\n    " ++ show cc+          let mapInv f NotInjective  = NotInjective+              mapInv f (Inverse inv) = Inverse (f inv)+              newDef = def+                       { funProjection     = Just (d, n + 1)+                       , funClauses        = cls'+                       , funCompiled       = cc+                       , funInv            = mapInv (Map.map $ rewriteClause n) $ funInv def+                       , funArgOccurrences = drop n $ funArgOccurrences def+                       , funPolarity       = drop n $ funPolarity def+                       }+          addConstant x $ defn{ theDef     = newDef+                              , defDisplay = [] }+    _ -> return ()+  where+    validProj (_, 0) = return False+    validProj (d, _) = do+      defn <- theDef <$> getConstInfo d+      return $ case defn of+        Datatype{} -> True+        Record{}   -> True+        Axiom{}    -> True+        _          -> False++    rewriteClause n cl@Clause{clausePerm = Perm m p} =+      cl{ clausePerm = Perm (m - fromIntegral n) $ map (subtract $ fromIntegral n) $ drop n p+        , clauseTel  = telFromList $ drop n $ telToList $ clauseTel cl+        , clausePats = drop n $ clausePats cl+        , clauseBody = dropB n $ clauseBody cl+        }+      where+        dropB 0 b          = b+        dropB _ NoBody     = NoBody+        dropB n (Bind b)   = dropB (n - 1) (absBody b)+        dropB n Body{}     = __IMPOSSIBLE__++    checkOccurs cls n = all (nonOccur n) cls++    nonOccur n Clause{clausePerm = Perm _ p, clausePats = ps, clauseBody = b} =+      and [ take n p == [0..fromIntegral n - 1]+          , onlyMatch n ps  -- projection-like functions are only allowed to match on the eliminatee+                            -- otherwise we may end up projecting from constructor applications, in+                            -- which case we can't reconstruct the dropped parameters+          , checkBody n b ]++    onlyMatch n ps = all (noMatch . unArg) $ ps0 ++ drop 1 ps1+      where+        (ps0, ps1) = splitAt n ps+        noMatch ConP{} = False+        noMatch LitP{} = False+        noMatch VarP{} = True+        noMatch DotP{} = True++    checkBody 0 _          = True+    checkBody _ NoBody     = True+    checkBody n (Bind b)   = not (isBinderUsed b) && checkBody (n - 1) (unAbs b)+    checkBody _ Body{}     = __IMPOSSIBLE__++    candidateArgs vs (Pi (Arg r h (El _ (Def d us))) b)+      | vs == map unArg us = (d, length vs) : candidateRec vs b+    candidateArgs vs (Pi _ b) = candidateRec vs b+    candidateArgs _ _ = []++    candidateRec vs NoAbs{} = []+    candidateRec vs b       = candidateArgs (Var (size vs) [] : vs) (unEl $ absBody b)++addHaskellCode :: QName -> HaskellType -> HaskellCode -> TCM () addHaskellCode q hsTy hsDef =   -- TODO: sanity checking   modifySignature $ \sig -> sig   { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }   where-    addHs def@Defn{theDef = con@Constructor{}} =-      def{theDef = con{conHsCode = Just (hsTy, hsDef)}}-    addHs def@Defn{theDef = ax@Axiom{}} =-      def{theDef = ax{axHsDef = Just $ HsDefn hsTy hsDef}}-    addHs def = def+    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsDefn hsTy hsDef } } -addHaskellType :: MonadTCM tcm => QName -> HaskellType -> tcm ()+addHaskellType :: QName -> HaskellType -> TCM () addHaskellType q hsTy =   -- TODO: sanity checking   modifySignature $ \sig -> sig   { sigDefinitions = Map.adjust addHs q $ sigDefinitions sig }   where-    addHs def@Defn{theDef = ax@Axiom{}} =-      def{theDef = ax{axHsDef = Just $ HsType hsTy}}-    addHs def@Defn{theDef = d@Datatype{}} =-      def{theDef = d{dataHsType = Just hsTy}}-    addHs def = def+    addHs def = def { defCompiledRep = (defCompiledRep def) { compiledHaskell = Just $ HsType hsTy } } -addEpicCode :: MonadTCM tcm => QName -> EpicCode -> tcm ()+addEpicCode :: QName -> EpicCode -> TCM () addEpicCode q epDef =   -- TODO: sanity checking   modifySignature $ \sig -> sig@@ -114,17 +201,35 @@   where     --addEp def@Defn{theDef = con@Constructor{}} =       --def{theDef = con{conHsCode = Just (hsTy, hsDef)}}-    addEp def@Defn{theDef = ax@Axiom{}} =-      def{theDef = ax{axEpDef = Just $ epDef}}-    addEp def = def+    addEp def = def { defCompiledRep = (defCompiledRep def) { compiledEpic = Just epDef } } +addJSCode :: QName -> String -> TCM ()+addJSCode q jsDef =+  case JS.parse jsDef of+    Left e ->+      modifySignature $ \sig -> sig+      { sigDefinitions = Map.adjust (addJS (Just e)) q $ sigDefinitions sig }+    Right s ->+      typeError (CompilationError ("Failed to parse ECMAScript (..." ++ s ++ ") for " ++ show q))+  where+    addJS e def = def{defCompiledRep = (defCompiledRep def){compiledJS = e}}++markStatic :: QName -> TCM ()+markStatic q =+  modifySignature $ \sig -> sig+  { sigDefinitions = Map.adjust mark q $ sigDefinitions sig }+  where+    mark def@Defn{theDef = fun@Function{}} =+      def{theDef = fun{funStatic = True}}+    mark def = def+ unionSignatures :: [Signature] -> Signature unionSignatures ss = foldr unionSignature emptySignature ss   where     unionSignature (Sig a b) (Sig c d) = Sig (Map.union a c) (Map.union b d)  -- | Add a section to the signature.-addSection :: MonadTCM tcm => ModuleName -> Nat -> tcm ()+addSection :: ModuleName -> Nat -> TCM () addSection m fv = do   tel <- getContextTelescope   let sec = Section tel fv@@ -132,7 +237,7 @@  -- | Lookup a section. If it doesn't exist that just means that the module --   wasn't parameterised.-lookupSection :: MonadTCM tcm => ModuleName -> tcm Telescope+lookupSection :: ModuleName -> TCM Telescope lookupSection m = do   sig  <- sigSections <$> getSignature   isig <- sigSections <$> getImportedSignature@@ -145,15 +250,20 @@   add args x x []   where     add args top x ps = do-      cs <- map originalClause . defClauses <$> getConstInfo x+      def <- getConstInfo x+      let cs = defClauses def+          n  = case theDef def of+                 Function{ funProjection = Just (_, n) } -> n+                 _ -> 0       case cs of 	[ Clause{ clauseBody = b } ]-	  | Just (m, Def y vs) <- strip b-	  , m == length args && args `isPrefixOf` vs -> do+	  | Just (m, Def y vs) <- strip b -> do 	      let ps' = raise 1 (map unArg vs) ++ ps-	      reportSLn "tc.section.apply.display" 20 $ "adding display form " ++ show y ++ " --> " ++ show top-	      addDisplayForm y (Display 0 ps' $ DTerm $ Def top args)-	      add args top y $ drop (length args) ps'+                  df  = Display 0 ps' $ DTerm $ Def top (drop (n - 1) args)+	      reportSLn "tc.display.section" 20 $ "adding display form " ++ show y ++ " --> " ++ show top+                                                ++ "\n  " ++ show df+	      addDisplayForm y df+	      add args top y ps' 	_ -> do 	      let reason = case cs of 		    []    -> "no clauses"@@ -163,28 +273,20 @@ 		      Just (m, Def y vs) 			| m < length args -> "too few args" 			| m > length args -> "too many args"-			| otherwise	      -> "args=" ++ unwords (map var args) ++ " vs=" ++ unwords (map var vs)-			  where-			    var (Arg h r x) = hid h $ case x of-			      Var i []	-> show i-			      MetaV _ _	-> "?"-			      _		-> "_"-			    hid NotHidden s = s-			    hid Hidden    s = "{" ++ s ++ "}"+			| otherwise	      -> "args=" ++ show args ++ " vs=" ++ show vs 		      Just (m, v) -> "not a def body"-	      reportSLn "tc.section.apply.display" 30 $ "no display form from" ++ show x ++ " because " ++ reason+	      reportSLn "tc.display.section" 30 $ "no display form from" ++ show x ++ " because " ++ reason 	      return ()     strip (Body v)   = return (0, v)     strip  NoBody    = Nothing-    strip (NoBind b) = Nothing     strip (Bind b)   = do       (n, v) <- strip $ absBody b       return (n + 1, v)  applySection ::-  MonadTCM tcm => ModuleName -> Telescope -> ModuleName -> Args ->-  Map QName QName -> Map ModuleName ModuleName -> tcm ()-applySection new ptel old ts rd rm = liftTCM $ do+  ModuleName -> Telescope -> ModuleName -> Args ->+  Map QName QName -> Map ModuleName ModuleName -> TCM ()+applySection new ptel old ts rd rm = do   sig  <- getSignature   isig <- getImportedSignature   let ss = getOld partOfOldM sigSections    [sig, isig]@@ -203,6 +305,7 @@     ]   mapM_ (copyDef ts) ds   mapM_ (copySec ts) ss+  mapM_ computePolarity (Map.elems rd)   where     getOld partOfOld fromSig sigs =       Map.toList $ Map.filterKeys partOfOld $ Map.unions $ map fromSig sigs@@ -217,51 +320,68 @@ 	Nothing -> return ()  -- if it's not in the renaming it was private and 			      -- we won't need it 	Just y	-> do-	  addConstant y (nd y)-          computePolarity y  -- AA: Polarity.sizePolarity needs also constructor names+	  addConstant y =<< nd y+          makeProjection y 	  -- Set display form for the old name if it's not a constructor. 	  unless (isCon || size ptel > 0) $ do 	    addDisplayForms y       where 	t  = defType d `apply` ts 	-- the name is set by the addConstant function-	nd y = Defn (defRelevance d) y t [] (-1) def  -- TODO: mutual block?+	nd y = Defn (defRelevance d) y t [] (-1) noCompiledRep <$> def  -- TODO: mutual block?         oldDef = theDef d 	isCon = case oldDef of 	  Constructor{} -> True 	  _		-> False-        -- TODO: compute polarity for the new definition+        getOcc d = case d of+          Function { funArgOccurrences  = os } -> os+          Datatype { dataArgOccurrences = os } -> os+          Record   { recArgOccurrences  = os } -> os+          _ -> []+        oldOcc = getOcc oldDef 	def  = case oldDef of-                Constructor{ conPars = np, conData = d } ->+                Constructor{ conPars = np, conData = d } -> return $                   oldDef { conPars = np - size ts, conData = copyName d }-                Datatype{ dataPars = np, dataCons = cs } ->-                  oldDef { dataPars = np - size ts, dataClause = Just cl, dataCons = map copyName cs }-                Record{ recPars = np, recConType = t, recTel = tel } ->+                Datatype{ dataPars = np, dataCons = cs } -> return $+                  oldDef { dataPars = np - size ts, dataClause = Just cl, dataCons = map copyName cs+                         , dataArgOccurrences = drop (length ts) oldOcc }+                Record{ recPars = np, recConType = t, recTel = tel } -> return $                   oldDef { recPars = np - size ts, recClause = Just cl                          , recConType = apply t ts, recTel = apply tel ts+                         , recArgOccurrences = drop (length ts) oldOcc                          }-		_ ->-                  Function { funClauses        = [cl2]-                           , funCompiled       = cc-                           , funDelayed        = NotDelayed-                           , funInv            = NotInjective-                           , funPolarity       = []-                           , funArgOccurrences = []-                           , funAbstr          = ConcreteDef-                           , funProjection     = fmap (nonNeg . \ n -> n - size ts) maybeNum-                           }-                  where maybeNum = case oldDef of-                                     Function { funProjection = mn } -> mn-                                     _                               -> Nothing-                        nonNeg n = if n >= 0 then n else __IMPOSSIBLE__+		_ -> do+                  cc <- compileClauses True [cl]+                  let newDef = Function+                        { funClauses        = [cl]+                        , funCompiled       = cc+                        , funDelayed        = NotDelayed+                        , funInv            = NotInjective+                        , funPolarity       = []+                        , funArgOccurrences = drop (length ts') oldOcc+                        , funAbstr          = ConcreteDef+                        , funProjection     = proj+                        , funStatic         = False+                        }+                  reportSLn "tc.mod.apply" 80 $ "new def for " ++ show x ++ "\n  " ++ show newDef+                  return newDef+                  where+                    proj = case oldDef of+                      Function{funProjection = Just (r, n)}+                        | size ts < n -> Just (r, n - size ts)+                      _ -> Nothing+        ts' | null ts   = []+            | otherwise = case oldDef of+                Function{funProjection = Just (_, n)}+                  | n == 0       -> __IMPOSSIBLE__+                  | otherwise    -> drop (n - 1) ts+                _ -> ts 	cl = Clause { clauseRange = getRange $ defClauses d                     , clauseTel   = EmptyTel                     , clausePerm  = idP 0                     , clausePats  = []-                    , clauseBody  = Body $ Def x ts+                    , clauseBody  = Body $ Def x ts'                     }-        cl2 = Clauses Nothing cl-        cc  = compileClauses [cl2]      copySec :: Args -> (ModuleName, Section) -> TCM ()     copySec ts (x, sec) = case Map.lookup x rm of@@ -272,7 +392,7 @@       where 	tel = secTelescope sec -addDisplayForm :: MonadTCM tcm => QName -> DisplayForm -> tcm ()+addDisplayForm :: QName -> DisplayForm -> TCM () addDisplayForm x df = do   d <- makeOpen df   modifyImportedSignature (add d)@@ -283,7 +403,7 @@ 	addDf def = def { defDisplay = df : defDisplay def } 	defs	  = sigDefinitions sig -canonicalName :: MonadTCM tcm => QName -> tcm QName+canonicalName :: QName -> TCM QName canonicalName x = do   def <- theDef <$> getConstInfo x   case def of@@ -292,15 +412,14 @@     Datatype{dataClause = Just (Clause{ clauseBody = body })} -> canonicalName $ extract body     _                                                         -> return x   where-    extract NoBody	     = __IMPOSSIBLE__+    extract NoBody           = __IMPOSSIBLE__     extract (Body (Def x _)) = x-    extract (Body _)	     = __IMPOSSIBLE__-    extract (Bind (Abs _ b)) = extract b-    extract (NoBind b)	     = extract b+    extract (Body _)         = __IMPOSSIBLE__+    extract (Bind b)         = extract (unAbs b)  -- | Can be called on either a (co)datatype, a record type or a --   (co)constructor.-whatInduction :: MonadTCM tcm => QName -> tcm Induction+whatInduction :: QName -> TCM Induction whatInduction c = do   def <- theDef <$> getConstInfo c   case def of@@ -327,6 +446,7 @@  -- | Lookup the definition of a name. The result is a closed thing, all free --   variables have been abstracted over.+{-# SPECIALIZE getConstInfo :: QName -> TCM Definition #-} getConstInfo :: MonadTCM tcm => QName -> tcm Definition getConstInfo q = liftTCM $ join $ pureTCM $ \st env ->   let defs  = sigDefinitions $ stSignature st@@ -359,8 +479,8 @@         init' xs = init xs  -- | Look up the polarity of a definition.-getPolarity :: MonadTCM tcm => QName -> tcm [Polarity]-getPolarity q = liftTCM $ do+getPolarity :: QName -> TCM [Polarity]+getPolarity q = do   defn <- theDef <$> getConstInfo q   case defn of     Function{ funPolarity  = p } -> return p@@ -368,13 +488,13 @@     Record{ recPolarity    = p } -> return p     _                            -> return [] -getPolarity' :: MonadTCM tcm => Comparison -> QName -> tcm [Polarity]+getPolarity' :: Comparison -> QName -> TCM [Polarity] getPolarity' CmpEq _  = return [] getPolarity' CmpLeq q = getPolarity q  -- | Set the polarity of a definition.-setPolarity :: MonadTCM tcm => QName -> [Polarity] -> tcm ()-setPolarity q pol = liftTCM $ do+setPolarity :: QName -> [Polarity] -> TCM ()+setPolarity q pol = do   modifySignature setP   where     setP sig = sig { sigDefinitions = Map.adjust setPx q defs }@@ -387,7 +507,7 @@           _          -> d 	defs	  = sigDefinitions sig -getArgOccurrence :: MonadTCM tcm => QName -> Nat -> tcm Occurrence+getArgOccurrence :: QName -> Nat -> TCM Occurrence getArgOccurrence d i = do   def <- theDef <$> getConstInfo d   return $ case def of@@ -399,8 +519,8 @@   where     look i os = (os ++ repeat Negative) !! fromIntegral i -setArgOccurrences :: MonadTCM tcm => QName -> [Occurrence] -> tcm ()-setArgOccurrences d os = liftTCM $+setArgOccurrences :: QName -> [Occurrence] -> TCM ()+setArgOccurrences d os =   modifySignature setO   where     setO sig = sig { sigDefinitions = Map.adjust setOx d defs }@@ -416,7 +536,7 @@  -- | Look up the number of free variables of a section. This is equal to the --   number of parameters if we're currently inside the section and 0 otherwise.-getSecFreeVars :: MonadTCM tcm => ModuleName -> tcm Nat+getSecFreeVars :: ModuleName -> TCM Nat getSecFreeVars m = do   sig  <- sigSections <$> getSignature   isig <- sigSections <$> getImportedSignature@@ -427,23 +547,23 @@  -- | Compute the number of free variables of a module. This is the sum of --   the free variables of its sections.-getModuleFreeVars :: MonadTCM tcm => ModuleName -> tcm Nat+getModuleFreeVars :: ModuleName -> TCM Nat getModuleFreeVars m = sum <$> ((:) <$> getAnonymousVariables m <*> mapM getSecFreeVars ms)   where     ms = map mnameFromList . inits . mnameToList $ m  -- | Compute the number of free variables of a defined name. This is the sum of --   the free variables of the sections it's contained in.-getDefFreeVars :: MonadTCM tcm => QName -> tcm Nat+getDefFreeVars :: QName -> TCM Nat getDefFreeVars q = getModuleFreeVars (qnameModule q)  -- | Compute the context variables to apply a definition to.-freeVarsToApply :: MonadTCM tcm => QName -> tcm Args+freeVarsToApply :: QName -> TCM Args freeVarsToApply x = genericTake <$> getDefFreeVars x <*> getContextArgs  -- | Instantiate a closed definition with the correct part of the current --   context.-instantiateDef :: MonadTCM tcm => Definition -> tcm Definition+instantiateDef :: Definition -> TCM Definition instantiateDef d = do   vs  <- freeVarsToApply $ defName d   verboseS "tc.sig.inst" 30 $ do@@ -458,27 +578,27 @@ makeAbstract d = do def <- makeAbs $ theDef d 		    return d { theDef = def }     where-	makeAbs Datatype   {dataAbstr = AbstractDef} = Just $ Axiom Nothing Nothing-	makeAbs Function   {funAbstr  = AbstractDef} = Just $ Axiom Nothing Nothing+	makeAbs Datatype   {dataAbstr = AbstractDef} = Just Axiom+	makeAbs Function   {funAbstr  = AbstractDef} = Just Axiom 	makeAbs Constructor{conAbstr  = AbstractDef} = Nothing 	makeAbs d                                    = Just d  -- | Enter abstract mode. Abstract definition in the current module are transparent.-inAbstractMode :: MonadTCM tcm => tcm a -> tcm a+inAbstractMode :: TCM a -> TCM a inAbstractMode = local $ \e -> e { envAbstractMode = AbstractMode }  -- | Not in abstract mode. All abstract definitions are opaque.-inConcreteMode :: MonadTCM tcm => tcm a -> tcm a+inConcreteMode :: TCM a -> TCM a inConcreteMode = local $ \e -> e { envAbstractMode = ConcreteMode }  -- | Ignore abstract mode. All abstract definitions are transparent.-ignoreAbstractMode :: MonadTCM tcm => tcm a -> tcm a+ignoreAbstractMode :: TCM a -> TCM a ignoreAbstractMode = local $ \e -> e { envAbstractMode = IgnoreAbstractMode }  -- | Check whether a name might have to be treated abstractly (either if we're --   'inAbstractMode' or it's not a local name). Returns true for things not --   declared abstract as well, but for those 'makeAbstract' will have no effect.-treatAbstractly :: MonadTCM tcm => QName -> tcm Bool+treatAbstractly :: QName -> TCM Bool treatAbstractly q = treatAbstractly' q <$> ask  treatAbstractly' :: QName -> TCEnv -> Bool@@ -491,15 +611,15 @@     m	    = qnameModule q  -- | get type of a constant-typeOfConst :: MonadTCM tcm => QName -> tcm Type+typeOfConst :: QName -> TCM Type typeOfConst q = defType <$> (instantiateDef =<< getConstInfo q)  -- | get relevance of a constant-relOfConst :: MonadTCM tcm => QName -> tcm Relevance+relOfConst :: QName -> TCM Relevance relOfConst q = defRelevance <$> getConstInfo q  -- | The name must be a datatype.-sortOfConst :: MonadTCM tcm => QName -> tcm Sort+sortOfConst :: QName -> TCM Sort sortOfConst q =     do	d <- theDef <$> getConstInfo q 	case d of@@ -507,7 +627,7 @@ 	    _			   -> fail $ "Expected " ++ show q ++ " to be a datatype."  -- | Is it the name of a record projection?-isProjection :: MonadTCM tcm => QName -> tcm (Maybe Int)+isProjection :: QName -> TCM (Maybe (QName, Int)) isProjection qn = do   def <- theDef <$> getConstInfo qn   case def of
src/full/Agda/TypeChecking/Monad/SizedTypes.hs view
@@ -1,6 +1,7 @@  module Agda.TypeChecking.Monad.SizedTypes where +import Control.Applicative import Control.Monad.Error  import Agda.Interaction.Options@@ -13,7 +14,12 @@ import Agda.Utils.Monad  -- | Check if a type is the 'primSize' type. The argument should be 'reduce'd.-isSizeType :: MonadTCM tcm => Type -> tcm Bool++isSizeType :: Type -> TCM Bool+isSizeType v = isSizeTypeTest <*> pure v++{- ORIGINAL CODE+isSizeType :: Type -> TCM Bool isSizeType (El _ v) = liftTCM $   ifM (not . optSizedTypes <$> pragmaOptions) (return False) $   case v of@@ -22,11 +28,26 @@       return $ x == size     _ -> return False   `catchError` \_ -> return False+-} -sizeType :: MonadTCM tcm => tcm Type+isSizeNameTest :: TCM (QName -> Bool)+isSizeNameTest = liftTCM $+  ifM (not . optSizedTypes <$> pragmaOptions) (return $ const False) $ do+    Def size [] <- primSize+    return (size ==)+  `catchError` \_ -> return $ const False++isSizeTypeTest :: TCM (Type -> Bool)+isSizeTypeTest = do+  testName <- isSizeNameTest+  let testType (El _ (Def d [])) = testName d+      testType _                 = False+  return testType++sizeType :: TCM Type sizeType = El (mkType 0) <$> primSize -sizeSuc :: MonadTCM tcm => tcm (Maybe QName)+sizeSuc :: TCM (Maybe QName) sizeSuc = liftTCM $   ifM (not . optSizedTypes <$> pragmaOptions) (return Nothing) $ do     Def x [] <- primSizeSuc@@ -38,7 +59,7 @@  -- | Compute the size view of a term. The argument should be 'reduce'd. --   Precondition: sized types are enabled.-sizeView :: MonadTCM tcm => Term -> tcm SizeView+sizeView :: Term -> TCM SizeView sizeView v = do   Def inf [] <- primSizeInf   Def suc [] <- primSizeSuc@@ -48,7 +69,7 @@     _                    -> return $ OtherSize v  -- | Turn a size view into a term.-unSizeView :: MonadTCM tcm => SizeView -> tcm Term+unSizeView :: SizeView -> TCM Term unSizeView SizeInf       = primSizeInf unSizeView (SizeSuc v)   = flip apply [Arg NotHidden Relevant v] <$> primSizeSuc unSizeView (OtherSize v) = return v
src/full/Agda/TypeChecking/Monad/State.hs view
@@ -4,6 +4,7 @@ import Control.Applicative import Control.Monad.State import Data.Set (Set)+import Data.Map import qualified Data.Set as Set  import Agda.Syntax.Common@@ -15,30 +16,45 @@  import Agda.Utils.Hash --- | Resets the type checking state. The persistent command line--- options are preserved.+-- | Resets the non-persistent part of the type checking state. -resetState :: MonadTCM tcm => tcm ()-resetState = liftTCM $ do-    opts <- stPersistentOptions <$> get-    put $ initState { stPersistentOptions = opts }+resetState :: TCM ()+resetState = do+    pers <- stPersistent <$> get+    put $ initState { stPersistent = pers } +-- | Resets all of the type checking state.++resetAllState :: TCM ()+resetAllState = put initState+ -- | Set the current scope.-setScope :: MonadTCM tcm => ScopeInfo -> tcm ()-setScope scope = liftTCM $ modify $ \s -> s { stScope = scope }+setScope :: ScopeInfo -> TCM ()+setScope scope = modify $ \s -> s { stScope = scope }  -- | Get the current scope.-getScope :: MonadTCM tcm => tcm ScopeInfo-getScope = liftTCM $ gets stScope+getScope :: TCM ScopeInfo+getScope = gets stScope +-- | Sets stExtLambdaTele .+setExtLambdaTele :: Map QName (Int , Int) -> TCM ()+setExtLambdaTele tele = modify $ \s -> s { stExtLambdaTele = tele }++-- | Get stExtLambdaTele.+getExtLambdaTele :: TCM (Map QName (Int , Int))+getExtLambdaTele = gets stExtLambdaTele++addExtLambdaTele :: QName -> (Int , Int) -> TCM ()+addExtLambdaTele id x = getExtLambdaTele >>= setExtLambdaTele . (insert id x)+ -- | Modify the current scope.-modifyScope :: MonadTCM tcm => (ScopeInfo -> ScopeInfo) -> tcm ()+modifyScope :: (ScopeInfo -> ScopeInfo) -> TCM () modifyScope f = do   s <- getScope   setScope $ f s  -- | Run a computation in a local scope.-withScope :: MonadTCM tcm => ScopeInfo -> tcm a -> tcm (a, ScopeInfo)+withScope :: ScopeInfo -> TCM a -> TCM (a, ScopeInfo) withScope s m = do   s' <- getScope   setScope s@@ -48,11 +64,11 @@   return (x, s'')  -- | Same as 'withScope', but discard the scope from the computation.-withScope_ :: MonadTCM tcm => ScopeInfo -> tcm a -> tcm a+withScope_ :: ScopeInfo -> TCM a -> TCM a withScope_ s m = fst <$> withScope s m  -- | Discard any changes to the scope by a computation.-localScope :: MonadTCM tcm => tcm a -> tcm a+localScope :: TCM a -> TCM a localScope m = do   scope <- getScope   x <- m@@ -61,7 +77,11 @@  -- | Set the top-level module. This affects the global module id of freshly --   generated names.-setTopLevelModule :: MonadTCM tcm => C.QName -> tcm ()++-- TODO: Is the hash-function collision-free? If not, then the+-- implementation of 'setTopLevelModule' should be changed.++setTopLevelModule :: C.QName -> TCM () setTopLevelModule x =   modify $ \s -> s     { stFreshThings = (stFreshThings s)@@ -71,7 +91,7 @@  -- | Use a different top-level module for a computation. Used when generating --   names for imported modules.-withTopLevelModule :: MonadTCM tcm => C.QName -> tcm a -> tcm a+withTopLevelModule :: C.QName -> TCM a -> TCM a withTopLevelModule x m = do   next <- gets $ fName . stFreshThings   setTopLevelModule x@@ -80,10 +100,10 @@   return y  -- | Tell the compiler to import the given Haskell module.-addHaskellImport :: MonadTCM tcm => String -> tcm ()+addHaskellImport :: String -> TCM () addHaskellImport i =   modify $ \s -> s { stHaskellImports = Set.insert i $ stHaskellImports s }  -- | Get the Haskell imports.-getHaskellImports :: MonadTCM tcm => tcm (Set String)+getHaskellImports :: TCM (Set String) getHaskellImports = gets stHaskellImports
src/full/Agda/TypeChecking/Monad/Statistics.hs view
@@ -1,7 +1,6 @@  module Agda.TypeChecking.Monad.Statistics-    ( tick-    , getStatistics+    ( tick, tickN, tickMax, getStatistics     ) where  import Control.Monad.State@@ -10,13 +9,22 @@ import Agda.TypeChecking.Monad.Base  tick :: String -> TCM ()-tick x = modify $ \s ->-  let st' = inc $ stStatistics s in+tick x = tickN x 1++tickN :: String -> Integer -> TCM ()+tickN s n = tick' s (n +)++tick' :: String -> (Integer -> Integer) -> TCM ()+tick' x f = modify $ \s ->+  let st' = upd $ stStatistics s in   force st' `seq` s { stStatistics = st' }   where     -- We need to be strict in the map     force m = sum (Map.elems m)-    inc = Map.insertWith (\_ n -> n + 1) x 1+    upd = Map.insertWith (\_ m -> f m) x (f 0)++tickMax :: String -> Integer -> TCM ()+tickMax s n = tick' s (max n)  getStatistics :: TCM Statistics getStatistics = gets stStatistics
src/full/Agda/TypeChecking/Monad/Trace.hs view
@@ -21,31 +21,35 @@     _			      -> True  -- | Record a function call in the trace.+{-# SPECIALIZE traceCall :: (Maybe r -> Call) -> TCM a -> TCM a #-} traceCall :: MonadTCM tcm => (Maybe r -> Call) -> tcm a -> tcm a traceCall mkCall m = do   let call = mkCall Nothing       r | getRange call /= noRange = const $ getRange call         | otherwise                = id-  cl <- buildClosure call+  cl <- liftTCM $ buildClosure call   let trace | interestingCall cl = local $ \e -> e { envRange = r (envRange e)                                                    , envCall  = Just cl }             | otherwise          = local $ \e -> e { envRange = r (envRange e) }   trace m +{-# SPECIALIZE traceCall_ :: (Maybe () -> Call) -> TCM r -> TCM r #-} traceCall_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm r -> tcm r traceCall_ mkCall = traceCall (mkCall . fmap (const ())) +{-# SPECIALIZE traceCallCPS :: (Maybe r -> Call) -> (r -> TCM a) -> ((r -> TCM a) -> TCM b) -> TCM b #-} traceCallCPS :: MonadTCM tcm => (Maybe r -> Call) -> (r -> tcm a) -> ((r -> tcm a) -> tcm b) -> tcm b traceCallCPS mkCall ret cc = traceCall mkCall (cc ret) +{-# SPECIALIZE traceCallCPS_ :: (Maybe () -> Call) -> TCM a -> (TCM a -> TCM b) -> TCM b #-} traceCallCPS_ :: MonadTCM tcm => (Maybe () -> Call) -> tcm a -> (tcm a -> tcm b) -> tcm b traceCallCPS_ mkCall ret cc =     traceCallCPS mkCall (const ret) (\k -> cc $ k ()) -getCurrentRange :: MonadTCM tcm => tcm Range+getCurrentRange :: TCM Range getCurrentRange = envRange <$> ask -setCurrentRange :: MonadTCM tcm => Range -> tcm a -> tcm a+setCurrentRange :: Range -> TCM a -> TCM a setCurrentRange r   | r == noRange = id   | otherwise    = traceCall (SetRange r)
src/full/Agda/TypeChecking/Patterns/Match.hs view
@@ -41,7 +41,7 @@     -- equivalence to case-trees.     DontKnow m `mappend` _		  = DontKnow m -matchPatterns :: MonadTCM tcm => [Arg Pattern] -> [Arg Term] -> tcm (Match, [Arg Term])+matchPatterns :: [Arg Pattern] -> [Arg Term] -> TCM (Match, [Arg Term]) matchPatterns ps vs = do     reportSDoc "tc.match" 50 $       vcat [ text "matchPatterns"@@ -52,7 +52,7 @@     (ms,vs) <- unzip <$> zipWithM' matchPattern ps vs     return (mconcat ms, vs) -matchPattern :: MonadTCM tcm => Arg Pattern -> Arg Term -> tcm (Match, Arg Term)+matchPattern :: Arg Pattern -> Arg Term -> TCM (Match, Arg Term) matchPattern (Arg h' _  (VarP _)) arg@(Arg _ _ v) = return (Yes [v], arg) matchPattern (Arg _  _  (DotP _)) arg@(Arg _ _ v) = return (Yes [v], arg) matchPattern (Arg h' r' (LitP l)) arg@(Arg h r v) = do@@ -71,7 +71,7 @@           -- something irrelevant will just continue matching against           -- irrelevant stuff 		(m, vs) <- matchPatterns ps $-                  repeat $ Arg NotHidden Irrelevant $ Sort Prop+                  repeat $ Arg NotHidden Irrelevant $ DontCare __IMPOSSIBLE__ 		return (m, Arg h Irrelevant $ Con c vs)  matchPattern (Arg h' r' (ConP c _ ps))     (Arg h r v) =
src/full/Agda/TypeChecking/Patterns/Match.hs-boot view
@@ -7,5 +7,4 @@  data Match = Yes [Term] | No | DontKnow (Maybe MetaId) -matchPatterns :: MonadTCM tcm => [Arg Pattern] -> [Arg Term] -> tcm (Match, [Arg Term])-+matchPatterns :: [Arg Pattern] -> [Arg Term] -> TCM (Match, [Arg Term])
src/full/Agda/TypeChecking/Polarity.hs view
@@ -27,7 +27,7 @@   def <- theDef <$> getConstInfo x   case def of     Axiom{}                                 -> return 0-    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats $ translatedClause c)+    Function{ funClauses = c : _ }          -> return $ genericLength (clausePats c)     Function{ funClauses = [] }             -> return 0     Datatype{ dataPars = np, dataIxs = ni } -> return np     Record{ recPars = n }                   -> return n@@ -136,7 +136,8 @@   polarities i = polarities i . unArg  instance HasPolarity a => HasPolarity (Abs a) where-  polarities i = polarities (i + 1) . absBody+  polarities i (Abs   _ b) = polarities (i + 1) b+  polarities i (NoAbs _ v) = polarities i v  instance HasPolarity a => HasPolarity [a] where   polarities i xs = concat <$> mapM (polarities i) xs@@ -153,13 +154,27 @@               | otherwise -> polarities i ts     Lam _ t    -> polarities i t     Lit _      -> return []+    Level l    -> polarities i l     Def x ts   -> do       pols <- getPolarity x       let compose p ps = map (composePol p) ps       concat . zipWith compose (pols ++ repeat Invariant) <$> mapM (polarities i) ts     Con _ ts   -> polarities i ts     Pi a b     -> (++) <$> (map neg <$> polarities i a) <*> polarities i b-    Fun a b    -> (++) <$> (map neg <$> polarities i a) <*> polarities i b     Sort _     -> return []     MetaV _ ts -> map (const Invariant) <$> polarities i ts-    DontCare   -> return []+    DontCare _ -> return []++instance HasPolarity Level where+  polarities i (Max as) = polarities i as++instance HasPolarity PlusLevel where+  polarities i ClosedLevel{} = return []+  polarities i (Plus _ l) = polarities i l++instance HasPolarity LevelAtom where+  polarities i l = case l of+    MetaLevel _ vs   -> map (const Invariant) <$> polarities i l+    BlockedLevel _ v -> polarities i v+    NeutralLevel v   -> polarities i v+    UnreducedLevel v -> polarities i v
src/full/Agda/TypeChecking/Polarity.hs-boot view
@@ -5,4 +5,3 @@ import Agda.TypeChecking.Monad.Base  computePolarity :: QName -> TCM ()-
src/full/Agda/TypeChecking/Positivity.hs view
@@ -35,6 +35,7 @@   qs <- lookupMutualBlock mi   reportSDoc "tc.pos.tick" 100 $ text "positivity of" <+> prettyTCM (Set.toList qs)   g  <- buildOccurrenceGraph qs+  let gstar = Graph.transitiveClosure $ fmap occ g   reportSDoc "tc.pos.tick" 100 $ text "constructed graph"   reportSLn "tc.pos.graph" 5 $ "Positivity graph: N=" ++ show (size $ Graph.nodes g) ++                                " E=" ++ show (length $ Graph.edges g)@@ -42,7 +43,7 @@     [ text "positivity graph for" <+> prettyTCM (Set.toList qs)     , nest 2 $ prettyGraph g     ]-  mapM_ (setArgs g) $ Set.toList qs+  mapM_ (setArgs gstar) $ Set.toList qs   reportSDoc "tc.pos.tick" 100 $ text "set args"   whenM positivityCheckEnabled $     mapM_ (checkPos g) $ Set.toList qs@@ -60,6 +61,7 @@             [prettyTCM how]           setCurrentRange (getRange q) $ typeError $ GenericError (show err) +    occ (Edge o _) = o     isNegative (Edge o _) = o == Negative      isDatatype q = do@@ -69,25 +71,18 @@         Record  {recClause  = Nothing} -> True         _ -> False -    getArity q = do-      def <- theDef <$> getConstInfo q-      return $ case def of-        Function{ funClauses = c : _ } -> size $ clausePats $ translatedClause c-        Datatype{ dataPars = n }       -> n-        Record{ recPars = n }          -> n-        _                              -> 0-     -- Set the polarity of the arguments to a definition     setArgs g q = do       reportSDoc "tc.pos.args" 5 $ text "checking args of" <+> prettyTCM q-      n <- getArity q+      n <- getDefArity =<< getConstInfo q       let nArgs = maximum $ n :                     [ i + 1 | (ArgNode q1 i) <- Set.toList $ Graph.nodes g                     , q1 == q ]-          findOcc i = case Graph.allPaths isNegative (ArgNode q i) (DefNode q) g of-            []                     -> Unused -- Unused is not good for datatypes (why not? let's do it anyway!)-            es | any isNegative es -> Negative-               | otherwise         -> Positive+          findOcc i = case Graph.lookup (ArgNode q i) (DefNode q) g of+              Nothing -> Unused+              Just Negative -> Negative+              Just Positive -> Positive+              Just Unused   -> Unused           args = map findOcc [0..nArgs - 1]       reportSDoc "tc.pos.args" 10 $ sep         [ text "args of" <+> prettyTCM q <+> text "="@@ -95,6 +90,14 @@         ]       setArgOccurrences q args +getDefArity def = case theDef def of+  Function{ funClauses = cs, funProjection = proj } -> do+    let dropped = maybe 0 (fromIntegral . subtract 1 . snd) proj+    subtract dropped . arity <$> instantiateFull (defType def)+  Datatype{ dataPars = n } -> return n+  Record{ recPars = n }    -> return n+  _                        -> return 0+ -- Specification of occurrences -------------------------------------------  instance SemiRing Occurrence where@@ -229,16 +232,12 @@  instance ComputeOccurrences Clause where   occurrences vars (Clause{ clausePats = ps, clauseBody = body }) =-    -- We don't treat pattern matching as something dangerous-    -- concatOccurs (zipWith match [0..] ps) >+<     walk vars (patItems ps) body     where       walk _    _         NoBody     = Map.empty       walk vars []        (Body v)   = occurrences vars v       walk vars (i : pis) (Bind b)   = walk (i : vars) pis $ absBody b-      walk vars (_ : pis) (NoBind b) = walk vars pis b       walk _    []        Bind{}     = __IMPOSSIBLE__-      walk _    []        NoBind{}   = __IMPOSSIBLE__       walk _    (_ : _)   Body{}     = __IMPOSSIBLE__        match i (Arg _ _ VarP{}) = Map.empty@@ -246,7 +245,9 @@        patItems ps = concat $ zipWith patItem [0..] $ map unArg ps       patItem i (VarP _) = [Just (AnArg i)]-      patItem i p        = replicate (nVars p) (Just (AnArg i)) -- Nothing+      patItem i p        = replicate (nVars p) (Just (AnArg i))+        -- if we're pattern matching it's not something the positivity checker needs to worry about+        -- Actually it is: see issue 464        nVars p = case p of         VarP{}      -> 1@@ -257,7 +258,7 @@ instance ComputeOccurrences Term where   occurrences vars v = case v of     Var i args ->-      maybe Map.empty here (vars ! fromIntegral i)+      maybe Map.empty here (index vars $ fromIntegral i)       >+< occursAs VarArg (occurrences vars args)     Def d args   ->       here (ADef d) >+<@@ -266,19 +267,32 @@     MetaV _ args -> occursAs MetaArg $ occurrences vars args     Pi a b       -> occursAs LeftOfArrow (occurrences vars a) >+<                     occurrences vars b-    Fun a b      -> occursAs LeftOfArrow (occurrences vars a) >+<-                    occurrences vars b     Lam _ b      -> occurrences vars b+    Level l      -> occurrences vars l     Lit{}        -> Map.empty     Sort{}       -> Map.empty-    DontCare     -> Map.empty+    DontCare _   -> Map.empty -- Andreas, 2011-09-09: do we need to check for negative occurrences in irrelevant positions?     where       -- Apparently some development version of GHC chokes if the       -- following line is replaced by vs ! i.-      (!) vs i+      index vs i         | i < length vs = vs !! i-        | otherwise     = error $ show vs ++ " ! " ++ show i ++ "  (" ++ show v ++ ")"+        | otherwise     = __IMPOSSIBLE__ +instance ComputeOccurrences Level where+  occurrences vars (Max as) = occurrences vars as++instance ComputeOccurrences PlusLevel where+  occurrences vars ClosedLevel{} = Map.empty+  occurrences vars (Plus _ l) = occurrences vars l++instance ComputeOccurrences LevelAtom where+  occurrences vars l = case l of+    MetaLevel _ vs   -> occursAs MetaArg $ occurrences vars vs+    BlockedLevel _ v -> occurrences vars v+    NeutralLevel v   -> occurrences vars v+    UnreducedLevel v -> occurrences vars v+ instance ComputeOccurrences Type where   occurrences vars (El _ v) = occurrences vars v @@ -287,7 +301,8 @@   occurrences vars (ExtendTel a b) = occurrences vars (a, b)  instance ComputeOccurrences a => ComputeOccurrences (Abs a) where-  occurrences vars = occurrences (Nothing : vars) . absBody+  occurrences vars (Abs   _ b) = occurrences (Nothing : vars) b+  occurrences vars (NoAbs _ b) = occurrences vars b  instance ComputeOccurrences a => ComputeOccurrences (Arg a) where   occurrences vars = occurrences vars . unArg@@ -304,9 +319,8 @@   def <- getConstInfo q   occursAs (InDefOf q) <$> case theDef def of     Function{funClauses = cs} -> do-      n  <- arity <$> instantiateFull (defType def)-      cs <- map (etaExpandClause n) <$>-              instantiateFull (map translatedClause cs)+      n  <- getDefArity def+      cs <- map (etaExpandClause n) <$> instantiateFull cs       return         $ concatOccurs         $ zipWith (occursAs . InClause) [0..]@@ -350,7 +364,6 @@     vars = reverse [ defaultArg $ Var i [] | i <- [0..m - 1] ]      liftBody m (Bind b)   = Bind $ fmap (liftBody m) b-    liftBody m (NoBind b) = NoBind $ liftBody m b     liftBody m NoBody     = bind m NoBody     liftBody m (Body v)   = bind m $ Body $ raise m v `apply` vars 
src/full/Agda/TypeChecking/Pretty.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP, TypeSynonymInstances, UndecidableInstances #-}+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,+             UndecidableInstances #-} module Agda.TypeChecking.Pretty where  import Control.Applicative hiding (empty)@@ -13,6 +14,7 @@ import qualified Agda.Syntax.Concrete.Pretty as P  import Agda.TypeChecking.Monad+import Agda.TypeChecking.Eliminators  import qualified Agda.Utils.Pretty as P import Agda.Utils.Impossible@@ -25,24 +27,28 @@  type Doc = P.Doc -empty, comma :: MonadTCM tcm => tcm Doc+empty, comma :: TCM Doc  empty	   = return P.empty comma	   = return P.comma pretty x   = return $ P.pretty x prettyA x  = P.prettyA x+text :: String -> TCM Doc text s	   = return $ P.text s pwords s   = map return $ P.pwords s fwords s   = return $ P.fwords s+sep, fsep, hsep, vcat :: [TCM Doc] -> TCM Doc sep ds	   = P.sep <$> sequence ds fsep ds    = P.fsep <$> sequence ds hsep ds    = P.hsep <$> sequence ds vcat ds    = P.vcat <$> sequence ds+($$), (<>), (<+>) :: TCM Doc -> TCM Doc -> TCM Doc d1 $$ d2   = (P.$$) <$> d1 <*> d2 d1 <> d2   = (P.<>) <$> d1 <*> d2 d1 <+> d2  = (P.<+>) <$> d1 <*> d2 nest n d   = P.nest n <$> d braces d   = P.braces <$> d+dbraces d  = P.dbraces <$> d brackets d = P.brackets <$> d parens d   = P.parens <$> d @@ -58,7 +64,7 @@ ---------------------------------------------------------------------------  class PrettyTCM a where-    prettyTCM :: MonadTCM tcm => a -> tcm Doc+    prettyTCM :: a -> TCM Doc  instance PrettyTCM a => PrettyTCM (Closure a) where     prettyTCM cl = enterClosure cl prettyTCM@@ -71,6 +77,7 @@ instance PrettyTCM Sort where prettyTCM x = prettyA =<< reify x instance PrettyTCM DisplayTerm where prettyTCM x = prettyA =<< reify x instance PrettyTCM NamedClause where prettyTCM x = prettyA =<< reify x+instance PrettyTCM Level where prettyTCM x = prettyA =<< reify (Level x)  instance PrettyTCM ClauseBody where   prettyTCM b = do@@ -79,16 +86,13 @@     where       walk NoBody = return ([], P.text "()")       walk (Body v) = (,) [] <$> prettyTCM v-      walk (NoBind b) = do-        (bs, v) <- walk b-        return (text "." : bs, v)       walk (Bind b) = do         (bs, v) <- underAbstraction_ b walk         return (text (absName b) : bs, v)  instance (PrettyTCM a, PrettyTCM b) => PrettyTCM (Judgement a b) where   prettyTCM (HasType a t) = prettyTCM a <+> text ":" <+> prettyTCM t-  prettyTCM (IsSort a)    = text "Sort" <+> prettyTCM a+  prettyTCM (IsSort  a t) = text "Sort" <+> prettyTCM a <+> text ":" <+> prettyTCM t  instance PrettyTCM MetaId where   prettyTCM = text . show@@ -100,11 +104,16 @@ instance (Reify a e, ToConcrete e c, P.Pretty c) => PrettyTCM (Arg a) where     prettyTCM x = prettyA =<< reify x +instance PrettyTCM Elim where+  prettyTCM (Apply v) = text "$" <+> prettyTCM v+  prettyTCM (Proj f)  = text "." <> prettyTCM f+ instance PrettyTCM A.Expr where     prettyTCM = prettyA  instance PrettyTCM Relevance where   prettyTCM Irrelevant = text "."+  prettyTCM NonStrict  = text ".."   prettyTCM Relevant   = empty   prettyTCM Forced     = empty @@ -112,6 +121,9 @@   prettyTCM CmpEq  = text "=="   prettyTCM CmpLeq = text "=<" +instance PrettyTCM ProblemConstraint where+  prettyTCM (PConstr pid c) = brackets (text $ show pid) <+> prettyTCM c+ instance PrettyTCM Constraint where     prettyTCM c = case c of 	ValueCmp cmp ty s t ->@@ -120,15 +132,11 @@ 		      ] 		, nest 2 $ text ":" <+> prettyTCM ty 		]-        ArgsCmp cmps t us vs ->-          sep [ prettyList-                [ sep [ prettyTCM u-                      , nest 2 $ text "~~" <+> prettyTCM v-                      , nest 2 $ text (show cmp)-                      ] | (cmp, u, v) <- zip3 cmps us vs-                ]-              , nest 2 $ text ":" <+> prettyTCM t-              ]+        ElimCmp cmps t v us vs ->+          sep [ sep [ prettyTCM us+                    , nest 2 $ text "~~" <+> prettyTCM vs+                    ]+              , text ":" <+> prettyTCM t ] 	LevelCmp cmp a b -> 	    sep [ prettyTCM a 		, prettyTCM cmp <+> prettyTCM b@@ -137,17 +145,17 @@ 	    sep [ prettyTCM a 		, prettyTCM cmp <+> prettyTCM b 		]-	TelCmp cmp a b ->-	    sep [ prettyTCM a-		, prettyTCM cmp <+> prettyTCM b+	TelCmp a b cmp tela telb ->+	    sep [ prettyTCM tela+		, prettyTCM cmp <+> prettyTCM telb 		] 	SortCmp cmp s1 s2 -> 	    sep [ prettyTCM s1 		, prettyTCM cmp <+> prettyTCM s2 		]-	Guarded c cs ->+	Guarded c pid -> 	    sep [ prettyTCM c-		, nest 2 $ brackets $ sep $ punctuate comma $ map prettyTCM cs+		, nest 2 $ brackets $ text "blocked on problem" <+> text (show pid) 		] 	UnBlock m   -> do 	    -- BlockedConst t <- mvInstantiation <$> lookupMeta m@@ -159,13 +167,15 @@                     ]               PostponedTypeCheckingProblem cl -> enterClosure cl $ \(e, a, _) ->                 sep [ text (show m) <+> text ":="-                    , nest 2 $ sep [ prettyA e <+> text ":"+                    , nest 2 $ sep [ prettyA e <+> text ":?"                                    , prettyTCM a                                    ]                     ]               Open{}  -> __IMPOSSIBLE__+              OpenIFS{}  -> __IMPOSSIBLE__               InstS{} -> __IMPOSSIBLE__               InstV{} -> __IMPOSSIBLE__+	FindInScope m   -> sep [ text $ "Find in scope " ++ (show m) ]         IsEmpty t ->             sep [ text "Is empty:", nest 2 $ prettyTCM t ] @@ -201,11 +211,7 @@             where               par NotHidden = P.parens               par Hidden    = P.braces-{--              rel Irrelevant x = P.text "." P.<> x-              rel Relevant x   = x-              rel Forced   x   = x--}+              par Instance  = P.dbraces  instance PrettyTCM Context where   prettyTCM = prettyTCM . PrettyContext
+ src/full/Agda/TypeChecking/Pretty.hs-boot view
@@ -0,0 +1,26 @@+module Agda.TypeChecking.Pretty where++import Agda.Syntax.Common+import Agda.Syntax.Internal+import Agda.Syntax.Literal++import Agda.TypeChecking.Monad+import Agda.Utils.Pretty (Doc)+import qualified Agda.Utils.Pretty as P++text                  :: String             -> TCM Doc+sep, fsep, hsep, vcat :: [TCM Doc]          -> TCM Doc+($$), (<>), (<+>)     :: TCM Doc -> TCM Doc -> TCM Doc++class PrettyTCM a where+    prettyTCM :: a -> TCM Doc++instance PrettyTCM a => PrettyTCM (Closure a) where+instance PrettyTCM a => PrettyTCM [a] where++instance PrettyTCM Name where+instance PrettyTCM QName where+instance PrettyTCM Term where+instance PrettyTCM Type where+instance PrettyTCM Sort where+instance PrettyTCM DisplayTerm where
src/full/Agda/TypeChecking/Primitive.hs view
@@ -12,6 +12,8 @@ import qualified Data.Map as Map import Data.Char +import Agda.Interaction.Options+ import Agda.Syntax.Position import Agda.Syntax.Common hiding (Nat) import Agda.Syntax.Internal@@ -25,9 +27,11 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Substitute import Agda.TypeChecking.Errors+import Agda.TypeChecking.Quote (quoteType, quotingKit) import Agda.TypeChecking.Pretty ()  -- instances only import {-# SOURCE #-} Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Level  import Agda.Utils.Monad import Agda.Utils.Pretty (pretty)@@ -36,17 +40,20 @@ import Agda.Utils.Impossible  -- | Rewrite a literal to constructor form if possible.-constructorForm :: MonadTCM tcm => Term -> tcm Term+constructorForm :: Term -> TCM Term constructorForm v = case v of-    Lit (LitInt r n)   -> cons primZero primSuc (LitInt r) n-    Lit (LitLevel r n) -> cons primLevelZero primLevelSuc (LitLevel r) n-    _                  -> return v+-- Andreas, 2011-10-03, the following line restores IrrelevantLevel+    DontCare v                  -> constructorForm v+    Lit (LitInt r n)            -> cons primZero primSuc (Lit . LitInt r) n+--     Level (Max [])              -> primLevelZero+--     Level (Max [ClosedLevel n]) -> cons primLevelZero primLevelSuc (Level . Max . (:[]) . ClosedLevel) n+    _                           -> return v   where     cons pZero pSuc lit n       | n == 0  = pZero       | n > 0   = do         s <- pSuc-        return $ s `apply` [defaultArg $ Lit $ lit $ n - 1]+        return $ s `apply` [defaultArg $ lit $ n - 1]       | otherwise	= return v  ---------------------------------------------------------------------------@@ -73,7 +80,7 @@     show = show . unNat  class PrimType a where-    primType :: MonadTCM tcm => a -> tcm Type+    primType :: a -> TCM Type  instance (PrimType a, PrimType b) => PrimTerm (a -> b) where     primTerm _ = unEl <$> (primType (undefined :: a) --> primType (undefined :: b))@@ -81,7 +88,7 @@ instance PrimTerm a => PrimType a where     primType _ = el $ primTerm (undefined :: a) -class	 PrimTerm a	  where primTerm :: MonadTCM tcm => a -> tcm Term+class	 PrimTerm a	  where primTerm :: a -> TCM Term instance PrimTerm Integer where primTerm _ = primInteger instance PrimTerm Bool	  where primTerm _ = primBool instance PrimTerm Char	  where primTerm _ = primChar@@ -90,6 +97,7 @@ instance PrimTerm Nat	  where primTerm _ = primNat instance PrimTerm Lvl     where primTerm _ = primLevel instance PrimTerm QName   where primTerm _ = primQName+instance PrimTerm Type    where primTerm _ = primAgdaType  instance PrimTerm a => PrimTerm [a] where     primTerm _ = list (primTerm (undefined :: a))@@ -100,11 +108,11 @@ -- From Agda term to Haskell value  class ToTerm a where-    toTerm :: MonadTCM tcm => tcm (a -> Term)+    toTerm :: TCM (a -> Term)  instance ToTerm Integer where toTerm = return $ Lit . LitInt noRange instance ToTerm Nat	where toTerm = return $ Lit . LitInt noRange . unNat-instance ToTerm Lvl	where toTerm = return $ Lit . LitLevel noRange . unLvl+instance ToTerm Lvl	where toTerm = return $ Level . Max . (:[]) . ClosedLevel . unLvl instance ToTerm Double  where toTerm = return $ Lit . LitFloat noRange instance ToTerm Char	where toTerm = return $ Lit . LitChar noRange instance ToTerm Str	where toTerm = return $ Lit . LitString noRange . unStr@@ -116,9 +124,12 @@ 	false <- primFalse 	return $ \b -> if b then true else false +instance ToTerm Type where+    toTerm = snd <$> quotingKit+ -- | @buildList A ts@ builds a list of type @List A@. Assumes that the terms --   @ts@ all have type @A@.-buildList :: MonadTCM tcm => tcm ([Term] -> Term)+buildList :: TCM ([Term] -> Term) buildList = do     nil'  <- primNil     cons' <- primCons@@ -137,7 +148,7 @@ type FromTermFunction a = Arg Term -> TCM (Reduced (MaybeReduced (Arg Term)) a)  class FromTerm a where-    fromTerm :: MonadTCM tcm => tcm (FromTermFunction a)+    fromTerm :: TCM (FromTermFunction a)  instance FromTerm Integer where     fromTerm = fromLiteral $ \l -> case l of@@ -150,9 +161,9 @@ 	_	   -> Nothing  instance FromTerm Lvl where-    fromTerm = fromLiteral $ \l -> case l of-	LitLevel _ n -> Just $ Lvl n-	_	     -> Nothing+    fromTerm = fromReducedTerm $ \l -> case l of+	Level (Max [ClosedLevel n]) -> Just $ Lvl n+	_                           -> Nothing  instance FromTerm Double where     fromTerm = fromLiteral $ \l -> case l of@@ -223,47 +234,121 @@           _ -> return $ NoReduction (reduced b)  -- | Conceptually: @redBind m f k = either (return . Left . f) k =<< m@-redBind :: MonadTCM tcm => tcm (Reduced a a') -> (a -> b) ->-	     (a' -> tcm (Reduced b b')) -> tcm (Reduced b b')+redBind :: TCM (Reduced a a') -> (a -> b) ->+	     (a' -> TCM (Reduced b b')) -> TCM (Reduced b b') redBind ma f k = do     r <- ma     case r of 	NoReduction x	-> return $ NoReduction $ f x 	YesReduction y	-> k y -redReturn :: MonadTCM tcm => a -> tcm (Reduced a' a)+redReturn :: a -> TCM (Reduced a' a) redReturn = return . YesReduction -fromReducedTerm :: MonadTCM tcm => (Term -> Maybe a) -> tcm (FromTermFunction a)+fromReducedTerm :: (Term -> Maybe a) -> TCM (FromTermFunction a) fromReducedTerm f = return $ \t -> do     b <- reduceB t     case f $ unArg (ignoreBlocking b) of 	Just x	-> return $ YesReduction x 	Nothing	-> return $ NoReduction (reduced b) -fromLiteral :: MonadTCM tcm => (Literal -> Maybe a) -> tcm (FromTermFunction a)+fromLiteral :: (Literal -> Maybe a) -> TCM (FromTermFunction a) fromLiteral f = fromReducedTerm $ \t -> case t of     Lit lit -> f lit     _	    -> Nothing --- trustMe : {A : Set}{a b : A} -> a ≡ b-primTrustMe :: MonadTCM tcm => tcm PrimitiveImpl+-- trustMe : {a : Level} {A : Set a} {x y : A} -> x ≡ y+primTrustMe :: TCM PrimitiveImpl primTrustMe = do-  refl <- primRefl-  t    <- hPi "A" tset $ hPi "a" (el $ var 0) $ hPi "b" (el $ var 1) $-          el (primEquality <#> var 2 <@> var 1 <@> var 0)-  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 3 $ \ts ->+  clo <- commandLineOptions+  when (optSafe clo) (typeError SafeFlagPrimTrustMe)+  t    <- hPi "a" (el primLevel) $+          hPi "A" (return $ sort $ varSort 0) $+          hPi "x" (El (varSort 1) <$> var 0) $+          hPi "y" (El (varSort 2) <$> var 1) $+          El (varSort 3) <$>+            primEquality <#> var 3 <#> var 2 <@> var 1 <@> var 0+  Con rf [] <- primRefl+  n         <- conPars . theDef <$> getConstInfo rf+  let refl x | n == 2    = Con rf [Arg Hidden Forced x]+             | n == 3    = Con rf []+             | otherwise = __IMPOSSIBLE__+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 4 $ \ts ->       case ts of-        [t, a, b] -> liftTCM $ do-              noConstraints $ equalTerm (El (mkType 0) $ unArg t) (unArg a) (unArg b)-              rf <- return refl -- <#> return (unArg t) <#> return (unArg a)-              redReturn rf-            `catchError` \_ -> return (NoReduction $ map notReduced [t, a, b])+        [a, t, x, y] -> liftTCM $ do+              noConstraints $+                equalTerm (El (Type $ lvlView $ unArg a) (unArg t))+                          (unArg x) (unArg y)+              redReturn (refl $ unArg x)+            `catchError` \_ -> return (NoReduction $ map notReduced [a, t, x, y])         _ -> __IMPOSSIBLE__ +primQNameType :: TCM PrimitiveImpl+primQNameType = mkPrimFun1TCM (el primQName --> el primAgdaType) typeOfConst++primQNameDefinition :: TCM PrimitiveImpl+primQNameDefinition = do+  let argQName qn = [defaultArg (Lit (LitQName noRange qn))]+      app mt xs = do t <- mt+                     return $ apply t xs++      con qn Function{}    = app primAgdaDefinitionFunDef    (argQName qn)+      con qn Datatype{}    = app primAgdaDefinitionDataDef   (argQName qn)+      con qn Record{}      = app primAgdaDefinitionRecordDef (argQName qn)+      con _  Axiom{}       = app primAgdaDefinitionPostulate []+      con _  Primitive{}   = app primAgdaDefinitionPrimitive []+      con _  Constructor{} = app primAgdaDefinitionDataConstructor []++  unquoteQName <- fromTerm+  t <- el primQName --> el primAgdaDefinition+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 1 $ \ts ->+    case ts of+      [v] -> liftTCM $+        redBind (unquoteQName v)+            (\v' -> [v']) $ \x ->+        redReturn =<< con x . theDef =<< getConstInfo x+      _ -> __IMPOSSIBLE__++primDataConstructors :: TCM PrimitiveImpl+primDataConstructors = mkPrimFun1TCM (el primAgdaDataDef --> el (list primQName))+                                     (fmap (dataCons . theDef) . getConstInfo)++mkPrimLevelZero :: TCM PrimitiveImpl+mkPrimLevelZero = do+  t <- primType (undefined :: Lvl)+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 0 $ \_ -> redReturn $ Level $ Max []++mkPrimLevelSuc :: TCM PrimitiveImpl+mkPrimLevelSuc = do+  t <- primType (id :: Lvl -> Lvl)+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 1 $ \ ~[a] -> liftTCM $ do+    l <- levelView $ unArg a+    redReturn $ Level $ levelSuc l++mkPrimLevelMax :: TCM PrimitiveImpl+mkPrimLevelMax = do+  t <- primType (max :: Op Lvl)+  return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 2 $ \ ~[a, b] -> liftTCM $ do+    Max as <- levelView $ unArg a+    Max bs <- levelView $ unArg b+    redReturn $ Level $ levelMax $ as ++ bs++mkPrimFun1TCM :: (FromTerm a, ToTerm b) => TCM Type -> (a -> TCM b) -> TCM PrimitiveImpl+mkPrimFun1TCM mt f = do+    toA   <- fromTerm+    fromB <- toTerm+    t     <- mt+    return $ PrimImpl t $ PrimFun __IMPOSSIBLE__ 1 $ \ts ->+      case ts of+        [v] -> liftTCM $+          redBind (toA v)+              (\v' -> [v']) $ \x ->+          redReturn . fromB =<< f x+        _ -> __IMPOSSIBLE__+ -- Tying the knot-mkPrimFun1 :: (MonadTCM tcm, PrimType a, PrimType b, FromTerm a, ToTerm b) =>-	      (a -> b) -> tcm PrimitiveImpl+mkPrimFun1 :: (PrimType a, PrimType b, FromTerm a, ToTerm b) =>+	      (a -> b) -> TCM PrimitiveImpl mkPrimFun1 f = do     toA   <- fromTerm     fromB <- toTerm@@ -276,8 +361,8 @@           redReturn $ fromB $ f x         _ -> __IMPOSSIBLE__ -mkPrimFun2 :: (MonadTCM tcm, PrimType a, PrimType b, PrimType c, FromTerm a, ToTerm a, FromTerm b, ToTerm c) =>-	      (a -> b -> c) -> tcm PrimitiveImpl+mkPrimFun2 :: (PrimType a, PrimType b, PrimType c, FromTerm a, ToTerm a, FromTerm b, ToTerm c) =>+	      (a -> b -> c) -> TCM PrimitiveImpl mkPrimFun2 f = do     toA   <- fromTerm     fromA <- toTerm@@ -295,13 +380,12 @@           redReturn $ fromC $ f x y         _ -> __IMPOSSIBLE__ -mkPrimFun4 :: ( MonadTCM tcm-              , PrimType a, FromTerm a, ToTerm a+mkPrimFun4 :: ( PrimType a, FromTerm a, ToTerm a               , PrimType b, FromTerm b, ToTerm b               , PrimType c, FromTerm c, ToTerm c               , PrimType d, FromTerm d               , PrimType e, ToTerm e) =>-	      (a -> b -> c -> d -> e) -> tcm PrimitiveImpl+	      (a -> b -> c -> d -> e) -> TCM PrimitiveImpl mkPrimFun4 f = do     (toA, fromA) <- (,) <$> fromTerm <*> toTerm     (toB, fromB) <- (,) <$> fromTerm <*> toTerm@@ -334,48 +418,49 @@ -- Type combinators infixr 4 --> -(-->) :: MonadTCM tcm => tcm Type -> tcm Type -> tcm Type+(-->) :: TCM Type -> TCM Type -> TCM Type a --> b = do     a' <- a     b' <- b-    return $ El (getSort a' `sLub` getSort b') $ Fun (defaultArg a') b'+    return $ El (getSort a' `sLub` getSort b') $ Pi (defaultArg a') (NoAbs "_" b') -gpi :: MonadTCM tcm => Hiding -> Relevance -> String -> tcm Type -> tcm Type -> tcm Type+gpi :: Hiding -> Relevance -> String -> TCM Type -> TCM Type -> TCM Type gpi h r name a b = do-    a' <- a-    x  <- freshName_ name-    b' <- addCtx x (Arg h r a') b-    return $ El (getSort a' `sLub` getSort b') $ Pi (Arg h r a') (Abs name b')+  a <- a+  x <- freshName_ name+  b <- addCtx x (Arg h r a) b+  return $ El (getSort a `dLub` Abs name (getSort b))+              (Pi (Arg h r a) (Abs name b)) -hPi, nPi :: MonadTCM tcm => String -> tcm Type -> tcm Type -> tcm Type+hPi, nPi :: String -> TCM Type -> TCM Type -> TCM Type hPi = gpi Hidden Relevant nPi = gpi NotHidden Relevant -var :: MonadTCM tcm => Integer -> tcm Term+var :: Integer -> TCM Term var n = return $ Var n []  infixl 9 <@>, <#> -gApply :: MonadTCM tcm => Hiding -> tcm Term -> tcm Term -> tcm Term+gApply :: Hiding -> TCM Term -> TCM Term -> TCM Term gApply h a b = do     x <- a     y <- b     return $ x `apply` [Arg h Relevant y] -(<@>),(<#>) :: MonadTCM tcm => tcm Term -> tcm Term -> tcm Term+(<@>),(<#>) :: TCM Term -> TCM Term -> TCM Term (<@>) = gApply NotHidden (<#>) = gApply Hidden -list :: MonadTCM tcm => tcm Term -> tcm Term+list :: TCM Term -> TCM Term list t = primList <@> t -io :: MonadTCM tcm => tcm Term -> tcm Term+io :: TCM Term -> TCM Term io t = primIO <@> t -el :: MonadTCM tcm => tcm Term -> tcm Type+el :: TCM Term -> TCM Type el t = El (mkType 0) <$> t -tset :: MonadTCM tcm => tcm Type+tset :: TCM Type tset = return $ sort (mkType 0)  -- | Abbreviation: @argN = 'Arg' 'NotHidden' 'Relevant'@.@@ -422,7 +507,9 @@         in mkPrimFun4 aux     , "primNatEquality"	    |-> mkPrimFun2 ((==)		    :: Rel Nat)     , "primNatLess"	    |-> mkPrimFun2 ((<)			    :: Rel Nat)-    , "primLevelMax"	    |-> mkPrimFun2 (max			    :: Op Lvl)+    , "primLevelZero"	    |-> mkPrimLevelZero+    , "primLevelSuc"	    |-> mkPrimLevelSuc+    , "primLevelMax"	    |-> mkPrimLevelMax      -- Floating point functions     , "primIntegerToFloat"  |-> mkPrimFun1 (fromIntegral :: Integer -> Double)@@ -462,6 +549,11 @@     , "primStringEquality"  |-> mkPrimFun2 ((==) :: Rel Str)     , "primShowString"	    |-> mkPrimFun1 (Str . show . pretty . LitString noRange . unStr) +    -- Reflection+    , "primQNameType"       |-> primQNameType+    , "primQNameDefinition" |-> primQNameDefinition+    , "primDataConstructors"|-> primDataConstructors+     -- Other stuff     , "primTrustMe"         |-> primTrustMe     , "primQNameEquality"  |-> mkPrimFun2 ((==) :: Rel QName)@@ -469,7 +561,7 @@     where 	(|->) = (,) -lookupPrimitiveFunction :: MonadTCM tcm => String -> tcm PrimitiveImpl+lookupPrimitiveFunction :: String -> TCM PrimitiveImpl lookupPrimitiveFunction x =     case Map.lookup x primitiveFunctions of 	Just p	-> liftTCM p@@ -477,7 +569,7 @@  -- | Rebind a primitive. Assumes everything is type correct. Used when --   importing a module with primitives.-rebindPrimitive :: MonadTCM tcm => String -> tcm PrimFun+rebindPrimitive :: String -> TCM PrimFun rebindPrimitive x = do     PrimImpl _ pf <- lookupPrimitiveFunction x     bindPrimitive x pf
src/full/Agda/TypeChecking/Quote.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-}  module Agda.TypeChecking.Quote where @@ -10,13 +11,20 @@  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute -quoteTerm :: Term -> TCM Term-quoteTerm v = do-  false <- primFalse-  true <- primTrue+#include "../undefined.h"+import Agda.Utils.Impossible++quotingKit :: TCM ((Term -> Term), (Type -> Term))+quotingKit = do+  hidden <- primHidden+  instanceH <- primInstance+  visible <- primVisible+  relevant <- primRelevant+  irrelevant <- primIrrelevant   nil <- primNil   cons <- primCons   arg <- primArgArg@@ -26,39 +34,215 @@   con <- primAgdaTermCon   pi <- primAgdaTermPi   sort <- primAgdaTermSort+  set <- primAgdaSortSet+  setLit <- primAgdaSortLit+  unsupportedSort <- primAgdaSortUnsupported+  sucLevel <- primLevelSuc+  lub <- primLevelMax+  el <- primAgdaTypeEl   Con z _ <- primZero   Con s _ <- primSuc   unsupported <- primAgdaTermUnsupported   let t @@ u = apply t [defaultArg u]-      quoteHiding Hidden = true-      quoteHiding NotHidden = false+      quoteHiding Hidden    = hidden+      quoteHiding Instance  = instanceH+      quoteHiding NotHidden = visible+      quoteRelevance Relevant   = relevant+      quoteRelevance Irrelevant = irrelevant+      quoteRelevance NonStrict  = relevant+      quoteRelevance Forced     = relevant+      quoteLit (LitInt   _ n)   = iterate suc zero !! fromIntegral n+      quoteLit _                = unsupported+      -- We keep no ranges in the quoted term, so the equality on terms+      -- is only on the structure.+      quoteSortLevelTerm (Max [])              = setLit @@ Lit (LitInt noRange 0)+      quoteSortLevelTerm (Max [ClosedLevel n]) = setLit @@ Lit (LitInt noRange n)+      quoteSortLevelTerm (Max [Plus 0 (NeutralLevel v)]) = set @@ quote v+      quoteSortLevelTerm _                     = unsupported+      quoteSort (Type t)    = quoteSortLevelTerm t+      quoteSort Prop        = unsupportedSort+      quoteSort Inf         = unsupportedSort+      quoteSort DLub{}      = unsupportedSort+      quoteType (El s t) = el @@ quoteSort s @@ quote t       list [] = nil       list (a : as) = cons @@ a @@ list as       zero = con @@ quoteName z @@ nil-      suc n = con @@ quoteName s @@ list [n]-      quoteArg (Arg h r t) = arg @@ quoteHiding h @@ quote t-      quoteArgs ts = list (map quoteArg ts)+      suc n = con @@ quoteName s @@ list [arg @@ visible @@ relevant @@ n]+      quoteArg q (Arg h r t) = arg @@ quoteHiding h @@ quoteRelevance r @@ q t+      quoteArgs ts = list (map (quoteArg quote) ts)       quote (Var n ts) = var @@ Lit (LitInt noRange n) @@ quoteArgs ts       quote (Lam h t) = lam @@ quoteHiding h @@ quote (absBody t)       quote (Def x ts) = def @@ quoteName x @@ quoteArgs ts       quote (Con x ts) = con @@ quoteName x @@ quoteArgs ts-      quote (Pi t u) = pi @@ quoteArg (fmap unEl t)-                          @@ quote (unEl (absBody u))-      quote (Fun t u) = pi @@ quoteArg (fmap unEl t)-                           @@ quote (raise 1 (unEl u))-      quote (Lit (LitInt _ n)) = iterate suc zero !! fromIntegral n-      quote (Sort _) = sort-      quote _ = unsupported-  return (quote v)+      quote (Pi t u) = pi @@ quoteArg quoteType t+                          @@ quoteType (absBody u)+      quote (Level _) = unsupported+      quote (Lit lit) = quoteLit lit+      quote (Sort s)  = sort @@ quoteSort s+      quote MetaV{}   = unsupported+      quote DontCare{} = unsupported -- could be exposed at some point but we have to take care+  return (quote, quoteType)  quoteName :: QName -> Term quoteName x = Lit (LitQName noRange x) +quoteTerm :: Term -> TCM Term+quoteTerm v = ($v) . fst <$> quotingKit+ quoteType :: Type -> TCM Term-quoteType (El _ v) = quoteTerm v+quoteType v = ($v) . snd <$> quotingKit  agdaTermType :: TCM Type agdaTermType = El (mkType 0) <$> primAgdaTerm  qNameType :: TCM Type qNameType = El (mkType 0) <$> primQName++isCon :: QName -> TCM Term -> TCM Bool+isCon con tm = do t <- tm+                  case t of+                    Con con' _ -> return (con == con')+                    _ -> return False++unquoteFailedGeneric :: String -> TCM a+unquoteFailedGeneric msg = typeError . GenericError $ "Unable to unquote the " ++ msg++unquoteFailed :: String -> String -> Term -> TCM a+unquoteFailed kind msg t = do doc <- prettyTCM t+                              unquoteFailedGeneric $ "term (" ++ show doc ++ ") of type " ++ kind ++ ".\nReason: " ++ msg ++ "."++class Unquote a where+  unquote :: Term -> TCM a++unquoteH :: Unquote a => Arg Term -> TCM a+unquoteH (Arg Hidden Relevant x) = unquote x+unquoteH _                       = unquoteFailedGeneric "argument. It should be `hidden'."++unquoteN :: Unquote a => Arg Term -> TCM a+unquoteN (Arg NotHidden Relevant x) = unquote x+unquoteN _                          = unquoteFailedGeneric "argument. It should be `visible'"++choice :: Monad m => [(m Bool, m a)] -> m a -> m a+choice [] dflt = dflt+choice ((mb, mx) : mxs) dflt = do b <- mb+                                  if b then mx else choice mxs dflt++instance Unquote a => Unquote (Arg a) where+  unquote t = do+    t <- reduce t+    case t of+      Con c [hid,rel,x] -> do+        choice+          [(c `isCon` primArgArg, Arg <$> unquoteN hid <*> unquoteN rel <*> unquoteN x)]+          (unquoteFailed "Arg" "arity 3 and not the `arg' constructor" t)+      _ -> unquoteFailed "Arg" "not of arity 3" t++instance Unquote Integer where+  unquote t = do+    t <- reduce t+    case t of+      Lit (LitInt _ n) -> return n+      _ -> unquoteFailed "Integer" "not a literal integer" t++instance Unquote a => Unquote [a] where+  unquote t = do+    t <- reduce t+    case t of+      Con c [x,xs] -> do+        choice+          [(c `isCon` primCons, (:) <$> unquoteN x <*> unquoteN xs)]+          (unquoteFailed "List" "arity 2 and not the `∷' constructor" t)+      Con c [] -> do+        choice+          [(c `isCon` primNil, return [])]+          (unquoteFailed "List" "arity 0 and not the `[]' constructor" t)+      _ -> unquoteFailed "List" "neither `[]' nor `∷'" t++instance Unquote Hiding where+  unquote t = do+    t <- reduce t+    case t of+      Con c [] -> do+        choice+          [(c `isCon` primHidden,  return Hidden)+          ,(c `isCon` primInstance, return Instance)+          ,(c `isCon` primVisible, return NotHidden)]+          (unquoteFailed "Hiding" "neither `hidden' nor `visible'" t)+      _ -> unquoteFailed "Hiding" "arity is not 0" t++instance Unquote Relevance where+  unquote t = do+    t <- reduce t+    case t of+      Con c [] -> do+        choice+          [(c `isCon` primRelevant,   return Relevant)+          ,(c `isCon` primIrrelevant, return Irrelevant)]+          (unquoteFailed "Relevance" "neither `relevant' or `irrelevant'" t)+      _ -> unquoteFailed "Relevance" "arity is not 0" t++instance Unquote QName where+  unquote t = do+    t <- reduce t+    case t of+      Lit (LitQName _ x) -> return x+      _                  -> unquoteFailed "QName" "not a literal qname value" t++instance Unquote a => Unquote (Abs a) where+  unquote t = do x <- freshNoName_+                 Abs (show x) <$> unquote t++instance Unquote Sort where+  unquote t = do+    t <- reduce t+    case t of+      Con c [] -> do+        choice+          [(c `isCon` primAgdaSortUnsupported, unquoteFailed "Sort" "unsupported sort" t)]+          (unquoteFailed "Sort" "arity 0 and not the `unsupported' constructor" t)+      Con c [u] -> do+        choice+          [(c `isCon` primAgdaSortSet, Type <$> unquoteN u)+          ,(c `isCon` primAgdaSortLit, Type . levelMax . (:[]) . ClosedLevel <$> unquoteN u)]+          (unquoteFailed "Sort" "arity 1 and not the `set' or the `lit' constructors" t)+      _ -> unquoteFailed "Sort" "not of arity 0 nor 1" t++instance Unquote Level where+  unquote l = Max . (:[]) . Plus 0 . UnreducedLevel <$> unquote l++instance Unquote Type where+  unquote t = do+    t <- reduce t+    case t of+      Con c [s, u] -> do+        choice+          [(c `isCon` primAgdaTypeEl, El <$> unquoteN s <*> unquoteN u)]+          (unquoteFailed "Type" "arity 2 and not the `el' constructor" t)+      _ -> unquoteFailed "Type" "not of arity 2" t++instance Unquote Term where+  unquote t = do+    t <- reduce t+    case t of+      Con c [] ->+        choice+          [(c `isCon` primAgdaTermUnsupported, unquoteFailed "Term" "unsupported term" t)]+          (unquoteFailed "Term" "arity 0 and not the `unsupported' constructor" t)++      Con c [x] -> do+        choice+          [(c `isCon` primAgdaTermSort, Sort <$> unquoteN x)]+          (unquoteFailed "Term" "arity 1 and not the `sort' constructor" t)++      Con c [x,y] ->+        choice+          [(c `isCon` primAgdaTermVar, Var <$> unquoteN x <*> unquoteN y)+          ,(c `isCon` primAgdaTermCon, Con <$> unquoteN x <*> unquoteN y)+          ,(c `isCon` primAgdaTermDef, Def <$> unquoteN x <*> unquoteN y)+          ,(c `isCon` primAgdaTermLam, Lam <$> unquoteN x <*> unquoteN y)+          ,(c `isCon` primAgdaTermPi,  Pi  <$> unquoteN x <*> unquoteN y)]+          (unquoteFailed "Term" "arity 2 and none of Var, Con, Def, Lam, Pi" t)++      Con{} -> unquoteFailed "Term" "neither arity 0 nor 1 nor 2" t+      Lit{} -> unquoteFailed "Term" "unexpected literal" t+      _ -> unquoteFailed "Term" "not a constructor" t
src/full/Agda/TypeChecking/Rebind.hs view
@@ -13,18 +13,5 @@  -- | Change 'Bind's to 'NoBind' if the variable is not used in the body. --   Also normalises the body in the process. Or not. Disabled.-rebindClause :: Clauses -> TCM Clauses+rebindClause :: Clause -> TCM Clause rebindClause = return-{--rebindClause (Clause tel perm ps rec b) = return $ Clause tel perm ps rec b-  do-    b <- instantiateFull b-    return $ Clause ps $ rebind b-    where-	rebind (Body t) = Body t-	rebind (Bind b)-	    | 0 `freeIn` absBody b  = Bind $ fmap rebind b-	    | otherwise		    = NoBind $ b `absApp` __IMPOSSIBLE__-	rebind (NoBind b) = NoBind $ rebind b-	rebind  NoBody	  = NoBody--}
src/full/Agda/TypeChecking/RecordPatterns.hs view
@@ -19,7 +19,7 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce-import Agda.TypeChecking.Substitute hiding (Subst)+import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import Agda.Utils.Either import Agda.Utils.List@@ -33,17 +33,23 @@ -- projection functions. Does not remove record constructor patterns -- which have sub-patterns containing non-record constructor or -- literal patterns.+--+-- If the input clause contains dot patterns inside record patterns,+-- then the translation may yield clauses which are not type-correct.+-- However, we believe that it is safe to use the output as input to+-- 'Agda.TypeChecking.CompiledClause.Compile.compileClauses'. Perhaps+-- it would be better to perform record pattern translation on the+-- compiled clauses instead, but the code below has already been+-- implemented and seems to work. -translateRecordPatterns :: MonadTCM tcm => Clause -> tcm Clauses+translateRecordPatterns :: Clause -> TCM Clause translateRecordPatterns clause = do   -- ps: New patterns, in left-to-right order, in the context of the   -- old RHS.    -- s: Partial substitution taking the old pattern variables   -- (including dot patterns; listed from left to right) to terms in-  -- the context of the new RHS. The terms are functions expecting a-  -- substitution taking things in the old telescope's context to the-  -- context of the new RHS.+  -- the context of the new RHS.    -- cs: List of changes, with types in the context of the old   -- telescope.@@ -53,15 +59,20 @@   let -- Number of variables + dot patterns in new clause.       noNewPatternVars = size cs +      s'   = reverse s+      rest = [ Var i [] | i <- [noNewPatternVars..] ]+       -- Substitution used to convert terms in the old RHS's       -- context to terms in the new RHS's context.-      rhsSubst = map (\t -> t rhsSubst') (reverse s) ++-                 [ Var i [] | i <- [noNewPatternVars..] ]+      rhsSubst = s' ++ rest        -- Substitution used to convert terms in the old telescope's       -- context to terms in the new RHS's context.-      rhsSubst' = permute (reverseP $ clausePerm clause) init ++ rest-        where (init, rest) = genericSplitAt (size s) rhsSubst+      rhsSubst' = permute (reverseP $ clausePerm clause) s' ++ rest+      -- TODO: Is it OK to replace the definition above with the+      -- following one?+      --+      --   rhsSubst' = permute (clausePerm clause) s ++ rest        -- The old telescope, flattened and in textual left-to-right       -- order (i.e. the type signature for the variable which occurs@@ -83,7 +94,7 @@       -- Permutation taking the new variable and dot patterns to the       -- new telescope.       newPerm = adjustForDotPatterns $-                  reorderTel $ map (maybe dummy snd) newTel'+                  reorderTel_ $ map (maybe dummy snd) newTel'         where         -- It is important that dummy does not mention any variable         -- (see the definition of reorderTel).@@ -132,10 +143,7 @@         ]       ] -  return $ Clauses { translatedClause    = c-                   , maybeOriginalClause =-                       if all isLeft cs then Nothing else Just clause-                   }+  return c  ------------------------------------------------------------------------ -- Record pattern monad@@ -154,8 +162,8 @@  -- | Runs a computation in the 'RecPatM' monad. -runRecPatM :: MonadTCM tcm => RecPatM a -> tcm a-runRecPatM (RecPatM m) = liftTCM $+runRecPatM :: RecPatM a -> TCM a+runRecPatM (RecPatM m) =   mapTCMT (\m -> do              (x, noVars) <- mfix $ \ ~(_, noVars) ->                               runStateT (runReaderT m noVars) 0@@ -180,14 +188,6 @@ data Kind = VarPat | DotPat   deriving Eq --- | Substitutions (with a twist).------ Some parts of the terms building up the substitution need to have a--- substitution applied to them (in fact, a variant of the--- substitution itself), so a functional representation is used.--type Subst = [Substitution -> Term]- -- | @'Left' p@ means that a variable (corresponding to the pattern -- @p@, a variable or dot pattern) should be kept unchanged. @'Right' -- (n, x, t)@ means that @n 'VarPat'@ variables, and @n 'DotPat'@ dot@@ -202,59 +202,44 @@   = Leaf Pattern     -- ^ Corresponds to variable and dot patterns; contains the     -- original pattern.-  | RecCon (Arg Type) [(Substitution -> Term -> Term, RecordTree)]+  | RecCon (Arg Type) [(Term -> Term, RecordTree)]     -- ^ @RecCon t args@ stands for a record constructor application:     -- @t@ is the type of the application, and the list contains a-    -- projection function (parametrised on a substitution) and a tree-    -- for every argument.+    -- projection function and a tree for every argument.  ------------------------------------------------------------------------ -- Record pattern trees --- | @projections t@ returns a projection (parametrised on a--- substitution) for every non-dot leaf pattern in @t@. The term is--- the composition of the projection functions from the leaf to the--- root. The substitution is used to build the individual projection--- functions.+-- | @projections t@ returns a projection for every non-dot leaf+-- pattern in @t@. The term is the composition of the projection+-- functions from the leaf to the root. -- -- Every term is tagged with its origin: a variable pattern or a dot -- pattern. -projections :: RecordTree -> [(Substitution -> Term -> Term, Kind)]-projections (Leaf (DotP{})) = [(flip const, DotPat)]-projections (Leaf (VarP{})) = [(flip const, VarPat)]+projections :: RecordTree -> [(Term -> Term, Kind)]+projections (Leaf (DotP{})) = [(id, DotPat)]+projections (Leaf (VarP{})) = [(id, VarPat)] projections (Leaf _)        = __IMPOSSIBLE__ projections (RecCon _ args) =-  concatMap (\(p, t) -> map (\(t, k) -> (\s -> t s . p s, k))+  concatMap (\(p, t) -> map (\(p', k) -> (p' . p, k))                             (projections t))             args  -- | Converts a record tree to a single pattern along with information -- about the deleted pattern variables.------ Raises an error if the tree contains dot patterns inside record--- patterns. -removeTree :: RecordTree -> RecPatM (Pattern, Subst, Changes)+removeTree :: RecordTree -> RecPatM (Pattern, Substitution, Changes) removeTree tree = do   (pat, x) <- nextVar   let ps = projections tree-      s  = map (\(p, _) -> \s -> p s x) ps+      s  = map (\(p, _) -> p x) ps        count k = genericLength $ filter ((== k) . snd) ps -      dotPatternInside = case tree of-        Leaf {}   -> False-        RecCon {} -> any ((== DotPat) . snd) ps--  if dotPatternInside then-    typeError $ NotSupported $-      "Dot patterns inside record patterns, " ++-      "unless accompanied by data type patterns"-   else-    return $ case tree of-      Leaf p     -> (p,   s, [Left p])-      RecCon t _ -> (pat, s, [Right (count, "r", t)])+  return $ case tree of+    Leaf p     -> (p,   s, [Left p])+    RecCon t _ -> (pat, s, [Right (count, "r", t)])  ------------------------------------------------------------------------ -- Translation of patterns@@ -282,7 +267,7 @@ -- -- This function assumes that literals are never of record type. -translatePattern :: Pattern -> RecPatM (Pattern, Subst, Changes)+translatePattern :: Pattern -> RecPatM (Pattern, Substitution, Changes) translatePattern (ConP c Nothing ps) = do   (ps, s, cs) <- translatePatterns ps   return (ConP c Nothing ps, s, cs)@@ -298,7 +283,7 @@ -- | 'translatePattern' lifted to lists of arguments.  translatePatterns ::-  [Arg Pattern] -> RecPatM ([Arg Pattern], Subst, Changes)+  [Arg Pattern] -> RecPatM ([Arg Pattern], Substitution, Changes) translatePatterns ps = do   (ps', ss, cs) <- unzip3 <$> mapM (translatePattern . unArg) ps   return (ps' `withArgsFrom` ps, concat ss, concat cs)@@ -319,7 +304,7 @@  recordTree ::   Pattern ->-  RecPatM (Either (RecPatM (Pattern, Subst, Changes)) RecordTree)+  RecPatM (Either (RecPatM (Pattern, Substitution, Changes)) RecordTree) recordTree p@(ConP _ Nothing _) = return $ Left $ translatePattern p recordTree (ConP c (Just t) ps) = do   rs <- mapM (recordTree . unArg) ps@@ -329,15 +314,14 @@         (ps', ss, cs) <- unzip3 <$> mapM (either id removeTree) rs         return (ConP c (Just t) (ps' `withArgsFrom` ps),                 concat ss, concat cs)-    Right ts -> do+    Right ts -> liftTCM $ do       t <- reduce t       case t of-        Arg { unArg = El _ (Def r args) } -> do+        Arg { unArg = El _ (Def r _) } -> do           rDef <- theDef <$> getConstInfo r           case rDef of             Record { recFields = fields } -> do-              let proj p = \s t ->-                    Def (unArg p) (substs s (map hide args) ++ [defaultArg t])+              let proj p = \t -> Def (unArg p) [defaultArg t]               return $ Right $ RecCon t $ zip (map proj fields) ts             _ -> __IMPOSSIBLE__         _ -> __IMPOSSIBLE__@@ -378,7 +362,6 @@   Bind $ Abs x $ translateBody rest s $ dropBinds n' b   where n' = sum $ map n [VarPat, DotPat] translateBody (Left _ : rest) s (Bind b)   = Bind $ fmap (translateBody rest s) b-translateBody (Left _ : rest) s (NoBind b) = NoBind $ translateBody rest s b translateBody []              s (Body t)   = Body $ substs s t translateBody _               _ _          = __IMPOSSIBLE__ @@ -395,14 +378,11 @@     Nothing -> __IMPOSSIBLE__     Just k  -> Var k [] --- | @dropBinds n b@ drops the initial @n@ occurrences of 'Bind' or--- 'NoBind' from @b@.+-- | @dropBinds n b@ drops the initial @n@ occurrences of 'Bind' from @b@. ----- Precondition: @b@ has to start with @n@ occurrences of 'Bind' or--- 'NoBind'.+-- Precondition: @b@ has to start with @n@ occurrences of 'Bind'.  dropBinds :: Nat -> ClauseBody -> ClauseBody dropBinds n b          | n == 0 = b dropBinds n (Bind b)   | n > 0  = dropBinds (pred n) (absBody b)-dropBinds n (NoBind b) | n > 0  = dropBinds (pred n) b dropBinds _ _                   = __IMPOSSIBLE__
src/full/Agda/TypeChecking/Records.hs view
@@ -6,6 +6,9 @@ import Control.Arrow ((***)) import Control.Monad import Data.List+import qualified Data.Map as Map+import qualified Data.Set as Set+import Data.Function  import Agda.Syntax.Common import qualified Agda.Syntax.Concrete.Name as C@@ -26,7 +29,7 @@  -- | Order the fields of a record construction. --   Use the second argument for missing fields.-orderFields :: MonadTCM tcm => QName -> a -> [C.Name] -> [(C.Name, a)] -> tcm [a]+orderFields :: QName -> a -> [C.Name] -> [(C.Name, a)] -> TCM [a] orderFields r def xs fs = do   shouldBeNull (ys \\ nub ys) $ DuplicateFields . nub   shouldBeNull (ys \\ xs)     $ TooManyFields r@@ -53,7 +56,7 @@  -- | Get the definition for a record. Throws an exception if the name --   does not refer to a record.-getRecordDef :: MonadTCM tcm => QName -> tcm Defn+getRecordDef :: QName -> TCM Defn getRecordDef r = do   def <- theDef <$> getConstInfo r   case def of@@ -61,25 +64,37 @@     _        -> typeError $ ShouldBeRecordType (El Prop $ Def r [])  -- | Get the field names of a record.-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [Arg C.Name]+getRecordFieldNames :: QName -> TCM [Arg C.Name] getRecordFieldNames r =   map (fmap (nameConcrete . qnameName)) . recFields <$> getRecordDef r +-- | Find all records with at least the given fields.+findPossibleRecords :: [C.Name] -> TCM [QName]+findPossibleRecords fields = do+  defs <- (Map.union `on` sigDefinitions) <$> getSignature <*> getImportedSignature+  let possible def = case theDef def of+        Record{ recFields = fs } -> Set.isSubsetOf given inrecord+          where inrecord = Set.fromList $ map (nameConcrete . qnameName . unArg) fs+        _ -> False+  return [ defName d | d <- Map.elems defs, possible d ]+  where+    given = Set.fromList fields+ -- | Get the field types of a record.-getRecordFieldTypes :: MonadTCM tcm => QName -> tcm Telescope+getRecordFieldTypes :: QName -> TCM Telescope getRecordFieldTypes r = recTel <$> getRecordDef r  -- | Get the type of the record constructor.-getRecordConstructorType :: MonadTCM tcm => QName -> tcm Type+getRecordConstructorType :: QName -> TCM Type getRecordConstructorType r = recConType <$> getRecordDef r  -- | Returns the given record type's constructor name (with an empty -- range).-getRecordConstructor :: MonadTCM tcm => QName -> tcm QName+getRecordConstructor :: QName -> TCM QName getRecordConstructor r = killRange <$> recCon <$> getRecordDef r  -- | Check if a name refers to a record.-isRecord :: MonadTCM tcm => QName -> tcm Bool+isRecord :: QName -> TCM Bool isRecord r = do   def <- theDef <$> getConstInfo r   return $ case def of@@ -87,15 +102,20 @@     _        -> False  -- | Check if a name refers to an eta expandable record.-isEtaRecord :: MonadTCM tcm => QName -> tcm Bool+isEtaRecord :: QName -> TCM Bool isEtaRecord r = do   def <- theDef <$> getConstInfo r   return $ case def of     Record{recEtaEquality = eta} -> eta     _                            -> False +-- | Check if a type is an eta expandable record and return the record identifier and the parameters.+isEtaRecordType :: Type -> TCM (Maybe (QName, Args))+isEtaRecordType (El _ (Def d ps)) = ifM (isEtaRecord d) (return $ Just (d, ps)) (return Nothing)+isEtaRecordType _ = return Nothing+ -- | Check if a name refers to a record constructor.-isRecordConstructor :: MonadTCM tcm => QName -> tcm Bool+isRecordConstructor :: QName -> TCM Bool isRecordConstructor c = do   def <- theDef <$> getConstInfo c   case def of@@ -103,7 +123,7 @@     _                          -> return False  -- | Check if a constructor name is the internally generated record constructor.-isGeneratedRecordConstructor :: MonadTCM tcm => QName -> tcm Bool+isGeneratedRecordConstructor :: QName -> TCM Bool isGeneratedRecordConstructor c = do   def <- theDef <$> getConstInfo c   case def of@@ -121,7 +141,7 @@      and @r : R@, @etaExpand R [] r@ is @[R.x r, R.y r, DontCare]@ -}-etaExpandRecord :: MonadTCM tcm => QName -> Args -> Term -> tcm (Telescope, Args)+etaExpandRecord :: QName -> Args -> Term -> TCM (Telescope, Args) etaExpandRecord r pars u = do   Record{ recFields = xs, recTel = tel } <- getRecordDef r   let tel' = apply tel pars@@ -131,9 +151,9 @@       -- irrelevant fields are expanded to DontCare       -- this is sound because etaExpandRecord is only called during conversion       -- WARNING: do not use etaExpandRecord to expand MetaVars!!-      let proj (Arg h Irrelevant _) = Arg h Irrelevant DontCare+      let proj (Arg h Irrelevant x) = Arg h Irrelevant $ DontCare (Def x [defaultArg u])           proj (Arg h rel x)        = Arg h rel $-            Def x $ map hide pars ++ [defaultArg u]+            Def x [defaultArg u]       reportSDoc "tc.record.eta" 20 $ vcat         [ text "eta expanding" <+> prettyTCM u <+> text ":" <+> prettyTCM r         , nest 2 $ vcat@@ -146,18 +166,18 @@     hide a = a { argHiding = Hidden }  -- | The fields should be eta contracted already.-etaContractRecord :: MonadTCM tcm => QName -> QName -> Args -> tcm Term+etaContractRecord :: QName -> QName -> Args -> TCM Term etaContractRecord r c args = do   Record{ recPars = npars, recFields = xs } <- getRecordDef r   let check a ax = do       -- @a@ is the constructor argument, @ax@ the corr. record field name         -- skip irrelevant record fields by returning DontCare         case (argRelevance a, unArg a) of-          (Irrelevant, _) -> return $ Just DontCare-          -- if @a@ is the record field name applied to (npars+1) args,+          (Irrelevant, v) -> return $ Just $ DontCare __IMPOSSIBLE__ -- thrown out later+          -- if @a@ is the record field name applied to a single argument           -- then it passes the check-          (_, Def y args) | unArg ax == y && genericLength args == npars + 1-                         -> return (Just $ unArg $ last args)+          (_, Def y [arg]) | unArg ax == y+                         -> return (Just $ unArg arg)           _              -> return Nothing       fallBack = return (Con c args)   case compare (length args) (length xs) of@@ -166,7 +186,7 @@     EQ -> do       as <- zipWithM check args xs       case sequence as of-        Just as -> case filter (DontCare /=) as of+        Just as -> case filter notDontCare as of           (a:as) ->             if all (a ==) as               then do@@ -178,6 +198,8 @@               else fallBack           _ -> fallBack -- just DontCares         _ -> fallBack  -- a Nothing+  where notDontCare (DontCare _) = False+        notDontCare _            = True  -- | Is the type a hereditarily singleton record type? May return a -- blocking metavariable.@@ -185,12 +207,19 @@ -- Precondition: The name should refer to a record type, and the -- arguments should be the parameters to the type. -isSingletonRecord ::-  MonadTCM tcm => QName -> Args -> tcm (Either MetaId Bool)-isSingletonRecord r ps =+isSingletonRecord :: QName -> Args -> TCM (Either MetaId Bool)+isSingletonRecord = isSingletonRecord' False++isSingletonRecordModuloRelevance :: QName -> Args -> TCM (Either MetaId Bool)+isSingletonRecordModuloRelevance = isSingletonRecord' True++isSingletonRecord' :: Bool -> QName -> Args -> TCM (Either MetaId Bool)+isSingletonRecord' regardIrrelevance r ps =   check =<< ((`apply` ps) <$> getRecordFieldTypes r)   where   check EmptyTel            = return (Right True)+  check (ExtendTel arg tel) | regardIrrelevance && argRelevance arg == Irrelevant =+    underAbstraction arg tel check   check (ExtendTel arg tel) = do     TelV _ t <- telView $ unArg arg     t <- reduceB $ unEl t@@ -199,7 +228,7 @@       NotBlocked (MetaV m _) -> return (Left m)       NotBlocked (Def r ps)  ->         ifM (not <$> isRecord r) (return $ Right False) $ do-          isRec <- isSingletonRecord r ps+          isRec <- isSingletonRecord' regardIrrelevance r ps           case isRec of             Left _      -> return isRec             Right False -> return isRec
src/full/Agda/TypeChecking/Records.hs-boot view
@@ -7,8 +7,8 @@ import qualified Agda.Syntax.Concrete.Name as C import Agda.TypeChecking.Monad -isRecord :: MonadTCM tcm => QName -> tcm Bool-isEtaRecord :: MonadTCM tcm => QName -> tcm Bool-getRecordFieldNames :: MonadTCM tcm => QName -> tcm [Arg C.Name]-etaContractRecord :: MonadTCM tcm => QName -> QName -> Args -> tcm Term-isGeneratedRecordConstructor :: MonadTCM tcm => QName -> tcm Bool+isRecord :: QName -> TCM Bool+isEtaRecord :: QName -> TCM Bool+getRecordFieldNames :: QName -> TCM [Arg C.Name]+etaContractRecord :: QName -> QName -> Args -> TCM Term+isGeneratedRecordConstructor :: QName -> TCM Bool
src/full/Agda/TypeChecking/Reduce.hs view
@@ -1,4 +1,5 @@-{-# LANGUAGE CPP, PatternGuards, TypeSynonymInstances #-}+{-# LANGUAGE CPP, PatternGuards,+             TypeSynonymInstances, FlexibleInstances #-}  module Agda.TypeChecking.Reduce where @@ -26,7 +27,9 @@ import Agda.TypeChecking.Free import Agda.TypeChecking.EtaContract import Agda.TypeChecking.CompiledClause+import {-# SOURCE #-} Agda.TypeChecking.Pretty +import {-# SOURCE #-} Agda.TypeChecking.Level import {-# SOURCE #-} Agda.TypeChecking.Patterns.Match import {-# SOURCE #-} Agda.TypeChecking.CompiledClause.Match @@ -35,14 +38,14 @@ #include "../undefined.h" import Agda.Utils.Impossible -traceFun :: MonadTCM tcm => String -> tcm a -> tcm a+traceFun :: String -> TCM a -> TCM a traceFun s m = do   reportSLn "tc.inst" 100 $ "[ " ++ s   x <- m   reportSLn "tc.inst" 100 $ "]"   return x -traceFun' :: (Show a, MonadTCM tcm) => String -> tcm a -> tcm a+traceFun' :: Show a => String -> TCM a -> TCM a traceFun' s m = do   reportSLn "tc.inst" 100 $ "[ " ++ s   x <- m@@ -54,7 +57,7 @@ --   Doesn't do any reduction, and preserves blocking tags (when blocking meta --   is uninstantiated). class Instantiate t where-    instantiate :: MonadTCM tcm => t -> tcm t+    instantiate :: t -> TCM t  instance Instantiate Term where   instantiate t@(MetaV x args) = do@@ -62,12 +65,31 @@     case mi of       InstV a                        -> instantiate $ a `apply` args       Open                           -> return t+      OpenIFS                        -> return t       BlockedConst _                 -> return t       PostponedTypeCheckingProblem _ -> return t       InstS _                        -> __IMPOSSIBLE__-  instantiate (Sort s) = Sort <$> instantiate s+  instantiate (Level l) = levelTm <$> instantiate l+  instantiate (Sort s) = sortTm <$> instantiate s   instantiate t = return t +instance Instantiate Level where+  instantiate (Max as) = levelMax <$> instantiate as++instance Instantiate PlusLevel where+  instantiate l@ClosedLevel{} = return l+  instantiate (Plus n a) = Plus n <$> instantiate a++instance Instantiate LevelAtom where+  instantiate l = case l of+    MetaLevel m vs -> do+      v <- instantiate (MetaV m vs)+      case v of+        MetaV m vs -> return $ MetaLevel m vs+        _          -> return $ UnreducedLevel v+    UnreducedLevel l -> UnreducedLevel <$> instantiate l+    _ -> return l+ instance Instantiate a => Instantiate (Blocked a) where   instantiate v@NotBlocked{} = return v   instantiate v@(Blocked x u) = do@@ -75,6 +97,7 @@     case mi of       InstV _                        -> notBlocked <$> instantiate u       Open                           -> return v+      OpenIFS                        -> return v       BlockedConst _                 -> return v       PostponedTypeCheckingProblem _ -> return v       InstS _                        -> __IMPOSSIBLE__@@ -83,21 +106,14 @@     instantiate (El s t) = El <$> instantiate s <*> instantiate t  instance Instantiate Sort where-    instantiate s = case s of-	MetaS x as -> do-	    mi <- mvInstantiation <$> lookupMeta x-	    case mi of-		InstS s'                       -> do-                  v <- instantiate (s' `apply` as)-                  case v of-                    Sort s -> return s-                    _      -> __IMPOSSIBLE__-		Open                           -> return s-		InstV{}                        -> __IMPOSSIBLE__-		BlockedConst{}                 -> __IMPOSSIBLE__-                PostponedTypeCheckingProblem{} -> __IMPOSSIBLE__-        _ -> return s+  instantiate s = case s of+    Type l -> levelSort <$> instantiate l+    _      -> return s +instance Instantiate Elim where+  instantiate (Apply v) = Apply <$> instantiate v+  instantiate (Proj f)  = pure $ Proj f+ instance Instantiate t => Instantiate (Abs t) where   instantiate = traverse instantiate @@ -126,15 +142,15 @@   instantiate (ValueCmp cmp t u v) = do     (t,u,v) <- instantiate (t,u,v)     return $ ValueCmp cmp t u v-  instantiate (ArgsCmp cmp t as bs) = do-    (t, as, bs) <- instantiate (t, as, bs)-    return $ ArgsCmp cmp t as bs+  instantiate (ElimCmp cmp t v as bs) =+    ElimCmp cmp <$> instantiate t <*> instantiate v <*> instantiate as <*> instantiate bs   instantiate (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> instantiate (u,v)   instantiate (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> instantiate (a,b)-  instantiate (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> instantiate (a,b)+  instantiate (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> instantiate (tela,telb)   instantiate (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> instantiate (a,b)-  instantiate (Guarded c cs)       = uncurry Guarded <$> instantiate (c,cs)+  instantiate (Guarded c pid)      = Guarded <$> instantiate c <*> pure pid   instantiate (UnBlock m)          = return $ UnBlock m+  instantiate (FindInScope m)      = return $ FindInScope m   instantiate (IsEmpty t)          = IsEmpty <$> instantiate t  instance (Ord k, Instantiate e) => Instantiate (Map k e) where@@ -146,54 +162,65 @@ --  class Reduce t where-    reduce  :: MonadTCM tcm => t -> tcm t-    reduceB :: MonadTCM tcm => t -> tcm (Blocked t)+    reduce  :: t -> TCM t+    reduceB :: t -> TCM (Blocked t)      reduce  t = ignoreBlocking <$> reduceB t     reduceB t = notBlocked <$> reduce t  instance Reduce Type where-    reduce (El s t) = El <$> reduce s <*> reduce t-    reduceB (El s t) = do-      s <- reduce s-      t <- reduceB t-      return (El s <$> t)+    reduce  (El s t) = El s <$> reduce t+    reduceB (El s t) = fmap (El s) <$> reduceB t  instance Reduce Sort where     reduce s = {-# SCC "reduce<Sort>" #-}-      ifM (not <$> hasUniversePolymorphism) (red sSuc sLub s)-      $ liftTCM $ do-        suc  <- do sc <- primLevelSuc-                   return $ \x -> case x of-                                    Type n -> Type (sc `apply` [Arg NotHidden Relevant n])-                                    _      -> sSuc x-          `catchError` \_ -> return sSuc-        lub <- do mx <- primLevelMax-                  return $ \x y -> case (x, y) of-                    (Type n, Type m) -> Type (mx `apply` List.map (Arg NotHidden Relevant) [n, m])-                    _                -> sLub x y-          `catchError` \_ -> return sLub-        -- need to instantiate all meta to know if we need a DLub or a Lub-        red suc lub =<< instantiateFull s+      ifM (not <$> hasUniversePolymorphism) (red s)+      $ red =<< instantiateFull s       where-        red suc lub s = do+        red s = do           s <- instantiate s           case s of-            Suc s'     -> suc <$> reduce s'-            Lub s1 s2  -> lub <$> reduce s1 <*> reduce s2             DLub s1 s2 -> do               s <- dLub <$> reduce s1 <*> reduce s2               case s of                 DLub{}  -> return s                 _       -> reduce s   -- TODO: not so nice             Prop       -> return s-            Type s'    -> Type <$> reduce s'-            MetaS m as -> MetaS m <$> reduce as+            Type s'    -> levelSort <$> reduce s'             Inf        -> return Inf -instance Reduce t => Reduce (Abs t) where-  reduce b = Abs (absName b) <$> underAbstraction_ b reduce+instance Reduce Elim where+  reduce (Apply v) = Apply <$> reduce v+  reduce (Proj f)  = pure $ Proj f +instance Reduce Level where+  reduce  (Max as) = levelMax <$> mapM reduce as+  reduceB (Max as) = fmap levelMax . traverse id <$> traverse reduceB as++instance Reduce PlusLevel where+  reduceB l@ClosedLevel{} = return $ notBlocked l+  reduceB (Plus n l) = fmap (Plus n) <$> reduceB l++instance Reduce LevelAtom where+  reduceB l = case l of+    MetaLevel m vs   -> fromTm (MetaV m vs)+    NeutralLevel v   -> return $ NotBlocked $ NeutralLevel v+    BlockedLevel m v ->+      ifM (isInstantiatedMeta m) (fromTm v) (return $ Blocked m $ BlockedLevel m v)+    UnreducedLevel v -> fromTm v+    where+      fromTm v = do+        bv <- reduceB v+        case bv of+          Blocked m v             -> return $ Blocked m  $ BlockedLevel m v+          NotBlocked (MetaV m vs) -> return $ NotBlocked $ MetaLevel m vs+          NotBlocked v            -> return $ NotBlocked $ NeutralLevel v+++instance (Raise t, Reduce t) => Reduce (Abs t) where+  reduce b@(Abs x _) = Abs x <$> underAbstraction_ b reduce+  reduce (NoAbs x v) = NoAbs x <$> reduce v+ -- Lists are never blocked instance Reduce t => Reduce [t] where     reduce = traverse reduce@@ -210,52 +237,46 @@     reduce (x,y,z) = (,,) <$> reduce x <*> reduce y <*> reduce z  instance Reduce Term where-    reduceB v =-	{-# SCC "reduce<Term>" #-}-	do  v <- instantiate v-	    case v of-		MetaV x args -> notBlocked . MetaV x <$> reduce args-		Def f args   -> unfoldDefinition False reduceB (Def f []) f args-		Con c args   -> do-                    -- Constructors can reduce when they come from an-                    -- instantiated module.-		    v <- unfoldDefinition False reduceB (Con c []) c args-		    traverse reduceNat v-		Sort s	   -> fmap Sort <$> reduceB s-		Pi _ _	   -> return $ notBlocked v-		Fun _ _    -> return $ notBlocked v-		Lit _	   -> return $ notBlocked v-		Var _ _    -> return $ notBlocked v-		Lam _ _    -> return $ notBlocked v-		DontCare   -> return $ notBlocked v-	where-            -- NOTE: reduceNat can traverse the entire term.-	    reduceNat v@(Con c []) = do-		mz  <- getBuiltin' builtinZero-                mlz <- getBuiltin' builtinLevelZero-		case v of-                  _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0-                    | Just v == mlz -> return $ Lit $ LitLevel (getRange c) 0-		  _		    -> return v-	    reduceNat v@(Con c [Arg NotHidden Relevant w]) = do-		ms  <- getBuiltin' builtinSuc-                mls <- getBuiltin' builtinLevelSuc-		case v of-                  _ | Just (Con c []) == ms ||-                      Just (Con c []) == mls -> inc <$> reduce w-		  _	                     -> return v-                  where-                    inc w = case w of-                      Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)-                      Lit (LitLevel r n) -> Lit (LitLevel (fuseRange c r) $ n + 1)-                      _                  -> Con c [Arg NotHidden Relevant w]-	    reduceNat v = return v+  reduceB v = {-# SCC "reduce<Term>" #-} do+    v <- instantiate v+    case v of+      MetaV x args -> notBlocked . MetaV x <$> reduce args+      Def f args   -> unfoldDefinition False reduceB (Def f []) f args+      Con c args   -> do+          -- Constructors can reduce when they come from an+          -- instantiated module.+          v <- unfoldDefinition False reduceB (Con c []) c args+          traverse reduceNat v+      Sort s   -> fmap sortTm <$> reduceB s+      Level l  -> fmap levelTm <$> reduceB l+      Pi _ _   -> return $ notBlocked v+      Lit _    -> return $ notBlocked v+      Var _ _  -> return $ notBlocked v+      Lam _ _  -> return $ notBlocked v+      DontCare _ -> return $ notBlocked v+    where+      -- NOTE: reduceNat can traverse the entire term.+      reduceNat v@(Con c []) = do+        mz  <- getBuiltin' builtinZero+        case v of+          _ | Just v == mz  -> return $ Lit $ LitInt (getRange c) 0+          _		    -> return v+      reduceNat v@(Con c [Arg NotHidden Relevant w]) = do+        ms  <- getBuiltin' builtinSuc+        case v of+          _ | Just (Con c []) == ms -> inc <$> reduce w+          _	                    -> return v+          where+            inc w = case w of+              Lit (LitInt r n) -> Lit (LitInt (fuseRange c r) $ n + 1)+              _                -> Con c [Arg NotHidden Relevant w]+      reduceNat v = return v  -- | If the first argument is 'True', then a single delayed clause may -- be unfolded.-unfoldDefinition :: MonadTCM tcm =>-  Bool -> (Term -> tcm (Blocked Term)) ->-  Term -> QName -> Args -> tcm (Blocked Term)+unfoldDefinition ::+  Bool -> (Term -> TCM (Blocked Term)) ->+  Term -> QName -> Args -> TCM (Blocked Term) unfoldDefinition unfoldDelayed keepGoing v0 f args =   {-# SCC "reduceDef" #-} do   info <- getConstInfo f@@ -265,11 +286,9 @@     Primitive{primAbstr = ConcreteDef, primName = x, primClauses = cls} -> do       pf <- getPrimitive x       reducePrimitive x v0 f args pf (defDelayed info)-                      (maybe [] (List.map translatedClause) cls)-                      (defCompiled info)+                      (maybe [] id cls) (defCompiled info)     _  -> reduceNormal v0 f (map notReduced args) (defDelayed info)-                       (List.map translatedClause $ defClauses info)-                       (defCompiled info)+                       (defClauses info) (defCompiled info)   where     reducePrimitive x v0 f args pf delayed cls mcc         | n < ar    = return $ notBlocked $ v0 `apply` args -- not fully applied@@ -278,47 +297,71 @@             r <- def args1             case r of               NoReduction args1' ->-                reduceNormal v0 f (args1' ++-                                   map notReduced args2)-                             delayed cls mcc+                if null cls then+                  return $ apply (Def f []) <$> traverse id (map mredToBlocked args1' ++ map notBlocked args2)+                else+                  reduceNormal v0 f (args1' +++                                     map notReduced args2)+                               delayed cls mcc               YesReduction v ->                 keepGoing $ v `apply` args2         where             n	= genericLength args             ar  = primFunArity pf             def = primFunImplementation pf+            mredToBlocked :: MaybeReduced a -> Blocked a+            mredToBlocked (MaybeRed NotReduced  x) = notBlocked x+            mredToBlocked (MaybeRed (Reduced b) x) = x <$ b +    -- reduceNormal :: Term -> QName -> [MaybeReduced (Arg Term)] -> Delayed -> [Clause] -> Maybe CompiledClauses -> TCM (Blocked Term)     reduceNormal v0 f args delayed def mcc = {-# SCC "reduceNormal" #-} do         case def of           _ | Delayed <- delayed,               not unfoldDelayed -> defaultResult           [] -> defaultResult -- no definition for head-          cls@(Clause{ clausePats = ps } : _)-            | length ps <= length args -> do-                let (args1,args2') = splitAt (length ps) args-                    args2 = map ignoreReduced args2'-                ev <- maybe (appDef' v0 cls args1)-                            (\cc -> appDef v0 cc args1) mcc-                case ev of-                  NoReduction  v -> return    $ v `apply` args2-                  YesReduction v -> keepGoing $ v `apply` args2-            | otherwise	-> defaultResult -- partial application+          cls -> do+            ev <- maybe (appDef' v0 cls args)+                        (\cc -> appDef v0 cc args) mcc+            case ev of+              NoReduction v -> do+                reportSDoc "tc.reduce" 90 $ vcat+                  [ text "*** tried to reduce " <+> prettyTCM f+                  , text "    args    " <+> prettyTCM (map (unArg . ignoreReduced) args)+                  , text "    stuck on" <+> prettyTCM (ignoreBlocking v) ]+                return v+              YesReduction v -> do+                reportSDoc "tc.reduce" 90 $ vcat+                  [ text "*** reduced definition: " <+> prettyTCM f+                  ]+                reportSDoc "tc.reduce" 100 $ text "    result" <+> prettyTCM v+                keepGoing v       where defaultResult = return $ notBlocked $ v0 `apply` (map ignoreReduced args)      -- Apply a defined function to it's arguments.     --   The original term is the first argument applied to the third.-    appDef :: MonadTCM tcm => Term -> CompiledClauses -> MaybeReducedArgs -> tcm (Reduced (Blocked Term) Term)+    appDef :: Term -> CompiledClauses -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)     appDef v cc args = liftTCM $ do       r <- matchCompiled cc args       case r of         YesReduction t    -> return $ YesReduction t         NoReduction args' -> return $ NoReduction $ fmap (apply v) args' -    appDef' :: MonadTCM tcm => Term -> [Clause] -> MaybeReducedArgs -> tcm (Reduced (Blocked Term) Term)-    appDef' v cls args = {-# SCC "appDef" #-} do-      goCls cls (map ignoreReduced args) where+    appDef' :: Term -> [Clause] -> MaybeReducedArgs -> TCM (Reduced (Blocked Term) Term)+    appDef' _ [] _ = {- ' -} __IMPOSSIBLE__+    appDef' v cls@(Clause {clausePats = ps} : _) args+      | m < n     = return $ NoReduction $ notBlocked $ v `apply` map ignoreReduced args+      | otherwise = do+        let (args0, args1) = splitAt n args+        r <- goCls cls (map ignoreReduced args0)+        case r of+          YesReduction u -> return $ YesReduction $ u `apply` map ignoreReduced args1+          NoReduction v  -> return $ NoReduction $ (`apply` map ignoreReduced args1) <$> v+      where -        goCls :: MonadTCM tcm => [Clause] -> Args -> tcm (Reduced (Blocked Term) Term)+        n = genericLength ps+        m = genericLength args++        goCls :: [Clause] -> Args -> TCM (Reduced (Blocked Term) Term)         goCls [] args = typeError $ IncompletePatternMatching v args         goCls (cl@(Clause { clausePats = pats                           , clauseBody = body }) : cls) args = do@@ -334,18 +377,15 @@                       app args' body)                   | otherwise	  -> return $ NoReduction $ notBlocked $ v `apply` args -        hasBody (Body _)	 = True-        hasBody NoBody		 = False-        hasBody (Bind (Abs _ b)) = hasBody b-        hasBody (NoBind b)	 = hasBody b+        hasBody (Body _) = True+        hasBody NoBody   = False+        hasBody (Bind b) = hasBody (unAbs b) -        app []		 (Body v')	     = v'-        app (arg : args) (Bind (Abs _ body)) = {-# SCC "instRHS" #-} app args $ subst arg body -- CBN-        app (_   : args) (NoBind body)	     = app args body-        app  _		  NoBody	     = __IMPOSSIBLE__-        app (_ : _)	 (Body _)	     = __IMPOSSIBLE__-        app []		 (Bind _)	     = __IMPOSSIBLE__-        app []		 (NoBind _)	     = __IMPOSSIBLE__+        app []		 (Body v') = v'+        app (arg : args) (Bind b)  = app args $ absApp b arg -- CBN+        app  _		  NoBody   = __IMPOSSIBLE__+        app (_ : _)	 (Body _)  = __IMPOSSIBLE__+        app []		 (Bind _)  = __IMPOSSIBLE__   instance Reduce a => Reduce (Closure a) where@@ -360,15 +400,15 @@   reduce (ValueCmp cmp t u v) = do     (t,u,v) <- reduce (t,u,v)     return $ ValueCmp cmp t u v-  reduce (ArgsCmp cmp t us vs) = do-    (t,us,vs) <- reduce (t,us,vs)-    return $ ArgsCmp cmp t us vs+  reduce (ElimCmp cmp t v as bs) =+    ElimCmp cmp <$> reduce t <*> reduce v <*> reduce as <*> reduce bs   reduce (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> reduce (u,v)   reduce (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> reduce (a,b)-  reduce (TelCmp  cmp a b)    = uncurry (TelCmp cmp)  <$> reduce (a,b)+  reduce (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp)  <$> reduce (tela,telb)   reduce (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> reduce (a,b)-  reduce (Guarded c cs)       = uncurry Guarded <$> reduce (c,cs)+  reduce (Guarded c pid)      = Guarded <$> reduce c <*> pure pid   reduce (UnBlock m)          = return $ UnBlock m+  reduce (FindInScope m)      = return $ FindInScope m   reduce (IsEmpty t)          = IsEmpty <$> reduce t  instance (Ord k, Reduce e) => Reduce (Map k e) where@@ -379,18 +419,15 @@ ---------------------------------------------------------------------------  class Normalise t where-    normalise :: MonadTCM tcm => t -> tcm t+    normalise :: t -> TCM t  instance Normalise Sort where     normalise s = do       s <- reduce s       case s of-        Suc s'     -> sSuc <$> normalise s'-        Lub s1 s2  -> sLub <$> normalise s1 <*> normalise s2         DLub s1 s2 -> dLub <$> normalise s1 <*> normalise s2         Prop       -> return s-        Type s'    -> Type <$> normalise s'-        MetaS m as -> MetaS m <$> normalise as+        Type s     -> levelSort <$> normalise s         Inf        -> return Inf  instance Normalise Type where@@ -405,20 +442,40 @@ 		Def f vs    -> Def f <$> normalise vs 		MetaV x vs  -> MetaV x <$> normalise vs 		Lit _	    -> return v+                Level l     -> levelTm <$> normalise l 		Lam h b	    -> Lam h <$> normalise b-		Sort s	    -> Sort <$> normalise s+		Sort s	    -> sortTm <$> normalise s 		Pi a b	    -> uncurry Pi <$> normalise (a,b)-		Fun a b     -> uncurry Fun <$> normalise (a,b)-                DontCare    -> return v+                DontCare _  -> return v +instance Normalise Elim where+  normalise (Apply v) = Apply <$> normalise v+  normalise (Proj f)  = pure $ Proj f++instance Normalise Level where+  normalise (Max as) = levelMax <$> normalise as++instance Normalise PlusLevel where+  normalise l@ClosedLevel{} = return l+  normalise (Plus n l) = Plus n <$> normalise l++instance Normalise LevelAtom where+  normalise l = do+    l <- reduce l+    case l of+      MetaLevel m vs   -> MetaLevel m <$> normalise vs+      BlockedLevel m v -> BlockedLevel m <$> normalise v+      NeutralLevel v   -> NeutralLevel <$> normalise v+      UnreducedLevel{} -> __IMPOSSIBLE__    -- I hope+ instance Normalise ClauseBody where     normalise (Body   t) = Body   <$> normalise t     normalise (Bind   b) = Bind   <$> normalise b-    normalise (NoBind b) = NoBind <$> normalise b     normalise  NoBody	 = return NoBody -instance Normalise t => Normalise (Abs t) where-    normalise a = Abs (absName a) <$> underAbstraction_ a normalise+instance (Raise t, Normalise t) => Normalise (Abs t) where+    normalise a@(Abs x _) = Abs x <$> underAbstraction_ a normalise+    normalise (NoAbs x v) = NoAbs x <$> normalise v  instance Normalise t => Normalise (Arg t) where     normalise = traverse normalise@@ -439,23 +496,26 @@ 	x <- enterClosure cl normalise 	return $ cl { clValue = x } -instance Normalise a => Normalise (Tele a) where+instance (Raise a, Normalise a) => Normalise (Tele a) where   normalise EmptyTel        = return EmptyTel   normalise (ExtendTel a b) = uncurry ExtendTel <$> normalise (a, b) +instance Normalise ProblemConstraint where+  normalise (PConstr pid c) = PConstr pid <$> normalise c+ instance Normalise Constraint where   normalise (ValueCmp cmp t u v) = do     (t,u,v) <- normalise (t,u,v)     return $ ValueCmp cmp t u v-  normalise (ArgsCmp cmp t u v) = do-    (t,u,v) <- normalise (t,u,v)-    return $ ArgsCmp cmp t u v+  normalise (ElimCmp cmp t v as bs) =+    ElimCmp cmp <$> normalise t <*> normalise v <*> normalise as <*> normalise bs   normalise (LevelCmp cmp u v)   = uncurry (LevelCmp cmp) <$> normalise (u,v)   normalise (TypeCmp cmp a b)    = uncurry (TypeCmp cmp) <$> normalise (a,b)-  normalise (TelCmp cmp a b)     = uncurry (TelCmp cmp)  <$> normalise (a,b)+  normalise (TelCmp a b cmp tela telb) = uncurry (TelCmp a b cmp) <$> normalise (tela,telb)   normalise (SortCmp cmp a b)    = uncurry (SortCmp cmp) <$> normalise (a,b)-  normalise (Guarded c cs)       = uncurry Guarded <$> normalise (c,cs)+  normalise (Guarded c pid)      = Guarded <$> normalise c <*> pure pid   normalise (UnBlock m)          = return $ UnBlock m+  normalise (FindInScope m)      = return $ FindInScope m   normalise (IsEmpty t)          = IsEmpty <$> normalise t  instance Normalise Pattern where@@ -482,7 +542,7 @@ -- How can we express this? We need higher order classes!  class InstantiateFull t where-    instantiateFull :: MonadTCM tcm => t -> tcm t+    instantiateFull :: t -> TCM t  instance InstantiateFull Name where     instantiateFull = return@@ -491,11 +551,8 @@     instantiateFull s = do 	s <- instantiate s 	case s of-	    MetaS x as -> MetaS x <$> instantiateFull as-	    Type n     -> Type <$> instantiateFull n+	    Type n     -> levelSort <$> instantiateFull n 	    Prop       -> return s-	    Suc s      -> sSuc <$> instantiateFull s-	    Lub s1 s2  -> sLub <$> instantiateFull s1 <*> instantiateFull s2 	    DLub s1 s2 -> dLub <$> instantiateFull s1 <*> instantiateFull s2             Inf        -> return s @@ -513,12 +570,33 @@           Def f vs    -> Def f <$> instantiateFull vs           MetaV x vs  -> MetaV x <$> instantiateFull vs           Lit _	      -> return v+          Level l     -> levelTm <$> instantiateFull l           Lam h b     -> Lam h <$> instantiateFull b-          Sort s      -> Sort <$> instantiateFull s+          Sort s      -> sortTm <$> instantiateFull s           Pi a b      -> uncurry Pi <$> instantiateFull (a,b)-          Fun a b     -> uncurry Fun <$> instantiateFull (a,b)-          DontCare    -> return v+          DontCare v  -> DontCare <$> instantiateFull v +instance InstantiateFull Level where+  instantiateFull (Max as) = levelMax <$> instantiateFull as++instance InstantiateFull PlusLevel where+  instantiateFull l@ClosedLevel{} = return l+  instantiateFull (Plus n l) = Plus n <$> instantiateFull l++instance InstantiateFull LevelAtom where+  instantiateFull l = case l of+    MetaLevel m vs -> do+      v <- instantiateFull (MetaV m vs)+      case v of+        MetaV m vs -> return $ MetaLevel m vs+        _          -> return $ UnreducedLevel v+    NeutralLevel v -> NeutralLevel <$> instantiateFull v+    BlockedLevel m v ->+      ifM (isInstantiatedMeta m)+          (UnreducedLevel <$> instantiateFull v)+          (BlockedLevel m <$> instantiateFull v)+    UnreducedLevel v -> UnreducedLevel <$> instantiateFull v+ instance InstantiateFull Pattern where     instantiateFull v@VarP{}       = return v     instantiateFull (DotP t)       = DotP <$> instantiateFull t@@ -528,11 +606,11 @@ instance InstantiateFull ClauseBody where     instantiateFull (Body   t) = Body   <$> instantiateFull t     instantiateFull (Bind   b) = Bind   <$> instantiateFull b-    instantiateFull (NoBind b) = NoBind <$> instantiateFull b     instantiateFull  NoBody    = return NoBody -instance InstantiateFull t => InstantiateFull (Abs t) where-    instantiateFull a = Abs (absName a) <$> underAbstraction_ a instantiateFull+instance (Raise t, InstantiateFull t) => InstantiateFull (Abs t) where+    instantiateFull a@(Abs x _) = Abs x <$> underAbstraction_ a instantiateFull+    instantiateFull (NoAbs x a) = NoAbs x <$> instantiateFull a  instance InstantiateFull t => InstantiateFull (Arg t) where     instantiateFull = traverse instantiateFull@@ -553,22 +631,29 @@ 	x <- enterClosure cl instantiateFull 	return $ cl { clValue = x } +instance InstantiateFull ProblemConstraint where+  instantiateFull (PConstr p c) = PConstr p <$> instantiateFull c+ instance InstantiateFull Constraint where   instantiateFull c = case c of     ValueCmp cmp t u v -> do       (t,u,v) <- instantiateFull (t,u,v)       return $ ValueCmp cmp t u v-    ArgsCmp cmp t u v -> do-      (t,u,v) <- instantiateFull (t,u,v)-      return $ ArgsCmp cmp t u v+    ElimCmp cmp t v as bs ->+      ElimCmp cmp <$> instantiateFull t <*> instantiateFull v <*> instantiateFull as <*> instantiateFull bs     LevelCmp cmp u v   -> uncurry (LevelCmp cmp) <$> instantiateFull (u,v)     TypeCmp cmp a b    -> uncurry (TypeCmp cmp) <$> instantiateFull (a,b)-    TelCmp cmp a b     -> uncurry (TelCmp cmp)  <$> instantiateFull (a,b)+    TelCmp a b cmp tela telb -> uncurry (TelCmp a b cmp) <$> instantiateFull (tela,telb)     SortCmp cmp a b    -> uncurry (SortCmp cmp) <$> instantiateFull (a,b)-    Guarded c cs       -> uncurry Guarded <$> instantiateFull (c,cs)+    Guarded c pid      -> Guarded <$> instantiateFull c <*> pure pid     UnBlock m          -> return $ UnBlock m+    FindInScope m      -> return $ FindInScope m     IsEmpty t          -> IsEmpty <$> instantiateFull t +instance InstantiateFull Elim where+  instantiateFull (Apply v) = Apply <$> instantiateFull v+  instantiateFull (Proj f)  = pure $ Proj f+ instance (Ord k, InstantiateFull e) => InstantiateFull (Map k e) where     instantiateFull = traverse instantiateFull @@ -584,7 +669,7 @@ instance InstantiateFull Section where   instantiateFull (Section tel n) = flip Section n <$> instantiateFull tel -instance InstantiateFull a => InstantiateFull (Tele a) where+instance (Raise a, InstantiateFull a) => InstantiateFull (Tele a) where   instantiateFull EmptyTel = return EmptyTel   instantiateFull (ExtendTel a b) = uncurry ExtendTel <$> instantiateFull (a, b) @@ -592,9 +677,9 @@     instantiateFull = return  instance InstantiateFull Definition where-    instantiateFull (Defn rel x t df i d) = do+    instantiateFull (Defn rel x t df i c d) = do       (t, (df, d)) <- instantiateFull (t, (df, d))-      return $ Defn rel x t df i d+      return $ Defn rel x t df i c d  instance InstantiateFull a => InstantiateFull (Open a) where   instantiateFull (OpenThing n a) = OpenThing n <$> instantiateFull a@@ -604,6 +689,9 @@  instance InstantiateFull DisplayTerm where   instantiateFull (DTerm v)	   = DTerm <$> instantiateFull v+  instantiateFull (DDot  v)	   = DDot  <$> instantiateFull v+  instantiateFull (DCon c vs)	   = DCon c <$> instantiateFull vs+  instantiateFull (DDef c vs)	   = DDef c <$> instantiateFull vs   instantiateFull (DWithApp vs ws) = uncurry DWithApp <$> instantiateFull (vs, ws)  instance InstantiateFull Defn where@@ -641,10 +729,6 @@   instantiateFull (Done m t)  = Done m <$> instantiateFull t   instantiateFull (Case n bs) = Case n <$> instantiateFull bs -instance InstantiateFull Clauses where-    instantiateFull (Clauses c tc) =-       Clauses <$> instantiateFull c <*> instantiateFull tc- instance InstantiateFull Clause where     instantiateFull (Clause r tel perm ps b) =        Clause r <$> instantiateFull tel@@ -669,12 +753,13 @@ instance InstantiateFull a => InstantiateFull (Maybe a) where   instantiateFull = mapM instantiateFull -telViewM :: MonadTCM tcm => Type -> tcm TelView+-- | @telViewM t@ is like @telView' t@, but it reduces @t@ to expose+--   function type constructors.+telViewM :: Type -> TCM TelView telViewM t = do-  t <- reduce t+  t <- reduce t -- also instantiates meta if in head position   case unEl t of-    Pi a (Abs x b) -> absV a x <$> telViewM b-    Fun a b	   -> absV a "_" <$> telViewM (raise 1 b)-    _		   -> return $ TelV EmptyTel t+    Pi a b -> absV a (absName b) <$> telViewM (absBody b)+    _      -> return $ TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t
src/full/Agda/TypeChecking/Rules/Builtin.hs view
@@ -1,15 +1,17 @@ {-# LANGUAGE PatternGuards, CPP #-}-module Agda.TypeChecking.Rules.Builtin where+module Agda.TypeChecking.Rules.Builtin (bindBuiltin, bindPostulatedName) where  import Control.Applicative import Control.Monad import Control.Monad.Error import Data.Maybe+import Data.List (find)  import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal import Agda.Syntax.Common +import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Conversion@@ -19,7 +21,7 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty -import Agda.TypeChecking.Rules.Term ( checkExpr )+import Agda.TypeChecking.Rules.Term ( checkExpr , inferExpr ) import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction  import Agda.Utils.Size@@ -31,158 +33,117 @@ -- * Checking builtin pragmas --------------------------------------------------------------------------- --- Buitin datatypes and the number of constructors-builtinDatatypes :: [(String, Int)]-builtinDatatypes =-  [ (builtinList, 2)-  , (builtinBool, 2)-  , (builtinNat, 2)-  , (builtinLevel, 2)+coreBuiltins :: [BuiltinInfo]+coreBuiltins = map (\(x,z) -> BuiltinInfo x z)+  [ (builtinList               |-> BuiltinData (tset --> tset) [builtinNil, builtinCons])+  , (builtinArg                |-> BuiltinData (tset --> tset) [builtinArgArg])+  , (builtinBool               |-> BuiltinData tset [builtinTrue, builtinFalse])+  , (builtinNat                |-> BuiltinData tset [builtinZero, builtinSuc])+  , (builtinLevel              |-> BuiltinPostulate tset)+  , (builtinInteger            |-> BuiltinPostulate tset)+  , (builtinFloat              |-> BuiltinPostulate tset)+  , (builtinChar               |-> BuiltinPostulate tset)+  , (builtinString             |-> BuiltinPostulate tset)+  , (builtinQName              |-> BuiltinPostulate tset)+  , (builtinIO                 |-> BuiltinPostulate (tset --> tset))+  , (builtinAgdaSort           |-> BuiltinData tset [builtinAgdaSortSet, builtinAgdaSortLit, builtinAgdaSortUnsupported])+  , (builtinAgdaType           |-> BuiltinData tset [builtinAgdaTypeEl])+  , (builtinAgdaTerm           |-> BuiltinData tset+                                     [builtinAgdaTermVar, builtinAgdaTermLam+                                     ,builtinAgdaTermDef, builtinAgdaTermCon+                                     ,builtinAgdaTermPi, builtinAgdaTermSort+                                     ,builtinAgdaTermUnsupported])+  , (builtinEquality           |-> BuiltinData (hPi "a" (el primLevel) $+                                                hPi "A" (return $ sort $ varSort 0) $+                                                (El (varSort 1) <$> var 0) -->+                                                (El (varSort 1) <$> var 0) -->+                                                return (sort $ varSort 1))+                                               [builtinRefl])+  , (builtinHiding             |-> BuiltinData tset [builtinHidden, builtinInstance, builtinVisible])+  , (builtinRelevance          |-> BuiltinData tset [builtinRelevant, builtinIrrelevant])+  , (builtinRefl               |-> BuiltinDataCons (hPi "a" (el primLevel) $ hPi "A" (return $ sort $ varSort 0) $+                                                    hPi "x" (El (varSort 1) <$> var 0) $+                                                    El (varSort 2) <$> primEquality <#> var 2 <#> var 1 <@> var 0 <@> var 0))+  , (builtinNil                |-> BuiltinDataCons (hPi "A" tset (el (list v0))))+  , (builtinCons               |-> BuiltinDataCons (hPi "A" tset (tv0 --> el (list v0) --> el (list v0))))+  , (builtinZero               |-> BuiltinDataCons tnat)+  , (builtinSuc                |-> BuiltinDataCons (tnat --> tnat))+  , (builtinTrue               |-> BuiltinDataCons tbool)+  , (builtinFalse              |-> BuiltinDataCons tbool)+  , (builtinArgArg             |-> BuiltinDataCons (hPi "A" tset (thiding --> trelevance --> tv0 --> targ tv0)))+  , (builtinAgdaTypeEl         |-> BuiltinDataCons (tsort --> tterm --> ttype))+  , (builtinAgdaTermVar        |-> BuiltinDataCons (tnat --> targs --> tterm))+  , (builtinAgdaTermLam        |-> BuiltinDataCons (thiding --> tterm --> tterm))+  , (builtinAgdaTermDef        |-> BuiltinDataCons (tqname --> targs --> tterm))+  , (builtinAgdaTermCon        |-> BuiltinDataCons (tqname --> targs --> tterm))+  , (builtinAgdaTermPi         |-> BuiltinDataCons (targ ttype --> ttype --> tterm))+  , (builtinAgdaTermSort       |-> BuiltinDataCons (tsort --> tterm))+  , (builtinAgdaTermUnsupported|-> BuiltinDataCons tterm)+  , (builtinHidden             |-> BuiltinDataCons thiding)+  , (builtinInstance           |-> BuiltinDataCons thiding)+  , (builtinVisible            |-> BuiltinDataCons thiding)+  , (builtinRelevant           |-> BuiltinDataCons trelevance)+  , (builtinIrrelevant         |-> BuiltinDataCons trelevance)+  , (builtinSize               |-> BuiltinPostulate tset)+  , (builtinSizeSuc            |-> BuiltinPostulate (tsize --> tsize))+  , (builtinSizeInf            |-> BuiltinPostulate tsize)+  , (builtinAgdaSortSet        |-> BuiltinDataCons (tterm --> tsort))+  , (builtinAgdaSortLit        |-> BuiltinDataCons (tnat --> tsort))+  , (builtinAgdaSortUnsupported|-> BuiltinDataCons tsort)+  , (builtinNatPlus            |-> BuiltinPrim "primNatPlus" verifyPlus)+  , (builtinNatMinus           |-> BuiltinPrim "primNatMinus" verifyMinus)+  , (builtinNatTimes           |-> BuiltinPrim "primNatTimes" verifyTimes)+  , (builtinNatDivSucAux       |-> BuiltinPrim "primNatDivSucAux" verifyDivSucAux)+  , (builtinNatModSucAux       |-> BuiltinPrim "primNatModSucAux" verifyModSucAux)+  , (builtinNatEquals          |-> BuiltinPrim "primNatEquality" verifyEquals)+  , (builtinNatLess            |-> BuiltinPrim "primNatLess" verifyLess)+  , (builtinLevelZero          |-> BuiltinPrim "primLevelZero" (const $ return ()))+  , (builtinLevelSuc           |-> BuiltinPrim "primLevelSuc" (const $ return ()))+  , (builtinLevelMax           |-> BuiltinPrim "primLevelMax" verifyMax)+  , (builtinAgdaFunDef                |-> BuiltinPostulate tset) -- internally this is QName+  , (builtinAgdaDataDef               |-> BuiltinPostulate tset) -- internally this is QName+  , (builtinAgdaRecordDef             |-> BuiltinPostulate tset) -- internally this is QName+  , (builtinAgdaDefinition            |-> BuiltinData tset [builtinAgdaDefinitionFunDef+                                                           ,builtinAgdaDefinitionDataDef+                                                           ,builtinAgdaDefinitionDataConstructor+                                                           ,builtinAgdaDefinitionRecordDef+                                                           ,builtinAgdaDefinitionPostulate+                                                           ,builtinAgdaDefinitionPrimitive])+  , (builtinAgdaDefinitionFunDef          |-> BuiltinDataCons (tfun --> tdefn))+  , (builtinAgdaDefinitionDataDef         |-> BuiltinDataCons (tdtype --> tdefn))+  , (builtinAgdaDefinitionDataConstructor |-> BuiltinDataCons tdefn)+  , (builtinAgdaDefinitionRecordDef       |-> BuiltinDataCons (trec --> tdefn))+  , (builtinAgdaDefinitionPostulate       |-> BuiltinDataCons tdefn)+  , (builtinAgdaDefinitionPrimitive       |-> BuiltinDataCons tdefn)   ]--inductiveCheck :: String -> Term -> TCM ()-inductiveCheck b t =-  case lookup b builtinDatatypes of-    Nothing -> return ()-    Just n  -> do-      t <- normalise t-      let err = typeError (NotInductive t)-      case t of-        Def t _ -> do-          t <- theDef <$> getConstInfo t-          case t of-            Datatype { dataInduction = Inductive-                     , dataCons      = cs-                     }-              | length cs == n -> return ()-              | otherwise ->-                typeError $ GenericError $ unwords-                            [ "The builtin", b-                            , "must be a datatype with", show n-                            , "constructors" ]-            _ -> err-        _ -> err--bindBuiltinType :: String -> A.Expr -> TCM ()-bindBuiltinType b e = do-    let s = sort $ mkType 0-    reportSDoc "tc.builtin" 20 $ text "checking builtin type" <+> prettyA e <+> text ":" <+> text (show s)-    t <- checkExpr e (sort $ mkType 0)-    inductiveCheck b t-    bindBuiltinName b t--    -- NAT and LEVEL must be different. (Why?)-    when (b `elem` [builtinNat, builtinLevel]) $ do-      nat   <- getBuiltin' builtinNat-      level <- getBuiltin' builtinLevel-      case (nat, level) of-        (Just nat, Just level) -> do-          Def nat   _ <- normalise nat-          Def level _ <- normalise level-          when (nat == level) $ typeError $ GenericError $-            builtinNat ++ " and " ++ builtinLevel ++-            " have to be different types."-        _ -> return ()--bindBuiltinBool :: String -> A.Expr -> TCM Term-bindBuiltinBool b e = do-    bool <- primBool-    checkExpr e $ El (mkType 0) bool---- | Bind something of type @Set -> Set@.-bindBuiltinType1 :: String -> A.Expr -> TCM ()-bindBuiltinType1 thing e = do-    let set      = sort (mkType 0)-        setToSet = El (mkType 1) $ Fun (defaultArg set) set-    f <- checkExpr e setToSet-    inductiveCheck thing f-    bindBuiltinName thing f--bindBuiltinZero' :: String -> TCM Term -> A.Expr -> TCM Term-bindBuiltinZero' bZero pNat e = do-    nat  <- pNat-    checkExpr e (El (mkType 0) nat)--bindBuiltinSuc' :: String -> TCM Term -> A.Expr -> TCM Term-bindBuiltinSuc' bSuc pNat e = do-    nat  <- pNat-    let nat' = El (mkType 0) nat-        natToNat = El (mkType 0) $ Fun (defaultArg nat') nat'-    checkExpr e natToNat--bindBuiltinZero e = bindBuiltinZero' builtinZero primNat e-bindBuiltinSuc  e = bindBuiltinSuc'  builtinSuc primNat e--bindBuiltinLevelZero e = bindBuiltinZero' builtinLevelZero primLevel e-bindBuiltinLevelSuc  e = bindBuiltinSuc'  builtinLevelSuc  primLevel e--typeOfSizeInf :: TCM Type-typeOfSizeInf = do-    sz  <- primSize-    return $ (El (mkType 0) sz)--typeOfSizeSuc :: TCM Type-typeOfSizeSuc = do-    sz  <- primSize-    let sz' = El (mkType 0) sz-    return $ El (mkType 0) $ Fun (defaultArg sz') sz'---- | Built-in nil should have type @{A:Set} -> List A@-bindBuiltinNil :: A.Expr -> TCM Term-bindBuiltinNil e = do-    list' <- primList-    let set     = sort (mkType 0)-        list a  = El (mkType 0) (list' `apply` [defaultArg a])-        nilType = telePi (telFromList [Arg Hidden Relevant ("A",set)]) $ list (Var 0 [])-    checkExpr e nilType---- | Built-in cons should have type @{A:Set} -> A -> List A -> List A@-bindBuiltinCons :: A.Expr -> TCM Term-bindBuiltinCons e = do-    list' <- primList-    let set       = sort (mkType 0)-        el        = El (mkType 0)-        a         = Var 0 []-        list x    = el $ list' `apply` [defaultArg x]-        hPi x a b = telePi (telFromList [Arg Hidden Relevant (x,a)]) b-        fun a b   = el $ Fun (defaultArg a) b-        consType  = hPi "A" set $ el a `fun` (list a `fun` list a)-    checkExpr e consType--bindBuiltinPrimitive :: String -> String -> A.Expr -> (Term -> TCM ()) -> TCM ()-bindBuiltinPrimitive name builtin (A.ScopedExpr scope e) verify = do-  setScope scope-  bindBuiltinPrimitive name builtin e verify-bindBuiltinPrimitive name builtin e@(A.Def qx) verify = do-    PrimImpl t pf <- lookupPrimitiveFunction name-    v <- checkExpr e t+  where+        (|->) = (,) -    verify v+        v0 = var 0+        v1 = var 1 -    info <- getConstInfo qx-    let cls = defClauses info-        a   = defAbstract info-        mcc = defCompiled info-    bindPrimitive name $ pf { primFunName = qx }-    addConstant qx $ info { theDef = Primitive a name (Just cls) mcc }+        tv0,tv1 :: TCM Type+        tv0 = el v0+        tv1 = el v1 -    -- needed? yes, for checking equations for mul-    bindBuiltinName builtin v-bindBuiltinPrimitive _ b _ _ = typeError $ GenericError $ "Builtin " ++ b ++ " must be bound to a function"+        arg :: TCM Term -> TCM Term+        arg t = primArg <@> t -builtinPrimitives :: [ (String, (String, Term -> TCM ())) ]-builtinPrimitives =-    [ "NATPLUS"       |-> ("primNatPlus", verifyPlus)-    , "NATMINUS"      |-> ("primNatMinus", verifyMinus)-    , "NATTIMES"      |-> ("primNatTimes", verifyTimes)-    , "NATDIVSUCAUX"  |-> ("primNatDivSucAux", verifyDivSucAux)-    , "NATMODSUCAUX"  |-> ("primNatModSucAux", verifyModSucAux)-    , "NATEQUALS"     |-> ("primNatEquality", verifyEquals)-    , "NATLESS"       |-> ("primNatLess", verifyLess)-    , builtinLevelMax |-> ("primLevelMax", verifyMax)-    ]-    where-        (|->) = (,)+        targ x     = el (arg (fmap unEl x))+        targs      = el (list (arg primAgdaTerm))+        tterm      = el primAgdaTerm+        tqname     = el primQName+        tnat       = el primNat+        tsize      = el primSize+        tbool      = el primBool+        thiding    = el primHiding+        trelevance = el primRelvance+        ttype      = el primAgdaType+        tsort      = el primAgdaSort+        tdefn      = el primAgdaDefinition+        tfun       = el primAgdaFunDef+        tdtype     = el primAgdaDataDef+        trec       = el primAgdaRecordDef          verifyPlus plus =             verify ["n","m"] $ \(@@) zero suc (==) choice -> do@@ -276,16 +237,7 @@             (suc n < suc m) === (n < m)             (zero  < suc m) === true -        verifyMax maxV =-            verify' primLevel primLevelZero primLevelSuc ["n","m"] $-              \(@@) zero suc (==) choice -> do-                let m = Var 0 []-                    n = Var 1 []-                    max x y = maxV @@ x @@ y--                max zero (suc n)    == suc n-                max (suc n) zero    == suc n-                max (suc n) (suc m) == suc (max n m)+        verifyMax maxV = return ()  -- TODO: make max a postulate          verify xs = verify' primNat primZero primSuc xs @@ -304,35 +256,26 @@             xs <- mapM freshName_ xs             addCtxs xs (defaultArg nat) $ f (@@) zero suc (==) choice -bindBuiltinEquality :: A.Expr -> TCM ()-bindBuiltinEquality e = do-  let set       = sort (mkType 0)-      el        = El (mkType 0)-      a         = Var 0 []-      hPi x a b = telePi (telFromList [Arg Hidden Relevant (x,a)]) b-      fun a b   = El (mkType 1) $ Fun (defaultArg a) b-      eqType    = hPi "A" set $ el a `fun` (el a `fun` set)-  eq <- checkExpr e eqType-  bindBuiltinName builtinEquality eq --bindBuiltinRefl :: A.Expr -> TCM Term-bindBuiltinRefl e = do-  eq' <- primEquality-  let set       = sort (mkType 0)-      el        = El (mkType 0)-      v0        = Var 0 []-      v1        = Var 1 []-      hPi x a b = telePi (telFromList [Arg Hidden Relevant (x, a)]) b-      fun a b   = el $ Fun (defaultArg a) b-      eq a b c  = el $ eq' `apply` [Arg Hidden Relevant a, defaultArg b, defaultArg c]-      reflType  = hPi "A" set $ hPi "x" (el v0) $ eq v1 v0 v0-  checkExpr e reflType--bindBuiltinDummyConstructor :: A.Expr -> TCM Term-bindBuiltinDummyConstructor (A.ScopedExpr _ e) = bindBuiltinDummyConstructor e-bindBuiltinDummyConstructor (A.Con (AmbQ [c])) = return (Con c [])-bindBuiltinDummyConstructor e = typeError $ GenericError "bad BUILTIN"+inductiveCheck :: String -> Int -> Term -> TCM ()+inductiveCheck b n t = do+    t <- etaContract =<< normalise t+    let err = typeError (NotInductive t)+    case t of+      Def t _ -> do+        t <- theDef <$> getConstInfo t+        case t of+          Datatype { dataInduction = Inductive+                   , dataCons      = cs+                   }+            | length cs == n -> return ()+            | otherwise ->+              typeError $ GenericError $ unwords+                          [ "The builtin", b+                          , "must be a datatype with", show n+                          , "constructors" ]+          _ -> err+      _ -> err  -- | @bindPostulatedName builtin e m@ checks that @e@ is a postulated -- name @q@, and binds the builtin @builtin@ to the term @m q def@,@@ -355,57 +298,81 @@   getName (A.ScopedExpr _ e) = getName e   getName _                  = err --- | Builtin constructors-builtinConstructors :: [(String, A.Expr -> TCM Term)]-builtinConstructors =-  [ (builtinNil,       bindBuiltinNil               )-  , (builtinCons,      bindBuiltinCons              )-  , (builtinZero,      bindBuiltinZero              )-  , (builtinSuc,       bindBuiltinSuc               )-  , (builtinTrue,      bindBuiltinBool builtinTrue  )-  , (builtinFalse,     bindBuiltinBool builtinFalse )-  , (builtinRefl,      bindBuiltinRefl              )-  , (builtinLevelZero, bindBuiltinLevelZero         )-  , (builtinLevelSuc,  bindBuiltinLevelSuc          )-  , (builtinArgArg,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermVar,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermLam,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermDef,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermCon,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermPi,     bindBuiltinDummyConstructor  )-  , (builtinAgdaTermSort,    bindBuiltinDummyConstructor  )-  , (builtinAgdaTermUnsupported,    bindBuiltinDummyConstructor  )-  ]+bindBuiltinInfo :: BuiltinInfo -> A.Expr -> TCM ()+bindBuiltinInfo i (A.ScopedExpr scope e) = setScope scope >> bindBuiltinInfo i e+bindBuiltinInfo (BuiltinInfo s d) e = do+    case d of+      BuiltinData t cs -> do+                           e' <- checkExpr e =<< t+                           let n = length cs+                           inductiveCheck s n e'+                           bindBuiltinName s e'+                           -- NAT and LEVEL must be different. (Why?)+                           when (s `elem` [builtinNat, builtinLevel]) $ do+                             nat   <- getBuiltin' builtinNat+                             level <- getBuiltin' builtinLevel+                             case (nat, level) of+                               (Just nat, Just level) -> do+                                  Def nat   _ <- normalise nat+                                  Def level _ <- normalise level+                                  when (nat == level) $ typeError $ GenericError $+                                    builtinNat ++ " and " ++ builtinLevel +++                                    " have to be different types."+                               _ -> return () --- | Builtin postulates-builtinPostulates :: [(String, TCM Type)]-builtinPostulates =-  [ (builtinSize,    return $ sort $ mkType 0 )-  , (builtinSizeSuc, typeOfSizeSuc            )-  , (builtinSizeInf, typeOfSizeInf            )-  ] --- | Bind a builtin constructor. Pre-condition: argument is an element of---   'builtinConstructors'.-bindConstructor :: String -> (A.Expr -> TCM Term) -> A.Expr -> TCM ()-bindConstructor s check (A.ScopedExpr scope e) = do-  setScope scope-  bindConstructor s check e-bindConstructor s check e@(A.Con _) = do-  t <- check e-  -- The constructor might have been eta expanded during type checking-  let name (Lam h b) = name (absBody b)-      name (Con c _) = Con c []-      name _         = __IMPOSSIBLE__-  bindBuiltinName s (name t)-bindConstructor s _ e               = typeError $ BuiltinMustBeConstructor s e+      BuiltinDataCons t -> do --- | Bind a builtin postulate. Pre-condition: argument is an element of---   'builtinPostulates'.-bindPostulate :: String -> TCM Type -> A.Expr -> TCM ()-bindPostulate builtin typ e = bindPostulatedName builtin e $ \q _ ->-  checkExpr (A.Def q) =<< typ+        let name (Lam h b) = name (absBody b)+            name (Con c _) = Con c []+            name _         = __IMPOSSIBLE__ +        e' <- checkExpr e =<< t++        case e of+          A.Con _ -> return ()+          _       -> typeError $ BuiltinMustBeConstructor s e++        bindBuiltinName s (name e')++      BuiltinPrim pfname axioms -> do+	case e of+	  A.Def qx -> do++            PrimImpl t pf <- lookupPrimitiveFunction pfname+            v <- checkExpr e t++            axioms v++            info <- getConstInfo qx+            let cls = defClauses info+                a   = defAbstract info+                mcc = defCompiled info+            bindPrimitive pfname $ pf { primFunName = qx }+            addConstant qx $ info { theDef = Primitive a pfname (Just cls) mcc }++            -- needed? yes, for checking equations for mul+            bindBuiltinName s v++	  _ -> typeError $ GenericError $ "Builtin " ++ s ++ " must be bound to a function"++      BuiltinPostulate t -> do+        e' <- checkExpr e =<< t+        let err = typeError $ GenericError $+                    "The argument to BUILTIN " ++ s ++ " must be a postulated name"+        case e of+          A.Def q -> do+            def <- ignoreAbstractMode $ getConstInfo q+            case theDef def of+              Axiom {} -> bindBuiltinName s e'+              _        -> err+          _ -> err++      BuiltinUnknown mt f -> do+        e' <- maybe (fst <$> inferExpr e) (checkExpr e =<<) mt+        f e'+        bindBuiltinName s e'+ -- | Bind a builtin thing to an expression. bindBuiltin :: String -> A.Expr -> TCM () bindBuiltin b e = do@@ -414,13 +381,8 @@     bind b e     where         bind b e-            | elem b builtinTypes                        = bindBuiltinType b e-            | elem b [builtinList,builtinArg]            = bindBuiltinType1 b e-            | b == builtinEquality                       = bindBuiltinEquality e-            | b == builtinInf                            = bindBuiltinInf e-            | b == builtinSharp                          = bindBuiltinSharp e-            | b == builtinFlat                           = bindBuiltinFlat e-            | Just bind  <- lookup b builtinConstructors = bindConstructor b bind e-            | Just (s,v) <- lookup b builtinPrimitives   = bindBuiltinPrimitive s b e v-            | Just typ   <- lookup b builtinPostulates   = bindPostulate b typ e-            | otherwise                                  = typeError $ NoSuchBuiltinName b+            | b == builtinInf                                   = bindBuiltinInf e+            | b == builtinSharp                                 = bindBuiltinSharp e+            | b == builtinFlat                                  = bindBuiltinFlat e+            | Just i <- find ((==b) . builtinName) coreBuiltins = bindBuiltinInfo i e+            | otherwise                                         = typeError $ NoSuchBuiltinName b
src/full/Agda/TypeChecking/Rules/Builtin/Coinduction.hs view
@@ -34,51 +34,24 @@ -- | The type of @&#x221e@.  typeOfInf :: TCM Type-typeOfInf = do-  kit <- requireLevels-  return $-    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))-               (Abs "a" $ El (Type (levelSuc kit (Var 0 [])))-                             (Pi (argN $ El (Type (levelSuc kit (Var 0 [])))-                                            (Sort (Type (Var 0 []))))-                                 (Abs "A" $ El (Type (levelSuc kit (Var 1 [])))-                                               (Sort (Type (Var 1 [])))))))+typeOfInf = hPi "a" (el primLevel) $+            (return . sort $ varSort 0) --> (return . sort $ varSort 0)  -- | The type of @&#x266f_@.  typeOfSharp :: TCM Type-typeOfSharp = do-  kit <- requireLevels-  inf <- (\t -> case t of-                  Def q _ -> q-                  _       -> __IMPOSSIBLE__)-         <$> primInf-  return $-    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))-               (Abs "a" $ El (Lub (Type (levelSuc kit (Var 0 []))) (Type (Var 0 [])))-                             (Pi (argH $ El (Type (levelSuc kit (Var 0 []))) (Sort (Type (Var 0 []))))-                                 (Abs "A" $ El (Type (Var 1 []))-                                               (Pi (argN $ El (Type (Var 1 [])) (Var 0 []))-                                                   (Abs "x" $ El (Type (Var 2 []))-                                                                 (Def inf [argH (Var 2 []), argN (Var 1 [])])))))))+typeOfSharp = hPi "a" (el primLevel) $+              hPi "A" (return . sort $ varSort 0) $+              (El (varSort 1) <$> var 0) -->+              (El (varSort 1) <$> primInf <#> var 1 <@> var 0)  -- | The type of @&#x266d@.  typeOfFlat :: TCM Type-typeOfFlat = do-  kit <- requireLevels-  inf <- (\t -> case t of-                  Def q _ -> q-                  _       -> __IMPOSSIBLE__)-         <$> primInf-  return $-    El Inf (Pi (argH $ El (Type (Lit (LitLevel noRange 0))) (levelType kit))-               (Abs "a" $ El (Lub (Type (levelSuc kit (Var 0 []))) (Type (Var 0 [])))-                             (Pi (argH $ El (Type (levelSuc kit (Var 0 []))) (Sort (Type (Var 0 []))))-                                 (Abs "A" $ El (Type (Var 1 []))-                                               (Fun (argN $ El (Type (Var 1 []))-                                                               (Def inf [argH (Var 1 []), argN (Var 0 [])]))-                                                    (El (Type (Var 1 [])) (Var 0 [])))))))+typeOfFlat = hPi "a" (el primLevel) $+             hPi "A" (return . sort $ varSort 0) $+             (El (varSort 1) <$> primInf <#> var 1 <@> var 0) -->+             (El (varSort 1) <$> var 0)  -- | Binds the INFINITY builtin, but does not change the type's -- definition.@@ -110,10 +83,9 @@                   , dataInduction      = CoInductive                   , dataClause         = Nothing                   , dataCons           = [sharp]-                  , dataSort           = Type (Var 1 [])+                  , dataSort           = varSort 1                   , dataPolarity       = [Invariant, Invariant]                   , dataArgOccurrences = [Unused, Positive]-                  , dataHsType         = Nothing                   , dataAbstr          = ConcreteDef                   }               }@@ -122,7 +94,6 @@                     { conPars   = 2                     , conSrcCon = sharp                     , conData   = defName infDefn-                    , conHsCode = Nothing                     , conAbstr  = ConcreteDef                     , conInd    = CoInductive                     }@@ -146,10 +117,9 @@               <$> primSharp     kit    <- requireLevels     let clause = Clause { clauseRange = noRange-                        , clauseTel   = ExtendTel (argH (El (Type (Lit (LitLevel noRange 0))) (Def (typeName kit) [])))-                                                  (Abs "a" (ExtendTel (argH (El (Type (Con (sucName kit) [argN (Var 0 [])]))-                                                                                (Sort (Type (Var 0 [])))))-                                                                      (Abs "A" (ExtendTel (argN (El (Type (Var 1 [])) (Var 0 [])))+                        , clauseTel   = ExtendTel (argH (El (mkType 0) (Def (typeName kit) [])))+                                                  (Abs "a" (ExtendTel (argH $ sort $ varSort 0)+                                                                      (Abs "A" (ExtendTel (argN (El (varSort 1) (Var 0 [])))                                                                                           (Abs "x" EmptyTel)))))                         , clausePerm  = idP 3                         , clausePats  = [ argH (VarP "a")@@ -162,10 +132,14 @@                         }     addConstant flat $       flatDefn { theDef = Function-                   { funClauses        = [Clauses Nothing clause]-                   , funCompiled       = Case 2 (Branches (Map.singleton sharp (Done 3 (Var 0 [])))-                                                          Map.empty-                                                          Nothing)+                   { funClauses        = [clause]+                   , funCompiled       =+                      let hid   = Arg Hidden Relevant+                          nohid = defaultArg in+                      Case 2 (Branches (Map.singleton sharp+                                 (Done [hid "a", hid "A", nohid "x"] (Var 0 [])))+                               Map.empty+                               Nothing)                    , funInv            = NotInjective                    , funPolarity       = [Invariant, Invariant, Invariant]                    , funArgOccurrences = [Unused, Unused, Positive]@@ -175,6 +149,7 @@                      {- flat is a projection, but in the termination checker                         it destroys the (inductive) structural ordering.                         Thus, we do not register it as a projection. -}+                   , funStatic         = False                    }                 }     return flatE
src/full/Agda/TypeChecking/Rules/Data.hs view
@@ -22,6 +22,8 @@ import Agda.TypeChecking.Polarity import Agda.TypeChecking.Free import Agda.TypeChecking.Forcing+import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.Telescope  import Agda.TypeChecking.Rules.Term ( isType_ ) @@ -43,7 +45,11 @@ checkDataDef :: Info.DefInfo -> QName -> [A.LamBinding] -> [A.Constructor] -> TCM () checkDataDef i name ps cs =     traceCall (CheckDataDef (getRange i) (qnameName name) ps cs) $ do -- TODO!! (qnameName)-	let npars = size ps+	let countPars A.DomainFree{} = 1+            countPars (A.DomainFull (A.TypedBindings _ (Arg _ _ b))) = case b of+              A.TNoBind{}   -> 1+              A.TBind _ xs _ -> size xs+            npars = sum $ map countPars ps          -- Add the datatype module         addSection (qnameToMName name) 0@@ -51,6 +57,10 @@ 	-- Look up the type of the datatype. 	t <- instantiateFull =<< typeOfConst name +        -- Make sure the shape of the type is visible+        let unTelV (TelV tel a) = telePi tel a+        t <- unTelV <$> telView t+ 	-- The parameters are in scope when checking the constructors. 	dataDef <- bindParameters ps t $ \tel t0 -> do @@ -59,7 +69,7 @@  	    -- The type we get from bindParameters is Θ -> s where Θ is the type of 	    -- the indices. We count the number of indices and return s.-            (nofIxs, s) <- splitType =<< normalise t0+            (nofIxs, s) <- splitType t0              when (any (`freeIn` s) [0..nofIxs - 1]) $ do               err <- fsep [ text "The sort of" <+> prettyTCM name@@ -73,9 +83,11 @@             reportSDoc "tc.data.sort" 20 $ vcat               [ text "checking datatype" <+> prettyTCM name               , nest 2 $ vcat-                [ text "type:   " <+> prettyTCM t0+                [ text "type (parameters instantiated):   " <+> prettyTCM t0+                , text "type (full):   " <+> prettyTCM t                 , text "sort:   " <+> prettyTCM s                 , text "indices:" <+> text (show nofIxs)+                , text "params:"  <+> text (show ps)                 ]               ] @@ -86,14 +98,13 @@                                    , dataClause         = Nothing                                    , dataCons           = []     -- Constructors are added later 				   , dataSort           = s-                                   , dataHsType         = Nothing                                    , dataAbstr          = Info.defAbstract i                                    , dataPolarity       = []                                    , dataArgOccurrences = []                                    }  	    escapeContext (size tel) $ do-	      addConstant name ( Defn Relevant name t (defaultDisplayForm name) 0 dataDef )+	      addConstant name ( Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep dataDef )  	    -- Check the types of the constructors 	    mapM_ (checkConstructor name tel' nofIxs s) cs@@ -117,7 +128,7 @@  	-- Add the datatype to the signature with its constructors. It was previously 	-- added without them.-	addConstant name (Defn Relevant name t (defaultDisplayForm name) 0 $+	addConstant name (Defn Relevant name t (defaultDisplayForm name) 0 noCompiledRep $                             dataDef { dataCons = map cname cs } 			 )         computePolarity name@@ -127,12 +138,14 @@ 	cname _			   = __IMPOSSIBLE__ -- constructors are axioms  	hideTel  EmptyTel		  = EmptyTel-	hideTel (ExtendTel (Arg _ r t) tel) = ExtendTel (Arg Hidden r t) $ hideTel <$> tel+	hideTel (ExtendTel a tel) = ExtendTel (hideAndRelParams a) $ hideTel <$> tel  	splitType (El _ (Pi _ b))  = ((+ 1) -*- id) <$> splitType (absBody b)-	splitType (El _ (Fun _ b)) = ((+ 1) -*- raise 1) <$> splitType b 	splitType (El _ (Sort s))  = return (0, s)-	splitType (El _ t)	   = typeError $ DataMustEndInSort t+	splitType a                = do+          s <- newSortMeta+          equalType a (sort s)+          return (0, s)  -- | Type check a constructor declaration. Checks that the constructor targets --   the datatype and that it fits inside the declared sort.@@ -143,19 +156,34 @@   checkConstructor d tel nofIxs s con checkConstructor d tel nofIxs s con@(A.Axiom i _ c e) =     traceCall (CheckConstructor d tel s con) $ do+{- WRONG+      -- Andreas, 2011-04-26: the following happens to the right of ':'+      -- we may use irrelevant arguments in a non-strict way in types+      t' <- workOnTypes $ do+-}+        -- check that the type of the constructor is well-formed         debugEnter c e 	t <- isType_ e+        -- check that the type of the constructor ends in the data type 	n <- size <$> getContextTelescope         debugEndsIn t d n 	constructs n t d+        -- check that the sort (universe level) of the constructor type+        -- is contained in the sort of the data type+        -- (to avoid impredicative existential types)         debugFitsIn s 	t `fitsIn` s+        -- check which constructor arguments are determined by the type ('forcing')         t' <- addForcingAnnotations t         debugAdd c t'-	escapeContext (size tel)+{-+        return t'+-}+        -- add parameters to constructor type and put into signature+        escapeContext (size tel) 	    $ addConstant c-	    $ Defn Relevant c (telePi tel t') (defaultDisplayForm c) 0-	    $ Constructor (size tel) c d Nothing (Info.defAbstract i) Inductive+	    $ Defn Relevant c (telePi tel t') (defaultDisplayForm c) 0 noCompiledRep+	    $ Constructor (size tel) c d (Info.defAbstract i) Inductive   where     debugEnter c e =       reportSDoc "tc.data.con" 5 $ vcat@@ -181,23 +209,22 @@ checkConstructor _ _ _ _ _ = __IMPOSSIBLE__ -- constructors are axioms  --- | Bind the parameters of a datatype. The bindings should be domain free.+-- | Bind the parameters of a datatype. bindParameters :: [A.LamBinding] -> Type -> (Telescope -> Type -> TCM a) -> TCM a bindParameters [] a ret = ret EmptyTel a-bindParameters (A.DomainFree h x : ps) (El _ (Pi (Arg h' Relevant a) b)) ret-    | h /= h'	=+bindParameters (A.DomainFull (A.TypedBindings _ (Arg h rel (A.TBind _ xs _))) : bs) a ret =+  bindParameters ([ A.DomainFree h rel x | x <- xs ] ++ bs) a ret+bindParameters (A.DomainFull (A.TypedBindings _ (Arg h rel (A.TNoBind _))) : bs) a ret = do+  x <- freshNoName_+  bindParameters (A.DomainFree h rel x : bs) a ret+bindParameters (A.DomainFree h rel x : ps) (El _ (Pi (Arg h' rel' a) b)) ret+  -- Andreas, 2011-04-07 ignore relevance information in binding?!+    | h /= h' = 	__IMPOSSIBLE__     | otherwise = addCtx x arg $ bindParameters ps (absBody b) $ \tel s -> 		    ret (ExtendTel arg $ Abs (show x) tel) s   where-    arg = Arg h Relevant a-bindParameters (A.DomainFree h x : ps) (El _ (Fun (Arg h' Relevant a) b)) ret-    | h /= h'	=-	__IMPOSSIBLE__-    | otherwise = addCtx x arg $ bindParameters ps (raise 1 b) $ \tel s ->-		    ret (ExtendTel arg $ Abs (show x) tel) s-  where-    arg = Arg h Relevant a+    arg = Arg h rel' a bindParameters _ _ _ = __IMPOSSIBLE__  @@ -215,11 +242,10 @@   -- The line below would be simpler, but doesn't allow datatypes   -- to be indexed by the universe level. --   noConstraints $ s' `leqSort` s-  case funView $ unEl t of-    FunV arg@(Arg h r a) _ -> do+  case unEl t of+    Pi arg@(Arg h r a) _ -> do       let s' = getSort a-      cs <- s' `leqSort` s-      addConstraints cs+      s' `leqSort` s       x <- freshName_ (argName t)       let v  = Arg h r $ Var 0 []           t' = piApply (raise 1 t) [v]@@ -232,14 +258,16 @@ constructs :: Int -> Type -> QName -> TCM () constructs nofPars t q = constrT 0 t     where+        constrT :: Nat -> Type -> TCM () 	constrT n (El s v) = constr n s v +        constr :: Nat -> Sort -> Term -> TCM () 	constr n s v = do 	    v <- reduce v 	    case v of+		Pi _ (NoAbs _ b) -> constrT n b 		Pi a b	-> underAbstraction a b $ \t -> 			   constrT (n + 1) t-		Fun _ b -> constrT n b 		Def d vs 		    | d == q -> checkParams n =<< reduce (take nofPars vs) 						    -- we only check the parameters@@ -247,17 +275,19 @@  	bad t = typeError $ ShouldEndInApplicationOfTheDatatype t -	checkParams n vs = zipWithM_ sameVar (map unArg vs) ps+	checkParams n vs = zipWithM_ sameVar vs ps 	    where 		ps = reverse [ i | (i,_) <- zip [n..] vs ] -		sameVar v i = do+		sameVar arg i+                  -- skip irrelevant parameters+                  | argRelevance arg == Irrelevant = return ()+		  | otherwise = do 		    t <- typeOfBV i-		    addConstraints =<< equalTerm t v (Var i [])-+		    equalTerm t (unArg arg) (Var i [])  -- | Force a type to be a specific datatype.-forceData :: MonadTCM tcm => QName -> Type -> tcm Type+forceData :: QName -> Type -> TCM Type forceData d (El s0 t) = liftTCM $ do     t' <- reduce t     d  <- canonicalName d@@ -266,7 +296,7 @@ 	    | d == d'   -> return $ El s0 t' 	    | otherwise	-> fail $ "wrong datatype " ++ show d ++ " != " ++ show d' 	MetaV m vs	    -> do-	    Defn _ _ t _ _ Datatype{dataSort = s} <- getConstInfo d+	    Defn {defType = t, theDef = Datatype{dataSort = s}} <- getConstInfo d 	    ps <- newArgsMeta t 	    noConstraints $ leqType (El s0 t') (El s (Def d ps)) -- TODO: need equalType? 	    reduce $ El s0 t'@@ -275,7 +305,7 @@ -- | Is the type coinductive? Returns 'Nothing' if the answer cannot -- be determined. -isCoinductive :: MonadTCM tcm => Type -> tcm (Maybe Bool)+isCoinductive :: Type -> TCM (Maybe Bool) isCoinductive t = do   El _ t <- normalise t   case t of@@ -292,9 +322,9 @@     Var   {} -> return Nothing     Lam   {} -> __IMPOSSIBLE__     Lit   {} -> __IMPOSSIBLE__+    Level {} -> __IMPOSSIBLE__     Con   {} -> __IMPOSSIBLE__     Pi    {} -> return (Just False)-    Fun   {} -> return (Just False)     Sort  {} -> return (Just False)     MetaV {} -> return Nothing-    DontCare -> __IMPOSSIBLE__+    DontCare{} -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Rules/Decl.hs view
@@ -8,6 +8,7 @@ import Data.Map (Map) import qualified Agda.Utils.IO.Locale as LocIO +import Agda.Syntax.Abstract (AnyAbstract(..)) import qualified Agda.Syntax.Abstract as A import Agda.Syntax.Internal import qualified Agda.Syntax.Info as Info@@ -25,13 +26,14 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Reduce import Agda.TypeChecking.SizedTypes+import Agda.TypeChecking.Telescope import Agda.TypeChecking.Forcing  import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Rules.Data    ( checkDataDef ) import Agda.TypeChecking.Rules.Record  ( checkRecDef ) import Agda.TypeChecking.Rules.Def     ( checkFunDef )-import Agda.TypeChecking.Rules.Builtin ( bindBuiltin, bindBuiltinType1 )+import Agda.TypeChecking.Rules.Builtin ( bindBuiltin )  import Agda.Compiler.HaskellTypes @@ -43,31 +45,61 @@  -- | Type check a sequence of declarations. checkDecls :: [A.Declaration] -> TCM ()-checkDecls ds = mapM_ checkDecl ds-+checkDecls ds = do+  mapM_ checkDecl ds+  -- Andreas, 2011-05-30, unfreezing moved to Interaction/Imports+  -- whenM onTopLevel unfreezeMetas  -- | Type check a single declaration. checkDecl :: A.Declaration -> TCM () checkDecl d = do-    case d of-	A.Axiom i rel x e            -> checkAxiom i rel x e-        A.Field{}                    -> typeError FieldOutsideRecord-	A.Primitive i x e	     -> checkPrimitive i x e-	A.Definition i ts ds	     -> checkMutual i ts ds-	A.Section i x tel ds	     -> checkSection i x tel ds-	A.Apply i x tel m args rd rm -> checkSectionApplication i x tel m args rd rm-	A.Import i x		     -> checkImport i x-	A.Pragma i p		     -> checkPragma i p-	A.ScopedDecl scope ds	     -> setScope scope >> checkDecls ds-        A.Open _ _                   -> return ()+    -- Issue 418 fix: freeze metas before checking an abstract things+    when isAbstract freezeMetas+    leaveTopLevelConditionally d $ case d of+	A.Axiom i rel x e        -> checkAxiom i rel x e+        A.Field{}                -> typeError FieldOutsideRecord+	A.Primitive i x e        -> checkPrimitive i x e+	A.Mutual i ds            -> checkMutual i ds+	A.Section i x tel ds     -> checkSection i x tel ds+	A.Apply i x modapp rd rm -> checkSectionApplication i x modapp rd rm+	A.Import i x             -> checkImport i x+	A.Pragma i p             -> checkPragma i p+	A.ScopedDecl scope ds    -> setScope scope >> checkDecls ds+        A.FunDef i x cs          -> check x i $ checkFunDef NotDelayed i x cs+        A.DataDef i x ps cs      -> check x i $ checkDataDef i x ps cs+        A.RecDef i x c ps tel cs -> check x i $ checkRecDef i x c ps tel cs+        A.DataSig i x ps t       -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)+        A.RecSig i x ps t        -> checkAxiom i Relevant x (A.Pi (Info.ExprRange (fuseRange ps t)) ps t)+        A.Open _ _               -> return ()+    top <- onTopLevel+    when top $ solveSizeConstraints >> freezeMetas+    where+        unScope (A.ScopedDecl scope ds) = setScope scope >> unScope d+        unScope d = return d++        check x i m = do+          reportSDoc "tc.decl" 5 $ text "Checking" <+> prettyTCM x <> text "."+          r <- abstract (Info.defAbstract i) m+          reportSDoc "tc.decl" 5 $ text "Checked" <+> prettyTCM x <> text "."+          return r++        isAbstract = fmap Info.defAbstract (A.getDefInfo d) == Just AbstractDef++        -- Concrete definitions cannot use information about abstract things.+        abstract ConcreteDef = inConcreteMode+        abstract AbstractDef = inAbstractMode 	    -- open is just an artifact from the concrete syntax             -- retained for highlighting purposes-    solveSizeConstraints +        leaveTopLevelConditionally d =+          case d of+            A.Section{}    -> id+            A.ScopedDecl{} -> id+            _              -> leaveTopLevel  -- | Type check an axiom. checkAxiom :: Info.DefInfo -> Relevance -> QName -> A.Expr -> TCM ()-checkAxiom _ rel x e = do+checkAxiom i rel x e = do   t <- isType_ e   reportSDoc "tc.decl.ax" 10 $ sep     [ text "checked axiom"@@ -75,9 +107,10 @@     ]   -- Not safe. See Issue 330   -- t <- addForcingAnnotations t-  addConstant x (Defn rel x t (defaultDisplayForm x) 0 $ Axiom Nothing Nothing)+  addConstant x (Defn rel x t (defaultDisplayForm x) 0 noCompiledRep Axiom)   solveSizeConstraints-+  -- Andreas, 2011-05-31, that freezing below is probably wrong:+  -- when (Info.defAbstract i == AbstractDef) $ freezeMetas  -- | Type check a primitive function declaration. checkPrimitive :: Info.DefInfo -> QName -> A.Expr -> TCM ()@@ -88,7 +121,7 @@     noConstraints $ equalType t t'     let s  = show $ nameConcrete $ qnameName x     bindPrimitive s $ pf { primFunName = x }-    addConstant x (Defn Relevant x t (defaultDisplayForm x) 0 $+    addConstant x (Defn Relevant x t (defaultDisplayForm x) 0 noCompiledRep $                 Primitive (Info.defAbstract i) s Nothing Nothing)     where 	nameString (Name _ x _ _) = show x@@ -105,9 +138,6 @@             Axiom{} -> addHaskellType x hs             _       -> typeError $ GenericError                         "COMPILED_TYPE directive only works on postulates."-          -- TODO: hack-          when (hs == builtinIO) $-            bindBuiltinType1 builtinIO (A.Def x)         A.CompiledDataPragma x hs hcs -> do           def <- getConstInfo x           -- Check that the pragma appears in the same module@@ -139,8 +169,8 @@                           underPars n a = do                             a <- reduce a                             case unEl a of+                              Pi a (NoAbs _ b) -> underPars (n - 1) b                               Pi a b  -> underAbstraction a b $ underPars (n - 1)-                              Fun a b -> underPars (n - 1) b                               _       -> __IMPOSSIBLE__                       ty <- underPars np $ defType def                       reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show c ++ ": " ++ ty@@ -164,6 +194,14 @@               --reportSLn "tc.pragma.compile" 10 $ "Haskell type for " ++ show x ++ ": " ++ ty               addEpicCode x ep             _   -> typeError $ GenericError "COMPILED_EPIC directive only works on postulates."+        A.CompiledJSPragma x ep ->+          addJSCode x ep+        A.StaticPragma x -> do+            def <- getConstInfo x+            case theDef def of+                Function{} -> do+                    markStatic x+                _ -> typeError $ GenericError "STATIC directive only works on functions." 	A.OptionsPragma _   -> __IMPOSSIBLE__	-- not allowed here         A.EtaPragma r -> modifySignature eta           where@@ -176,11 +214,17 @@                 defs	  = sigDefinitions sig  -- | Type check a bunch of mutual inductive recursive definitions.-checkMutual :: Info.DeclInfo -> [A.TypeSignature] -> [A.Definition] -> TCM ()-checkMutual i ts ds = inMutualBlock $ do-  mapM_ checkTypeSignature ts-  mapM_ checkDefinition ds+checkMutual :: Info.DeclInfo -> [A.Declaration] -> TCM ()+checkMutual i ds = inMutualBlock $ do+  mapM_ checkDecl ds+   checkStrictlyPositive =<< currentMutualBlock+  let unScope (A.ScopedDecl _ ds) = concatMap unScope ds+      unScope d = [d]+  case concatMap unScope ds of+    -- Non-mutual definitions can be considered for projection likeness+    [A.Axiom _ _ x _, A.FunDef _ y _] | x == y -> makeProjection x+    _   -> return ()   -- | Type check the type signature of an inductive or recursive definition.@@ -192,24 +236,9 @@     case Info.defAccess i of 	PublicAccess  -> inConcreteMode $ checkAxiom i rel x e 	PrivateAccess -> inAbstractMode $ checkAxiom i rel x e+        OnlyQualified -> __IMPOSSIBLE__ checkTypeSignature _ = __IMPOSSIBLE__	-- type signatures are always axioms ---- | Check an inductive or recursive definition. Assumes the type has has been---   checked and added to the signature.-checkDefinition :: A.Definition -> TCM ()-checkDefinition d =-    case d of-	A.FunDef i x cs          -> abstract (Info.defAbstract i) $ checkFunDef NotDelayed i x cs-	A.DataDef i x ps cs      -> abstract (Info.defAbstract i) $ checkDataDef i x ps cs-	A.RecDef i x c ps tel cs -> abstract (Info.defAbstract i) $ checkRecDef i x c ps tel cs-        A.ScopedDef scope d      -> setScope scope >> checkDefinition d-    where-	-- Concrete definitions cannot use information about abstract things.-	abstract ConcreteDef = inConcreteMode-	abstract AbstractDef = inAbstractMode-- -- | Type check a module. checkSection :: Info.ModuleInfo -> ModuleName -> A.Telescope -> [A.Declaration] -> TCM () checkSection i x tel ds =@@ -230,22 +259,38 @@      check eta []             = return eta     check EmptyTel (_:_)     = bad-    check (ExtendTel (Arg h _ _) (Abs y tel)) args0@(Arg h' _ (Named name _) : args) =+    check (ExtendTel (Arg h _ _) btel) args0@(Arg h' _ (Named name _) : args) =+      let y   = absName btel+          tel = absBody btel in       case (h, h', name) of+        (Instance, NotHidden, _) -> check tel args0+        (Instance, Hidden, _) -> bad+        (Instance, Instance, Nothing) -> check tel args+        (Instance, Instance, Just x)+          | x == y                -> check tel args+          | otherwise             -> check tel args0         (Hidden, NotHidden, _)    -> check tel args0+        (Hidden, Instance, _)    -> bad         (Hidden, Hidden, Nothing) -> check tel args         (Hidden, Hidden, Just x)           | x == y                -> check tel args           | otherwise             -> check tel args0         (NotHidden, NotHidden, _) -> check tel args         (NotHidden, Hidden, _)    -> bad+        (NotHidden, Instance, _)    -> bad  -- | Check an application of a section. checkSectionApplication ::-  Info.ModuleInfo -> ModuleName -> A.Telescope -> ModuleName -> [NamedArg A.Expr] ->+  Info.ModuleInfo -> ModuleName -> A.ModuleApplication ->   Map QName QName -> Map ModuleName ModuleName -> TCM ()-checkSectionApplication i m1 ptel m2 args rd rm =-  traceCall (CheckSectionApplication (getRange i) m1 ptel m2 args) $+checkSectionApplication i m1 modapp rd rm =+  traceCall (CheckSectionApplication (getRange i) m1 modapp) $+  checkSectionApplication' i m1 modapp rd rm++checkSectionApplication' ::+  Info.ModuleInfo -> ModuleName -> A.ModuleApplication ->+  Map QName QName -> Map ModuleName ModuleName -> TCM ()+checkSectionApplication' i m1 (A.SectionApp ptel m2 args) rd rm =   checkTelescope_ ptel $ \ptel -> do   tel <- lookupSection m2   vs  <- freeVarsToApply $ qnameFromList $ mnameToList m2@@ -261,8 +306,7 @@     , nest 2 $ text "tel''=" <+> prettyTCM tel''     , nest 2 $ text "eta  =" <+> prettyTCM etaTel     ]-  (ts, cs)  <- checkArguments_ DontExpandLast (getRange i) args tel''-  noConstraints $ return cs+  ts <- noConstraints $ checkArguments_ DontExpandLast (getRange i) args tel''   reportSDoc "tc.section.apply" 20 $ vcat     [ sep [ text "applySection", prettyTCM m1, text "=", prettyTCM m2, fsep $ map prettyTCM (vs ++ ts) ]     , nest 2 $ text "  defs:" <+> text (show rd)@@ -270,6 +314,32 @@     ]   args <- instantiateFull $ vs ++ ts   applySection m1 ptel m2 args rd rm+checkSectionApplication' i m1 (A.RecordModuleIFS x) rd rm = do+  let name = mnameToQName x+  tel' <- lookupSection x+  vs <- freeVarsToApply name+  let tel = tel' `apply` vs+  case tel of+    EmptyTel -> typeError $ GenericError $ show name ++ " is not a parameterised section."+    _ -> return ()+  let telInst :: Telescope+      telInst = instFinal tel+      instFinal :: Telescope -> Telescope+      instFinal (ExtendTel _ NoAbs{}) = __IMPOSSIBLE__+      instFinal (ExtendTel (Arg h r t) (Abs n EmptyTel)) = ExtendTel (Arg Instance r t) (Abs n EmptyTel)+      instFinal (ExtendTel arg (Abs n tel)) = ExtendTel arg (Abs n (instFinal tel))+      instFinal EmptyTel = __IMPOSSIBLE__+      args = teleArgs tel+  reportSDoc "tc.section.apply" 20 $ vcat+    [ sep [ text "applySection", prettyTCM name, text "{{...}}" ]+    , nest 2 $ text "tel:" <+> prettyTCM tel+    , nest 2 $ text "telInst:" <+> prettyTCM telInst+    , nest 2 $ text "args:" <+> text (show args)+    ]++  addCtxTel telInst $ do+    vs <- freeVarsToApply name+    applySection m1 telInst x (vs ++ args) rd rm  -- | Type check an import declaration. Actually doesn't do anything, since all --   the work is done when scope checking.
src/full/Agda/TypeChecking/Rules/Decl.hs-boot view
@@ -3,12 +3,11 @@  import Data.Map           (Map) import Agda.Syntax.Info        (ModuleInfo)-import Agda.Syntax.Common      (NamedArg)-import Agda.Syntax.Abstract    (QName, Expr, Declaration, ModuleName, Telescope)+import Agda.Syntax.Abstract    (QName, Expr, Declaration, ModuleName, ModuleApplication) import Agda.TypeChecking.Monad (TCM)  checkDecls :: [Declaration] -> TCM () checkDecl  :: Declaration -> TCM () checkSectionApplication ::-  ModuleInfo -> ModuleName -> Telescope -> ModuleName -> [NamedArg Expr] ->+  ModuleInfo -> ModuleName -> ModuleApplication ->   Map QName QName -> Map ModuleName ModuleName -> TCM ()
src/full/Agda/TypeChecking/Rules/Def.hs view
@@ -3,9 +3,11 @@ module Agda.TypeChecking.Rules.Def where  import Prelude hiding (mapM)+import Control.Arrow ((***), (&&&)) import Control.Applicative import Control.Monad.State hiding (mapM) import Control.Monad.Reader hiding (mapM)+import Control.Monad.Error hiding (mapM) import Control.Monad hiding (mapM) import Data.List hiding (sort) import Data.Traversable@@ -40,9 +42,9 @@ import Agda.TypeChecking.Coverage import Agda.TypeChecking.Injectivity import Agda.TypeChecking.Polarity+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.SizedTypes-import Agda.TypeChecking.RecordPatterns-import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.CompiledClause.Compile  import Agda.TypeChecking.Rules.Term                ( checkExpr, inferExpr, checkTelescope_, isType_ ) import Agda.TypeChecking.Rules.LHS                 ( checkLeftHandSide )@@ -65,16 +67,19 @@ -- * Definitions by pattern matching --------------------------------------------------------------------------- --- | Type check a definition by pattern matching. The first argument--- specifies whether the clauses are delayed or not. checkFunDef :: Delayed -> Info.DefInfo -> QName -> [A.Clause] -> TCM ()-checkFunDef delayed i name cs =--    traceCall (CheckFunDef (getRange i) (qnameName name) cs) $ do   -- TODO!! (qnameName)+checkFunDef delayed i name cs = do         -- Get the type and relevance of the function         t    <- typeOfConst name         rel  <- relOfConst name+        checkFunDef' t rel delayed i name cs +-- | Type check a definition by pattern matching. The first argument+-- specifies whether the clauses are delayed or not.+checkFunDef' :: Type -> Relevance -> Delayed -> Info.DefInfo -> QName -> [A.Clause] -> TCM ()+checkFunDef' t rel delayed i name cs =++    traceCall (CheckFunDef (getRange i) (qnameName name) cs) $ do   -- TODO!! (qnameName)         reportSDoc "tc.def.fun" 10 $           sep [ text "checking body of" <+> prettyTCM name               , nest 2 $ text ":" <+> prettyTCM t@@ -89,12 +94,11 @@         cs <- mapM check cs          -- Check that all clauses have the same number of arguments-        unless (allEqual $ map (npats . translatedClause) cs) $-               typeError DifferentArities+        unless (allEqual $ map npats cs) $ typeError DifferentArities          reportSDoc "tc.cc" 15 $ do           sep [ text "clauses before rebindClause"-              , nest 2 $ prettyTCM (map (NamedClause name . translatedClause) cs)+              , nest 2 $ prettyTCM (map (NamedClause name) cs)               ]          -- Annotate the clauses with which arguments are actually used.@@ -106,15 +110,15 @@         -- possibly due to missing eta-contraction!?          -- Check if the function is injective-        inv <- checkInjectivity name $ map translatedClause cs+        inv <- checkInjectivity name cs          reportSDoc "tc.cc" 15 $ do           sep [ text "clauses before compilation"-              , nest 2 $ prettyTCM (map (NamedClause name . translatedClause) cs)+              , nest 2 $ prettyTCM (map (NamedClause name) cs)               ]          -- Compile the clauses-        let cc = compileClauses cs+        cc <- compileClauses True cs          reportSDoc "tc.cc" 10 $ do           sep [ text "compiled clauses of" <+> prettyTCM name@@ -122,7 +126,7 @@               ]          -- Add the definition-        addConstant name $ Defn rel name t (defaultDisplayForm name) 0+        addConstant name $ Defn rel name t (defaultDisplayForm name) 0 noCompiledRep                          $ Function                             { funClauses        = cs                             , funCompiled       = cc@@ -132,6 +136,7 @@                             , funPolarity       = []                             , funArgOccurrences = []                             , funProjection     = Nothing+                            , funStatic         = False                             }         computePolarity name         reportSDoc "tc.def.fun" 10 $ do@@ -170,10 +175,11 @@                      Type           -- type of the right hand side                      [Arg Pattern]  -- parent patterns                      Permutation    -- permutation reordering the variables in the parent pattern+                     Permutation    -- final permutation (including permutation for the parent clause)                      [A.Clause]     -- the given clauses for the with function  -- | Type check a function clause.-checkClause :: Type -> A.Clause -> TCM Clauses+checkClause :: Type -> A.Clause -> TCM Clause checkClause t c@(A.Clause (A.LHS i x aps []) rhs0 wh) =     traceCall (CheckClause t c) $     checkLeftHandSide c aps t $ \gamma delta sub xs ps t' perm -> do@@ -198,19 +204,18 @@                 A.RewriteRHS (qname:names) (eq:eqs) rhs wh -> do                      (proof,t) <- inferExpr eq                      t' <- reduce =<< instantiateFull t-                     equality <- primEquality >>= \eq -> return $ case eq of-                        Lam Hidden (Abs _ (Def equality _)) -> equality-                        Def equality _                      -> equality-                        _                                   -> __IMPOSSIBLE__+                     equality <- primEquality >>= \eq ->+                      let lamV (Lam h b) = ((h:) *** id) $ lamV (unAbs b)+                          lamV v         = ([], v) in+                      return $ case lamV eq of+                        ([Hidden, Hidden], Def equality _) -> equality+                        ([Hidden],         Def equality _) -> equality+                        ([],               Def equality _) -> equality+                        _                                  -> __IMPOSSIBLE__                      reflCon <- primRefl >>= \refl -> return $ case refl of                          Con reflCon [] -> reflCon                          _              -> __IMPOSSIBLE__                      (rewriteType,rewriteFrom,rewriteTo) <- case t' of-                         El _Set0 (Def equality' [Arg Hidden Relevant rewriteType,-                                                  Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])-                            | equality' == equality ->-                              return (rewriteType, rewriteFrom, rewriteTo)-                         -- Universe polymorphic equality                          El _Set0 (Def equality' [_level, Arg Hidden Relevant rewriteType,                                                   Arg NotHidden Relevant rewriteFrom, Arg NotHidden Relevant rewriteTo])                             | equality' == equality ->@@ -247,7 +252,7 @@                   reportSDoc "tc.with.top" 5 $                     text "TC.Rules.Def.checkclause reached A.WithRHS"                   reportSDoc "tc.with.top" 30 $-                    text (show c)+                    prettyA c                   -- Infer the types of the with expressions                   vas <- mapM inferExpr es                   (vs0, as) <- instantiateFull (unzip vas)@@ -269,25 +274,32 @@                     , text "delta2 =" <+> addCtxTel delta1 (prettyTCM delta2)                     , text "vs     =" <+> prettyTCM vs                     , text "as     =" <+> prettyTCM as+                    , text "perm'  =" <+> text (show perm')+                    , text "perm   =" <+> text (show perm)+                    , text "fPerm  =" <+> text (show finalPerm)                     ]                    -- Create the body of the original function                   ctx <- getContextTelescope                   let n    = size ctx                       m    = size delta+                      -- All the context variables                       us   = [ Arg h r (Var i []) | (i, Arg h r _) <- zip [n - 1,n - 2..0] $ telToList ctx ]+                      -- First the variables bound outside this definition                       (us0, us1') = genericSplitAt (n - m) us+                      -- Then permute the rest and grab those needed to for the with arguments                       (us1, us2)  = genericSplitAt (size delta1) $ permute perm' us1'+                      -- Now stuff the with arguments in between and finish with the remaining variables                       v    = Def aux $ us0 ++ us1 ++ (map defaultArg vs0) ++ us2                    -- We need Δ₁Δ₂ ⊢ t'-                  t' <- return $ rename (reverseP perm') t'+                  t' <- return $ renameP (reverseP perm') t'                   -- and Δ₁ ⊢ vs : as                   (vs, as) <- do                     let var = flip Var []                         -- We know that as does not depend on Δ₂                         rho = replicate (size delta2) __IMPOSSIBLE__ ++ map var [0..]-                    return $ substs rho $ rename (reverseP perm') (vs, as)+                    return $ substs rho $ renameP (reverseP perm') (vs, as)                    reportSDoc "tc.with.top" 20 $ vcat                     [ text "    with arguments" <+> prettyList (map prettyTCM vs)@@ -299,7 +311,7 @@                     , text "              body" <+> (addCtxTel delta $ prettyTCM $ mkBody v)                     ] -                  return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps finalPerm cs)+                  return (mkBody v, WithFunction x aux gamma delta1 delta2 vs as t' ps perm' finalPerm cs)           in handleRHS rhs0       escapeContext (size delta) $ checkWithFunction with @@ -314,7 +326,7 @@           ]         ] -      translateRecordPatterns $+      return $         Clause { clauseRange = getRange i                , clauseTel   = killRange delta                , clausePerm  = perm@@ -326,7 +338,7 @@  checkWithFunction :: WithFunctionProblem -> TCM () checkWithFunction NoWithFunction = return ()-checkWithFunction (WithFunction f aux gamma delta1 delta2 vs as b qs perm cs) = do+checkWithFunction (WithFunction f aux gamma delta1 delta2 vs as b qs perm' perm cs) = do    reportSDoc "tc.with.top" 10 $ vcat     [ text "checkWithFunction"@@ -338,6 +350,7 @@       , text "vs     =" <+> addCtxTel delta1 (prettyTCM vs)       , text "b      =" <+> prettyTCM b       , text "qs     =" <+> text (show qs)+      , text "perm'  =" <+> text (show perm')       , text "perm   =" <+> text (show perm)       ]     ]@@ -345,7 +358,7 @@   -- Add the type of the auxiliary function to the signature    -- With display forms are closed-  df <- makeClosed <$> withDisplayForm f aux delta1 delta2 (size as) qs perm+  df <- makeClosed <$> withDisplayForm f aux delta1 delta2 (size as) qs perm'    reportSLn "tc.with.top" 20 "created with display form" @@ -361,7 +374,10 @@          , nest 2 $ prettyTCM absAuxType          ]   -- The ranges in the generated type are completely bogus, so we kill them.-  auxType <- setCurrentRange (getRange cs) $ isType_ $ killRange absAuxType+  auxType <- setCurrentRange (getRange cs) (isType_ $ killRange absAuxType)+    `catchError` \err -> case errError err of+      TypeError _ e -> enterClosure e $ traceCall (CheckWithFunctionType absAuxType) . typeError+      _             -> throwError err    case df of     OpenThing _ (Display n ts dt) -> reportSDoc "tc.with.top" 20 $ text "Display" <+> fsep@@ -369,7 +385,7 @@       , prettyList $ map prettyTCM ts       , prettyTCM dt       ]-  addConstant aux (Defn Relevant aux auxType [df] 0 $ Axiom Nothing Nothing)+  addConstant aux (Defn Relevant aux auxType [df] 0 noCompiledRep Axiom)   solveSizeConstraints    reportSDoc "tc.with.top" 10 $ sep@@ -655,7 +671,7 @@             liftIO $ LocIO.putStr $ unlines $ reverse ds -} -actualConstructor :: MonadTCM tcm => QName -> tcm QName+actualConstructor :: QName -> TCM QName actualConstructor c = do     v <- constructorForm =<< normalise (Con c [])     case v of
src/full/Agda/TypeChecking/Rules/Def.hs-boot view
@@ -1,7 +1,10 @@ module Agda.TypeChecking.Rules.Def where  import Agda.Syntax.Abstract+import Agda.Syntax.Common import Agda.Syntax.Info import Agda.TypeChecking.Monad+import qualified Agda.Syntax.Internal as I  checkFunDef :: Delayed -> DefInfo -> QName -> [Clause] -> TCM ()+checkFunDef' :: I.Type -> Relevance -> Delayed -> DefInfo -> QName -> [Clause] -> TCM ()
src/full/Agda/TypeChecking/Rules/LHS.hs view
@@ -23,8 +23,9 @@ import Agda.TypeChecking.Telescope import Agda.TypeChecking.Conversion import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.Primitive (constructorForm)-import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType)+import {-# SOURCE #-} Agda.TypeChecking.Empty (isReallyEmptyType) import Agda.TypeChecking.Telescope (renamingR, teleArgs)  import Agda.TypeChecking.Rules.Term (checkExpr)@@ -61,6 +62,7 @@  instance Raise AsBinding where   raiseFrom m k (AsB x v a) = uncurry (AsB x) $ raiseFrom m k (v, a)+  renameFrom m k (AsB x v a) = uncurry (AsB x) $ renameFrom m k (v, a)  instance PrettyTCM AsBinding where   prettyTCM (AsB x v a) =@@ -194,7 +196,6 @@           Primitive   {} -> __IMPOSSIBLE__       Var   {} -> return ()       Pi    {} -> return ()-      Fun   {} -> return ()       Sort  {} -> return ()       MetaV {} -> return ()       -- TODO: If the type is a meta-variable, should the test be@@ -204,11 +205,12 @@       -- error in code which has already passed the type checker.       Lam   {} -> __IMPOSSIBLE__       Lit   {} -> __IMPOSSIBLE__+      Level {} -> __IMPOSSIBLE__       Con   {} -> __IMPOSSIBLE__-      DontCare -> __IMPOSSIBLE__+      DontCare{} -> __IMPOSSIBLE__  -- | Check that a dot pattern matches it's instantiation.-checkDotPattern :: DotPatternInst -> TCM Constraints+checkDotPattern :: DotPatternInst -> TCM () checkDotPattern (DPI e v a) =   traceCall (CheckDotPattern e v) $ do   reportSDoc "tc.lhs.dot" 15 $@@ -220,7 +222,6 @@   u <- checkExpr e a   -- Should be ok to do noConstraints here   noConstraints $ equalTerm a u v-  return []  -- | Bind the variables in a left hand side. Precondition: the patterns should --   all be 'A.VarP', 'A.WildP', or 'A.ImplicitP' and the telescope should have@@ -235,7 +236,7 @@     A.WildP _     -> bindDummy (absName tel)     A.ImplicitP _ -> bindDummy (absName tel)     A.AbsurdP _   -> do-      isEmptyType $ unArg a+      isReallyEmptyType $ unArg a       bindDummy (absName tel)     _             -> __IMPOSSIBLE__     where@@ -327,8 +328,7 @@     reportSDoc "tc.lhs.top" 10 $ nest 2 $ text "type  = " <+> prettyTCM b'      -- Check dot patterns-    cs <- concat <$> mapM checkDotPattern dpi-    noConstraints $ solveConstraints cs+    mapM_ checkDotPattern dpi      let rho = renamingR perm -- I'm not certain about this...         Perm n _ = perm@@ -413,8 +413,7 @@               ]              Con c' [] <- constructorForm =<< normalise (Con c [])-            c <- return $ c' `withRangeOf` c-+            c  <- return $ c' `withRangeOf` c             ca <- defType <$> getConstInfo c              reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat@@ -423,7 +422,7 @@               ]              -- Lookup the type of the constructor at the given parameters-            a <- (`piApply` vs) . defType <$> getConstInfo c+            let a = ca `piApply` vs              -- It will end in an application of the datatype             TelV gamma' ca@(El _ (Def d' us)) <- telView a@@ -438,7 +437,7 @@ -}              -- Andreas 2010-09-07  propagate relevance info to new vars-            gamma' <- return $ fmap (\a -> a { argRelevance = rel }) gamma'+            gamma' <- return $ fmap (applyRelevance rel) gamma' {-             reportSDoc "tc.lhs.top" 20 $ nest 2 $ vcat               [ text "gamma' =" <+> text (show gamma')@@ -608,10 +607,7 @@  -- Ensures that we are not performing pattern matching on codata. -noPatternMatchingOnCodata-  :: MonadTCM tcm-  => [Arg Pattern]-  -> tcm ()+noPatternMatchingOnCodata :: [Arg Pattern] -> TCM () noPatternMatchingOnCodata = mapM_ (check . unArg)   where   check (VarP {})   = return ()
src/full/Agda/TypeChecking/Rules/LHS/Implicit.hs view
@@ -38,13 +38,14 @@   [] -> do     i <- insImp dummy tel     case i of-      Just n	-> return $ replicate n implicitP+      Just []   -> __IMPOSSIBLE__+      Just hs	-> return $ implicitPs hs       Nothing	-> return []   p : ps -> do     i <- insImp p tel     case i of-      Just 0	-> __IMPOSSIBLE__-      Just n	-> insertImplicitPatterns (replicate n implicitP ++ p : ps) tel+      Just []	-> __IMPOSSIBLE__+      Just hs	-> insertImplicitPatterns (implicitPs hs ++ p : ps) tel       Nothing	-> (p :) <$> insertImplicitPatterns ps (absBody tel')   where     dummy = defaultArg $ unnamed ()@@ -55,4 +56,5 @@       ImpInsert n    -> return $ Just n       NoInsertNeeded -> return Nothing -    implicitP = Arg Hidden Relevant . unnamed . A.ImplicitP . PatRange $ noRange+    implicitPs [] = []+    implicitPs (h : hs) = (Arg h Relevant $ unnamed $ A.ImplicitP $ PatRange $ noRange) : implicitPs hs
src/full/Agda/TypeChecking/Rules/LHS/Instantiate.hs view
@@ -25,7 +25,7 @@ -- | Instantiate a telescope with a substitution. Might reorder the telescope. --   @instantiateTel (Γ : Tel)(σ : Γ --> Γ) = Γσ~@ --   Monadic only for debugging purposes.-instantiateTel :: MonadTCM tcm => Substitution -> Telescope -> tcm (Telescope, Permutation, [Term], [Type])+instantiateTel :: Substitution -> Telescope -> TCM (Telescope, Permutation, [Term], [Type]) instantiateTel s tel = liftTCM $ do    tel <- normalise tel@@ -49,7 +49,7 @@     ]    -- s' : Substitution Γσ-  let s' = rename psR s+  let s' = renameP psR s    reportSDoc "tc.lhs.inst" 15 $ nest 2 $     text "s'   =" <+> fsep (punctuate comma $ map (maybe (text "_") prettyTCM) s')@@ -80,7 +80,16 @@     text "tel3 =" <+> brackets (fsep $ punctuate comma $ map prettyTCM tel3)    -- p : Permutation (Γσ -> Γσ~)-  let p = reorderTel tel3+  p <- case reorderTel tel3 of+    Nothing -> inContext [] $ do+      xs <- mapM freshName_ names3+      addCtxs xs (Arg NotHidden Relevant prop) $ do+        err <- sep [ text "Recursive telescope in left hand side:"+                   , fsep [ parens (prettyTCM x <+> text ":" <+> prettyTCM t)+                          | (x, t) <- zip xs tel3 ]+                   ]+        typeError $ GenericError $ show err+    Just p  -> return p    reportSLn "tc.lhs.inst" 10 $ "p   = " ++ show p 
src/full/Agda/TypeChecking/Rules/LHS/Problem.hs view
@@ -41,6 +41,10 @@  type ProblemPart = Problem' () +instance Raise (Problem' p) where+  raiseFrom  m k p = p { problemTel = raiseFrom  m k $  problemTel p }+  renameFrom m k p = p { problemTel = renameFrom m k $  problemTel p }+ -- | The permutation should permute @allHoles@ of the patterns to correspond to --   the abstract patterns in the problem. type Problem	 = Problem' (Permutation, [Arg Pattern])
src/full/Agda/TypeChecking/Rules/LHS/Split.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE CPP #-}+{-# LANGUAGE CPP, PatternGuards #-}  module Agda.TypeChecking.Rules.LHS.Split where @@ -21,12 +21,15 @@ import Agda.TypeChecking.Monad import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce+import Agda.TypeChecking.Substitute import Agda.TypeChecking.Constraints import Agda.TypeChecking.Conversion import Agda.TypeChecking.Rules.LHS.Problem import Agda.TypeChecking.Rules.Term import Agda.TypeChecking.Monad.Builtin import Agda.TypeChecking.Free+import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.MetaVars  import Agda.Utils.List import Agda.Utils.Monad@@ -76,15 +79,18 @@     splitP []	     _		  _			 = throwError $ NothingToSplit     splitP ps	    []		  EmptyTel		 = __IMPOSSIBLE__     splitP (p : ps) ((i, q) : qs) tel0@(ExtendTel a tel) = do+      let tryAgain = splitP (p : ps) ((i, q) : qs) tel0       p <- lift $ expandLitPattern p       case asView $ namedThing $ unArg p of++        -- Case: literal pattern 	(xs, p@(A.LitP lit))  -> do           -- Note that, in the presence of --without-K, this branch is           -- based on the assumption that the types of literals are           -- not indexed.            -- Andreas, 2010-09-07 cannot split on irrelevant args-          when (argRelevance a == Irrelevant) $+          when (unusableRelevance $ argRelevance a) $             typeError $ SplitOnIrrelevant p a 	  b <- lift $ litType lit 	  ok <- lift $ do@@ -98,14 +104,35 @@ 		    (fmap (LitFocus lit q i) a) 		    (fmap (Problem ps ()) tel) 	    else keepGoing++        -- Case: constructor pattern 	(xs, p@(A.ConP _ (A.AmbQ cs) args)) -> do-	  a' <- reduce $ unArg a+	  a' <- liftTCM $ reduce $ unArg a 	  case unEl a' of++            -- Type is a meta and constructor is unambiguous,+            -- in this case try to instantiate the meta.+            MetaV{} | [c] <- cs -> do+              ok <- lift $ do+                Constructor{ conData = d } <- theDef <$> getConstInfo c+                dt            <- defType <$> getConstInfo d+                vs            <- newArgsMeta dt+                El _ (Sort s) <- reduce $ apply dt vs+                (True <$ noConstraints (equalType a' (El s $ Def d vs)))+                  `catchError` \_ -> return False+              if not ok then keepGoing else+                tryAgain++            -- Subcase: split type is a Def 	    Def d vs	-> do-	      def <- theDef <$> getConstInfo d+	      def <- liftTCM $ theDef <$> getConstInfo d               unless (defIsRecord def) $-                when (argRelevance a == Irrelevant) $-                  typeError $ SplitOnIrrelevant p a+                -- cannot split on irrelevant or non-strict things+                when (unusableRelevance $ argRelevance a) $ do+                  -- Andreas, 2011-10-04 unless allowed by option+                  allowed <- liftTCM $ optExperimentalIrrelevance <$> pragmaOptions+                  unless allowed $ typeError $ SplitOnIrrelevant p a+               let mp = case def of                         Datatype{dataPars = np} -> Just np                         Record{recPars = np}    -> Just np@@ -113,7 +140,7 @@               case mp of                 Nothing -> keepGoing                 Just np ->-		  traceCall (CheckPattern p EmptyTel (unArg a)) $ do  -- TODO: wrong telescope+		  liftTCM $ traceCall (CheckPattern p EmptyTel (unArg a)) $ do  -- TODO: wrong telescope                   -- Check that we construct something in the right datatype                   c <- do                       cs' <- mapM canonicalName cs@@ -124,9 +151,13 @@                             _                       -> __IMPOSSIBLE__                       cs0 <- cons <$> getConstInfo d'                       case [ c | (c, c') <- zip cs cs', elem c' cs0 ] of-                        c : _ -> return c   -- if there are more than one they will-                                            -- all have the same canonical form+                        [c]   -> return c                         []    -> typeError $ ConstructorPatternInWrongDatatype (head cs) d+                        cs    -> -- if there are more than one we give up (they might have different types)+                          typeError $ GenericError $+                            "Can't resolve overloaded constructors targeting the same datatype (" ++ show d ++ "):" +++                            unwords (map show cs)+ 		  let (pars, ixs) = genericSplitAt np vs 		  reportSDoc "tc.lhs.split" 10 $ 		    vcat [ sep [ text "splitting on"@@ -143,7 +174,9 @@ 				 xs 				 (fmap (Focus c args (getRange p) q i d pars ixs) a) 				 (fmap (Problem ps ()) tel)+            -- Subcase: split type is not a Def 	    _	-> keepGoing+        -- Case: neither literal nor constructor pattern 	p -> keepGoing       where 	keepGoing = do@@ -151,14 +184,13 @@ 	  Split p1 xs foc p2 <- underAbstraction a tel $ \tel -> splitP ps qs tel 	  return $ Split (mappend p0 p1) xs foc p2 --- | Checks that the indices are constructors applied to distinct--- variables which do not occur free in the parameters.+-- | Checks that the indices are constructors (or literals) applied to+-- distinct variables which do not occur free in the parameters.  wellFormedIndices-  :: MonadTCM tcm-  => [Arg Term] -- ^ Parameters.+  :: [Arg Term] -- ^ Parameters.   -> [Arg Term] -- ^ Indices.-  -> tcm ()+  -> TCM () wellFormedIndices pars ixs = do   pars <- normalise pars   ixs  <- normalise ixs@@ -171,12 +203,13 @@     []          -> return ()     (v , _) : _ -> typeError $ IndexFreeInParameter v pars   where-  -- | If the term consists solely of constructors applied to-  -- variables, then the variables are returned, and otherwise-  -- nothing.+  -- | If the term consists solely of constructors (or literals)+  -- applied to variables, then the variables are returned, and+  -- otherwise nothing.   constructorApplication :: Term -> Maybe [Nat]   constructorApplication (Var x [])   = Just [x]   constructorApplication (Con c args) = constructorApplications args+  constructorApplication (Lit {})     = Just []   constructorApplication _            = Nothing    constructorApplications :: [Arg Term] -> Maybe [Nat]
src/full/Agda/TypeChecking/Rules/LHS/Unify.hs view
@@ -1,25 +1,34 @@-{-# LANGUAGE CPP, MultiParamTypeClasses, GeneralizedNewtypeDeriving #-}+{-# LANGUAGE CPP, MultiParamTypeClasses, FlexibleInstances, TupleSections,+    GeneralizedNewtypeDeriving,+    DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable #-}  module Agda.TypeChecking.Rules.LHS.Unify where -import Control.Applicative+import Control.Arrow ((***), (&&&))+import Control.Applicative hiding (empty) import Control.Monad.State import Control.Monad.Reader import Control.Monad.Error+import Control.Monad.Writer  import Data.Map (Map) import qualified Data.Map as Map import Data.List hiding (sort)-import Data.Traversable (traverse) +import Data.Generics (Typeable, Data)+import Data.Foldable (Foldable)+import Data.Traversable (Traversable,traverse)+ import Agda.Syntax.Common import Agda.Syntax.Internal+import Agda.Syntax.Literal import Agda.Syntax.Position  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Exception-import Agda.TypeChecking.Conversion+import Agda.TypeChecking.Conversion -- equalTerm import Agda.TypeChecking.Constraints+import Agda.TypeChecking.Level (reallyUnLevelView) import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Substitute hiding (Substitution)@@ -35,15 +44,79 @@  #include "../../../undefined.h" import Agda.Utils.Impossible+import Agda.Utils.Size -newtype Unify a = U { unUnify :: ExceptionT UnifyException (StateT UnifyState TCM) a }-  deriving (Monad, MonadIO, Functor, Applicative, MonadReader TCEnv, MonadException UnifyException)+newtype Unify a = U { unUnify :: ReaderT UnifyEnv (WriterT UnifyOutput (ExceptionT UnifyException (StateT UnifyState TCM))) a }+  deriving (Monad, MonadIO, Functor, Applicative, MonadException UnifyException, MonadWriter UnifyOutput) -data Equality = Equal Type Term Term+instance MonadReader TCEnv Unify where+  ask = U $ ReaderT $ \ _ -> ask+  local cont (U (ReaderT f)) = U $ ReaderT $ \ a -> local cont (f a)++data UnifyMayPostpone = MayPostpone | MayNotPostpone++type UnifyEnv = UnifyMayPostpone+emptyUEnv   = MayPostpone++noPostponing :: Unify a -> Unify a+noPostponing (U (ReaderT f)) = U . ReaderT . const $ f MayNotPostpone++askPostpone :: Unify UnifyMayPostpone+askPostpone = U . ReaderT $ return++-- | Output the result of unification (success or maybe).+type UnifyOutput = Unifiable++emptyUOutput :: UnifyOutput+emptyUOutput = mempty++-- | Were two terms unifiable or did we have to postpone some equation such that we are not sure?+data Unifiable+  = Definitely  -- ^ Unification succeeded.+  | Possibly    -- ^ Unification did not fail, but we had to postpone a part.++-- | Conjunctive monoid.+instance Monoid Unifiable where+  mempty = Definitely+  mappend Definitely Definitely = Definitely+  mappend _ _ = Possibly++-- | Tell that something could not be unified right now,+--   so the unification succeeds only 'Possibly'.+reportPostponing :: Unify ()+reportPostponing = tell Possibly++{-+-- | Check whether unification proceeded without postponement.+listenResult :: Unify () -> Unify UnifyOutput+listenResult m = snd <$> listen m+-}++-- | Check whether unification proceeded without postponement.+ifClean :: Unify () -> Unify a -> Unify a -> Unify a+ifClean m t e = do+  ok <- snd <$> listen m+  case ok of+    Definitely -> t+    Possibly ->   e++{-+-- | Check whether unification proceeded without postponement.+ifClean :: Unify a -> (a -> Unify b) -> (a -> Unify b) -> Unify b+ifClean m t e = do+  (ok, a) <- listen m+  case ok of+    Definitely -> t a+    Possibly ->   e a+-}++data Equality = Equal TypeHH Term Term type Sub = Map Nat Term -data UnifyException = ConstructorMismatch Type Term Term-                    | GenericUnifyException String+data UnifyException+  = ConstructorMismatch Type Term Term+  | StronglyRigidOccurrence Type Term Term+  | GenericUnifyException String  instance Error UnifyException where   noMsg  = strMsg ""@@ -58,19 +131,35 @@ constructorMismatch :: Type -> Term -> Term -> Unify a constructorMismatch a u v = throwException $ ConstructorMismatch a u v +constructorMismatchHH :: TypeHH -> Term -> Term -> Unify a+constructorMismatchHH aHH = constructorMismatch (leftHH aHH)+  -- do not report heterogenity+{-+constructorMismatchHH (Hom a) u v = constructorMismatch a u v+constructorMismatchHH (Het a1 a2) u v = constructorMismatch a1 u v+-}++{-+instance MonadReader TCEnv Unify where+  ask           = U . lift  $ ask+  local k (U m) = U . lift . lift . lift $ local k m+-}+ instance MonadState TCState Unify where-  get = U . lift . lift $ get-  put = U . lift . lift . put+  get = U . lift . lift . lift . lift $ get+  put = U . lift . lift . lift . lift . put  instance MonadTCM Unify where-  liftTCM = U . lift . lift+  liftTCM = U . lift . lift . lift . lift  instance Subst Equality where   substs us	 (Equal a s t) = Equal (substs us a)	  (substs us s)	     (substs us t)   substUnder n u (Equal a s t) = Equal (substUnder n u a) (substUnder n u s) (substUnder n u t) +{- UNUSED getSub :: Unify Sub getSub = U $ gets uniSub+-}  onSub :: (Sub -> a) -> Unify a onSub f = U $ gets $ f . uniSub@@ -79,13 +168,73 @@ modSub f = U $ modify $ \s -> s { uniSub = f $ uniSub s }  checkEqualities :: [Equality] -> TCM ()-checkEqualities eqs = noConstraints $ concat <$> mapM checkEq eqs+checkEqualities eqs = noConstraints $ mapM_ checkEq eqs   where-    checkEq (Equal a s t) = equalTerm a s t+    checkEq (Equal (Hom a) s t) = equalTerm a s t+    checkEq (Equal (Het a1 a2) s t) = typeError $ HeterogeneousEquality s a1 t a2 +-- | Force equality now instead of postponing it using 'addEquality'.+checkEquality :: Type -> Term -> Term -> TCM ()+checkEquality a u v = noConstraints $ equalTerm a u v++-- | Try equality.  If constraints remain, postpone (enter unsafe mode).+--   Heterogeneous equalities cannot be tried nor reawakened,+--   so we can throw them away and flag "dirty".+checkEqualityHH :: TypeHH -> Term -> Term -> Unify ()+checkEqualityHH (Hom a) u v = do+    ok <- liftTCM $ noConstraints (True <$ equalTerm a u v)  -- no constraints left+            `catchError` \ err -> return False+    if ok then return () else addEquality a u v+checkEqualityHH aHH@(Het a1 a2) u v = -- reportPostponing -- enter "dirty" mode+    addEqualityHH aHH u v -- postpone, enter "dirty" mode+{-+checkEqualityHH (Het a1 a2) u v = noConstraints $ do+  equalType a1 a2+  equalTerm a1 u v+-}+{-+checkEqualityHH :: MonadTCM tcm => TypeHH -> Term -> Term -> tcm ()+checkEqualityHH aHH u v = do+  a  <- forceHom aHH+  cs <- equalTerm a u v+  if null cs then return () else addEquality a u v+-}+++-- | Check whether heterogeneous situation is really homogeneous.+--   If not, give up.+forceHom :: TypeHH -> TCM Type+forceHom (Hom a) = return a+forceHom (Het a1 a2) = do+  noConstraints $ equalType a1 a2+  return a1+ addEquality :: Type -> Term -> Term -> Unify ()-addEquality a u v = U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }+addEquality a = addEqualityHH (Hom a) +addEqualityHH :: TypeHH -> Term -> Term -> Unify ()+addEqualityHH aHH u v = do+  reportPostponing+  U $ modify $ \s -> s { uniConstr = Equal aHH u v : uniConstr s }++{-+addEquality :: Type -> Term -> Term -> Unify ()+addEquality a u v = do+  reportPostponing+  U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }+-}++{-+addEquality :: Type -> Term -> Term -> Unify ()+addEquality a u v = do+   p <- askPostpone+   case p of+     MayPostpone ->  do+       reportPostponing+       U $ modify $ \s -> s { uniConstr = Equal a u v : uniConstr s }+     MayNotPostpone -> checkEquality a u v+-}+ takeEqualities :: Unify [Equality] takeEqualities = U $ do   s <- get@@ -95,16 +244,28 @@ -- | Includes flexible occurrences, metas need to be solved. TODO: relax? --   TODO: later solutions may remove flexible occurences occursCheck :: Nat -> Term -> Type -> Unify ()-occursCheck i u a-  | i `freeIn` u = do-    reportSDoc "tc.lhs.unify" 20 $ prettyTCM (Var i []) <+> text "occurs in" <+> prettyTCM u-    typeError $ UnequalTerms CmpEq (Var i []) u a-  | otherwise	 = return ()+occursCheck i u a = do+  let fv = freeVars u+      v  = Var i []+  case occurrence i fv of+    -- Andreas, 2011-04-14+    -- a strongly rigid recursive occurrences signals unsolvability+    StronglyRigid -> do+      liftTCM $ reportSDoc "tc.lhs.unify" 20 $ prettyTCM v <+> text "occurs strongly rigidly in" <+> prettyTCM u+      throwException $ StronglyRigidOccurrence a v u +    NoOccurrence  -> return ()  -- this includes irrelevant occurrences!++    -- any other recursive occurrence leads to unclear situation+    _             -> do+      liftTCM $ reportSDoc "tc.lhs.unify" 20 $ prettyTCM v <+> text "occurs in" <+> prettyTCM u+      typeError $ UnequalTerms CmpEq v u a++-- | Assignment with preceding occurs check. (|->) :: Nat -> (Term, Type) -> Unify () i |-> (u, a) = do   occursCheck i u a-  reportSDoc "tc.lhs.unify" 15 $ prettyTCM (Var i []) <+> text ":=" <+> prettyTCM u+  liftTCM $ reportSDoc "tc.lhs.unify" 15 $ prettyTCM (Var i []) <+> text ":=" <+> prettyTCM u   modSub $ Map.insert i (killRange u)  makeSubstitution :: Sub -> [Term]@@ -113,11 +274,32 @@     val i = maybe (Var i []) id $ Map.lookup i sub  -- | Apply the current substitution on a term and reduce to weak head normal form.-ureduce :: Term -> Unify Term-ureduce u = doEtaContractImplicit $ do-  rho <- onSub makeSubstitution-  liftTCM $ etaContract =<< reduce (substs rho u)+class UReduce t where+  ureduce :: t -> Unify t +instance UReduce Term where+  ureduce u = doEtaContractImplicit $ do+    rho <- onSub makeSubstitution+    liftTCM $ etaContract =<< normalise (substs rho u)+-- Andreas, 2011-06-22, fix related to issue 423+-- To make eta contraction work better, I switched reduce to normalise.+-- I hope the performance penalty is not big (since we are dealing with+-- l.h.s. terms only).+-- A systematic solution would make unification type-directed and+-- eta-insensitive...+--   liftTCM $ etaContract =<< reduce (substs rho u)++instance UReduce Type where+  ureduce (El s t) = El s <$> ureduce t++instance UReduce t => UReduce (HomHet t) where+  ureduce (Hom t)     = Hom <$> ureduce t+  ureduce (Het t1 t2) = Het <$> ureduce t1 <*> ureduce t2++instance UReduce t => UReduce (Maybe t) where+  ureduce Nothing = return Nothing+  ureduce (Just t) = Just <$> ureduce t+ -- | Take a substitution σ and ensure that no variables from the domain appear --   in the targets. The context of the targets is not changed. --   TODO: can this be expressed using makeSubstitution and substs?@@ -139,6 +321,104 @@  data UnificationResult = Unifies Substitution | NoUnify Type Term Term | DontKnow TCErr +-- | Are we in a homogeneous (one type) or heterogeneous (two types) situation?+data HomHet a+  = Hom a    -- ^ homogeneous+  | Het a a  -- ^ heterogeneous+  deriving (Typeable, Data, Show, Eq, Ord, Functor, Foldable, Traversable)++isHom :: HomHet a -> Bool+isHom Hom{} = True+isHom Het{} = False++fromHom :: HomHet a -> a+fromHom (Hom a) = a+fromHom (Het{}) = __IMPOSSIBLE__++leftHH :: HomHet a -> a+leftHH (Hom a) = a+leftHH (Het a1 a2) = a1++rightHH :: HomHet a -> a+rightHH (Hom a) = a+rightHH (Het a1 a2) = a2++instance (Raise a) => Raise (HomHet a) where+  raiseFrom n m  = fmap (raiseFrom n m)+  renameFrom n f = fmap (renameFrom n f)++instance (Subst a) => Subst (HomHet a) where+  substUnder n u = fmap (substUnder n u)+  substs us      = fmap (substs us)++instance (PrettyTCM a) => PrettyTCM (HomHet a) where+  prettyTCM (Hom a) = prettyTCM a+  prettyTCM (Het a1 a2) = prettyTCM a1 <+> text "||" <+> prettyTCM a2++type TermHH    = HomHet Term+type TypeHH    = HomHet Type+--type FunViewHH = FunV TypeHH+type TelHH     = Tele (Arg TypeHH)+type TelViewHH = TelV TypeHH++absAppHH :: SubstHH t tHH => Abs t -> TermHH -> tHH+absAppHH (Abs   _ t) u = substHH u t+absAppHH (NoAbs _ t) u = trivialHH t++class ApplyHH t where+  applyHH :: t -> HomHet Args -> HomHet t++instance ApplyHH Term where+  applyHH t = fmap (apply t)++instance ApplyHH Type where+  applyHH t = fmap (apply t)++substHH :: SubstHH t tHH => TermHH -> t -> tHH+substHH = substUnderHH 0++-- | @substHH u t@ substitutes @u@ for the 0th variable in @t@.+class SubstHH t tHH where+  substUnderHH :: Nat -> TermHH -> t -> tHH+  trivialHH    :: t -> tHH++instance (Free a, Subst a) => SubstHH (HomHet a) (HomHet a) where+  substUnderHH n (Hom u) t = fmap (substUnder n u) t+  substUnderHH n (Het u1 u2) (Hom t) =+    if n `relevantIn` t then Het (substUnder n u1 t) (substUnder n u2 t)+     else Hom (substUnder n u1 t)+  substUnderHH n (Het u1 u2) (Het t1 t2) = Het (substUnder n u1 t1) (substUnder n u2 t2)+  trivialHH = id++instance SubstHH Term (HomHet Term) where+  substUnderHH n uHH t = fmap (\ u -> substUnder n u t) uHH+  trivialHH = Hom++instance SubstHH Type (HomHet Type) where+  substUnderHH n uHH (El s t) = fmap (\ u -> El s $ substUnder n u t) uHH+-- fmap $ fmap (\ (El s v) -> El s $ substUnderHH n u v)+  -- we ignore sorts in substitution, since they do not contain+  -- terms we can match on+  trivialHH = Hom++instance SubstHH a b => SubstHH (Arg a) (Arg b) where+  substUnderHH n u = fmap $ substUnderHH n u+  trivialHH = fmap trivialHH++instance SubstHH a b => SubstHH (Abs a) (Abs b) where+  substUnderHH n u (Abs   x v) = Abs x $ substUnderHH (n + 1) u v+  substUnderHH n u (NoAbs x v) = NoAbs x $ substUnderHH n u v+  trivialHH = fmap trivialHH++instance (SubstHH a a', SubstHH b b') => SubstHH (a,b) (a',b') where+    substUnderHH n u (x,y) = (substUnderHH n u x, substUnderHH n u y)+    trivialHH = trivialHH *** trivialHH++instance SubstHH a b => SubstHH (Tele a) (Tele b) where+  substUnderHH n u  EmptyTel         = EmptyTel+  substUnderHH n u (ExtendTel t tel) = uncurry ExtendTel $ substUnderHH n u (t, tel)+  trivialHH = fmap trivialHH+ -- | Unify indices. unifyIndices_ :: MonadTCM tcm => FlexibleVars -> Type -> [Arg Term] -> [Arg Term] -> tcm Substitution unifyIndices_ flex a us vs = liftTCM $ do@@ -150,6 +430,7 @@  unifyIndices :: MonadTCM tcm => FlexibleVars -> Type -> [Arg Term] -> [Arg Term] -> tcm UnificationResult unifyIndices flex a us vs = liftTCM $ do+    a <- reduce a     reportSDoc "tc.lhs.unify" 10 $       sep [ text "unifyIndices"           , nest 2 $ text (show flex)@@ -158,13 +439,19 @@           , nest 2 $ prettyList $ map prettyTCM vs           , nest 2 $ text "context: " <+> (prettyTCM =<< getContextTelescope)           ]-    (r, USt s eqs) <- flip runStateT emptyUState . runExceptionT . unUnify $-                      unifyArgs a us vs >> recheckConstraints+    (r, USt s eqs) <- flip runStateT emptyUState . runExceptionT . runWriterT . flip runReaderT emptyUEnv . unUnify $ do+        ifClean (unifyConstructorArgs (Hom a) us vs)+          -- clean: continue unifying+          recheckConstraints+          -- dirty: just check equalities to trigger error message+          recheckEqualities      case r of-      Left (ConstructorMismatch a u v)  -> return $ NoUnify a u v-      Left (GenericUnifyException err)  -> fail err-      Right _                           -> do+      Left (ConstructorMismatch     a u v)  -> return $ NoUnify a u v+      -- Andreas 2011-04-14:+      Left (StronglyRigidOccurrence a u v)  -> return $ NoUnify a u v+      Left (GenericUnifyException     err)  -> fail err+      Right _                               -> do         checkEqualities $ substs (makeSubstitution s) eqs         let n = maximum $ (-1) : flex         return $ Unifies $ flattenSubstitution [ Map.lookup i s | i <- [0..n] ]@@ -172,30 +459,125 @@   where     flexible i = i `elem` flex +    flexibleTerm (Var i []) = flexible i+    flexibleTerm _          = False++    {- Andreas, 2011-09-12+       We unify constructors in heterogeneous situations, as long+       as the two types have the same shape (construct the same datatype).+     -}++    unifyConstructorArgs ::+         TypeHH  -- ^ The ureduced type of the constructor, instantiated to the parameters.+                 --   Possibly heterogeneous, since pars of lhs and rhs might differ.+      -> [Arg Term]  -- ^ the arguments of the constructor (lhs)+      -> [Arg Term]  -- ^ the arguments of the constructor (rhs)+      -> Unify ()+    unifyConstructorArgs a12 [] [] = return ()+    unifyConstructorArgs a12 vs1 vs2 = do+      liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep+        [ text "unifyConstructorArgs"+	-- , nest 2 $ parens (prettyTCM tel0)+	, nest 2 $ prettyList $ map prettyTCM vs1+	, nest 2 $ prettyList $ map prettyTCM vs2+        , nest 2 $ text "constructor type:" <+> prettyTCM a12+        ]+      let n = genericLength vs1+      -- since c vs1 and c vs2 have same-shaped type+      -- vs1 and vs2 must have same length+      when (n /= genericLength vs2) $ __IMPOSSIBLE__+      TelV tel12 _ <- telViewUpToHH n a12+      -- if the length of tel12 is not n, then something is wrong+      -- e.g. a12 is not a same-shaped pair of types+      when (n /= size tel12) $ __IMPOSSIBLE__+      unifyConArgs tel12 vs1 vs2++    unifyConArgs ::+         TelHH  -- ^ The telescope(s) of the constructor args    [length = n].+      -> [Arg Term]  -- ^ the arguments of the constructor (lhs) [length = n].+      -> [Arg Term]  -- ^ the arguments of the constructor (rhs) [length = n].+      -> Unify ()+    unifyConArgs _ (_ : _) [] = __IMPOSSIBLE__+    unifyConArgs _ [] (_ : _) = __IMPOSSIBLE__+    unifyConArgs _ []      [] = return ()+    unifyConArgs EmptyTel _ _ = __IMPOSSIBLE__+    unifyConArgs tel0@(ExtendTel a@(Arg _ rel bHH) tel) us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do+      liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep+        [ text "unifyConArgs"+	-- , nest 2 $ parens (prettyTCM tel0)+	, nest 2 $ prettyList $ map prettyTCM us0+	, nest 2 $ prettyList $ map prettyTCM vs0+	, nest 2 $ text "at telescope" <+> prettyTCM bHH <+> text "..."+        ]+      liftTCM $ reportSDoc "tc.lhs.unify" 25 $+        (text $ "tel0 = " ++ show tel0)+++      -- Andreas, Ulf, 2011-09-08 (AIM XVI)+      -- in case of dependent function type, we cannot postpone+      -- unification of u and v, otherwise us or vs might be ill-typed+      -- skip irrelevant parts+      uHH <- if (rel == Irrelevant) then return $ Hom u else+               ifClean (unifyHH bHH u v) (return $ Hom u) (return $ Het u v)++      liftTCM $ reportSDoc "tc.lhs.unify" 25 $+        (text "uHH (before ureduce) =" <+> prettyTCM uHH)++      uHH <- traverse ureduce uHH++      liftTCM $ reportSDoc "tc.lhs.unify" 25 $+        (text "uHH (after  ureduce) =" <+> prettyTCM uHH)++      unifyConArgs (tel `absAppHH` uHH) us vs+++{-     unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()+    unifyArgs a = unifyArgsHH (Hom a)+-}++    -- | Used for arguments of a 'Def', not 'Con'.+    unifyArgs :: Type -> [Arg Term] -> [Arg Term] -> Unify ()     unifyArgs _ (_ : _) [] = __IMPOSSIBLE__     unifyArgs _ [] (_ : _) = __IMPOSSIBLE__     unifyArgs _ [] [] = return ()     unifyArgs a us0@(arg@(Arg _ _ u) : us) vs0@(Arg _ _ v : vs) = do-      reportSDoc "tc.lhs.unify" 15 $ sep+      liftTCM $ reportSDoc "tc.lhs.unify" 15 $ sep         [ text "unifyArgs" 	, nest 2 $ parens (prettyTCM a) 	, nest 2 $ prettyList $ map prettyTCM us0 	, nest 2 $ prettyList $ map prettyTCM vs0         ]-      a <- reduce a-      case funView $ unEl a of-	FunV b _  -> do-	  unify (unArg b) u v+      a <- ureduce a  -- Q: reduce sufficient?+      case unEl a of+	Pi b _  -> do+          -- Andreas, Ulf, 2011-09-08 (AIM XVI)+          -- in case of dependent function type, we cannot postpone+          -- unification of u and v, otherwise us or vs might be ill-typed+          let dep = dependent $ unEl a+          -- skip irrelevant parts+	  unless (argRelevance b == Irrelevant) $+            (if dep then noPostponing else id) $+              unify (unArg b) u v           arg <- traverse ureduce arg 	  unifyArgs (a `piApply` [arg]) us vs 	_	  -> __IMPOSSIBLE__+      where dependent (Pi _ NoAbs{}) = False+            dependent (Pi b c)       = 0 `relevantIn` absBody c+            dependent _              = False +    -- | Check using conversion check.+    recheckEqualities :: Unify ()+    recheckEqualities = do+      eqs <- takeEqualities+      liftTCM $ checkEqualities eqs++    -- | Check using unifier.     recheckConstraints :: Unify ()     recheckConstraints = mapM_ unifyEquality =<< takeEqualities      unifyEquality :: Equality -> Unify ()-    unifyEquality (Equal a u v) = unify a u v+    unifyEquality (Equal aHH u v) = unifyHH aHH u v      i |->> x = do       i |-> x@@ -203,17 +585,151 @@      unifySizes :: Term -> Term -> Unify ()     unifySizes u v = do-      sz <- sizeType-      su <- sizeView u-      sv <- sizeView v+      sz <- liftTCM sizeType+      su <- liftTCM $ sizeView u+      sv <- liftTCM $ sizeView v       case (su, sv) of         (SizeSuc u, SizeSuc v) -> unify sz u v         (SizeSuc u, SizeInf) -> unify sz u v         (SizeInf, SizeSuc v) -> unify sz u v         _                    -> unifyAtom sz u v -    -- TODO: eta for records here+    -- | Possibly heterogeneous unification (but at same-shaped types).+    --   In het. situations, we only search for a mismatch!+    --+    -- TODO: eta for records!+    unifyHH ::+        TypeHH  -- ^ one or two types, need not be in (u)reduced form+     -> Term -> Term -> Unify ()+    unifyHH aHH u v = do+      u <- liftTCM . constructorForm =<< ureduce u+      v <- liftTCM . constructorForm =<< ureduce v+      liftTCM $ reportSDoc "tc.lhs.unify" 15 $+	sep [ text "unifyHH"+	    , nest 2 $ parens $ prettyTCM u+	    , nest 2 $ parens $ prettyTCM v+	    , nest 2 $ text ":" <+> prettyTCM aHH+	    ]+      -- obtain the (== Size) function+      isSizeName <- liftTCM isSizeNameTest++      -- check whether types have the same shape+      (aHH, sh) <- shapeViewHH =<< ureduce aHH+      case sh of+        ElseSh  -> checkEqualityHH aHH u v -- not a type or not same types++        DefSh d -> if isSizeName d then unifySizes u v+                                   else unifyAtomHH aHH u v+        _ -> unifyAtomHH aHH u v++    unifyAtomHH ::+         TypeHH -- ^ in ureduced form+      -> Term -> Term -> Unify ()+    unifyAtomHH aHH0 u v = do+      let (aHH, homogeneous, a) = case aHH0 of+            Hom a                -> (aHH0, True, a)+            Het a1 a2 | a1 == a2 -> (Hom a1, True, a1) -- BRITTLE: just checking syn.eq.+            _                    -> (aHH0, False, __IMPOSSIBLE__)+           -- use @a@ only if 'homogeneous' holds!++          fallback = checkEqualityHH aHH u v++      liftTCM $ reportSDoc "tc.lhs.unify" 15 $+	sep [ text "unifyAtom"+	    , nest 2 $ prettyTCM u <> if flexibleTerm u then text " (flexible)" else empty+            , nest 2 $ text "=?="+	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty+	    , nest 2 $ text ":" <+> prettyTCM aHH+	    ]+      case (u, v) of+        -- Ulf, 2011-06-19+        -- We don't want to worry about levels here.+        (Level l, v) -> do+            u <- liftTCM $ reallyUnLevelView l+            unifyAtomHH aHH u v+        (u, Level l) -> do+            v <- liftTCM $ reallyUnLevelView l+            unifyAtomHH aHH u v+	(Var i us, Var j vs) | i == j  -> checkEqualityHH aHH u v+	(Var i [], v) | homogeneous && flexible i -> i |->> (v, a)+	(u, Var j []) | homogeneous && flexible j -> j |->> (u, a)+	(Con c us, Con c' vs)+          | c == c' -> do+              r <- ureduce =<< liftTCM (dataOrRecordTypeHH c aHH)+              case r of+                Just a'HH -> unifyConstructorArgs a'HH us vs+                Nothing   -> checkEqualityHH aHH u v+          | otherwise -> constructorMismatchHH aHH u v+        -- Definitions are ok as long as they can't reduce (i.e. datatypes/axioms)+	(Def d us, Def d' vs)+          | d == d' -> do+              -- d must be a data, record or axiom+              def <- getConstInfo d+              let ok = case theDef def of+                    Datatype{} -> True+                    Record{}   -> True+                    Axiom{}    -> True+                    _          -> False+              inj <- liftTCM $ optInjectiveTypeConstructors <$> pragmaOptions+              if inj && ok+                then unifyArgs (defType def) us vs+                else checkEqualityHH aHH u v+          -- Andreas, 2011-05-30: if heads disagree, abort+          -- but do not raise "mismatch" because otherwise type constructors+          -- would be distinct+          | otherwise -> checkEqualityHH aHH u v -- typeError $ UnequalTerms CmpEq u v a+        (Lit l1, Lit l2)+          | l1 == l2  -> return ()+          | otherwise -> constructorMismatchHH aHH u v++        -- We can instantiate metas if the other term is inert (constructor application)+        -- Andreas, 2011-09-13: test/succeed/IndexInference needs this feature.+        (MetaV m us, v) | homogeneous -> do+            ok <- liftTCM $ instMeta a m us v+            liftTCM $ reportSDoc "tc.lhs.unify" 40 $+              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]+                   , nest 2 $ sep [ prettyTCM u, text ":=", prettyTCM =<< normalise u ]+                   ]+            if ok then unify a u v+                  else addEquality a u v+        (u, MetaV m vs) | homogeneous -> do+            ok <- liftTCM $ instMeta a m vs u+            liftTCM $ reportSDoc "tc.lhs.unify" 40 $+              vcat [ fsep [ text "inst meta", text $ if ok then "(ok)" else "(not ok)" ]+                   , nest 2 $ sep [ prettyTCM v, text ":=", prettyTCM =<< normalise v ]+                   ]+            if ok then unify a u v+                  else addEquality a u v++	(Con c us, _) -> do+           md <- isEtaRecordTypeHH aHH+           case md of+             Just (d, parsHH) -> do+               (tel, vs) <- liftTCM $ etaExpandRecord d (rightHH parsHH) v+               b <- liftTCM $ getRecordConstructorType d+               bHH <- ureduce (b `applyHH` parsHH)+               unifyConstructorArgs bHH us vs+             Nothing -> fallback++	(_, Con c vs) -> do+           md <- isEtaRecordTypeHH aHH+           case md of+             Just (d, parsHH) -> do+               (tel, us) <- liftTCM $ etaExpandRecord d (leftHH parsHH) u+               b <- liftTCM $ getRecordConstructorType d+               bHH <- ureduce (b `applyHH` parsHH)+               unifyConstructorArgs bHH us vs+             Nothing -> fallback++        -- Andreas, 2011-05-30: If I put checkEquality below, then Issue81 fails+        -- because there are definitions blocked by flexibles that need postponement+	_  -> fallback++     unify :: Type -> Term -> Term -> Unify ()+    unify a = unifyHH (Hom a)+{-+    unify :: Type -> Term -> Term -> Unify ()     unify a u v = do       u <- constructorForm =<< ureduce u       v <- constructorForm =<< ureduce v@@ -226,11 +742,33 @@       isSize <- isSizeType a       if isSize then unifySizes u v                 else unifyAtom a u v+-}      unifyAtom :: Type -> Term -> Term -> Unify ()-    unifyAtom a u v =+    unifyAtom a = unifyAtomHH (Hom a)++{-+    unifyAtom :: Type -> Term -> Term -> Unify ()+    unifyAtom a u v = do+      reportSDoc "tc.lhs.unify" 15 $+	sep [ text "unifyAtom"+	    , nest 2 $ prettyTCM u <> if flexibleTerm u then text " (flexible)" else empty+            , nest 2 $ text "=?="+	    , nest 2 $ prettyTCM v <> if flexibleTerm v then text " (flexible)" else empty+	    , nest 2 $ text ":" <+> prettyTCM a+	    ]       case (u, v) of-	(Var i us, Var j vs) | i == j  -> addEquality a u v+        -- Ulf, 2011-06-19+        -- We don't want to worry about levels here.+        (Level l, v) -> do+            u <- liftTCM $ reallyUnLevelView l+            unifyAtom a u v+        (u, Level l) -> do+            v <- liftTCM $ reallyUnLevelView l+            unifyAtom a u v+        -- Andreas, 2011-05-30+        -- Force equality now rather than postponing it with addEquality+	(Var i us, Var j vs) | i == j  -> checkEquality a u v 	(Var i [], v) | flexible i -> i |->> (v, a) 	(u, Var j []) | flexible j -> j |->> (u, a) 	(Con c us, Con c' vs)@@ -252,6 +790,17 @@               if inj && ok                 then unifyArgs (defType def) us vs                 else addEquality a u v+{- Andreas: checkEquality breaks Data.Vec.Equality+   we need an injectivity test for data types, Vec A n is injective!+                else checkEquality a u v+                -- Andreas: force equality now instead of postponing+                -- We do not want to end up in a heterogeneous situation,+                -- where u and v have different types+-}+          -- Andreas, 2011-05-30: if heads disagree, abort+          -- but do not raise "mismatch" because otherwise type constructors+          -- would be distinct+          | otherwise -> typeError $ UnequalTerms CmpEq u v a         (Lit l1, Lit l2)           | l1 == l2  -> return ()           | otherwise -> constructorMismatch a u v@@ -273,8 +822,10 @@                    ]             if ok then unify a u v                   else addEquality a u v+        -- Andreas, 2011-05-30: If I put checkEquality below, then Issue81 fails+        -- because there are definitions blocked by flexibles that need postponement 	_  -> addEquality a u v-+-}     -- The contexts are transient when unifying, so we should just instantiate to     -- constructor heads and generate fresh metas for the arguments. Beware of     -- constructors that aren't fully applied.@@ -301,16 +852,19 @@                 tel <- getContextTelescope                 -- important: create the meta in the same environment as the original meta                 newArgsMetaCtx b' tel us-            noConstraints $ assignV a m us (v' `apply` margs)+            noConstraints $ assignV m us (v' `apply` margs)             return True           `catchError` \_ -> return False      inertApplication :: Type -> Term -> TCM (Maybe (Term, Type, Args))     inertApplication a v =       case v of+        Con c vs -> fmap (\ b -> (Con c [], b, vs)) <$> dataOrRecordType c a+{-         Con c vs -> do           b <- dataOrRecordType c a           return $ Just (Con c [], b, vs)+-}         Def d vs -> do           def <- getConstInfo d           let ans = Just (Def d [], defType def, vs)@@ -327,16 +881,157 @@ -- -- Precondition: The type has to correspond to an application of the -- given constructor.+dataOrRecordType+  :: QName -- ^ Constructor name.+  -> Type  -- ^ Type of constructor application (must end in data/record).+  -> TCM (Maybe Type) -- ^ Type of constructor, applied to pars.+dataOrRecordType c a = fmap (\ (d, b, args) -> b `apply` args) <$> dataOrRecordType' c a +dataOrRecordType' ::+     QName -- ^ Constructor name.+  -> Type  -- ^ Type of constructor application (must end in data/record).+  -> TCM (Maybe (QName, Type, Args))+           -- ^ Name of data/record type,+           --   type of constructor to be applied, and+           --   data/record parameters+dataOrRecordType' c a = do+  -- The telescope ends with a datatype or a record.+  TelV _ (El _ (Def d args)) <- telView a+  def <- theDef <$> getConstInfo d+  r <- case def of+    Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c+    Record  {recPars  = n} -> Just . ((,) n) <$> getRecordConstructorType d+    _		           -> return Nothing+  return $ fmap (\ (n, a') -> (d, a', genericTake n args)) r++-- | Heterogeneous situation.+--   @a1@ and @a2@ need to end in same datatype/record.+dataOrRecordTypeHH ::+     QName      -- ^ Constructor name.+  -> TypeHH     -- ^ Type(s) of constructor application (must end in same data/record).+  -> TCM (Maybe TypeHH) -- ^ Type of constructor, instantiated possibly heterogeneously to parameters.+dataOrRecordTypeHH c (Hom a) = fmap Hom <$> dataOrRecordType c a+dataOrRecordTypeHH c (Het a1 a2) = do+  r1 <- dataOrRecordType' c a1+  r2 <- dataOrRecordType' c a2  -- b2 may have different parameters than b1!+  return $ case (r1, r2) of+    (Just (d1, b1, pars1), Just (d2, b2, pars2)) | d1 == d2 -> Just $+        -- Andreas, 2011-09-15 if no parameters, we can stay homogeneous+        if null pars1 && null pars2 then Hom b1+         -- if parameters, go heterogeneous+         -- TODO: make this smarter, because parameters could be equal!+         else Het (b1 `apply` pars1) (b2 `apply` pars2)+    _ -> Nothing++-- | Return record type identifier if argument is a record type.+isEtaRecordTypeHH :: MonadTCM tcm => TypeHH -> tcm (Maybe (QName, HomHet Args))+isEtaRecordTypeHH (Hom a) = fmap (\ (d, ps) -> (d, Hom ps)) <$> liftTCM (isEtaRecordType a)+isEtaRecordTypeHH (Het a1 a2) = do+  m1 <- liftTCM $ isEtaRecordType a1+  m2 <- liftTCM $ isEtaRecordType a2+  case (m1, m2) of+    (Just (d1, as1), Just (d2, as2)) | d1 == d2 -> return $ Just (d1, Het as1 as2)+    _ -> return Nothing+++{- dataOrRecordType :: MonadTCM tcm-                 => QName -- ^ Constructor name.-                 -> Type -> tcm Type-dataOrRecordType c a = do+  => QName -- ^ Constructor name.+  -> Type  -- ^ Type of constructor application (must end in data/record).+  -> tcm (Maybe Type) -- ^ Type of constructor, applied to pars.+dataOrRecordType c a = fmap snd <$> dataOrRecordType' c a++dataOrRecordType' :: MonadTCM tcm+  => QName -- ^ Constructor name.+  -> Type  -- ^ Type of constructor application (must end in data/record).+  -> tcm (Maybe (QName, -- ^ Name of data/record type.+                 Type))  -- ^ Type of constructor, applied to pars.+dataOrRecordType' c a = do   -- The telescope ends with a datatype or a record.   TelV _ (El _ (Def d args)) <- telView a   def <- theDef <$> getConstInfo d-  (n, a')  <- case def of-    Datatype{dataPars = n} -> ((,) n) . defType <$> getConstInfo c-    Record  {recPars  = n} -> ((,) n) <$> getRecordConstructorType d-    _		           -> __IMPOSSIBLE__-  return (a' `apply` genericTake n args)+  r <- case def of+    Datatype{dataPars = n} -> Just . ((,) n) . defType <$> getConstInfo c+    Record  {recPars  = n} -> Just . ((,) n) <$> getRecordConstructorType d+    _		           -> return Nothing+  return $ fmap (\ (n, a') -> (d, a' `apply` genericTake n args)) r++-- | Heterogeneous situation.+--   @a1@ and @a2@ need to end in same datatype/record.+dataOrRecordTypeHH :: MonadTCM tcm+  => QName      -- ^ Constructor name.+  -> TypeHH     -- ^ Type(s) of constructor application (must end in same data/record).+  -> tcm (Maybe TypeHH) -- ^ Type of constructor, instantiated possibly heterogeneously to parameters.+dataOrRecordTypeHH c (Hom a) = fmap Hom <$> dataOrRecordType c a+dataOrRecordTypeHH c (Het a1 a2) = do+  r1 <- dataOrRecordType' c a1+  r2 <- dataOrRecordType' c a2  -- b2 may have different parameters than b1!+  return $ case (r1, r2) of+    (Just (d1, b1), Just (d2, b2)) | d1 == d2 -> Just $ Het b1 b2+    _ -> Nothing+-}++-- | Views an expression (pair) as type shape.  Fails if not same shape.+data ShapeView a+  = PiSh (Arg a) (Abs a)+  | FunSh (Arg a) a+  | DefSh QName   -- ^ data/record+  | VarSh Nat     -- ^ neutral type+  | LitSh Literal -- ^ built-in type+  | SortSh+  | MetaSh        -- ^ some meta+  | ElseSh        -- ^ not a type or not definitely same shape+  deriving (Typeable, Data, Show, Eq, Ord, Functor)++-- | Return the type and its shape.  Expects input in (u)reduced form.+shapeView :: Type -> Unify (Type, ShapeView Type)+shapeView t = do+--  t <- liftTCM $ reduce t  -- DO NOT REDUCE!+-- --  t <- ureduce t  -- BUG!! substitutes bound variables in telescope!+  return . (t,) $ case unEl t of+    Pi a (NoAbs _ b) -> FunSh a b+    Pi a (Abs x b) -> PiSh a (Abs x b)+    Def d vs       -> DefSh d+    Var x vs       -> VarSh x+    Lit l          -> LitSh l+    Sort s         -> SortSh+    MetaV m vs     -> MetaSh+    _              -> ElseSh++-- | Return the reduced type(s) and the common shape.+shapeViewHH :: TypeHH -> Unify (TypeHH, ShapeView TypeHH)+shapeViewHH (Hom a) = do+  (a, sh) <- shapeView a+  return (Hom a, fmap Hom sh)+shapeViewHH (Het a1 a2) = do+  (a1, sh1) <- shapeView a1+  (a2, sh2) <- shapeView a2+  return . (Het a1 a2,) $ case (sh1, sh2) of++    (PiSh (Arg h1 r1 a1) b1, PiSh (Arg h2 r2 a2) b2)+      | h1 == h2 ->+      PiSh (Arg h1 (min r1 r2) (Het a1 a2)) (Abs (absName b1) (Het (absBody b1) (absBody b2)))++    (FunSh (Arg h1 r1 a1) b1, FunSh (Arg h2 r2 a2) b2)+      | h1 == h2 ->+      FunSh (Arg h1 (min r1 r2) (Het a1 a2)) (Het b1 b2)++    (DefSh d1, DefSh d2) | d1 == d2 -> DefSh d1+    (VarSh x1, VarSh x2) | x1 == x2 -> VarSh x1+    (LitSh l1, LitSh l2) | l1 == l2 -> LitSh l1+    (SortSh, SortSh)                -> SortSh+    _ -> ElseSh  -- not types, or metas, or not same shape+++-- | @telViewUpToHH n t@ takes off the first @n@ function types of @t@.+-- Takes off all if $n < 0$.+telViewUpToHH :: Int -> TypeHH -> Unify TelViewHH+telViewUpToHH 0 t = return $ TelV EmptyTel t+telViewUpToHH n t = do+  (t, sh) <- shapeViewHH =<< liftTCM (traverse reduce t)+  case sh of+    PiSh a b  -> absV a (absName b) <$> telViewUpToHH (n-1) (absBody b)+    FunSh a b -> absV a "_" <$> telViewUpToHH (n-1) (raise 1 b)+    _         -> return $ TelV EmptyTel t+  where+    absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t
src/full/Agda/TypeChecking/Rules/Record.hs view
@@ -17,7 +17,8 @@ import Agda.TypeChecking.Reduce import Agda.TypeChecking.Pretty import Agda.TypeChecking.Polarity-import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Irrelevance+import Agda.TypeChecking.CompiledClause.Compile  import Agda.TypeChecking.Rules.Data ( bindParameters, fitsIn ) import Agda.TypeChecking.Rules.Term ( isType_ )@@ -33,7 +34,19 @@ -- * Records --------------------------------------------------------------------------- -checkRecDef :: Info.DefInfo -> QName -> Maybe A.Constructor ->+-- | @checkRecDef i name con ps contel fields@+--+--     [@name@]    Record type identifier.+--+--     [@con@]     Maybe constructor name and info.+--+--     [@ps@]      Record parameters.+--+--     [@contel@]  Approximate type of constructor (@fields@ -> Set).+--+--     [@fields@]  List of field signatures.+--+checkRecDef :: Info.DefInfo -> QName -> Maybe A.QName -> --Maybe A.Constructor ->                [A.LamBinding] -> A.Expr -> [A.Constructor] -> TCM () checkRecDef i name con ps contel fields =   traceCall (CheckRecDef (getRange i) (qnameName name) ps fields) $ do@@ -41,49 +54,76 @@       [ text "checking record def" <+> prettyTCM name       , nest 2 $ text "ps ="     <+> prettyList (map prettyA ps)       , nest 2 $ text "contel =" <+> prettyA contel-      , nest 2 $ text "fields =" <+> prettyA fields+      , nest 2 $ text "fields =" <+> prettyA (map Constr fields)       ]     -- get type of record     t <- instantiateFull =<< typeOfConst name     bindParameters ps t $ \tel t0 -> do++      -- Generate type of constructor from field telescope @contel@,+      -- which is the approximate constructor type (target missing).++      -- Check and evaluate field types.+      reportSDoc "tc.rec" 15 $ text "checking fields"+      -- WRONG: contype <- workOnTypes $ killRange <$> (instantiateFull =<< isType_ contel)+      contype <- killRange <$> (instantiateFull =<< isType_ contel)++      -- compute the field telescope+      let TelV ftel _ = telView' contype++          -- A record is irrelevant if all of its fields are.+          -- In this case, the associated module parameter will be irrelevant.+          -- See issue 392.+          recordRelevance = minimum $ Irrelevant : (map argRelevance $ telToList ftel)++      -- Compute correct type of constructor+       -- t = tel -> t0 where t0 must be a sort s       t0' <- normalise t0       s <- case unEl t0' of 	Sort s	-> return s 	_	-> typeError $ ShouldBeASort t0       gamma <- getContextTelescope-      let m = qnameToMName name-	  htel		 = map hide $ telToList tel-	  rect		 = El s $ Def name $ reverse-			   [ Arg h r (Var i [])-			   | (i, Arg h r _) <- zip [0..] $ reverse $ telToList gamma-			   ]-	  tel'		 = telFromList $ htel ++ [defaultArg ("r", rect)]-          extWithR ret   = underAbstraction (defaultArg rect) (Abs "r" ()) $ \_ -> ret-          ext (Arg h r (x, t)) = addCtx x (Arg h r t)--      let getName :: A.Declaration -> [Arg QName]-          getName (A.Field _ x arg)    = [fmap (const x) arg]-	  getName (A.ScopedDecl _ [f]) = getName f-	  getName _		       = []--      ctx <- (reverse . map hide . take (size tel)) <$> getContext+      let m               = qnameToMName name+          -- make record parameters hidden and non-stricts irrelevant+	  htel		  = map hideAndRelParams $ telToList tel+          -- record type (name applied to parameters)+	  rect		  = El s $ Def name $ reverse+			    [ Arg h r (Var i [])+			    | (i, Arg h r _) <- zip [0..] $ reverse $ telToList gamma+			    ]+	  telh' h	  = telFromList $ htel ++ [Arg h recordRelevance ("r", rect)]+	  tel'		  = telh' NotHidden+	  telIFS	  = telh' Instance+          extWithRH h ret = underAbstraction (Arg h recordRelevance rect) (Abs "" ()) $ \_ -> ret+          extWithR        = extWithRH NotHidden+          ext     (Arg h r (x, t)) = addCtx x (Arg h r t)+{- UNUSED+          extHide (Arg h r (x, t)) = addCtx x (Arg Hidden r t)+-} -      -- We have to rebind the parameters to make them hidden-      -- Check the field telescope-      contype <- killRange <$> (instantiateFull =<< isType_ contel)-      let TelV ftel _ = telView' contype-      let contype = telePi ftel (raise (size ftel) rect)+      -- Put in @rect@ as correct target of constructor type.+      -- Andreas, 2011-05-10 use telePi_ instead of telePi to preserve+      -- even names of non-dependent fields in constructor type (Issue 322).+      let contype = telePi_ ftel (raise (size ftel) rect) +      -- Obtain name of constructor (if present).       (hasNamedCon, conName, conInfo) <- case con of-        Just (A.Axiom i _ c _) -> return (True, c, i)-        Just _                 -> __IMPOSSIBLE__-        Nothing                -> do+        Just c  -> return (True, c, i)+        Nothing -> do           m <- killRange <$> currentModule           c <- qualify m <$> freshName_ "recCon-NOT-PRINTED"           return (False, c, i) -      addConstant name $ Defn Relevant name t0 (defaultDisplayForm name) 0+      -- Add record type to signature.+      reportSDoc "tc.rec" 15 $ text "adding record type to signature"++      let getName :: A.Declaration -> [Arg QName]+          getName (A.Field _ x arg)    = [fmap (const x) arg]+	  getName (A.ScopedDecl _ [f]) = getName f+	  getName _		       = []++      addConstant name $ Defn Relevant name t0 (defaultDisplayForm name) 0 noCompiledRep 		       $ Record { recPars           = 0                                 , recClause         = Nothing                                 , recCon            = conName@@ -97,21 +137,37 @@                                 , recArgOccurrences = []                                 } +      -- Add record constructor to signature+      -- Andreas, 2011-05-19 moved this here, it was below the record module+      --   creation       addConstant conName $-        Defn Relevant conName contype (defaultDisplayForm conName) 0 $+        Defn Relevant conName contype (defaultDisplayForm conName) 0 noCompiledRep $              Constructor { conPars   = 0                          , conSrcCon = conName                          , conData   = name-                         , conHsCode = Nothing                          , conAbstr  = Info.defAbstract conInfo                          , conInd    = Inductive                          } +      -- Check that the fields fit inside the sort+      let dummy = Var 0 []  -- We're only interested in the sort here+      telePi ftel (El s dummy) `fitsIn` s++      {- Andreas, 2011-04-27 WRONG because field types are checked again+         and then non-stricts should not yet be irrelevant++      -- make record parameters hidden and non-stricts irrelevant+      -- ctx <- (reverse . map hideAndRelParams . take (size tel)) <$> getContext+      -}++      -- make record parameters hidden+      ctx <- (reverse . map hide . take (size tel)) <$> getContext+       escapeContext (size tel) $ flip (foldr ext) ctx $ extWithR $ do 	reportSDoc "tc.rec.def" 10 $ sep 	  [ text "record section:" 	  , nest 2 $ sep-            [ prettyTCM m <+> (prettyTCM =<< getContextTelescope)+            [ prettyTCM m <+> (inContext [] . prettyTCM =<< getContextTelescope)             , fsep $ punctuate comma $ map (text . show . getName) fields             ] 	  ]@@ -123,30 +179,32 @@         -- Check the types of the fields         -- ftel <- checkRecordFields m name tel s [] (size fields) fields         withCurrentModule m $-          checkRecordProjections m conName tel' (raise 1 ftel) fields+          checkRecordProjections m name conName tel' (raise 1 ftel) fields -      -- Check that the fields fit inside the sort-      let dummy = Var 0 []  -- We're only interested in the sort here-      telePi ftel (El s dummy) `fitsIn` s+      -- Andreas, 2011-05-19 here was the code "Add record constr..."        computePolarity name        return () -{-| @checkRecordProjections q tel ftel s vs n fs@:-    @m@: name of the generated module-    @q@: name of the record-    @tel@: parameters-    @s@: sort of the record-    @ftel@: telescope of fields-    @vs@: values of previous fields (should have one free variable, which is-	  the record)-    @fs@: the fields to be checked+{-| @checkRecordProjections m r q tel ftel fs@.++    [@m@    ]  name of the generated module++    [@r@    ]  name of the record type++    [@q@    ]  name of the record constructor++    [@tel@  ]  parameters++    [@ftel@ ]  telescope of fields++    [@fs@   ]  the fields to be checked -} checkRecordProjections ::-  ModuleName -> QName -> Telescope -> Telescope ->+  ModuleName -> QName -> QName -> Telescope -> Telescope ->   [A.Declaration] -> TCM ()-checkRecordProjections m q tel ftel fs = checkProjs EmptyTel ftel fs+checkRecordProjections m r q tel ftel fs = checkProjs EmptyTel ftel fs   where      checkProjs :: Telescope -> Telescope -> [A.Declaration] -> TCM ()@@ -162,15 +220,16 @@       reportSDoc "tc.rec.proj" 5 $ sep 	[ text "checking projection" 	, nest 2 $ vcat-	  [ text "top   =" <+> (prettyTCM =<< getContextTelescope)+	  [ text "top   =" <+> (inContext [] . prettyTCM =<< getContextTelescope) 	  , text "ftel1 =" <+> prettyTCM ftel1 	  , text "ftel2 =" <+> addCtxTel ftel1 (underAbstraction_ ftel2 prettyTCM) 	  , text "t     =" <+> prettyTCM t 	  ] 	]+      -- Andreas, 2011-04-27 work on rhs of ':'+      -- WRONG: t <- workOnTypes $ isType_ t       t <- isType_ t -       -- Andreas, 2010-09-09 The following comments are misleading, TODO: update       -- in fact, tel includes the variable of record type as last one       -- e.g. for cartesion product it is@@ -197,17 +256,19 @@        reportSDoc "tc.rec.proj" 10 $ sep 	[ text "adding projection"-	, nest 2 $ prettyTCM projname <+> text ":" <+> prettyTCM finalt+	, nest 2 $ prettyTCM projname <+> text ":" <+> inContext [] (prettyTCM finalt) 	]        -- The body should be       --  P.xi {tel} (r _ .. x .. _) = x+      -- Ulf, 2011-08-22: actually we're dropping the parameters from the+      -- projection functions so the body is now+      --  P.xi (r _ .. x .. _) = x        let -- Andreas, 2010-09-09: comment for existing code           -- split the telescope into parameters (ptel) and the type or the record           -- (rt) which should be  R ptel           (ptel,[rt]) = splitAt (size tel - 1) $ telToList tel-          hps	 = map (fmap $ VarP . fst) $ ptel 	  conp	 = defaultArg 		 $ ConP q (Just (fmap snd rt))                    $ zipWith3 Arg@@ -216,37 +277,42 @@ 			      [ VarP "x" | _ <- [1..size ftel] ] 	  nobind 0 = id 	  nobind n = Bind . Abs "_" . nobind (n - 1)-	  body	 = nobind (size ptel)-		 $ nobind (size ftel1)+	  body	 = nobind (size ftel1) 		 $ Bind . Abs "x" 		 $ nobind (size ftel2) 		 $ Body $ Var (size ftel2) []-          cltel  = (telFromList ptel) `abstract` ftel+          cltel  = ftel 	  clause = Clause { clauseRange = getRange info                           , clauseTel   = killRange cltel-                          , clausePerm  = idP $ size ptel + size ftel-                          , clausePats  = hps ++ [conp]+                          , clausePerm  = idP $ size ftel+                          , clausePats  = [conp]                           , clauseBody  = body                           }-          clause2 = Clauses Nothing clause-          cc      = compileClauses [clause2] +            -- Record patterns should /not/ be translated when the+            -- projection functions are defined. Record pattern+            -- translation is defined in terms of projection+            -- functions.+      cc <- compileClauses False [clause]+       reportSDoc "tc.cc" 10 $ do         sep [ text "compiled clauses of " <+> prettyTCM projname             , nest 2 $ text (show cc)             ]        escapeContext (size tel) $ do-	addConstant projname $ Defn rel projname (killRange finalt) (defaultDisplayForm projname) 0-          $ Function { funClauses        = [clause2]+	addConstant projname $ Defn rel projname (killRange finalt) (defaultDisplayForm projname) 0 noCompiledRep+          $ Function { funClauses        = [clause]                      , funCompiled       = cc                      , funDelayed        = NotDelayed                      , funInv            = NotInjective                      , funAbstr          = ConcreteDef                      , funPolarity       = []-                     , funArgOccurrences = map (const Unused) hps ++ [Negative]-                     , funProjection     = Just (size hps + 1)-                       -- index of the record argument, start counting with 1+                     , funArgOccurrences = [Negative]+                     , funProjection     = Just (r, size ptel + 1)+                       -- name of the record type and+                       -- index of the record argument (in the type), start counting with 1+                     , funStatic         = False                      }         computePolarity projname 
src/full/Agda/TypeChecking/Rules/Term.hs view
@@ -12,12 +12,18 @@ import qualified Agda.Utils.IO.Locale as LocIO import qualified Data.Map as Map import qualified Data.Set as Set+import Data.Traversable (traverse) +import Agda.Interaction.Options+ import qualified Agda.Syntax.Abstract as A import qualified Agda.Syntax.Abstract.Views as A import qualified Agda.Syntax.Info as A import Agda.Syntax.Concrete.Pretty () -- only Pretty instances+import qualified Agda.Syntax.Concrete.Name as C import Agda.Syntax.Common+import Agda.Syntax.Translation.AbstractToConcrete+import Agda.Syntax.Concrete.Pretty import Agda.Syntax.Fixity import Agda.Syntax.Internal import Agda.Syntax.Internal.Generic@@ -25,6 +31,7 @@ import Agda.Syntax.Literal import Agda.Syntax.Abstract.Views import Agda.Syntax.Scope.Base (emptyScopeInfo)+import Agda.Syntax.Translation.InternalToAbstract (reify)  import Agda.TypeChecking.Monad import Agda.TypeChecking.Monad.Builtin@@ -39,18 +46,20 @@ import Agda.TypeChecking.Free import Agda.TypeChecking.Telescope import Agda.TypeChecking.Datatypes+import Agda.TypeChecking.Irrelevance import Agda.TypeChecking.EtaContract import Agda.TypeChecking.Quote import Agda.TypeChecking.CompiledClause+import Agda.TypeChecking.Level import {-# SOURCE #-} Agda.TypeChecking.Rules.Builtin.Coinduction  import Agda.Utils.Fresh import Agda.Utils.Tuple import Agda.Utils.Permutation -import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyTypeC)+import {-# SOURCE #-} Agda.TypeChecking.Empty (isEmptyType) import {-# SOURCE #-} Agda.TypeChecking.Rules.Decl (checkSectionApplication)-import {-# SOURCE #-} Agda.TypeChecking.Rules.Def (checkFunDef)+import {-# SOURCE #-} Agda.TypeChecking.Rules.Def (checkFunDef,checkFunDef')  import Agda.Utils.Monad import Agda.Utils.Size@@ -72,19 +81,56 @@ -- | Check that an expression is a type without knowing the sort. isType_ :: A.Expr -> TCM Type isType_ e =-    traceCall (IsType_ e) $ do-    s <- newSortMeta-    isType e s+  traceCall (IsType_ e) $+  case e of+    A.Fun i a b -> do+      a <- traverse isType_ a+      b <- isType_ b+      return $ El (sLub (getSort $ unArg a) (getSort b)) (Pi a (NoAbs "_" b))+    A.Pi _ tel e -> do+      checkTelescope_ tel $ \tel -> do+        t   <- instantiateFull =<< isType_ e+        tel <- instantiateFull tel+        return $ telePi tel t+    A.Set _ n    -> do+      n <- ifM typeInType (return 0) (return n)+      return $ sort (mkType n)+    A.App i s (Arg NotHidden r l)+      | A.Set _ 0 <- unScope s ->+      ifM (not <$> hasUniversePolymorphism)+          (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")+      $ do+        lvl <- primLevel+        -- allow NonStrict variables when checking level+        --   Set : (NonStrict) Level -> Set\omega+        n   <- levelView =<< applyRelevanceToContext NonStrict+                              (checkExpr (namedThing l) (El (mkType 0) lvl))+        return $ sort (Type n)+    _ -> do+      s <- workOnTypes $ newSortMeta+      isType e s +-- | Check that an expression is a type which is equal to a given type.+isTypeEqualTo :: A.Expr -> Type -> TCM Type+isTypeEqualTo e t = case e of+  A.ScopedExpr _ e -> isTypeEqualTo e t+  A.Underscore i | A.metaNumber i == Nothing -> return t+  e -> do+    t' <- isType e (getSort t)+    t' <$ leqType_ t t'++leqType_ :: Type -> Type -> TCM ()+leqType_ t t' = workOnTypes $ leqType t t'++{- UNUSED -- | Force a type to be a Pi. Instantiates if necessary. The 'Hiding' is only --   used when instantiating a meta variable. -forcePi :: MonadTCM tcm => Hiding -> String -> Type -> tcm (Type, Constraints)+forcePi :: Hiding -> String -> Type -> TCM (Type, Constraints) forcePi h name (El s t) =     do	t' <- reduce t 	case t' of 	    Pi _ _	-> return (El s t', [])-	    Fun _ _	-> return (El s t', [])             _           -> do                 sa <- newSortMeta                 sb <- newSortMeta@@ -98,12 +144,13 @@                 cs <- equalType (El s t') ty                 ty' <- reduce ty                 return (ty', cs)-+-}  --------------------------------------------------------------------------- -- * Telescopes --------------------------------------------------------------------------- +{- UNUSED -- | Type check a telescope. Binds the variables defined by the telescope. checkTelescope :: A.Telescope -> Sort -> (Telescope -> TCM a) -> TCM a checkTelescope [] s ret = ret EmptyTel@@ -115,21 +162,21 @@ -- | Check a typed binding and extends the context with the bound variables. --   The telescope passed to the continuation is valid in the original context. checkTypedBindings :: A.TypedBindings -> Sort -> (Telescope -> TCM a) -> TCM a-checkTypedBindings (A.TypedBindings i (Arg h rel bs)) s ret =-    thread (checkTypedBinding h s) bs $ \bss ->-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel (concat bss)+checkTypedBindings (A.TypedBindings i (Arg h rel b)) s ret =+    checkTypedBinding h rel s b $ \bs ->+    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs -checkTypedBinding :: Hiding -> Sort -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a-checkTypedBinding h s (A.TBind i xs e) ret = do+checkTypedBinding :: Hiding -> Relevance -> Sort -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a+checkTypedBinding h rel s (A.TBind i xs e) ret = do     t <- isType e s-    addCtxs xs (Arg h Relevant t) $ ret $ mkTel xs t+    addCtxs xs (Arg h rel t) $ ret $ mkTel xs t     where 	mkTel [] t     = [] 	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)-checkTypedBinding h s (A.TNoBind e) ret = do+checkTypedBinding h rel s (A.TNoBind e) ret = do     t <- isType e s     ret [("_",t)]-+-}  -- | Type check a telescope. Binds the variables defined by the telescope. checkTelescope_ :: A.Telescope -> (Telescope -> TCM a) -> TCM a@@ -139,39 +186,110 @@     checkTelescope_ tel   $ \tel2 -> 	ret $ abstract tel1 tel2 - -- | Check a typed binding and extends the context with the bound variables. --   The telescope passed to the continuation is valid in the original context. checkTypedBindings_ :: A.TypedBindings -> (Telescope -> TCM a) -> TCM a-checkTypedBindings_ (A.TypedBindings i (Arg h rel bs)) ret =-    thread (checkTypedBinding_ h) bs $ \bss ->-    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel (concat bss)+checkTypedBindings_ = checkTypedBindings PiNotLam -checkTypedBinding_ :: Hiding -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a-checkTypedBinding_ h (A.TBind i xs e) ret = do-    t <- isType_ e-    addCtxs xs (Arg h Relevant t) $ ret $ mkTel xs t+data LamOrPi = LamNotPi | PiNotLam deriving (Eq,Show)++-- | Check a typed binding and extends the context with the bound variables.+--   The telescope passed to the continuation is valid in the original context.+--+--   Parametrized by a flag wether we check a typed lambda or a Pi. This flag+--   is needed for irrelevance.+checkTypedBindings :: LamOrPi -> A.TypedBindings -> (Telescope -> TCM a) -> TCM a+checkTypedBindings lamOrPi (A.TypedBindings i (Arg h rel b)) ret =+    checkTypedBinding lamOrPi h rel b $ \bs ->+    ret $ foldr (\(x,t) -> ExtendTel (Arg h rel t) . Abs x) EmptyTel bs++checkTypedBinding :: LamOrPi -> Hiding -> Relevance -> A.TypedBinding -> ([(String,Type)] -> TCM a) -> TCM a+checkTypedBinding lamOrPi h rel (A.TBind i xs e) ret = do+    -- Andreas, 2011-04-26 irrelevant function arguments may appear+    -- non-strictly in the codomain type+    -- 2011-10-04 if flag --experimental-irrelevance is set+    allowed <- optExperimentalIrrelevance <$> pragmaOptions+    t <- modEnv lamOrPi allowed $ isType_ e+    addCtxs xs (Arg h (modRel lamOrPi allowed rel) t) $ ret $ mkTel xs t     where+        -- if we are checking a typed lambda, we resurrect before we check the+        -- types, but do not modify the new context entries+        -- otherwise, if we are checking a pi, we do not resurrect, but+        -- modify the new context entries+        modEnv LamNotPi True = doWorkOnTypes+        modEnv _        _    = id+        modRel PiNotLam True = irrToNonStrict+        modRel _        _    = id 	mkTel [] t     = [] 	mkTel (x:xs) t = (show $ nameConcrete x,t) : mkTel xs (raise 1 t)-checkTypedBinding_ h (A.TNoBind e) ret = do+checkTypedBinding lamOrPi h rel (A.TNoBind e) ret = do     t <- isType_ e     ret [("_",t)] +-- | Type check a lambda expression.+checkLambda :: Arg A.TypedBinding -> A.Expr -> Type -> TCM Term+checkLambda (Arg _ _ A.TNoBind{}) _ _ = __IMPOSSIBLE__+checkLambda (Arg h r (A.TBind _ xs typ)) body target = do+  TelV tel btyp <- telViewUpTo (length xs) target+  if size tel < size xs || length xs /= 1+    then dontUseTargetType+    else useTargetType tel btyp+  where+    dontUseTargetType = do+      -- Checking λ (xs : argsT) → body : target+      verboseS "tc.term.lambda" 5 $ tick "lambda-no-target-type" +      -- First check that argsT is a valid type+      argsT <- workOnTypes $ Arg h r <$> isType_ typ++      -- In order to have as much type information as possible when checking+      -- body, we first unify (xs : argsT) → ?t₁ with the target type. If this+      -- is inconclusive we need to block the resulting term so we create a+      -- fresh problem for the check.+      t1 <- addCtxs xs argsT $ workOnTypes newTypeMeta_+      let tel = telFromList $ mkTel xs argsT+      pid <- newProblem_ $ leqType (telePi tel t1) target++      -- Now check body : ?t₁+      v <- addCtxs xs argsT $ checkExpr body t1++      -- Block on the type comparison+      blockTermOnProblem target (teleLam tel v) pid++    useTargetType tel@(ExtendTel arg (Abs _ EmptyTel)) btyp = do+        verboseS "tc.term.lambda" 5 $ tick "lambda-with-target-type"+        unless (argHiding    arg == h) $ typeError $ WrongHidingInLambda target+        -- Andreas, 2011-10-01 ignore relevance in lambda if not explicitly given+        let r' = argRelevance arg -- relevance of function type+        when (r == Irrelevant && r' /= r) $ typeError $ WrongIrrelevanceInLambda target+--        unless (argRelevance arg == r) $ typeError $ WrongIrrelevanceInLambda target+        -- We only need to block the final term on the argument type+        -- comparison. The body will be blocked if necessary. We still want to+        -- compare the argument types first, so we spawn a new problem for that+        -- check.+        (pid, argT) <- newProblem $ isTypeEqualTo typ (unArg arg)+        v <- addCtx x (Arg h r' argT) $ checkExpr body btyp+        blockTermOnProblem target (Lam h $ Abs (show $ nameConcrete x) v) pid+      where+        [x] = xs+    useTargetType _ _ = __IMPOSSIBLE__+++    mkTel []       t = []+    mkTel (x : xs) t = ((,) s <$> t) : mkTel xs (raise 1 t)+      where s = show $ nameConcrete x+ --------------------------------------------------------------------------- -- * Literal ---------------------------------------------------------------------------  checkLiteral :: Literal -> Type -> TCM Term checkLiteral lit t = do-    t' <- litType lit-    v  <- blockTerm t (Lit lit) $ leqType t' t-    return v+  t' <- litType lit+  blockTerm t $ Lit lit <$ leqType_ t' t  litType :: Literal -> TCM Type litType l = case l of-    LitLevel _ _  -> el <$> primLevel     LitInt _ _	  -> el <$> primNat     LitFloat _ _  -> el <$> primFloat     LitChar _ _   -> el <$> primChar@@ -185,7 +303,7 @@ ---------------------------------------------------------------------------  -- TODO: move somewhere suitable-reduceCon :: MonadTCM tcm => QName -> tcm QName+reduceCon :: QName -> TCM QName reduceCon c = do   Con c [] <- constructorForm =<< reduce (Con c [])   return c@@ -194,15 +312,24 @@ -- If it succeeds, it continues @k@ with the returned results.  If it fails, -- it registers a postponed typechecking problem and returns the resulting new -- meta variable.+--+-- Checks @e := ((_ : t0) args) : t@. checkArguments' ::   ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type -> A.Expr ->-  (Args -> Type -> Constraints -> TCM Term) -> TCM Term+  (Args -> Type -> TCM Term) -> TCM Term checkArguments' exph r args t0 t e k = do   z <- runErrorT $ checkArguments exph r args t0 t   case z of-    Right (vs, t1, cs) -> k vs t1 cs+    Right (vs, t1) -> k vs t1+      -- vs = evaluated args+      -- t1 = remaining type (needs to be subtype of t)+      -- cs = new constraints     Left t0            -> postponeTypeCheckingProblem e t (unblockedTester t0)+      -- if unsuccessful, postpone checking e : t until t0 unblocks +unScope (A.ScopedExpr scope e) = unScope e+unScope e                      = e+ -- | Type check an expression. checkExpr :: A.Expr -> Type -> TCM Term checkExpr e t =@@ -213,6 +340,8 @@ 	  [ fsep [ prettyTCM e, text ":", prettyTCM t ] 	  , nest 2 $ text "at " <+> (text . show =<< getCurrentRange) 	  ]+    reportSDoc "tc.term.expr.top.detailed" 80 $+      text "Checking" <+> fsep [ prettyTCM e, text ":", text (show t) ]     t <- reduce t     reportSDoc "tc.term.expr.top" 15 $         text "    --> " <+> prettyTCM t@@ -224,95 +353,52 @@      e <- scopedExpr e     case e of- 	-- Insert hidden lambda if appropriate-	_   | not (hiddenLambdaOrHole e)-	    , FunV (Arg Hidden _ _) _ <- funView (unEl t) -> do+	_   | Pi (Arg h rel _) _ <- unEl t+            , not (hiddenLambdaOrHole h e)+            , h /= NotHidden                          -> do 		x <- freshName r (argName t)                 reportSLn "tc.term.expr.impl" 15 $ "Inserting implicit lambda"-		checkExpr (A.Lam (A.ExprRange $ getRange e) (A.DomainFree Hidden x) e) t+		checkExpr (A.Lam (A.ExprRange $ getRange e) (domainFree h rel x) e) t 	    where 		r = case rStart $ getRange e of                       Nothing  -> noRange                       Just pos -> posToRange pos pos -                hiddenLambdaOrHole (A.AbsurdLam _ Hidden)                                  = True-		hiddenLambdaOrHole (A.Lam _ (A.DomainFree Hidden _) _)			   = True-		hiddenLambdaOrHole (A.Lam _ (A.DomainFull (A.TypedBindings _ (Arg Hidden _ _))) _) = True-		hiddenLambdaOrHole (A.QuestionMark _)					   = True-		hiddenLambdaOrHole _							   = False--	-- Variable or constant application-           -- Subcase: ambiguous constructor-	_   | Application (HeadCon cs@(_:_:_)) args <- appView e -> do-                -- First we should figure out which constructor we want.-                reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ show cs--                -- Get the datatypes of the various constructors-                let getData Constructor{conData = d} = d-                    getData _                        = __IMPOSSIBLE__-                reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs)-                -- We use the reduced constructor when disambiguating, but-                -- the original constructor for type checking. This is important-                -- since they may have different types (different parameters).-                -- See issue 279.-                cs  <- zip cs . zipWith setRange (map getRange cs) <$> mapM reduceCon cs-                reportSLn "tc.check.term" 40 $ "  ranges after: " ++ show (getRange cs)-                reportSLn "tc.check.term" 40 $ "  reduced: " ++ show cs-                dcs <- mapM (\(c0, c1) -> (getData /\ const c0) . theDef <$> getConstInfo c1) cs--                -- Type error-                let badCon t = typeError $ DoesNotConstructAnElementOf-                                            (fst $ head cs) t+                hiddenLambdaOrHole h (A.AbsurdLam _ h') | h == h'                      = True+                hiddenLambdaOrHole h (A.ExtendedLam _ _ _ [])                          = False+                hiddenLambdaOrHole h (A.ExtendedLam _ _ _ cls)                         = any hiddenLHS cls+		hiddenLambdaOrHole h (A.Lam _ (A.DomainFree h' _ _) _) | h == h'       = True+		hiddenLambdaOrHole h (A.Lam _ (A.DomainFull (A.TypedBindings _ (Arg h' _ _))) _)+                  | h == h'                                                            = True+		hiddenLambdaOrHole _ (A.QuestionMark _)				       = True+		hiddenLambdaOrHole _ _						       = False -                -- Lets look at the target type at this point-                let getCon = do-                      TelV _ t1 <- telView t-                      t1 <- reduceB $ unEl t1-                      reportSDoc "tc.check.term.con" 40 $ nest 2 $-                        text "target type: " <+> prettyTCM t1-                      case t1 of-                        NotBlocked (Def d _) -> do-                          let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of-                                c:_ -> do-                                  reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c-                                  return (Just c)-                                []  -> badCon (Def d [])-                          defn <- theDef <$> getConstInfo d-                          case defn of-                            Datatype{} -> dataOrRec-                            Record{}   -> dataOrRec-                            _ -> badCon (ignoreBlocking t1)-                        NotBlocked (MetaV _ _)  -> return Nothing-                        Blocked{} -> return Nothing-                        _ -> badCon (ignoreBlocking t1)-                let unblock = isJust <$> getCon-                mc <- getCon-                case mc of-                  Just c  -> checkConstructorApplication e t c args-                  Nothing -> postponeTypeCheckingProblem e t unblock+                hiddenLHS (A.Clause (A.LHS _ _ (a : _) _) _ _) = elem (argHiding a) [Hidden, Instance]+                hiddenLHS _ = False -              -- Subcase: non-ambiguous constructor-            | Application (HeadCon [c]) args <- appView e ->-                checkConstructorApplication e t c args-              -- Subcase: defined symbol or variable.-            | Application hd args <- appView e ->-                checkHeadApplication e t hd args+        -- a meta variable without arguments: type check directly for efficiency+	A.QuestionMark i -> checkMeta newQuestionMark t i+	A.Underscore i   -> checkMeta newValueMeta t i  	A.WithApp _ e es -> typeError $ NotImplemented "type checking of with application" +        -- check |- Set l : t  (requires universe polymorphism)         A.App i s (Arg NotHidden r l)           | A.Set _ 0 <- unScope s ->           ifM (not <$> hasUniversePolymorphism)               (typeError $ GenericError "Use --universe-polymorphism to enable level arguments to Set")           $ do             lvl <- primLevel-            suc <- do s <- primLevelSuc-                      return $ \x -> s `apply` [defaultArg x]-            n   <- checkExpr (namedThing l) (El (mkType 0) lvl)+            -- allow NonStrict variables when checking level+            --   Set : (NonStrict) Level -> Set\omega+            n   <- levelView =<< applyRelevanceToContext NonStrict+                                  (checkExpr (namedThing l) (El (mkType 0) lvl))+            -- check that Set (l+1) <= t             reportSDoc "tc.univ.poly" 10 $-              text "checking Set " <+> prettyTCM n <+> text "against" <+> prettyTCM t-            blockTerm t (Sort $ Type n) $ leqType (sort $ Type $ suc n) t+              text "checking Set " <+> prettyTCM n <+>+              text "against" <+> prettyTCM t+            blockTerm t $ Sort (Type n) <$ leqType_ (sort $ sSuc $ Type n) t          A.App i q (Arg NotHidden r e)           | A.Quote _ <- unScope q -> do@@ -323,48 +409,54 @@               quoted _                  = typeError $ GenericError $ "quote: not a defined name"           x <- quoted (namedThing e)           ty <- qNameType-          blockTerm t (quoteName x) $ leqType ty t+          blockTerm t $ quoteName x <$ leqType_ ty t -        A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name"+          | A.QuoteTerm _ <- unScope q ->+             do (et, _) <- inferExpr (namedThing e)+                q <- quoteTerm =<< normalise et+                ty <- el primAgdaTerm+                blockTerm t $ q <$ leqType_ ty t -	A.App i e arg -> do-	    (v0, t0)	 <- inferExpr e-	    checkArguments' ExpandLast (getRange e) [arg] t0 t e $ \vs t1 cs ->-	      blockTerm t (apply v0 vs) $ (cs ++) <$> leqType t1 t+	  | A.Unquote _ <- unScope q ->+	     do e1 <- checkExpr (namedThing e) =<< el primAgdaTerm+	        e2 <- unquote e1+                checkTerm e2 t+        A.Quote _ -> typeError $ GenericError "quote must be applied to a defined name"+        A.QuoteTerm _ -> typeError $ GenericError "quoteTerm must be applied to a term"+        A.Unquote _ -> typeError $ GenericError "unquote must be applied to a term"          A.AbsurdLam i h -> do           t <- reduceB =<< instantiateFull t           case t of             Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t             NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-            NotBlocked t' -> case funView $ unEl t' of-              FunV (Arg h' _ a) _+            NotBlocked t' -> case unEl t' of+              Pi (Arg h' _ a) _                 | h == h' && not (null $ foldTerm metas a) ->                     postponeTypeCheckingProblem e (ignoreBlocking t) $                       null . foldTerm metas <$> instantiateFull a-                | h == h' -> do-                  cs' <- isEmptyTypeC a+                | h == h' -> blockTerm t' $ do+                  isEmptyType a                   -- Add helper function                   top <- currentModule                   let name = "absurd"                   aux <- qualify top <$> freshName (getRange i) name                   -- if we are in irrelevant position, the helper function                   -- is added as irrelevant-                  rel <- irrelevant <$> asks envIrrelevant+                  rel <- asks envRelevance                   reportSDoc "tc.term.absurd" 10 $ vcat                     [ text "Adding absurd function" <+> prettyTCM rel <> prettyTCM aux                     , nest 2 $ text "of type" <+> prettyTCM t'                     ]-                  addConstant aux $ Defn rel aux t' (defaultDisplayForm aux) 0+                  addConstant aux $ Defn rel aux t' (defaultDisplayForm aux) 0 noCompiledRep                                   $ Function                                     { funClauses        =-                                        [Clauses Nothing-                                                 (Clause { clauseRange = getRange e-                                                         , clauseTel   = EmptyTel-                                                         , clausePerm  = Perm 0 []-                                                         , clausePats  = [Arg h Relevant $ VarP "()"]-                                                         , clauseBody  = NoBody-                                                         })+                                        [Clause { clauseRange = getRange e+                                                , clauseTel   = EmptyTel+                                                , clausePerm  = Perm 0 []+                                                , clausePats  = [Arg h Relevant $ VarP "()"]+                                                , clauseBody  = NoBody+                                                }                                         ]                                     , funCompiled       = Fail                                     , funDelayed        = NotDelayed@@ -373,48 +465,76 @@                                     , funPolarity       = [Covariant]                                     , funArgOccurrences = [Unused]                                     , funProjection     = Nothing+                                    , funStatic         = False                                     }-                  blockTerm t' (Def aux []) $ return cs'+                  return (Def aux [])                 | otherwise -> typeError $ WrongHidingInLambda t'               _ -> typeError $ ShouldBePi t'           where             metas (MetaV m _) = [m]             metas _           = []+        A.ExtendedLam i di qname cs -> do+             t <- reduceB =<< instantiateFull t+             case t of+               Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t+               NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t+               NotBlocked t -> do+                 j   <- currentMutualBlock+                 rel <- asks envRelevance+                 addConstant qname (Defn rel qname t (defaultDisplayForm qname) j noCompiledRep Axiom)+                 reportSDoc "tc.term.exlam" 50 $ text "extended lambda's implementation \"" <> prettyTCM qname <>+                                                 text "\" has type: " $$ prettyTCM t -- <+>+--                                                 text " where clauses: " <+> text (show cs)+                 abstract (A.defAbstract di) $ checkFunDef' t rel NotDelayed di qname cs+                 tel <- getContextTelescope+                 addExtLambdaTele qname (counthidden tel , countnothidden tel)+                 reduce $ (Def qname [] `apply` (mkArgs tel))+          where+	    -- Concrete definitions cannot use information about abstract things.+	    abstract ConcreteDef = inConcreteMode+	    abstract AbstractDef = inAbstractMode+            mkArgs :: Telescope -> Args+            mkArgs tel = map arg [n - 1, n - 2..0]+              where+                n     = size tel+                arg i = defaultArg (Var i []) +            metas (MetaV m _) = [m]+            metas _           = []++            counthidden :: Telescope -> Int+            counthidden t = length $ filter (\ (Arg h r a) -> h == Hidden ) $ teleArgs t++            countnothidden :: Telescope -> Int+            countnothidden t = length $ filter (\ (Arg h r a) -> h == NotHidden ) $ teleArgs t+++{- Andreas, 2011-04-27 DOES NOT WORK+   -- a telescope is not for type checking abstract syn+ 	A.Lam i (A.DomainFull b) e -> do-	    (v, cs) <- checkTypedBindings_ b $ \tel -> do-	        t1 <- newTypeMeta_-                cs <- escapeContext (size tel) $ leqType (telePi tel t1) t-                v <- checkExpr e t1-                return (teleLam tel v, cs)+            -- check the types, get the telescope with unchanged relevance+	    (tel, t1, cs) <- workOnTypes $ checkTypedBindings_ b $ \tel -> do+	       t1 <- newTypeMeta_+               cs <- escapeContext (size tel) $ leqType (telePi tel t1) t+               return (tel, t1, cs)+            -- check the body under the unchanged telescope+            v <- addCtxTel tel $ do teleLam tel <$> checkExpr e t1 	    blockTerm t v (return cs)+-}+	A.Lam i (A.DomainFull (A.TypedBindings _ b)) e -> checkLambda b e t -	A.Lam i (A.DomainFree h x) e0 -> do-	    -- (t',cs) <- forcePi h (show x) t-            t <- reduceB t-            case t of-              Blocked{}                 -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-              NotBlocked (El _ MetaV{}) -> postponeTypeCheckingProblem_ e $ ignoreBlocking t-              NotBlocked t' -> case funView $ unEl t' of-		FunV arg0@(Arg h' r a) _-		    | h == h' -> do-			v <- addCtx x arg0 $ do-                              let arg = Arg h r (Var 0 [])-                                  tb  = raise 1 t' `piApply` [arg]-                              v <- checkExpr e0 tb-                              return $ Lam h $ Abs (show x) v-			-- blockTerm t v (return cs)-                        return v-		    | otherwise ->-			typeError $ WrongHidingInLambda t'-		_   -> typeError $ ShouldBePi t'+        -- 	A.Lam i (A.DomainFull b) e -> do+        -- 	    (v, cs) <- checkTypedBindings LamNotPi b $ \tel -> do+        --         (t1, cs) <- workOnTypes $ do+        -- 	          t1 <- newTypeMeta_+        --           cs <- escapeContext (size tel) $ leqType (telePi tel t1) t+        --           return (t1, cs)+        --         v <- checkExpr e t1+        --         return (teleLam tel v, cs)+        -- 	    blockTerm t v (return cs) -	A.QuestionMark i -> do-	    setScope (A.metaScope i)-	    newQuestionMark  t-	A.Underscore i   -> do-	    setScope (A.metaScope i)-	    newValueMeta t+	A.Lam i (A.DomainFree h rel x) e0 -> checkExpr (A.Lam i (domainFree h rel x) e0) t  	A.Lit lit    -> checkLiteral lit t 	A.Let i ds e -> checkLetBindings ds $ checkExpr e t@@ -422,26 +542,26 @@ 	    t' <- checkTelescope_ tel $ \tel -> do                     t   <- instantiateFull =<< isType_ e                     tel <- instantiateFull tel-                    return $ telePi_ tel t-            s  <- return $ getSort t'+                    return $ telePi tel t+            let s = getSort t'             when (s == Inf) $ reportSDoc "tc.term.sort" 20 $               vcat [ text ("reduced to omega:")                    , nest 2 $ text "t   =" <+> prettyTCM t'                    , nest 2 $ text "cxt =" <+> (prettyTCM =<< getContextTelescope)                    ]-	    blockTerm t (unEl t') $ leqType (sort s) t+	    blockTerm t $ unEl t' <$ leqType_ (sort s) t 	A.Fun _ (Arg h r a) b -> do 	    a' <- isType_ a 	    b' <- isType_ b-	    let s = getSort a' `sLub` getSort b'-	    blockTerm t (Fun (Arg h r a') b') $ leqType (sort s) t+	    s <- reduce $ getSort a' `sLub` getSort b'+	    blockTerm t $ Pi (Arg h r a') (NoAbs "_" b') <$ leqType_ (sort s) t 	A.Set _ n    -> do           n <- ifM typeInType (return 0) (return n)-	  blockTerm t (Sort (mkType n)) $ leqType (sort $ mkType $ n + 1) t+	  blockTerm t $ Sort (mkType n) <$ leqType_ (sort $ mkType $ n + 1) t 	A.Prop _     -> do           typeError $ GenericError "Prop is no longer supported"           -- s <- ifM typeInType (return $ mkType 0) (return Prop)-	  -- blockTerm t (Sort Prop) $ leqType (sort $ mkType 1) t+	  -- blockTerm t (Sort Prop) $ leqType_ (sort $ mkType 1) t  	A.Rec _ fs  -> do 	  t <- reduce t@@ -452,31 +572,88 @@ 	      ftel   <- getRecordFieldTypes r               con    <- getRecordConstructor r               scope  <- getScope+              let arg x e =+                    case [ a | a <- axs, unArg a == x ] of+                      [a] -> unnamed e <$ a+                      _   -> defaultArg $ unnamed e -- we only end up here if the field names are bad               let meta = A.Underscore $ A.MetaInfo (getRange e) scope Nothing-	      es   <- orderFields r meta xs fs+                  missingExplicits = [ (unArg a, [unnamed meta <$ a])+                                     | a <- axs, argHiding a == NotHidden+                                     , notElem (unArg a) (map fst fs) ]+              -- In es omitted explicit fields are replaced by underscores+              -- (from missingExplicits). Omitted implicit or instance fields+              -- are still left out and inserted later by checkArguments_.+	      es   <- concat <$> orderFields r [] xs ([ (x, [arg x e]) | (x, e) <- fs ] +++                                                      missingExplicits) 	      let tel = ftel `apply` vs-	      (args, cs) <- checkArguments_ ExpandLast (getRange e)-			      (zipWith (\ax e -> fmap (const (unnamed e)) ax) axs es)-                              tel-	      blockTerm t (Con con args) $ return cs+              args <- checkArguments_ ExpandLast (getRange e)+                        es -- (zipWith (\ax e -> fmap (const (unnamed e)) ax) axs es)+                        tel+              -- Don't need to block here!+	      return $ Con con args             MetaV _ _ -> do-              reportSDoc "tc.term.expr.rec" 10 $ sep-                [ text "Postponing type checking of"-                , nest 2 $ prettyA e <+> text ":" <+> prettyTCM t-                ]-              postponeTypeCheckingProblem_ e t+              let fields = map fst fs+              rs <- findPossibleRecords fields+              case rs of+                  -- If there are no records with the right fields we might as well fail right away.+                [] -> case fs of+                  []       -> typeError $ GenericError "There are no records in scope"+                  [(f, _)] -> typeError $ GenericError $ "There is no known record with the field " ++ show f+                  _        -> typeError $ GenericError $ "There is no known record with the fields " ++ unwords (map show fields)+                  -- If there's only one record with the appropriate fields, go with that.+                [r] -> do+                  def <- getConstInfo r+                  vs  <- newArgsMeta (defType def)+                  let target = piApply (defType def) vs+                      s      = case unEl target of+                                 Level l -> Type l+                                 Sort s  -> s+                                 _       -> __IMPOSSIBLE__+                      inferred = El s $ Def r vs+                  v <- checkExpr e inferred+                  blockTerm t $ v <$ leqType_ t inferred+                  -- If there are more than one possible record we postpone+                _:_:_ -> do+                  reportSDoc "tc.term.expr.rec" 10 $ sep+                    [ text "Postponing type checking of"+                    , nest 2 $ prettyA e <+> text ":" <+> prettyTCM t+                    ]+                  postponeTypeCheckingProblem_ e t 	    _         -> typeError $ ShouldBeRecordType t -	A.Var _    -> __IMPOSSIBLE__-	A.Def _    -> __IMPOSSIBLE__-	A.Con _    -> __IMPOSSIBLE__--        A.ETel _   -> __IMPOSSIBLE__--	A.DontCare -> -- can happen in the context of with functions-                      return DontCare-                      -- __IMPOSSIBLE__+        A.RecUpdate ei recexpr fs -> do+          case unEl t of+            Def r vs  -> do+              rec <- checkExpr recexpr t+              name <- freshNoName (getRange recexpr)+              addLetBinding Relevant name rec t $ do+                projs <- recFields <$> getRecordDef r+                axs <- getRecordFieldNames r+                scope <- getScope+                let xs = map unArg axs+                es <- orderFields r Nothing xs $ map (\(x, e) -> (x, Just e)) fs+                let es' = zipWith (replaceFields name ei) projs es+                checkExpr (A.Rec ei [ (x, e) | (x, Just e) <- zip xs es' ]) t+            MetaV _ _ -> do+              inferred <- inferExpr recexpr >>= reduce . snd+              case unEl inferred of+                MetaV _ _ -> postponeTypeCheckingProblem_ e t+                _         -> do+                  v <- checkExpr e inferred+                  blockTerm t $ v <$ leqType_ t inferred+            _         -> typeError $ ShouldBeRecordType t+          where+            replaceFields :: Name -> A.ExprInfo -> Arg A.QName -> Maybe A.Expr -> Maybe A.Expr+            replaceFields n ei (Arg NotHidden _ p) Nothing  = Just $ A.App ei (A.Def p) $ defaultArg (unnamed $ A.Var n)+            replaceFields _ _  (Arg _         _ _) Nothing  = Nothing+            replaceFields _ _  _                   (Just e) = Just $ e +	A.DontCare e -> -- can happen in the context of with functions+          checkExpr e t+{- Andreas, 2011-10-03 why do I get an internal error for Issue337?+                        -- except that should be fixed now (issue 337)+                        __IMPOSSIBLE__+-} 	A.ScopedExpr scope e -> setScope scope >> checkExpr e t          e0@(A.QuoteGoal _ x e) -> do@@ -488,22 +665,134 @@           case metas of             _:_ -> postponeTypeCheckingProblem e0 t' $ and <$> mapM isInstantiatedMeta metas             []  -> do-              quoted <- quoteType t'+              quoted <- quoteTerm (unEl t')               tmType <- agdaTermType-              (v,ty) <- addLetBinding Relevant x quoted tmType (inferExpr e)-              blockTerm t' v $ leqType ty t'+              (v, ty) <- addLetBinding Relevant x quoted tmType (inferExpr e)+              blockTerm t' $ v <$ leqType_ ty t' +        A.ETel _   -> __IMPOSSIBLE__++	-- Application+          -- Subcase: ambiguous constructor+	_   | Application (A.Con (AmbQ cs@(_:_:_))) args <- appView e -> do+                -- First we should figure out which constructor we want.+                reportSLn "tc.check.term" 40 $ "Ambiguous constructor: " ++ show cs++                -- Get the datatypes of the various constructors+                let getData Constructor{conData = d} = d+                    getData _                        = __IMPOSSIBLE__+                reportSLn "tc.check.term" 40 $ "  ranges before: " ++ show (getRange cs)+                -- We use the reduced constructor when disambiguating, but+                -- the original constructor for type checking. This is important+                -- since they may have different types (different parameters).+                -- See issue 279.+                cs  <- zip cs . zipWith setRange (map getRange cs) <$> mapM reduceCon cs+                reportSLn "tc.check.term" 40 $ "  ranges after: " ++ show (getRange cs)+                reportSLn "tc.check.term" 40 $ "  reduced: " ++ show cs+                dcs <- mapM (\(c0, c1) -> (getData /\ const c0) . theDef <$> getConstInfo c1) cs++                -- Type error+                let badCon t = typeError $ DoesNotConstructAnElementOf+                                            (fst $ head cs) t++                -- Lets look at the target type at this point+                let getCon = do+                      TelV _ t1 <- telView t+                      t1 <- reduceB $ unEl t1+                      reportSDoc "tc.check.term.con" 40 $ nest 2 $+                        text "target type: " <+> prettyTCM t1+                      case t1 of+                        NotBlocked (Def d _) -> do+                          let dataOrRec = case [ c | (d', c) <- dcs, d == d' ] of+                                [c] -> do+                                  reportSLn "tc.check.term" 40 $ "  decided on: " ++ show c+                                  return (Just c)+                                []  -> badCon (Def d [])+                                cs  -> typeError $ GenericError $+                                        "Can't resolve overloaded constructors targeting the same datatype (" ++ show d +++                                        "): " ++ unwords (map show cs)+                          defn <- theDef <$> getConstInfo d+                          case defn of+                            Datatype{} -> dataOrRec+                            Record{}   -> dataOrRec+                            _ -> badCon (ignoreBlocking t1)+                        NotBlocked (MetaV _ _)  -> return Nothing+                        Blocked{} -> return Nothing+                        _ -> badCon (ignoreBlocking t1)+                let unblock = isJust <$> getCon+                mc <- getCon+                case mc of+                  Just c  -> checkConstructorApplication e t c args+                  Nothing -> postponeTypeCheckingProblem e t unblock++              -- Subcase: non-ambiguous constructor+            | Application (A.Con (AmbQ [c])) args <- appView e ->+                checkConstructorApplication e t c args+              -- Subcase: defined symbol or variable.+            | Application hd args <- appView e ->+                checkHeadApplication e t hd args++domainFree h rel x =+  A.DomainFull $ A.TypedBindings r $ Arg h rel $ A.TBind r [x] $ A.Underscore info+  where+    r = getRange x+    info = A.MetaInfo{ A.metaRange = r, A.metaScope = emptyScopeInfo, A.metaNumber = Nothing }++checkMeta :: (Type -> TCM Term) -> Type -> A.MetaInfo -> TCM Term+checkMeta newMeta t i = do+  case A.metaNumber i of+    Nothing -> do+      setScope (A.metaScope i)+      newMeta t+    -- Rechecking an existing metavariable+    Just n -> do+      let v = MetaV (MetaId n) []+      t' <- jMetaType . mvJudgement <$> lookupMeta (MetaId n)+      blockTerm t $ v <$ leqType t' t++inferMeta :: (Type -> TCM Term) -> A.MetaInfo -> TCM (Args -> Term, Type)+inferMeta newMeta i =+  case A.metaNumber i of+    Nothing -> do+      setScope (A.metaScope i)+      t <- workOnTypes $ newTypeMeta_+      v <- newMeta t+      return (apply v, t)+    -- Rechecking an existing metavariable+    Just n -> do+      let v = MetaV (MetaId n)+      t' <- jMetaType . mvJudgement <$> lookupMeta (MetaId n)+      return (v, t')+ -- | Infer the type of a head thing (variable, function symbol, or constructor)-inferHead :: Head -> TCM (Args -> Term, Type)-inferHead (HeadVar x) = do -- traceCall (InferVar x) $ do+inferHead :: A.Expr -> TCM (Args -> Term, Type)+inferHead (A.Var x) = do -- traceCall (InferVar x) $ do   (u, a) <- getVarInfo x-  when (argRelevance a == Irrelevant) $+  when (unusableRelevance $ argRelevance a) $     typeError $ VariableIsIrrelevant x   return (apply u, unArg a)-inferHead (HeadDef x) = do-  (u, a) <- inferDef Def x-  return (apply u, a)-inferHead (HeadCon [c]) = do+inferHead (A.Def x) = do+  proj <- isProjection x+  case proj of+    Nothing -> do+      (u, a) <- inferDef Def x+      return (apply u, a)+    Just{} -> do+      Just (r, n) <- funProjection . theDef <$> getConstInfo x+      cxt <- size <$> freeVarsToApply x+      m <- getDefFreeVars x+      reportSDoc "tc.term.proj" 10 $ sep+        [ text "building projection" <+> prettyTCM x+        , nest 2 $ parens (text "ctx =" <+> text (show cxt))+        , nest 2 $ parens (text "n =" <+> text (show n))+        , nest 2 $ parens (text "m =" <+> text (show m)) ]+      let hs | n == 0    = __IMPOSSIBLE__+             | otherwise = genericReplicate (n - 1) NotHidden -- TODO: hiding+          names = [ s ++ [c] | s <- "" : names, c <- ['a'..'z'] ]+          eta   = foldr (\(h, s) -> Lam h . NoAbs s) (Def x []) (zip hs names)+      (u, a) <- inferDef (\f vs -> eta `apply` vs) x+      return (apply u, a)+inferHead (A.Con (AmbQ [c])) = do    -- Constructors are polymorphic internally so when building the constructor   -- term we should throw away arguments corresponding to parameters.@@ -520,16 +809,25 @@    -- So when applying the constructor throw away the parameters.   return (apply u . genericDrop n, a)-inferHead (HeadCon _) = __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors+inferHead (A.Con _) = __IMPOSSIBLE__  -- inferHead will only be called on unambiguous constructors+inferHead (A.QuestionMark i)  = inferMeta newQuestionMark i+inferHead (A.Underscore i) = inferMeta newValueMeta i+inferHead e = do (term, t) <- inferExpr e+                 return (apply term, t)  inferDef :: (QName -> Args -> Term) -> QName -> TCM (Term, Type) inferDef mkTerm x =     traceCall (InferDef (getRange x) x) $ do     d  <- instantiateDef =<< getConstInfo x     -- irrelevant defs are only allowed in irrelevant position-    when (defRelevance d == Irrelevant) $ do-      irr <- asks envIrrelevant-      unless irr $ typeError $ DefinitionIsIrrelevant x+    let drel = defRelevance d+    when (drel /= Relevant) $ do+      rel <- asks envRelevance+      reportSDoc "tc.irr" 50 $ vcat+        [ text "declaration relevance =" <+> text (show drel)+        , text "context     relevance =" <+> text (show rel)+        ]+      unless (drel `moreRelevant` rel) $ typeError $ DefinitionIsIrrelevant x     vs <- freeVarsToApply x     verboseS "tc.term.def" 10 $ do       ds <- mapM prettyTCM vs@@ -542,84 +840,43 @@ --   a general application since the implicit arguments can be inserted --   without looking at the arguments to the constructor. checkConstructorApplication :: A.Expr -> Type -> QName -> [NamedArg A.Expr] -> TCM Term-checkConstructorApplication org t c args = do-  checkHead t args-{--  TelV gamma d <- telView t--  -- Eta expand the constructor applications so it's fully applied-  let realName "_" = "carg"-      realName  x  = x-      gamma' = telToList gamma--    -- Generate fresh names for eta expansion variables-  vars <- sequence [ Arg h <$> freshName_ (realName x)-                   | Arg h (x, _) <- gamma' ]--    -- Compute the context of the variables-  let cxt = [ (unArg x, fmap snd t) | (x, t) <- zip vars gamma' ]-      extendCxt cxt m = foldr (uncurry addCtx) m cxt-      etaExpansion t = foldr lam t gamma'-        where lam (Arg h (x, _)) t = Lam h (Abs x t)--  -- Go inside the lambdas generated by the expansion-  extendCxt cxt $ do--  -- Make sure to shadow some things we shouldn't use-  t        <- return d-  args     <- return $ args ++ map (fmap (unnamed . A.Var)) vars-  fallback <- return $ etaExpansion <$> checkHead t args--  -- Make sure we're checking against the right datatype-  d   <- getConstructorData c-  mdi <- getDatatypeInfo t-  case mdi of-    Nothing -> fallback-    Just dinfo@DataInfo{ datatypeName   = d'-                       , datatypeParTel = parTel-                       , datatypePars   = dpars-                       , datatypeIxTel  = ixTel-                       , datatypeIxs    = indices-                       }-      | d /= d'   -> fallback-      | otherwise -> do--      -- Split the given arguments into explicitly given parameters and normal-      -- arguments-      (pars, args) <- return $ splitArgs (map (fst . unArg) $ telToList parTel)-                                         args--      reportSDoc "tc.term.con" 30 $ vcat-        [ text "checking constructor application"-        , nest 2 $ vcat-          [ text "c      =" <+> prettyTCM c-          , text "A.pars =" <+> prettyList (map prettyA pars)-          , text "A.args =" <+> prettyList (map prettyA args)-          , text "ptel   =" <+> prettyTCM parTel-          , text "itel   =" <+> addCtxTel parTel (prettyTCM ixTel)-          , text "pars   =" <+> prettyTCM dpars-          , text "ixs    =" <+> prettyTCM indices-          ]-        ]--      -- Check the parameters. Just means checking that any given-      -- parameters are equal to the expected parameters.-      -- checkParams pars parTel $ do--      fallback--  -- Plan-  --  * Check the parameters-  --    + if they're present type check and compare to the parameters to the-  --      datatype, otherwise just continue-  --  * Insert implicit constructor arguments (not counting parameters)-  --  * Check the arguments-  --  * Compare the computed indices from the constructor with the given-  --    indices--}+checkConstructorApplication org t c args+  | hiddenArg = fallback+  | otherwise = do+    cdef  <- getConstInfo c+    let Constructor{conData = d} = theDef cdef+    case unEl t of -- Only fully applied constructors get special treatment+      Def d' vs | d' == d -> do+        def <- theDef <$> getConstInfo d+        let npars = case def of+                      Datatype{ dataPars = n } -> Just n+                      Record{ recPars = n }    -> Just n+                      _                        -> Nothing+        flip (maybe fallback) npars $ \n -> do+        let ps    = genericTake n vs+            ctype = defType cdef+        reportSDoc "tc.term.con" 20 $ vcat+          [ text "special checking of constructor application of" <+> prettyTCM c+          , nest 2 $ vcat [ text "ps     =" <+> prettyTCM ps+                          , text "ctype  =" <+> prettyTCM ctype ] ]+        let ctype' = ctype `piApply` ps+        reportSDoc "tc.term.con" 20 $ nest 2 $ text "ctype' =" <+> prettyTCM ctype'+        checkArguments' ExpandLast (getRange c) args ctype' t org $ \us t' -> do+          reportSDoc "tc.term.con" 20 $ nest 2 $ vcat+            [ text "us     =" <+> prettyTCM us+            , text "t'     =" <+> prettyTCM t' ]+          blockTerm t $ Con c us <$ leqType_ t' t+      _ -> fallback   where-    checkHead t args = checkHeadApplication org t (HeadCon [c]) args+    fallback = checkHeadApplication org t (A.Con (AmbQ [c])) args +    -- Check if there are explicitly given hidden arguments,+    -- in which case we fall back to default type checking.+    -- We could work harder, but let's not for now.+    hiddenArg = case args of+      Arg Hidden _ _ : _ -> True+      _                  -> False+     -- Split the arguments to a constructor into those corresponding     -- to parameters and those that don't. Dummy underscores are inserted     -- for parameters that are not given explicitly.@@ -638,38 +895,6 @@      dummyUnderscore = Arg Hidden Relevant (unnamed $ A.Underscore $ A.MetaInfo noRange emptyScopeInfo Nothing) ---   TelV _ (El _ (Def d dargs)) <- telView t---   condef  <- getConstInfo c---   let pars = map unArg $ genericTake (conPars $ theDef condef) dargs---   (_, contype) <- inferHead (HeadCon [c])---   TelV contel _ <- telView contype---   let args' = insertParams contel pars args---   reportSDoc "tc.term.con" 10 $ vcat---     [ text "Checking constructor application"---     , nest 2 $ vcat---       [ text "args  =" <+> prettyList (map prettyA args)---       , text "args' =" <+> prettyList (map prettyA args')---       ]---     ]---   checkHeadApplication org t (HeadCon [c]) args'---   where---     insertParams :: Telescope -> [Term] -> [NamedArg A.Expr] -> [NamedArg A.Expr]---     insertParams _ [] args = args---     insertParams (ExtendTel a tel) (p:ps) (arg:args)---       | argHiding arg == NotHidden ||---         notElem argname [Nothing, telname] =---           Arg Hidden (unnamed $ A.TypeChecked p) :---           insertParams (absBody tel) ps (arg:args)---       | otherwise =---           arg : insertParams (absBody tel) ps args---       where---         argname = nameOf (unArg arg)---         telname = Just (absName tel)---     insertParams (ExtendTel a tel) (p:ps) [] =---           Arg Hidden (unnamed $ A.TypeChecked p) :---           insertParams (absBody tel) ps []---     insertParams EmptyTel (_:_) _ = __IMPOSSIBLE__- -- | @checkHeadApplication e t hd args@ checks that @e@ has type @t@, -- assuming that @e@ has the form @hd args@. The corresponding -- type-checked term is returned.@@ -681,42 +906,43 @@ -- -- Precondition: The head @hd@ has to be unambiguous, and there should -- not be any need to insert hidden lambdas.-checkHeadApplication :: A.Expr -> Type -> A.Head -> [NamedArg A.Expr] -> TCM Term+checkHeadApplication :: A.Expr -> Type -> A.Expr -> [NamedArg A.Expr] -> TCM Term checkHeadApplication e t hd args = do-  replacing <- envReplace <$> ask   kit       <- coinductionKit-  if not replacing-   then local (\e -> e { envReplace = True }) defaultResult-   else case hd of-    HeadCon [c] -> do+  case hd of+    A.Con (AmbQ [c]) | Just c == (nameOfSharp <$> kit) -> do+      -- Type checking # generated #-wrapper. The # that the user can write will be a Def,+      -- but the sharp we generate in the body of the wrapper is a Con.+      defaultResult+    A.Con (AmbQ [c]) -> do       (f, t0) <- inferHead hd       reportSDoc "tc.term.con" 5 $ vcat         [ text "checkHeadApplication inferred" <+>           prettyTCM c <+> text ":" <+> prettyTCM t0         ]-      checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 cs -> do+      checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 -> do         TelV eTel eType <- telView t         -- If the expected type @eType@ is a metavariable we have to make         -- sure it's instantiated to the proper pi type         TelV fTel fType <- telViewUpTo (size eTel) t1-        blockTerm t (f vs) $ (cs ++) <$> do-          -- We know that the target type of the constructor (fType)-          -- does not depend on fTel so we can compare fType and eType-          -- first.--          when (size eTel > size fTel) $-            compareTel CmpLeq eTel fTel >> return () -- This will fail!+        -- We know that the target type of the constructor (fType)+        -- does not depend on fTel so we can compare fType and eType+        -- first. -          reportSDoc "tc.term.con" 10 $ vcat-            [ text "checking" <+>-              prettyTCM fType <+> text "?<=" <+> prettyTCM eType-            ]-          cs1 <- addCtxTel eTel $ leqType fType eType+        when (size eTel > size fTel) $+          typeError $ UnequalTypes CmpLeq t1 t -- switch because of contravariance+          -- Andreas, 2011-05-10 report error about types rather  telescopes+          -- compareTel CmpLeq eTel fTel >> return () -- This will fail! -          cs2 <- compareTel CmpLeq eTel fTel-          return $ cs1 ++ cs2+        reportSDoc "tc.term.con" 10 $ vcat+          [ text "checking" <+>+            prettyTCM fType <+> text "?<=" <+> prettyTCM eType+          ]+        blockTerm t $ f vs <$ workOnTypes (do+          addCtxTel eTel $ leqType fType eType+          compareTel t t1 CmpLeq eTel fTel) -    HeadDef c | Just c == (nameOfSharp <$> kit) -> do+    (A.Def c) | Just c == (nameOfSharp <$> kit) -> do       -- TODO: Handle coinductive constructors under lets.       lets <- envLetBindings <$> ask       unless (Map.null lets) $@@ -726,7 +952,7 @@       -- The name of the fresh function.       i <- fresh :: TCM Integer       let name = filter (/= '_') (show $ A.qnameName c) ++ "-" ++ show i-      c' <- liftM2 qualify currentModule (freshName_ name)+      c' <- liftM2 qualify (killRange <$> currentModule) (freshName_ name)        -- The application of the fresh function to the relevant       -- arguments.@@ -738,8 +964,8 @@       tel <- getContextTelescope       -- If we are in irrelevant position, add definition irrelevantly.       -- TODO: is this sufficient?-      rel <- irrelevant <$> asks envIrrelevant-      addConstant c' (Defn rel c' t (defaultDisplayForm c') i $ Axiom Nothing Nothing)+      rel <- asks envRelevance+      addConstant c' (Defn rel c' t (defaultDisplayForm c') i noCompiledRep $ Axiom)        -- Define and type check the fresh function.       ctx <- getContext@@ -748,7 +974,7 @@           pats   = map (fmap $ \(n, _) -> Named Nothing (A.VarP n)) $                        reverse ctx           clause = A.Clause (A.LHS (A.LHSRange noRange) c' pats [])-                            (A.RHS $ unAppView (A.Application hd args))+                            (A.RHS $ unAppView (A.Application (A.Con (AmbQ [c])) args))                             []        reportSDoc "tc.term.expr.coind" 15 $ vcat $@@ -762,8 +988,7 @@           , nest 2 $ prettyA clause <> text "."           ] -      local (\e -> e { envReplace = False }) $-        escapeContext (size ctx) $ checkFunDef Delayed info c' [clause]+      escapeContext (size ctx) $ checkFunDef Delayed info c' [clause]        reportSDoc "tc.term.expr.coind" 15 $ do         def <- theDef <$> getConstInfo c'@@ -771,14 +996,13 @@           text "."        return e'-    HeadCon _  -> __IMPOSSIBLE__-    HeadVar {} -> defaultResult-    HeadDef {} -> defaultResult+    A.Con _  -> __IMPOSSIBLE__+    _ -> defaultResult   where   defaultResult = do     (f, t0) <- inferHead hd-    checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 cs ->-      blockTerm t (f vs) $ (cs ++) <$> leqType t1 t+    checkArguments' ExpandLast (getRange hd) args t0 t e $ \vs t1 ->+      blockTerm t $ f vs <$ leqType_ t1 t  data ExpandHidden = ExpandLast | DontExpandLast @@ -799,27 +1023,34 @@  -- | Check a list of arguments: @checkArgs args t0 t1@ checks that --   @t0 = Delta -> t0'@ and @args : Delta@. Inserts hidden arguments to---   make this happen. Returns @t0'@ and any constraints that have to be---   solve for everything to be well-formed.+--   make this happen.  Returns the evaluated arguments @vs@, the remaining+--   type @t0'@ (which should be a subtype of @t1@) and any constraints @cs@+--   that have to be solved for everything to be well-formed.+-- --   TODO: doesn't do proper blocking of terms checkArguments :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Type -> Type ->-                  ErrorT Type TCM (Args, Type, Constraints)-checkArguments DontExpandLast _ [] t0 t1 = return ([], t0, [])+                  ErrorT Type TCM (Args, Type)+checkArguments DontExpandLast _ [] t0 t1 = return ([], t0) checkArguments exh r [] t0 t1 =     traceCallE (CheckArguments r [] t0 t1) $ do 	t0' <- lift $ reduce t0 	t1' <- lift $ reduce t1-	case funView $ unEl t0' of -- TODO: clean-	    FunV (Arg Hidden rel a) _ | notHPi $ unEl t1'  -> do+	case unEl t0' of+	    Pi (Arg Hidden rel a) _ | notHPi Hidden $ unEl t1'  -> do 		v  <- lift $ applyRelevanceToContext rel $ newValueMeta a 		let arg = Arg Hidden rel v-		(vs, t0'',cs) <- checkArguments exh r [] (piApply t0' [arg]) t1'-		return (arg : vs, t0'',cs)-	    _ -> return ([], t0', [])+		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'+		return (arg : vs, t0'')+	    Pi (Arg Instance rel a) _ | notHPi Instance $ unEl t1'  -> do+                lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta for type " ++ show a+		v <- lift $ applyRelevanceToContext rel $ newIFSMeta a+		let arg = Arg Instance rel v+		(vs, t0'') <- checkArguments exh r [] (piApply t0' [arg]) t1'+		return (arg : vs, t0'')+	    _ -> return ([], t0')     where-	notHPi (Pi  (Arg Hidden _ _) _) = False-	notHPi (Fun (Arg Hidden _ _) _) = False-	notHPi _		        = True+	notHPi h (Pi  (Arg h' _ _) _) | h == h' = False+	notHPi _ _		        = True  checkArguments exh r args0@(Arg h _ e : args) t0 t1 =     traceCallE (CheckArguments r args0 t0 t1) $ do@@ -830,23 +1061,28 @@         NotBlocked t0' -> do           -- (t0', cs) <- forcePi h (name e) t0           e' <- return $ namedThing e-          case (h, funView $ unEl t0') of-              (NotHidden, FunV (Arg Hidden rel a) _) -> insertUnderscore rel-              (Hidden, FunV (Arg Hidden rel a) _)-                  | not $ sameName (nameOf e) (nameInPi $ unEl t0') -> insertUnderscore rel-              (_, FunV (Arg h' rel a) _) | h == h' -> do+          case unEl t0' of+              Pi (Arg h' rel a) _ |+                h == h' && (h == NotHidden || sameName (nameOf e) (nameInPi $ unEl t0')) -> do                   u  <- lift $ applyRelevanceToContext rel $ checkExpr e' a                   let arg = Arg h rel u  -- save relevance info in argument-                  (us, t0'', cs') <- checkArguments exh (fuseRange r e) args (piApply t0' [arg]) t1-                  return (nukeIfIrrelevant arg : us, t0'', cs')+                  (us, t0'') <- checkArguments exh (fuseRange r e) args (piApply t0' [arg]) t1+                  return (nukeIfIrrelevant arg : us, t0'')                          where nukeIfIrrelevant arg =                                  if argRelevance arg == Irrelevant then-                                   arg { unArg = DontCare }+   -- Andreas, 2011-09-09 keep irr. args. until after termination checking+                                   arg { unArg = DontCare $ unArg arg }                                   else arg-              (Hidden, FunV (Arg NotHidden _ _) _) ->-                  lift $ typeError $ WrongHidingInApplication t0'+              Pi (Arg Instance rel a) _ -> insertIFSUnderscore rel a+              Pi (Arg Hidden rel a) _   -> insertUnderscore rel+              Pi (Arg NotHidden _ _) _  -> lift $ typeError $ WrongHidingInApplication t0'               _ -> lift $ typeError $ ShouldBePi t0'     where+	insertIFSUnderscore rel a = do v <- lift $ applyRelevanceToContext rel $ newIFSMeta a+                                       lift $ reportSLn "tc.term.args.ifs" 15 $ "inserting implicit meta (2) for type " ++ show a+                                       let arg = Arg Instance rel v+                                       (vs, t0'') <- checkArguments exh r args0 (piApply t0 [arg]) t1+                                       return (arg : vs, t0'') 	insertUnderscore rel = do 	  scope <- lift $ getScope 	  let m = A.Underscore $ A.MetaInfo@@ -864,27 +1100,31 @@ 	sameName n1	 n2 = n1 == n2  	nameInPi (Pi _ b)  = Just $ absName b-	nameInPi (Fun _ _) = Nothing 	nameInPi _	   = __IMPOSSIBLE__   -- | Check that a list of arguments fits a telescope.-checkArguments_ :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Telescope -> TCM (Args, Constraints)+checkArguments_ :: ExpandHidden -> Range -> [NamedArg A.Expr] -> Telescope -> TCM Args checkArguments_ exh r args tel = do     z <- runErrorT $ checkArguments exh r args (telePi tel $ sort Prop) (sort Prop)     case z of-      Right (args, _, cs) -> return (args, cs)-      Left _              -> __IMPOSSIBLE__+      Right (args, _) -> return args+      Left _          -> __IMPOSSIBLE__  --- | Infer the type of an expression. Implemented by checking agains a meta+-- | Infer the type of an expression. Implemented by checking against a meta --   variable. inferExpr :: A.Expr -> TCM (Term, Type) inferExpr e = do-    t <- newTypeMeta_+    -- Andreas, 2011-04-27+    t <- workOnTypes $ newTypeMeta_     v <- checkExpr e t     return (v,t) +checkTerm :: Term -> Type -> TCM Term+checkTerm tm ty = do atm <- reify tm+                     checkExpr atm ty+ --------------------------------------------------------------------------- -- * Let bindings ---------------------------------------------------------------------------@@ -898,20 +1138,20 @@     t <- isType_ t     v <- applyRelevanceToContext rel $ checkExpr e t     addLetBinding rel x v t ret-checkLetBinding (A.LetApply i x tel m args rd rm) ret = do+checkLetBinding (A.LetApply i x modapp rd rm) ret = do   -- Any variables in the context that doesn't belong to the current   -- module should go with the new module.   -- fv   <- getDefFreeVars =<< (qnameFromList . mnameToList) <$> currentModule   fv   <- getModuleFreeVars =<< currentModule   n    <- size <$> getContext   let new = n - fv-  reportSLn "tc.term.let.apply" 10 $ "Applying " ++ show m ++ " with " ++ show new ++ " free variables"+  reportSLn "tc.term.let.apply" 10 $ "Applying " ++ show modapp ++ " with " ++ show new ++ " free variables"   reportSDoc "tc.term.let.apply" 20 $ vcat     [ text "context =" <+> (prettyTCM =<< getContextTelescope)     , text "module  =" <+> (prettyTCM =<< currentModule)     , text "fv      =" <+> (text $ show fv)     ]-  checkSectionApplication i x tel m args rd rm+  checkSectionApplication i x modapp rd rm   withAnonymousModule x new ret -- LetOpen is only used for highlighting and has no semantics checkLetBinding A.LetOpen{} ret = ret
src/full/Agda/TypeChecking/Rules/Term.hs-boot view
@@ -6,4 +6,3 @@ import Agda.TypeChecking.Monad.Base  checkExpr :: A.Expr -> Type -> TCM Term-
src/full/Agda/TypeChecking/Serialise.hs view
@@ -1,5 +1,6 @@ {-# LANGUAGE OverlappingInstances,              TypeSynonymInstances,+             FlexibleInstances,              IncoherentInstances,              ExistentialQuantification,              ScopedTypeVariables,@@ -23,6 +24,7 @@   )   where +import Control.Applicative import qualified Control.Exception as E import Control.Monad import Control.Monad.Reader@@ -32,8 +34,8 @@ import Data.Bits (shiftR) import Data.Word import Data.ByteString.Lazy as L-import Data.HashTable (HashTable)-import qualified Data.HashTable as H+import Data.Hashable+import qualified Data.HashTable.IO as H import Data.Int (Int32, Int64) import Data.IORef import Data.Map (Map)@@ -47,6 +49,8 @@ import Data.Typeable import qualified Codec.Compression.GZip as G +import qualified Agda.Compiler.Epic.Interface as Epic+ import Agda.Syntax.Common import Agda.Syntax.Concrete.Name as C import Agda.Syntax.Abstract.Name as A@@ -58,6 +62,7 @@ import Agda.Syntax.Fixity import Agda.Syntax.Notation import Agda.Syntax.Literal+import qualified Agda.Compiler.JS.Syntax as JS import qualified Agda.Interaction.Highlighting.Range   as HR import qualified Agda.Interaction.Highlighting.Precise as HP import Agda.Interaction.FindFile@@ -77,10 +82,21 @@ -- 32-bit machines). Word64 does not have these problems.  currentInterfaceVersion :: Word64-currentInterfaceVersion = 20110217 * 10 + 0+currentInterfaceVersion = 20111026 * 10 + 0 -type Node = [Int32] -- constructor tag (maybe omitted) and arg indices+-- | Constructor tag (maybe omitted) and argument indices. +type Node = [Int32]++-- | The type of hashtables used in this module.+--+-- A very limited amount of testing indicates that 'H.CuckooHashTable'+-- is somewhat slower than 'H.BasicHashTable', and that+-- 'H.LinearHashTable' and the hashtables from "Data.Hashtable" are+-- much slower.++type HashTable k v = H.BasicHashTable k v+ data Dict = Dict{ nodeD     :: !(HashTable Node    Int32)                 , stringD   :: !(HashTable String  Int32)                 , integerD  :: !(HashTable Integer Int32)@@ -93,8 +109,18 @@                 }  data U    = forall a . Typeable a => U !a-type Memo = HashTable (Int32, Int32) U    -- (node index, type rep key)+type Memo = HashTable (Int32, TypeRep') U    -- (node index, type rep) +-- | A newtype is used to avoid introducing an orphan instance of+-- Hashable.+newtype TypeRep' = TypeRep' { unTypeRep' :: TypeRep }+  deriving Eq++-- | With direct access to the internals of 'TypeRep' this instance+-- could presumably be improved.+instance Hashable TypeRep' where+  hash = hash . show . unTypeRep'+ data St = St   { nodeE     :: !(Array Int32 Node)   , stringE   :: !(Array Int32 String)@@ -141,7 +167,8 @@       nL <- l nD; sL <- l sD; iL <- l iD; dL <- l dD       return $ B.encode currentInterfaceVersion `L.append`                G.compress (B.encode (root, nL, sL, iL, dL))-  where l = fmap (List.map fst . List.sortBy (compare `on` snd)) . H.toList+  where+  l h = List.map fst . List.sortBy (compare `on` snd) <$> H.toList h  -- | Decodes something. The result depends on the include path. --@@ -173,7 +200,7 @@        else do          st <- St (ar nL) (ar sL) (ar iL) (ar dL)-                <$> liftIO (H.new (==) hashInt2)+                <$> liftIO H.new                 <*> return mf <*> return incs         (r, st) <- runStateT (runErrorT (value r)) st         return (Just (modFile st), case r of@@ -235,6 +262,11 @@   icode   = icodeX doubleD doubleC   value i = (! i) `fmap` gets doubleE +instance EmbPrj () where+  icode () = icode0'+  value = vcase valu where valu [] = valu0 ()+                           valu _  = malformed+ instance (EmbPrj a, EmbPrj b) => EmbPrj (a, b) where   icode (a, b) = icode2' a b   value = vcase valu where valu [a, b] = valu2 (,) a b@@ -253,10 +285,10 @@                            valu _   = malformed  instance EmbPrj Bool where-  icode True  = icode0 0-  icode False = icode0 1-  value = vcase valu where valu [0] = valu0 True-                           valu [1] = valu0 False+  icode True  = icode0'+  icode False = icode0 0+  value = vcase valu where valu []  = valu0 True+                           valu [0] = valu0 False                            valu _   = malformed  instance EmbPrj AbsolutePath where@@ -289,7 +321,7 @@  instance EmbPrj a => EmbPrj [a] where   icode xs = icodeN =<< mapM icode xs-  value = vcase $ mapM value+  value = vcase (mapM value) --   icode []       = icode0' --   icode (x : xs) = icode2' x xs --   value = vcase valu where valu []      = valu0 []@@ -321,10 +353,10 @@  instance EmbPrj C.Name where   icode (C.NoName a b) = icode2 0 a b-  icode (C.Name r xs)  = icode2 1 r xs-  value = vcase valu where valu [0, a, b]  = valu2 C.NoName a b-                           valu [1, r, xs] = valu2 C.Name   r xs-                           valu _          = malformed+  icode (C.Name r xs)  = icode2' r xs+  value = vcase valu where valu [0, a, b] = valu2 C.NoName a b+                           valu [r, xs]   = valu2 C.Name   r xs+                           valu _         = malformed  instance EmbPrj NamePart where   icode Hole   = icode0'@@ -341,15 +373,28 @@                            valu _      = malformed  instance EmbPrj Scope where-  icode (Scope a b c d e f) = icode6' a b c d e f-  value = vcase valu where valu [a, b, c, d, e, f] = valu6 Scope a b c d e f-                           valu _                  = malformed+  icode (Scope a b c d) = icode4' a b c d+  value = vcase valu where valu [a, b, c, d] = valu4 Scope a b c d+                           valu _            = malformed +instance EmbPrj NameSpaceId where+  icode PublicNS        = icode0'+  icode PrivateNS       = icode0 1+  icode ImportedNS      = icode0 2+  icode OnlyQualifiedNS = icode0 3+  value = vcase valu where valu []  = valu0 PublicNS+                           valu [1] = valu0 PrivateNS+                           valu [2] = valu0 ImportedNS+                           valu [3] = valu0 OnlyQualifiedNS+                           valu _   = malformed+ instance EmbPrj Access where   icode PrivateAccess = icode0 0-  icode PublicAccess  = icode0 1+  icode PublicAccess  = icode0'+  icode OnlyQualified = icode0 2   value = vcase valu where valu [0] = valu0 PrivateAccess-                           valu [1] = valu0 PublicAccess+                           valu []  = valu0 PublicAccess+                           valu [2] = valu0 OnlyQualified                            valu _   = malformed  instance EmbPrj NameSpace where@@ -367,19 +412,19 @@   value n = AbsModule `fmap` value n  instance EmbPrj KindOfName where-  icode DefName = icode0 0+  icode DefName = icode0'   icode ConName = icode0 1-  value = vcase valu where valu [0] = valu0 DefName+  value = vcase valu where valu []  = valu0 DefName                            valu [1] = valu0 ConName                            valu _   = malformed  instance EmbPrj Agda.Syntax.Fixity.Fixity where   icode (LeftAssoc  a b) = icode2 0 a b   icode (RightAssoc a b) = icode2 1 a b-  icode (NonAssoc   a b) = icode2 2 a b+  icode (NonAssoc   a b) = icode2' a b   value = vcase valu where valu [0, a, b] = valu2 LeftAssoc  a b                            valu [1, a, b] = valu2 RightAssoc a b-                           valu [2, a, b] = valu2 NonAssoc   a b+                           valu [a, b]    = valu2 NonAssoc   a b                            valu _         = malformed  instance EmbPrj Agda.Syntax.Fixity.Fixity' where@@ -390,10 +435,10 @@ instance EmbPrj GenPart where     icode (BindHole a)   = icode1 0 a     icode (NormalHole a) = icode1 1 a-    icode (IdPart a)     = icode1 2 a+    icode (IdPart a)     = icode1' a     value = vcase valu where valu [0, a] = valu1 BindHole a                              valu [1, a] = valu1 NormalHole a-                             valu [2, a] = valu1 IdPart a+                             valu [a]    = valu1 IdPart a                              valu _      = malformed  instance EmbPrj A.QName where@@ -443,26 +488,30 @@                            valu _         = malformed  instance EmbPrj Agda.Syntax.Common.Induction where-  icode Inductive   = icode0 0+  icode Inductive   = icode0'   icode CoInductive = icode0 1-  value = vcase valu where valu [0] = valu0 Inductive+  value = vcase valu where valu []  = valu0 Inductive                            valu [1] = valu0 CoInductive                            valu _   = malformed  instance EmbPrj Agda.Syntax.Common.Hiding where   icode Hidden    = icode0 0-  icode NotHidden = icode0 1+  icode NotHidden = icode0'+  icode Instance  = icode0 2   value = vcase valu where valu [0] = valu0 Hidden-                           valu [1] = valu0 NotHidden+                           valu []  = valu0 NotHidden+                           valu [2] = valu0 Instance                            valu _   = malformed  instance EmbPrj Agda.Syntax.Common.Relevance where-  icode Relevant   = icode0 0+  icode Relevant   = icode0'   icode Irrelevant = icode0 1   icode Forced     = icode0 2-  value = vcase valu where valu [0] = valu0 Relevant+  icode NonStrict  = icode0 3+  value = vcase valu where valu []  = valu0 Relevant                            valu [1] = valu0 Irrelevant                            valu [2] = valu0 Forced+                           valu [3] = valu0 NonStrict                            valu _   = malformed  instance EmbPrj I.Type where@@ -471,9 +520,11 @@                            valu _      = malformed  instance (EmbPrj a) => EmbPrj (I.Abs a) where-  icode (Abs a b) = icode2' a b-  value = vcase valu where valu [a, b] = valu2 Abs a b-                           valu _      = malformed+  icode (NoAbs a b) = icode2 0 a b+  icode (Abs a b)   = icode2' a b+  value = vcase valu where valu [a, b]    = valu2 Abs a b+                           valu [0, a, b] = valu2 NoAbs a b+                           valu _         = malformed  instance EmbPrj I.Term where   icode (Var      a b) = icode2 0 a b@@ -482,49 +533,62 @@   icode (Def      a b) = icode2 3 a b   icode (Con      a b) = icode2 4 a b   icode (Pi       a b) = icode2 5 a b-  icode (Fun      a b) = icode2 6 a b   icode (Sort     a  ) = icode1 7 a   icode (MetaV    a b) = __IMPOSSIBLE__-  icode (DontCare    ) = icode0 8+  icode (DontCare a  ) = icode1 8 a+  icode (Level    a  ) = icode1 9 a   value = vcase valu where valu [0, a, b] = valu2 Var   a b                            valu [1, a, b] = valu2 Lam   a b                            valu [2, a]    = valu1 Lit   a                            valu [3, a, b] = valu2 Def   a b                            valu [4, a, b] = valu2 Con   a b                            valu [5, a, b] = valu2 Pi    a b-                           valu [6, a, b] = valu2 Fun   a b                            valu [7, a]    = valu1 Sort  a-                           valu [8]       = valu0 DontCare+                           valu [8, a]    = valu1 DontCare a+                           valu [9, a]    = valu1 Level a                            valu _         = malformed +instance EmbPrj Level where+  icode (Max a) = icode1' a+  value = vcase valu where valu [a] = valu1 Max a+                           valu _   = malformed++instance EmbPrj PlusLevel where+  icode (ClosedLevel a) = icode1' a+  icode (Plus a b)      = icode2' a b+  value = vcase valu where valu [a]    = valu1 ClosedLevel a+                           valu [a, b] = valu2 Plus a b+                           valu _      = malformed++instance EmbPrj LevelAtom where+  icode (NeutralLevel a)   = icode1' a+  icode (UnreducedLevel a) = icode1 1 a+  icode MetaLevel{}        = __IMPOSSIBLE__+  icode BlockedLevel{}     = __IMPOSSIBLE__+  value = vcase valu where valu [a]    = valu1 NeutralLevel a+                           valu [1, a] = valu1 UnreducedLevel a+                           valu _      = malformed+ instance EmbPrj I.Sort where-  icode (Type  a  ) = icode1 0 a-  icode Prop        = icode0 1-  icode (Lub   a b) = icode2 2 a b-  icode (Suc   a  ) = icode1 3 a-  icode (MetaS a b) = __IMPOSSIBLE__-  icode Inf         = icode0 4-  icode (DLub a b)  = icode2 5 a b-  value = vcase valu where valu [0, a]    = valu1 Type  a-                           valu [1]       = valu0 Prop-                           valu [2, a, b] = valu2 Lub   a b-                           valu [3, a]    = valu1 Suc   a-                           valu [4]       = valu0 Inf-                           valu [5, a, b] = valu2 DLub a b-                           valu _         = malformed+  icode (Type  a  ) = icode1' a+  icode Prop        = icode1 1 ()+  icode Inf         = icode1 4 ()+  icode (DLub a b)  = __IMPOSSIBLE__+  value = vcase valu where valu [a]    = valu1 Type  a+                           valu [1, _] = valu0 Prop+                           valu [4, _] = valu0 Inf+                           valu _      = malformed  instance EmbPrj Agda.Syntax.Literal.Literal where-  icode (LitInt    a b) = icode2 0 a b+  icode (LitInt    a b) = icode2' a b   icode (LitFloat  a b) = icode2 1 a b   icode (LitString a b) = icode2 2 a b   icode (LitChar   a b) = icode2 3 a b-  icode (LitLevel  a b) = icode2 4 a b   icode (LitQName  a b) = icode2 5 a b-  value = vcase valu where valu [0, a, b] = valu2 LitInt    a b+  value = vcase valu where valu [a, b]    = valu2 LitInt    a b                            valu [1, a, b] = valu2 LitFloat  a b                            valu [2, a, b] = valu2 LitString a b                            valu [3, a, b] = valu2 LitChar   a b-                           valu [4, a, b] = valu2 LitLevel  a b                            valu [5, a, b] = valu2 LitQName  a b                            valu _         = malformed @@ -544,64 +608,122 @@  instance EmbPrj DisplayTerm where   icode (DTerm    a  ) = icode1' a-  icode (DWithApp a b) = icode2' a b-  value = vcase valu where valu [a]    = valu1 DTerm a-                           valu [a, b] = valu2 DWithApp a b-                           valu _      = malformed+  icode (DDot     a  ) = icode1 1 a+  icode (DCon     a b) = icode2 2 a b+  icode (DDef     a b) = icode2 3 a b+  icode (DWithApp a b) = icode2 4 a b+  value = vcase valu where valu [a]       = valu1 DTerm a+                           valu [1, a]    = valu1 DDot a+                           valu [2, a, b] = valu2 DCon a b+                           valu [3, a, b] = valu2 DDef a b+                           valu [4, a, b] = valu2 DWithApp a b+                           valu _         = malformed  instance EmbPrj MutualId where   icode (MutId a) = icode a   value n = MutId `fmap` value n  instance EmbPrj Definition where-  icode (Defn rel a b c d e) = icode6' rel a b c d e-  value = vcase valu where valu [rel, a, b, c, d, e] = valu6 Defn rel a b c d e-                           valu _                    = malformed+  icode (Defn rel a b c d e f) = icode7' rel a b c d e f+  value = vcase valu where valu [rel, a, b, c, d, e, f] = valu7 Defn rel a b c d e f+                           valu _                       = malformed  instance EmbPrj HaskellRepresentation where-  icode (HsType a)   = icode1 0 a-  icode (HsDefn a b) = icode2 1 a b+  icode (HsType a)   = icode1' a+  icode (HsDefn a b) = icode2' a b    value = vcase valu where-    valu [0, a]    = valu1 HsType a-    valu [1, a, b] = valu2 HsDefn a b-    valu _         = malformed+    valu [a]    = valu1 HsType a+    valu [a, b] = valu2 HsDefn a b+    valu _      = malformed +instance EmbPrj JS.Exp where+  icode (JS.Self)         = icode0 0+  icode (JS.Local i)      = icode1 1 i+  icode (JS.Global i)     = icode1 2 i+  icode (JS.Undefined)    = icode0 3+  icode (JS.String s)     = icode1 4 s+  icode (JS.Char c)       = icode1 5 c+  icode (JS.Integer n)    = icode1 6 n+  icode (JS.Double d)     = icode1 7 d+  icode (JS.Lambda n e)   = icode2 8 n e+  icode (JS.Object o)     = icode1 9 o+  icode (JS.Apply e es)   = icode2 10 e es+  icode (JS.Lookup e l)   = icode2 11 e l+  icode (JS.If e f g)     = icode3 12 e f g+  icode (JS.BinOp e op f) = icode3 13 e op f+  icode (JS.PreOp op e)   = icode2 14 op e+  icode (JS.Const i)      = icode1 15 i+  value = vcase valu where valu [0]           = valu0 JS.Self+                           valu [1,  a]       = valu1 JS.Local a+                           valu [2,  a]       = valu1 JS.Global a+                           valu [3]           = valu0 JS.Undefined+                           valu [4,  a]       = valu1 JS.String a+                           valu [5,  a]       = valu1 JS.Char a+                           valu [6,  a]       = valu1 JS.Integer a+                           valu [7,  a]       = valu1 JS.Double a+                           valu [8,  a, b]    = valu2 JS.Lambda a b+                           valu [9,  a]       = valu1 JS.Object a+                           valu [10, a, b]    = valu2 JS.Apply a b+                           valu [11, a, b]    = valu2 JS.Lookup a b+                           valu [12, a, b, c] = valu3 JS.If a b c+                           valu [13, a, b, c] = valu3 JS.BinOp a b c+                           valu [14, a, b]    = valu2 JS.PreOp a b+                           valu [15, a]       = valu1 JS.Const a+                           valu _             = malformed++instance EmbPrj JS.LocalId where+  icode (JS.LocalId l) = icode l+  value n = JS.LocalId `fmap` value n++instance EmbPrj JS.GlobalId where+  icode (JS.GlobalId l) = icode l+  value n = JS.GlobalId `fmap` value n++instance EmbPrj JS.MemberId where+  icode (JS.MemberId l) = icode l+  value n = JS.MemberId `fmap` value n+ instance EmbPrj Polarity where-  icode Covariant     = icode0 0+  icode Covariant     = icode0'   icode Contravariant = icode0 1   icode Invariant     = icode0 2    value = vcase valu where-    valu [0] = valu0 Covariant+    valu []  = valu0 Covariant     valu [1] = valu0 Contravariant     valu [2] = valu0 Invariant     valu _   = malformed  instance EmbPrj Occurrence where-  icode Positive = icode0 0+  icode Positive = icode0'   icode Negative = icode0 1   icode Unused   = icode0 2    value = vcase valu where-    valu [0] = valu0 Positive+    valu []  = valu0 Positive     valu [1] = valu0 Negative     valu [2] = valu0 Unused     valu _   = malformed +instance EmbPrj CompiledRepresentation where+  icode (CompiledRep a b c) = icode3' a b c+  value = vcase valu where valu [a, b, c] = valu3 CompiledRep a b c+                           valu _         = malformed+ instance EmbPrj Defn where-  icode (Axiom       a b)                   = icode2 0 a b-  icode (Function    a b c d e f g h)       = icode8 1 a b c d e f g h-  icode (Datatype    a b c d e f g h i j)   = icode10 2 a b c d e f g h i j+  icode Axiom                               = icode0 0+  icode (Function    a b c d e f g h i)     = icode9 1 a b c d e f g h i+  icode (Datatype    a b c d e f g h i)     = icode9 2 a b c d e f g h i   icode (Record      a b c d e f g h i j k) = icode11 3 a b c d e f g h i j k-  icode (Constructor a b c d e f)           = icode6 4 a b c d e f+  icode (Constructor a b c d e)             = icode5 4 a b c d e   icode (Primitive   a b c d)               = icode4 5 a b c d   value = vcase valu where-    valu [0, a, b]                            = valu2 Axiom       a b-    valu [1, a, b, c, d, e, f, g, h]          = valu8 Function    a b c d e f g h-    valu [2, a, b, c, d, e, f, g, h, i, j]    = valu10 Datatype   a b c d e f g h i j+    valu [0]                                  = valu0 Axiom+    valu [1, a, b, c, d, e, f, g, h, i]       = valu9 Function    a b c d e f g h i+    valu [2, a, b, c, d, e, f, g, h, i]       = valu9 Datatype    a b c d e f g h i     valu [3, a, b, c, d, e, f, g, h, i, j, k] = valu11 Record     a b c d e f g h i j k-    valu [4, a, b, c, d, e, f]                = valu6 Constructor a b c d e f+    valu [4, a, b, c, d, e]                   = valu5 Constructor a b c d e     valu [5, a, b, c, d]                      = valu4 Primitive   a b c d     valu _                                    = malformed @@ -613,13 +735,13 @@     valu _         = malformed  instance EmbPrj CompiledClauses where-  icode Fail       = icode0 0-  icode (Done a b) = icode2 1 a b+  icode Fail       = icode0'+  icode (Done a b) = icode2' a b   icode (Case a b) = icode2 2 a b    value = vcase valu where-    valu [0]       = valu0 Fail-    valu [1, a, b] = valu2 Done a b+    valu []        = valu0 Fail+    valu [a, b]    = valu2 Done a b     valu [2, a, b] = valu2 Case a b     valu _         = malformed @@ -631,26 +753,21 @@                            valu _   = malformed  instance EmbPrj TermHead where-  icode SortHead    = icode0 0+  icode SortHead    = icode0'   icode PiHead      = icode0 1   icode (ConHead a) = icode1 2 a-  value = vcase valu where valu [0]    = return SortHead-                           valu [1]    = return PiHead+  value = vcase valu where valu []     = valu0 SortHead+                           valu [1]    = valu0 PiHead                            valu [2, a] = valu1 ConHead a                            valu _      = malformed  instance EmbPrj Agda.Syntax.Common.IsAbstract where   icode AbstractDef = icode0 0-  icode ConcreteDef = icode0 1+  icode ConcreteDef = icode0'   value = vcase valu where valu [0] = valu0 AbstractDef-                           valu [1] = valu0 ConcreteDef+                           valu []  = valu0 ConcreteDef                            valu _   = malformed -instance EmbPrj I.Clauses where-  icode (Clauses a b) = icode2' a b-  value = vcase valu where valu [a, b] = valu2 Clauses a b-                           valu _      = malformed- instance EmbPrj I.Clause where   icode (Clause a b c d e) = icode5' a b c d e   value = vcase valu where valu [a, b, c, d, e] = valu5 Clause a b c d e@@ -658,42 +775,40 @@  instance EmbPrj I.ClauseBody where   icode (Body   a) = icode1 0 a-  icode (Bind   a) = icode1 1 a-  icode (NoBind a) = icode1 2 a+  icode (Bind   a) = icode1' a   icode NoBody     = icode0'   value = vcase valu where valu [0, a] = valu1 Body   a-                           valu [1, a] = valu1 Bind   a-                           valu [2, a] = valu1 NoBind a+                           valu [a]    = valu1 Bind   a                            valu []     = valu0 NoBody                            valu _      = malformed  instance EmbPrj Delayed where   icode Delayed    = icode0 0-  icode NotDelayed = icode0 1+  icode NotDelayed = icode0'   value = vcase valu where valu [0] = valu0 Delayed-                           valu [1] = valu0 NotDelayed+                           valu []  = valu0 NotDelayed                            valu _   = malformed  instance EmbPrj I.Pattern where-  icode (VarP a    ) = icode1 0 a-  icode (ConP a b c) = icode3 1 a b c+  icode (VarP a    ) = icode1' a+  icode (ConP a b c) = icode3' a b c   icode (LitP a    ) = icode1 2 a   icode (DotP a    ) = icode1 3 a-  value = vcase valu where valu [0, a]       = valu1 VarP a-                           valu [1, a, b, c] = valu3 ConP a b c-                           valu [2, a]       = valu1 LitP a-                           valu [3, a]       = valu1 DotP a-                           valu _            = malformed+  value = vcase valu where valu [a]       = valu1 VarP a+                           valu [a, b, c] = valu3 ConP a b c+                           valu [2, a]    = valu1 LitP a+                           valu [3, a]    = valu1 DotP a+                           valu _         = malformed  instance EmbPrj a => EmbPrj (Builtin a) where-  icode (Prim    a) = icode1 0 a+  icode (Prim    a) = icode1' a   icode (Builtin a) = icode1 1 a-  value = vcase valu where valu [0, a] = valu1 Prim    a+  value = vcase valu where valu [a]    = valu1 Prim    a                            valu [1, a] = valu1 Builtin a                            valu _      = malformed  instance EmbPrj HP.NameKind where-  icode HP.Bound           = icode0 0+  icode HP.Bound           = icode0'   icode (HP.Constructor a) = icode1 1 a   icode HP.Datatype        = icode0 2   icode HP.Field           = icode0 3@@ -704,7 +819,7 @@   icode HP.Record          = icode0 8    value = vcase valu where-    valu [0]     = valu0 HP.Bound+    valu []      = valu0 HP.Bound     valu [1 , a] = valu1 HP.Constructor a     valu [2]     = valu0 HP.Datatype     valu [3]     = valu0 HP.Field@@ -720,7 +835,7 @@   icode HP.Keyword       = icode0 1   icode HP.String        = icode0 2   icode HP.Number        = icode0 3-  icode HP.Symbol        = icode0 4+  icode HP.Symbol        = icode0'   icode HP.PrimitiveType = icode0 5   icode (HP.Name mk b)   = icode2 6 mk b @@ -729,21 +844,21 @@     valu [1]        = valu0 HP.Keyword     valu [2]        = valu0 HP.String     valu [3]        = valu0 HP.Number-    valu [4]        = valu0 HP.Symbol+    valu []         = valu0 HP.Symbol     valu [5]        = valu0 HP.PrimitiveType     valu [6, mk, b] = valu2 HP.Name mk b     valu _          = malformed  instance EmbPrj HP.OtherAspect where   icode HP.Error              = icode0 0-  icode HP.DottedPattern      = icode0 1+  icode HP.DottedPattern      = icode0'   icode HP.UnsolvedMeta       = icode0 2   icode HP.TerminationProblem = icode0 3   icode HP.IncompletePattern  = icode0 4    value = vcase valu where     valu [0] = valu0 HP.Error-    valu [1] = valu0 HP.DottedPattern+    valu []  = valu0 HP.DottedPattern     valu [2] = valu0 HP.UnsolvedMeta     valu [3] = valu0 HP.TerminationProblem     valu [4] = valu0 HP.IncompletePattern@@ -757,7 +872,7 @@     valu _            = malformed  instance EmbPrj Precedence where-  icode TopCtx                 = icode0 0+  icode TopCtx                 = icode0'   icode FunctionSpaceDomainCtx = icode0 1   icode (LeftOperandCtx a)     = icode1 2 a   icode (RightOperandCtx a)    = icode1 3 a@@ -769,7 +884,7 @@   icode DotPatternCtx          = icode0 9   value = vcase valu     where-    valu [0]    = valu0 TopCtx+    valu []     = valu0 TopCtx     valu [1]    = valu0 FunctionSpaceDomainCtx     valu [2, a] = valu1 LeftOperandCtx a     valu [3, a] = valu1 RightOperandCtx a@@ -791,45 +906,77 @@   value = vcase valu where valu [a, b, c, d, e, f, g, h, i] = valu9 Interface a b c d e f g h i                            valu _                           = malformed +-- This is used for the Epic compiler backend+instance EmbPrj Epic.EInterface where+  icode (Epic.EInterface a b c d e f g h) = icode8' a b c d e f g h+  value = vcase valu where+    valu [a, b, c, d, e, f, g, h] = valu8 Epic.EInterface a b c d e f g h+    valu _                        = malformed +instance EmbPrj Epic.InjectiveFun where+  icode (Epic.InjectiveFun a b) = icode2' a b+  value = vcase valu where+     valu [a,b] = valu2 Epic.InjectiveFun a b+     valu _     = malformed -icodeX :: (Dict -> HashTable k Int32) -> (Dict -> IORef Int32) ->+instance EmbPrj Epic.Relevance where+  icode Epic.Irr      = icode0 0+  icode Epic.Rel      = icode0 1+  value = vcase valu where valu [0] = valu0 Epic.Irr+                           valu [1] = valu0 Epic.Rel+                           valu _   = malformed++instance EmbPrj Epic.Forced where+  icode Epic.Forced    = icode0 0+  icode Epic.NotForced = icode0 1+  value = vcase valu where valu [0] = valu0 Epic.Forced+                           valu [1] = valu0 Epic.NotForced+                           valu _   = malformed++instance EmbPrj Epic.Tag where+  icode (Epic.Tag a)     = icode1 0 a+  icode (Epic.PrimTag a) = icode1 1 a+  value = vcase valu+    where+    valu [0, a] = valu1 Epic.Tag a+    valu [1, a] = valu1 Epic.PrimTag a+    valu _      = malformed++{-# SPECIALIZE icodeX :: (Dict -> HashTable [Int32] Int32) ->+                         (Dict -> IORef Int32) -> [Int32] -> S Int32 #-}+icodeX :: (Eq k, Hashable k) =>+          (Dict -> HashTable k Int32) -> (Dict -> IORef Int32) ->           k -> S Int32 icodeX dict counter key = do-  d     <- asks dict-  c     <- asks counter-  fresh <- lift $ readIORef c-  mi    <- lift $ H.lookup d key+  d <- asks dict+  c <- asks counter+  liftIO $ do+  mi    <- H.lookup d key   case mi of     Just i  -> return i-    Nothing -> do lift $ H.insert d key fresh-                  lift $ writeIORef c (fresh + 1)-                  return fresh+    Nothing -> do+      fresh <- readIORef c+      H.insert d key fresh+      writeIORef c $! fresh + 1+      return fresh +icodeN :: [Int32] -> S Int32 icodeN = icodeX nodeD nodeC +{-# INLINE vcase #-} vcase :: forall a . EmbPrj a => (Node -> R a) -> Int32 -> R a-vcase valu ix = do+vcase valu = \ix -> do     memo <- gets nodeMemo     (aTyp, maybeU) <- liftIO $ do-      aTyp   <- typeRepKey $ typeOf (undefined :: a)-      -- The following tests try to ensure that conversion to Int32-      -- won't truncate the key. The tests can perhaps give erroneous-      -- results if Int is "larger" than Int64.-      when ((convert aTyp :: Int64) > convert (maxBound :: Int32)) __IMPOSSIBLE__-      when ((convert aTyp :: Int64) < convert (minBound :: Int32)) __IMPOSSIBLE__-      let aTyp' = convert aTyp :: Int32-      maybeU <- H.lookup memo (ix, aTyp')-      return (aTyp', maybeU)+      let aTyp = TypeRep' $ typeOf (undefined :: a)+      maybeU <- H.lookup memo (ix, aTyp)+      return (aTyp, maybeU)     case maybeU of       Just (U u) -> maybe malformed return (cast u)       Nothing    -> do           v <- valu . (! ix) =<< gets nodeE           liftIO $ H.insert memo (ix, aTyp) (U v)           return v-    where-    convert :: (Integral b, Integral c) => b -> c-    convert = fromInteger . toInteger  icode0  tag                       = icodeN [tag] icode1  tag a                     = icodeN . (tag :) =<< sequence [icode a]@@ -843,6 +990,7 @@ icode9  tag a b c d e f g h i     = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i] icode10 tag a b c d e f g h i j   = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j] icode11 tag a b c d e f g h i j k = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]+icode12 tag a b c d e f g h i j k l = icodeN . (tag :) =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l]  icode0'                        = icodeN [] icode1'  a                     = icodeN =<< sequence [icode a]@@ -856,19 +1004,21 @@ icode9'  a b c d e f g h i     = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i] icode10' a b c d e f g h i j   = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j] icode11' a b c d e f g h i j k = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k]+icode12' a b c d e f g h i j k l = icodeN =<< sequence [icode a, icode b, icode c, icode d, icode e, icode f, icode g, icode h, icode i, icode j, icode k, icode l] -valu0  z                       = return z-valu1  z a                     = valu0 z                      `ap` value a-valu2  z a b                   = valu1 z a                    `ap` value b-valu3  z a b c                 = valu2 z a b                  `ap` value c-valu4  z a b c d               = valu3 z a b c                `ap` value d-valu5  z a b c d e             = valu4 z a b c d              `ap` value e-valu6  z a b c d e f           = valu5 z a b c d e            `ap` value f-valu7  z a b c d e f g         = valu6 z a b c d e f          `ap` value g-valu8  z a b c d e f g h       = valu7 z a b c d e f g        `ap` value h-valu9  z a b c d e f g h i     = valu8 z a b c d e f g h      `ap` value i-valu10 z a b c d e f g h i j   = valu9 z a b c d e f g h i    `ap` value j-valu11 z a b c d e f g h i j k = valu10 z a b c d e f g h i j `ap` value k+valu0  z                         = return z+valu1  z a                       = valu0 z                        `ap` value a+valu2  z a b                     = valu1 z a                      `ap` value b+valu3  z a b c                   = valu2 z a b                    `ap` value c+valu4  z a b c d                 = valu3 z a b c                  `ap` value d+valu5  z a b c d e               = valu4 z a b c d                `ap` value e+valu6  z a b c d e f             = valu5 z a b c d e              `ap` value f+valu7  z a b c d e f g           = valu6 z a b c d e f            `ap` value g+valu8  z a b c d e f g h         = valu7 z a b c d e f g          `ap` value h+valu9  z a b c d e f g h i       = valu8 z a b c d e f g h        `ap` value i+valu10 z a b c d e f g h i j     = valu9 z a b c d e f g h i      `ap` value j+valu11 z a b c d e f g h i j k   = valu10 z a b c d e f g h i j   `ap` value k+valu12 z a b c d e f g h i j k l = valu11 z a b c d e f g h i j k `ap` value l  -- | Creates an empty dictionary. @@ -878,27 +1028,12 @@              -- later encountered.           -> IO Dict emptyDict fileMod = Dict-  <$> H.new (==) hashNode-  <*> H.new (==) H.hashString-  <*> H.new (==) (H.hashInt . fromIntegral)-  <*> H.new (==) (H.hashInt . floor)+  <$> H.new+  <*> H.new+  <*> H.new+  <*> H.new   <*> newIORef 0   <*> newIORef 0   <*> newIORef 0   <*> newIORef 0   <*> return fileMod--hashNode :: Node -> Int32-hashNode is = List.foldl' f golden is-   where f m c = fromIntegral c * magic + hashInt32 m-         magic  = 0xdeadbeef-         golden :: Int32-         golden = 1013904242-         hashInt32 x = mulHi x golden + x-         mulHi :: Int32 -> Int32 -> Int32-         mulHi a b = fromIntegral (r `shiftR` 32)-             where r :: Int64-                   r = fromIntegral a * fromIntegral b--hashInt2 :: (Int32, Int32) -> Int32-hashInt2 (ix, rep) = hashNode [ix , rep]
src/full/Agda/TypeChecking/SizedTypes.hs view
@@ -17,6 +17,7 @@ import Agda.TypeChecking.Substitute import Agda.TypeChecking.Telescope import {-# SOURCE #-} Agda.TypeChecking.Conversion+import Agda.TypeChecking.Constraints import qualified Agda.Utils.Warshall as W import Agda.Utils.List import Agda.Utils.Monad@@ -26,7 +27,7 @@ #include "../undefined.h"  -- | Compare two sizes. Only with --sized-types.-compareSizes :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints+compareSizes :: Comparison -> Term -> Term -> TCM () compareSizes cmp u v = do   reportSDoc "tc.conv.size" 10 $ vcat     [ text "Comparing sizes"@@ -44,18 +45,18 @@   s2   <- sizeView v   size <- sizeType   case (cmp, s1, s2) of-    (CmpLeq, _,         SizeInf)   -> return []+    (CmpLeq, _,         SizeInf)   -> return ()     (CmpLeq, SizeInf,   _)         -> compareSizes CmpEq u v     (CmpEq,  SizeSuc u, SizeInf)   -> compareSizes CmpEq u v     (_,      SizeInf,   SizeSuc v) -> compareSizes CmpEq u v     (_,      SizeSuc u, SizeSuc v) -> compareSizes cmp u v     (CmpLeq, _,         _)         ->-      ifM (trivial u v) (return []) $-        buildConstraint $ ValueCmp CmpLeq size u v-    _                              -> compareAtom cmp size u v+      ifM (trivial u v) (return ()) $+        addConstraint $ ValueCmp CmpLeq size u v+    _ -> compareAtom cmp size u v -trivial :: MonadTCM tcm => Term -> Term -> tcm Bool-trivial u v = liftTCM $ do+trivial :: Term -> Term -> TCM Bool+trivial u v = do     a <- sizeExpr u     b <- sizeExpr v     reportSDoc "tc.conv.size" 15 $@@ -68,19 +69,17 @@   `catchError` \_ -> return False  -- | Find the size constraints.-getSizeConstraints :: MonadTCM tcm => tcm [SizeConstraint]+getSizeConstraints :: TCM [SizeConstraint] getSizeConstraints = do-  cs   <- getConstraints+  cs   <- getAllConstraints   size <- sizeType   let sizeConstraints cl@(Closure{ clValue = ValueCmp CmpLeq s _ _ })         | s == size = [cl]-      sizeConstraints cl@(Closure{ clValue = Guarded _ cs }) =-        concatMap sizeConstraints cs       sizeConstraints _ = []-  scs <- mapM computeSizeConstraint $ concatMap sizeConstraints cs+  scs <- mapM computeSizeConstraint $ concatMap (sizeConstraints . theConstraint) cs   return [ c | Just c <- scs ] -getSizeMetas :: MonadTCM tcm => tcm [(MetaId, Int)]+getSizeMetas :: TCM [(MetaId, Int)] getSizeMetas = do   ms <- getOpenMetas   sz <- sizeType@@ -111,8 +110,8 @@     | n > 0     = show a ++ " =< " ++ show b ++ " + " ++ show n     | otherwise = show a ++ " + " ++ show (-n) ++ " =< " ++ show b -computeSizeConstraint :: MonadTCM tcm => ConstraintClosure -> tcm (Maybe SizeConstraint)-computeSizeConstraint cl = liftTCM $+computeSizeConstraint :: Closure Constraint -> TCM (Maybe SizeConstraint)+computeSizeConstraint cl =   enterClosure cl $ \c ->     case c of       ValueCmp CmpLeq _ u v -> do@@ -125,7 +124,7 @@       _ -> __IMPOSSIBLE__  -- | Throws a 'patternViolation' if the term isn't a proper size expression.-sizeExpr :: MonadTCM tcm => Term -> tcm (SizeExpr, Int)+sizeExpr :: Term -> TCM (SizeExpr, Int) sizeExpr u = do   u <- reduce u -- Andreas, 2009-02-09.                 -- This is necessary to surface the solutions of metavariables.@@ -154,15 +153,15 @@     flex (Rigid _)       = []     flex (SizeMeta m xs) = [(m, xs)] -haveSizedTypes :: MonadTCM tcm => tcm Bool-haveSizedTypes = liftTCM $ do+haveSizedTypes :: TCM Bool+haveSizedTypes = do     Def _ [] <- primSize     Def _ [] <- primSizeInf     Def _ [] <- primSizeSuc     optSizedTypes <$> pragmaOptions   `catchError` \_ -> return False -solveSizeConstraints :: MonadTCM tcm => tcm ()+solveSizeConstraints :: TCM () solveSizeConstraints = whenM haveSizedTypes $ do   cs <- getSizeConstraints   ms <- getSizeMetas@@ -194,9 +193,7 @@   verboseS "tc.size.solve" 20 $ do     let meta (m, _) = do           j <- mvJudgement <$> lookupMeta m-          reportSDoc "" 0 $ case j of-            HasType _ t -> text (show m) <+> text ":" <+> prettyTCM t-            IsSort _    -> text (show m) <+> text "sort"+          reportSDoc "" 0 $ prettyTCM j     mapM_ meta metas    case W.solve $ map mkFlex metas ++ map mkConstr cs of@@ -232,7 +229,7 @@               , nest 2 $ prettyTCM v               ] -            m =: v+            assignTerm m v        mapM_ inst $ Map.toList sol 
src/full/Agda/TypeChecking/Substitute.hs view
@@ -1,9 +1,15 @@-{-# LANGUAGE CPP, TypeSynonymInstances #-}+{-# LANGUAGE CPP, TypeSynonymInstances, FlexibleInstances,+    DeriveDataTypeable, DeriveFunctor, StandaloneDeriving #-} module Agda.TypeChecking.Substitute where  import Control.Monad.Identity import Control.Monad.Reader+import Control.Arrow ((***))++import Data.Generics (Typeable, Data) import Data.List hiding (sort)+import qualified Data.List as List+import Data.Function import Data.Map (Map) import qualified Data.Map as Map import qualified Data.Set as Set@@ -36,11 +42,12 @@             Con c args'   -> Con c (args' ++ args)             Lam _ u       -> absApp u (unArg a) `apply` args0             MetaV x args' -> MetaV x (args' ++ args)-            Lit l         -> __IMPOSSIBLE__+            Lit{}         -> __IMPOSSIBLE__+            Level{}       -> __IMPOSSIBLE__             Pi _ _        -> __IMPOSSIBLE__-            Fun _ _       -> __IMPOSSIBLE__             Sort _        -> __IMPOSSIBLE__-            DontCare      -> __IMPOSSIBLE__+            DontCare mv   -> DontCare $ mv `apply` args  -- Andreas, 2011-10-02+              -- need to go under DontCare, since "with" might resurrect irrelevant term  instance Apply Type where   apply = piApply@@ -55,23 +62,41 @@   apply (ExtendTel _ tel) (t : ts) = absApp tel (unArg t) `apply` ts  instance Apply Definition where-    apply (Defn rel x t df m d) args = Defn rel x (piApply t args) df m (apply d args)+    apply (Defn rel x t df m c d) args = Defn rel x (piApply t args) df m c (apply d args)  instance Apply Defn where+  apply d [] = d   apply d args = case d of     Axiom{} -> d     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = mn } ->+            , funProjection = Nothing, funArgOccurrences = occ } ->       d { funClauses    = apply cs args         , funCompiled   = apply cc args         , funInv        = apply inv args-        , funProjection = fmap (nonNeg . \ n -> n - size args) mn-        } where nonNeg n = if n >= 0 then n else __IMPOSSIBLE__-    Datatype{ dataPars = np, dataClause = cl } ->-      d { dataPars = np - size args, dataClause = apply cl args }-    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel } ->+        , funArgOccurrences = drop (length args) occ+        }+    Function{ funClauses = cs, funCompiled = cc, funInv = inv+            , funProjection = Just (r, n), funArgOccurrences = occ }+      | m < n  -> d { funProjection = Just (r, n - m) }+      | otherwise ->+        d { funClauses        = apply cs args'+          , funCompiled       = apply cc args'+          , funInv            = apply inv args'+          , funProjection     = Just (r, 0)+          , funArgOccurrences = drop 1 occ+          }+      where args' = [last args]+            m = size args+    Datatype{ dataPars = np, dataClause = cl+            , dataArgOccurrences = occ } ->+      d { dataPars = np - size args, dataClause = apply cl args+        , dataArgOccurrences = drop (length args) occ+        }+    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel+          , recArgOccurrences = occ } ->       d { recPars = np - size args, recConType = apply t args         , recClause = apply cl args, recTel = apply tel args+        , recArgOccurrences = drop (length args) occ         }     Constructor{ conPars = np } ->       d { conPars = np - size args }@@ -81,10 +106,6 @@ instance Apply PrimFun where     apply (PrimFun x ar def) args   = PrimFun x (ar - size args) $ \vs -> def (args ++ vs) -instance Apply Clauses where-    apply (Clauses c tc) args =-      Clauses (apply c args) (apply tc args)- instance Apply Clause where     apply (Clause r tel perm ps b) args =       Clause r (apply tel args) (apply perm args)@@ -93,10 +114,11 @@ instance Apply CompiledClauses where   apply cc args = case cc of     Fail     -> Fail-    Done m t-      | m >= len  -> Done (m - len) (substs ([ Var (fromIntegral i) []-                                             | i <- [0..m - len - 1]] ++-                                             map unArg args) t)+    Done hs t+      | length hs >= len -> Done (drop len hs)+                                 (substs ([ Var (fromIntegral i) []+                                          | i <- [0..length hs - len - 1]] +++                                          map unArg args) t)       | otherwise -> __IMPOSSIBLE__     Case n bs       | n >= len  -> Case (n - len) (apply bs args)@@ -113,14 +135,17 @@   apply (Inverse inv) args = Inverse $ apply inv args  instance Apply ClauseBody where-    apply  b               []       = b-    apply (Bind (Abs _ b)) (a:args) = subst (unArg a) b `apply` args-    apply (NoBind b)       (_:args) = b `apply` args-    apply (Body _)         (_:_)    = __IMPOSSIBLE__-    apply  NoBody           _       = NoBody+    apply  b                 []       = b+    apply (Bind (Abs   _ b)) (a:args) = subst (unArg a) b `apply` args+    apply (Bind (NoAbs _ b)) (_:args) = b `apply` args+    apply (Body _)           (_:_)    = __IMPOSSIBLE__+    apply  NoBody             _       = NoBody  instance Apply DisplayTerm where   apply (DTerm v)          args = DTerm $ apply v args+  apply (DDot v)           args = DDot  $ apply v args+  apply (DCon c vs)        args = DCon c $ vs ++ map (fmap DTerm) args+  apply (DDef c vs)        args = DDef c $ vs ++ map (fmap DTerm) args   apply (DWithApp v args') args = DWithApp v $ args' ++ args  instance Apply t => Apply [t] where@@ -157,7 +182,6 @@ piApply :: Type -> Args -> Type piApply t []                      = t piApply (El _ (Pi  _ b)) (a:args) = absApp b (unArg a) `piApply` args-piApply (El _ (Fun _ b)) (_:args) = b `piApply` args piApply _ _                       = __IMPOSSIBLE__  -- | @(abstract args v) args --> v[args]@.@@ -179,23 +203,29 @@   abstract (ExtendTel arg tel') tel = ExtendTel arg $ fmap (`abstract` tel) tel'  instance Abstract Definition where-    abstract tel (Defn rel x t df m d) = Defn rel x (abstract tel t) df m (abstract tel d)+    abstract tel (Defn rel x t df m c d) = Defn rel x (abstract tel t) df m c (abstract tel d)  instance Abstract Defn where   abstract tel d = case d of     Axiom{} -> d     Function{ funClauses = cs, funCompiled = cc, funInv = inv-            , funProjection = mn } ->+            , funProjection = Nothing, funArgOccurrences = occ } ->       d { funClauses = abstract tel cs, funCompiled = abstract tel cc         , funInv = abstract tel inv-        , funProjection = fmap ((+) (size tel)) mn-          -- index of record arg shifts back by number of new args+        , funArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence         }-    Datatype{ dataPars = np, dataClause = cl } ->-      d { dataPars = np + size tel, dataClause = abstract tel cl }-    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel' } ->+    Function{ funClauses = cs, funCompiled = cc, funInv = inv+            , funProjection = Just (r, n), funArgOccurrences = occ } ->+      d { funProjection = Just (r, n + size tel) }+    Datatype{ dataPars = np, dataClause = cl, dataArgOccurrences = occ } ->+      d { dataPars = np + size tel, dataClause = abstract tel cl+        , dataArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence+        }+    Record{ recPars = np, recConType = t, recClause = cl, recTel = tel'+          , recArgOccurrences = occ } ->       d { recPars = np + size tel, recConType = abstract tel t         , recClause = abstract tel cl, recTel = abstract tel tel'+        , recArgOccurrences = replicate (size tel) Negative ++ occ -- TODO: check occurrence         }     Constructor{ conPars = np } ->       d { conPars = np + size tel }@@ -206,10 +236,6 @@     abstract tel (PrimFun x ar def) = PrimFun x (ar + n) $ \ts -> def $ genericDrop n ts         where n = size tel -instance Abstract Clauses where-  abstract tel (Clauses c tc) =-    Clauses (abstract tel c) (abstract tel tc)- instance Abstract Clause where   abstract tel (Clause r tel' perm ps b) =     Clause r (abstract tel tel') (abstract tel perm)@@ -217,7 +243,7 @@  instance Abstract CompiledClauses where   abstract tel Fail = Fail-  abstract tel (Done m t) = Done (m + fromIntegral (size tel)) t+  abstract tel (Done xs t) = Done (map (fmap fst) (telToList tel) ++ xs) t   abstract tel (Case n bs) =     Case (n + fromIntegral (size tel)) (abstract tel bs) @@ -226,7 +252,7 @@     Branches (abstract tel cs) (abstract tel ls) (abstract tel m)  telVars EmptyTel                    = []-telVars (ExtendTel arg (Abs x tel)) = fmap (const $ VarP x) arg : telVars tel+telVars (ExtendTel arg tel) = fmap (const $ VarP $ absName tel) arg : telVars (unAbs tel)  instance Abstract FunctionInverse where   abstract tel NotInjective  = NotInjective@@ -271,16 +297,16 @@ instance Subst Term where     substs us t =         case t of-            Var i vs   -> (us !!! i) `apply` substs us vs-            Lam h m    -> Lam h $ substs us m-            Def c vs   -> Def c $ substs us vs-            Con c vs   -> Con c $ substs us vs-            MetaV x vs -> MetaV x $ substs us vs-            Lit l      -> Lit l-            Pi a b     -> uncurry Pi $ substs us (a,b)-            Fun a b    -> uncurry Fun $ substs us (a,b)-            Sort s     -> Sort $ substs us s-            DontCare   -> DontCare+            Var i vs    -> (us !!! i) `apply` substs us vs+            Lam h m     -> Lam h $ substs us m+            Def c vs    -> Def c $ substs us vs+            Con c vs    -> Con c $ substs us vs+            MetaV x vs  -> MetaV x $ substs us vs+            Lit l       -> Lit l+            Level l     -> levelTm $ substs us l+            Pi a b      -> uncurry Pi $ substs us (a,b)+            Sort s      -> sortTm $ substs us s+            DontCare mv -> DontCare $ substs us mv         where             []     !!! n = __IMPOSSIBLE__             (x:xs) !!! 0 = x@@ -295,11 +321,11 @@             Def c vs   -> Def c $ substUnder n u vs             Con c vs   -> Con c $ substUnder n u vs             MetaV x vs -> MetaV x $ substUnder n u vs+            Level l    -> levelTm $ substUnder n u l             Lit l      -> Lit l             Pi a b     -> uncurry Pi $ substUnder n u (a,b)-            Fun a b    -> uncurry Fun $ substUnder n u (a,b)-            Sort s     -> Sort $ substUnder n u s-            DontCare   -> DontCare+            Sort s     -> sortTm $ substUnder n u s+            DontCare mv -> DontCare $ substUnder n u mv  instance Subst Type where     substs us (El s t) = substs us s `El` substs us t@@ -307,25 +333,39 @@  instance Subst Sort where     substs us s = case s of-      Type n     -> Type $ sub n+      Type n     -> levelSort $ sub n       Prop       -> Prop-      Suc s      -> Suc $ sub s-      Lub s1 s2  -> Lub (sub s1) (sub s2)-      MetaS m as -> MetaS m (sub as)       Inf        -> Inf       DLub s1 s2 -> DLub (sub s1) (sub s2)       where sub x = substs us x      substUnder n u s = case s of-      Type n     -> Type $ sub n+      Type n     -> levelSort $ sub n       Prop       -> Prop-      Suc s      -> Suc $ sub s-      Lub s1 s2  -> Lub (sub s1) (sub s2)-      MetaS m as -> MetaS m (sub as)       Inf        -> Inf       DLub s1 s2 -> DLub (sub s1) (sub s2)       where sub x = substUnder n u x +instance Subst Level where+  substs us (Max as) = Max $ substs us as+  substUnder n u (Max as) = Max $ substUnder n u as++instance Subst PlusLevel where+  substs us l@ClosedLevel{} = l+  substs us (Plus n l) = Plus n $ substs us l+  substUnder n u l@ClosedLevel{} = l+  substUnder n u (Plus m l) = Plus m $ substUnder n u l++instance Subst LevelAtom where+  substs us      (MetaLevel m vs)   = MetaLevel m    $ substs us vs+  substs us      (BlockedLevel m v) = BlockedLevel m $ substs us v+  substs us      (NeutralLevel v)   = UnreducedLevel $ substs us v+  substs us      (UnreducedLevel v) = UnreducedLevel $ substs us v+  substUnder n u (MetaLevel m vs)   = MetaLevel m    $ substUnder n u vs+  substUnder n u (BlockedLevel m v) = BlockedLevel m $ substUnder n u v+  substUnder n u (NeutralLevel v)   = UnreducedLevel $ substUnder n u v+  substUnder n u (UnreducedLevel v) = UnreducedLevel $ substUnder n u v+ instance Subst Pattern where   substs us p = case p of     VarP s       -> VarP s@@ -344,8 +384,14 @@  instance Subst DisplayTerm where   substs us      (DTerm v)        = DTerm $ substs us v+  substs us      (DDot v)         = DDot  $ substs us v+  substs us      (DCon c vs)      = DCon c $ substs us vs+  substs us      (DDef c vs)      = DDef c $ substs us vs   substs us      (DWithApp vs ws) = uncurry DWithApp $ substs us (vs, ws)   substUnder n u (DTerm v)        = DTerm $ substUnder n u v+  substUnder n u (DDot  v)        = DDot  $ substUnder n u v+  substUnder n u (DCon c vs)      = DCon c $ substUnder n u vs+  substUnder n u (DDef c vs)      = DDef c $ substUnder n u vs   substUnder n u (DWithApp vs ws) = uncurry DWithApp $ substUnder n u (vs, ws)  instance Subst a => Subst (Tele a) where@@ -355,8 +401,10 @@   substUnder n u (ExtendTel t tel) = uncurry ExtendTel $ substUnder n u (t, tel)  instance Subst a => Subst (Abs a) where-    substs us      (Abs x t) = Abs x $ substs (Var 0 [] : raise 1 us) t-    substUnder n u (Abs x t) = Abs x $ substUnder (n + 1) u t+    substs us      (Abs   x t) = Abs   x $ substs (Var 0 [] : raise 1 us) t+    substs us      (NoAbs x t) = NoAbs x $ substs us t+    substUnder n u (Abs   x t) = Abs   x $ substUnder (n + 1) u t+    substUnder n u (NoAbs x t) = NoAbs x $ substUnder n u t  instance Subst a => Subst (Arg a) where     substs us      = fmap (substs us)@@ -377,21 +425,20 @@ instance Subst ClauseBody where     substs us (Body t)        = Body $ substs us t     substs us (Bind b)        = Bind $ substs us b-    substs us (NoBind b)      = NoBind $ substs us b     substs _   NoBody         = NoBody     substUnder n u (Body t)   = Body $ substUnder n u t     substUnder n u (Bind b)   = Bind $ substUnder n u b-    substUnder n u (NoBind b) = NoBind $ substUnder n u b     substUnder _ _   NoBody   = NoBody --- | Instantiate an abstraction-absApp :: Subst t => Abs t -> Term -> t-absApp (Abs _ v) u = subst u v- -- | Add @k@ to index of each open variable in @x@. class Raise t where     raiseFrom :: Nat -> Nat -> t -> t+    renameFrom :: Nat -> (Nat -> Nat) -> t -> t +instance Raise () where+  raiseFrom  _ _ _ = ()+  renameFrom _ _ _ = ()+ instance Raise Term where     raiseFrom m k v =         case v of@@ -402,28 +449,120 @@             Def c vs        -> Def c $ rf vs             Con c vs        -> Con c $ rf vs             MetaV x vs      -> MetaV x $ rf vs+            Level l         -> Level $ rf l             Lit l           -> Lit l             Pi a b          -> uncurry Pi $ rf (a,b)-            Fun a b         -> uncurry Fun $ rf (a,b)             Sort s          -> Sort $ rf s-            DontCare        -> DontCare+            DontCare mv     -> DontCare $ rf mv         where             rf x = raiseFrom m k x +    renameFrom m k v =+        case v of+            Var i vs+                | i < m     -> Var i $ rf vs+                | otherwise -> Var (k (i - m) + m) $ rf vs+            Lam h m         -> Lam h $ rf m+            Def c vs        -> Def c $ rf vs+            Con c vs        -> Con c $ rf vs+            MetaV x vs      -> MetaV x $ rf vs+            Level l         -> Level $ rf l+            Lit l           -> Lit l+            Pi a b          -> uncurry Pi $ rf (a,b)+            Sort s          -> Sort $ rf s+            DontCare mv     -> DontCare $ rf mv+        where+            rf x = renameFrom m k x+ instance Raise Type where     raiseFrom m k (El s t) = raiseFrom m k s `El` raiseFrom m k t+    renameFrom m k (El s t) = renameFrom m k s `El` renameFrom m k t  instance Raise Sort where     raiseFrom m k s = case s of       Type n     -> Type $ rf n       Prop       -> Prop-      Suc s      -> Suc $ rf s-      Lub s1 s2  -> Lub (rf s1) (rf s2)-      MetaS m as -> MetaS m (rf as)       Inf        -> Inf       DLub s1 s2 -> DLub (rf s1) (rf s2)       where rf x = raiseFrom m k x +    renameFrom m k s = case s of+      Type n     -> Type $ rf n+      Prop       -> Prop+      Inf        -> Inf+      DLub s1 s2 -> DLub (rf s1) (rf s2)+      where rf x = renameFrom m k x++instance Raise Level where+  raiseFrom m k (Max as) = Max $ raiseFrom m k as+  renameFrom m k (Max as) = Max $ renameFrom m k as++instance Raise PlusLevel where+  raiseFrom m k l@ClosedLevel{} = l+  raiseFrom m k (Plus n l) = Plus n $ raiseFrom m k l+  renameFrom m k l@ClosedLevel{} = l+  renameFrom m k (Plus n l) = Plus n $ renameFrom m k l++instance Raise LevelAtom where+  raiseFrom m k l = case l of+    MetaLevel n vs   -> MetaLevel n $ raiseFrom m k vs+    NeutralLevel v   -> NeutralLevel $ raiseFrom m k v+    BlockedLevel n v -> BlockedLevel n $ raiseFrom m k v+    UnreducedLevel v -> UnreducedLevel $ raiseFrom m k v+  renameFrom m k l = case l of+    MetaLevel n vs   -> MetaLevel n $ renameFrom m k vs+    NeutralLevel v   -> NeutralLevel $ renameFrom m k v+    BlockedLevel n v -> BlockedLevel n $ renameFrom m k v+    UnreducedLevel v -> UnreducedLevel $ renameFrom m k v++instance Raise Constraint where+  raiseFrom m k c = case c of+    ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)+    ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)+    TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)+    TelCmp a b cmp tel1 tel2 -> TelCmp (rf a) (rf b) cmp (rf tel1) (rf tel2)+    SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)+    LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)+    Guarded c cs             -> Guarded (rf c) cs+    IsEmpty a                -> IsEmpty (rf a)+    FindInScope{}            -> c+    UnBlock{}                -> c+    where+      rf x = raiseFrom m k x+  renameFrom m k c = case c of+    ValueCmp cmp a u v       -> ValueCmp cmp (rf a) (rf u) (rf v)+    ElimCmp ps a v e1 e2     -> ElimCmp ps (rf a) (rf v) (rf e1) (rf e2)+    TypeCmp cmp a b          -> TypeCmp cmp (rf a) (rf b)+    TelCmp a b cmp tel1 tel2 -> TelCmp (rf a) (rf b) cmp (rf tel1) (rf tel2)+    SortCmp cmp s1 s2        -> SortCmp cmp (rf s1) (rf s2)+    LevelCmp cmp l1 l2       -> LevelCmp cmp (rf l1) (rf l2)+    Guarded c cs             -> Guarded (rf c) cs+    IsEmpty a                -> IsEmpty (rf a)+    FindInScope{}            -> c+    UnBlock{}                -> c+    where+      rf x = renameFrom m k x++instance Raise Elim where+  raiseFrom m k e = case e of+    Apply v -> Apply (raiseFrom m k v)+    Proj{}  -> e+  renameFrom m k e = case e of+    Apply v -> Apply (renameFrom m k v)+    Proj{}  -> e++instance Raise ClauseBody where+  raiseFrom m k b = case b of+    Body v   -> Body $ rf v+    NoBody   -> NoBody+    Bind b   -> Bind $ rf b+    where rf x = raiseFrom m k x+  renameFrom m k b = case b of+    Body v   -> Body $ rf v+    NoBody   -> NoBody+    Bind b   -> Bind $ rf b+    where rf x = renameFrom m k x+ -- Andreas, 2010-09-09 raise dot patterns and type info embedded in a pattern instance Raise Pattern where     raiseFrom m k p = case p of@@ -431,66 +570,101 @@       ConP c mt ps -> ConP c (raiseFrom m k mt) (raiseFrom m k ps)       VarP x -> p       LitP l -> p+    renameFrom m k p = case p of+      DotP t -> DotP $ renameFrom m k t+      ConP c mt ps -> ConP c (renameFrom m k mt) (renameFrom m k ps)+      VarP x -> p+      LitP l -> p  instance Raise a => Raise (Tele a) where     raiseFrom m k EmptyTel          = EmptyTel     raiseFrom m k (ExtendTel a tel) = uncurry ExtendTel $ raiseFrom m k (a, tel)+    renameFrom m k EmptyTel          = EmptyTel+    renameFrom m k (ExtendTel a tel) = uncurry ExtendTel $ renameFrom m k (a, tel)  instance Raise DisplayForm where   raiseFrom m k (Display n ps v) = Display n (raiseFrom (m + 1) k ps)                                              (raiseFrom (m + n) k v)+  renameFrom m k (Display n ps v) = Display n (renameFrom (m + 1) k ps)+                                             (renameFrom (m + n) k v)  instance Raise DisplayTerm where   raiseFrom m k (DWithApp xs ys) = uncurry DWithApp $ raiseFrom m k (xs, ys)   raiseFrom m k (DTerm v)        = DTerm $ raiseFrom m k v+  raiseFrom m k (DDot  v)        = DDot  $ raiseFrom m k v+  raiseFrom m k (DCon c vs)      = DCon c $ raiseFrom m k vs+  raiseFrom m k (DDef c vs)      = DDef c $ raiseFrom m k vs+  renameFrom m k (DWithApp xs ys) = uncurry DWithApp $ renameFrom m k (xs, ys)+  renameFrom m k (DTerm v)        = DTerm $ renameFrom m k v+  renameFrom m k (DDot  v)        = DDot  $ renameFrom m k v+  renameFrom m k (DCon c vs)      = DCon c $ renameFrom m k vs+  renameFrom m k (DDef c vs)      = DDef c $ renameFrom m k vs  instance Raise t => Raise (Abs t) where-    raiseFrom m k = fmap (raiseFrom (m + 1) k)+    raiseFrom m k (Abs x v)   = Abs x $ raiseFrom (m + 1) k v+    raiseFrom m k (NoAbs x v) = NoAbs x $ raiseFrom m k v+    renameFrom m k (Abs x v)   = Abs x $ renameFrom (m + 1) k v+    renameFrom m k (NoAbs x v) = NoAbs x $ renameFrom m k v  instance Raise t => Raise (Arg t) where     raiseFrom m k = fmap (raiseFrom m k)+    renameFrom m k = fmap (renameFrom m k)  instance Raise t => Raise (Blocked t) where     raiseFrom m k = fmap (raiseFrom m k)+    renameFrom m k = fmap (renameFrom m k)  instance Raise t => Raise [t] where     raiseFrom m k = fmap (raiseFrom m k)+    renameFrom m k = fmap (renameFrom m k)  instance Raise t => Raise (Maybe t) where     raiseFrom m k = fmap (raiseFrom m k)+    renameFrom m k = fmap (renameFrom m k)  instance Raise v => Raise (Map k v) where     raiseFrom m k = fmap (raiseFrom m k)+    renameFrom m k = fmap (renameFrom m k)  instance (Raise a, Raise b) => Raise (a,b) where     raiseFrom m k (x,y) = (raiseFrom m k x, raiseFrom m k y)+    renameFrom m k (x,y) = (renameFrom m k x, renameFrom m k y)  raise :: Raise t => Nat -> t -> t raise = raiseFrom 0 -data TelView = TelV Telescope Type+rename :: Raise t => (Nat -> Nat) -> t -> t+rename = renameFrom 0 +data TelV a = TelV (Tele (Arg a)) a+  deriving (Typeable, Data, Show, Eq, Ord, Functor)++type TelView = TelV Type+-- data TelView = TelV Telescope Type++telFromList :: [Arg (String, Type)] -> Telescope+telFromList = foldr (\(Arg h r (x, a)) -> ExtendTel (Arg h r a) . Abs x) EmptyTel++telToList :: Telescope -> [Arg (String, Type)]+telToList EmptyTel = []+telToList (ExtendTel arg tel) = fmap ((,) $ absName tel) arg : telToList (absBody tel)+ telView' :: Type -> TelView telView' t = case unEl t of-  Pi a (Abs x b)  -> absV a x $ telView' b-  Fun a b         -> absV a "_" $ telView' (raise 1 b)-  _               -> TelV EmptyTel t+  Pi a b  -> absV a (absName b) $ telView' (absBody b)+  _       -> TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t  telePi :: Telescope -> Type -> Type telePi  EmptyTel         t = t-telePi (ExtendTel u tel) t = el $ fn u b+telePi (ExtendTel u tel) t = el $ Pi u (reAbs b)   where     el = El (dLub s1 s2)     b = fmap (flip telePi t) tel     s1 = getSort $ unArg u     s2 = fmap getSort b -    fn a b-      | 0 `freeIn` absBody b = Pi a b-      | otherwise            = Fun a $ absApp b __IMPOSSIBLE__- -- | Everything will be a pi. telePi_ :: Telescope -> Type -> Type telePi_  EmptyTel        t = t@@ -501,12 +675,174 @@     s1 = getSort $ unArg u     s2 = fmap getSort b +teleLam :: Telescope -> Term -> Term+teleLam  EmptyTel	  t = t+teleLam (ExtendTel u tel) t = Lam (argHiding u) $ flip teleLam t <$> tel++-- | Dependent least upper bound, to assign a level to expressions+--   like @forall i -> Set i@.+--+--   @dLub s1 \i.s2 = \omega@ if @i@ appears in the rigid variables of @s2@. dLub :: Sort -> Abs Sort -> Sort-dLub s1 s2-  | 0 `Set.member` rv = Inf-  | 0 `Set.member` fv = DLub s1 s2-  | otherwise         = sLub s1 (absApp s2 __IMPOSSIBLE__)+dLub s1 (NoAbs _ s2) = sLub s1 s2+dLub s1 b@(Abs _ s2) = case occurrence 0 $ freeVars s2 of+  Flexible      -> DLub s1 b+  NoOccurrence  -> sLub s1 (absApp b __IMPOSSIBLE__)+  StronglyRigid -> Inf+  WeaklyRigid   -> Inf++-- Functions on abstractions ----------------------------------------------+--   and things we couldn't do before we could define 'absBody'++-- | Instantiate an abstraction+absApp :: Subst t => Abs t -> Term -> t+absApp (Abs   _ v) u = subst u v+absApp (NoAbs _ v) _ = v++absBody :: Raise t => Abs t -> t+absBody (Abs   _ v) = v+absBody (NoAbs _ v) = raise 1 v++mkAbs :: (Raise a, Free a) => String -> a -> Abs a+mkAbs x v | 0 `freeIn` v = Abs x v+          | otherwise    = NoAbs x (raise (-1) v)++reAbs :: (Raise a, Free a) => Abs a -> Abs a+reAbs (NoAbs x v) = NoAbs x v+reAbs (Abs x v)   = mkAbs x v++deriving instance (Raise a, Eq a) => Eq (Tele a)+deriving instance (Raise a, Ord a) => Ord (Tele a)++deriving instance Eq Sort+deriving instance Ord Sort+deriving instance Eq Type+deriving instance Ord Type+deriving instance Ord Term+deriving instance Eq Level+deriving instance Ord Level+deriving instance Eq PlusLevel+deriving instance Ord LevelAtom+deriving instance Eq Elim+deriving instance Ord Elim++deriving instance Eq Constraint++instance Ord PlusLevel where+  compare ClosedLevel{} Plus{}            = LT+  compare Plus{} ClosedLevel{}            = GT+  compare (ClosedLevel n) (ClosedLevel m) = compare n m+  -- Compare on the atom first. Makes most sense for levelMax.+  compare (Plus n a) (Plus m b)           = compare (a,n) (b,m)++instance Eq LevelAtom where+  (==) = (==) `on` unLevelAtom++-- | Syntactic equality, ignores stuff below @DontCare@.+instance Eq Term where+  Var x vs   == Var x' vs'   = x == x' && vs == vs'+  Lam h v    == Lam h' v'    = h == h' && v  == v'+  Lit l      == Lit l'       = l == l'+  Def x vs   == Def x' vs'   = x == x' && vs == vs'+  Con x vs   == Con x' vs'   = x == x' && vs == vs'+  Pi a b     == Pi a' b'     = a == a' && b == b'+  Sort s     == Sort s'      = s == s'+  Level l    == Level l'     = l == l'+  MetaV m vs == MetaV m' vs' = m == m' && vs == vs'+  DontCare _ == DontCare _   = True+  _          == _            = False++instance (Raise a, Eq a) => Eq (Abs a) where+  NoAbs _ a == NoAbs _ b = a == b+  Abs   _ a == Abs   _ b = a == b+  a         == b         = absBody a == absBody b++instance (Raise a, Ord a) => Ord (Abs a) where+  NoAbs _ a `compare` NoAbs _ b = a `compare` b+  Abs   _ a `compare` Abs   _ b = a `compare` b+  a         `compare` b         = absBody a `compare` absBody b++-- Level stuff ------------------------------------------------------------++sLub :: Sort -> Sort -> Sort+sLub s Prop = s+sLub Prop s = s+sLub Inf _ = Inf+sLub _ Inf = Inf+sLub (Type (Max as)) (Type (Max bs)) = Type $ levelMax (as ++ bs)+sLub (DLub a b) c = DLub (sLub a c) b+sLub a (DLub b c) = DLub (sLub a b) c++lvlView :: Term -> Level+lvlView (Level l)       = l+lvlView (Sort (Type l)) = l+lvlView v               = Max [Plus 0 $ UnreducedLevel v]++levelMax :: [PlusLevel] -> Level+levelMax as0 = Max $ ns ++ List.sort bs   where-    vs = freeVars (absBody s2)-    fv = flexibleVars vs-    rv = rigidVars vs+    as = Prelude.concatMap expand as0+    ns = case [ n | ClosedLevel n <- as, n > 0 ] of+      []  -> []+      ns  -> [ ClosedLevel n | n <- [Prelude.maximum ns], n > leastB ]+    bs = subsume [ b | b@Plus{} <- as ]+    leastB | null bs   = 0+           | otherwise = Prelude.minimum [ n | Plus n _ <- bs ]++    expand l@ClosedLevel{} = [l]+    expand (Plus n l) = map (plus n) $ expand0 $ expandAtom l++    expand0 [] = [ClosedLevel 0]+    expand0 as = as++    expandAtom (BlockedLevel _ (Level (Max as)))       = as+    expandAtom (NeutralLevel   (Level (Max as)))       = as+    expandAtom (UnreducedLevel (Level (Max as)))       = as+    expandAtom (BlockedLevel _ (Sort (Type (Max as)))) = as+    expandAtom (NeutralLevel   (Sort (Type (Max as)))) = as+    expandAtom (UnreducedLevel (Sort (Type (Max as)))) = as+    expandAtom l                                       = [Plus 0 l]++    plus n (ClosedLevel m) = ClosedLevel (n + m)+    plus n (Plus m l)      = Plus (n + m) l++    subsume (ClosedLevel{} : _) = __IMPOSSIBLE__+    subsume [] = []+    subsume (Plus n a : bs)+      | not $ null ns = subsume bs+      | otherwise     = Plus n a : subsume [ b | b@(Plus _ a') <- bs, a /= a' ]+      where+        ns = [ m | Plus m a'  <- bs, a == a', m > n ]++sortTm :: Sort -> Term+sortTm (Type l) = Sort $ levelSort l+sortTm s        = Sort s++levelSort :: Level -> Sort+levelSort (Max as)+  | List.any isInf as = Inf+  where+    isInf ClosedLevel{}        = False+    isInf (Plus _ l)           = infAtom l+    infAtom (NeutralLevel a)   = infTm a+    infAtom (UnreducedLevel a) = infTm a+    infAtom MetaLevel{}        = False+    infAtom BlockedLevel{}     = False+    infTm (Sort Inf)           = True+    infTm _                    = False+levelSort l =+  case levelTm l of+    Sort s -> s+    _      -> Type l++levelTm :: Level -> Term+levelTm l =+  case l of+    Max [Plus 0 l] -> unLevelAtom l+    _              -> Level l++unLevelAtom (MetaLevel x vs)   = MetaV x vs+unLevelAtom (NeutralLevel v)   = v+unLevelAtom (UnreducedLevel v) = v+unLevelAtom (BlockedLevel _ v) = v+
src/full/Agda/TypeChecking/Telescope.hs view
@@ -3,8 +3,6 @@ module Agda.TypeChecking.Telescope where  import Control.Applicative-import Data.Set (Set)-import qualified Data.Set as Set import Data.List  import Agda.Syntax.Common@@ -18,13 +16,16 @@ import Agda.Utils.Permutation import Agda.Utils.Size import Agda.Utils.Tuple+import Agda.Utils.VarSet (VarSet)+import qualified Agda.Utils.VarSet as Set  #include "../undefined.h" import Agda.Utils.Impossible +-- TODO: use rename instead of substs -- | The permutation should permute the corresponding telescope. (left-to-right list)-rename :: Subst t => Permutation -> t -> t-rename p = substs (renaming p)+renameP :: Subst t => Permutation -> t -> t+renameP p = substs (renaming p)  -- | If @permute π : [a]Γ -> [a]Δ@, then @substs (renaming π) : Term Γ -> Term Δ@ renaming :: Permutation -> [Term]@@ -48,14 +49,17 @@  -- | Order a flattened telescope in the correct dependeny order: Γ -> --   Permutation (Γ -> Γ~)-reorderTel :: [Arg Type] -> Permutation-reorderTel tel = case topoSort comesBefore tel' of-  Nothing -> __IMPOSSIBLE__-  Just p  -> p+reorderTel :: [Arg Type] -> Maybe Permutation+reorderTel tel = topoSort comesBefore tel'   where     tel' = reverse $ zip [0..] $ reverse tel     (i, _) `comesBefore` (_, a) = i `freeIn` unEl (unArg a) -- a tiny bit unsafe +reorderTel_ :: [Arg Type] -> Permutation+reorderTel_ tel = case reorderTel tel of+  Nothing -> __IMPOSSIBLE__+  Just p  -> p+ -- | Unflatten: turns a flattened telescope into a proper telescope. Must be --   properly ordered. unflattenTel :: [String] -> [Arg Type] -> Telescope@@ -89,7 +93,7 @@  -- | Split a telescope into the part that defines the given variables and the --   part that doesn't.-splitTelescope :: Set Nat -> Telescope -> SplitTel+splitTelescope :: VarSet -> Telescope -> SplitTel splitTelescope fv tel = SplitTel tel1 tel2 perm   where     names = teleNames tel@@ -103,11 +107,11 @@     isC   = [0..n - 1] \\ is     perm0 = Perm n $ is ++ isC -    permuteTel p ts = rename (reverseP p) (permute p ts)+    permuteTel p ts = renameP (reverseP p) (permute p ts)      ts1   = permuteTel perm0 ts0 -    perm1 = reorderTel ts1+    perm1 = reorderTel_ ts1      ts2   = permuteTel perm1 ts1 @@ -119,43 +123,27 @@     m         = genericLength $ takeWhile (`notElem` is) (reverse js)     (tel1, tel2) = telFromList -*- telFromList $ genericSplitAt (n - m) $ telToList tel' -{- Andreas 2010-10-01: this comment seems stale.  Where is the unsafe variant?--- | A safe variant of telView.--OLD CODE:-telView :: MonadTCM tcm => Type -> tcm TelView-telView t = do-  t <- reduce t-  case unEl t of-    Pi a (Abs x b) -> absV a x   <$> telView b-    Fun a b	   -> absV a "_" <$> telView (raise 1 b)-    _		   -> return $ TelV EmptyTel t-  where-    absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t--}-telView :: MonadTCM tcm => Type -> tcm TelView+telView :: Type -> TCM TelView telView = telViewUpTo (-1)  -- | @telViewUpTo n t@ takes off the first @n@ function types of @t@. -- Takes off all if $n < 0$.-telViewUpTo :: MonadTCM tcm => Int -> Type -> tcm TelView+telViewUpTo :: Int -> Type -> TCM TelView telViewUpTo 0 t = return $ TelV EmptyTel t telViewUpTo n t = do   t <- reduce t   case unEl t of-    Pi a (Abs x b) -> absV a x   <$> telViewUpTo (n-1) b-    Fun a b	   -> absV a "_" <$> telViewUpTo (n-1) (raise 1 b)-    _		   -> return $ TelV EmptyTel t+    Pi a b -> absV a (absName b) <$> telViewUpTo (n - 1) (absBody b)+    _      -> return $ TelV EmptyTel t   where     absV a x (TelV tel t) = TelV (ExtendTel a (Abs x tel)) t  -- | A safe variant of piApply. -piApplyM :: MonadTCM tcm => Type -> Args -> tcm Type+piApplyM :: Type -> Args -> TCM Type piApplyM t []           = return t piApplyM t (arg : args) = do   t <- reduce t   case (t, arg) of     (El _ (Pi  _ b), arg) -> absApp b (unArg arg) `piApplyM` args-    (El _ (Fun _ b), _  ) -> b `piApplyM` args     _                     -> __IMPOSSIBLE__
src/full/Agda/TypeChecking/Test/Generators.hs view
@@ -8,7 +8,6 @@ import Control.Applicative import Control.Monad import Control.Monad.State-import qualified Data.Set as Set import qualified Data.List as List (sort, nub) import Agda.Utils.QuickCheck hiding (Args) @@ -23,6 +22,7 @@ import Agda.Utils.TestHelpers import Agda.Utils.Monad import Agda.Utils.QuickCheck hiding (Args)+import qualified Agda.Utils.VarSet as Set  #include "../../undefined.h" import Agda.Utils.Impossible@@ -252,7 +252,6 @@ 	, (sortF, Sort <$> genC conf) 	, (lamF,  genLam) 	, (piF,	  genPi)-	, (funF,  genFun) 	]     where       defs    = tcDefinedNames conf@@ -276,7 +275,6 @@ 	    | otherwise = freq (lamFreq  . termFreqs)       sortF = freq (sortFreq . termFreqs)       piF   = freq (piFreq   . termFreqs)-      funF  = freq (funFreq  . termFreqs)        genLam :: Gen Term       genLam = Lam <$> genC conf <*> genC (isntTypeConf $ decrConf conf)@@ -284,9 +282,6 @@       genPi :: Gen Term       genPi = uncurry Pi <$> genC conf -      genFun :: Gen Term-      genFun = uncurry Fun <$> genC conf-       genVar, genDef, genCon :: Gen Args -> Gen Term       genVar args = Var <$> elements vars <*> args       genDef args = Def <$> elements defs <*> args@@ -383,7 +378,6 @@ instance ShrinkC Literal Literal where   shrinkC _ (LitInt _ 0) = []   shrinkC conf l	 = LitInt noRange 0 : case l of-      LitLevel  r n -> LitLevel  r <$> shrink n       LitInt    r n -> LitInt    r <$> shrink n       LitString r s -> LitString r <$> shrinkC conf s       LitChar   r c -> LitChar   r <$> shrinkC conf c@@ -398,11 +392,13 @@  instance ShrinkC Hiding Hiding where   shrinkC _ Hidden    = [NotHidden]+  shrinkC _ Instance  = [Instance]   shrinkC _ NotHidden = []   noShrink = id  instance ShrinkC a b => ShrinkC (Abs a) (Abs b) where-  shrinkC conf (Abs s x) = Abs s <$> shrinkC (extendConf conf) x+  shrinkC conf (NoAbs s x) = NoAbs s <$> shrinkC conf x+  shrinkC conf (Abs   s x) = Abs s <$> shrinkC (extendConf conf) x   noShrink = fmap noShrink  instance ShrinkC a b => ShrinkC (Arg a) (Arg b) where@@ -419,10 +415,7 @@ instance ShrinkC Sort Sort where   shrinkC conf Prop = []   shrinkC conf s = Prop : case s of-    Type n     -> Type <$> shrinkC conf n-    Lub s1 s2  -> s1 : s2 : (uncurry Lub <$> shrinkC conf (s1, s2))-    Suc s      -> s : (Suc <$> shrinkC conf s)-    MetaS m _  -> []+    Type n     -> [] -- No Level instance yet -- Type <$> shrinkC conf n     Prop       -> __IMPOSSIBLE__     Inf        -> []     DLub s1 s2 -> __IMPOSSIBLE__@@ -439,9 +432,9 @@   noShrink = id  instance ShrinkC Term Term where-  shrinkC conf (DontCare)  = []+  shrinkC conf (DontCare _)  = []   shrinkC conf (Sort Prop) = []-  shrinkC conf t	   = filter validType $ DontCare : case t of+  shrinkC conf t	   = filter validType $ case t of     Var i args   -> map unArg args ++ 		    (uncurry Var <$> shrinkC conf (VarName i, NoType args))     Def d args   -> map unArg args ++@@ -449,14 +442,13 @@     Con d args   -> map unArg args ++ 		    (uncurry Con <$> shrinkC conf (ConName d, NoType args))     Lit l	 -> Lit <$> shrinkC conf l+    Level l      -> [] -- TODO     Lam h b      -> killAbs b : (uncurry Lam <$> shrinkC conf (h, b))     Pi a b       -> unEl (unArg a) : unEl (killAbs b) : 		    (uncurry Pi <$> shrinkC conf (a, b))-    Fun a b      -> unEl (unArg a) : unEl b :-		    (uncurry Fun <$> shrinkC conf (a, b))     Sort s       -> Sort <$> shrinkC conf s     MetaV m args -> map unArg args ++ (MetaV m <$> shrinkC conf (NoType args))-    DontCare     -> __IMPOSSIBLE__+    DontCare _   -> []     where       validType t 	| not (tcIsType conf) = True@@ -468,25 +460,26 @@   noShrink = id  killAbs :: KillVar a => Abs a -> a-killAbs (Abs _ x) = killVar 0 x+killAbs (Abs   _ x) = killVar 0 x+killAbs (NoAbs _ x) = x  class KillVar a where   killVar :: Nat -> a -> a  instance KillVar Term where   killVar i t = case t of-    Var j args | j == i	   -> DontCare+    Var j args | j == i	   -> DontCare (Var j []) 	       | j >  i	   -> Var (j - 1) $ killVar i args 	       | otherwise -> Var j	  $ killVar i args     Def c args		   -> Def c	  $ killVar i args     Con c args		   -> Con c	  $ killVar i args     Lit l		   -> Lit l+    Level l                -> Level l -- TODO     Sort s		   -> Sort s     Lam h b		   -> Lam h	  $ killVar i b     Pi a b		   -> uncurry Pi  $ killVar i (a, b)-    Fun a b		   -> uncurry Fun $ killVar i (a, b)     MetaV m args	   -> MetaV m	  $ killVar i args-    DontCare               -> DontCare+    DontCare mv            -> DontCare    $ killVar i mv  instance KillVar Type where   killVar i (El s t) = El s $ killVar i t@@ -503,6 +496,9 @@  instance KillVar a => KillVar [a] where   killVar i = map (killVar i)++instance KillVar a => KillVar (Maybe a) where+  killVar i = fmap (killVar i)  instance (KillVar a, KillVar b) => KillVar (a, b) where   killVar i (x, y) = (killVar i x, killVar i y)
src/full/Agda/TypeChecking/Tests.hs view
@@ -1,6 +1,6 @@ module Agda.TypeChecking.Tests where -import qualified Data.Set as Set+import qualified Agda.Utils.VarSet as Set import Agda.Utils.QuickCheck  import Agda.Syntax.Internal@@ -41,7 +41,7 @@ prop_reorderTelStable :: TermConfiguration -> Property prop_reorderTelStable conf =   forAll (genC conf) $ \tel ->-  reorderTel (flattenTel tel) == idP (size tel)+  reorderTel (flattenTel tel) == Just (idP (size tel))  -- | The result of splitting a telescope is well-scoped. prop_splitTelescopeScope :: TermConfiguration -> Property
src/full/Agda/TypeChecking/UniversePolymorphism.hs view
@@ -13,76 +13,17 @@ import Agda.TypeChecking.Pretty import Agda.TypeChecking.Reduce import Agda.TypeChecking.Monad.Builtin+import Agda.TypeChecking.Conversion import qualified Agda.Utils.Warshall as W  import Agda.Utils.Impossible  #include "../undefined.h" -mlevel :: MonadTCM tcm => tcm (Maybe Term)-mlevel = liftTCM $ (Just <$> primLevel) `catchError` \_ -> return Nothing--compareLevel :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints-compareLevel cmp u v = do-  reportSDoc "tc.conv.level" 10 $ vcat-    [ text "Comparing levels"-    , nest 2 $ sep [ prettyTCM u <+> prettyTCM cmp-                   , prettyTCM v-                   ]-    ]-  u <- reduce u-  v <- reduce v-  reportSDoc "tc.conv.level" 15 $-      nest 2 $ sep [ text (show u) <+> prettyTCM cmp-                   , text (show v)-                   ]-  let unMax (Max [a]) = a-      unMax _         = __IMPOSSIBLE__-  l1' <- unMax <$> levelView u-  l2' <- unMax <$> levelView v--  let bad = typeError $ UnequalLevel cmp u v--  let c  = min (constant l1') (constant l2')-      l1 = minus l1 c-      l2 = minus l2 c--  case (cmp, l1, l2) of-    (cmp, ClosedLevel n, ClosedLevel m) ->-      case cmp of-        CmpEq  | n == m -> return []-        CmpLeq | n <= m -> return []-        _               -> bad-    (CmpLeq, ClosedLevel 0, _) -> return []-    _ -> buildConstraint $ LevelCmp cmp u v-  where-    constant (ClosedLevel n) = n-    constant (Plus n _)      = n--    minus (ClosedLevel n) m = ClosedLevel (n - m)-    minus (Plus n l) m      = Plus (n - m) l+compareLevel :: Comparison -> Level -> Level -> TCM ()+compareLevel CmpLeq u v = leqLevel u v+compareLevel CmpEq  u v = equalLevel u v  isLevelConstraint LevelCmp{} = True isLevelConstraint _          = False -warshallConstraint :: Constraint -> TCM [W.Constraint]-warshallConstraint (LevelCmp cmp a b) = do-  -- produce constraints-  return []-warshallConstraint _ = __IMPOSSIBLE__--solveLevelConstraints :: TCM ()-solveLevelConstraints = do-  cs <- takeConstraints-  let (lcs, rest) = partition (isLevelConstraint . clValue) cs--  lcs <- concat <$> mapM warshallConstraint (map clValue lcs)--  let msol = W.solve lcs--  case msol of-    Nothing  -> typeError $ GenericError "Bad universe levels! No further information provided. You suck!"-    Just sol -> do-      -- do something interesting with the solution-      addConstraints rest-      return ()
src/full/Agda/TypeChecking/UniversePolymorphism.hs-boot view
@@ -4,5 +4,4 @@ import Agda.Syntax.Internal import Agda.TypeChecking.Monad -compareLevel :: MonadTCM tcm => Comparison -> Term -> Term -> tcm Constraints-+compareLevel :: Comparison -> Level -> Level -> TCM ()
src/full/Agda/TypeChecking/With.hs view
@@ -42,6 +42,14 @@     vs <- etaContract =<< normalise vs     as <- etaContract =<< normalise as     b  <- etaContract =<< normalise (telePi_ delta2 b)+    reportSDoc "tc.with.abstract" 40 $+      sep [ text "abstracting"+          , nest 2 $ vcat $+            [ text "vs = " <+> prettyTCM vs+            , text "as = " <+> prettyTCM as+            , text "b  = " <+> prettyTCM b ]+          ]+    reportSLn "tc.with.abstract" 50 $ "  raw vs = " ++ show vs ++ "\n  raw b  = " ++ show b     return (zip vs as, b)   return $ telePi_ delta1 $ foldr (uncurry piAbstractTerm) b vas @@ -150,7 +158,7 @@              -- Compute the argument telescope for the constructor             Con c []    <- constructorForm =<< normalise (Con c [])-            Defn _ _ ct _ _ Constructor{conPars = np}  <- getConstInfo c+            Defn {defType = ct, theDef = Constructor{conPars = np}}  <- getConstInfo c             let ct' = ct `apply` genericTake np us             TelV tel' _ <- telView ct' @@ -194,16 +202,19 @@ --   applications of the with function as applications to the original function. --   For instance, @aux a b c@ as @f (suc a) (suc b) | c@ withDisplayForm :: QName -> QName -> Telescope -> Telescope -> Nat -> [Arg Pattern] -> Permutation -> TCM DisplayForm-withDisplayForm f aux delta1 delta2 n qs perm = do+withDisplayForm f aux delta1 delta2 n qs perm@(Perm m _) = do   topArgs <- raise (n + size delta1 + size delta2) <$> getContextArgs   x <- freshNoName_   let wild = Def (qualify (mnameFromList []) x) []    let top = genericLength topArgs-      vs = topArgs ++ raiseFrom (size delta2) n (substs (sub wild) $ patsToTerms qs)-      dt = DWithApp (map DTerm $ Def f vs : withArgs) []+      vs = map (fmap DTerm) topArgs ++ (substs (sub ys wild) $ patsToTerms qs)+      dt = DWithApp (DDef f vs : map DTerm withArgs) []       withArgs = reverse $ map var [size delta2..size delta2 + n - 1]       pats = genericReplicate (n + size delta1 + size delta2 + top) (Var 0 [])+      -- Building the arguments to the with function+      (ys0, ys1) = splitAt (size delta1) (permute perm $ map Just [m - 1, m - 2..0])+      ys = reverse $ ys0 ++ genericReplicate n Nothing ++ ys1    let display = Display (n + size delta1 + size delta2 + top) pats dt @@ -214,43 +225,33 @@       , text "aux    =" <+> text (show aux)       , text "delta1 =" <+> prettyTCM delta1       , text "delta2 =" <+> prettyTCM delta2+      , text "n      =" <+> text (show n)       , text "perm   =" <+> text (show perm)+      , text "top    =" <+> prettyTCM topArgs+      , text "qs     =" <+> text (show qs)       , text "dt     =" <+> prettyTCM dt+      , text "ys     =" <+> text (show ys)       , text "raw    =" <+> text (show display)       , text "qsToTm =" <+> prettyTCM (patsToTerms qs)-      , text "sub qs =" <+> prettyTCM (substs (sub wild) $ patsToTerms qs)+      , text "sub qs =" <+> prettyTCM (substs (sub ys wild) $ patsToTerms qs)       ]     ]    return display   where     var i = Var i []-    sub wild = map term [0..] -- m - 1]+    sub rho wild = map term [0..] -- m - 1]       where-        Perm m xs = reverseP perm-        -- Perm m xs = perm    -- thinking required.. but ignored-                            -- dropping the reverse seems to work better-                            -- Andreas, 2010-09-09: I DISAGREE.-        term i = case findIndex (i ==) xs of+        -- thinking required.. but ignored+        -- dropping the reverse seems to work better+        -- Andreas, 2010-09-09: I DISAGREE.+        -- Ulf, 2011-09-02: Thinking done. Neither was correct.+        -- We had the wrong permutation and we used it incorrectly. Should work now.+        term i = case findIndex (Just i ==) rho of           Nothing -> wild           Just j  -> Var (fromIntegral j) [] -{- example (test/fail/Issue295.agda)--  aux  = aux d w a b c-  delta1 = d-  delta2 = a b c-  perm = x0,x1,x2,x3 -> x3,x0,x1,x2-  perm = a,b,c,d -> d,a,b,c-WIHOUT reverseP IS:-  dt   = (@0 ⟶ @4) ﹔ (@2 ⟶ @1) | @3-  dt   = (c ⟶ d) ﹔ (a ⟶ b) | w-WITH reverseP IS, AS IT SHOULD:-  dt   = (a ⟶ b) ﹔ (c ⟶ d) | w-  dt   = (@2 ⟶ @1) ﹔ (@0 ⟶ @4) | @3--}--patsToTerms :: [Arg Pattern] -> [Arg Term]+patsToTerms :: [Arg Pattern] -> [Arg DisplayTerm] patsToTerms ps = evalState (toTerms ps) 0   where     mapMr f xs = reverse <$> mapM f (reverse xs)@@ -261,31 +262,15 @@       put (i + 1)       return i -    toTerms :: [Arg Pattern] -> State Nat [Arg Term]+    toTerms :: [Arg Pattern] -> State Nat [Arg DisplayTerm]     toTerms ps = mapMr toArg ps -    toArg :: Arg Pattern -> State Nat (Arg Term)+    toArg :: Arg Pattern -> State Nat (Arg DisplayTerm)     toArg = T.mapM toTerm -    toTerm :: Pattern -> State Nat Term+    toTerm :: Pattern -> State Nat DisplayTerm     toTerm p = case p of-      VarP _      -> var >>= \i -> return $ Var i []-      DotP t      -> return t-      ConP c _ ps -> Con c <$> toTerms ps-      LitP l      -> return $ Lit l--data ConPos = Here-            | ArgPat Int ConPos--updateWithConstructorRanges ::-  [Telescope] -> [Arg Pattern] -> A.RHS -> [Arg Pattern]-updateWithConstructorRanges tel ps A.RHS{}            = ps-updateWithConstructorRanges tel ps A.AbsurdRHS{}      = ps-updateWithConstructorRanges tel ps (A.WithRHS _ _ cs) = ps-updateWithConstructorRanges tel ps A.RewriteRHS{}     = ps--constructorsInClauses :: ConPos -> [A.Clause] -> [Range]-constructorsInClauses pos cs = concatMap (constructorsInClause pos) cs--constructorsInClause :: ConPos -> A.Clause -> [Range]-constructorsInClause pos (A.Clause (A.LHS _ _ ps wps) rhs _) = []+      VarP _      -> var >>= \i -> return $ DTerm (Var i [])+      DotP t      -> return $ DDot t+      ConP c _ ps -> DCon c <$> toTerms ps+      LitP l      -> return $ DTerm (Lit l)
src/full/Agda/Utils/FileName.hs view
@@ -100,7 +100,7 @@ instance Arbitrary AbsolutePath where   arbitrary = mk . take 3 . map (take 2) <$>                 listOf (listOf1 (elements "a1"))-    where mk ps = AbsolutePath (joinPath $ rootPath : ps)+    where mk ps = mkAbsolute (joinPath $ rootPath : ps)  ------------------------------------------------------------------------ -- All tests
src/full/Agda/Utils/Generics.hs view
@@ -1,9 +1,20 @@ {-# LANGUAGE Rank2Types #-}-{-| Contains some generic utility functions.+{-| Contains some generic utility functions and reexports certain+    definitions from "Data.Generics". -}-module Agda.Utils.Generics where+module Agda.Utils.Generics+  ( module Data.Generics+  , isString+  , everythingBut+  , everywhereBut'+  , everywhereButM'+  ) where +-- The explicit import list is included in order to support several+-- versions of syb; one version of syb contains a definition named+-- everythingBut. import Data.Generics+  (GenericQ, mkQ, extQ, gmapQ, GenericT, gmapT, GenericM, gmapM)  isString :: GenericQ Bool isString = mkQ False (const True :: String -> Bool)
src/full/Agda/Utils/Graph.hs view
@@ -1,4 +1,4 @@-+{-# LANGUAGE DeriveFunctor #-} module Agda.Utils.Graph where  import qualified Data.Map as Map@@ -10,6 +10,7 @@  -- Only one edge between any two nodes. newtype Graph n e = Graph { unGraph :: Map n (Map n e) }+  deriving (Eq, Functor)  edges :: Ord n => Graph n e -> [(n, n, e)] edges g = concatMap onNode $ Map.assocs $ unGraph g@@ -53,9 +54,14 @@         Just es -> Graph $ Map.singleton a $ Map.map (otimes w) es         Nothing -> empty -transitiveClosure :: (SemiRing e, Ord n) => Graph n e -> Graph n e-transitiveClosure g = iterate growGraph g !! n-  where n = Set.size $ nodes g+transitiveClosure :: (Eq e, SemiRing e, Ord n) => Graph n e -> Graph n e+transitiveClosure g = loop g+  where -- n = Set.size $ nodes g+    loop g | g == g'   = g+           | otherwise = loop g'+      where+        g' = growGraph g+  findPath :: (SemiRing e, Ord n) => (e -> Bool) -> n -> n -> Graph n e -> Maybe e findPath good a b g = case filter good $ allPaths good a b g of
src/full/Agda/Utils/IO/UTF8.hs view
@@ -4,6 +4,7 @@  module Agda.Utils.IO.UTF8   ( readTextFile+  , Agda.Utils.IO.UTF8.hPutStr   , Agda.Utils.IO.UTF8.writeFile   ) where @@ -30,14 +31,26 @@   UTF8.readFile file #endif +-- | Writes UTF8-encoded text to the handle, which should be opened+-- for writing and in text mode. The native convention for line+-- endings is used.++hPutStr :: IO.Handle -> String -> IO ()+#if MIN_VERSION_base(4,2,0)+hPutStr h s = do+  IO.hSetEncoding h IO.utf8+  IO.hPutStr h s+#else+hPutStr = UTF8.hPutStr+#endif+ -- | Writes a UTF8-encoded text file. The native convention for line -- endings is used.  writeFile :: FilePath -> String -> IO () #if MIN_VERSION_base(4,2,0) writeFile file s = IO.withFile file IO.WriteMode $ \h -> do-  IO.hSetEncoding h IO.utf8-  IO.hPutStr h s+  hPutStr h s #else writeFile = UTF8.writeFile #endif
src/full/Agda/Utils/List.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-}  {-| Utitlity functions on lists. -}@@ -13,10 +14,22 @@ import Data.Maybe import qualified Data.Set as Set +#include "../undefined.h"+import Agda.Utils.Impossible++-- | Head function (safe). mhead :: [a] -> Maybe a mhead []    = Nothing mhead (x:_) = Just x +-- | Sublist relation.+isSublistOf :: Eq a => [a] -> [a] -> Bool+isSublistOf []       ys = True+isSublistOf (x : xs) ys =+  case dropWhile (x /=) ys of+    []     -> False+    (_:ys) -> isSublistOf xs ys+ type Prefix a = [a] type Suffix a = [a] @@ -142,6 +155,32 @@   classify (x `elem` xs) "members" $     genericElemIndex x xs == elemIndex x xs +-- | Requires both lists to have the same length.++zipWith' :: (a -> b -> c) -> [a] -> [b] -> [c]+zipWith' f []        []      = []+zipWith' f (x : xs) (y : ys) = f x y : zipWith' f xs ys+zipWith' f []       (_ : _)  = {- ' -} __IMPOSSIBLE__+zipWith' f (_ : _)  []       = {- ' -} __IMPOSSIBLE__++prop_zipWith' :: (Integer -> Integer -> Integer) -> Property+prop_zipWith' f =+  forAll natural $ \n ->+    forAll (two $ vector n) $ \(xs, ys) ->+      zipWith' f xs ys == zipWith f xs ys++-- | Efficient version of nub that sorts the list first. The tag function is+--   assumed to be cheap. If it isn't pair up the elements with their tags and+--   call uniqBy fst (or snd).+uniqBy :: Ord b => (a -> b) -> [a] -> [a]+uniqBy tag =+  map head+  . groupBy ((==) `on` tag)+  . sortBy (compare `on` tag)++prop_uniqBy :: [Integer] -> Bool+prop_uniqBy xs = sort (nub xs) == uniqBy id xs+ ------------------------------------------------------------------------ -- All tests @@ -151,4 +190,6 @@   , quickCheck' prop_groupBy'   , quickCheck' prop_extractNthElement   , quickCheck' prop_genericElemIndex+  , quickCheck' prop_zipWith'+  , quickCheck' prop_uniqBy   ]
src/full/Agda/Utils/Monad.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE FlexibleContexts, CPP #-}+{-# LANGUAGE FlexibleContexts #-}  module Agda.Utils.Monad     ( module Agda.Utils.Monad@@ -14,12 +14,11 @@ import qualified Control.Monad.State.Strict as SS import Control.Monad.Writer import Control.Applicative-import Data.Traversable+import Data.Traversable hiding (sequence) import Data.Foldable import Data.Monoid -#include "../undefined.h"-import Agda.Utils.Impossible+import Agda.Utils.List  -- Monads ----------------------------------------------------------------- @@ -69,10 +68,7 @@  -- | Requires both lists to have the same lengths. zipWithM' :: Monad m => (a -> b -> m c) -> [a] -> [b] -> m [c]-zipWithM' f []	     []	      = return []-zipWithM' f (x : xs) (y : ys) = liftM2 (:) (f x y) (zipWithM' f xs ys)-zipWithM' f []	     (_ : _)  = {- ' -} __IMPOSSIBLE__-zipWithM' f (_ : _)  []	      = {- ' -} __IMPOSSIBLE__+zipWithM' f xs ys = sequence (zipWith' f xs ys)  -- | Finally for the 'Error' class. Errors in the finally part take -- precedence over prior errors.
src/full/Agda/Utils/ReadP.hs view
@@ -6,7 +6,7 @@ -- The changes are:  --  1) ReadP is parameterised over the token type (hard-wired to 'Char' in the library).---  2) Added a 'parse' function to run a parser.+--  2) Added the functions 'parse' and 'parse'' which run parsers. --  3) Removed Read instances.  -- Module      :  "Text.ParserCombinators.ReadP"@@ -39,6 +39,7 @@    -- * Parse   parse,      -- :: ReadP tok a -> [tok] -> [a]+  parse',     -- :: ReadP tok a -> [tok] -> Either a [tok]    -- * Other operations   pfail,      -- :: ReadP a@@ -394,6 +395,20 @@ --   parser, and therefore a possible inefficiency. readS_to_P r =   R (\k -> Look (\s -> final [bs'' | (a,s') <- r s, bs'' <- run (k a) s']))++-- ---------------------------------------------------------------------------+-- A variant on parse which returns either a result, or the unparseable text.++run' :: P t a -> [t] -> Either a [t]+run' (Get f)           (c:s) = run' (f c) s+run' (Look f)          s     = run' (f s) s+run' (Result x _)      _     = Left x+run' (Final ((x,_):_)) _     = Left x+run' _                 s     = Right s++parse' :: ReadP t a -> [t] -> Either a [t]+parse' p ts = case complete p of+    R f	-> run' (f return) ts  -- --------------------------------------------------------------------------- -- QuickCheck properties that hold for the combinators
src/full/Agda/Utils/Size.hs view
@@ -18,3 +18,7 @@  instance Sized (Set a) where   size = fromIntegral . Set.size++instance Sized a => Sized (Maybe a) where+  size Nothing  = 1+  size (Just a) = size a
src/full/Agda/Utils/String.hs view
@@ -33,7 +33,7 @@ -- | Shows a non-negative integer using the characters ₀-₉ instead of -- 0-9. -showIndex :: Integral i => i -> String+showIndex :: (Show i, Integral i) => i -> String showIndex n =   showIntAtBase 10 (\i -> toEnum (i + fromEnum '\x2080')) n "" 
+ src/full/Agda/Utils/VarSet.hs view
@@ -0,0 +1,54 @@++-- | Var field implementation of sets of (small) natural numbers.+module Agda.Utils.VarSet+  ( VarSet+  , union, unions, member, empty, delete, singleton, fromList, toList, isSubsetOf+  , Agda.Utils.VarSet.subtract+  )+  where++import Data.Set as Set++type VarSet = Set Integer++subtract :: Integer -> VarSet -> VarSet+subtract n s = Set.mapMonotonic (Prelude.subtract n) s++{-+import Data.Bits++type VarSet = Integer+type Var    = Integer++union :: VarSet -> VarSet -> VarSet+union = (.|.)++member :: Var -> VarSet -> Bool+member b s = testVar s (fromIntegral b)++empty :: VarSet+empty = 0++delete :: Var -> VarSet -> VarSet+delete b s = clearVar s (fromIntegral b)++singleton :: Var -> VarSet+singleton = bit++subtract :: Int -> VarSet -> VarSet+subtract n s = shiftR s n++fromList :: [Var] -> VarSet+fromList = foldr (union . singleton . fromIntegral) empty++isSubsetOf :: VarSet -> VarSet -> Bool+isSubsetOf s1 s2 = 0 == (s1 .&. complement s2)++toList :: VarSet -> [Var]+toList s = loop 0 s+  where+    loop i 0 = []+    loop i n+      | testVar n 0 = fromIntegral i : (loop $! i + 1) (shiftR n 1)+      | otherwise   = (loop $! i + 1) (shiftR n 1)+-}